<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>content</key>
	<string>// jQuery ${1:pluginName} Plugin
(function( \$ ) {
  var settings = {
    ${30:}
  };

  var methods = {
    init: function( options ) {

      this.each(function() {
        var data, dataId, opts,
            ${10:\$this} = $(this);

        $10.$1('options', options);
        data = $10.data('$1') || {};
        opts = data.options;

        // If the plugin hasn't been initialized yet
        if ( !data.$1 ) {
          dataId = +new Date;

          data = {
            cluetip: $1,
            options: opts,
            id: dataId
          };

          $10.data('$1', data);
          ${14:
          // create element and append to body
          var $1 = \$('&lt;div /&gt;', {
            'class': '$1'
          \}).appendTo( 'body' );

          $1.data( '$1', {target: $10, id: dataId\} );
}

        } // !data.$1

        $0

      });

      return this;
    },
    destroy: function( ) {

      this.each(function() {

        var $10 = \$(this),
            data = $10.data( '$1' );

        // Remove created elements, unbind namespaced events, and remove data
        \$(document).unbind( '.$1' );
        data.$1.remove();
        $10.unbind( '.$1' )
        .removeData( '$1' );

      });

      return this;
    },
    options: function( options ) {

      this.each(function() {
        var $10 = \$(this),
            // don't use our getData() function here
            // because we want an object regardless
            data = $10.data( '$1' ) || {},
            opts = data.options || {};

        // deep extend (merge) default settings, per-call options, and options set with:
        // html10 data-$1 options JSON and \$('selector').$1( 'options', {} );
        opts = \$.extend( true, {}, \$.fn.cluetip.defaults, opts, options || {} );
        data.options = opts;
        \$.data( this, '$1', data );
      });

      return this;
    }${20/(.+)/(?1:,
    :)/}${20:someOtherMethod}${20/(.+)/(?1:\: function\(\) {

    }:)/}
  };

  var protoSlice = Array.prototype.slice;

  \$.fn.$1 = function( method ) {

    if ( methods[method] ) {
      return methods[method].apply( this, protoSlice.call( arguments, 1 ) );
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      \$.error( 'Method ' +  method + ' does not exist on jQuery.fn.$1' );
    }

  };

  \$.extend(\$.fn.$1, {
    defaults: settings
  });

  function getData(el) {
    var $1, opts,
        $10 = \$(el),
        data = $10.data( '$1' ) || {};

    if (!data.$1) { return false; }

    return data;
  }

})( jQuery );</string>
	<key>name</key>
	<string>plugin (method extras)</string>
	<key>scope</key>
	<string>source.js</string>
	<key>tabTrigger</key>
	<string>plugin</string>
	<key>uuid</key>
	<string>39192EFA-D490-4E52-B7F8-D68584397A41</string>
</dict>
</plist>
