From 0516ab585ecfced3700cc342f8828fa9b59f1591 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Mon, 27 Oct 2014 14:48:14 +0100 Subject: [PATCH] - a Makefile to deploy - give a try to MS internationalization using resx files --- Makefile | 33 +++ mkReleaseSourceCode.sh | 1 - .../LocalizedText.Designer.cs | 55 ++++ web/App_GlobalResources/LocalizedText.resx | 18 ++ web/App_GlobalResources/LocalizedTextfr.resx | 16 + web/App_GlobalResources/Resources.Designer.cs | 49 ++++ web/Views/Home/ReferencedAssemblies.aspx | 11 + web/js/rangyinputs-jquery-1.1.2.js | 274 ++++++++++++++++++ 8 files changed, 456 insertions(+), 1 deletion(-) create mode 100644 Makefile delete mode 100644 mkReleaseSourceCode.sh create mode 100644 web/App_GlobalResources/LocalizedText.Designer.cs create mode 100644 web/App_GlobalResources/LocalizedText.resx create mode 100644 web/App_GlobalResources/LocalizedTextfr.resx create mode 100644 web/App_GlobalResources/Resources.Designer.cs create mode 100644 web/Views/Home/ReferencedAssemblies.aspx create mode 100644 web/js/rangyinputs-jquery-1.1.2.js diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..72969a00 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ + + +CONFIG=Release +DESTDIR=../build/web/$(CONFIG) +COPYUNCHANGED=false + +all: build deploy + +ddir: + mkdir -p $(DESTDIR) + +deploy: ddir build + xbuild /p:Configuration=$(CONFIG) /p:SkipCopyUnchangedFiles=$(COPYUNCHANGED) /p:DeployDir=$(DESTDIR) /t:Deploy web/Web.csproj + rm -rf $(DESTDIR)/obj + +rsync: rsync-preprod rsync-local + +build: + xbuild /p:Configuration=$(CONFIG) /t:Build Yavsc.sln + +clean: + xbuild /t:Clean + rm -rf $(DESTDIR) + +rsync-preprod: + rsync -ravu build/web/ root@lavieille.localdomain:/srv/httpd/luapre + +rsync-local: + rsync -ravu build/web/ root@localhost:/srv/www/yavsc + +sourcepkg: + git archive --format=tar --prefix=yavsc-1.1/ 1.1 | bzip2 > yavsc-1.1.tar.bz2 + diff --git a/mkReleaseSourceCode.sh b/mkReleaseSourceCode.sh deleted file mode 100644 index ae13d4bf..00000000 --- a/mkReleaseSourceCode.sh +++ /dev/null @@ -1 +0,0 @@ -git archive --format=tar --prefix=yavsc-1.1/ 1.1 | bzip2 > yavsc-1.1.tar.bz2 diff --git a/web/App_GlobalResources/LocalizedText.Designer.cs b/web/App_GlobalResources/LocalizedText.Designer.cs new file mode 100644 index 00000000..1e2ccc62 --- /dev/null +++ b/web/App_GlobalResources/LocalizedText.Designer.cs @@ -0,0 +1,55 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Mono Runtime Version: 4.0.30319.17020 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +namespace Yavsc.App_GlobalResources { + using System; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class LocalizedText { + + private static System.Resources.ResourceManager resourceMan; + + private static System.Globalization.CultureInfo resourceCulture; + + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal LocalizedText() { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Resources.ResourceManager ResourceManager { + get { + if (object.Equals(null, resourceMan)) { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("Yavsc.App_GlobalResources.LocalizedText", typeof(LocalizedText).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static string Previe { + get { + return ResourceManager.GetString("Previe", resourceCulture); + } + } + } +} diff --git a/web/App_GlobalResources/LocalizedText.resx b/web/App_GlobalResources/LocalizedText.resx new file mode 100644 index 00000000..1d1cb7d0 --- /dev/null +++ b/web/App_GlobalResources/LocalizedText.resx @@ -0,0 +1,18 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + +this is my long stringthis is a comment +Blue + + diff --git a/web/App_GlobalResources/LocalizedTextfr.resx b/web/App_GlobalResources/LocalizedTextfr.resx new file mode 100644 index 00000000..04615cc8 --- /dev/null +++ b/web/App_GlobalResources/LocalizedTextfr.resx @@ -0,0 +1,16 @@ + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Previewcomment on preview + diff --git a/web/App_GlobalResources/Resources.Designer.cs b/web/App_GlobalResources/Resources.Designer.cs new file mode 100644 index 00000000..031b9ff2 --- /dev/null +++ b/web/App_GlobalResources/Resources.Designer.cs @@ -0,0 +1,49 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Mono Runtime Version: 4.0.30319.17020 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ + +namespace Yavsc.App_GlobalResources { + using System; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static System.Resources.ResourceManager resourceMan; + + private static System.Globalization.CultureInfo resourceCulture; + + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Resources.ResourceManager ResourceManager { + get { + if (object.Equals(null, resourceMan)) { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("Yavsc.App_GlobalResources.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/web/Views/Home/ReferencedAssemblies.aspx b/web/Views/Home/ReferencedAssemblies.aspx new file mode 100644 index 00000000..eb4731ca --- /dev/null +++ b/web/Views/Home/ReferencedAssemblies.aspx @@ -0,0 +1,11 @@ +<%@ Page Title="Yavsc - indexe" Language="C#" Inherits="System.Web.Mvc.ViewPage" MasterPageFile="~/Models/App.master"%> + + +

+« Voir le monde comme un rêve est un bon point de vue. Quand on fait un cauchemar, on se réveille et on se dit que ce n’était qu’un rêve. Il est dit que le monde où nous vivons n’en diffère en rien ». +
Ghost Dog, la Voie du samouraï +

+<%= Html.ActionLink("Les blogs","Index","Blogs") %> +
+
+ diff --git a/web/js/rangyinputs-jquery-1.1.2.js b/web/js/rangyinputs-jquery-1.1.2.js new file mode 100644 index 00000000..c8bad91d --- /dev/null +++ b/web/js/rangyinputs-jquery-1.1.2.js @@ -0,0 +1,274 @@ +/** + * @license Rangy Inputs, a jQuery plug-in for selection and caret manipulation within textareas and text inputs. + * + * https://github.com/timdown/rangyinputs + * + * For range and selection features for contenteditable, see Rangy. + + * http://code.google.com/p/rangy/ + * + * Depends on jQuery 1.0 or later. + * + * Copyright 2013, Tim Down + * Licensed under the MIT license. + * Version: 1.1.2 + * Build date: 6 September 2013 + */ +(function($) { + var UNDEF = "undefined"; + var getSelection, setSelection, deleteSelectedText, deleteText, insertText; + var replaceSelectedText, surroundSelectedText, extractSelectedText, collapseSelection; + + // Trio of isHost* functions taken from Peter Michaux's article: + // http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting + function isHostMethod(object, property) { + var t = typeof object[property]; + return t === "function" || (!!(t == "object" && object[property])) || t == "unknown"; + } + + function isHostProperty(object, property) { + return typeof(object[property]) != UNDEF; + } + + function isHostObject(object, property) { + return !!(typeof(object[property]) == "object" && object[property]); + } + + function fail(reason) { + if (window.console && window.console.log) { + window.console.log("RangyInputs not supported in your browser. Reason: " + reason); + } + } + + function adjustOffsets(el, start, end) { + if (start < 0) { + start += el.value.length; + } + if (typeof end == UNDEF) { + end = start; + } + if (end < 0) { + end += el.value.length; + } + return { start: start, end: end }; + } + + function makeSelection(el, start, end) { + return { + start: start, + end: end, + length: end - start, + text: el.value.slice(start, end) + }; + } + + function getBody() { + return isHostObject(document, "body") ? document.body : document.getElementsByTagName("body")[0]; + } + + $(document).ready(function() { + var testTextArea = document.createElement("textarea"); + + getBody().appendChild(testTextArea); + + if (isHostProperty(testTextArea, "selectionStart") && isHostProperty(testTextArea, "selectionEnd")) { + getSelection = function(el) { + var start = el.selectionStart, end = el.selectionEnd; + return makeSelection(el, start, end); + }; + + setSelection = function(el, startOffset, endOffset) { + var offsets = adjustOffsets(el, startOffset, endOffset); + el.selectionStart = offsets.start; + el.selectionEnd = offsets.end; + }; + + collapseSelection = function(el, toStart) { + if (toStart) { + el.selectionEnd = el.selectionStart; + } else { + el.selectionStart = el.selectionEnd; + } + }; + } else if (isHostMethod(testTextArea, "createTextRange") && isHostObject(document, "selection") && + isHostMethod(document.selection, "createRange")) { + + getSelection = function(el) { + var start = 0, end = 0, normalizedValue, textInputRange, len, endRange; + var range = document.selection.createRange(); + + if (range && range.parentElement() == el) { + len = el.value.length; + + normalizedValue = el.value.replace(/\r\n/g, "\n"); + textInputRange = el.createTextRange(); + textInputRange.moveToBookmark(range.getBookmark()); + endRange = el.createTextRange(); + endRange.collapse(false); + if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { + start = end = len; + } else { + start = -textInputRange.moveStart("character", -len); + start += normalizedValue.slice(0, start).split("\n").length - 1; + if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) { + end = len; + } else { + end = -textInputRange.moveEnd("character", -len); + end += normalizedValue.slice(0, end).split("\n").length - 1; + } + } + } + + return makeSelection(el, start, end); + }; + + // Moving across a line break only counts as moving one character in a TextRange, whereas a line break in + // the textarea value is two characters. This function corrects for that by converting a text offset into a + // range character offset by subtracting one character for every line break in the textarea prior to the + // offset + var offsetToRangeCharacterMove = function(el, offset) { + return offset - (el.value.slice(0, offset).split("\r\n").length - 1); + }; + + setSelection = function(el, startOffset, endOffset) { + var offsets = adjustOffsets(el, startOffset, endOffset); + var range = el.createTextRange(); + var startCharMove = offsetToRangeCharacterMove(el, offsets.start); + range.collapse(true); + if (offsets.start == offsets.end) { + range.move("character", startCharMove); + } else { + range.moveEnd("character", offsetToRangeCharacterMove(el, offsets.end)); + range.moveStart("character", startCharMove); + } + range.select(); + }; + + collapseSelection = function(el, toStart) { + var range = document.selection.createRange(); + range.collapse(toStart); + range.select(); + }; + } else { + getBody().removeChild(testTextArea); + fail("No means of finding text input caret position"); + return; + } + + // Clean up + getBody().removeChild(testTextArea); + + deleteText = function(el, start, end, moveSelection) { + var val; + if (start != end) { + val = el.value; + el.value = val.slice(0, start) + val.slice(end); + } + if (moveSelection) { + setSelection(el, start, start); + } + }; + + deleteSelectedText = function(el) { + var sel = getSelection(el); + deleteText(el, sel.start, sel.end, true); + }; + + extractSelectedText = function(el) { + var sel = getSelection(el), val; + if (sel.start != sel.end) { + val = el.value; + el.value = val.slice(0, sel.start) + val.slice(sel.end); + } + setSelection(el, sel.start, sel.start); + return sel.text; + }; + + var updateSelectionAfterInsert = function(el, startIndex, text, selectionBehaviour) { + var endIndex = startIndex + text.length; + + selectionBehaviour = (typeof selectionBehaviour == "string") ? + selectionBehaviour.toLowerCase() : ""; + + if ((selectionBehaviour == "collapsetoend" || selectionBehaviour == "select") && /[\r\n]/.test(text)) { + // Find the length of the actual text inserted, which could vary + // depending on how the browser deals with line breaks + var normalizedText = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n"); + endIndex = startIndex + normalizedText.length; + var firstLineBreakIndex = startIndex + normalizedText.indexOf("\n"); + + if (el.value.slice(firstLineBreakIndex, firstLineBreakIndex + 2) == "\r\n") { + // Browser uses \r\n, so we need to account for extra \r characters + endIndex += normalizedText.match(/\n/g).length; + } + } + + switch (selectionBehaviour) { + case "collapsetostart": + setSelection(el, startIndex, startIndex); + break; + case "collapsetoend": + setSelection(el, endIndex, endIndex); + break; + case "select": + setSelection(el, startIndex, endIndex); + break; + } + }; + + insertText = function(el, text, index, selectionBehaviour) { + var val = el.value; + el.value = val.slice(0, index) + text + val.slice(index); + if (typeof selectionBehaviour == "boolean") { + selectionBehaviour = selectionBehaviour ? "collapseToEnd" : ""; + } + updateSelectionAfterInsert(el, index, text, selectionBehaviour); + }; + + replaceSelectedText = function(el, text, selectionBehaviour) { + var sel = getSelection(el), val = el.value; + el.value = val.slice(0, sel.start) + text + val.slice(sel.end); + updateSelectionAfterInsert(el, sel.start, text, selectionBehaviour || "collapseToEnd"); + }; + + surroundSelectedText = function(el, before, after, selectionBehaviour) { + if (typeof after == UNDEF) { + after = before; + } + var sel = getSelection(el), val = el.value; + el.value = val.slice(0, sel.start) + before + sel.text + after + val.slice(sel.end); + var startIndex = sel.start + before.length; + updateSelectionAfterInsert(el, startIndex, sel.text, selectionBehaviour || "select"); + }; + + function jQuerify(func, returnThis) { + return function() { + var el = this.jquery ? this[0] : this; + var nodeName = el.nodeName.toLowerCase(); + + if (el.nodeType == 1 && (nodeName == "textarea" || (nodeName == "input" && el.type == "text"))) { + var args = [el].concat(Array.prototype.slice.call(arguments)); + var result = func.apply(this, args); + if (!returnThis) { + return result; + } + } + if (returnThis) { + return this; + } + }; + } + + $.fn.extend({ + getSelection: jQuerify(getSelection, false), + setSelection: jQuerify(setSelection, true), + collapseSelection: jQuerify(collapseSelection, true), + deleteSelectedText: jQuerify(deleteSelectedText, true), + deleteText: jQuerify(deleteText, true), + extractSelectedText: jQuerify(extractSelectedText, false), + insertText: jQuerify(insertText, true), + replaceSelectedText: jQuerify(replaceSelectedText, true), + surroundSelectedText: jQuerify(surroundSelectedText, true) + }); + }); +})(jQuery); \ No newline at end of file