CodePaste Logo
New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: C#

Upcoming ability to write jQuery plugins in c#

871 Views
Copy Code Show/Hide Line Numbers
   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:  }
by Nikhil Kothari
  February 25, 2010 @ 11:25am
Tags:
Description:
Phil Haack's LivePreview plugin converted to equivalent c# code - script# will support jQuery in the next release...

by Nikhil Kothari    February 25, 2010 @ 11:36am

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('&lt;(/?(' + options.allowedTags.join('|') + ')(\\s+.*?)?)&gt;', '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();
});
}

Add a comment


Report Abuse
brought to you by:
West Wind Techologies



If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate