JavaScript

March 16, 2012

Fixing the scrollbar issue in GoogleMaps InfoWindow

<script type="text/javascript">
var contentString = '<div style="max-width: 200px; overflow: hidden; display: none;" id="noscroll"><h4>The Business School</h4>29 Buccleuch Place, EH8 9JS</div>';

jQuery(document).ready(function(){

    var latlong = new google.maps.LatLng(55.942802, -3.186896);


    var opts = { 
      zoom: 15, 
      center: new google.maps.LatLng(55.945000, -3.186896),
      mapTypeControl: false,
      disableDefaultUI: false,
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      scaleControl: true };

    var map = new google.maps.Map(document.getElementById("map"), opts);

    var infowindow = new google.maps.InfoWindow({ content: contentString, maxWidth: 100 });

    var marker = new google.maps.Marker({ position: new google.maps.LatLng(55.942802, -3.186896), map: map, title: "Business School" });


    infowindow.open(map, marker);

    });
</script>

The function call infowindow.open(map, marker) sets up your bubble content in two nested DIVs with overflow: auto styling set. This needs to be undone once the bubble is created. Hence the 2 second wait.

<script type="text/javascript">

var ns;

var flag = 0;

function fix_it(lag){

    setTimeout(function(){

        try{ 

            ns = document.getElementById('noscroll'); 

            var pops = ns.parentNode;

            var gramps = pops.parentNode;

            gramps.style.overflow = 'hidden';

            pops.style.overflow = 'hidden';

            ns.style.overflow = 'hidden';

            ns.style.display = 'block';

            }

        catch(e){ if(flag == 0){ flag = 1;  fix_it(2000); } }

        }, lag);

    }


jQuery(document).ready(function(){

    fix_it(2000);

    });

</script>

Posted by pj at 10:42 PM | Comments (0)

November 05, 2011

Spine JS Framework

Spine

Posted by pj at 05:40 PM | Comments (0)

October 30, 2011

Detect an iPad and provide a non-Flash alternative

try{ ["iPad","iPod","iPhone"].each(

  function(i){

    if(navigator.userAgent.indexOf(i) > -1){

      //Do iPad stuff here

      }

   }); } catch(e){ var meh = 'meh'; }

Posted by pj at 08:40 PM | Comments (0)

July 25, 2011

Link bare URLs in a HTML element

