Move server to separate folder.

This commit is contained in:
2019-11-02 01:40:41 +00:00
commit fd3f98384c
141 changed files with 37891 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : CODE_OF_CONDUCT.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders code of conduct.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef's code of conduct:
</p>
<div class="container">@Html.Raw(ViewBag.Markdown)</div>

View File

@@ -0,0 +1,42 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : CONTRIBUTING.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders contributing guidelines.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
How to contribute to DiscImageChef:
</p>
<div class="container">@Html.Raw(ViewBag.Markdown)</div>

View File

@@ -0,0 +1,42 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Changelog.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders changelog.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef list of changes:
</p>
<div class="container">@Html.Raw(ViewBag.Markdown)</div>

View File

@@ -0,0 +1,42 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : DONATING.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders list of needed donations.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef list of things to be donated:
</p>
<div class="container">@Html.Raw(ViewBag.Markdown)</div>

View File

@@ -0,0 +1,42 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : ISSUE_TEMPLATE.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders issue's template.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef's template for issue reports:
</p>
<div class="container">@Html.Raw(ViewBag.Markdown)</div>

View File

@@ -0,0 +1,47 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Index.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders readme.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<header>
Welcome to
<i>
<a href="http://github.com/claunia/discimagechef"
target="_blank">
DiscImageChef
</a>
</i> Server version @ViewBag.lblVersion
</header>
<div class="container">@Html.Raw(ViewBag.Markdown)</div>

View File

@@ -0,0 +1,42 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : PULL_REQUEST_TEMPLATE.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders pull request's template.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef's template for pull requests:
</p>
<div class="container">@Html.Raw(ViewBag.Markdown)</div>

View File

@@ -0,0 +1,42 @@
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : TODO.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders todo list.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<p>
@Html.ActionLink("Return to main page.", "Index")<br />
DiscImageChef list of things to do:
</p>
<div class="container">@Html.Raw(ViewBag.Markdown)</div>

View File

