17 changed files with 392 additions and 227 deletions
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using System.Threading.Tasks; |
||||
using Teknik.ViewModels; |
||||
|
||||
namespace Teknik.Areas.Users.ViewModels |
||||
{ |
||||
public class ViewServiceDataViewModel : ViewModelBase |
||||
{ |
||||
public DateTime LastSeen { get; set; } |
||||
|
||||
public List<Upload.Models.Upload> Uploads { get; set; } |
||||
|
||||
public List<Paste.Models.Paste> Pastes { get; set; } |
||||
|
||||
public List<Shortener.Models.ShortenedUrl> ShortenedUrls { get; set; } |
||||
|
||||
public List<Vault.Models.Vault> Vaults { get; set; } |
||||
} |
||||
} |
@ -0,0 +1,157 @@
@@ -0,0 +1,157 @@
|
||||
@model Teknik.Areas.Users.ViewModels.ViewServiceDataViewModel |
||||
|
||||
<script> |
||||
var deleteUploadURL = '@Url.SubRouteUrl("u", "Upload.Delete")'; |
||||
var deletePasteURL = '@Url.SubRouteUrl("p", "Paste.Delete")'; |
||||
var deleteShortenURL = '@Url.SubRouteUrl("s", "Shortener.Delete")'; |
||||
var deleteVaultURL = '@Url.SubRouteUrl("v", "Vault.Delete")'; |
||||
</script> |
||||
|
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-sm-12"> |
||||
<ul class="nav nav-tabs" id="myTab"> |
||||
<li><a href="#uploads" data-toggle="tab"> Uploads </a></li> |
||||
<li><a href="#pastes" data-toggle="tab"> Pastes </a></li> |
||||
<li><a href="#shortenedUrls" data-toggle="tab"> Shortened Urls </a></li> |
||||
<li><a href="#vaults" data-toggle="tab"> Vaults </a></li> |
||||
</ul> |
||||
<div class="tab-content"> |
||||
<div class="tab-pane" id="uploads"> |
||||
@foreach (Teknik.Areas.Upload.Models.Upload upload in Model.Uploads) |
||||
{ |
||||
<div class="panel panel-default" id="@upload.Url"> |
||||
<div class="panel-heading text-center"> |
||||
<a id="upload-url" href="@Url.SubRouteUrl("u", "Upload.Download", new { file = upload.Url })">@Url.SubRouteUrl("u", "Upload.Download", new { file = upload.Url })</a> |
||||
</div> |
||||
<div class="panel-body"> |
||||
<div class="col-sm-2 text-center"> |
||||
<label for="size">Size</label> |
||||
<p id="size">@StringHelper.GetBytesReadable(upload.ContentLength)</p> |
||||
</div> |
||||
<div class="col-sm-3 text-center"> |
||||
<label for="type">Type</label> |
||||
<p id="type">@upload.ContentType</p> |
||||
</div> |
||||
<div class="col-sm-3 text-center"> |
||||
<label for="dateUploaded">Date Uploaded</label> |
||||
<p id="dateUploaded"><time datetime="@upload.DateUploaded.ToString("s")">@upload.DateUploaded.ToString("MMMM dd, yyyy")</time></p> |
||||
</div> |
||||
<div class="col-sm-2 text-center"> |
||||
<label for="downloads">Downloads</label> |
||||
<p id="downloads">@upload.Downloads</p> |
||||
</div> |
||||
<div class="col-sm-2 text-center" style="overflow-x: hidden"> |
||||
<p id="delete-upload"><button role="button" class="btn btn-danger delete-upload-button" data-upload-id="@upload.Url">Delete</button></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
} |
||||
</div><!--/tab-pane--> |
||||
<div class="tab-pane" id="pastes"> |
||||
@foreach (Teknik.Areas.Paste.Models.Paste paste in Model.Pastes) |
||||
{ |
||||
<div class="panel panel-default" id="@paste.Url"> |
||||
<div class="panel-heading text-center"> |
||||
<a href="@Url.SubRouteUrl("paste", "Paste.View", new { url = paste.Url })">@(string.IsNullOrEmpty(paste.Title) ? "Untitled Paste" : paste.Title)</a> |
||||
</div> |
||||
<div class="panel-body"> |
||||
<div class="col-sm-1 text-center"> |
||||
<label for="syntax">Syntax</label> |
||||
<p id="syntax">@paste.Syntax</p> |
||||
</div> |
||||
<div class="col-sm-2 text-center"> |
||||
<label for="datePosted">Date Posted</label> |
||||
<p id="datePosted"><time datetime="@paste.DatePosted.ToString("s")">@paste.DatePosted.ToString("MMMM dd, yyyy")</time></p> |
||||
</div> |
||||
<div class="col-sm-2 text-center"> |
||||
<label for="expireDate">Expire Date</label> |
||||
@{ |
||||
string expireDate = "Never"; |
||||
if (paste.ExpireDate != null) |
||||
{ |
||||
expireDate = "<time datetime=\"" + paste.ExpireDate.Value.ToString("s") + "\">" + paste.ExpireDate.Value.ToString("MMMM dd, yyyy") + "</time>"; |
||||
} |
||||
} |
||||
<p id="expireDate">@Html.Raw(expireDate)</p> |
||||
</div> |
||||
<div class="col-sm-2 text-center"> |
||||
<label for="maxViews">Max Views</label> |
||||
<p id="maxViews">@paste.MaxViews</p> |
||||
</div> |
||||
<div class="col-sm-2 text-center"> |
||||
<label for="views">Views</label> |
||||
<p id="views">@paste.Views</p> |
||||
</div> |
||||
<div class="col-sm-1 text-center"> |
||||
<p id="delete-paste"><button role="button" class="btn btn-danger delete-paste-button" data-paste-id="@paste.Url">Delete</button></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
} |
||||
</div> |
||||
<div class="tab-pane" id="shortenedUrls"> |
||||
@foreach (Teknik.Areas.Shortener.Models.ShortenedUrl url in Model.ShortenedUrls) |
||||
{ |
||||
string shortUrl = string.Format("{0}://{1}/{2}", Context.Request.Scheme, Config.ShortenerConfig.ShortenerHost, url.ShortUrl); |
||||
if (Config.DevEnvironment) |
||||
{ |
||||
shortUrl = Url.SubRouteUrl("shortened", "Shortener.View", new { url = url.ShortUrl }); |
||||
} |
||||
<div class="panel panel-default" id="@url.ShortUrl"> |
||||
<div class="panel-heading text-center"> |
||||
<a href="@url.OriginalUrl">@url.OriginalUrl</a> |
||||
</div> |
||||
<div class="panel-body"> |
||||
<div class="col-sm-5 text-center"> |
||||
<label for="shortUrl">Short Url</label> |
||||
<p id="shortUrl"><a href="@shortUrl">@shortUrl</a></p> |
||||
</div> |
||||
<div class="col-sm-5 text-center"> |
||||
<label for="dateAdded">Date Added</label> |
||||
<p id="dateAdded"><time datetime="@url.DateAdded.ToString("s")">@url.DateAdded.ToString("MMMM dd, yyyy")</time></p> |
||||
</div> |
||||
<div class="col-sm-2 text-center"> |
||||
<label for="views">Views</label> |
||||
<p id="views">@url.Views</p> |
||||
</div> |
||||
<div class="col-sm-1 text-center"> |
||||
<p id="delete-shorten"><button role="button" class="btn btn-danger delete-shorten-button" data-shorten-id="@url.ShortUrl">Delete</button></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
} |
||||
</div> |
||||
<div class="tab-pane" id="vaults"> |
||||
@foreach (Teknik.Areas.Vault.Models.Vault vault in Model.Vaults) |
||||
{ |
||||
<div class="panel panel-default" id="@vault.Url"> |
||||
<div class="panel-heading text-center"> |
||||
<a href="@Url.SubRouteUrl("v", "Vault.ViewVault", new { id = vault.Url })">@(string.IsNullOrEmpty(vault.Title) ? "Vault" : vault.Title)</a> |
||||
</div> |
||||
<div class="panel-body"> |
||||
<div class="col-sm-5 text-center"> |
||||
<label for="dateAdded">Date Created</label> |
||||
<p id="dateAdded"><time datetime="@vault.DateCreated.ToString("s")">@vault.DateCreated.ToString("MMMM dd, yyyy")</time></p> |
||||
</div> |
||||
<div class="col-sm-5 text-center"> |
||||
<label for="dateAdded">Date Edited</label> |
||||
<p id="dateAdded"><time datetime="@vault.DateEdited.ToString("s")">@vault.DateEdited.ToString("MMMM dd, yyyy")</time></p> |
||||
</div> |
||||
<div class="col-sm-2 text-center"> |
||||
<label for="views">Views</label> |
||||
<p id="views">@vault.Views</p> |
||||
</div> |
||||
<div class="col-sm-1 text-center"> |
||||
<p id="delete-vault"><button role="button" class="btn btn-danger delete-vault-button" data-vault-id="@vault.Url">Delete</button></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
} |
||||
</div> |
||||
</div><!--/tab-content--> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<bundle src="js/user.serviceData.min.js" append-version="true"></bundle> |
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
$(document).ready(function () { |
||||
$('.delete-upload-button').click(function () { |
||||
var id = $(this).data('upload-id'); |
||||
var element = $('#uploads [id="' + id + '"'); |
||||
deleteItem(deleteUploadURL, id, element, "Are you sure you want to delete this upload?"); |
||||
}); |
||||
|
||||
$('.delete-paste-button').click(function () { |
||||
var id = $(this).data('paste-id'); |
||||
var element = $('#pastes [id="' + id + '"'); |
||||
deleteItem(deletePasteURL, id, element, "Are you sure you want to delete this paste?"); |
||||
}); |
||||
|
||||
$('.delete-shorten-button').click(function () { |
||||
var id = $(this).data('shorten-id'); |
||||
var element = $('#shortenedUrls [id="' + id + '"'); |
||||
deleteItem(deleteShortenURL, id, element, "Are you sure you want to delete this shortened url?"); |
||||
}); |
||||
|
||||
$('.delete-vault-button').click(function () { |
||||
var id = $(this).data('vault-id'); |
||||
var element = $('#vaults [id="' + id + '"'); |
||||
deleteItem(deleteVaultURL, id, element, "Are you sure you want to delete this vault?"); |
||||
}); |
||||
}); |
||||
|
||||
function deleteItem(url, id, element, confirmationMsg) { |
||||
bootbox.confirm(confirmationMsg, function (result) { |
||||
if (result) { |
||||
$.ajax({ |
||||
type: "POST", |
||||
url: url, |
||||
data: { id: id }, |
||||
headers: { 'X-Requested-With': 'XMLHttpRequest' }, |
||||
xhrFields: { |
||||
withCredentials: true |
||||
}, |
||||
success: function (response) { |
||||
if (response.result) { |
||||
element.remove(); |
||||
} |
||||
else { |
||||
$("#top_msg").css('display', 'inline', 'important'); |
||||
$("#top_msg").html('<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' + parseErrorMessage(response) + '</div>'); |
||||
} |
||||
}, |
||||
error: function (response) { |
||||
$("#top_msg").css('display', 'inline', 'important'); |
||||
$("#top_msg").html('<div class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' + parseErrorMessage(response.responseText) + '</div>'); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
} |
Loading…
Reference in new issue