javascript.snippets
# Prototype
snippet proto
	${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {
		${4:// body...}
	};
# Function
snippet fun
	function ${1:function_name}(${2:argument}) {
		${3:// body...}
	}
# Anonymous Function
snippet f
	function(${1:args}) {${2: /* code */ }}
# if
snippet if
	if (${1:true}) {
		${2:// code}
	}
# if ... else
snippet ife
	if (${1:true}) {
		${2:// code}
	} else {
		${3:// code}
	}
snippet eif
	else if (${1:true}) {
		${2:// code}
	}
snippet els
	else {
		${1:// code}
	}
# tertiary conditional
snippet t
	( (${1:true}) ? ${2:true} : ${3:false} )
# switch
snippet switch
	switch(${1:expression}) {
		case '${3:case}':
			${4:// code}
			break;
		${5}
		default:
			${2:// code}
	}
# case
snippet case
	case '${1:case}':
		${2:// code}
		break;
	${3}
# for (...) {...}
# snippet for
# 	for ( var ${1:i} = 0; $1 < ${2:things}.length; $1${3:++} ) {
# 		var ${4:thing} = $2[$1];
# 		${5:// code}
# 	}
# for (...) {...} (Improved Native For-Loop)
snippet forr
	for (var ${2:i} = ${1:Things}.length - 1; $2 >= 0; $2${3:--}) {
		${4:$1[$2]}
	};
# while (...) {...}
snippet wh
	while (${1:/* condition */}) {
		${2:/* code */}
	}
# do...while
snippet do
	do {
		${2:/* code */}
	} while (${1:/* condition */});
# Object Method
# snippet :f
# 	${1:method_name}: function(${2:attribute}) {
# 		${4}
# 	}${3:,}
# setTimeout function
snippet timeout
	setTimeout(function() {${3}}${2}, ${1:10};
# Get Elements
snippet get
	getElementsBy${1:TagName}('${2}')${3}
# Get Element
snippet gett
	getElementBy${1:Id}('${2}')${3}
##################################
#My snips
snippet for
	${5:var $1, $4;}
	for ( ${1:i} = 0; $1 < ${2:things}.length; $1${3:++} ) {
		${4:thing} = $2[$1];
		${6:// code}
	}
snippet fori
	${4:var $1, $3;}
	for ( ${1:i} in ${2:things} ) { if ( $2.hasOwnProperty($1) ) {
		${3:thing} = $2[$1];
		${5:// code}
	} }
snippet :f
	${1:method_name}: function(${2:attribute}) {
		${4:// code}
	}${3:,}
snippet try
	try {
		${3:// code}
	} catch (${1:ex}) {
		${2:console.error( 'Unknown error:', $1 );}
	}
snippet define simple
	define(
 
		[
			${1:// deps}
		],
 
		function(${2: /* deps args */ }) {
 
			${3:// code}
 
		}
 
	);
snippet define project
	define(
 
		[
			${1:// deps}
		],
 
		function(${2: /* deps args */ }) {
 
			/**
			 * @class $4.$3
			 */
			var ${3:ClassName} = function() {};
 
			$3.prototype = {};
 
			${4:Package}.$3 = $3;
 
			return $3;
 
		}
 
	);
snippet ret
	return ${1:res};
snippet (f
	( function(${1:/* args */}) {
		${3:// code}
	} )(${2:$1});
##################################
#JSDoc
snippet /**
	/**
	 * ${1}
	 */
snippet @p
	@param {${1:type}} ${2:name} - ${3:descripton}
snippet @m
	@method
snippet @r
	@return {${1:type}} ${2:description}
snippet @e
	    @example
	*     ${1:code}
snippet @ev
	@event
snippet @t
	@template
snippet @pri
	@private
snippet @pro
	@property {${1:type}}
snippet @c
	@class
##################################
# console
snippet cwarn
	console.warn('WARN: ${1:warning message}');
snippet cerror
	console.error('ERROR: ${1:error message}');
snippet throw
	throw new Error('FATAL: ${1:error message}');
snippet clog
	console.log(${1:});
snippet cdebug
	console.debug(${1:});${2: /* DEBUG */}
snippet cdir
	console.dir(${1:});${2: /* DEBUG */}
snippet ctime
	console.time('${1:timerName}');${2: /* DEBUG */}
snippet ctimee
	console.timeEnd('${1:timerName}');${2: /* DEBUG */}
snippet cgrp
	console.group('${1:groupName}');${2: /* DEBUG */}
snippet cgrpc
	console.groupCollapsed('${1:groupName}');${2: /* DEBUG */}
snippet cgrpe
	console.groupEnd();${2: /* DEBUG */}
snippet DE
	/* DEBUG */
snippet debug
	debugger;${1: /* DEBUG */}