@@ -0,0 +1,265 @@
@using DiscImageChef.CommonTypes.Metadata
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "DiscImageChef Device Report";
}
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : View.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders device report.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<div class="container-fluid">
DiscImageChef Report for
@ViewBag.lblManufacturer
@ViewBag.lblModel
@ViewBag.lblRevision
@if(ViewBag.UsbItem != null)
{
<div id="divUsb">
<br />
<b>USB characteristics:</b><br />
<i>Manufacturer:</i> @ViewBag.UsbItem.Manufacturer<br />
<i>Product:</i> @ViewBag.UsbItem.Product<br />
<i>Vendor ID:</i> @ViewBag.UsbItem.VendorDescription<br />
<i>Product ID:</i> @ViewBag.UsbItem.ProductDescription
</div>
}
@if(ViewBag.FireWireItem != null)
{
<div id="divFireWire">
<br />
<b>FireWire characteristics:</b><br />
<i>Manufacturer:</i> @ViewBag.FireWire.Manufacturer<br />
<i>Product:</i> @ViewBag.FireWire.Product<br />
<i>Vendor ID:</i> @ViewBag.FireWire.VendorDescription<br />
<i>Product ID:</i> @ViewBag.FireWire.ProductDescription
</div>
}
@if(ViewBag.PcmciaItem != null)
{
<div id="divPcmcia">
<br />
<b>PCMCIA characteristics:</b><br />
<i>Manufacturer:</i> @ViewBag.PcmciaItem.Manufacturer<br />
<i>Product:</i> @ViewBag.PcmciaItem.ProductName<br />
<i>Manufacturer code:</i> @ViewBag.PcmciaItem.VendorDescription<br />
<i>Card code:</i> @ViewBag.PcmciaItem.CardCode<br />
<i>Compliance:</i> @ViewBag.PcmciaItem.Compliance<br />
@if(ViewBag.repPcmciaTuples != null)
{
foreach(KeyValuePair<string, string> kvp in ViewBag.repPcmciaTuples)
{
<text><i>@kvp.Key</i>: @kvp.Value<br /></text>
}
}
</div>
}
@if(ViewBag.AtaItem != null)
{
<div id="divAta">
<br />
<b>
@ViewBag.AtaItem characteristics:
</b><br />
@ViewBag.lblAtaDeviceType<br />
@foreach(KeyValuePair<string, string> kvp in ViewBag.repAtaTwo)
{
<text><i>@kvp.Key</i>: @kvp.Value<br /></text>
}
<br />
@foreach(string item in ViewBag.repAtaOne)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.repScsi != null)
{
<div id="divScsi">
<br />
<b>SCSI characteristics:</b><br />
<i>Vendor: </i>@ViewBag.lblScsiVendor<br />
<i>Product: </i>@ViewBag.lblScsiProduct<br />
<i>Revision: </i>@ViewBag.lblScsiRevision<br />
@foreach(string item in ViewBag.repScsi)
{
@Html.Raw(item)<br />
}
@if(ViewBag.repModeSense != null)
{
<div id="divScsiModeSense">
<br /><i>SCSI mode sense pages:</i>
<table border="1">
<tr>
<th>Mode</th>
<th>Contents</th>
</tr>
@foreach(KeyValuePair<string, string> kvp in ViewBag.repModeSense)
{
<tr>
<td>
@kvp.Key
</td>
<td>
@Html.Raw(kvp.Value)
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repEvpd != null)
{
<div id="divScsiEvpd">
<br /><i>SCSI extended vital product data pages:</i>
<table border="1">
<tr>
<th>EVPD</th>
<th>Contents</th>
</tr>
@foreach(KeyValuePair<string, string> kvp in ViewBag.repEvpd)
{
<tr>
<td>
@kvp.Key
</td>
<td>
@Html.Raw(kvp.Value)
</td>
</tr>
}
</table>
</div>
}
@if(ViewBag.repScsiMmcMode != null)
{
<div id="divScsiMmcMode">
<br /><b>SCSI CD-ROM capabilities:</b><br />
@foreach(string item in ViewBag.repScsiMmcMode)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.repScsiMmcFeatures != null)
{
<div id="divScsiMmcFeatures">
<br /><b>SCSI MMC features:</b><br />
@foreach(string item in ViewBag.repScsiMmcFeatures)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.divScsiSscVisible == true)
{
<div id="divScsiSsc">
<br /><b>SCSI Streaming device capabilities:</b><br />
Block size granularity: @ViewBag.lblScsiSscGranularity<br />
Maximum block length: @ViewBag.lblScsiSscMaxBlock bytes<br />
Minimum block length: @ViewBag.lblScsiSscMinBlock bytes<br />
@if(ViewBag.repScsiSscDensities != null)
{
foreach(SupportedDensity density in ViewBag.repScsiSscDensities)
{
<text>
<br />
<b>
Information for supported density with primary code @($"{density.PrimaryCode:X2h}") and secondary code @($"{density.SecondaryCode:X2h}")
</b><br />
Drive can write this density: @density.Writable<br />
Duplicate density: @density.Duplicate<br />
Default density: @density.DefaultDensity<br />
Density has @density.BitsPerMm bits per mm, with @density.Tracks tracks in a @density.Width mm width tape
Name: @density.Name<br />
Organization: @density.Organization<br />
Description: @density.Description<br />
Maximum capacity: @density.Capacity megabytes<br />
</text>
}
}
@if(ViewBag.repScsiSscMedias != null)
{
foreach(SscSupportedMedia media in ViewBag.repScsiSscMedias)
{
<text>
<br />
<b>
Information for supported media with type code @($"{media.MediumType:X2h}")
</b><br />
Media is @media.Length m long in a @media.Width mm width tape
Name: @media.Name<br />
Organization: @media.Organization<br />
Description: @media.Description<br />
</text>
}
}
</div>
}
</div>
}
@if(ViewBag.repTestedMedia != null)
{
<div id="divTestedMedia">
<br /><b>Tested media:</b><br />
@foreach(string item in ViewBag.repTestedMedia)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.repMMC != null)
{
<div id="divMMC">
<br />
<b>MultiMediaCard device:</b><br />
@foreach(string item in ViewBag.repMMC)
{
@Html.Raw(item)<br />
}
</div>
}
@if(ViewBag.repSD != null)
{
<div id="divSD">
<br />
<b>SecureDigital device:</b><br />
@foreach(string item in ViewBag.repSD)
{
@Html.Raw(item)<br />
}
</div>
}
</div>

View File

@@ -0,0 +1,110 @@
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : _Layout.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Contains layout.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
@switch(DateTime.UtcNow.DayOfYear)
{
// 24th January, Macintosh launch
case 24:
<link href="../../styles/mac/dicserver.css"
rel="stylesheet"type="text/css" />
<link href="../../styles/mac/dicserver_highcharts.css"
rel="stylesheet"type="text/css" />
break;
default:
<link href="../../styles/dos/dicserver.css"
rel="stylesheet"type="text/css" />
<link href="../../styles/dos/dicserver_highcharts.css"
rel="stylesheet"type="text/css" />
break;
}
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async
src="https://www.googletagmanager.com/gtag/js?id=UA-111466173-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-111466173-1');
</script>
</head>
<body>
@RenderBody()
<footer class="container-fluid">
© 2011-2019
<a href="http://www.claunia.com"
target="_blank">
Claunia.com
</a><br />
@switch(DateTime.UtcNow.DayOfYear)
{
// 24th January, Macintosh launch
case 24:
@Html.Raw("Fonts are © 2014 <a href=\"http://christtrekker.users.sourceforge.net/fnt/chicago.shtml\" target=\"_blank\">Robin Casady</a>")
;
break;
default:
@Html.Raw("Fonts are © 2015 - 2016 <a href=\"http://int10h.org\" target=\"_blank\">VileR</a>")
;
break;
}
<br />
CSS © 2018-2019
<a href="https://getbootstrap.com/"
target="_blank">
Bootstrap
</a> and
<a href="http://www.claunia.com"
target="_blank">
Claunia.com
</a>
</footer>
<script crossorigin="anonymous"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script crossorigin="anonymous"
integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut"
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>
<script crossorigin="anonymous"
integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k"
src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
</body>
</html>

View File

@@ -0,0 +1,706 @@
@using System.Collections
@using DiscImageChef.CommonTypes.Metadata
@using DiscImageChef.Server.Models
@using Highsoft.Web.Mvc.Charts
@using Chart = Highsoft.Web.Mvc.Charts.Chart
@using Filter = DiscImageChef.Server.Models.Filter
@{
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Index.cshtml
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Renders statistics.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
}
@{
ViewBag.Title = "DiscImageChef Statistics";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<header>
Welcome to
<i>
<a href="http://github.com/claunia/discimagechef"
target="_blank">
DiscImageChef
</a>
</i> Server version @ViewBag.Version
</header>
<div class="container-fluid mt-3">
@if(ViewBag.repOperatingSystems != null)
{
<div class="container"
id="divOperatingSystems">
<div class="carousel slide"
data-ride="carousel"
id="carouselOses">
<ol class="carousel-indicators">
<li class="active"
data-slide-to="0"
data-target="#carouselOses">
</li>
<li data-slide-to="1"
data-target="#carouselOses">
</li>
<li data-slide-to="2"
data-target="#carouselOses">
</li>
<li data-slide-to="3"
data-target="#carouselOses">
</li>
</ol>
<div class="carousel-inner">
<div class="active carousel-item"
id="osChart">
</div>
<div class="carousel-item"
id="linuxChart">
</div>
<div class="carousel-item"
id="macosChart">
</div>
<div class="carousel-item"
id="windowsChart">
</div>
</div>
<a class="carousel-control-prev"
data-slide="prev"
href="#carouselOses"
role="button">
<span aria-hidden="true"
class="carousel-control-prev-icon">
</span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next"
data-slide="next"
href="#carouselOses"
role="button">
<span aria-hidden="true"
class="carousel-control-next-icon">
</span>
<span class="sr-only">Next</span>
</a>
</div>
<div class="accordion mt-3"
id="osAccordion">
<div class="card">
<div class="card-header"
id="osHeading">
<h2 class="mb-0">
<button aria-controls="osCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#osCollapse"
data-toggle="collapse"
type="button">
All operating systems DiscImageChef has run on...
</button>
</h2>
</div>
<div aria-labelledby="osHeading"
class="collapse"
data-parent="#osAccordion"
id="osCollapse">
<div class="card-body">
<table class="table-dark">
@foreach(NameValueStats os in ViewBag.repOperatingSystems)
{
<tr>
<td class="text-left">
DiscImageChef has run on <i class="table-dark-em">@os.name</i> @os.Value times.
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
<br />
</div>
}
@if(ViewBag.repVersions != null)
{
<div class="container mt-3"
id="divVersions">
<div class="container"
id="versionsChart">
</div>
<div class="accordion mt-3"
id="versionsAccordion">
<div class="card">
<div class="card-header"
id="versionsHeading">
<h2 class="mb-0">
<button aria-controls="versionsCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#versionsCollapse"
data-toggle="collapse"
type="button">
All DiscImageChef versions...
</button>
</h2>
</div>
<div aria-labelledby="versionsHeading"
class="collapse"
data-parent="#versionsAccordion"
id="versionsCollapse">
<div class="card-body">
<table class="table-dark">
@foreach(NameValueStats version in ViewBag.repVersions)
{
<tr>
<td class="text-left">
DiscImageChef version <i class="table-dark-em">@version.name</i> has been used @version.Value times.
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
<br />
</div>
}
@if(ViewBag.repCommands != null)
{
<div class="container mt-3"
id="divCommands">
<div class="container"
id="commandsChart">
</div>
<div class="accordion mt-3"
id="commandsAccordion">
<div class="card">
<div class="card-header"
id="commandsHeading">
<h2 class="mb-0">
<button aria-controls="commandsCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#commandsCollapse"
data-toggle="collapse"
type="button">
All DiscImageChef commands...
</button>
</h2>
</div>
<div aria-labelledby="commandsHeading"
class="collapse"
data-parent="#commandsAccordion"
id="commandsCollapse">
<div class="card-body">
<table class="table-dark">
@foreach(Command command in ViewBag.repCommands)
{
<tr>
<td class="text-left">
<i class="table-dark-em">@command.Name</i> has been run @command.Count times.
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
<br />
</div>
}
@if(ViewBag.repFilters != null)
{
<div class="container mt-3"
id="divFilters">
<div class="container"
id="filtersChart">
</div>
<div class="accordion mt-3"
id="filtersAccordion">
<div class="card">
<div class="card-header"
id="filtersHeading">
<h2 class="mb-0">
<button aria-controls="filtersCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#filtersCollapse"
data-toggle="collapse"
type="button">
All filters found...
</button>
</h2>
</div>
<div aria-labelledby="filtersHeading"
class="collapse"
data-parent="#filtersAccordion"
id="filtersCollapse">
<div class="card-body">
<table class="table-bordered table-centered table-dark table-striped">
<tr>
<th class="table-dark-header">Filter</th>
<th class="table-dark-header">Times</th>
</tr>
@foreach(Filter filter in ViewBag.repFilters)
{
<tr>
<td class="text-right">
@filter.Name
</td>
<td class="text-left">
@($"{filter.Count}")
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
</div>
}
@if(ViewBag.repMediaImages != null)
{
<div class="container mt-3"
id="divMediaImages">
<div class="container"
id="formatsChart">
</div>
<div class="accordion mt-3"
id="formatsAccordion">
<div class="card">
<div class="card-header"
id="formatsHeading">
<h2 class="mb-0">
<button aria-controls="formatsCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#formatsCollapse"
data-toggle="collapse"
type="button">
All media image formats found...
</button>
</h2>
</div>
<div aria-labelledby="formatsHeading"
class="collapse"
data-parent="#formatsAccordion"
id="formatsCollapse">
<div class="card-body">
<table class="table-bordered table-centered table-dark table-striped">
<tr>
<th class="table-dark-header">Media image format</th>
<th class="table-dark-header">Times</th>
</tr>
@foreach(MediaFormat format in ViewBag.repMediaImages)
{
<tr>
<td class="text-left">
@format.Name
</td>
<td class="text-left">
@($"{format.Count}")
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
</div>
}
@if(ViewBag.repPartitions != null)
{
<div class="container mt-3"
id="divPartitions">
<div class="container"
id="partitionsChart">
</div>
<div class="accordion mt-3"
id="partitionsAccordion">
<div class="card">
<div class="card-header"
id="partitionsHeading">
<h2 class="mb-0">
<button aria-controls="partitionsCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#partitionsCollapse"
data-toggle="collapse"
type="button">
All partitioning schemes found...
</button>
</h2>
</div>
<div aria-labelledby="partitionsHeading"
class="collapse"
data-parent="#partitionsAccordion"
id="partitionsCollapse">
<div class="card-body">
<table class="table-bordered table-centered table-dark table-striped">
<tr>
<th class="table-dark-header">Partitioning scheme</th>
<th class="table-dark-header">Times</th>
</tr>
@foreach(Partition partition in ViewBag.repPartitions)
{
<tr>
<td class="text-left">
@partition.Name
</td>
<td class="text-left">
@($"{partition.Count}")
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
</div>
}
@if(ViewBag.repFilesystems != null)
{
<div class="container mt-3"
id="divFilesystems">
<div class="container"
id="filesystemsChart">
</div>
<div class="accordion mt-3"
id="filesystemsAccordion">
<div class="card">
<div class="card-header"
id="filesystemsHeading">
<h2 class="mb-0">
<button aria-controls="filesystemsCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#filesystemsCollapse"
data-toggle="collapse"
type="button">
All filesystems found...
</button>
</h2>
</div>
<div aria-labelledby="filesystemsHeading"
class="collapse"
data-parent="#filesystemsAccordion"
id="filesystemsCollapse">
<div class="card-body">
<table class="table-bordered table-centered table-dark table-striped">
<tr>
<th class="table-dark-header">Filesystem name</th>
<th class="table-dark-header">Times</th>
</tr>
@foreach(Filesystem filesystem in ViewBag.repFilesystems)
{
<tr>
<td class="text-left">
@filesystem.Name
</td>
<td class="text-left">
@($"{filesystem.Count}")
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
</div>
}
@if(ViewBag.repVirtualMedia != null)
{
<div class="container mt-3"
id="divVirtualMedia">
<div class="container"
id="virtualMediaChart">
</div>
<div class="accordion mt-3"
id="virtualMediaAccordion">
<div class="card">
<div class="card-header"
id="virtualMediaHeading">
<h2 class="mb-0">
<button aria-controls="virtualMediaCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#virtualMediaCollapse"
data-toggle="collapse"
type="button">
All media types found in images...
</button>
</h2>
</div>
<div aria-labelledby="virtualMediaHeading"
class="collapse"
data-parent="#virtualMediaAccordion"
id="virtualMediaCollapse">
<div class="card-body">
<table class="table-bordered table-centered table-dark table-striped">
<tr>
<th class="table-dark-header">Physical type</th>
<th class="table-dark-header">Logical type</th>
<th class="table-dark-header">Times</th>
</tr>
@foreach(MediaItem media in ViewBag.repVirtualMedia)
{
<tr>
<td class="text-left">
@media.Type
</td>
<td class="text-left">
@media.SubType
</td>
<td class="text-left">
@($"{media.Count}")
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
</div>
}
@if(ViewBag.repRealMedia != null)
{
<div class="container mt-3"
id="divRealMedia">
<div class="container"
id="realMediaChart">
</div>
<div class="accordion mt-3"
id="realMediaAccordion">
<div class="card">
<div class="card-header"
id="realMediaHeading">
<h2 class="mb-0">
<button aria-controls="realMediaCollapse"
aria-expanded="true"
class="btn btn-link card-button collapsed"
data-target="#realMediaCollapse"
data-toggle="collapse"
type="button">
All media types found in devices...
</button>
</h2>
</div>
<div aria-labelledby="realMediaHeading"
class="collapse"
data-parent="#realMediaAccordion"
id="realMediaCollapse">
<div class="card-body">
<table class="table-bordered table-centered table-dark table-striped">
<tr>
<th class="table-dark-header">Physical type</th>
<th class="table-dark-header">Logical type</th>
<th class="table-dark-header">Times</th>
</tr>
@foreach(MediaItem media in ViewBag.repRealMedia)
{
<tr>
<td class="text-left">
@media.Type
</td>
<td class="text-left">
@media.SubType
</td>
<td class="text-left">
@($"{media.Count}")
</td>
</tr>
}
</table>
</div>
</div>
</div>
</div>
</div>
}
@if(ViewBag.repDevices != null)
{
<div class="container mt-3"
id="divDevices">
<div class="carousel slide"
data-ride="carousel"
id="carouselDevices">
<ol class="carousel-indicators">
<li class="active"
data-slide-to="0"
data-target="#carouselDevices">
</li>
<li data-slide-to="1"
data-target="#carouselDevices">
</li>
<li data-slide-to="2"
data-target="#carouselDevices">
</li>
<li data-slide-to="3"
data-target="#carouselDevices">
</li>
</ol>
<div class="carousel-inner">
<div class="active carousel-item"
id="devicesBusChart">
</div>
<div class="carousel-item"
id="devicesManufacturerChart">
</div>
</div>
<a class="carousel-control-prev"
data-slide="prev"
href="#carouselDevices"
role="button">
<span aria-hidden="true"
class="carousel-control-prev-icon">
</span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next"
data-slide="next"
href="#carouselDevices"
role="button">
<span aria-hidden="true"
class="carousel-control-next-icon">
</span>
<span class="sr-only">Next</span>
</a>
</div>
<div class="card mt-3">
<div class="card-header">
<h2 class="mb-0">
<h2 class="card-button mb-0">
All devices found...
</h2>
</h2>
</div>
<div class="card-body">
<table class="table-bordered table-centered table-dark table-striped">
<tr>
<th class="table-dark-header">Manufacturer</th>
<th class="table-dark-header">Model</th>
<th class="table-dark-header">Revision</th>
<th class="table-dark-header">Bus</th>
<th class="table-dark-header">Report</th>
</tr>
@foreach(DeviceItem device in ViewBag.repDevices)
{
<tr>
<td>
@device.Manufacturer
</td>
<td>
@device.Model
</td>
<td>
@device.Revision
</td>
<td>
@device.Bus
</td>
<td>
@if(device.ReportId != 0)
{
<text>@Html.ActionLink("Yes", "View", "Report", new {id = device.ReportId}, new {target = "_blank"})</text>
}
else
{ <text>No</text> }
</td>
</tr>
}
</table>
</div>
</div>
</div>
}
</div>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
@{
string highChartsTitleColor;
string highChartsDataLabelColor;
switch(DateTime.UtcNow.DayOfYear)
{
// 24th January, Macintosh launch
case 24:
highChartsTitleColor = "#000000";
highChartsDataLabelColor = "#000000";
break;
default:
highChartsTitleColor = "#AAAAAA";
highChartsDataLabelColor = "#FFFFFF";
break;
}
Hashtable highChartsTitleStyle = new Hashtable {{"color", highChartsTitleColor}};
PlotOptionsPieDataLabelsStyle highChartsDataLabelStyle = new PlotOptionsPieDataLabelsStyle {Color = highChartsDataLabelColor, TextOutline = "0px"};
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Operating system usage", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["osPieData"] as List<PieSeriesData>}}}, "osChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Linux versions", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["linuxPieData"] as List<PieSeriesData>}}}, "linuxChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "macOS versions", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["macosPieData"] as List<PieSeriesData>}}}, "macosChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Windows versions", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["windowsPieData"] as List<PieSeriesData>}}}, "windowsChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "DiscImageChef versions", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["versionsPieData"] as List<PieSeriesData>}}}, "versionsChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Commands run", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["commandsPieData"] as List<PieSeriesData>}}}, "commandsChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Filters found", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["filtersPieData"] as List<PieSeriesData>}}}, "filtersChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Top 10 media image formats found", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["formatsPieData"] as List<PieSeriesData>}}}, "formatsChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Top 10 partitioning schemes found", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["partitionsPieData"] as List<PieSeriesData>}}}, "partitionsChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Top 10 filesystems found", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["filesystemsPieData"] as List<PieSeriesData>}}}, "filesystemsChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Top 10 media types found in images", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["virtualMediaPieData"] as List<PieSeriesData>}}}, "virtualMediaChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Top 10 media types found in real devices", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["realMediaPieData"] as List<PieSeriesData>}}}, "realMediaChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Devices found by bus", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["devicesBusPieData"] as List<PieSeriesData>}}}, "devicesBusChart", false))
@(Html.Highsoft().GetHighcharts(new Highcharts {Chart = new Chart {PlotBackgroundColor = null, PlotBorderWidth = null, PlotShadow = new Shadow {Enabled = true}}, Title = new Title {Text = "Devices found by manufacturer", Style = highChartsTitleStyle}, Tooltip = new Tooltip {PointFormat = "{series.name}: <b>{point.percentage:.1f}%</b>"}, PlotOptions = new PlotOptions {Pie = new PlotOptionsPie {AllowPointSelect = true, Cursor = PlotOptionsPieCursor.Pointer, DataLabels = new PlotOptionsPieDataLabels {Style = highChartsDataLabelStyle, Enabled = true, Format = "<b>{point.name}</b>: {point.percentage:.1f} %"}}}, Series = new List<Series> {new PieSeries {Name = "Percentage:", Data = ViewData["devicesManufacturerPieData"] as List<PieSeriesData>}}}, "devicesManufacturerChart", false))
}

View File

@@ -0,0 +1,43 @@
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="DiscImageChef.Server" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
</system.web>
</configuration>