1
0

Updated OpenGraph metadata

Fixed target="_blank" security issue
This commit is contained in:
Michael Gordeev
2020-06-19 14:23:49 +03:00
parent 4bcf227f6a
commit 398a16b596
22 changed files with 1450 additions and 1395 deletions
@@ -1,52 +1,52 @@
@model MyWebsite.Models.LinkModel
@{
ViewData["Title"] = "Create link";
}
<header>
&#xE760; <a asp-action="Index">Back to the list</a>
<h1>Create link</h1>
</header>
<article>
<form asp-action="Create">
<div asp-validation-summary="All" class="text-danger"></div>
<input asp-for="Order" type="number" hidden value="-1" />
<div>
<label asp-for="Name"></label>
<a target="_blank" class="comment" href="//socicon.com/icons">// Socicon naming cheatsheet</a>
<input asp-for="Name" type="text" required />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div>
<label asp-for="EnglishTitle"></label>
<input asp-for="EnglishTitle" type="text" required />
<span asp-validation-for="EnglishTitle" class="text-danger"></span>
</div>
<div>
<label asp-for="RussianTitle"></label>
<input asp-for="RussianTitle" type="text" />
<span asp-validation-for="RussianTitle" class="text-danger"></span>
</div>
<div>
<label asp-for="Username"></label>
<input asp-for="Username" type="text" required />
<span asp-validation-for="Username" class="text-danger"></span>
</div>
<div>
<label asp-for="Url"></label>
<input asp-for="Url" type="text" required />
<span asp-validation-for="Url" class="text-danger"></span>
</div>
<div>
<input type="checkbox" class="checkbox" asp-for="CanContactMe" />
<label asp-for="CanContactMe"></label> <br />
</div>
<div>
<input type="checkbox" class="checkbox" asp-for="DisplayInFooter" />
<label asp-for="DisplayInFooter"></label>
</div>
<input type="submit" value="Create" />
</form>
@model MyWebsite.Models.LinkModel
@{
ViewData["Title"] = "Create link";
}
<header>
&#xE760; <a asp-action="Index">Back to the list</a>
<h1>Create link</h1>
</header>
<article>
<form asp-action="Create">
<div asp-validation-summary="All" class="text-danger"></div>
<input asp-for="Order" type="number" hidden value="-1" />
<div>
<label asp-for="Name"></label>
<a target="_blank" rel="noopener noreferrer" class="comment" href="//socicon.com/icons">// Socicon naming cheatsheet</a>
<input asp-for="Name" type="text" required />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div>
<label asp-for="EnglishTitle"></label>
<input asp-for="EnglishTitle" type="text" required />
<span asp-validation-for="EnglishTitle" class="text-danger"></span>
</div>
<div>
<label asp-for="RussianTitle"></label>
<input asp-for="RussianTitle" type="text" />
<span asp-validation-for="RussianTitle" class="text-danger"></span>
</div>
<div>
<label asp-for="Username"></label>
<input asp-for="Username" type="text" required />
<span asp-validation-for="Username" class="text-danger"></span>
</div>
<div>
<label asp-for="Url"></label>
<input asp-for="Url" type="text" required />
<span asp-validation-for="Url" class="text-danger"></span>
</div>
<div>
<input type="checkbox" class="checkbox" asp-for="CanContactMe" />
<label asp-for="CanContactMe"></label> <br />
</div>
<div>
<input type="checkbox" class="checkbox" asp-for="DisplayInFooter" />
<label asp-for="DisplayInFooter"></label>
</div>
<input type="submit" value="Create" />
</form>
</article>
@@ -1,28 +1,28 @@
@model MyWebsite.Models.LinkModel
@{
ViewData["Title"] = "Delete link";
}
<header>
&#xE760; <a asp-action="Index">Back to the list</a>
<h1>Delete link</h1>
<h3>Are you sure you want to delete this?</h3>
</header>
<article>
<p>
<b>@Html.DisplayNameFor(model => model.Name):</b> @Model.Name<br />
<b>@Html.DisplayNameFor(model => model.Order):</b> @Model.Order<br />
<b>@Html.DisplayNameFor(model => model.EnglishTitle):</b> @Model.EnglishTitle<br />
<b>@Html.DisplayNameFor(model => model.RussianTitle):</b> @Model.RussianTitle<br />
<b>@Html.DisplayNameFor(model => model.Username):</b> @Model.Username<br />
<b>@Html.DisplayNameFor(model => model.Url):</b> <a href="@Model.Url" target="_blank">@Model.Url</a><br />
<b>@Html.DisplayNameFor(model => model.CanContactMe):</b> @Html.DisplayFor(model => model.CanContactMe)<br />
<b>@Html.DisplayNameFor(model => model.DisplayInFooter):</b> @Html.DisplayFor(model => model.DisplayInFooter)
</p>
<form asp-action="Delete">
<input hidden asp-for="Name" />
<input type="submit" value="Delete" required />
</form>
@model MyWebsite.Models.LinkModel
@{
ViewData["Title"] = "Delete link";
}
<header>
&#xE760; <a asp-action="Index">Back to the list</a>
<h1>Delete link</h1>
<h3>Are you sure you want to delete this?</h3>
</header>
<article>
<p>
<b>@Html.DisplayNameFor(model => model.Name):</b> @Model.Name<br />
<b>@Html.DisplayNameFor(model => model.Order):</b> @Model.Order<br />
<b>@Html.DisplayNameFor(model => model.EnglishTitle):</b> @Model.EnglishTitle<br />
<b>@Html.DisplayNameFor(model => model.RussianTitle):</b> @Model.RussianTitle<br />
<b>@Html.DisplayNameFor(model => model.Username):</b> @Model.Username<br />
<b>@Html.DisplayNameFor(model => model.Url):</b> <a href="@Model.Url" target="_blank" rel="noopener noreferrer">@Model.Url</a><br />
<b>@Html.DisplayNameFor(model => model.CanContactMe):</b> @Html.DisplayFor(model => model.CanContactMe)<br />
<b>@Html.DisplayNameFor(model => model.DisplayInFooter):</b> @Html.DisplayFor(model => model.DisplayInFooter)
</p>
<form asp-action="Delete">
<input hidden asp-for="Name" />
<input type="submit" value="Delete" required />
</form>
</article>
@@ -1,90 +1,90 @@
@model IEnumerable<MyWebsite.Models.LinkModel>
@{
ViewData["Title"] = "Links list";
}
<header>
&#xE760; <a asp-action="Index" asp-controller="Admin" asp-area="">Back to main menu</a>
<h1>Links list</h1>
<a asp-action="Create" class="comment">// + Create New</a>
</header>
<article>
<div asp-validation-summary="All" class="text-danger"></div>
<table>
<thead>
<tr>
<th>&#xE700;</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th class="hide-l2">
@Html.DisplayNameFor(model => model.Title)
</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.Username)
</th>
<th class="hide-l2">
@Html.DisplayNameFor(model => model.Url)
</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.CanContactMe)
</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.DisplayInFooter)
</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.OrderBy(i => i.Order))
{
<tr id="@item.Name">
<td class="reorderingBtns">
<a onclick="Up(this)">&#xE010;</a><br />
<span>&#xE915;</span><br />
<a onclick="Down(this)">&#xE011;</a>
</td>
<td>@item.Name</td>
<td class="hide-l2">
@item.EnglishTitle (en)<br />
@(item.RussianTitle ?? "<not_set>") (ru)
</td>
<td class="hide-l1">@item.Username</td>
<td class="hide-l2"><a target="_blank" href="@item.Url">@item.Url</a></td>
<td class="hide-l1">
@Html.DisplayFor(modelItem => item.CanContactMe)
</td>
<td class="hide-l1">
@Html.DisplayFor(modelItem => item.DisplayInFooter)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Name">Edit</a> |
<a asp-action="Delete" asp-route-id="@item.Name">Delete</a>
</td>
</tr>
}
</tbody>
</table>
<button onclick="ApplyReorder()" disabled>Apply reordering</button>
</article>
@section Imports
{
<style type="text/css">
.reorderingBtns
{
user-select: none;
}
.reorderingBtns a:hover
{
cursor: pointer;
color: gray;
text-decoration: underline;
}
</style>
<script type="text/javascript" src="~/js/ReorderScript.js"></script>
@model IEnumerable<MyWebsite.Models.LinkModel>
@{
ViewData["Title"] = "Links list";
}
<header>
&#xE760; <a asp-action="Index" asp-controller="Admin" asp-area="">Back to main menu</a>
<h1>Links list</h1>
<a asp-action="Create" class="comment">// + Create New</a>
</header>
<article>
<div asp-validation-summary="All" class="text-danger"></div>
<table>
<thead>
<tr>
<th>&#xE700;</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th class="hide-l2">
@Html.DisplayNameFor(model => model.Title)
</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.Username)
</th>
<th class="hide-l2">
@Html.DisplayNameFor(model => model.Url)
</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.CanContactMe)
</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.DisplayInFooter)
</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.OrderBy(i => i.Order))
{
<tr id="@item.Name">
<td class="reorderingBtns">
<a onclick="Up(this)">&#xE010;</a><br />
<span>&#xE915;</span><br />
<a onclick="Down(this)">&#xE011;</a>
</td>
<td>@item.Name</td>
<td class="hide-l2">
@item.EnglishTitle (en)<br />
@(item.RussianTitle ?? "<not_set>") (ru)
</td>
<td class="hide-l1">@item.Username</td>
<td class="hide-l2"><a target="_blank" rel="noopener noreferrer" href="@item.Url">@item.Url</a></td>
<td class="hide-l1">
@Html.DisplayFor(modelItem => item.CanContactMe)
</td>
<td class="hide-l1">
@Html.DisplayFor(modelItem => item.DisplayInFooter)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Name">Edit</a> |
<a asp-action="Delete" asp-route-id="@item.Name">Delete</a>
</td>
</tr>
}
</tbody>
</table>
<button onclick="ApplyReorder()" disabled>Apply reordering</button>
</article>
@section Imports
{
<style type="text/css">
.reorderingBtns
{
user-select: none;
}
.reorderingBtns a:hover
{
cursor: pointer;
color: gray;
text-decoration: underline;
}
</style>
<script type="text/javascript" src="~/js/ReorderScript.js"></script>
}
@@ -1,97 +1,97 @@
@model MyWebsite.Models.ImageModel
@{
ViewData["Title"] = "Edit artwork";
}
<header>
&#xE760; <a asp-action="Index">Back to the list</a>
<h1>Edit artwork</h1>
<a class="comment" href="~/images/Gallery/@(Model.FileName)" target="_blank">// Open artwork file</a>
</header>
<article>
<img src="~/images/Gallery/@Model.FileName" onclick="ToggleImageSize();" />
<form asp-action="Edit">
<div asp-validation-summary="All" class="text-danger"></div>
<input asp-for="FileName" hidden />
<div>
<label asp-for="EnglishTitle"></label>
<input asp-for="EnglishTitle" type="text" required/>
<span asp-validation-for="EnglishTitle" class="text-danger"></span>
</div>
<div>
<label asp-for="RussianTitle"></label>
<input asp-for="RussianTitle" type="text" />
<span asp-validation-for="RussianTitle" class="text-danger"></span>
</div>
<div>
<label asp-for="EnglishDescription"></label>
<textarea asp-for="EnglishDescription"></textarea>
<span asp-validation-for="EnglishDescription" class="text-danger"></span>
</div>
<div>
<label asp-for="RussianDescription"></label>
<textarea asp-for="RussianDescription"></textarea>
<span asp-validation-for="RussianDescription" class="text-danger"></span>
</div>
<div>
<label asp-for="CreationDate"></label>
<input asp-for="CreationDate" type="date" required/>
<span asp-validation-for="CreationDate" class="text-danger"></span>
</div>
<input type="submit" value="Save" />
</form>
</article>
@section Imports
{
<script type="text/javascript">
function ToggleImageSize()
{
var image = document.querySelector("img");
if (image.style.cursor == "zoom-out")
image.style = "";
else
{
image.style.maxHeight = "none";
image.style.maxWidth = "none";
image.style.cursor = "zoom-out";
}
}
</script>
<style type="text/css">
article
{
display: grid;
grid-template-columns: 500px 1fr;
grid-column-gap: 20px;
}
article img
{
width: 100%;
}
@@media only screen and (max-width: 1000px)
{
article
{
display: inherit;
}
}
form
{
max-width: initial;
}
textarea
{
max-height: 250px;
}
</style>
@model MyWebsite.Models.ImageModel
@{
ViewData["Title"] = "Edit artwork";
}
<header>
&#xE760; <a asp-action="Index">Back to the list</a>
<h1>Edit artwork</h1>
<a class="comment" href="~/images/Gallery/@(Model.FileName)" target="_blank" rel="noopener noreferrer">// Open artwork file</a>
</header>
<article>
<img src="~/images/Gallery/@Model.FileName" onclick="ToggleImageSize();" />
<form asp-action="Edit">
<div asp-validation-summary="All" class="text-danger"></div>
<input asp-for="FileName" hidden />
<div>
<label asp-for="EnglishTitle"></label>
<input asp-for="EnglishTitle" type="text" required/>
<span asp-validation-for="EnglishTitle" class="text-danger"></span>
</div>
<div>
<label asp-for="RussianTitle"></label>
<input asp-for="RussianTitle" type="text" />
<span asp-validation-for="RussianTitle" class="text-danger"></span>
</div>
<div>
<label asp-for="EnglishDescription"></label>
<textarea asp-for="EnglishDescription"></textarea>
<span asp-validation-for="EnglishDescription" class="text-danger"></span>
</div>
<div>
<label asp-for="RussianDescription"></label>
<textarea asp-for="RussianDescription"></textarea>
<span asp-validation-for="RussianDescription" class="text-danger"></span>
</div>
<div>
<label asp-for="CreationDate"></label>
<input asp-for="CreationDate" type="date" required/>
<span asp-validation-for="CreationDate" class="text-danger"></span>
</div>
<input type="submit" value="Save" />
</form>
</article>
@section Imports
{
<script type="text/javascript">
function ToggleImageSize()
{
var image = document.querySelector("img");
if (image.style.cursor == "zoom-out")
image.style = "";
else
{
image.style.maxHeight = "none";
image.style.maxWidth = "none";
image.style.cursor = "zoom-out";
}
}
</script>
<style type="text/css">
article
{
display: grid;
grid-template-columns: 500px 1fr;
grid-column-gap: 20px;
}
article img
{
width: 100%;
}
@@media only screen and (max-width: 1000px)
{
article
{
display: inherit;
}
}
form
{
max-width: initial;
}
textarea
{
max-height: 250px;
}
</style>
}
@@ -1,54 +1,54 @@
@model ArtworkViewModel
@{
ViewData["Title"] = "Gallery";
}
<header>
&#xE760; <a asp-action="Index" asp-controller="Admin" asp-area="">Back to main menu</a>
<h1>Gallery</h1>
<a asp-action="Upload" class="comment">// &#xE11C; Upload new</a><br />
<a asp-action="UpdateCache" class="comment">// Cache gallery</a>
</header>
<article>
<table>
@foreach (ImageModel item in Model.Images)
{
<tr>
<td>
<a asp-area="" asp-controller="Gallery" asp-action="Details" asp-route-id="@item.FileName" target="_blank">
<img title="@item.Title" src="~/images/Gallery/@(item.FileName.EndsWith(".svg", StringComparison.OrdinalIgnoreCase) ? item.FileName : $"Cache/{item.FileName}.jpg")" onerror="this.src = '/images/Gallery/@item.FileName'" />
</a>
</td>
<td>
<p>
<h3>@item.Title</h3>
<span>File name: @item.FileName</span><br />
<span>Creation date: @item.CreationDate.ToShortDateString()</span><br />
<span>
<a asp-action="Edit" asp-route-id="@item.FileName">Edit</a> |
<a asp-action="Delete" asp-route-id="@item.FileName">Delete</a> |
<a asp-area="" asp-controller="Gallery" asp-action="Details" asp-route-id="@item.FileName" target="_blank">View</a>
</span>
</p>
</td>
</tr>
}
</table>
</article>
@section Imports
{
<style type="text/css">
img
{
height: 200px;
margin-right: 20px;
}
table
{
width: initial;
}
</style>
@model ArtworkViewModel
@{
ViewData["Title"] = "Gallery";
}
<header>
&#xE760; <a asp-action="Index" asp-controller="Admin" asp-area="">Back to main menu</a>
<h1>Gallery</h1>
<a asp-action="Upload" class="comment">// &#xE11C; Upload new</a><br />
<a asp-action="UpdateCache" class="comment">// Cache gallery</a>
</header>
<article>
<table>
@foreach (ImageModel item in Model.Images)
{
<tr>
<td>
<a asp-area="" asp-controller="Gallery" asp-action="Details" asp-route-id="@item.FileName" target="_blank" rel="noopener noreferrer">
<img title="@item.Title" src="~/images/Gallery/@(item.FileName.EndsWith(".svg", StringComparison.OrdinalIgnoreCase) ? item.FileName : $"Cache/{item.FileName}.jpg")" onerror="this.src = '/images/Gallery/@item.FileName'" />
</a>
</td>
<td>
<p>
<h3>@item.Title</h3>
<span>File name: @item.FileName</span><br />
<span>Creation date: @item.CreationDate.ToShortDateString()</span><br />
<span>
<a asp-action="Edit" asp-route-id="@item.FileName">Edit</a> |
<a asp-action="Delete" asp-route-id="@item.FileName">Delete</a> |
<a asp-area="" asp-controller="Gallery" asp-action="Details" asp-route-id="@item.FileName" target="_blank" rel="noopener noreferrer">View</a>
</span>
</p>
</td>
</tr>
}
</table>
</article>
@section Imports
{
<style type="text/css">
img
{
height: 200px;
margin-right: 20px;
}
table
{
width: initial;
}
</style>
}
@@ -1,63 +1,63 @@
@model MyWebsite.Models.ProjectModel
@{
ViewData["Title"] = "Delete project";
}
<header>
&#xE760; <a asp-action="Index">Back to the list</a>
<h1>Delete project entry</h1>
<h3>Are you sure you want to delete this?</h3>
</header>
<article>
<p>
<b>@Html.DisplayNameFor(model => model.Id):</b> @Model.Id<br />
</p>
<p>
<b>@Html.DisplayNameFor(model => model.EnglishTitle):</b> @Model.EnglishTitle<br />
<b>@Html.DisplayNameFor(model => model.RussianTitle):</b> @Model.RussianTitle<br />
</p>
<p>
<b>@Html.DisplayNameFor(model => model.EnglishLinkCaption):</b> @Model.EnglishLinkCaption<br />
<b>@Html.DisplayNameFor(model => model.RussianLinkCaption):</b> @Model.RussianLinkCaption<br />
</p>
<p>
<b>@Html.DisplayNameFor(model => model.Link):</b> <a target="_blank" href="@Model.Link">@Model.Link</a><br />
</p>
<p>
<b>@Html.DisplayNameFor(model => model.Badges):</b> @Model.Badges<br />
<div class="badge-placeholder">
@foreach (string b in (Model.Badges ?? "").Split(','))
{
BadgeModel badge = (ViewData["Badges"] as List<BadgeModel>).FirstOrDefault(i => i.Name == b);
<div style="background-image: url('/images/Badges/@(badge?.Image).png')" title="@(badge?.Description)"></div>
}
</div>
</p>
<form asp-action="Delete">
<input hidden asp-for="Id" />
<input type="submit" value="Delete" required />
</form>
</article>
@section Imports
{
<style type="text/css">
.badge-placeholder
{
display: grid;
grid-column-gap: 10px;
grid-auto-columns: max-content;
grid-auto-flow: column;
}
.badge-placeholder div
{
height: 25px;
width: 25px;
display: inline-block;
background-size: contain;
}
</style>
@model MyWebsite.Models.ProjectModel
@{
ViewData["Title"] = "Delete project";
}
<header>
&#xE760; <a asp-action="Index">Back to the list</a>
<h1>Delete project entry</h1>
<h3>Are you sure you want to delete this?</h3>
</header>
<article>
<p>
<b>@Html.DisplayNameFor(model => model.Id):</b> @Model.Id<br />
</p>
<p>
<b>@Html.DisplayNameFor(model => model.EnglishTitle):</b> @Model.EnglishTitle<br />
<b>@Html.DisplayNameFor(model => model.RussianTitle):</b> @Model.RussianTitle<br />
</p>
<p>
<b>@Html.DisplayNameFor(model => model.EnglishLinkCaption):</b> @Model.EnglishLinkCaption<br />
<b>@Html.DisplayNameFor(model => model.RussianLinkCaption):</b> @Model.RussianLinkCaption<br />
</p>
<p>
<b>@Html.DisplayNameFor(model => model.Link):</b> <a target="_blank" rel="noopener noreferrer" href="@Model.Link">@Model.Link</a><br />
</p>
<p>
<b>@Html.DisplayNameFor(model => model.Badges):</b> @Model.Badges<br />
<div class="badge-placeholder">
@foreach (string b in (Model.Badges ?? "").Split(','))
{
BadgeModel badge = (ViewData["Badges"] as List<BadgeModel>).FirstOrDefault(i => i.Name == b);
<div style="background-image: url('/images/Badges/@(badge?.Image).png')" title="@(badge?.Description)"></div>
}
</div>
</p>
<form asp-action="Delete">
<input hidden asp-for="Id" />
<input type="submit" value="Delete" required />
</form>
</article>
@section Imports
{
<style type="text/css">
.badge-placeholder
{
display: grid;
grid-column-gap: 10px;
grid-auto-columns: max-content;
grid-auto-flow: column;
}
.badge-placeholder div
{
height: 25px;
width: 25px;
display: inline-block;
background-size: contain;
}
</style>
}
@@ -1,110 +1,110 @@
@model (IEnumerable<MyWebsite.Models.ProjectModel> projects, IEnumerable<MyWebsite.Models.BadgeModel> badges)
@{
ViewData["Title"] = "Projects";
}
<header>
&#xE760; <a asp-action="Index" asp-controller="Admin" asp-area="">Back to main menu</a>
<h1>Projects list</h1>
<a asp-action="Create" class="comment">// + Add new project</a>
</header>
<article>
<div asp-validation-summary="All" class="text-danger"></div>
<table>
<thead>
<tr>
<th>&#xE700;</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.projects.First().Id)
</th>
<th>
@Html.DisplayNameFor(model => model.projects.First().Title)
</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.projects.First().LinkCaption)
</th>
<th class="hide-l2">
@Html.DisplayNameFor(model => model.projects.First().Link)
</th>
<th class="hide-l2">
@Html.DisplayNameFor(model => model.projects.First().Badges)
(<a asp-controller="Badges" asp-action="Index">Edit badges</a>)
</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.projects.OrderBy(i => i.Order))
{
<tr id="@item.Id">
<td class="reorderingBtns">
<a onclick="Up(this)">&#xE010;</a><br />
<span>&#xE915;</span><br />
<a onclick="Down(this)">&#xE011;</a>
</td>
<td class="hide-l1">@item.Id</td>
<td>
@item.EnglishTitle (en)<br />
@(item.RussianTitle ?? "<not_set>") (ru)
</td>
<td class="hide-l1">
@(item.EnglishLinkCaption ?? "<not_set>") (en)<br />
@(item.RussianLinkCaption ?? "<not_set>") (ru)
</td>
<td class="hide-l2"><a target="_blank" href="@item.Link">@item.Link</a></td>
<td class="hide-l2">
<div class="badge-placeholder">
@foreach (string b in (item.Badges ?? "").Split(','))
{
BadgeModel badge = Model.badges.FirstOrDefault(i => i.Name == b);
<div style="background-image: url('../images/Badges/@(badge?.Image).png')" title="@(badge?.Description)"></div>
}
</div>
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
<button onclick="ApplyReorder()" disabled>Apply reordering</button>
</article>
@section Imports
{
<style type="text/css">
.badge-placeholder
{
display: grid;
grid-column-gap: 10px;
grid-auto-columns: max-content;
grid-auto-flow: column;
}
.badge-placeholder div
{
height: 25px;
width: 25px;
display: inline-block;
background-size: contain;
}
.reorderingBtns
{
user-select: none;
}
.reorderingBtns a:hover
{
cursor: pointer;
color: gray;
text-decoration: underline;
}
</style>
<script type="text/javascript" src="~/js/ReorderScript.js"></script>
@model (IEnumerable<MyWebsite.Models.ProjectModel> projects, IEnumerable<MyWebsite.Models.BadgeModel> badges)
@{
ViewData["Title"] = "Projects";
}
<header>
&#xE760; <a asp-action="Index" asp-controller="Admin" asp-area="">Back to main menu</a>
<h1>Projects list</h1>
<a asp-action="Create" class="comment">// + Add new project</a>
</header>
<article>
<div asp-validation-summary="All" class="text-danger"></div>
<table>
<thead>
<tr>
<th>&#xE700;</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.projects.First().Id)
</th>
<th>
@Html.DisplayNameFor(model => model.projects.First().Title)
</th>
<th class="hide-l1">
@Html.DisplayNameFor(model => model.projects.First().LinkCaption)
</th>
<th class="hide-l2">
@Html.DisplayNameFor(model => model.projects.First().Link)
</th>
<th class="hide-l2">
@Html.DisplayNameFor(model => model.projects.First().Badges)
(<a asp-controller="Badges" asp-action="Index">Edit badges</a>)
</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.projects.OrderBy(i => i.Order))
{
<tr id="@item.Id">
<td class="reorderingBtns">
<a onclick="Up(this)">&#xE010;</a><br />
<span>&#xE915;</span><br />
<a onclick="Down(this)">&#xE011;</a>
</td>
<td class="hide-l1">@item.Id</td>
<td>
@item.EnglishTitle (en)<br />
@(item.RussianTitle ?? "<not_set>") (ru)
</td>
<td class="hide-l1">
@(item.EnglishLinkCaption ?? "<not_set>") (en)<br />
@(item.RussianLinkCaption ?? "<not_set>") (ru)
</td>
<td class="hide-l2"><a target="_blank" rel="noopener noreferrer" href="@item.Link">@item.Link</a></td>
<td class="hide-l2">
<div class="badge-placeholder">
@foreach (string b in (item.Badges ?? "").Split(','))
{
BadgeModel badge = Model.badges.FirstOrDefault(i => i.Name == b);
<div style="background-image: url('../images/Badges/@(badge?.Image).png')" title="@(badge?.Description)"></div>
}
</div>
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
</tbody>
</table>
<button onclick="ApplyReorder()" disabled>Apply reordering</button>
</article>
@section Imports
{
<style type="text/css">
.badge-placeholder
{
display: grid;
grid-column-gap: 10px;
grid-auto-columns: max-content;
grid-auto-flow: column;
}
.badge-placeholder div
{
height: 25px;
width: 25px;
display: inline-block;
background-size: contain;
}
.reorderingBtns
{
user-select: none;
}
.reorderingBtns a:hover
{
cursor: pointer;
color: gray;
text-decoration: underline;
}
</style>
<script type="text/javascript" src="~/js/ReorderScript.js"></script>
}
@@ -1,49 +1,49 @@
@model CustomData
@{
ViewData["Title"] = "GUTSchedule";
IEnumerable<ResumeModel> policies = ViewData["Policies"] as IEnumerable<ResumeModel>;
}
<header>
&#xE760; <a asp-action="Index" asp-controller="Admin" asp-area="">Back to main menu</a>
<h1>GUTSchedule</h1>
</header>
<article>
<div asp-validation-summary="All" class="text-danger"></div>
<h2>Offset dates</h2>
<form asp-action="Index">
<input asp-for="Key" value="offset" hidden />
<label asp-for="Value">First work day in the semester: (Current: @Model?.Value)</label>
<input type="number" asp-for="Value" />
<span asp-validation-for="Value" class="text-danger"></span>
<input type="submit" value="Update" />
</form>
<h2>Privacy policies</h2>
<a class="comment" asp-action="PrivacyPolicy" target="_blank">// View privacy policy page</a><br />
<a class="comment" asp-action="CreatePolicy">// + Add new privacy policy</a>
<table>
<thead>
<tr>
<th>Langauge</th>
<th>Last update</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (ResumeModel item in policies)
{
<tr>
<td>@item.Language</td>
<td>@item.LastUpdate</td>
<td>
<a asp-action="EditPolicy" asp-route-id="@item.Language">Edit</a> |
<a asp-action="DeletePolicy" asp-route-id="@item.Language">Delete</a>
</td>
</tr>
}
</tbody>
</table>
@model CustomData
@{
ViewData["Title"] = "GUTSchedule";
IEnumerable<ResumeModel> policies = ViewData["Policies"] as IEnumerable<ResumeModel>;
}
<header>
&#xE760; <a asp-action="Index" asp-controller="Admin" asp-area="">Back to main menu</a>
<h1>GUTSchedule</h1>
</header>
<article>
<div asp-validation-summary="All" class="text-danger"></div>
<h2>Offset dates</h2>
<form asp-action="Index">
<input asp-for="Key" value="offset" hidden />
<label asp-for="Value">First work day in the semester: (Current: @Model?.Value)</label>
<input type="number" asp-for="Value" />
<span asp-validation-for="Value" class="text-danger"></span>
<input type="submit" value="Update" />
</form>
<h2>Privacy policies</h2>
<a class="comment" asp-action="PrivacyPolicy" target="_blank" rel="noopener noreferrer">// View privacy policy page</a><br />
<a class="comment" asp-action="CreatePolicy">// + Add new privacy policy</a>
<table>
<thead>
<tr>
<th>Langauge</th>
<th>Last update</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach (ResumeModel item in policies)
{
<tr>
<td>@item.Language</td>
<td>@item.LastUpdate</td>
<td>
<a asp-action="EditPolicy" asp-route-id="@item.Language">Edit</a> |
<a asp-action="DeletePolicy" asp-route-id="@item.Language">Delete</a>
</td>
</tr>
}
</tbody>
</table>
</article>
@@ -1,35 +1,35 @@
@{
ViewData["Title"] = "Скачайте ГУТ.Расписание сейчас!";
Layout = "/Views/Shared/_Layout.cshtml";
}
<header>
<h1>Скачайте ГУТ.Расписание сейчас!</h1>
</header>
<article>
<img src="~/images/GUTSchedulePoster.png" style="max-width:800px; width: 100%" />
<h2>Для Windows 10</h2>
<div id="mspb-cgyfrexl3uyg" class="9NXKDK52W3RX"></div>
<h2>Для Android</h2>
<small>Доступно для версий Android 4.1 и выше</small><br />
<a href="https://play.google.com/store/apps/details?id=com.xfox111.gut.schedule" target="_blank">
<img alt='Доступно в Google Play' style="max-width:475px; width:100%" src='https://play.google.com/intl/en_us/badges/static/images/badges/ru_badge_web_generic.png' />
</a>
<p>
<small>Microsoft Store и логотип Майкрософт являются товарными знаками корпорации Майкрософт.</small><br />
<small>Google Play и логотип Google Play являются товарными знаками корпорации Google LLC.</small>
</p>
</article>
@section Imports
{
<script src="https://storebadge.azureedge.net/src/badge-1.8.4.js"></script>
<script>
mspb('9NXKDK52W3RX', function (badge)
{
document.getElementById('mspb-cgyfrexl3uyg').innerHTML = badge;
});
</script>
@{
ViewData["Title"] = "Скачайте ГУТ.Расписание сейчас!";
Layout = "/Views/Shared/_Layout.cshtml";
}
<header>
<h1>Скачайте ГУТ.Расписание сейчас!</h1>
</header>
<article>
<img src="~/images/GUTSchedulePoster.png" style="max-width:800px; width: 100%" />
<h2>Для Windows 10</h2>
<div id="mspb-cgyfrexl3uyg" class="9NXKDK52W3RX"></div>
<h2>Для Android</h2>
<small>Доступно для версий Android 4.1 и выше</small><br />
<a href="https://play.google.com/store/apps/details?id=com.xfox111.gut.schedule" target="_blank" rel="noopener noreferrer">
<img alt='Доступно в Google Play' style="max-width:475px; width:100%" src='https://play.google.com/intl/en_us/badges/static/images/badges/ru_badge_web_generic.png' />
</a>
<p>
<small>Microsoft Store и логотип Майкрософт являются товарными знаками корпорации Майкрософт.</small><br />
<small>Google Play и логотип Google Play являются товарными знаками корпорации Google LLC.</small>
</p>
</article>
@section Imports
{
<script src="https://storebadge.azureedge.net/src/badge-1.8.4.js"></script>
<script>
mspb('9NXKDK52W3RX', function (badge)
{
document.getElementById('mspb-cgyfrexl3uyg').innerHTML = badge;
});
</script>
}
@@ -55,28 +55,28 @@
<ul>
<li><a asp-area="" asp-controller="Blog" asp-action="Tags" asp-route-id="FoxTube">Dev Notes</a></li>
<li><a asp-action="Privacy">Privacy policy</a></li>
<li><a target="_blank" href="//youtube.com/t/privacy">YouTube privacy policy</a></li>
<li><a target="_blank" href="//youtube.com/t/terms">YouTube terms of use</a></li>
<li><a target="_blank" href="//youtube.com/t/community_guidelines">YouTube community guidelines</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//youtube.com/t/privacy">YouTube privacy policy</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//youtube.com/t/terms">YouTube terms of use</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//youtube.com/t/community_guidelines">YouTube community guidelines</a></li>
</ul>
<h1>Credits</h1>
<h2>Demo footage content</h2>
<h3>Trailer</h3>
<ul>
<li><a target="_blank" href="//microsoft.com/">Microsoft</a> (Soundtrack: <a target="_blank" href="//www.youtube.com/watch?v=dwK422sLD-s">Introducing Microsoft Surface Laptop 2</a>)</li>
<li><a target="_blank" href="//www.youtube.com/user/skullkruncher13">JT Music</a> (Comparasion video: <a target="_blank" href="//www.youtube.com/watch?v=AGfa24afEBM">METRO EXODUS SONG by JT Music (feat. Andrea Storm Kaden)</a>)</li>
<li><a target="_blank" rel="noopener noreferrer" href="//microsoft.com/">Microsoft</a> (Soundtrack: <a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/watch?v=dwK422sLD-s">Introducing Microsoft Surface Laptop 2</a>)</li>
<li><a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/user/skullkruncher13">JT Music</a> (Comparasion video: <a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/watch?v=AGfa24afEBM">METRO EXODUS SONG by JT Music (feat. Andrea Storm Kaden)</a>)</li>
</ul>
<h3>Screenshots and live</h3>
<ul>
<li><a target="_blank" href="//windowscentral.com/">Windows Central</a></li>
<li><a target="_blank" href="//www.youtube.com/user/ouramazingspace/about">Space Videos</a></li>
<li><a target="_blank" href="//www.youtube.com/channel/UCS3pqiugq53HFPYiWLPtdeA">MSReview</a></li>
<li><a target="_blank" href="//www.youtube.com/channel/UC6cqazSR6CnVMClY0bJI0Lg">BadComedian</a></li>
<li><a target="_blank" href="//www.youtube.com/channel/UCf31Gf5nCU8J6eUlr7QSU0w">Marmok</a></li>
<li><a target="_blank" href="//www.youtube.com/channel/UCK7OXr0m5mnM1z9p7n_Bwfw">DAGames</a></li>
<li><a target="_blank" href="//www.youtube.com/user/RandomEncountersEnt">Random Ecounters</a></li>
<li><a target="_blank" href="//www.youtube.com/channel/UCuXYmUOJSbEH1x88WUV1aMg">TheNafig</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//windowscentral.com/">Windows Central</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/user/ouramazingspace/about">Space Videos</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/channel/UCS3pqiugq53HFPYiWLPtdeA">MSReview</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/channel/UC6cqazSR6CnVMClY0bJI0Lg">BadComedian</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/channel/UCf31Gf5nCU8J6eUlr7QSU0w">Marmok</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/channel/UCK7OXr0m5mnM1z9p7n_Bwfw">DAGames</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/user/RandomEncountersEnt">Random Ecounters</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="//www.youtube.com/channel/UCuXYmUOJSbEH1x88WUV1aMg">TheNafig</a></li>
</ul>
<p>
@@ -81,7 +81,7 @@
<div>
@foreach (LinkModel link in Model.Links.Where(i => i.DisplayInFooter).OrderBy(i => i.Order))
{
<a class="socicon-@(link.Name)" href="@(link.Url)" target="_blank" title="@(link.Title)"></a>
<a class="socicon-@(link.Name)" href="@(link.Url)" target="_blank" rel="noopener noreferrer" title="@(link.Title)"></a>
}
</div>
</footer>
@@ -1,201 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AboutMe" xml:space="preserve">
<value>ОбоМне</value>
</data>
<data name="All links are clickable" xml:space="preserve">
<value>Все ссылки кликабельны</value>
</data>
<data name="Arts" xml:space="preserve">
<value>Галерея</value>
</data>
<data name="Back to main menu" xml:space="preserve">
<value>Назад в главное меню</value>
</data>
<data name="Blog" xml:space="preserve">
<value>Блог</value>
</data>
<data name="Contact information" xml:space="preserve">
<value>Контактная информация</value>
</data>
<data name="ContactMe" xml:space="preserve">
<value>СвязатьсяСоМной</value>
</data>
<data name="Contacts" xml:space="preserve">
<value>Контакты</value>
</data>
<data name="Copyright" xml:space="preserve">
<value />
</data>
<data name="en" xml:space="preserve">
<value>ru</value>
</data>
<data name="Follow me on" xml:space="preserve">
<value>Подписывайтесь на</value>
</data>
<data name="Here is presented the most of projects I worked on" xml:space="preserve">
<value>Здесь собрано большинство проектов над которыми я когда-либо работал</value>
</data>
<data name="Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!" xml:space="preserve">
<value>Привет! Меня зовут Михаил и я C# разработчик. Это мой личный веб-сайт. Здесь вы можете найти информацию обо мне и моих проектах</value>
</data>
<data name="InterestedInMe" xml:space="preserve">
<value>Заинтересовались</value>
</data>
<data name="Michael &quot;XFox&quot; Gordeev" xml:space="preserve">
<value>Михаил "XFox" Гордеев</value>
</data>
<data name="Michael (Mikhail) Gordeev - Resume" xml:space="preserve">
<value>Михаил Гордеев - Резюме</value>
</data>
<data name="My artworks" xml:space="preserve">
<value>Мои рисунки</value>
</data>
<data name="My projects" xml:space="preserve">
<value>Мои проекты</value>
</data>
<data name="MyResume" xml:space="preserve">
<value>Резюме</value>
</data>
<data name="No content available" xml:space="preserve">
<value>Нет доступного контента</value>
</data>
<data name="Personal website" xml:space="preserve">
<value>Личный веб-сайт</value>
</data>
<data name="Projects" xml:space="preserve">
<value>Проекты</value>
</data>
<data name="ru" xml:space="preserve">
<value>en</value>
</data>
<data name="socialNetworks" xml:space="preserve">
<value>соцСети</value>
</data>
<data name="Tags" xml:space="preserve">
<value>Теги</value>
</data>
<data name="You" xml:space="preserve">
<value>Вы</value>
</data>
<data name="РУС" xml:space="preserve">
<value>ENG</value>
</data>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AboutMe" xml:space="preserve">
<value>ОбоМне</value>
</data>
<data name="All links are clickable" xml:space="preserve">
<value>Все ссылки кликабельны</value>
</data>
<data name="Arts" xml:space="preserve">
<value>Галерея</value>
</data>
<data name="Back to main menu" xml:space="preserve">
<value>Назад в главное меню</value>
</data>
<data name="Blog" xml:space="preserve">
<value>Блог</value>
</data>
<data name="Contact information" xml:space="preserve">
<value>Контактная информация</value>
</data>
<data name="ContactMe" xml:space="preserve">
<value>СвязатьсяСоМной</value>
</data>
<data name="Contacts" xml:space="preserve">
<value>Контакты</value>
</data>
<data name="Copyright" xml:space="preserve">
<value />
</data>
<data name="en" xml:space="preserve">
<value>ru</value>
</data>
<data name="Follow me on" xml:space="preserve">
<value>Подписывайтесь на</value>
</data>
<data name="Here is presented the most of projects I worked on" xml:space="preserve">
<value>Здесь собрано большинство проектов над которыми я когда-либо работал</value>
</data>
<data name="Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!" xml:space="preserve">
<value>Привет! Меня зовут Михаил и я C# разработчик. Это мой личный веб-сайт. Здесь вы можете найти информацию обо мне и моих проектах</value>
</data>
<data name="InterestedInMe" xml:space="preserve">
<value>Заинтересовались</value>
</data>
<data name="Michael &amp;apos;XFox&amp;apos; Gordeev" xml:space="preserve">
<value>Михаил &amp;apos;XFox&amp;apos; Гордеев</value>
</data>
<data name="Michael (Mikhail) Gordeev - Resume" xml:space="preserve">
<value>Михаил Гордеев - Резюме</value>
</data>
<data name="My artworks" xml:space="preserve">
<value>Мои рисунки</value>
</data>
<data name="My projects" xml:space="preserve">
<value>Мои проекты</value>
</data>
<data name="MyResume" xml:space="preserve">
<value>Резюме</value>
</data>
<data name="No content available" xml:space="preserve">
<value>Нет доступного контента</value>
</data>
<data name="Personal website" xml:space="preserve">
<value>Личный веб-сайт</value>
</data>
<data name="Projects" xml:space="preserve">
<value>Проекты</value>
</data>
<data name="ru" xml:space="preserve">
<value>en</value>
</data>
<data name="socialNetworks" xml:space="preserve">
<value>соцСети</value>
</data>
<data name="Tags" xml:space="preserve">
<value>Теги</value>
</data>
<data name="You" xml:space="preserve">
<value>Вы</value>
</data>
<data name="РУС" xml:space="preserve">
<value>ENG</value>
</data>
</root>
@@ -1,135 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Next" xml:space="preserve">
<value>Вперед</value>
</data>
<data name="Prev" xml:space="preserve">
<value>Назад</value>
</data>
<data name="Search" xml:space="preserve">
<value>Поиск</value>
</data>
<data name="Search results for" xml:space="preserve">
<value>Результаты поиска по тегу</value>
</data>
<data name="Visit on" xml:space="preserve">
<value>Открыть на</value>
</data>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Hi, my name is Michael. And this is my blog. Here I write about software and hardware development, interesting things from CS and more" xml:space="preserve">
<value>Привет! Меня зовут Михаил и это мой блог. Здесь я пишу о разработе программного и аппаратного обеспечения, а текже об интересных вещах из мира компьютерных наук</value>
</data>
<data name="Next" xml:space="preserve">
<value>Вперед</value>
</data>
<data name="Prev" xml:space="preserve">
<value>Назад</value>
</data>
<data name="Search" xml:space="preserve">
<value>Поиск</value>
</data>
<data name="Search results for" xml:space="preserve">
<value>Результаты поиска по тегу</value>
</data>
<data name="Visit on" xml:space="preserve">
<value>Открыть на</value>
</data>
</root>
@@ -1,132 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Download CV" xml:space="preserve">
<value>Скачать резюме</value>
</data>
<data name="Last update" xml:space="preserve">
<value>Последнее обновление</value>
</data>
<data name="My resume" xml:space="preserve">
<value>Мое резюме</value>
</data>
<data name="Print CV" xml:space="preserve">
<value>Распечатать резюме</value>
</data>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Download resume" xml:space="preserve">
<value>Скачать резюме</value>
</data>
<data name="Last update" xml:space="preserve">
<value>Последнее обновление</value>
</data>
<data name="My resume" xml:space="preserve">
<value>Мое резюме</value>
</data>
<data name="Print resume" xml:space="preserve">
<value>Распечатать резюме</value>
</data>
</root>
+20 -6
View File
@@ -3,6 +3,20 @@
ViewData["Title"] = "Fox, Coffee and Science - " + SharedLocalizer["Blog"];
}
@section OpenGraph
{
<meta name="author" content="@SharedLocalizer["Michael &apos;XFox&apos; Gordeev"]" />
<meta name="description" content="@SharedLocalizer["Hi, my name is Michael. And this is my blog. Here I write about software and hardware development, interesting things from CS and more"]" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="XFox111.NET" />
<meta property="og:url" content="https://XFox111.NET/Blog" />
<meta property="og:locale" content="@SharedLocalizer["en"]" />
@*<meta property="og:image" content="https://xfox111.net/images/me.jpg" />*@
<meta property="og:description" content="@Localizer["Hi, my name is Michael. And this is my blog. Here I write about software and hardware development, interesting things from CS and more"]" />
<meta property="og:title" content="Fox, Coffee and Science" />
}
<header>
@if (string.IsNullOrWhiteSpace(Model.SearchTerm))
{
@@ -12,10 +26,10 @@
{
<h1>@SharedLocalizer["Search results for"] @Model.SearchTerm</h1>
}
@Localizer["Visit on"] <a target="_blank" href="@Model.Links.FirstOrDefault(i => i.Name == "blogger")?.Url">Blogspot</a>
@Localizer["Visit on"] <a target="_blank" rel="noopener noreferrer" href="@Model.Links.FirstOrDefault(i => i.Name == "blogger")?.Url">Blogspot</a>
</header>
<form method="get" action="https://xfox111.blogspot.com/search" target="_blank">
<form method="get" action="https://xfox111.blogspot.com/search" target="_blank" rel="noopener noreferrer">
<input type="text" name="q" spellcheck="false" placeholder="@Localizer["Search"]" />
<input type="submit" value="&#xE094;" />
</form>
@@ -36,7 +50,7 @@
}
<div>
<p>
@DateTime.Parse(post.Published).ToShortDateString() | <a href="@post.Author.Url" target="_blank">@post.Author.DisplayName</a><br />
@DateTime.Parse(post.Published).ToShortDateString() | <a href="@post.Author.Url" target="_blank" rel="noopener noreferrer">@post.Author.DisplayName</a><br />
@if (post.Labels != null && post.Labels.Count > 0)
{
<span class="comment">// @(Html.Raw(string.Join(", ", (post.Labels ?? new string[0]).Select(i => $"<a class=\"comment\" href=\"Blog/Tags/{i}\">{i}</a>"))))</span>
@@ -72,10 +86,10 @@
<div class="follow-list">
@foreach (LinkModel link in Model.Links.Where(i => new[] { "twitter", "blogger", "github" }.Contains(i.Name)).OrderBy(i => i.Order))
{
<a class="socicon-@(link.Name)" href="@(link.Url)" target="_blank" title="@(link.Title)"></a>
<a class="socicon-@(link.Name)" href="@(link.Url)" target="_blank" rel="noopener noreferrer" title="@(link.Title)"></a>
}
<a class="socicon-rss" href="//xfox111.blogspot.com/feeds/posts/default?alt=rss" target="_blank" title="RSS Feed"></a>
<a href="//buymeacoff.ee/xfox111" target="_blank" title="Buy me a coffee">
<a class="socicon-rss" href="//xfox111.blogspot.com/feeds/posts/default?alt=rss" target="_blank" rel="noopener noreferrer" title="RSS Feed"></a>
<a href="//buymeacoff.ee/xfox111" target="_blank" rel="noopener noreferrer" title="Buy me a coffee">
<img width="24" height="25" src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg">
</a>
</div>
+31 -9
View File
@@ -3,30 +3,52 @@
ViewData["Title"] = Model.Post.Title + " - Fox, Coffee and Science - " + SharedLocalizer["Blog"];
}
@section OpenGraph
{
<meta name="author" content="@Model.Post.Author.DisplayName" />
<meta name="description" content="@(new System.Text.RegularExpressions.Regex(@"(?<=\<p\>)(\s*.*\s*)(?=\<\/p\>)").Match(Model.Post.Content).Value.Replace("\n", ""))" />
<meta property="og:type" content="article" />
<meta property="og:site_name" content="Fox, Coffee and Science Blog" />
<meta property="og:url" content="@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")" />
<meta property="og:locale" content="en_US" />
<meta property="og:title" content="@Model.Post.Title" />
<meta property="og:image" content="@(Model.Post.Images.FirstOrDefault()?.Url)" />
<meta property="og:description" content="@(new System.Text.RegularExpressions.Regex(@"(?<=\<p\>)(\s*.*\s*)(?=\<\/p\>)").Match(Model.Post.Content).Value.Replace("\n", ""))" />
<meta property="article:published_time" content="@Model.Post.Published" />
<meta property="article:modified_time" content="@Model.Post.Updated" />
@foreach (string tag in Model.Post.Labels)
{
<meta property="article:tag" content="@tag" />
}
}
<article>
<div class="post-body">
<div class="post-header">
<h2>@Model.Post.Title</h2>
<p>
@DateTime.Parse(Model.Post.Published).ToShortDateString() | <a href="@Model.Post.Author.Url" target="_blank">@Model.Post.Author.DisplayName</a><br />
@DateTime.Parse(Model.Post.Published).ToShortDateString() | <a href="@Model.Post.Author.Url" target="_blank" rel="noopener noreferrer">@Model.Post.Author.DisplayName</a><br />
</p>
<div class="share-btns">
<a class="share-btn facebook" target="_blank" href="//www.facebook.com/sharer/sharer.php?u=@Context.Request.Scheme://@Context.Request.Host@Context.Request.Path" title="Facebook">
<a class="share-btn facebook" target="_blank" rel="noopener noreferrer" href="//www.facebook.com/sharer/sharer.php?u=@Context.Request.Scheme://@Context.Request.Host@Context.Request.Path" title="Facebook">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve" class="eapps-social-share-buttons-item-icon">
<path d="M5.677,12.998V8.123h3.575V6.224C9.252,2.949,11.712,0,14.736,0h3.94v4.874h-3.94 c-0.432,0-0.934,0.524-0.934,1.308v1.942h4.874v4.874h-4.874V24H9.252V12.998H5.677z"></path>
</svg>
</a>
<a class="share-btn twitter" target="_blank" href="//twitter.com/intent/tweet?url=@Context.Request.Scheme://@Context.Request.Host@Context.Request.Path&text=@Model.Post.Title" title="Twitter">
<a class="share-btn twitter" target="_blank" rel="noopener noreferrer" href="//twitter.com/intent/tweet?url=@Context.Request.Scheme://@Context.Request.Host@Context.Request.Path&text=@Model.Post.Title" title="Twitter">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve" class="eapps-social-share-buttons-item-icon">
<path fill="%233E68C0" d="M21.535,7.063c0.311,6.923-4.852,14.642-13.99,14.642 c-2.78,0-5.368-0.815-7.545-2.213c2.611,0.308,5.217-0.415,7.287-2.038c-2.154-0.039-3.972-1.462-4.599-3.418 c0.771,0.148,1.53,0.105,2.223-0.084c-2.367-0.475-4.002-2.608-3.948-4.888c0.664,0.369,1.423,0.59,2.229,0.615 C1.001,8.215,0.38,5.32,1.67,3.108c2.428,2.978,6.055,4.938,10.145,5.143c-0.717-3.079,1.618-6.044,4.796-6.044 c1.415,0,2.694,0.598,3.592,1.554c1.121-0.221,2.174-0.631,3.126-1.195c-0.368,1.149-1.149,2.114-2.164,2.724 c0.995-0.119,1.944-0.384,2.826-0.776C23.331,5.503,22.497,6.37,21.535,7.063z"></path>
</svg>
</a>
<a class="share-btn linkedin" target="_blank" href="https://www.linkedin.com/sharing/share-offsite/?url=@Context.Request.Scheme://@Context.Request.Host@Context.Request.Path" title="LinkedIn">
<a class="share-btn linkedin" target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/sharing/share-offsite/?url=@Context.Request.Scheme://@Context.Request.Host@Context.Request.Path" title="LinkedIn">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve" class="eapps-social-share-buttons-item-icon">
<path fill="%233E68C0" d="M6.52,22h-4.13V8.667h4.13V22z M4.436,6.92 c-1.349,0-2.442-1.101-2.442-2.46C1.994,3.102,3.087,2,4.436,2s2.442,1.102,2.442,2.46C6.877,5.819,5.784,6.92,4.436,6.92z M21.994,22h-4.109c0,0,0-5.079,0-6.999c0-1.919-0.73-2.991-2.249-2.991c-1.652,0-2.515,1.116-2.515,2.991c0,2.054,0,6.999,0,6.999 h-3.96V8.667h3.96v1.796c0,0,1.191-2.202,4.02-2.202c2.828,0,4.853,1.727,4.853,5.298C21.994,17.129,21.994,22,21.994,22z"></path>
</svg>
</a>
<a class="share-btn vk" target="_blank" href="//vk.com/share.php?url=@Context.Request.Scheme://@Context.Request.Host@Context.Request.Path&title=@Model.Post.Title" title="VK">
<a class="share-btn vk" target="_blank" rel="noopener noreferrer" href="//vk.com/share.php?url=@Context.Request.Scheme://@Context.Request.Host@Context.Request.Path&title=@Model.Post.Title" title="VK">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve" class="eapps-social-share-buttons-item-icon">
<path fill="%233E68C0" d="M23.876,17.52c-0.029-0.063-0.056-0.115-0.081-0.156c-0.416-0.75-1.212-1.67-2.387-2.762l-0.025-0.025 l-0.012-0.012l-0.013-0.013h-0.013c-0.533-0.508-0.871-0.85-1.012-1.025c-0.259-0.333-0.317-0.671-0.175-1.012 c0.1-0.258,0.475-0.804,1.125-1.637c0.342-0.442,0.612-0.795,0.812-1.062c1.441-1.916,2.066-3.141,1.874-3.674l-0.074-0.125 c-0.05-0.075-0.096-0.116-0.304-0.178c-0.208-0.062-0.466-0.057-1.107-0.057l-3.03,0.021c-0.155,0-0.486-0.017-0.594,0.008 s-0.163,0.038-0.163,0.038L18.633,5.88l-0.05,0.038c-0.042,0.025-0.087,0.069-0.138,0.131c-0.05,0.062-0.091,0.135-0.125,0.219 c-0.392,1.008-0.837,1.945-1.337,2.811c-0.308,0.517-0.591,0.964-0.85,1.343c-0.258,0.379-0.475,0.658-0.65,0.837 c-0.175,0.179-0.333,0.323-0.475,0.431s-0.25,0.154-0.325,0.138c-0.075-0.017-0.146-0.033-0.213-0.05 c-0.117-0.075-0.21-0.177-0.281-0.306s-0.119-0.292-0.144-0.487c-0.025-0.196-0.04-0.364-0.044-0.506 c-0.004-0.141-0.002-0.342,0.006-0.6c0.009-0.258,0.013-0.433,0.013-0.525c0-0.317,0.006-0.66,0.019-1.031s0.023-0.664,0.031-0.881 s0.012-0.446,0.012-0.687c0-0.242-0.015-0.431-0.044-0.569c-0.029-0.137-0.073-0.271-0.131-0.4s-0.144-0.229-0.256-0.3 c-0.112-0.071-0.252-0.127-0.419-0.169c-0.442-0.1-1.004-0.154-1.687-0.162C9.996,5.138,9,5.238,8.559,5.455 C8.384,5.547,8.226,5.672,8.084,5.83c-0.15,0.183-0.171,0.283-0.063,0.3c0.5,0.075,0.854,0.254,1.062,0.537l0.075,0.15 c0.058,0.108,0.117,0.3,0.175,0.575c0.058,0.275,0.096,0.579,0.112,0.912c0.042,0.608,0.042,1.129,0,1.562 s-0.081,0.771-0.119,1.012c-0.038,0.242-0.094,0.437-0.169,0.587s-0.125,0.242-0.15,0.275s-0.046,0.054-0.062,0.062 c-0.108,0.042-0.221,0.063-0.337,0.063c-0.117,0-0.258-0.058-0.425-0.175c-0.167-0.117-0.339-0.277-0.519-0.481 c-0.179-0.204-0.381-0.489-0.606-0.856c-0.225-0.366-0.458-0.8-0.7-1.299l-0.2-0.362C6.033,8.459,5.862,8.119,5.646,7.674 C5.429,7.228,5.238,6.797,5.071,6.381c-0.067-0.175-0.167-0.308-0.3-0.4L4.708,5.943C4.666,5.91,4.6,5.874,4.508,5.837 C4.416,5.799,3.576,5.766,3.219,5.766L0.831,5.78c-0.35,0-0.621,0.08-0.746,0.239l-0.05,0.075c-0.025,0.042-0.038,0.108-0.038,0.2 s0.025,0.204,0.075,0.337c0.5,1.175,1.043,2.308,1.631,3.399C2.29,11.121,2.801,12,3.234,12.666 c0.433,0.667,0.875,1.296,1.325,1.887c0.45,0.592,0.748,0.971,0.893,1.137c0.146,0.167,0.26,0.292,0.344,0.375l0.312,0.3 c0.2,0.2,0.494,0.439,0.881,0.718c0.387,0.279,0.816,0.554,1.287,0.825c0.471,0.271,1.018,0.491,1.643,0.662 s1.218,0.206,1.824,0.206h1.437c0.291-0.025,0.512-0.117,0.662-0.275l0.05-0.063c0.033-0.05,0.065-0.127,0.094-0.231 s0.044-0.219,0.044-0.344c-0.009-0.358,0.019-0.681,0.081-0.968s0.133-0.504,0.213-0.65c0.079-0.146,0.169-0.269,0.269-0.368 c0.1-0.1,0.171-0.16,0.213-0.181c0.041-0.021,0.075-0.035,0.1-0.044c0.2-0.067,0.435-0.002,0.706,0.194s0.525,0.437,0.762,0.725 s0.523,0.61,0.856,0.968s0.625,0.625,0.875,0.8l0.25,0.15c0.167,0.1,0.383,0.192,0.65,0.275c0.266,0.083,0.401,0.062,0.7,0.062 l3.262-0.003c0.316,0,0.5-0.099,0.674-0.203c0.175-0.104,0.279-0.219,0.312-0.344s0.035-0.267,0.006-0.425 C23.935,17.693,23.905,17.582,23.876,17.52z"></path>
</svg>
@@ -47,7 +69,7 @@
<div class="post-comments" style="display: none !important;">
<h3>Comments: @Model.Post.Replies.TotalItems</h3>
<p>
<a class="comment" href="@Model.Post.Url" target="_blank">// Add comment on Blogpost</a>
<a class="comment" href="@Model.Post.Url" target="_blank" rel="noopener noreferrer">// Add comment on Blogpost</a>
</p>
<div>
@foreach (var i in Model.Post.Replies.Items.Where(i => i.InReplyTo == null))
@@ -66,10 +88,10 @@
<div class="follow-list">
@foreach (LinkModel link in Model.Links.Where(i => new[] { "twitter", "blogger", "github" }.Contains(i.Name)).OrderBy(i => i.Order))
{
<a class="socicon-@(link.Name)" href="@(link.Url)" target="_blank" title="@(link.Title)"></a>
<a class="socicon-@(link.Name)" href="@(link.Url)" target="_blank" rel="noopener noreferrer" title="@(link.Title)"></a>
}
<a class="socicon-rss" href="//xfox111.blogspot.com/feeds/posts/default?alt=rss" target="_blank" title="RSS Feed"></a>
<a href="//buymeacoff.ee/xfox111" target="_blank" title="Buy me a coffee">
<a class="socicon-rss" href="//xfox111.blogspot.com/feeds/posts/default?alt=rss" target="_blank" rel="noopener noreferrer" title="RSS Feed"></a>
<a href="//buymeacoff.ee/xfox111" target="_blank" rel="noopener noreferrer" title="Buy me a coffee">
<img width="24" height="25" src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg">
</a>
</div>
+36 -20
View File
@@ -1,21 +1,37 @@
@model ResumeViewModel
@{
ViewData["Title"] = Localizer["My resume"];
}
<header>
<h1>@Localizer["My resume"]</h1>
<p>@Localizer["Last update"]: @Model.Resume.LastUpdate</p>
<a class="comment" asp-action="Download">// @Localizer["Download CV"] (.pdf) &#xE118;</a><br />
<a class="comment" asp-action="Print">// @Localizer["Print CV"] &#xE749;</a>
</header>
<article>
@Html.Raw(Model.Resume.Content)
</article>
@section Footer
{
<partial name="~/Views/Shared/ContactsBlock.cshtml" />
@model ResumeViewModel
@{
ViewData["Title"] = Localizer["My resume"];
}
@section OpenGraph
{
<meta name="author" content="@SharedLocalizer["Michael &apos;XFox&apos; Gordeev"]" />
<meta name="description" content="@SharedLocalizer["Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!"]" />
<meta property="og:type" content="article" />
<meta property="og:site_name" content="@SharedLocalizer["Michael &apos;XFox&apos; Gordeev"]" />
<meta property="og:url" content="https://XFox111.NET/Resume" />
<meta property="og:locale" content="@SharedLocalizer["en"]" />
<meta property="og:image" content="https://xfox111.net/images/me.jpg" />
<meta property="og:description" content="@SharedLocalizer["Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!"]" />
<meta property="og:title" content="@Localizer["My resume"]" />
<meta property="article:modified_time" content="@Model.Resume.LastUpdate.ToString("o")" />
}
<header>
<h1>@Localizer["My resume"]</h1>
<p>@Localizer["Last update"]: @Model.Resume.LastUpdate</p>
<a class="comment" asp-action="Download">// @Localizer["Download resume"] (.pdf) &#xE118;</a><br />
<a class="comment" asp-action="Print">// @Localizer["Print resume"] &#xE749;</a>
</header>
<article>
@Html.Raw(Model.Resume.Content)
</article>
@section Footer
{
<partial name="~/Views/Shared/ContactsBlock.cshtml" />
}
@@ -1,119 +1,119 @@
@model ViewModelBase
@using Microsoft.AspNetCore.Http
@{
Layout = null;
HttpRequest request = ViewContext.HttpContext.Request;
}
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Ready - XFox111</title>
<base href="~/assets/Construction/" />
<link rel="stylesheet" type="text/css" href="Construction.css">
<link rel="stylesheet" type="text/css" href="~/css/Fonts.css">
<script type="text/javascript" src="Construction.js"></script>
<meta name="author" content="Michael 'XFox' Gordeev">
<meta name="description" content="Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!">
<meta property="og:type" content="website">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="//xfox111.net/pics/me.jpg">
<meta property="og:description" content="Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!">
<meta property="og:title" content="Michael 'XFox' Gordeev - Personal website">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body onload="Load();">
<nav>
<div>
<span>Output</span>
<div></div>
<div>
<div class="btn hide" title="Window Position"></div>
<div class="btn maximize" title="Maximize"></div>
<div class="btn close" title="Close"></div>
</div>
</div>
<div>
<span>Show output from:</span>
<select>
<option selected>Build</option>
</select>
<img draggable="false" src="Images/tools.png" />
</div>
</nav>
<main id="output">
<p>1>------ Build started: Project: xfox111.net, Configuration: Any CPU ------</p>
<p>1> xfox111.net -> @request.Scheme://@request.Host/MyWebsite.dll </p>
<p>2>------ Deploy started: Project: xfox111.net, Configuration: Any CPU ------</p>
<p>Updating the layout...</p>
<p>Copying files: Total &#x3C;1 mb to layout...</p>
<p>Checking whether required frameworks are installed...</p>
<p>Registering the website to run from layout...</p>
<br />
<p class="err">========== Deployment failed ==========</p>
<p>Error message:</p>
<p class="err">========== Site is under construction ==========</p>
<br />
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/‾\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;_&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;╭-╮\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;----╰-╯&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;///&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;///&nbsp;&nbsp;/||&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;>&nbsp;&nbsp;/&nbsp;||&nbsp;&nbsp;___\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;^&nbsp;\՟||_/&nbsp;&nbsp;&nbsp;\\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;|&nbsp;\&nbsp;-/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;&nbsp;|&nbsp;|&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/_/&nbsp;&nbsp;&nbsp;|_|/_________\\&nbsp;&nbsp;\<br />
&nbsp;/&nbsp;&nbsp;/_________________________\&nbsp;&nbsp;\<br />
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
</p>
<br />
<p>It will be done soon</p>
<p>For now you can check my other links:</p>
<br />
@foreach (LinkModel item in Model.Links.Where(i => i.Name.Belongs("outlook", "linkedin", "vkontakte", "twitter", "github")))
{
<p>@item.Title: <a href="@item.Url" target="_blank">@((item.Url.ToString().StartsWith("mailto:") ? "" : "https:") + item.Url)</a></p>
}
<br />
<p>========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========</p>
<p>========== Deploy: 0 succeeded, 1 failed, 0 skipped ==========</p>
</main>
<footer>
<div class="status-bar-btn btn task" title="Background tasks"></div>
<span id="status">Ready</span>
<div class="git-btn btn push" title="4 unpushed commits">
<span>4</span>
</div>
<div class="git-btn btn commit" title="11 changes">
<span>11</span>
</div>
<div class="git-btn btn git" title="Path: //xfox111.net">
<span>xfox111</span>
</div>
<div class="git-btn btn branch" title="Name: master">
<span>master</span>
</div>
<div class="status-bar-btn btn notification" title="No Notifications"></div>
</footer>
</body>
@model ViewModelBase
@using Microsoft.AspNetCore.Http
@{
Layout = null;
HttpRequest request = ViewContext.HttpContext.Request;
}
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Ready - XFox111</title>
<base href="~/assets/Construction/" />
<link rel="stylesheet" type="text/css" href="Construction.css">
<link rel="stylesheet" type="text/css" href="~/css/Fonts.css">
<script type="text/javascript" src="Construction.js"></script>
<meta name="author" content="Michael 'XFox' Gordeev">
<meta name="description" content="Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!">
<meta property="og:type" content="website">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="//xfox111.net/pics/me.jpg">
<meta property="og:description" content="Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!">
<meta property="og:title" content="Michael 'XFox' Gordeev - Personal website">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body onload="Load();">
<nav>
<div>
<span>Output</span>
<div></div>
<div>
<div class="btn hide" title="Window Position"></div>
<div class="btn maximize" title="Maximize"></div>
<div class="btn close" title="Close"></div>
</div>
</div>
<div>
<span>Show output from:</span>
<select>
<option selected>Build</option>
</select>
<img draggable="false" src="Images/tools.png" />
</div>
</nav>
<main id="output">
<p>1>------ Build started: Project: xfox111.net, Configuration: Any CPU ------</p>
<p>1> xfox111.net -> @request.Scheme://@request.Host/MyWebsite.dll </p>
<p>2>------ Deploy started: Project: xfox111.net, Configuration: Any CPU ------</p>
<p>Updating the layout...</p>
<p>Copying files: Total &#x3C;1 mb to layout...</p>
<p>Checking whether required frameworks are installed...</p>
<p>Registering the website to run from layout...</p>
<br />
<p class="err">========== Deployment failed ==========</p>
<p>Error message:</p>
<p class="err">========== Site is under construction ==========</p>
<br />
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/‾\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;_&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;╭-╮\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;----╰-╯&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;///&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;///&nbsp;&nbsp;/||&nbsp;&nbsp;&nbsp;&nbsp;\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;>&nbsp;&nbsp;/&nbsp;||&nbsp;&nbsp;___\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;^&nbsp;\՟||_/&nbsp;&nbsp;&nbsp;\\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;|&nbsp;\&nbsp;-/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/&nbsp;/&nbsp;&nbsp;|&nbsp;|&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\\&nbsp;&nbsp;\<br />
&nbsp;&nbsp;/&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;/_/&nbsp;&nbsp;&nbsp;|_|/_________\\&nbsp;&nbsp;\<br />
&nbsp;/&nbsp;&nbsp;/_________________________\&nbsp;&nbsp;\<br />
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />
&nbsp;‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
</p>
<br />
<p>It will be done soon</p>
<p>For now you can check my other links:</p>
<br />
@foreach (LinkModel item in Model.Links.Where(i => i.Name.Belongs("outlook", "linkedin", "vkontakte", "twitter", "github")))
{
<p>@item.Title: <a href="@item.Url" target="_blank" rel="noopener noreferrer">@((item.Url.ToString().StartsWith("mailto:") ? "" : "https:") + item.Url)</a></p>
}
<br />
<p>========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========</p>
<p>========== Deploy: 0 succeeded, 1 failed, 0 skipped ==========</p>
</main>
<footer>
<div class="status-bar-btn btn task" title="Background tasks"></div>
<span id="status">Ready</span>
<div class="git-btn btn push" title="4 unpushed commits">
<span>4</span>
</div>
<div class="git-btn btn commit" title="11 changes">
<span>11</span>
</div>
<div class="git-btn btn git" title="Path: //xfox111.net">
<span>xfox111</span>
</div>
<div class="git-btn btn branch" title="Name: master">
<span>master</span>
</div>
<div class="status-bar-btn btn notification" title="No Notifications"></div>
</footer>
</body>
</html>
@@ -1,23 +1,23 @@
@model ViewModelBase
@{
ViewData["Title"] = SharedLocalizer["Contact information"];
}
<header>
<h1>@SharedLocalizer["Contact information"]</h1>
</header>
<article>
<p>
@foreach (LinkModel link in Model.Links.Where(i => i.CanContactMe))
{
<a class="socicon-@(link.Name)"></a> @(link.Title) <a href="@(link.Url)" target="_blank">@(link.Username)</a><br />
}
</p>
<p>
@foreach (LinkModel link in Model.Links.Where(i => !i.CanContactMe))
{
<a class="socicon-@(link.Name)"></a> @(link.Title) <a href="@(link.Url)" target="_blank">@(link.Username)</a><br />
}
</p>
@model ViewModelBase
@{
ViewData["Title"] = SharedLocalizer["Contact information"];
}
<header>
<h1>@SharedLocalizer["Contact information"]</h1>
</header>
<article>
<p>
@foreach (LinkModel link in Model.Links.Where(i => i.CanContactMe))
{
<a class="socicon-@(link.Name)"></a> @(link.Title) <a href="@(link.Url)" target="_blank" rel="noopener noreferrer">@(link.Username)</a><br />
}
</p>
<p>
@foreach (LinkModel link in Model.Links.Where(i => !i.CanContactMe))
{
<a class="socicon-@(link.Name)"></a> @(link.Title) <a href="@(link.Url)" target="_blank" rel="noopener noreferrer">@(link.Username)</a><br />
}
</p>
</article>
@@ -1,36 +1,36 @@
@model ViewModelBase
@{
LinkModel email = Model.Links.FirstOrDefault(i => i.Name == "outlook" || i.Name == "email");
List<LinkModel> links = Model.Links.Where(i => new string[] { "linkedin", "github", "twitter", "vkontakte" }.Contains(i.Name)).OrderBy(i => i.Order).ToList();
}
<footer>
<var>if</var> (<var class="class">@SharedLocalizer["You"]</var>.@SharedLocalizer["InterestedInMe"])<br />
<div>
<var class="method">@SharedLocalizer["ContactMe"]</var>();<br />
</div>
<br />
<a class="comment">// @SharedLocalizer["All links are clickable"] </a><br />
<var>public void</var> <var class="method">@SharedLocalizer["ContactMe"]</var>()<br />
{<br />
<div>
@if (email != null)
{
<span><var>string</var> email = <a href="@email.Url">@email.Username</a>;<br /></span>
}
<var class="class">Link</var>[] @SharedLocalizer["socialNetworks"] = <var>new</var> <var class="class">Link</var>[]<br />
{<br />
<div>
@foreach (LinkModel link in links)
{
<span><img /><img /><var>new</var> <var class="class">Link</var>(<a>@(link.Title)</a>, <a target="_blank" href="@(link.Url)">https:@(link.Url)</a>),</span><br />
}
</div>
}<br />
</div>
}<br />
<br />
<a class="comment">// @SharedLocalizer["Copyright"] &copy;@(DateTime.Today.Year) @SharedLocalizer["Michael \"XFox\" Gordeev"]</a>
</footer>
@model ViewModelBase
@{
LinkModel email = Model.Links.FirstOrDefault(i => i.Name == "outlook" || i.Name == "email");
List<LinkModel> links = Model.Links.Where(i => new string[] { "linkedin", "github", "twitter", "vkontakte" }.Contains(i.Name)).OrderBy(i => i.Order).ToList();
}
<footer>
<var>if</var> (<var class="class">@SharedLocalizer["You"]</var>.@SharedLocalizer["InterestedInMe"])<br />
<div>
<var class="method">@SharedLocalizer["ContactMe"]</var>();<br />
</div>
<br />
<a class="comment">// @SharedLocalizer["All links are clickable"] </a><br />
<var>public void</var> <var class="method">@SharedLocalizer["ContactMe"]</var>()<br />
{<br />
<div>
@if (email != null)
{
<span><var>string</var> email = <a href="@email.Url">@email.Username</a>;<br /></span>
}
<var class="class">Link</var>[] @SharedLocalizer["socialNetworks"] = <var>new</var> <var class="class">Link</var>[]<br />
{<br />
<div>
@foreach (LinkModel link in links)
{
<span><img /><img /><var>new</var> <var class="class">Link</var>(<a>@(link.Title)</a>, <a target="_blank" rel="noopener noreferrer" href="@(link.Url)">https:@(link.Url)</a>),</span><br />
}
</div>
}<br />
</div>
}<br />
<br />
<a class="comment">// @SharedLocalizer["Copyright"] &copy;@(DateTime.Today.Year) @SharedLocalizer["Michael \"XFox\" Gordeev"]</a>
</footer>
<link rel="stylesheet" type="text/css" href="~/css/ContactsBlock.css" />
@@ -1,46 +1,46 @@
@model ProjectsViewModel
@{
ViewData["Title"] = SharedLocalizer["My projects"];
}
<header>
<div>
<h1>@SharedLocalizer["My projects"]</h1>
<h3>@SharedLocalizer["Here is presented the most of projects I worked on"]</h3>
</div>
<iframe src="//githubbadge.appspot.com/xfox111" class="github-stats" frameborder="0"></iframe>
</header>
<article>
@if (Model.Projects.Count() > 0)
{
@foreach (ProjectModel project in Model.Projects.OrderBy(i => i.Order))
{
<div class="project-item">
<div>
<h1>@project.Title</h1>
<p>
@Html.Raw(project.Description?.Replace("\n", "<br />"))
</p>
<a href="@(project.Link)" target="_blank">@project.LinkCaption</a>
</div>
<div class="badge-placeholder">
@foreach (string b in (project.Badges ?? "").Split(','))
{
BadgeModel badge = Model.Badges.FirstOrDefault(i => i.Name == b);
<div style="background-image: url('../images/Badges/@(badge?.Image).png')" title="@(badge?.Description)"></div>
}
</div>
</div>
}
}
else
{
<p style="margin: 0px 40px" class="comment">// @SharedLocalizer["No content available"]</p>
}
</article>
@section Imports
{
<link rel="stylesheet" type="text/css" href="~/css/Projects.css" />
@model ProjectsViewModel
@{
ViewData["Title"] = SharedLocalizer["My projects"];
}
<header>
<div>
<h1>@SharedLocalizer["My projects"]</h1>
<h3>@SharedLocalizer["Here is presented the most of projects I worked on"]</h3>
</div>
<iframe src="//githubbadge.appspot.com/xfox111" class="github-stats" frameborder="0"></iframe>
</header>
<article>
@if (Model.Projects.Count() > 0)
{
@foreach (ProjectModel project in Model.Projects.OrderBy(i => i.Order))
{
<div class="project-item">
<div>
<h1>@project.Title</h1>
<p>
@Html.Raw(project.Description?.Replace("\n", "<br />"))
</p>
<a href="@(project.Link)" target="_blank" rel="noopener noreferrer">@project.LinkCaption</a>
</div>
<div class="badge-placeholder">
@foreach (string b in (project.Badges ?? "").Split(','))
{
BadgeModel badge = Model.Badges.FirstOrDefault(i => i.Name == b);
<div style="background-image: url('../images/Badges/@(badge?.Image).png')" title="@(badge?.Description)"></div>
}
</div>
</div>
}
}
else
{
<p style="margin: 0px 40px" class="comment">// @SharedLocalizer["No content available"]</p>
}
</article>
@section Imports
{
<link rel="stylesheet" type="text/css" href="~/css/Projects.css" />
}
+92 -92
View File
@@ -1,93 +1,93 @@
@model ViewModelBase
<!DOCTYPE html>
<html>
<head>
<title>@ViewData["Title"] - XFox111.NET</title>
<link rel="shortcut icon" href="~/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="~/css/Style.css" />
<link rel="stylesheet" type="text/css" href="~/css/Fonts.css" />
<link rel="stylesheet" type="text/css" href="~/css/Socicon.css" />
@if (Context.Request.Cookies.ContainsKey("useComicSans"))
{
<style type="text/css">
body
{
font-family: 'Comic Sans MS', 'Consolas', 'SegoeMDL2Assets';
}
</style>
}
<script type="text/javascript">
function ToggleMenu()
{
var menu = document.querySelector("nav menu");
if (menu.style.display == "none")
menu.style.display = "initial";
else
menu.style.display = "none";
}
</script>
@RenderSection("Imports", false)
@{
if (IsSectionDefined("OpenGraph"))
RenderSection("OpenGraph");
else
{
<meta name="author" content="@SharedLocalizer["Michael \"XFox\" Gordeev"]" />
<meta name="description" content="@SharedLocalizer["Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!"]" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="XFox111.NET" />
<meta property="og:url" content="//XFox111.NET/" />
<meta property="og:locale" content="@SharedLocalizer["en"]" />
<meta property="og:image" content="/images/me.png" />
<meta property="og:description" content="@SharedLocalizer["Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!"]" />
<meta property="og:title" content="@SharedLocalizer["Michael \"XFox\" Gordeev"] - @SharedLocalizer["Personal website"]" />
}
}
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<nav>
<a asp-controller="Home" asp-action="Index" asp-area="">XFox111.NET</a>
<menu type="toolbar" style="display:none">
<partial name="~/Views/Shared/TopBarMenu.cshtml" />
</menu>
<div>
<a asp-area="" asp-controller="Home" asp-action="SwitchLanguage" lang="@SharedLocalizer["ru"]">@SharedLocalizer["РУС"] &#xE12B;</a>
<a id="menu-toggle" onclick="ToggleMenu();">&#xE700;</a>
</div>
</nav>
<main onclick="document.querySelector('nav menu').style.display = 'none'">
@RenderBody()
</main>
@{
if (IsSectionDefined("Footer"))
RenderSection("Footer");
else
{
<footer>
<span class="comment">// @SharedLocalizer["Copyright"] &copy;@(DateTime.Today.Year) @SharedLocalizer["Michael \"XFox\" Gordeev"]</span>
<div>
@foreach (LinkModel link in Model.Links.Where(i => i.DisplayInFooter).OrderBy(i => i.Order))
{
<a class="socicon-@(link.Name)" href="@(link.Url)" target="_blank" title="@(link.Title)"></a>
}
</div>
</footer>
}
}
</body>
@model ViewModelBase
<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns#">
<head>
<title>@ViewData["Title"] - XFox111.NET</title>
<link rel="shortcut icon" href="~/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="~/css/Style.css" />
<link rel="stylesheet" type="text/css" href="~/css/Fonts.css" />
<link rel="stylesheet" type="text/css" href="~/css/Socicon.css" />
@if (Context.Request.Cookies.ContainsKey("useComicSans"))
{
<style type="text/css">
body
{
font-family: 'Comic Sans MS', 'Consolas', 'SegoeMDL2Assets';
}
</style>
}
<script type="text/javascript">
function ToggleMenu()
{
var menu = document.querySelector("nav menu");
if (menu.style.display == "none")
menu.style.display = "initial";
else
menu.style.display = "none";
}
</script>
@RenderSection("Imports", false)
@{
if (IsSectionDefined("OpenGraph"))
RenderSection("OpenGraph");
else
{
<meta name="author" content="@SharedLocalizer["Michael &apos;XFox&apos; Gordeev"]" />
<meta name="description" content="@SharedLocalizer["Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!"]" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="XFox111.NET" />
<meta property="og:url" content="@Context.Request.Scheme://@Context.Request.Host@(Context.Request.Path)@Context.Request.QueryString" />
<meta property="og:locale" content="@SharedLocalizer["en"]" />
<meta property="og:image" content="https://xfox111.net/images/me.jpg" />
<meta property="og:description" content="@SharedLocalizer["Hi, my name is Michael. I'm C# Developer and this is my personal website. Here you can find info about me, my projects and more. Check it out!"]" />
<meta property="og:title" content="@SharedLocalizer["Michael &apos;XFox&apos; Gordeev"] - @SharedLocalizer["Personal website"]" />
}
}
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<nav>
<a asp-controller="Home" asp-action="Index" asp-area="">XFox111.NET</a>
<menu type="toolbar" style="display:none">
<partial name="~/Views/Shared/TopBarMenu.cshtml" />
</menu>
<div>
<a asp-area="" asp-controller="Home" asp-action="SwitchLanguage" lang="@SharedLocalizer["ru"]">@SharedLocalizer["РУС"] &#xE12B;</a>
<a id="menu-toggle" onclick="ToggleMenu();">&#xE700;</a>
</div>
</nav>
<main onclick="document.querySelector('nav menu').style.display = 'none'">
@RenderBody()
</main>
@{
if (IsSectionDefined("Footer"))
RenderSection("Footer");
else
{
<footer>
<span class="comment">// @SharedLocalizer["Copyright"] &copy;@(DateTime.Today.Year) @SharedLocalizer["Michael \"XFox\" Gordeev"]</span>
<div>
@foreach (LinkModel link in Model.Links.Where(i => i.DisplayInFooter).OrderBy(i => i.Order))
{
<a class="socicon-@(link.Name)" href="@(link.Url)" target="_blank" rel="noopener noreferrer" title="@(link.Title)"></a>
}
</div>
</footer>
}
}
</body>
</html>