function link_em(da_id){

    try{ var tml = document.getElementById(da_id).innerHTML; } catch(e){ return false; }

    var reg = /[^href\=\"](http|https):\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?\/?/gm;

    var list = [];

    list = tml.match(reg);

    var count = 0;

    for(i in list){

       if(list[i]){ if(list[i] != document.getElementById(da_id).innerHTML){ if( parseInt(list[i]) + '' != list[i]){

          count++;

          tml = tml.replace(list[i].replace(/\(/,''), '<a href="' + list[i].replace(/\(/,'') + '">' + list[i].replace(/\(/,'') + '</a>');

          }}}

       }

try{ if(list[0]){    

       document.getElementById(da_id).innerHTML = tml;

       } } catch(e){ var blah = ''; }

    }


Posted by pj at 04:38 PM | Comments (0)

July 12, 2011

Online IDE for Node.js

Interwebs IDE hits the mother Node • The Register

Posted by pj at 06:20 PM | Comments (0)

June 13, 2011

Detect curly quotes with JavaScript

function check_quotes(){
	
	var s = '';
	
	var regex = /\W/g;
	
	var m =  null;
	
	var text = null;
	
	var code = null;
	
	['asset_name','body','summary'].each(function(da_id){
	
		text = document.getElementById(da_id).value; 
		
		m = regex.exec(text);

		if(da_id == 'asset_name'){ da_id = 'title'; }
		
		var count = 0;
		
		while(m){
				
			code = m[0].charCodeAt(0);
			
			if(code > 8200){
			
			    s = s + "\n<li> Found  " + m + "  in " + da_id.split('_').join(' ') + " text</li>";
			    
				count++;
				
			   }

			count++;
 	
			m = regex.exec(text);
		
			}
			
		});
	
	if(s != ''){ poppy('Illegal characters found in your title or description:<br/><br/><ul>' + s + '</ul><br/>Delete and then re-type quotes and long dashes in the editor above before proceeding. Please try and avoid cutting and pasting from Word.'); return true; }
	
	return false;
	
	}

Posted by pj at 04:23 PM | Comments (0)

March 30, 2011

Doing foreach iteration in JavaScript


['email','first_name','last_name','photo_url'].each(function(i){ //Or forEach

			if(document.getElementById(i)){
			
				$jq('#' +i).attr({ 'readonly' : '' });

				$jq('#' + i).removeClass('readonly');

				}

		});

Posted by pj at 03:31 PM | Comments (0)

Javascript array iteration

How many ways can you iterate over an array in JavaScript?

Posted by pj at 01:30 PM | Comments (0)

March 01, 2011

Node.js

Node.js community wiki - GitHub

Also:

http://www.nakedjavascript.com/going-evented-with-nodejs

Posted by pj at 10:37 PM | Comments (0)

October 18, 2010

Checking PHP form array has a value

function valet(els){

	if(validate(els)){
	
		var checks = document.getElementsByName('category[]');
	
		for (i = 0; i < checks.length; i++){ 
		
			if(checks[i].checked == true){ return true; } 

			}

		poppy('You need to choose at least one Region or Sector.'); return false; 
	
		}

	return false;

	}

Posted by pj at 01:11 PM | Comments (0)

May 13, 2010

jQuery Gallery with Flikr hooks

Galleria — A JavaScript gallery for the Fastidious

Posted by pj at 03:35 PM | Comments (0)

February 18, 2010

JS to make one button the same size as another

var padme = $('m_butt').offsetWidth - $('sum_butt').offsetWidth;

// The 3 is the padding applied to the first element, 
// which needs to be added to the difference

$('sum_butt').style.paddingRight = (padme + 3) + 'px';

Posted by pj at 09:45 AM | Comments (0)

November 13, 2009

Really fast Ajax

Ajax/load - jQuery JavaScript Library

Posted by pj at 04:24 PM | Comments (0)

October 26, 2009

Thickbox and Prototype

getting thickbox, jquery, and prototype to play together nicely | disjoint thoughts

Posted by pj at 11:22 AM | Comments (0)

October 15, 2009

Prototype-based Carousel

Prototype: Carousel

Posted by pj at 11:46 AM | Comments (0)

August 06, 2009

Ajax URL Checker

The JS goes like this:

function check_url(me_url){

	$('url_message').innerHTML = '';

	var url_match = /https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?/;

	if(url_match.test(me_url)){ poppy('URL is well-formed.'); $('url_warning').style.display = "none"; }
	
	else{ poppy('The URL entered appears to be invalid. Please ensure it begins with http:// or https://!'); $('url_warning').style.display = 'block'; return false; }

	$('url_message').style.display = 'inline';

	$('url_message').innerHTML = ' <strong style="text-decoration: blink;">Checking Link..</strong>';

    var da_url  = 'check_url.php';
    var params = '?url=' + me_url;
    var myAjax = new Ajax.Request(
                        da_url,
                        {
                                method: 'get',
                                parameters: params,
                                onComplete: success
                        });
						
		function success(this_request){
		
			try{ 
			
				var reply = this_request.responseText.evalJSON(true);  
				
				if(reply['status_code']){ 
				
					if( reply['status_code'] < 400){ $('url_message').innerHTML = ' <strong style="color: green">Link OK: Code ' + reply['status_code']+ '</strong>'; }
				
					else{ $('url_message').innerHTML = ' <strong style="color: red">Broken: Code ' + reply['status_code'] + '</strong>'; }
					
					} else { $('url_message').innerHTML = ' <strong style="color: red">No Such Site.</strong>'; }
				
				} catch(e){ blah = ''; }
		
			}	

	}

The PHP goes like this:

<?

require_once "HTTP/Request.php";

$req =& new HTTP_Request($_REQUEST['url']);

$response = $req->sendRequest();

header('Status:'.$req->getResponseCode());

print json_encode(array("status_code" => $req->getResponseCode()));

?>

Posted by pj at 01:15 PM | Comments (0)

July 15, 2009

jQuery powered inline HTML editing

WYSIWYG Inline Edit with Jeditable

Posted by pj at 09:54 AM | Comments (0)

July 13, 2009

jQuery sprintf and editable areas

Plugins | jQuery Plugins

Posted by pj at 07:37 PM | Comments (0)

May 29, 2009

Getting GET parameters with JavaScript and setting them in a cookie

var queryString = window.top.location.search.substring(1);

function getParameter ( queryString, parameterName ) {

	// Add "=" to the parameter name (i.e. parameterName=value)
	var parameterName = parameterName + "=";

	if ( queryString.length > 0 ) {

		// Find the beginning of the string
		begin = queryString.indexOf ( parameterName );

		// If the parameter name is not found, skip it, otherwise return the value
		if ( begin != -1 ) {

			// Add the length (integer) to the beginning
			begin += parameterName.length;

			// Multiple parameters are separated by the "&" sign
			end = queryString.indexOf ( "&" , begin );

			if ( end == -1 ) {

				end = queryString.length

				}

			// Return the string
			return unescape ( queryString.substring ( begin, end ) );

			}

		// Return "null" if no parameter has been found
		return false;
		
		}
	}

function get_start_date(queryString){

	var start_date = getParameter(queryString, 'SQ_CALENDAR_DATE')

	if(start_date){ return start_date; }

	return false;

	}


function get_view(queryString){

	var view = getParameter(queryString, 'SQ_CALENDAR_VIEW')

	if(view){ return view; }

	return false;

	}

function create_cookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
        
        }

function read_cookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0){   
                
                    //alert(c.substring(nameEQ.length,c.length));
                
                    return c.substring(nameEQ.length,c.length);
	
                    }
        
        }
	return false;
        }


