le theme, WIP les cercles

* input.css: refabrication des feuilles de style : la feuille des
  champs de formulaire.

* CircleMember.cs: un membre de cercle est un nom d'utilisateur
  associé au cercle d'un autre utilisateur.

* ICircle.cs: Définit l'interface d'un cercle:
un cercle est identifié par un entier long,
il a un possesseur.

* Makefile: utilise le fichier de conf généré pour débugger.

* NpgsqlContentProvider.cs: bug fix

* README.md: maj priorités

* AccountController.cs: implémente une méthode de l'API pour ajouter
  un utilisateur au cercle

* links.css: Corrige la couleur du boutton de validation des
  formulaire de classe `ActionLink`

* style.css: refabrication: importe la nouvelle feuille de style des
  champs de formulaires

* style.css: nettoyage du thème sombre

* style.css: nettoyage + section principale (`main`) centré

* FrontOfficeController.cs: Repositionne la route vers le devis à
  do/Estimate

* YavscHelpers.cs: corrige ma ré-écriture des helpers html ActionLink

* App.master: formattage du code source

* AppAdmin.master: synchronisation avec la page maître,
beaucoup de changements dans cette page maître pour les
  administrateurs:
* prend en charge les côtes d'article
* utilise les fontes de caractère de la page pour les lien action
* prend en charge les zones de formulaire masquable.

* NoLogin.master: synchronisation avec la page maître

* Performer.ascx: WIP permet d'ajouter un préstataire à un de ses
  cercles.

* YourEstimates.aspx: corrige un lien cassé

* Yavsc.csproj: mise à niveau Npgsql,
renommage Estimate

* packages.config: mise à niveau de la bibliothèque Npgsql (pilote
  d'accès à la base de donnée)

* CircleBase.cs: un objet cercle basique implémente l'interface d'un
  cercle.

* PerformerProfile.cs: s'assure que le nom d'utilisateur utilisé n'est
  pas vide.

* IIdentified.cs: doc xml

* UserNameBase.cs: l'objet base de type "nom d'utilisateur" implémente
  l'interface générique
d'un identifié, par une chaine de caractère.

* YavscModel.csproj: reference les nouvelles definitions :
* un membre de cercle
* l'interface d'un cercle

* MainClass.cs: format du code

* YavscClient.csproj:
* Estimate.aspx: refabrication
This commit is contained in:
Paul Schneider 2015-12-15 21:36:33 +01:00
commit 58839ab69c
33 changed files with 343 additions and 121 deletions

View file

@ -132,5 +132,13 @@ namespace Yavsc.ApiControllers
new string [] { model.Role } );
}
[ValidateAjax]
[Authorize()]
public void AddUserToCircle(UserRole model)
{
if (ModelState.IsValid)
Roles.AddUserToRole (model.UserName,
model.Role );
}
}
}

View file

@ -0,0 +1,19 @@

input, textarea, checkbox {
color: black;
background-color: white;
font-size: larger;
border: solid 1px rgb(128,128,128);
animation-name: flash;
animation-duration: 1s;
animation-iteration-count: 1;
}
input:hover, textarea:hover {
color: black;
background-color: rgba(256,256,256,.8);
}
.input-validation-error { border: solid 1px red; }
.field-validation-error { color: red; }

View file

@ -1,5 +1,4 @@

