Code Language: javascript

GeoNode for Node.js

Language: JavaScript

// *********************************************
// *********************************************
// GeoNode by Felipe Oliveira
// March 2011
// http://geeks.aretotally.in/projects/geonode
// http://twitter.com/_felipera
// *********************************************
// *********************************************

var geonode = require('../lib/geonode');

// Good Address
var address = '885 6th Ave #15D New York, NY 10001';
var sensor = false;
geonode.geocoder(geonode.google, address, sensor, function(formattedAddress, latitude, longitude) {
	console.log("Formatted Address: " + formattedAddress);
	console.log("Latitude: " + latitude);
	console.log("Longitude: " + longitude);
});
Reveal More
Added 11 months ago by 1_normal _felipera

Simple Bookmarklet Template

Language: JavaScript

// load jQuery only if it's not yet loaded
if (typeof jQuery == 'undefined') {
    // and inject it into the page
	var jQ = document.createElement('script');
	jQ.type = 'text/javascript';
	jQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
	// run the bookmarkletcode after jQ has been loaded
	jQ.onload=runBookmarklet;
	document.body.appendChild(jQ);
} else {
	runBookmarklet();
}

function runBookmarklet() {
    // the magic happens here
    alert("whoohoo, injection!");
}


// when done, minify with John Gruber's Bookmarklet-Builder. It's old, but works like a charm
// http://daringfireball.net/2007/03/javascript_bookmarklet_builder
Reveal More
Added about 1 year ago by Cameron_090907_patrick_heisiph_16_normal darph

Scraping a page with node.js

Language: JavaScript

// Setup here: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs

var request = require('request'),
    jsdom = require('jsdom'),
    sys = require('sys'),
    fs = require('fs'); // for eventually just writing out a file

var uri = 'http://domain.com';

request({uri:uri}, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    var window = jsdom.jsdom(body).createWindow();
    jsdom.jQueryify(window, 'jquery-1.4.2.js', function (window, jquery) {
      var jq = window.jQuery;
      var events = [];

      var year = "2004";
      var $tables = jq("table");
      $tables.each(function () {


        var month = "";
        jq(this).find('tr').each( function() {
          if (jq(this).prev('a').length) {
            month = jq(this).prev('a').attr('name');
          }
          var $tds = jq(this).find("td");
          var event = {};
          event.date = jq($tds[0]).text().replace(/\D+/,"");
          if(event.date != "") {
            event.date = year + " " + month + ' ' + event.date;
            event.location = jq($tds[2]).text() + ', ' + jq($tds[1]).text();
            events.push(event);
            sys.puts(event.date + ":" + event.location);  // just outputs to console for now
          }
        });


      });

      // TODO: write out entire events array to file

    });
  }
});
Reveal More
Added over 1 year ago by Atclub_256_normal scottymac

jQuery Plugin: Excerpt Text + Show More

Language: JavaScript

(function($) {

  $.fn.textExcerpt = function(options) {
    var settings = $.extend({}, $.fn.textExcerpt.defaults, options);

    return this.each(function() {

      var $container = $(this);
      var fullText = $container.text();
      var fullTextLength = fullText.length;
      var excerpt = fullText.substring(0, settings.excerptLength);
      var showMoreText = fullText.substring(settings.excerptLength);

      if (fullTextLength > (settings.excerptLength + settings.fudge)) {

        $container.html(excerpt + ('<span class="tl_show_more_text">' + showMoreText + '</span>'));

        $('<a id="tl_show_more">' + settings.revealLabel + '</a>')
          .appendTo($container)
          .toggle(function() {
            $container.find('span.tl_show_more_text').slideDown();
            $(this).text(settings.hideLabel);
          }, function() {
            $container.find('span.tl_show_more_text').slideUp();
            $(this).text(settings.revealLabel);
          });

        $container.find('span.tl_show_more_text').hide();

      }

    });

  };

  $.fn.textExcerpt.defaults = {
    excerptLength: 700,
    fudge: 100,
    revealLabel: "Show More",
    hideLabel: "Show Less"
  };

})( jQuery );
Reveal More
Added over 1 year ago by Atclub_256_normal scottymac

jQuery Plugin Template

Language: JavaScript

(function($) {
  
  $.fn.pluginName = function(options) {
    var settings = $.extend({}, $.fn.pluginName.defaults, options);

    return this.each(function() {
      //code
    });

  };

  $.fn.pluginName.defaults = {
    defaultName: "default"
  };

})(jQuery);
Reveal More
Added over 1 year ago by Atclub_256_normal scottymac

Re: Determine ordinal for a number

Refactoring of: Determine ordinal for a number

Language: JavaScript

// http://en.wikipedia.org/wiki/Ordinal_number_(linguistics)

function toOrdinal(n) {
  function suffix(tens, ones) {
    if (tens != 1) {
      switch(ones) {
        case 1: return 'st';
        case 2: return 'nd';
        case 3: return 'rd';
      }
    }
    return 'th';
  }
  return n + suffix(Math.round((n % 100) / 10), n % 10);
}
Reveal More
Added over 1 year ago by Segal-avatar_normal zdzolton

Determine ordinal for a number

Language: JavaScript

// http://en.wikipedia.org/wiki/Ordinal_number_(linguistics)

function toOrdinal(n) {
  var tens = Math.round((n % 100) / 10);
  var ones = n % 10;
  var suffix = 'th';
  if (tens != 1) {
    switch(ones) {
      case 1:
        suffix = 'st';
        break;
      case 2:
        suffix = 'nd';
        break;
      case 3:
        suffix = 'rd';
        break;
    }
  }
  return n + suffix;
}
Reveal More
Added over 1 year ago by Segal-avatar_normal zdzolton

Simple Calendar jQuery Plugin

Language: JavaScript

(function($) {
  function firstOfMonth(d) {
    return new Date(d.getFullYear(), d.getMonth(), 1);
  }
  
  function sameDate(d1, d2) {
    return d1.getFullYear() == d2.getFullYear() &&
      d1.getMonth() == d2.getMonth() &&
      d1.getDate() == d2.getDate();
  }
  
  function renderCalendar(dateForMonth, selectedDate) {
    function dayOfWeekHeaders() {
      var dayLabels = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
      output.push('<tr>');
      for (var i = 0; i < 7; i++) {
        output.push('<th>');
        output.push(dayLabels[i]);
        output.push('</th>');
      }
      output.push('</tr>');
    }

    function blankDaysBeforeFirst(dateForFirst) {
      for (var i = 0; i < dateForFirst.getDay(); i++) {
        output.push('<td></td>');
      }
    }

    function blankDaysAfterLast(dayOfWeek) {
      if (dayOfWeek != 6) {
        for (var i = dayOfWeek; i < 6; i++) {
          output.push('<td></td>');
        }
        output.push('</tr>');
      }
    }

    function dayCell(date) {
      if (sameDate(date, selectedDate)) {
        output.push('<td class="selected">');
        output.push(d.getDate());
        output.push('</td>');
      } else {
        output.push('<td><a href=#>');
        output.push(d.getDate());
        output.push('</a></td>');
      }
    }

    var output = [];
    output.push('<table class="calendar">');
    dayOfWeekHeaders();
    output.push('<tr>');
    blankDaysBeforeFirst(dateForMonth);
    var currentMonth = dateForMonth.getMonth();
    var d = firstOfMonth(dateForMonth);
    while (d.getMonth() == currentMonth) {
      var dayOfWeek = d.getDay();
      if (dayOfWeek == 0 && d.getDate() != 1) {
        output.push('<tr>');
      }
      dayCell(d);
      if (dayOfWeek == 6) {
        output.push('</tr>');
      }
      d.setDate(d.getDate() + 1);
    }
    d.setDate(d.getDate() - 1); // Go back to last day of month...
    blankDaysAfterLast(d.getDay());
    output.push('</table>');
    return output.join('');
  }
  
  $.fn.calendar = function() {
    return this.each(function() {
      var $cal = $(this);
      var selectedDate = new Date();
      var displayedMonthDate = firstOfMonth(selectedDate);
      var renderHtml = function() {
        $cal.html(renderCalendar(displayedMonthDate, selectedDate));
        $("a", $cal).click(function(ev) {
          var dayOfMonth = parseInt($(this).text());
          selectedDate = new Date(
            displayedMonthDate.getFullYear(),
            displayedMonthDate.getMonth(),
            dayOfMonth
          );
          renderHtml();
          $cal.trigger('selectedDateChanged', [selectedDate]);
        });
      };
      $cal.bind('showPrevMonth', function() {
        var month = displayedMonthDate.getMonth() - 1;
        displayedMonthDate.setMonth(month);
        renderHtml();
        $cal.trigger('monthChanged', [displayedMonthDate]);
      });
      $cal.bind('showNextMonth', function() {
        var month = displayedMonthDate.getMonth() + 1;
        displayedMonthDate.setMonth(month);
        renderHtml();
        $cal.trigger('monthChanged', [displayedMonthDate]);
      });
      $cal.bind('setSelectedDate', function(ev, date) {
        selectedDate = date;
        renderHtml();
        $cal.trigger('selectedDateChanged', [selectedDate]);
      });
      renderHtml();
    });
  };
})(jQuery);
Reveal More
Added over 1 year ago by Segal-avatar_normal zdzolton

Re: Support Touch Events?

Refactoring of: Support Touch Events?

Language: JavaScript

// Support for touch events?
// This current fails under Chrome 5 because the Chrome team has enabled TouchEvents in the broswer for all devices
// Added check for Chrome; no touch events for you!
// More here: http://groups.google.com/a/chromium.org/group/chromium-html5/browse_thread/thread/b20fb37936ea9196
// And here: http://code.google.com/p/chromium/issues/detail?id=36415#c11

function suportsTouchEvents(){
  if(/chrome/.test(navigator.userAgent.toLowerCase())) {
    return false;
  }
  if("createTouch" in document) {
    return true;
  }
  try{
    var event = document.createEvent("TouchEvent");
    return !!event.initTouchEvent;
  }catch(error){
    return false;
  }
}
Reveal More
Added over 1 year ago by Atclub_256_normal scottymac

Support Touch Events?

Language: JavaScript

// Support for touch events?
// This current fails under Chrome 5 because the Chrome team has enabled TouchEvents in the broswer for all devices
// More here: http://groups.google.com/a/chromium.org/group/chromium-html5/browse_thread/thread/b20fb37936ea9196
// And here: http://code.google.com/p/chromium/issues/detail?id=36415#c11

function suportsTouchEvents(){
  if("createTouch" in document) {
    return true;
  }
  try{
    var event = document.createEvent("TouchEvent");
    return !!event.initTouchEvent;
  }catch(error){
    return false;
  }
}
Reveal More
Added over 1 year ago by Atclub_256_normal scottymac

Create UTC date from parts

Language: JavaScript

function assembleDate() {
  var d = new Date();
  d.setUTCFullYear(arguments[0]);
  // WTF, javascript! Zero-indexed month, really...?
  d.setUTCMonth((arguments[1] || 1) - 1);
  d.setUTCDate(arguments[2] || 1);
  d.setUTCHours(arguments[3] || 0);
  d.setUTCMinutes(arguments[4] || 0);
  d.setUTCSeconds(arguments[5] || 0);
  d.setUTCMilliseconds(arguments[6] || 0);
  return d;
}

// js> assembleDate(2005,5,5);
// Wed May 04 2005 19:00:00 GMT-0500 (CDT)
// js> var parts =  [2005,5,5];
// js> var d = assembleDate.apply(null, parts);
// js> d.toUTCString();
// Thu, 05 May 2005 00:00:00 GMT
Reveal More
Added almost 2 years ago by Segal-avatar_normal zdzolton

jQuery :above-the-fold Selector

Language: JavaScript

// This is currently not playing nice in IE7 -- working on a fix


// $('div:above-the-fold') checks to see if the div is above the fold (of the window)
// $('li:last:above-the-fold(div)') checks to see if the last li is above the fold of the div

$.extend($.expr[':'], {
  "above-the-fold": function(a, i, m) {
    var container = m[3];
    var fold;
    if (typeof container === "undefined") {
      fold = $(window).height() + $(window).scrollTop();
    } else {
      if ($(container).length == 0 || $(container).offset().top == null) return false;
      fold = $(container).offset().top + $(container).height();
    }
    return fold >= $(a).offset().top;
  } 
});
Reveal More
Added almost 2 years ago by Atclub_256_normal scottymac

Simple node.js example: output ps command

Language: JavaScript

// This node.js example wraps the result of running "ps -a" in HTML
// and serves it at localhost:8080. It uses a meta tag
// to refresh the display every 5 seconds.

var sys = require('sys'), 
http = require('http'),
command = "ps -a";

function buildHtml(str) {
  var head = '<head><meta http-equiv="refresh" content="5"></head>';
  var body = '<body><pre>' + str + '</pre></body>';
  return ['<html>', head, body, '</html>'].join('\n');
}

http.createServer(function(req, res) {
  sys.exec(command).addCallback(function (stdout, stderr) {
    res.sendHeader(200, {'Content-Type': 'text/html'});
    res.sendBody(buildHtml(stdout));
    res.finish();
  });
}).listen(8080);

sys.puts('Server running at http://127.0.0.1:8080/');
Reveal More
Added about 2 years ago by Devo_normal gbuesing

Disallow Text Selection

Language: JavaScript

/* IE, FF/Moz, WebKit, CSS3 */
element.onselectstart = function() { return false; };
element.style.MozUserSelect = 'none';
element.style.WebkitUserSelect = 'none';
element.style.UserSelect = 'none';
Reveal More
Added about 2 years ago by Atclub_256_normal scottymac

"Copy embed code" link to input via jQuery

Language: JavaScript

// Turns a link into a "copy embed code" input box, with code preselected
// As seen on flowcoder.com :-)
// Works with multiple embed links on the page
//
// Example link:
//   <a href="http://flowcoder.com/24.js" class="embed_link">Embed</a>
//
// http://flowcoder.com/24.js # =>  returns javascript that does document.write();

$(document).ready(function () {
  $('a.embed_link').click(function () {
    var self = $(this);
    self.hide();
    var scriptTag = '<script src="' + self.attr('href') + '"></script>'
    var input = $('<input>');
    input
      .val(scriptTag)
      .appendTo(self.parent())
      .focus()
      .select()
      .blur(function () {
        self.show();
        input.remove();
      });
    return false;
  });
  
});
Reveal More
Added over 2 years ago by Devo_normal gbuesing

Normalized searches from both Google Maps and Google Ajax APIs

Language: JavaScript

// custom geocoder which calls both Google maps geocoder and Google Ajax local search apis
// returns normalized result set
// use like so:
//   MyApp.geocoder.getLocations('1060 W Addison St, Chicago, IL', function (results) {
//     // results is an array of result objects pulled from both Google Maps and Google Ajax APIS
//     // with normalized properties
//   });
// Uses jQuery's $.map() and $.merge() functions
MyApp = {}; // namespace for app
MyApp.geocoder = {

	getLocations: function (query, onComplete) {	
		var geocoder = new GClientGeocoder();
		var found = [];				
		
		// getLocations from geocoder
		geocoder.getLocations(query, function (response) {
			if (response.Status.code == 200) {
				found = $.map(response.Placemark, function (n, i) {
					var obj = {};
					obj.title = null;
					obj.address = n.address;
					obj.accuracy = n.AddressDetails.Accuracy;
					obj.lat = n.Point.coordinates[1];
					obj.lng = n.Point.coordinates[0];
					obj.source = 'geocoder';
					return obj;
				});
			}
		
			// get additional locations from localSearch
			var localSearch = new google.search.LocalSearch();
			localSearch.setNoHtmlGeneration();	
			localSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
			localSearch.setSearchCompleteCallback(this, MyApp.geocoder.processLocalSearchResult, [localSearch, found, onComplete]);
			localSearch.execute(query);
		});		
	},

	processLocalSearchResult: function (ls, found, onComplete) {
		var results = $.merge(found, 
			$.map(ls.results, function (n,i) {
				var obj = {};
				obj.title = n.titleNoFormatting;
				if (n.addressLines) {
					obj.address = n.addressLines.join(', ');
				}
				obj.accuracy = n.accuracy;
				obj.lat = n.lat;
				obj.lng = n.lng;
				obj.source = 'local search';
				return obj;
			})
		);
		onComplete.call(this, results);
	}
};
Reveal More
Added over 2 years ago by Devo_normal gbuesing

Asynchronous jQuery Image Loader Plugin

Language: JavaScript

(function($) {
  
  $.fn.imageAsync = function(options) {
      var settings = $.extend({}, $.fn.imageAsync.defaults, options);

      return this.each(function() {
        
        if( $(this).attr('src') ) {
          
          var originalImageSrc = $(this).attr('src');
          var imgHeight = $(this + '[height]').attr('height') || settings.h; // bug in firefox: even if img has no height attr, it will come back as 16
          var imgWidth = $(this + '[width]').attr('width') || settings.w;

// bug in Firefox when setting src='' OR removing src attribute which causes a double request for an image
// A better idea would be to set source to a very small, 1x1 gif
                  
          var originalImage = $(this)
            .attr('src','dot-clear-1x1.gif') 
            .wrap('<span class="' + settings.progressClassName + '"></span>')
            .parent('span')
            .css('display','inline-block')
            .width(imgWidth)
            .height(imgHeight);

          var img = new Image();
          $(img)  
            .load(function() { originalImage.replaceWith(this); })
            .error(function() { })
            .attr('src', originalImageSrc)
            .attr('width', imgWidth)
            .attr('height', imgHeight);            
        
        }

     });

  }

  $.fn.imageAsync.defaults = {
		progressClassName: "progress"
	};

})(jQuery);
Reveal More
Added over 2 years ago by Atclub_256_normal scottymac