//If we don't have a start date in the URL, try getting the cookie and if we have one redirect back to ourselves including the start_date in the URL

if(get_start_date(queryString) == false){

        var bicky = read_cookie('start_date');

        if(bicky != false){ document.location.href = document.location.href + '?SQ_CALENDAR_DATE=' + bicky; }

        }

//Otherwise we have a start date in the URL query so grab it and slot it into a cookie

else{ create_cookie('start_date', get_start_date(queryString), 1); }

//If we have called a day view then redirect us to the day view asset

if(get_view(queryString) == 'day'){ document.location = 'day'; }

if(get_view(queryString) == 'week'){ document.location = 'week'; }

if(get_view(queryString) == 'month'){ document.location = 'month'; }

//alert(read_cookie('start_date'));

Posted by pj at 09:54 PM | Comments (0)

Get query string with JS

Using JavaScript to get the Query_String from a frameset (Page 2)

Posted by pj at 12:47 PM | Comments (0)

November 19, 2008

Getting highlighted text with Javascript

CodeToad - Javascript Get Selected Text.

Sometimes you want to know what

Posted by pj at 11:12 AM | Comments (0)

May 19, 2008

Using Range to get selected text in JS

Introduction to Range

Posted by pj at 01:04 PM | Comments (0)

December 13, 2007

JS URI parser

parseUri: Split URLs in JavaScript

Posted by pj at 12:34 PM | Comments (0)

October 04, 2007

JS for iterating through all document elements

JS to select the options in all the select-one document elements where the text (as opposed to the value) == the value passed:

function select_option_by_text(my_text){

	var els = document.getElementsByTagName('*');
	
	//var regex = new RegExp(my_text + '.');

	for(var i  = 0; i < els.length; i++){
	
		if(els[i].type == 'select-one'){
		
			var opts = els[i].options;
		
			for(var o  = 0; o < opts.length; o++){
			
				var label = opts[o].text;
				
				if(label == my_text){ opts[o].selected = true; }
		
				}
	
			}

		}

	
	}

Posted by pj at 09:51 AM | Comments (0)

March 22, 2007

Image crop and resize

Crop & Resize with JavaScript, PHP, and ImageMagick - Monday By Noon

Posted by pj at 06:41 PM | Comments (0)

December 14, 2006

Web App framework using XML and JS compiled into Flash

XML.com: Introducing OpenLaszlo

Posted by pj at 10:33 PM

November 07, 2006

Getting the checked radio button when there's only one

If I only have one radio button, JS decides it ain't a list and won't give you a length for it, so you have to trap for this:

