97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
|
|
/*!
|
||
|
|
* jQuery UI Google Map 3.0-beta
|
||
|
|
* http://code.google.com/p/jquery-ui-map/
|
||
|
|
* Copyright (c) 2010 - 2011 Johan Säll Larsson
|
||
|
|
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
|
||
|
|
*
|
||
|
|
* Depends:
|
||
|
|
* jquery.ui.map.js
|
||
|
|
*/
|
||
|
|
( function($) {
|
||
|
|
|
||
|
|
$.extend($.ui.gmap.prototype, {
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Extracts microdata from the HTML by specified namespace
|
||
|
|
* @param ns:string
|
||
|
|
* @param callback:function(microdata:object, element:jQuery object, iterator:int)
|
||
|
|
*/
|
||
|
|
microdata: function(ns, callback) {
|
||
|
|
var self = this;
|
||
|
|
$('[itemtype="{0}"]'.replace('{0}', ns)).each(function(i) {
|
||
|
|
callback(self._traverse($(this), {'@type': self._resolveType($(this).attr('itemtype'))}), this, i);
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Traverse through all child nodes
|
||
|
|
* @param $el:jQuery Object
|
||
|
|
* @param obj:Object
|
||
|
|
*/
|
||
|
|
_traverse: function(node, obj) {
|
||
|
|
var self = this;
|
||
|
|
node.children().each(function() {
|
||
|
|
var $this = $(this), itemType = $this.attr('itemtype'), itemProp = $this.attr('itemProp');
|
||
|
|
// skip check for itemscope since we are only interested in typed items
|
||
|
|
if ( itemType != undefined && $this.children().length > 0 ) {
|
||
|
|
if ( !obj[itemProp] ) {
|
||
|
|
obj[itemProp] = [];
|
||
|
|
}
|
||
|
|
obj[itemProp].push({'@type': self._resolveType(itemType)});
|
||
|
|
self._traverse($this, obj[itemProp][obj[itemProp].length-1]);
|
||
|
|
} else if ( itemProp ) {
|
||
|
|
if ( obj[itemProp] ) {
|
||
|
|
// In case any property is duplicated
|
||
|
|
if ( typeof obj[itemProp] === 'string' ) {
|
||
|
|
var temp = obj[itemProp];
|
||
|
|
obj[itemProp] = [];
|
||
|
|
obj[itemProp].push(temp);
|
||
|
|
}
|
||
|
|
obj[itemProp].push(self._extract($this));
|
||
|
|
} else {
|
||
|
|
obj[itemProp] = self._extract($this);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
self._traverse($this, obj);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
return obj;
|
||
|
|
},
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Extract the proper value based on element attribute
|
||
|
|
* @param $el:jQuery Object
|
||
|
|
* @param className:string
|
||
|
|
*/
|
||
|
|
_extract: function($el) {
|
||
|
|
if ( $el.attr('src') ) {
|
||
|
|
return $el.attr('src');
|
||
|
|
} else if ( $el.attr('href') ) {
|
||
|
|
return $el.attr('href');
|
||
|
|
} else if ( $el.attr('content') ) {
|
||
|
|
return $el.attr('content');
|
||
|
|
} else if ( $el.attr('datetime') ) {
|
||
|
|
return $el.attr('datetime');
|
||
|
|
} else if ( $el.text() ) {
|
||
|
|
return $el.text();
|
||
|
|
}
|
||
|
|
return;
|
||
|
|
},
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Removes any url or prefix
|
||
|
|
* @param $el:jQuery Object
|
||
|
|
* @param className:string
|
||
|
|
*/
|
||
|
|
_resolveType: function(type) {
|
||
|
|
if ( type.indexOf('http') > -1 ) {
|
||
|
|
type = type.substr(type.lastIndexOf('/')+1).replace('?','').replace('#','');
|
||
|
|
} else if ( type.indexOf(':') > -1 ) {
|
||
|
|
type = type.split(':')[1];
|
||
|
|
}
|
||
|
|
return type;
|
||
|
|
}
|
||
|
|
|
||
|
|
});
|
||
|
|
|
||
|
|
} (jQuery) );
|