Skip to content

Instantly share code, notes, and snippets.

View kamranayub's full-sized avatar

Kamran Ayub kamranayub

View GitHub Profile
@kamranayub
kamranayub / PrettyJson.cs
Last active September 25, 2015 02:17
Formats a valid JSON string into a pretty output
/// <summary>
/// Formats a JSON string by walking through it and examining the contents.
/// </summary>
/// <param name="json">Unformatted JSON string, expects valid JSON with quoted keys and no whitespace.</param>
/// <returns>Formatted JSON string</returns>
/// <remarks>
/// [ { should have line breaks and tabs after them
/// ] } should have line breaks and tabs before them
/// : should have a space after it
/// , should have a line break and tab
@kamranayub
kamranayub / gist:853906
Created March 4, 2011 00:26
Generates a URL-friendly "slug" from an unsanitized string
/// <summary>
/// Will transform "some $ugly ###url wit[]h spaces" into "some-ugly-url-with-spaces"
/// </summary>
public static string Slugify(this string phrase, int maxLength = 50)
{
string str = phrase.ToLower();
// invalid chars, make into spaces
str = Regex.Replace(str, @"[^a-z0-9\s-]", "");
// convert multiple spaces/hyphens into one space
@kamranayub
kamranayub / FieldLabelFor.cs
Created April 7, 2011 13:33
MVC FieldLabelFor helper. Helps generate a better label based entirely off a model's metadata properties.
/* add using statements */
public static class HtmlExtensions {
/// <summary>
/// Generates a better label.
/// Text based off given labelText, [DisplayName], or property name.
/// If the field is optional ([Required]), adds an (optional) em tag.
/// If the field has a description ([Description]), adds a class="note" span tag.
/// </summary>
/// <typeparam name="TModel"></typeparam>
@kamranayub
kamranayub / gist:935461
Created April 21, 2011 21:00
This ProxyConverter can be used with AutoMapper to help when converting Entity Framework proxied objects (i.e. DynamicProxy_xxxxxxx). Room for improvement. See: http://stackoverflow.com/questions/3441916/automapper-mapping-issue-with-inheritance-and-abstr
// See: http://stackoverflow.com/questions/3441916/automapper-mapping-issue-with-inheritance-and-abstract-base-class-on-collection/5749579#5749579
//
// For use with AutoMapper
public class ProxyConverter<TSource, TDestination> : ITypeConverter<TSource, TDestination>
where TSource : class
where TDestination : class
{
public TDestination Convert(ResolutionContext context)
{
// Get dynamic proxy base type
@kamranayub
kamranayub / iebuttonfix.js
Created May 19, 2011 18:07
IE 7 and below <button> tag value on POST fix
$(function () {
//
// IE 7 and below <button> fix
// See: http://www.peterbe.com/plog/button-tag-in-IE
//
if ($.browser.msie) {
if ($.browser.version === "7.0" ||
$.browser.version === "6.0") {
$("button[name][value]").live('click', function () {
var $this = $(this),
@kamranayub
kamranayub / EnumDropDown.cs
Created October 14, 2011 16:04
Drop-down for Enum MVC helper
public static MvcHtmlString DropdownForEnum<TModel>(this HtmlHelper<TModel> helper, Type type,
string name, string optionLabel, object htmlAttributes)
{
if (!type.IsEnum) throw new ArgumentException("type must be that of an enum", "type");
var dictionary = new Dictionary<string, string>();
var values = type.GetEnumValues();
foreach (var val in values)
@kamranayub
kamranayub / PerfTestCaseBackingMethods.cs
Created October 20, 2011 20:20
Performance of reading AppSetting via different backing methods
using System;
using System.Diagnostics;
namespace PerfBackingFields
{
class Program
{
private const int Iterations = 100000;
static void Main(string[] args)
@kamranayub
kamranayub / ExcludeDirectorySearch.cs
Created January 9, 2012 16:42
Cassette ExcludeDirectorySearch
/// <summary>
/// An exclude directory search for Cassette. Provide the patterns you want to search for
/// and this will exclude *.min/*-vsdoc files as well as the directories you specify.
/// </summary>
public class ExcludeDirectorySearch : FileSearch
{
/// <summary>
/// Excludes specified directories in search (also .min and -vsdoc files)
/// </summary>
/// <param name="pattern">File search pattern (wildcards, e.g. *.css;*.less)</param>
@kamranayub
kamranayub / Transforms.xml
Created February 26, 2012 18:02
MSBuild Inline Task to Transform a Hierarchy of XML Files using XDT Transforms
<!-- This task takes in a XDT transform file and transforms it, following any inheritance chain.
There should be at least one base transform for this to work; otherwise just use Microsoft's
regular TransformXml task. -->
<!-- EXAMPLE USAGE:
<TransformXmlHierarchy
Source="source.xml"
Destination="transformed.xml"
TaskDirectory="path/to/directory/of/Microsoft.Web.Publishing.Tasks" />
-->
<UsingTask
@kamranayub
kamranayub / knockout.compiledTemplateSource.js
Created March 21, 2012 19:47
Pre-compiled jQuery tmpl support for KO 2.0.0
// jQuery.tmpl Compiled Source Plugin for Knockout 2.0
// Kamran Ayub - http://kamranicus.com
//
// Adds support for referencing named pre-compiled templates
// e.g. $.template('name', 'markup')
//
// Specifically, this makes Cassette Knockout compiled templates
// work in KO 2.0.0
(function (ko) {
ko.templateSources.compiledTemplateSource = function (name) {