limit = document.forms[1].customer_id.length;

if(limit){ for(i = 0; i < limit; i++){

        if(document.forms[1].customer_id[i].checked == true){

                this_id = document.forms[1].customer_id[i].value; }

                }

        }

else { this_id = document.forms[1].customer_id.value; }

window.opener.document.location='index.php?customer_id=' + this_id; 

window.close();

Posted by pj at 04:01 PM

May 04, 2006

QuirksMode Javascript Tutorials

http://www.quirksmode.org/js/

Posted by pj at 12:24 PM | Comments (0)

How to do hashes properly in JavaScript

JavaScript - Objects as associative arrays : http://www.quirksmode.org/js/associative.html

Posted by pj at 12:16 PM | Comments (0)

March 30, 2006

Handling cookies in JavaScript

JavaScript - Cookies

Posted by pj at 10:02 AM

March 09, 2006

JavaScript code for base64 encoding and decoding mailto URLs

//First things first, set up our array that we are going to use.
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + //all caps
"abcdefghijklmnopqrstuvwxyz" + //all lowercase
"0123456789+/="; // all numbers plus +/=
//Heres the encode function
function base64_encode(inp)
{
var out = ""; //This is the output
var chr1, chr2, chr3 = ""; //These are the 3 bytes to be encoded
var enc1, enc2, enc3, enc4 = ""; //These are the 4 encoded bytes
var i = 0; //Position counter
do { //Set up the loop here
chr1 = inp.charCodeAt(i++); //Grab the first byte
chr2 = inp.charCodeAt(i++); //Grab the second byte
chr3 = inp.charCodeAt(i++); //Grab the third byte
//Here is the actual base64 encode part.
//There really is only one way to do it.
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;

if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
//Lets spit out the 4 encoded bytes
out = out + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) +
keyStr.charAt(enc4);
// OK, now clean out the variables used.
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < inp.length); //And finish off the loop
//Now return the encoded values.
return out;
}
//Heres the decode function
function base64_decode(inp)
{
var out = ""; //This is the output
var chr1, chr2, chr3 = ""; //These are the 3 decoded bytes
var enc1, enc2, enc3, enc4 = ""; //These are the 4 bytes to be decoded
var i = 0; //Position counter
// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
var base64test = /[^A-Za-z0-9\+\/\=]/g;
if (base64test.exec(inp)) { //Do some error checking
alert("There were invalid base64 characters in the input text.\n" +
"Valid base64 characters are A-Z, a-z, 0-9, ?+?, ?/?, and ?=?\n" +
"Expect errors in decoding.");
}
inp = inp.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do { //Here’s the decode loop.
//Grab 4 bytes of encoded content.
enc1 = keyStr.indexOf(inp.charAt(i++));
enc2 = keyStr.indexOf(inp.charAt(i++));
enc3 = keyStr.indexOf(inp.charAt(i++));
enc4 = keyStr.indexOf(inp.charAt(i++));
//Heres the decode part. There’s really only one way to do it.
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
//Start to output decoded content
out = out + String.fromCharCode(chr1);
if (enc3 != 64) {
out = out + String.fromCharCode(chr2);
}
if (enc4 != 64) {
out = out + String.fromCharCode(chr3);
}
//now clean out the variables used
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < inp.length); //finish off the loop
//Now return the decoded values.
return out;
}
function encode(text){
    document.write(base64_encode(text));
    }
function decode(text){
    document.write(base64_decode(text));
    }
function decode_mailto(text){
    dato = new Date();
    email = base64_decode(text);
    email2 = email.replace('@',"@");
    email3 = email2.replace('.',".");
    //alert(email3);
    document.write('' + email3 + '');
    }
function decode_link_mailto(text){
    dato = new Date();
    email = base64_decode(text);
    email2 = email.replace('@',"@");
    email3 = email2.replace('.',".");
    //alert(email3);
    document.write('<a href="mailto:' + email +'">' + email3 + '</a>');
    }

Posted by pj at 10:22 AM

January 24, 2006

XML parsing in JavaScript

Started playing with parsing and extractin information from XML documents with JavaScript:

This XML is parsed by this page..

Posted by pj at 05:17 PM