Files
yavsc/web/Views/Blogs/Edit.aspx
Paul Schneider d999ae5a8e Thème clair opé, WIP circles
* animate.css: animations css

* links.css: liens avec le fond blanc qui se déroule

* links.css: WIP liens thème sombre

* GitHub.ico: un petit merci à GitHub

* live-concert-fg.png: image de plan rapproché : les fans

* live-concert-scene.jpg: Image de fond : la scene

* splash-image-2.jpg: image de fond : photo colorée, public de
  concert, vient de totemproduction.fr

* links.css: ficher de définitions globales du style des bouttons
  (encore inutilisé)

* yavsc.user.js: WIP implémente le widget "utilisateur", permettant
l'affichage des liens rapides pour tout nom d'ulitisateur, le cas
  échéant, vers l'ajout à un cercle,
vers son blog, vers des methodes choisies d'administateur, vers ses
  réseaux sociaux, voir plus.

* About.aspx: Implémente une page "à propos"

* Test.aspx: Page de test: désolé pour le bruit, elle n'est compilée
  qu'en mode `Debug` (elle n'est pas accessible en production)

* NpgsqlBlogProvider.cs: Corrige la méthode pour enlever un tag à un
  article ...

* NpgsqlBlogProvider.csproj: .

* NpgsqlCircleProvider.cs: liste les cercles auquels appartient un
  utilisateur.

* BasketController.cs:
* NpgsqlContentProvider.cs: Les commandes sont fortement typée.

* README.md: mise à jour des priorités

* style.css: réécriture du thème clair

* style.css: * implémente un classe css `clickme` pour attirer l'oeil
sur le boutton de validation après la modification d'un champ de
  formulaire.
* enlève tous les coins arrondis
* modifie la chasse de caractères (une seule utilisée pour le moment)
*

* style.css: * integre la référence à la feuille de style des
  [animations](https://daneden.github.io/animate.css/)
* corrige des marges, alignements
* supprime ce qui reste de coin arrondi
* néttoye les définitions obsolètes
* définit la classe `username`
* corrige le survol à la suppression de tag

* FrontOfficeController.cs: renomme des methodes, refabriqué pour
  s'adapter aux changements de l'API du workflow,
WIP propose les cercles utilisateurs pour l'ajout des profiles
  préstataires aux cercles.

* HomeController.cs: implémente une page "à propos"

* T.cs: re-autorise le titre vide de page, au cas où ... car ce n'est
  pas un véritable
défaut fonctionnel.

* YavscHelpers.cs: Implemente un outil de presentation des liens
  action traduits. Tous les liens action utilisent maintenant cette
  nouvelle methode,
au profile de celle du framework `HtmlHelpers.ActionLink`

* App.master: corrige l'usage du contrôle utilisateur des cotes dans
  le cadre des cotes de billet.

* AppAdmin.master:
* Index.aspx:
* Service.aspx:
* ProductCategory.aspx: traduction des liens action

* NoLogin.master: * traduction des liens action
* suppression des liens de remerciement dans le bas de page, cette
  information a été déplacée dans la page `/Home/Credits`

* to-markdown.js: transforme maintenant les noeuds Html `div` en
  paragraphes Markdown.

* yavsc.hidefieldset.js: Le script règle la forme de la souris au
  survol du bouton,
le cas échéant.

* yavsc.js: nouvelle fonction javascript pour logger un objet
  arbitraire.

* yavsc.rate.js: Fixe la possibilité de mettre des cotes très basses
  ou très hautes (reste encore un mieux à faire),
Affiche au survol des descriptions optionnelles de la cote.

* Title.aspx:
* UserPost.aspx:
* Edit.aspx:
* Index.aspx:
* Brand.aspx:
* Index.aspx:
* PostActions.ascx:
* TitleNotFound.aspx:
* Booking.aspx:
* Command.aspx:
* ChangePasswordSuccess.aspx: Traduction des liens action

* Login.aspx: * Traduction des liens actionTraduction des liens action

* Profile.aspx: * Traduction des liens actionTraduction des liens
  action
* utilisation de la classe css `mayhide` qui autorise maintenant un
  champ d'entrées de formulaire à être plié/déplié au click sur sa
  légende.

* Admin.aspx: Traduction des liens actionTraduction des liens
  actionTraduction des liens actionTraduction des liens
  actionTraduction des liens actionTraduction des liens action

* Backups.aspx:
* RoleList.aspx:
* UserList.aspx:
* Index.aspx: Traduction des liens actionTraduction des liens action

* Edit.aspx: * refabrication de la structure Html
* Traduction des liens actionTraduction des liens action

* Index.aspx: Simlpification des apperçus de blog

* TagControl.ascx: refabrication pour simplifier l'implémentation du
  contrôle utilisateur des tags

* UserPosts.aspx: Traduction des liens action, et simplification du
  listing de blog

* Basket.aspx: Affiche les articles du panier de commandes avec leur
  vue
dédiée à leur type (les commande sont maintenant fortement typées)

* Catalog.aspx: Traduction des liens action, correctin du lien vers le
  produit
(cassé depuis une vielle refabrication des routes)

* DoAnEstimate.aspx: refabrication de la vue de création du devis:
  renommée depuis `Estimate`

* Performer.ascx: * un message supplementaire à l'absence de
  compétence affichée par un préstataire
* des guillemets autour du commentaire du préstataire sur sa
  compétence
* ajout du préstataire au cercles

* Performers.aspx: Décrit en détail les informations sur la
  disponibilité d'un préstataire,
à la date demandée.

* YourEstimates.aspx: renomage de cette page, pour préciser sa
  fonction : Vos devis.

* Contact.aspx: structure Html de la page de contact

* Credits.aspx: Ajoute les remerciements aux communauté du libre

* Index.aspx: ne fait rien

* Web.config: * import de `System.Transactions`
* mise à jour des credits libres

* WebDeploy.targets: utilise les séparateurs de chemin vers ficher à
  la POSIX, ne change rien pour ma config ... (TODO tester sous
  WoinDose)

* Yavsc.csproj: déploie des pages des scripts Javascript et des images
  et feuilles de style en plus.

* CircleManager.cs: implémente les methodes utilisées à la
  construction du contrôle utilisateur.

* CircleProvider.cs: * doc xml
* extension de interface

* Commande.cs: l'objet `Command` devient abstrait, pour exister (être
  instanciée), une commande doit maintenant hériter de cet objet
  abstrait.

* LocalizedText.resx:
* LocalizedText.fr.resx:
* LocalizedText.Designer.cs:
* LocalizedText.fr.Designer.cs: traductions

* IContentProvider.cs: doc xml

* SiteSkills.aspx: renomage de cette page, pour préciser sa fonction :
  les compétences sur ce site.
2015-12-09 13:26:02 +01:00

241 lines
7.0 KiB
Plaintext

<%@ Page Title="Bill_edition" Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEntry>" MasterPageFile="~/Models/App.master" %>
<%@ Register Assembly="Yavsc.WebControls" TagPrefix="yavsc" Namespace="Yavsc.WebControls" %>
<asp:Content ContentPlaceHolderID="head" ID="HeadContent1" runat="server">
<script type="text/javascript" src="<%=Url.Content("~/Scripts/rangy-core.js")%>"></script>
<script type="text/javascript" src="<%=Url.Content("~/Scripts/rangy-selectionsaverestore.js")%>"></script>
<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery.htmlClean.min.js")%>"></script>
<script type="text/javascript" src="<%=Url.Content("~/Scripts/hallo.js")%>"></script>
<script type="text/javascript" src="<%=Url.Content("~/Scripts/to-markdown.js")%>"></script>
<script type="text/javascript" src="<%=Url.Content("~/Scripts/showdown.js")%>"></script>
</asp:Content>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
<aside>
Id:<%= Html.TranslatedActionLink( Model.Id.ToString() , "UserPost", new { user= Model.Author, title=Model.Title, id = Model.Id }, new { @class = "usertitleref actionlink" }) %>
, Posted: <%= Model.Posted.ToString("yyyy/MM/dd") %> - Modified: <%= Model.Modified.ToString("yyyy/MM/dd") %>
Visible: <%= Model.Visible? "oui":"non" %> <%= Html.TranslatedActionLink("Supprimer","RemovePost", new { user=Model.Author, title = Model.Title, postid = Model.Id }, new { @class="actionlink" } ) %>
</aside>
<aside>
<% using(Html.BeginForm("Edit","Blogs")) { %>
<fieldset class="mayhide">
<legend>Attacher des fichiers</legend>
<input type="file" name="attached" id="postedfile" multiple>
<input type="button" value="attacher les ficher" onclick="submitFile()">
<input type="button" value="importer les documents" onclick="submitImport()">
</fieldset>
<fieldset class="mayhide">
<legend><i class="fa fa-lock"></i> <%= Html.Translate("BillAccessControl") %></legend>
<label for="Visible"><i class="fa fa-eye"></i></label> : <%= Html.CheckBox( "Visible" ) %>
<%= Html.ValidationMessage("Visible", "*") %> <br>
<label for="AllowedCircles"> <i class="fa fa-users"></i> <%= Html.Translate("AllowedCircles") %>
</label>
<i class="hint">Note: Si un ou plusieurs cercles sont séléctionnés ici,
le billet ne sera visible qu'aux membres de ces cercles.</i><br>
<%= Html.ListBox("AllowedCircles") %>
<%= Html.ValidationMessage("AllowedCircles", "*") %>
</fieldset>
<fieldset class="mayhide">
<legend><i class="fa fa-code"></i><%=Html.Translate("BillSourceCode")%></legend>
<%=Html.Hidden("Author")%>
<%=Html.Hidden("Id")%>
<%= Html.LabelFor(model => model.Photo) %>
<%=Html.TextBox("Photo")%>
<%=Html.ValidationMessage("Photo")%><br>
<%= Html.LabelFor(model => model.Title) %>
<%=Html.TextBox("Title")%>
<%=Html.ValidationMessage("Title")%><br>
<%=Html.TextArea("Content")%>
<%=Html.ValidationMessage("Content")%>
</fieldset>
<input type="submit" id="validate" class="actionlink">
<% } %>
</aside>
<span class="placard editable" for="Photo">
<img src="<%=Model.Photo%>" alt="photo" id="vphoto" >
</span>
<!-- TODO? Model.Photo.(Legend|Date|Location|ref) -->
<h1 id="vtitle" for="Title" class="editable" ><%=Html.Markdown(Model.Title)%></h1>
<div id="vcontent" for="Content" class="editable">
<%=Html.Markdown(Model.Content,"/bfiles/"+Model.Id+"/")%>
</div>
<hr><h2>Fichiers attachées</h2>
<%= Html.FileList("~/bfiles/"+Model.Id) %>
<hr>
<script>
$(document).ready(function(){
jQuery('.placard').hallo({plugins: {'hallo-image-insert-edit': { lang: 'fr' } } });
jQuery('#vtitle').hallo({
plugins: {
'halloformat': {},
'halloreundo': {}
},
toolbar: 'halloToolbarFixed',
lang: 'fr'
});
jQuery('#vcontent').hallo({
plugins: {
'halloformat': {},
'halloheadings': {},
'hallolists': {},
'hallo-image-insert-edit': {
lang: 'fr'
},
'halloreundo': {},
'hallocleanhtml': {
format: false,
allowedTags: [
'i',
'p',
'em',
'strong',
'br',
'ol',
'ul',
'li',
'a',
'audio',
'video',
'img',
'table',
'tr',
'td',
'th',
'style',
]
},
'halloblacklist': {tags: ['style']},
},
toolbar: 'halloToolbarFixed'
});
var markdownize = function(content) {
if (!content) return '';
var html = content.split("\n").map($.trim).filter(function(line) {
return line != "";
}).join("\n");
return toMarkdown(html);
};
var converter = new showdown.Converter(),
htmlize = function(content) {
return converter.makeHtml(content);
};
// Method that converts the HTML contents to Markdown
var showSource = function(id,content) {
if (!content) content = '';
var markdown = markdownize(content);
if (jQuery('#'+id).val() === markdown) {
return;
}
jQuery('#'+id).val( markdown );
};
var updateHtml = function(id,content) {
var jView = jQuery('*[for="'+id+'"]');
if (markdownize(jView.html()) === content) {
return;
}
var html = htmlize(content);
jView.html(html);
};
jQuery('.placard').bind('hallomodified', function(event, data) {
// TODO get image source from data.content
$('#'+this.attributes["for"].value).val(
$('#vphoto').attr('src'));
});
// Update Markdown every time content is modified
var onMDModified = ( function (event, data) {
showSource(this.attributes["for"].value, data.content);
});
jQuery('#vtitle').bind('hallomodified', onMDModified);
jQuery('#vcontent').bind('hallomodified', onMDModified);
jQuery('#Content').bind('keyup', function() {
updateHtml(this.id, this.value);
});
jQuery('#Title').bind('keyup', function() {
updateHtml(this.id, this.value);
});
// showSource("Title",jQuery('#vtitle').html());
// showSource("Content",jQuery('#vcontent').html());
});
</script>
<script>
function submitFilesTo(method)
{
var data = new FormData($('#frmajax').get()[0]);
Yavsc.notice('Submitting via '+method);
$.ajax({
url: apiBaseUrl+'/Blogs/'+method+'/'+$('#Id').val(),
type: "POST",
data: data,
processData: false,
contentType: false,
success: function(data) {
$('#Content').val(data+"\n"+$('#Content').val());
Yavsc.notice(false);
},
error: Yavsc.onAjaxError,
});
}
function submitImport()
{ submitFilesTo('Import'); }
function submitFile()
{ submitFilesTo('PostFile'); }
function submitBaseDoc()
{
var data = new FormData($('#frmajax').get()[0]);
Yavsc.notice('Submitting via '+method);
$.ajax({
url: apiBaseUrl+'/Blogs/'+method+'/'+$('#Id').val(),
type: "POST",
data: data,
processData: false,
contentType: false,
success: function(data) {
$('#Content').val(data+"\n"+$('#Content').val());
Yavsc.notice('Posted updated');
},
error: Yavsc.onAjaxError,
});
}
</script>
<script>
$(document).ready(function(){
$('input').on('change',function(){$(this).addClass('dirty'); $('#validate').addClass('clickme');});
});
</script>
</asp:Content>