Language: C#
Upcoming ability to write jQuery plugins in c#
1: // LivePreviewPlugin.cs 2: // 3: 4: using System; 5: using System.Collections; 6: using System.Html; 7: using System.Runtime.CompilerServices; 8: using jQueryApi; 9: 10: [Imported] 11: public sealed class LivePreviewOptions : Record { 12: 13: public RegularExpression ParaRegExp; 14: public RegularExpression LineBreakRegExp; 15: public string[] AllowedTags; 16: public int Interval; 17: public Element[] PreviewElement; 18: } 19: 20: [GlobalMethods("$.fn")] 21: public static class LivePreviewPlugin { 22: 23: public static jQueryObject LivePreview(Dictionary customOptions) { 24: Dictionary defaultOptions = 25: new Dictionary("paraRegExp", new RegularExpression("(.*)\n\n([^#*\n\n].*)", "g"), 26: "linBreakRegExp", new RegularExpression("(.*)\n([^#*\n].*)", "g"), 27: "allowedTags", new string[] {"a", "b", "strong", "blockquote", "p", "i", "em", "u", "strike", "super", "sub", "code"}, 28: "interval", 80); 29: 30: LivePreviewOptions options = (LivePreviewOptions)jQuery.Extend(new Dictionary(), defaultOptions, customOptions); 31: 32: int previewMaxIndex = options.PreviewElement.Length - 1; 33: RegularExpression allowedTagsRegExp = 34: new RegularExpression("<(/?(" + options.AllowedTags.Join("|") + ")(\\s+.*?)?)>", "g"); 35: 36: return jQuery.Current.Each(delegate(int i, Element element) { 37: jQueryObject textArea = jQuery.FromElement(element); 38: jQueryObject preview = jQuery.FromElement(options.PreviewElement[Math.Min(i, previewMaxIndex)]); 39: bool updatingPreview = false; 40: 41: Action updatePreview = delegate() { 42: string previewString = textArea.Value(); 43: if (previewString.Length > 0) { 44: previewString = previewString.HtmlEncode(); 45: previewString = previewString.ReplaceRegex(options.ParaRegExp, "<p>$1</p><p>$2</p>"); 46: previewString = previewString.ReplaceRegex(options.LineBreakRegExp, "$1<br />$2"); 47: previewString = previewString.ReplaceRegex(allowedTagsRegExp, "<$1>"); 48: } 49: 50: preview.Html(previewString); 51: updatingPreview = false; 52: }; 53: 54: jQueryEventHandler keyUpHandler = delegate(jQueryEvent e) { 55: if (!updatingPreview) { 56: updatingPreview = true; 57: Window.SetTimeout(updatePreview, options.Interval); 58: } 59: }; 60: 61: textArea.Bind("keyup", keyUpHandler); 62: updatePreview(); 63: }); 64: } 65: }
Tags:
Description:
Phil Haack's LivePreview plugin converted to equivalent c# code - script# will support jQuery in the next release...
Report Abuse
Subscribe
Discuss
What's new
What is it
New Snippet
Recent Snippets
My Snippets
Web Code
Search


Resulting script:
$.fn.livePreview = function(customOptions) {
var defaultOptions = { paraRegExp: new RegExp('(.*)\n\n([^#*\n\n].*)', 'g'),
linBreakRegExp: new RegExp('(.*)\n([^#*\n].*)', 'g'),
allowedTags: [ 'a', 'b', 'strong', 'blockquote', 'p', 'i', 'em', 'u', 'strike', 'super', 'sub', 'code' ],
interval: 80 };
var options = $.extend({}, defaultOptions, customOptions);
var previewMaxIndex = options.previewElement.length - 1;
var allowedTagsRegExp = new RegExp('<(/?(' + options.allowedTags.join('|') + ')(\\s+.*?)?)>', 'g');
return this.each(function(i, element) {
var textArea = $(element);
var preview = $(options.previewElement[Math.min(i, previewMaxIndex)]);
var updatingPreview = false;
var updatePreview = function() {
var previewString = textArea.val();
if (previewString.length > 0) {
previewString = previewString.htmlEncode();
previewString = previewString.replace(options.paraRegExp, '<p>$1</p><p>$2</p>');
previewString = previewString.replace(options.lineBreakRegExp, '$1<br />$2');
previewString = previewString.replace(allowedTagsRegExp, '<$1>');
}
preview.html(previewString);
updatingPreview = false;
};
var keyUpHandler = function(e) {
if (!updatingPreview) {
updatingPreview = true;
window.setTimeout(updatePreview, options.interval);
}
};
textArea.bind('keyup', keyUpHandler);
updatePreview.invoke();
});
}