- a Makefile to deploy
- give a try to MS internationalization using resx files
This commit is contained in:
33
Makefile
Normal file
33
Makefile
Normal file
@ -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
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
git archive --format=tar --prefix=yavsc-1.1/ 1.1 | bzip2 > yavsc-1.1.tar.bz2
|
|
55
web/App_GlobalResources/LocalizedText.Designer.cs
generated
Normal file
55
web/App_GlobalResources/LocalizedText.Designer.cs
generated
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// ------------------------------------------------------------------------------
|
||||||
|
// <autogenerated>
|
||||||
|
// 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.
|
||||||
|
// </autogenerated>
|
||||||
|
// ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
web/App_GlobalResources/LocalizedText.resx
Normal file
18
web/App_GlobalResources/LocalizedText.resx
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
|
||||||
|
</root>
|
16
web/App_GlobalResources/LocalizedTextfr.resx
Normal file
16
web/App_GlobalResources/LocalizedTextfr.resx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="Preview"><value>Preview</value><comment>comment on preview</comment></data>
|
||||||
|
</root>
|
49
web/App_GlobalResources/Resources.Designer.cs
generated
Normal file
49
web/App_GlobalResources/Resources.Designer.cs
generated
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// ------------------------------------------------------------------------------
|
||||||
|
// <autogenerated>
|
||||||
|
// 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.
|
||||||
|
// </autogenerated>
|
||||||
|
// ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
web/Views/Home/ReferencedAssemblies.aspx
Normal file
11
web/Views/Home/ReferencedAssemblies.aspx
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<%@ Page Title="Yavsc - indexe" Language="C#" Inherits="System.Web.Mvc.ViewPage" MasterPageFile="~/Models/App.master"%>
|
||||||
|
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
« 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 ».
|
||||||
|
<br/><a href="http://unefenetresurlemonde.over-blog.com/article-34325590.html">Ghost Dog, la Voie du samouraï</a>
|
||||||
|
</p><div>
|
||||||
|
<%= Html.ActionLink("Les blogs","Index","Blogs") %>
|
||||||
|
</div>
|
||||||
|
</asp:Content>
|
||||||
|
|
274
web/js/rangyinputs-jquery-1.1.2.js
Normal file
274
web/js/rangyinputs-jquery-1.1.2.js
Normal file
@ -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);
|
Reference in New Issue
Block a user