a, .actionlink {
z-index: 1;
color: white;
@ -10,18 +9,24 @@ a, .actionlink {
position: relative;
transition: color 1s;
}
/* inputs have a white background in this theme */
input.actionlink
{
color: black;
}
a:visited { color: white; }
/* inverse the font color, as long as a black one
is rolling out in backgound */
a:hover, a:visited:hover, .actionlink:hover {
color:black;
}
@media print {
.actionlink, .menuitem { display:none;}
}
/* button dark background */
div.bback {
position: absolute;
top: 0;
@ -29,10 +34,9 @@ div.bback {
width:100%;
height:100%;
z-index: -2;
background-color: rgba(32,32,32,.2);
background-color: rgba(32,32,32,.3);
}
/* button white animated */
div.aback {
transform: scaleX(0);
transform-origin: 0px 50% 0px;

View file

@ -1,6 +1,6 @@
@import url(http://fonts.googleapis.com/css?family=Josefin+Sans&subset=latin,latin-ext);
@import url(/App_Themes/clear/links.css);
@import url(/App_Themes/clear/input.css);
body {
background-color: white;
color: black;
@ -23,15 +23,7 @@ body {
no-repeat;
}
input, textarea, checkbox {
color: black;
background-color: white;
font-size: larger;
border: solid 1px rgb(128,128,128);
animation-name: flash;
animation-duration: 1s;
animation-iteration-count: 1;
}
header { float: left; }
@ -137,18 +129,11 @@ a:active {
background-color:rgba(184,180,132,0.9);
}
input:hover, textarea:hover {
color: black;
background-color: rgba(256,256,256,.8);
}
.code {
background-color: rgba(230,230,230,0.5);
}
.input-validation-error { border: solid 1px red; }
.field-validation-error { color: red; }
@media all and (max-width: 640px) {

View file

@ -1,22 +1,6 @@
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,700);
@import url(/App_Themes/dark/links.css);
.panel {
display:inline-block;
width: calc(33% - 10px);
}
@media all and (max-width: 1200px) {
.panel {
width: calc(50% - 5px);
}
}
@media all and (max-width: 720px) {
.panel {
width: 100%;
}
}
.skillname {
background-color: rgba(16,16,64,0.8);
border-color: #aaf;
@ -28,7 +12,6 @@ body {
color: #D0FFD0;
}
.rate {
border: solid rgb(128,128,0) 1px;
background-color: rgba(20,20,20,.8);
@ -215,7 +198,6 @@ header h1, header a , .actionlink, .menuitem, a { padding:.5em;}
padding:.3em;
}
.bshpanel { cursor:zoom-in; }
.c2 { display:initial; }
.c2-alt { display:none; }

View file

@ -43,6 +43,7 @@ main {
margin: 2em;
padding: 2em;
display: block;
text-align: center;
}
main video, main img {
max-width:100%;
@ -352,7 +353,6 @@ div.panel {
.usertitleref{
padding:.3em;
}
.bshpanel { cursor:zoom-in; }
.c2 { display:initial; }
.c2-alt { display:none; }

View file

@ -1,3 +1,54 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* input.css: refabrication des feuilles de style : la feuille
des champs de formulaire.
* AccountController.cs: implémente une méthode de l'API pour
ajouter un utilisateur au cercle
* links.css: Corrige la couleur du boutton de validation des
formulaire de classe `ActionLink`
* style.css: refabrication: importe la nouvelle feuille de
style des champs de formulaires
* style.css: nettoyage du thème sombre
* style.css: nettoyage + section principale (`main`) centré
* FrontOfficeController.cs: Repositionne la route vers le
devis à do/Estimate
* YavscHelpers.cs: corrige ma ré-écriture des helpers html
ActionLink
* App.master: formattage du code source
* AppAdmin.master: synchronisation avec la page maître,
beaucoup de changements dans cette page maître pour les
administrateurs:
* prend en charge les côtes d'article
* utilise les fontes de caractère de la page pour les lien
action
* prend en charge les zones de formulaire masquable.
* NoLogin.master: synchronisation avec la page maître
* Performer.ascx: WIP permet d'ajouter un préstataire à un de
ses cercles.
* YourEstimates.aspx: corrige un lien cassé
* Yavsc.csproj: mise à niveau Npgsql,
renommage Estimate
* packages.config: mise à niveau de la bibliothèque Npgsql
(pilote d'accès à la base de donnée)
* Estimate.aspx: refabrication
2015-12-09 Paul Schneider <paul@pschneider.fr>
* animate.css: animations css

View file

@ -95,7 +95,7 @@ namespace Yavsc.Controllers
/// <param name="model">Model.</param>
/// <param name="submit">Submit.</param>
[Authorize]
public ActionResult DoAnEstimate (Estimate model, string submit)
public ActionResult Estimate (Estimate model, string submit)
{
string username = Membership.GetUser ().UserName;
// Obsolete, set in master page

View file

@ -422,6 +422,7 @@ namespace Yavsc.Helpers
string actionLabel, object htmlAttributes = null) {
return TranslatedActionLink (helper, actionLabel, actionLabel, htmlAttributes);
}
/// <summary>
/// Translateds the action link.
/// </summary>
@ -431,10 +432,13 @@ namespace Yavsc.Helpers
/// <param name="method">Method.</param>
/// <param name="htmlAttributes">Html attributes.</param>
public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionLabel, string method, object htmlAttributes = null) {
return TranslatedActionLink (helper,
actionLabel, method, null, htmlAttributes = null);
string actionName, string method, object routes, object htmlAttributes = null) {
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
return TranslatedActionLink (helper, actionName, method,
controllerName, routes, htmlAttributes);
}
/// <summary>
/// Translateds the action link.
@ -447,6 +451,11 @@ namespace Yavsc.Helpers
/// <param name="htmlAttributes">Html attributes.</param>
public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionLabel, string method, string controller, object htmlAttributes = null) {
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
if (controller == null)
controller = controllerName;
return TranslatedActionLink (helper, actionLabel, method, controller,
new { controller = controller, action = actionLabel }, htmlAttributes);
}
@ -491,15 +500,7 @@ namespace Yavsc.Helpers
}
public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionName, string method, object routes, object htmlAttributes = null) {
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
return TranslatedActionLink (helper, actionName, method,
controllerName, routes, htmlAttributes);
}

View file

@ -36,7 +36,6 @@ var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
</asp:ContentPlaceHolder>
</head>
<body>
<header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1>
@ -101,7 +100,7 @@ Vos billets
$(document).ready(function() {
$('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
});
});
</script>
</body>
</html>

View file

@ -1,4 +1,4 @@
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" EnableTheming="true"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<% ViewState["orgtitle"] = Html.Translate(Page.Title); %>
@ -6,7 +6,7 @@
Page.Theme = (string) Profile.UITheme;
Page.StyleSheetTheme = (string) Profile.UITheme; %>
<asp:ContentPlaceHolder id="init" runat="server">
</asp:ContentPlaceHolder>
</asp:ContentPlaceHolder>
<head runat="server">
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@ -23,18 +23,23 @@ Page.StyleSheetTheme = (string) Profile.UITheme; %>
<script src="<%=Url.Content("~/Scripts/Prettify/run_prettify.js")%>"></script>
<script type="text/javascript">
var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$(document).ready(function(){
$('[data-type="rate-bill"]').rate({webTarget: 'Blogs/Rate'});
});
</script>
<%=Ajax.YaGlobalizationScript()%>
<script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.hidefieldset.js")%>"></script>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<header data-type="background" data-speed="8" >
<header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1><a href="<%= Url.RouteUrl("Default") %>">
<%=ViewState["orgtitle"]%></a>
<h1>
<%=ViewState["orgtitle"]%>
- <a href="<%= Url.RouteUrl("Default", new {controller = "Home" , action = "Index" }) %>"><%= YavscHelpers.SiteName %></a>
</h1>
</asp:ContentPlaceHolder>
@ -51,10 +56,10 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
</script>
<% } %>
</header>
<nav data-type="background" data-speed="5">
<nav >
<% if (Membership.GetUser()==null) { %>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Login", returnUrl=Request.Url.PathAndQuery}) %>" class="menuitem" accesskey = "C">
<i class="fa fa-sign-in">Connexion</i>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Login", returnUrl=Request.Url.PathAndQuery}) %>" class="link" accesskey = "C">
<i class="fa fa-sign-in"></i> Connexion
</a>
<% } else { %>
<ul>
@ -68,38 +73,45 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
<li><%= Html.TranslatedActionLink("Role list", "RoleList") %></li>
</ul>
<a href="<%=Url.RouteUrl("Blogs", new { user = HttpContext.Current.User.Identity.Name } )%>" accesskey = "B" class="menuitem" >
<img src="<%=Url.AvatarUrl(HttpContext.Current.User.Identity.Name)%>" alt="vos billets" class="iconsmall" />
<span class="hint">Vos billets</span>
<a href="<%=Url.RouteUrl("Blogs", new { user = HttpContext.Current.User.Identity.Name } )%>" accesskey = "B" class="link" >
<img src="<%=Url.AvatarUrl(HttpContext.Current.User.Identity.Name)%>" alt="" class="iconsmall" />
Vos billets
</a>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Profile", id = HttpContext.Current.User.Identity.Name} ) %>" accesskey="P" class="menuitem fa fa-user">
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Profile", id = HttpContext.Current.User.Identity.Name} ) %>" accesskey="P" class="link ">
<i class="fa fa-user"></i>
<%= HttpContext.Current.User.Identity.Name %>
<span class="hint"> &Eacute;dition de votre profile </span>
</a>
<a href="/Blogs/Post" accesskey="P" class="menuitem fa fa-pencil">
<a href="/Blogs/Post" accesskey="P" class="link">
<i class="fa fa-pencil"></i>
<u>P</u>oster
<span class="hint">&Eacute;dition d'un nouveau billet </span>
</a>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Logout", returnUrl=Request.Url.PathAndQuery}) %>" accesskey = "C" class="menuitem fa fa-sign-out">
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Logout", returnUrl=Request.Url.PathAndQuery}) %>" accesskey = "C" class="link">
<i class="fa fa-sign-out"></i>
<%=Html.Translate("Logout")%></a>
<% } %>
</nav>
<main data-type="background" data-speed="10" data-emheight="10" data-posx="0" data-posy="22" >
<main>
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</main>
<footer data-type="background" data-speed="5" >
<footer>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<div id="copyr">
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">© 2015 GNU GENERAL PUBLIC LICENSE <i>Version 3, 29 June 2007</i></a>
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">
<%=Html.Encode("© 2015 GNU GENERAL PUBLIC LICENSE")%> <i>Version 3, 29 June 2007</i></a>
</div>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<% foreach ( Link link in Html.Thanks()) { %>
<a class="thanks" href="<%=link.Url%>"><% if (link.Image !=null) {
%><img src="<%= link.Image %>" alt="<%= link.Text %>"/></a>
<% } else { %>
<a class="thanks" href="<%=link.Url%>"><%= link.Text %></a>
<% }} %>
</footer><div class="modal"></div>
<script>
$(document).ready(function() {
$('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
});
</script>
</body>
</html>

View file

@ -1,4 +1,4 @@
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" EnableTheming="true"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<% ViewState["orgtitle"] = Html.Translate(Page.Title); %>
@ -27,18 +27,19 @@ var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$('[data-type="rate-bill"]').rate({webTarget: 'Blogs/Rate'});
});
</script>
<%=Ajax.GlobalizationScript()%>
<%=Ajax.YaGlobalizationScript()%>
<script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.hidefieldset.js")%>"></script>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<header data-type="background" data-speed="8" >
<header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1><a href="<%= Url.RouteUrl("Default") %>">
<%=ViewState["orgtitle"]%></a>
<h1>
<%=ViewState["orgtitle"]%>
- <a href="<%= Url.RouteUrl("Default", new {controller = "Home" , action = "Index" }) %>"><%= YavscHelpers.SiteName %></a>
</h1>
</asp:ContentPlaceHolder>
@ -59,12 +60,21 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</main>
<footer data-type="background" data-speed="5" >
<footer>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<div id="copyr">
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">© 2015 GNU GENERAL PUBLIC LICENSE <i>Version 3, 29 June 2007</i></a>
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">
<%=Html.Encode("© 2015 GNU GENERAL PUBLIC LICENSE")%> <i>Version 3, 29 June 2007</i></a>
</div>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
</footer><div class="modal"></div>
<script>
$(document).ready(function() {
$('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
});
</script>
</body>
</html>

View file

@ -1,10 +1,12 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PerformerProfile>" %>
<% ViewBag.BlogCounter = BlogManager.GetPostCounter(Model.UserName); %>
<% ViewBag.WithinCircles = CircleManager.Circles(Model.UserName); %>
<div class="performer">
<h2>
<img src="<%= Model.Avatar %>" alt="" class="bigavatar">
<span class="username" data-type="user" data-roles="" data-blog-counter="<%=ViewBag.BlogCounter%>" data-circles="" ><%=Html.Encode(Model.UserName)%></span>
<span class="username" data-type="user"
data-roles="<%=string.Join (" ",Roles.GetRolesForUser (Model.UserName)) %>"
data-blog-counter="<%=BlogManager.GetPostCounter(Model.UserName)%>"
data-circles="<%=string.Join (" ",CircleManager.Circles(Model.UserName))%>" >
<%=Html.Encode(Model.UserName)%></span>
<%=Html.Partial("RateUserSkillControl", Model) %>
</h2>
<address>

View file

@ -17,7 +17,7 @@ foreach (Estimate estim in Model) {
Vos estimations en tant que client
(<%=ViewData["ClientCount"]%>):<br>
<% foreach (Estimate estim in Model) { %>
<%= Html.TranslatedActionLink("Titre:"+estim.Title+" Responsable:"+estim.Responsible,"Estimate",new{id=estim.Id}) %>
<%= Html.TranslatedActionLink("Titre:"+estim.Title+" Responsable:"+estim.Responsible,"Estimate", new{ Id=estim.Id }) %>
<br><% } %>
</div>
<% } %>

View file

@ -116,9 +116,6 @@
<Reference Include="PayPalCoreSDK">
<HintPath>..\packages\PayPalCoreSDK.1.6.3\lib\net451\PayPalCoreSDK.dll</HintPath>
</Reference>
<Reference Include="Npgsql">
<HintPath>..\packages\Npgsql.3.0.3\lib\net45\Npgsql.dll</HintPath>
</Reference>
<Reference Include="log4net">
<HintPath>..\packages\log4net.2.0.4\lib\net45-full\log4net.dll</HintPath>
</Reference>
@ -138,6 +135,9 @@
<Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceModel.Web" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="Npgsql">
<HintPath>..\packages\Npgsql.3.0.4\lib\net45\Npgsql.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Folder Include="Admin\" />
@ -757,7 +757,6 @@
<Content Include="Scripts\yavsc.user.js" />
<Content Include="Views\FrontOffice\SiteSkills.aspx" />
<Content Include="Views\FrontOffice\YourEstimates.aspx" />
<Content Include="Views\FrontOffice\DoAnEstimate.aspx" />
<Content Include="App_Themes\animate.css" />
<Content Include="App_Themes\images\live-concert-fg.png" />
<Content Include="App_Themes\images\live-concert-scene.jpg" />
@ -766,6 +765,8 @@
<Content Include="App_Themes\clear\links.css" />
<Content Include="App_Themes\images\splash-image-2.jpg" />
<Content Include="Views\Home\Test.aspx" />
<Content Include="App_Themes\clear\input.css" />
<Content Include="Views\FrontOffice\Estimate.aspx" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

View file

@ -12,7 +12,7 @@
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net451" />
<package id="Mono.Web.Xdt" version="1.0.0" targetFramework="net451" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
<package id="Npgsql" version="3.0.3" targetFramework="net451" />
<package id="Npgsql" version="3.0.4" targetFramework="net451" />
<package id="PayPalButtonManagerSDK" version="2.9.109" targetFramework="net45" />
<package id="PayPalCoreSDK" version="1.6.3" targetFramework="net451" />
<package id="Prettify" version="3.3.04.2013" targetFramework="net451" />