aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBolek Szewczyk2010-09-23 12:38:28 +0200
committerBolek Szewczyk2010-09-23 12:38:28 +0200
commitaf030b888e10c978dc68032758b18e36de7b4cf1 (patch)
tree686d0f2076524b4ce98714a9297de39e0af21d6d
parent29f995fc7897d0ee0e82c77153b1b318a993c99b (diff)
downloadangular.js-af030b888e10c978dc68032758b18e36de7b4cf1.tar.bz2
delete unused files (e.g. swfobject and underscore libs)
-rw-r--r--lib/swfobject/swfobject.js4
-rw-r--r--lib/underscore/underscore-min.js17
-rw-r--r--lib/underscore/underscore.js646
-rwxr-xr-xlib/underscore/update.sh7
-rw-r--r--lib/webtoolkit/webtoolkit.base64.js142
-rw-r--r--perf/blank.html33
-rw-r--r--perf/buzz.css89
-rw-r--r--perf/buzz.html89
-rw-r--r--perf/buzz_raw.html550
-rw-r--r--scenario/cross-site-post/People.json4
-rw-r--r--scenario/cross-site-post/index.html10
-rw-r--r--scenario/widgets-scenarios.old49
12 files changed, 0 insertions, 1640 deletions
diff --git a/lib/swfobject/swfobject.js b/lib/swfobject/swfobject.js
deleted file mode 100644
index 839d82f3..00000000
--- a/lib/swfobject/swfobject.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* SWFObject v2.2 beta1 <http://code.google.com/p/swfobject/>
- is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
-*/
-var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}(); \ No newline at end of file
diff --git a/lib/underscore/underscore-min.js b/lib/underscore/underscore-min.js
deleted file mode 100644
index 9492ae91..00000000
--- a/lib/underscore/underscore-min.js
+++ /dev/null
@@ -1,17 +0,0 @@
-(function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.8";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isNumber(a.length))for(var e=0,f=a.length;e<f;e++)c.call(d,a[e],
-e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bind(d,e),c);var f=
-b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.every))return a.every(c,
-d);var e=true;b.each(a,function(f,g,h){(e=e&&c.call(d,f,g,h))||b.breakLoop()});return e};b.any=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.some))return a.some(c,d);var e=false;b.each(a,function(f,g,h){if(e=c.call(d,f,g,h))b.breakLoop()});return e};b.include=function(a,c){if(a&&b.isFunction(a.indexOf))return b.indexOf(a,c)!=-1;var d=false;b.each(a,function(e){if(d=e===c)b.breakLoop()});return d};b.invoke=function(a,c){var d=b.rest(arguments,2);return b.map(a,function(e){return(c?e[c]:e).apply(e,
-d)})};b.pluck=function(a,c){return b.map(a,function(d){return d[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);var e={computed:-Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g>=e.computed&&(e={value:f,computed:g})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);var e={computed:Infinity};b.each(a,function(f,g,h){g=c?c.call(d,f,g,h):f;g<e.computed&&(e={value:f,computed:g})});return e.value};b.sortBy=function(a,c,d){return b.pluck(b.map(a,
-function(e,f,g){return{value:e,criteria:c.call(d,e,f,g)}}).sort(function(e,f){e=e.criteria;f=f.criteria;return e<f?-1:e>f?1:0}),"value")};b.sortedIndex=function(a,c,d){d=d||b.identity;for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?(e=g+1):(f=g)}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return a;if(b.isArguments(a))return k.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=function(a,c,d){return c&&!d?k.call(a,
-0,c):a[0]};b.rest=function(a,c,d){return k.call(a,b.isUndefined(c)||d?1:c)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.select(a,function(c){return!!c})};b.flatten=function(a){return b.reduce(a,[],function(c,d){if(b.isArray(d))return c.concat(b.flatten(d));c.push(d);return c})};b.without=function(a){var c=b.rest(arguments);return b.select(a,function(d){return!b.include(c,d)})};b.uniq=function(a,c){return b.reduce(a,[],function(d,e,f){if(0==f||(c===true?b.last(d)!=e:!b.include(d,
-e)))d.push(e);return d})};b.intersect=function(a){var c=b.rest(arguments);return b.select(b.uniq(a),function(d){return b.all(c,function(e){return b.indexOf(e,d)>=0})})};b.zip=function(){for(var a=b.toArray(arguments),c=b.max(b.pluck(a,"length")),d=new Array(c),e=0;e<c;e++)d[e]=b.pluck(a,String(e));return d};b.indexOf=function(a,c){if(a.indexOf)return a.indexOf(c);for(var d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,c){if(a.lastIndexOf)return a.lastIndexOf(c);for(var d=
-a.length;d--;)if(a[d]===c)return d;return-1};b.range=function(a,c,d){var e=b.toArray(arguments),f=e.length<=1;a=f?0:e[0];c=f?e[0]:e[1];d=e[2]||1;e=Math.ceil((c-a)/d);if(e<=0)return[];e=new Array(e);f=a;for(var g=0;;f+=d){if((d>0?f-c:c-f)>=0)return e;e[g++]=f}};b.bind=function(a,c){var d=b.rest(arguments,2);return function(){return a.apply(c||j,d.concat(b.toArray(arguments)))}};b.bindAll=function(a){var c=b.rest(arguments);if(c.length==0)c=b.functions(a);b.each(c,function(d){a[d]=b.bind(a[d],a)});
-return a};b.delay=function(a,c){var d=b.rest(arguments,2);return setTimeout(function(){return a.apply(a,d)},c)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(b.rest(arguments)))};b.wrap=function(a,c){return function(){var d=[a].concat(b.toArray(arguments));return c.apply(c,d)}};b.compose=function(){var a=b.toArray(arguments);return function(){for(var c=b.toArray(arguments),d=a.length-1;d>=0;d--)c=[a[d].apply(this,c)];return c[0]}};b.keys=function(a){if(b.isArray(a))return b.range(0,a.length);
-var c=[];for(var d in a)q.call(a,d)&&c.push(d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=function(a){return b.select(b.keys(a),function(c){return b.isFunction(a[c])}).sort()};b.extend=function(a,c){for(var d in c)a[d]=c[d];return a};b.clone=function(a){if(b.isArray(a))return a.slice(0);return b.extend({},a)};b.tap=function(a,c){c(a);return a};b.isEqual=function(a,c){if(a===c)return true;var d=typeof a;if(d!=typeof c)return false;if(a==c)return true;if(!a&&c||a&&!c)return false;
-if(a.isEqual)return a.isEqual(c);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return true;if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return false;if(a.length&&a.length!==c.length)return false;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return false;for(var f in a)if(!b.isEqual(a[f],c[f]))return false;return true};b.isEmpty=function(a){return b.keys(a).length==
-0};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=function(a){return!!(a&&a.concat&&a.unshift)};b.isArguments=function(a){return a&&b.isNumber(a.length)&&!a.concat&&!a.substr&&!a.apply&&!r.call(a,"length")};b.isFunction=function(a){return!!(a&&a.constructor&&a.call&&a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return a===+a||p.call(a)==="[object Number]"};b.isDate=function(a){return!!(a&&a.getTimezoneOffset&&a.setUTCFullYear)};
-b.isRegExp=function(a){return!!(a&&a.test&&a.exec&&(a.ignoreCase||a.ignoreCase===false))};b.isNaN=function(a){return b.isNumber(a)&&isNaN(a)};b.isNull=function(a){return a===null};b.isUndefined=function(a){return typeof a=="undefined"};b.noConflict=function(){j._=n;return this};b.identity=function(a){return a};b.breakLoop=function(){throw m;};var s=0;b.uniqueId=function(a){var c=s++;return a?a+c:c};b.templateSettings={start:"<%",end:"%>",interpolate:/<%=(.+?)%>/g};b.template=function(a,c){var d=b.templateSettings;
-a=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g," ").replace(new RegExp("'(?=[^"+d.end[0]+"]*"+d.end+")","g"),"\t").split("'").join("\\'").split("\t").join("'").replace(d.interpolate,"',$1,'").split(d.start).join("');").split(d.end).join("p.push('")+"');}return p.join('');");return c?a(c):a};b.forEach=b.each;b.foldl=b.inject=b.reduce;b.foldr=b.reduceRight;b.filter=b.select;b.every=b.all;b.some=b.any;b.head=b.first;b.tail=b.rest;
-b.methods=b.functions;var l=function(a,c){return c?b(a).chain():a};b.each(b.functions(b),function(a){var c=b[a];i.prototype[a]=function(){var d=b.toArray(arguments);o.call(d,this._wrapped);return l(c.apply(b,d),this._chain)}});b.each(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var c=Array.prototype[a];i.prototype[a]=function(){c.apply(this._wrapped,arguments);return l(this._wrapped,this._chain)}});b.each(["concat","join","slice"],function(a){var c=Array.prototype[a];i.prototype[a]=
-function(){return l(c.apply(this._wrapped,arguments),this._chain)}});i.prototype.chain=function(){this._chain=true;return this};i.prototype.value=function(){return this._wrapped}})();
diff --git a/lib/underscore/underscore.js b/lib/underscore/underscore.js
deleted file mode 100644
index faadaeb8..00000000
--- a/lib/underscore/underscore.js
+++ /dev/null
@@ -1,646 +0,0 @@
-// Underscore.js
-// (c) 2010 Jeremy Ashkenas, DocumentCloud Inc.
-// Underscore is freely distributable under the terms of the MIT license.
-// Portions of Underscore are inspired by or borrowed from Prototype.js,
-// Oliver Steele's Functional, and John Resig's Micro-Templating.
-// For all details and documentation:
-// http://documentcloud.github.com/underscore
-
-(function() {
-
- // ------------------------- Baseline setup ---------------------------------
-
- // Establish the root object, "window" in the browser, or "global" on the server.
- var root = this;
-
- // Save the previous value of the "_" variable.
- var previousUnderscore = root._;
-
- // If Underscore is called as a function, it returns a wrapped object that
- // can be used OO-style. This wrapper holds altered versions of all the
- // underscore functions. Wrapped objects may be chained.
- var wrapper = function(obj) { this._wrapped = obj; };
-
- // Establish the object that gets thrown to break out of a loop iteration.
- var breaker = typeof StopIteration !== 'undefined' ? StopIteration : '__break__';
-
- // Create a safe reference to the Underscore object for reference below.
- var _ = root._ = function(obj) { return new wrapper(obj); };
-
- // Export the Underscore object for CommonJS.
- if (typeof exports !== 'undefined') exports._ = _;
-
- // Create quick reference variables for speed access to core prototypes.
- var slice = Array.prototype.slice,
- unshift = Array.prototype.unshift,
- toString = Object.prototype.toString,
- hasOwnProperty = Object.prototype.hasOwnProperty,
- propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
-
- // Current version.
- _.VERSION = '0.5.8';
-
- // ------------------------ Collection Functions: ---------------------------
-
- // The cornerstone, an each implementation.
- // Handles objects implementing forEach, arrays, and raw objects.
- _.each = function(obj, iterator, context) {
- var index = 0;
- try {
- if (obj.forEach) {
- obj.forEach(iterator, context);
- } else if (_.isNumber(obj.length)) {
- for (var i=0, l=obj.length; i<l; i++) iterator.call(context, obj[i], i, obj);
- } else {
- var keys = _.keys(obj), l = keys.length;
- for (var i=0; i<l; i++) iterator.call(context, obj[keys[i]], keys[i], obj);
- }
- } catch(e) {
- if (e != breaker) throw e;
- }
- return obj;
- };
-
- // Return the results of applying the iterator to each element. Use JavaScript
- // 1.6's version of map, if possible.
- _.map = function(obj, iterator, context) {
- if (obj && _.isFunction(obj.map)) return obj.map(iterator, context);
- var results = [];
- _.each(obj, function(value, index, list) {
- results.push(iterator.call(context, value, index, list));
- });
- return results;
- };
-
- // Reduce builds up a single result from a list of values. Also known as
- // inject, or foldl. Uses JavaScript 1.8's version of reduce, if possible.
- _.reduce = function(obj, memo, iterator, context) {
- if (obj && _.isFunction(obj.reduce)) return obj.reduce(_.bind(iterator, context), memo);
- _.each(obj, function(value, index, list) {
- memo = iterator.call(context, memo, value, index, list);
- });
- return memo;
- };
-
- // The right-associative version of reduce, also known as foldr. Uses
- // JavaScript 1.8's version of reduceRight, if available.
- _.reduceRight = function(obj, memo, iterator, context) {
- if (obj && _.isFunction(obj.reduceRight)) return obj.reduceRight(_.bind(iterator, context), memo);
- var reversed = _.clone(_.toArray(obj)).reverse();
- _.each(reversed, function(value, index) {
- memo = iterator.call(context, memo, value, index, obj);
- });
- return memo;
- };
-
- // Return the first value which passes a truth test.
- _.detect = function(obj, iterator, context) {
- var result;
- _.each(obj, function(value, index, list) {
- if (iterator.call(context, value, index, list)) {
- result = value;
- _.breakLoop();
- }
- });
- return result;
- };
-
- // Return all the elements that pass a truth test. Use JavaScript 1.6's
- // filter(), if it exists.
- _.select = function(obj, iterator, context) {
- if (obj && _.isFunction(obj.filter)) return obj.filter(iterator, context);
- var results = [];
- _.each(obj, function(value, index, list) {
- iterator.call(context, value, index, list) && results.push(value);
- });
- return results;
- };
-
- // Return all the elements for which a truth test fails.
- _.reject = function(obj, iterator, context) {
- var results = [];
- _.each(obj, function(value, index, list) {
- !iterator.call(context, value, index, list) && results.push(value);
- });
- return results;
- };
-
- // Determine whether all of the elements match a truth test. Delegate to
- // JavaScript 1.6's every(), if it is present.
- _.all = function(obj, iterator, context) {
- iterator = iterator || _.identity;
- if (obj && _.isFunction(obj.every)) return obj.every(iterator, context);
- var result = true;
- _.each(obj, function(value, index, list) {
- if (!(result = result && iterator.call(context, value, index, list))) _.breakLoop();
- });
- return result;
- };
-
- // Determine if at least one element in the object matches a truth test. Use
- // JavaScript 1.6's some(), if it exists.
- _.any = function(obj, iterator, context) {
- iterator = iterator || _.identity;
- if (obj && _.isFunction(obj.some)) return obj.some(iterator, context);
- var result = false;
- _.each(obj, function(value, index, list) {
- if (result = iterator.call(context, value, index, list)) _.breakLoop();
- });
- return result;
- };
-
- // Determine if a given value is included in the array or object,
- // based on '==='.
- _.include = function(obj, target) {
- if (obj && _.isFunction(obj.indexOf)) return _.indexOf(obj, target) != -1;
- var found = false;
- _.each(obj, function(value) {
- if (found = value === target) _.breakLoop();
- });
- return found;
- };
-
- // Invoke a method with arguments on every item in a collection.
- _.invoke = function(obj, method) {
- var args = _.rest(arguments, 2);
- return _.map(obj, function(value) {
- return (method ? value[method] : value).apply(value, args);
- });
- };
-
- // Convenience version of a common use case of map: fetching a property.
- _.pluck = function(obj, key) {
- return _.map(obj, function(value){ return value[key]; });
- };
-
- // Return the maximum item or (item-based computation).
- _.max = function(obj, iterator, context) {
- if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
- var result = {computed : -Infinity};
- _.each(obj, function(value, index, list) {
- var computed = iterator ? iterator.call(context, value, index, list) : value;
- computed >= result.computed && (result = {value : value, computed : computed});
- });
- return result.value;
- };
-
- // Return the minimum element (or element-based computation).
- _.min = function(obj, iterator, context) {
- if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
- var result = {computed : Infinity};
- _.each(obj, function(value, index, list) {
- var computed = iterator ? iterator.call(context, value, index, list) : value;
- computed < result.computed && (result = {value : value, computed : computed});
- });
- return result.value;
- };
-
- // Sort the object's values by a criteria produced by an iterator.
- _.sortBy = function(obj, iterator, context) {
- return _.pluck(_.map(obj, function(value, index, list) {
- return {
- value : value,
- criteria : iterator.call(context, value, index, list)
- };
- }).sort(function(left, right) {
- var a = left.criteria, b = right.criteria;
- return a < b ? -1 : a > b ? 1 : 0;
- }), 'value');
- };
-
- // Use a comparator function to figure out at what index an object should
- // be inserted so as to maintain order. Uses binary search.
- _.sortedIndex = function(array, obj, iterator) {
- iterator = iterator || _.identity;
- var low = 0, high = array.length;
- while (low < high) {
- var mid = (low + high) >> 1;
- iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
- }
- return low;
- };
-
- // Convert anything iterable into a real, live array.
- _.toArray = function(iterable) {
- if (!iterable) return [];
- if (iterable.toArray) return iterable.toArray();
- if (_.isArray(iterable)) return iterable;
- if (_.isArguments(iterable)) return slice.call(iterable);
- return _.values(iterable);
- };
-
- // Return the number of elements in an object.
- _.size = function(obj) {
- return _.toArray(obj).length;
- };
-
- // -------------------------- Array Functions: ------------------------------
-
- // Get the first element of an array. Passing "n" will return the first N
- // values in the array. Aliased as "head". The "guard" check allows it to work
- // with _.map.
- _.first = function(array, n, guard) {
- return n && !guard ? slice.call(array, 0, n) : array[0];
- };
-
- // Returns everything but the first entry of the array. Aliased as "tail".
- // Especially useful on the arguments object. Passing an "index" will return
- // the rest of the values in the array from that index onward. The "guard"
- //check allows it to work with _.map.
- _.rest = function(array, index, guard) {
- return slice.call(array, _.isUndefined(index) || guard ? 1 : index);
- };
-
- // Get the last element of an array.
- _.last = function(array) {
- return array[array.length - 1];
- };
-
- // Trim out all falsy values from an array.
- _.compact = function(array) {
- return _.select(array, function(value){ return !!value; });
- };
-
- // Return a completely flattened version of an array.
- _.flatten = function(array) {
- return _.reduce(array, [], function(memo, value) {
- if (_.isArray(value)) return memo.concat(_.flatten(value));
- memo.push(value);
- return memo;
- });
- };
-
- // Return a version of the array that does not contain the specified value(s).
- _.without = function(array) {
- var values = _.rest(arguments);
- return _.select(array, function(value){ return !_.include(values, value); });
- };
-
- // Produce a duplicate-free version of the array. If the array has already
- // been sorted, you have the option of using a faster algorithm.
- _.uniq = function(array, isSorted) {
- return _.reduce(array, [], function(memo, el, i) {
- if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) memo.push(el);
- return memo;
- });
- };
-
- // Produce an array that contains every item shared between all the
- // passed-in arrays.
- _.intersect = function(array) {
- var rest = _.rest(arguments);
- return _.select(_.uniq(array), function(item) {
- return _.all(rest, function(other) {
- return _.indexOf(other, item) >= 0;
- });
- });
- };
-
- // Zip together multiple lists into a single array -- elements that share
- // an index go together.
- _.zip = function() {
- var args = _.toArray(arguments);
- var length = _.max(_.pluck(args, 'length'));
- var results = new Array(length);
- for (var i=0; i<length; i++) results[i] = _.pluck(args, String(i));
- return results;
- };
-
- // If the browser doesn't supply us with indexOf (I'm looking at you, MSIE),
- // we need this function. Return the position of the first occurence of an
- // item in an array, or -1 if the item is not included in the array.
- _.indexOf = function(array, item) {
- if (array.indexOf) return array.indexOf(item);
- for (var i=0, l=array.length; i<l; i++) if (array[i] === item) return i;
- return -1;
- };
-
- // Provide JavaScript 1.6's lastIndexOf, delegating to the native function,
- // if possible.
- _.lastIndexOf = function(array, item) {
- if (array.lastIndexOf) return array.lastIndexOf(item);
- var i = array.length;
- while (i--) if (array[i] === item) return i;
- return -1;
- };
-
- // Generate an integer Array containing an arithmetic progression. A port of
- // the native Python range() function. See:
- // http://docs.python.org/library/functions.html#range
- _.range = function(start, stop, step) {
- var a = _.toArray(arguments);
- var solo = a.length <= 1;
- var start = solo ? 0 : a[0], stop = solo ? a[0] : a[1], step = a[2] || 1;
- var len = Math.ceil((stop - start) / step);
- if (len <= 0) return [];
- var range = new Array(len);
- for (var i = start, idx = 0; true; i += step) {
- if ((step > 0 ? i - stop : stop - i) >= 0) return range;
- range[idx++] = i;
- }
- };
-
- // ----------------------- Function Functions: ------------------------------
-
- // Create a function bound to a given object (assigning 'this', and arguments,
- // optionally). Binding with arguments is also known as 'curry'.
- _.bind = function(func, obj) {
- var args = _.rest(arguments, 2);
- return function() {
- return func.apply(obj || root, args.concat(_.toArray(arguments)));
- };
- };
-
- // Bind all of an object's methods to that object. Useful for ensuring that
- // all callbacks defined on an object belong to it.
- _.bindAll = function(obj) {
- var funcs = _.rest(arguments);
- if (funcs.length == 0) funcs = _.functions(obj);
- _.each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
- return obj;
- };
-
- // Delays a function for the given number of milliseconds, and then calls
- // it with the arguments supplied.
- _.delay = function(func, wait) {
- var args = _.rest(arguments, 2);
- return setTimeout(function(){ return func.apply(func, args); }, wait);
- };
-
- // Defers a function, scheduling it to run after the current call stack has
- // cleared.
- _.defer = function(func) {
- return _.delay.apply(_, [func, 1].concat(_.rest(arguments)));
- };
-
- // Returns the first function passed as an argument to the second,
- // allowing you to adjust arguments, run code before and after, and
- // conditionally execute the original function.
- _.wrap = function(func, wrapper) {
- return function() {
- var args = [func].concat(_.toArray(arguments));
- return wrapper.apply(wrapper, args);
- };
- };
-
- // Returns a function that is the composition of a list of functions, each
- // consuming the return value of the function that follows.
- _.compose = function() {
- var funcs = _.toArray(arguments);
- return function() {
- var args = _.toArray(arguments);
- for (var i=funcs.length-1; i >= 0; i--) {
- args = [funcs[i].apply(this, args)];
- }
- return args[0];
- };
- };
-
- // ------------------------- Object Functions: ------------------------------
-
- // Retrieve the names of an object's properties.
- _.keys = function(obj) {
- if (_.isArray(obj)) return _.range(0, obj.length);
- var keys = [];
- for (var key in obj) if (hasOwnProperty.call(obj, key)) keys.push(key);
- return keys;
- };
-
- // Retrieve the values of an object's properties.
- _.values = function(obj) {
- return _.map(obj, _.identity);
- };
-
- // Return a sorted list of the function names available in Underscore.
- _.functions = function(obj) {
- return _.select(_.keys(obj), function(key){ return _.isFunction(obj[key]); }).sort();
- };
-
- // Extend a given object with all of the properties in a source object.
- _.extend = function(destination, source) {
- for (var property in source) destination[property] = source[property];
- return destination;
- };
-
- // Create a (shallow-cloned) duplicate of an object.
- _.clone = function(obj) {
- if (_.isArray(obj)) return obj.slice(0);
- return _.extend({}, obj);
- };
-
- // Invokes interceptor with the obj, and then returns obj.
- // The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain.
- _.tap = function(obj, interceptor) {
- interceptor(obj);
- return obj;
- };
-
- // Perform a deep comparison to check if two objects are equal.
- _.isEqual = function(a, b) {
- // Check object identity.
- if (a === b) return true;
- // Different types?
- var atype = typeof(a), btype = typeof(b);
- if (atype != btype) return false;
- // Basic equality test (watch out for coercions).
- if (a == b) return true;
- // One is falsy and the other truthy.
- if ((!a && b) || (a && !b)) return false;
- // One of them implements an isEqual()?
- if (a.isEqual) return a.isEqual(b);
- // Check dates' integer values.
- if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime();
- // Both are NaN?
- if (_.isNaN(a) && _.isNaN(b)) return true;
- // Compare regular expressions.
- if (_.isRegExp(a) && _.isRegExp(b))
- return a.source === b.source &&
- a.global === b.global &&
- a.ignoreCase === b.ignoreCase &&
- a.multiline === b.multiline;
- // If a is not an object by this point, we can't handle it.
- if (atype !== 'object') return false;
- // Check for different array lengths before comparing contents.
- if (a.length && (a.length !== b.length)) return false;
- // Nothing else worked, deep compare the contents.
- var aKeys = _.keys(a), bKeys = _.keys(b);
- // Different object sizes?
- if (aKeys.length != bKeys.length) return false;
- // Recursive comparison of contents.
- for (var key in a) if (!_.isEqual(a[key], b[key])) return false;
- return true;
- };
-
- // Is a given array or object empty?
- _.isEmpty = function(obj) {
- return _.keys(obj).length == 0;
- };
-
- // Is a given value a DOM element?
- _.isElement = function(obj) {
- return !!(obj && obj.nodeType == 1);
- };
-
- // Is a given value an array?
- _.isArray = function(obj) {
- return !!(obj && obj.concat && obj.unshift);
- };
-
- // Is a given variable an arguments object?
- _.isArguments = function(obj) {
- return obj && _.isNumber(obj.length) && !obj.concat && !obj.substr && !obj.apply && !propertyIsEnumerable.call(obj, 'length');
- };
-
- // Is a given value a function?
- _.isFunction = function(obj) {
- return !!(obj && obj.constructor && obj.call && obj.apply);
- };
-
- // Is a given value a string?
- _.isString = function(obj) {
- return !!(obj === '' || (obj && obj.charCodeAt && obj.substr));
- };
-
- // Is a given value a number?
- _.isNumber = function(obj) {
- return (obj === +obj) || (toString.call(obj) === '[object Number]');
- };
-
- // Is a given value a date?
- _.isDate = function(obj) {
- return !!(obj && obj.getTimezoneOffset && obj.setUTCFullYear);
- };
-
- // Is the given value a regular expression?
- _.isRegExp = function(obj) {
- return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false));
- };
-
- // Is the given value NaN -- this one is interesting. NaN != NaN, and
- // isNaN(undefined) == true, so we make sure it's a number first.
- _.isNaN = function(obj) {
- return _.isNumber(obj) && isNaN(obj);
- };
-
- // Is a given value equal to null?
- _.isNull = function(obj) {
- return obj === null;
- };
-
- // Is a given variable undefined?
- _.isUndefined = function(obj) {
- return typeof obj == 'undefined';
- };
-
- // -------------------------- Utility Functions: ----------------------------
-
- // Run Underscore.js in noConflict mode, returning the '_' variable to its
- // previous owner. Returns a reference to the Underscore object.
- _.noConflict = function() {
- root._ = previousUnderscore;
- return this;
- };
-
- // Keep the identity function around for default iterators.
- _.identity = function(value) {
- return value;
- };
-
- // Break out of the middle of an iteration.
- _.breakLoop = function() {
- throw breaker;
- };
-
- // Generate a unique integer id (unique within the entire client session).
- // Useful for temporary DOM ids.
- var idCounter = 0;
- _.uniqueId = function(prefix) {
- var id = idCounter++;
- return prefix ? prefix + id : id;
- };
-
- // By default, Underscore uses ERB-style template delimiters, change the
- // following template settings to use alternative delimiters.
- _.templateSettings = {
- start : '<%',
- end : '%>',
- interpolate : /<%=(.+?)%>/g
- };
-
- // JavaScript templating a-la ERB, pilfered from John Resig's
- // "Secrets of the JavaScript Ninja", page 83.
- // Single-quote fix from Rick Strahl's version.
- _.template = function(str, data) {
- var c = _.templateSettings;
- var fn = new Function('obj',
- 'var p=[],print=function(){p.push.apply(p,arguments);};' +
- 'with(obj){p.push(\'' +
- str.replace(/[\r\t\n]/g, " ")
- .replace(new RegExp("'(?=[^"+c.end[0]+"]*"+c.end+")","g"),"\t")
- .split("'").join("\\'")
- .split("\t").join("'")
- .replace(c.interpolate, "',$1,'")
- .split(c.start).join("');")
- .split(c.end).join("p.push('")
- + "');}return p.join('');");
- return data ? fn(data) : fn;
- };
-
- // ------------------------------- Aliases ----------------------------------
-
- _.forEach = _.each;
- _.foldl = _.inject = _.reduce;
- _.foldr = _.reduceRight;
- _.filter = _.select;
- _.every = _.all;
- _.some = _.any;
- _.head = _.first;
- _.tail = _.rest;
- _.methods = _.functions;
-
- // ------------------------ Setup the OOP Wrapper: --------------------------
-
- // Helper function to continue chaining intermediate results.
- var result = function(obj, chain) {
- return chain ? _(obj).chain() : obj;
- };
-
- // Add all of the Underscore functions to the wrapper object.
- _.each(_.functions(_), function(name) {
- var method = _[name];
- wrapper.prototype[name] = function() {
- var args = _.toArray(arguments);
- unshift.call(args, this._wrapped);
- return result(method.apply(_, args), this._chain);
- };
- });
-
- // Add all mutator Array functions to the wrapper.
- _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
- var method = Array.prototype[name];
- wrapper.prototype[name] = function() {
- method.apply(this._wrapped, arguments);
- return result(this._wrapped, this._chain);
- };
- });
-
- // Add all accessor Array functions to the wrapper.
- _.each(['concat', 'join', 'slice'], function(name) {
- var method = Array.prototype[name];
- wrapper.prototype[name] = function() {
- return result(method.apply(this._wrapped, arguments), this._chain);
- };
- });
-
- // Start chaining a wrapped Underscore object.
- wrapper.prototype.chain = function() {
- this._chain = true;
- return this;
- };
-
- // Extracts the result from a wrapped and chained object.
- wrapper.prototype.value = function() {
- return this._wrapped;
- };
-
-})();
diff --git a/lib/underscore/update.sh b/lib/underscore/update.sh
deleted file mode 100755
index 6e7bbe7d..00000000
--- a/lib/underscore/update.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-underscore=$(dirname $0)
-github='http://github.com/documentcloud/underscore/raw/master'
-
-wget $github/underscore-min.js -O $underscore/underscore-min.js
-wget $github/underscore.js -O $underscore/underscore.js
diff --git a/lib/webtoolkit/webtoolkit.base64.js b/lib/webtoolkit/webtoolkit.base64.js
deleted file mode 100644
index 07db4d5d..00000000
--- a/lib/webtoolkit/webtoolkit.base64.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
-*
-* Base64 encode / decode
-* http://www.webtoolkit.info/
-*
-**/
-
-var Base64 = {
-
- // private property
- _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",
-
- // public method for encoding
- encode : function (input) {
- var output = "";
- var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
- var i = 0;
-
- input = Base64._utf8_encode(input);
-
- while (i < input.length) {
-
- chr1 = input.charCodeAt(i++);
- chr2 = input.charCodeAt(i++);
- chr3 = input.charCodeAt(i++);
-
- 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;
- }
-
- output = output +
- this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
- this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
-
- }
-
- return output;
- },
-
- // public method for decoding
- decode : function (input) {
- var output = "";
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
-
- while (i < input.length) {
-
- enc1 = this._keyStr.indexOf(input.charAt(i++));
- enc2 = this._keyStr.indexOf(input.charAt(i++));
- enc3 = this._keyStr.indexOf(input.charAt(i++));
- enc4 = this._keyStr.indexOf(input.charAt(i++));
-
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
-
- output = output + String.fromCharCode(chr1);
-
- if (enc3 != 64) {
- output = output + String.fromCharCode(chr2);
- }
- if (enc4 != 64) {
- output = output + String.fromCharCode(chr3);
- }
-
- }
-
- output = Base64._utf8_decode(output);
-
- return output;
-
- },
-
- // private method for UTF-8 encoding
- _utf8_encode : function (string) {
- string = string.replace(/\r\n/g,"\n");
- var utftext = "";
-
- for (var n = 0; n < string.length; n++) {
-
- var c = string.charCodeAt(n);
-
- if (c < 128) {
- utftext += String.fromCharCode(c);
- }
- else if((c > 127) && (c < 2048)) {
- utftext += String.fromCharCode((c >> 6) | 192);
- utftext += String.fromCharCode((c & 63) | 128);
- }
- else {
- utftext += String.fromCharCode((c >> 12) | 224);
- utftext += String.fromCharCode(((c >> 6) & 63) | 128);
- utftext += String.fromCharCode((c & 63) | 128);
- }
-
- }
-
- return utftext;
- },
-
- // private method for UTF-8 decoding
- _utf8_decode : function (utftext) {
- var string = "";
- var i = 0;
- var c = c1 = c2 = 0;
-
- while ( i < utftext.length ) {
-
- c = utftext.charCodeAt(i);
-
- if (c < 128) {
- string += String.fromCharCode(c);
- i++;
- }
- else if((c > 191) && (c < 224)) {
- c2 = utftext.charCodeAt(i+1);
- string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
- i += 2;
- }
- else {
- c2 = utftext.charCodeAt(i+1);
- c3 = utftext.charCodeAt(i+2);
- string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
- i += 3;
- }
-
- }
-
- return string;
- }
-
-}; \ No newline at end of file
diff --git a/perf/blank.html b/perf/blank.html
deleted file mode 100644
index f38c368b..00000000
--- a/perf/blank.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <script type="text/javascript">
- function time(timerName){
- var started = new Date().getTime();
- return {
- name: timerName,
- started: started,
- lastLap: {duration:0, name:'BEGIN'},
- lap: function(lapName){
- var duration = (this.lapped = new Date().getTime()) - this.started;
- var lastName = this.lastLap.name;
- this.lastLap = {duration:duration-this.lastLap.duration, name:lapName};
- console.log(timerName, lapName, 'TOTAL: ' + duration + ' ms.', 'since ' + lastName + ': ' + this.lastLap.duration + ' ms.');
- return duration;
- }
- };
- }
- window.browser = time('BROWSER');
- </script>
- <script type="text/javascript" src="../angular-minified.js" ng:autobind ng:css="css/angular.css"></script>
- <script type="text/javascript">
- window.browser.lap('parse');
-
- </script>
- </head>
- <body ng:init="$window.$scope = this; $window.browser.lap('ready')" style="display:none;" ng:show="true">
- <a href="startup.html">reload</a>
- <hr/>
- READY
- </body>
- </html>
diff --git a/perf/buzz.css b/perf/buzz.css
deleted file mode 100644
index 5fd5763d..00000000
--- a/perf/buzz.css
+++ /dev/null
@@ -1,89 +0,0 @@
-body {
- background: -webkit-gradient(linear, left top, left 100, from(#bbb), to(#fff));
- background-repeat: no-repeat;
- margin: 0px;
- font-family: sans-serif;
- font-size: 12px;
-}
-
-body > div {
- border-top: 1px solid white;
- border-bottom: 1px solid black;
- text-align: center;
- background: -webkit-gradient(linear, left top, left bottom, from(#CCC), to(#888));
- -webkit-background-origin: padding; -webkit-background-clip: content;
-}
-body > div button {
- margin: 5px;
-}
-
-body > div span:FIRST-CHILD {
- float: left;
- font-family: monospace;
- font-size: 1.5em;
- color: black;
- padding: 2px 5px;
-}
-
-body > div span:last-child {
- float: right;
-}
-
-ul {
- list-style: none;
- padding: 10px;
- margin: 0;
-}
-
-body > ul > li {
- border: 1px solid black;
- margin: 15px 5px;
- padding: 0;
- -webkit-box-shadow: 5px 5px 5px #888;
-}
-
-body > ul > li > h1 {
- margin: 0;
- background: -webkit-gradient(linear, left top, left bottom, from(#ddd), to(#999));
- font-size: 13px;
- border-bottom: 1px solid black;
-}
-
-h1 > img,
-li > img {
- max-height: 30px;
- max-width: 30px;
- vertical-align: middle;
- padding: 3px;
-}
-
-a > img {
- margin-right: 5px;
- margin-top: 5px;
-}
-
-body > ul > li > h1 > a:last-child {
- float: right;
- margin: 10px;
-}
-
-body > ul > li > div {
- background-color: white;
- background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ddd));
- margin: 0;
- padding: 10px;
-}
-
-body > ul > li ul {
- margin: 0;
- padding: 0;
- margin-left: 5px;
- border-left: 5px solid lightgray;
-}
-
-body > ul > li ul > li {
- margin: 0;
- padding: 10px;
- background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ddd));
-}
-
diff --git a/perf/buzz.html b/perf/buzz.html
deleted file mode 100644
index f2e95c85..00000000
--- a/perf/buzz.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <link rel="stylesheet" type="text/css" href="buzz.css"/>
- <script type="text/javascript">
- var log = [];
- function time(timerName){
- var started = new Date().getTime();
- return {
- name: timerName,
- started: started,
- lapped: started,
- lastLap: {duration:0, name:'BEGIN', time:started},
- lap: function(lapName){
- var totalDuration = (this.lapped = new Date().getTime()) - this.started;
- var lapDuration = this.lapped - this.lastLap.time;
- var lastName = this.lastLap.name;
- this.lastLap = {duration:lapDuration, name:lapName, time:this.lapped};
- log.push(timerName + ' ' + lapName + ': ' + this.lastLap.duration + ' ms. (' + totalDuration + ' ms.)');
- }
- };
- }
- window.browser = time('boot:');
- </script>
- <script type="text/javascript" src="../angular-minified.js" ng:autobind ng:css="css/angular.css"></script>
- <script type="text/javascript">
- window.browser.lap('parse <angular/>');
- function onInit(scope) {
- window.browser.lap('compile DOM');
- window.setTimeout(function(){
- window.browser.lap('DOM render');
- scope.$eval();
- }, 1);
- }
- </script>
- <script>
- // 60kb JSON
- window.googlebuzz = {"data":{"kind":"buzz#activityFeed","links":{"next":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self?alt\u003djson&max-results\u003d20&c\u003dCJPT45zJwKECSL72gt20sqMC"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self?alt\u003djson","type":"application/json"}]},"title":"Google Buzz Self Feed for Google Buzz Team","updated":"2010-08-10T05:08:40.954Z","id":"tag:google.com,2010:buzz-feed:self:posted:111062888259659218284","items":[{"kind":"buzz#activity","title":"AutoShare from YouTube to Buzz If you use YouTube a lot, you may be familiar with AutoShare (see ...","published":"2010-07-01T01:00:37.000Z","updated":"2010-07-01T01:00:38.218Z","id":"tag:google.com,2010:buzz:z132tjxxinrhyz4pz04cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z132tjxxinrhyz4pz04cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":91}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/YyNSUbbuV1N","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z132tjxxinrhyz4pz04cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":26,"updated":"2010-08-10T05:08:40.954Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z132tjxxinrhyz4pz04cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eAutoShare from YouTube to Buzz\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eIf you use YouTube a lot, you may be familiar with AutoShare (see \u003ca href\u003d\"http://help.youtube.com/support/youtube/bin/answer.py?hl\u003den&amp;answer\u003d157215\" \u003ehttp://help.youtube.com/support/youtube/bin/answer.py?hl\u003den&amp;answer\u003d157215\u003c/a\u003e) which you can use to automatically share your favorites, likes, uploads, or comments on videos to Facebook. Twitter, and Google Reader. Now you can choose to automatically share from YouTube to Google Buzz as well.\r\u003cbr /\u003e\r\u003cbr /\u003eYou can still keep YouTube as a connected site in Buzz if you hooked it up previously, but that only automatically posts your uploads for now.","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/YyNSUbbuV1N","type":"text/html"}]},"attachments":[{"type":"article","title":"AutoShare : Learn More - YouTube Help","links":{"alternate":[{"href":"http://help.youtube.com/support/youtube/bin/answer.py?hl\u003den&answer\u003d157215","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Google Buzz API talks and hackathons Come join us to talk about how you can build on Google Buzz ...","published":"2010-07-02T02:56:27.000Z","updated":"2010-07-02T02:56:28.031Z","id":"tag:google.com,2010:buzz:z13xe5wwtnyqelxkw22fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13xe5wwtnyqelxkw22fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":96}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/5qbwA75RRr1","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13xe5wwtnyqelxkw22fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":62,"updated":"2010-08-08T10:48:37.665Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13xe5wwtnyqelxkw22fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eGoogle Buzz API talks and hackathons\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eCome join us to talk about how you can build on Google Buzz -- check out the list below to see if weÕll be in a city near you. We&#39;ll cover several open standards (Activity Streams, OAuth, PubSubHubbub, and Salmon) and go in depth with the Google Buzz API and libraries. In some locations weÕll have extended time for hacking with Googlers on hand to answer your questions.\r\u003cbr /\u003e\r\u003cbr /\u003eHereÕs the schedule (weÕll add links for the Cambridge, Kiev, and Moscow sessions soon):\r\u003cbr /\u003e\r\u003cbr /\u003eSydney, Australia - July 1: \u003ca href\u003d\"http://code.google.com/events/devfests/2010/sydney4.html\" \u003ehttp://code.google.com/events/devfests/2010/sydney4.html\u003c/a\u003e\r\u003cbr /\u003eManila, Philippines - July 6: \u003ca href\u003d\"http://code.google.com/events/devfests/2010/asia1.html\" \u003ehttp://code.google.com/events/devfests/2010/asia1.html\u003c/a\u003e\r\u003cbr /\u003eSingapore - July 9: \u003ca href\u003d\"http://code.google.com/events/devfests/2010/asia2.html\" \u003ehttp://code.google.com/events/devfests/2010/asia2.html\u003c/a\u003e\r\u003cbr /\u003eKuala Lumpur, Malaysia - July 16: \u003ca href\u003d\"http://code.google.com/events/devfests/2010/asia3.html\" \u003ehttp://code.google.com/events/devfests/2010/asia3.html\u003c/a\u003e\r\u003cbr /\u003eNew York, NY, USA - July 21: \u003ca href\u003d\"http://www.meetup.com/NYC-GTUG/calendar/13899003/\" \u003ehttp://www.meetup.com/NYC-GTUG/calendar/13899003/\u003c/a\u003e\r\u003cbr /\u003eCambridge, MA, USA - August 7\r\u003cbr /\u003eStockholm, Sweden - July 12: \u003ca href\u003d\"http://sites.google.com/site/stockholmgtug/extra-gtug-mte-juli\" \u003eextra gtug mte juli\u003c/a\u003e\r\u003cbr /\u003eBerlin, Germany - July 15: \u003ca href\u003d\"http://www.berlin-gtug.org/2010/06/july-2010-berlin-gtug-meeting.html\" \u003ehttp://www.berlin-gtug.org/2010/06/july-2010-berlin-gtug-meeting.html\u003c/a\u003e\r\u003cbr /\u003eKiev, Ukraine - July 17\r\u003cbr /\u003eMoscow, Russia - July 19\r\u003cbr /\u003eLisbon, Portugal - July 28th: \u003ca href\u003d\"https://spreadsheets.google.com/a/google.com/viewform?formkey\u003ddFd5aFo3WVVUX2xaeUZOVDJJVlo1ekE6MQ\" \u003ehttps://spreadsheets.google.com/a/google.com/viewform?formkey\u003ddFd5aFo3WVVUX2xaeUZOVDJJVlo1ekE6MQ\u003c/a\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/5qbwA75RRr1","type":"text/html"}]}},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"When Google Buzz launched, it was only available for devices running Android 2.0+ and iPhone. Not...","published":"2010-05-27T19:17:26.000Z","updated":"2010-05-27T19:17:27.039Z","id":"tag:google.com,2010:buzz:z12gybujdnrxufdwu04cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12gybujdnrxufdwu04cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":199}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/SoyLF1PRQhn","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12gybujdnrxufdwu04cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":87,"updated":"2010-08-04T22:16:13.927Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12gybujdnrxufdwu04cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"When Google Buzz launched, it was only available for devices running Android 2.0+ and iPhone. Not any more! Today weÕre a releasing an XHTML version of the Buzz website which can be accessed from many other mobile devices, including those running Android pre-2.0, Blackberry, Nokia S60, and Windows Mobile.\r\u003cbr /\u003e\r\u003cbr /\u003eRead more at \u003ca href\u003d\"http://googlemobile.blogspot.com/2010/05/google-buzz-for-mobile-now-available-on.html\" \u003ehttp://googlemobile.blogspot.com/2010/05/google-buzz-for-mobile-now-available-on.html\u003c/a\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/SoyLF1PRQhn","type":"text/html"}]},"attachments":[{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F1.bp.blogspot.com%2F_SS18DlBSIQ8%2FS_6tBXefeGI%2FAAAAAAAAGr4%2FRXnIdiSgYPI%2Fs400%2Fbuzz%2Bpic%2B1.jpg","type":"image/jpeg"}],"enclosure":[{"href":"http://1.bp.blogspot.com/_SS18DlBSIQ8/S_6tBXefeGI/AAAAAAAAGr4/RXnIdiSgYPI/s400/buzz+pic+1.jpg","type":"image/jpeg"}]}},{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F2.bp.blogspot.com%2F_SS18DlBSIQ8%2FS_6t8CKFnSI%2FAAAAAAAAGsA%2FU6qdmKc_6G0%2Fs400%2Fbuzz%2Bpic%2B2.jpg","type":"image/jpeg"}],"enclosure":[{"href":"http://2.bp.blogspot.com/_SS18DlBSIQ8/S_6t8CKFnSI/AAAAAAAAGsA/U6qdmKc_6G0/s400/buzz+pic+2.jpg","type":"image/jpeg"}]}},{"type":"article","title":"Google Buzz for mobile now available on more devices - Official Google Mobile Blog","links":{"alternate":[{"href":"http://googlemobile.blogspot.com/2010/05/google-buzz-for-mobile-now-available-on.html","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"New! Comments and likes tabs on your profile Many of you have asked for an easy way to refer back...","published":"2010-07-14T23:45:20.000Z","updated":"2010-07-14T23:45:21.182Z","id":"tag:google.com,2010:buzz:z12kcpb5uknazjs1022fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12kcpb5uknazjs1022fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":326}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/6UndwSjNpoH","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12kcpb5uknazjs1022fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":96,"updated":"2010-07-30T18:32:33.815Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12kcpb5uknazjs1022fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eNew! Comments and likes tabs on your profile\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eMany of you have asked for an easy way to refer back to the posts you&#39;ve commented on and/or liked. Some of you have also requested a way to see what other people have commented on or liked -- a great way to discover posts that may interest you too. \r\u003cbr /\u003e\r\u003cbr /\u003eStarting today, you&#39;ll see new tabs on your profile that show all the posts you&#39;ve commented on or liked. By default, these tabs are only visible to you. If you want to share your comments and likes tabs, you can choose to make them publicly visible to others from the Buzz tab under Settings. This won&#39;t change who can see each post; private posts stay private.","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/6UndwSjNpoH","type":"text/html"}]},"attachments":[{"type":"photo","content":"comments&likes.png","links":{"alternate":[{"href":"http://picasaweb.google.com/111062888259659218284/July142010?authkey\u003dGv1sRgCKbByv6M3ougAw#5493911882110402178","type":"text/html"}],"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttps%3A%2F%2Flh6.googleusercontent.com%2F_f0qVMWvWkZQ%2FTD5Lv7B8_oI%2FAAAAAAAAACk%2Fdc1Ndqi_gfQ%2Fs288%2Fcomments%2526likes.png","type":"image/jpeg"},{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttps%3A%2F%2Flh6.googleusercontent.com%2F_f0qVMWvWkZQ%2FTD5Lv7B8_oI%2FAAAAAAAAACk%2Fdc1Ndqi_gfQ%2Fs288%2Fcomments%2526likes.png","type":"image/jpeg"}],"enclosure":[{"href":"https://lh6.googleusercontent.com/_f0qVMWvWkZQ/TD5Lv7B8_oI/AAAAAAAAACk/dc1Ndqi_gfQ/comments%26likes.png","type":"image/jpeg","height":90,"width":380}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Fighting follower spam Any web service that involves following has to fight \"follower spam\" -- ac...","published":"2010-02-24T03:53:53.000Z","updated":"2010-02-24T03:53:54.067Z","id":"tag:google.com,2010:buzz:z12szhgawszuxjyd222fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12szhgawszuxjyd222fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":171}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/6r4ntDbUSet","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12szhgawszuxjyd222fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":187,"updated":"2010-07-23T15:23:13.585Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12szhgawszuxjyd222fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eFighting follower spam\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eAny web service that involves following has to fight &quot;follower spam&quot; -- accounts that follow lots and lots of people in the hopes that some of them will click through to their profiles and a few might even end up buying whatever it is they&#39;re selling. Buzz is no different. If you&#39;re getting following notices from Buzz users with names that sound suspiciously like spammy marketing scams, the chances are that&#39;s exactly what they are -- and we&#39;re after them. Just like we work hard to protect your Gmail accounts from email spam, we&#39;re working to protect Buzz from follower spam. We look at lots of factors when determining whether to disable an account for follower spam including the number of people it attempts to follow and whether people are blocking it. And just as we&#39;re constantly tweaking the algorithms which detect Gmail spam, the same goes for follower spam in Buzz.\r\u003cbr /\u003e\r\u003cbr /\u003eIf you&#39;re followed by any suspicious looking users, you can report them by clicking the &quot;Report this profile&quot; link on their profile. If they aren&#39;t really suspicious but you just don&#39;t want them following you, you can always block them.","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/6r4ntDbUSet","type":"text/html"}]}},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"New Google Buzz API features We just launched the Google Buzz firehose (our top developer feature...","published":"2010-07-19T22:01:39.000Z","updated":"2010-07-19T22:01:40.673Z","id":"tag:google.com,2010:buzz:z13mvpwqktjyf11be04cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13mvpwqktjyf11be04cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":155}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/g9Rfei3F6C4","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13mvpwqktjyf11be04cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":31,"updated":"2010-07-22T05:38:04.392Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13mvpwqktjyf11be04cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eNew Google Buzz API features\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eWe just launched the Google Buzz firehose (our top developer feature request) which makes all public activities available as they are published, along with new feeds including comments, likes, and shared counts. \r\u003cbr /\u003e\r\u003cbr /\u003eRead more on the Code Blog: \r\u003cbr /\u003e\u003ca href\u003d\"http://googlecode.blogspot.com/2010/07/new-google-buzz-api-features-including.html\" \u003ehttp://googlecode.blogspot.com/2010/07/new-google-buzz-api-features-including.html\u003c/a\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/g9Rfei3F6C4","type":"text/html"}]},"attachments":[{"type":"article","title":"Google Code Blog: New Google Buzz API features, including a hose of fire","content":"The official Google developer blog. The latest news on Google APIs and developer tools.","links":{"alternate":[{"href":"http://googlecode.blogspot.com/2010/07/new-google-buzz-api-features-including.html","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Two quick Buzz for mobile updates Yesterday we rolled out a new design for rendering location att...","published":"2010-05-30T05:14:00.000Z","updated":"2010-05-30T05:14:01.345Z","id":"tag:google.com,2010:buzz:z132yb4zzlnlgn24h04cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z132yb4zzlnlgn24h04cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":105}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/QbXYavQL7ja","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z132yb4zzlnlgn24h04cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":45,"updated":"2010-07-19T14:39:55.321Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z132yb4zzlnlgn24h04cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eTwo quick Buzz for mobile updates\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eYesterday we rolled out a new design for rendering location attached to posts, including a better place icon, a bigger map, and an easy way to get directions from the post itself.\r\u003cbr /\u003e\r\u003cbr /\u003eIn addition, you can now disable comments from Buzz for mobile. (Look for this option under &quot;More Actions&quot;).","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/QbXYavQL7ja","type":"text/html"}]},"attachments":[{"type":"photo","content":"buzz_maps_image.jpg","links":{"alternate":[{"href":"http://picasaweb.google.com/111062888259659218284/May292010?authkey\u003dGv1sRgCJOL7KHU942H6gE#5476926467976674802","type":"text/html"}],"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FTAHzmsivPfI%2FAAAAAAAAACM%2FvdqRNwY1Z6Y%2Fs288%2Fbuzz_maps_image.jpg","type":"image/jpeg"},{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FTAHzmsivPfI%2FAAAAAAAAACM%2FvdqRNwY1Z6Y%2Fs288%2Fbuzz_maps_image.jpg","type":"image/jpeg"}],"enclosure":[{"href":"http://lh3.ggpht.com/_f0qVMWvWkZQ/TAHzmsivPfI/AAAAAAAAACM/vdqRNwY1Z6Y/buzz_maps_image.jpg","type":"image/jpeg","height":800,"width":480}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Read about the updates we're making to the Google Buzz API (http://googlecode.blogspot.com/2010/0...","published":"2010-05-19T20:48:14.000Z","updated":"2010-05-19T20:48:14.902Z","id":"tag:google.com,2010:buzz:z12gehl4pqamhv1cc22fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12gehl4pqamhv1cc22fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":299}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/2M3ZjDfQoMZ","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12gehl4pqamhv1cc22fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":89,"updated":"2010-07-18T21:29:59.234Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12gehl4pqamhv1cc22fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"Read about the updates we&#39;re making to the Google Buzz API (\u003ca href\u003d\"http://googlecode.blogspot.com/2010/05/introducing-google-buzz-api.html\" \u003ehttp://googlecode.blogspot.com/2010/05/introducing-google-buzz-api.html\u003c/a\u003e) and check out some of the initial apps developers have created so far (\u003ca href\u003d\"http://www.google.com/buzz/apps\" \u003ehttp://www.google.com/buzz/apps\u003c/a\u003e)!","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/2M3ZjDfQoMZ","type":"text/html"}]},"attachments":[{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F4.bp.blogspot.com%2F_WryZsbWA8Vs%2FS_NyVvGdpQI%2FAAAAAAAAAGY%2F6Z3vfWpVSoo%2Fs1600%2FBuzzAPI-logosall.png","type":"image/jpeg"}],"enclosure":[{"href":"http://4.bp.blogspot.com/_WryZsbWA8Vs/S_NyVvGdpQI/AAAAAAAAAGY/6Z3vfWpVSoo/s1600/BuzzAPI-logosall.png","type":"image/jpeg"}]}},{"type":"article","title":"Google Code Blog: Introducing the Google Buzz API","content":"The official Google developer blog. The latest news on Google APIs and developer tools.","links":{"alternate":[{"href":"http://googlecode.blogspot.com/2010/05/introducing-google-buzz-api.html","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"If you started using Google Buzz before we changed the start-up experience from auto-following to...","published":"2010-04-05T22:44:41.000Z","updated":"2010-04-05T22:44:41.835Z","id":"tag:google.com,2010:buzz:z13ac1fi2nycghz3h22fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13ac1fi2nycghz3h22fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":88}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/KPspNYN1ZLF","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13ac1fi2nycghz3h22fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":61,"updated":"2010-07-18T11:42:47.231Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13ac1fi2nycghz3h22fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"If you started using Google Buzz before we changed the start-up experience from auto-following to suggestions for people to follow, we want to help you ensure that Buzz is set up the way you want. So the next time you click into the Buzz tab you&#39;ll see a page asking you to confirm your Buzz settings -- you can review and edit your settings from here, or at anytime from the Buzz tab of Gmail Settings. \r\u003cbr /\u003e\r\u003cbr /\u003eFor more info, check out this post on the Gmail blog: \u003ca href\u003d\"http://gmailblog.blogspot.com/2010/04/confirm-your-buzz-settings.html\" \u003ehttp://gmailblog.blogspot.com/2010/04/confirm-your-buzz-settings.html\u003c/a\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/KPspNYN1ZLF","type":"text/html"}]},"attachments":[{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F1.bp.blogspot.com%2F_JE4qNpFW6Yk%2FS7ZUkxT141I%2FAAAAAAAAAjA%2FgEdS8783dFE%2FbuzzConfirmSetup.png","type":"image/jpeg"}],"enclosure":[{"href":"http://1.bp.blogspot.com/_JE4qNpFW6Yk/S7ZUkxT141I/AAAAAAAAAjA/gEdS8783dFE/buzzConfirmSetup.png","type":"image/jpeg"}]}},{"type":"article","title":"Official Gmail Blog: Confirm your Buzz settings","links":{"alternate":[{"href":"http://gmailblog.blogspot.com/2010/04/confirm-your-buzz-settings.html","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Hey all -- this is the account for the Google Buzz team. We'll post all sorts of updates here abo...","published":"2010-02-20T03:16:48.000Z","updated":"2010-02-20T03:16:49.134Z","id":"tag:google.com,2010:buzz:z12pi5ppytr0gtxgj04cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12pi5ppytr0gtxgj04cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":335}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/R5C8pdDfLvD","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12pi5ppytr0gtxgj04cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":495,"updated":"2010-07-15T15:23:34.937Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12pi5ppytr0gtxgj04cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"Hey all -- this is the account for the Google Buzz team. We&#39;ll post all sorts of updates here about what we&#39;re working on. Feel free to give us feedback and ideas on Google Buzz!\r\u003cbr /\u003e\r\u003cbr /\u003eHere&#39;s a photo of our launch &quot;war room&quot; from last week. :-)","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/R5C8pdDfLvD","type":"text/html"}]},"attachments":[{"type":"photo","content":"buzzLaunchRoom.jpg","links":{"alternate":[{"href":"http://picasaweb.google.com/111062888259659218284/20100219?authkey\u003dGv1sRgCPzGzaipscnZqQE#5440159301699698322","type":"text/html"}],"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FS39UD8tY_pI%2FAAAAAAAAAAM%2FCTneAri7FGY%2Fs288%2FbuzzLaunchRoom.jpg","type":"image/jpeg"},{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FS39UD8tY_pI%2FAAAAAAAAAAM%2FCTneAri7FGY%2Fs288%2FbuzzLaunchRoom.jpg","type":"image/jpeg"}],"enclosure":[{"href":"http://lh3.ggpht.com/_f0qVMWvWkZQ/S39UD8tY_pI/AAAAAAAAAAM/CTneAri7FGY/buzzLaunchRoom.jpg","type":"image/jpeg","height":682,"width":1024}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"The Buzz layer in Google Maps for mobile is now available on BlackBerry phones: http://googlemobi...","published":"2010-04-07T20:31:27.000Z","updated":"2010-04-07T20:31:27.548Z","id":"tag:google.com,2010:buzz:z12dij1z2m2exdr3e22fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12dij1z2m2exdr3e22fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":76}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/JrMcYEeKdJh","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12dij1z2m2exdr3e22fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":52,"updated":"2010-07-14T11:12:23.216Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12dij1z2m2exdr3e22fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"The Buzz layer in Google Maps for mobile is now available on BlackBerry phones:\r\u003cbr /\u003e\u003ca href\u003d\"http://googlemobile.blogspot.com/2010/04/google-maps-40-for-blackberry-adds.html\" \u003ehttp://googlemobile.blogspot.com/2010/04/google-maps-40-for-blackberry-adds.html\u003c/a\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/JrMcYEeKdJh","type":"text/html"}]},"attachments":[{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F1.bp.blogspot.com%2F_16aYP83FzVs%2FS7zAh47PpZI%2FAAAAAAAAACU%2FUXotejzuskY%2Fs320%2Fbuzz3_cropped.png","type":"image/jpeg"}],"enclosure":[{"href":"http://1.bp.blogspot.com/_16aYP83FzVs/S7zAh47PpZI/AAAAAAAAACU/UXotejzuskY/s320/buzz3_cropped.png","type":"image/jpeg"}]}},{"type":"article","title":"Official Google Mobile Blog: Google Maps 4.0 for BlackBerry adds Search by Voice, Google Buzz, Starring, Labs, and More","links":{"alternate":[{"href":"http://googlemobile.blogspot.com/2010/04/google-maps-40-for-blackberry-adds.html","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"New! View entire photo albums in Buzz Tired of only being able to view a handful of photos from a...","published":"2010-04-30T22:31:10.000Z","updated":"2010-04-30T22:31:11.329Z","id":"tag:google.com,2010:buzz:z13hspshcvuug3zlt22fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13hspshcvuug3zlt22fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":266}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/AhZUBLUsFcN","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13hspshcvuug3zlt22fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":81,"updated":"2010-07-14T17:23:11.990Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13hspshcvuug3zlt22fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eNew! View entire photo albums in Buzz\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eTired of only being able to view a handful of photos from a given Flickr or Picasa album in Buzz&#39;s photo viewer? Now you can view the entire thing. \r\u003cbr /\u003e\r\u003cbr /\u003e@\u003ca href\u003d\"http://www.google.com/profiles/104987932455782713675\" class\u003d\"proflink\" oid\u003d\"104987932455782713675\"\u003eThomas Hawk\u003c/a\u003e -- we thought you&#39;d appreciate this ;)","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/AhZUBLUsFcN","type":"text/html"}]}},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Need a refresher on how to post by email? Want an easy way to show your mom how to share privatel...","published":"2010-04-05T18:00:35.000Z","updated":"2010-04-05T18:00:35.941Z","id":"tag:google.com,2010:buzz:z12zy3sgbvabwdr4504cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12zy3sgbvabwdr4504cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":199}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/PNHDxf73hqG","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12zy3sgbvabwdr4504cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":59,"updated":"2010-07-10T16:37:30.481Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12zy3sgbvabwdr4504cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"Need a refresher on how to post by email? Want an easy way to show your mom how to share privately? Check out the 7 tips videos we just added to the Google Buzz YouTube Channel.\r\u003cbr /\u003e\r\u003cbr /\u003eFollowing: \u003ca href\u003d\"http://www.youtube.com/watch?v\u003dMFo2WvPPgfE\" \u003ehttp://www.youtube.com/watch?v\u003dMFo2WvPPgfE\u003c/a\u003e\r\u003cbr /\u003eComments &amp; likes: \u003ca href\u003d\"http://www.youtube.com/watch?v\u003d3H0or0Tnrt8\" \u003ehttp://www.youtube.com/watch?v\u003d3H0or0Tnrt8\u003c/a\u003e\r\u003cbr /\u003ePhotos, links &amp; videos: \u003ca href\u003d\"http://www.youtube.com/watch?v\u003dsDZAPBy-ups\" \u003ehttp://www.youtube.com/watch?v\u003dsDZAPBy-ups\u003c/a\u003e\r\u003cbr /\u003eConnect sites: \u003ca href\u003d\"http://www.youtube.com/watch?v\u003d2G9ZRBGWQc4\" \u003ehttp://www.youtube.com/watch?v\u003d2G9ZRBGWQc4\u003c/a\u003e\r\u003cbr /\u003ePublic/private posting: \u003ca href\u003d\"http://www.youtube.com/watch?v\u003d-IZyk9ECvb8\" \u003ehttp://www.youtube.com/watch?v\u003d-IZyk9ECvb8\u003c/a\u003e\r\u003cbr /\u003e@replies: \u003ca href\u003d\"http://www.youtube.com/watch?v\u003d9LS7MsuHLMI\" \u003ehttp://www.youtube.com/watch?v\u003d9LS7MsuHLMI\u003c/a\u003e\r\u003cbr /\u003ePost via email: \u003ca href\u003d\"http://www.youtube.com/watch?v\u003dJGjj4IGSGQw\" \u003ehttp://www.youtube.com/watch?v\u003dJGjj4IGSGQw\u003c/a\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/PNHDxf73hqG","type":"text/html"}]},"attachments":[{"type":"article","title":"\n\t\tYouTube\n\t\t\t\t- googlebuzz's Channel\n\t","content":"Share your videos with friends, family, and the world","links":{"alternate":[{"href":"http://www.youtube.com/googlebuzz","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Reshare from your mobile device For the last month or so, you've been able to reshare interesting...","published":"2010-06-28T22:10:22.000Z","updated":"2010-06-28T22:10:22.748Z","id":"tag:google.com,2010:buzz:z13fczd5coyswbnk522fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13fczd5coyswbnk522fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":133}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/1wTZFmh3Sso","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13fczd5coyswbnk522fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":52,"updated":"2010-07-10T15:55:04.477Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13fczd5coyswbnk522fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eReshare from your mobile device\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eFor the last month or so, you&#39;ve been able to reshare interesting buzz posts from your computer (see \u003ca href\u003d\"http://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html\" \u003ehttp://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html\u003c/a\u003e for more info).\r\u003cbr /\u003e\r\u003cbr /\u003eToday, we&#39;re excited to announce that we&#39;ve enabled this feature for \u003ca href\u003d\"http://buzz.google.com\" \u003ebuzz.google.com\u003c/a\u003e on Android and iPhone as well. (If you don&#39;t see it right away, try clearing your cache/cookies.)","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/1wTZFmh3Sso","type":"text/html"}]},"attachments":[{"type":"photo","content":"Reshare2.png","links":{"alternate":[{"href":"http://picasaweb.google.com/111062888259659218284/June282010?authkey\u003dGv1sRgCLntwPqm-dqTqQE#5487950223732620306","type":"text/html"}],"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FTCkdpu6bvBI%2FAAAAAAAAACc%2FIxE12VFPTDI%2Fs288%2FReshare2.png","type":"image/jpeg"},{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FTCkdpu6bvBI%2FAAAAAAAAACc%2FIxE12VFPTDI%2Fs288%2FReshare2.png","type":"image/jpeg"}],"enclosure":[{"href":"http://lh3.ggpht.com/_f0qVMWvWkZQ/TCkdpu6bvBI/AAAAAAAAACc/IxE12VFPTDI/Reshare2.png","type":"image/jpeg","height":771,"width":489}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"In San Francisco or Toronto? Come chat with the Buzz for mobile team and other Buzz users. Google...","published":"2010-06-19T18:09:22.000Z","updated":"2010-06-19T18:09:23.449Z","id":"tag:google.com,2010:buzz:z12xznrqjlqoix2ja04cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12xznrqjlqoix2ja04cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":85}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/fV34ajxduiJ","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12xznrqjlqoix2ja04cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":101,"updated":"2010-07-03T05:14:31.118Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12xznrqjlqoix2ja04cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eIn San Francisco or Toronto? Come chat with the Buzz for mobile team and other Buzz users.\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eGoogle Buzz can be a great place to have a conversation, but we all know face-to-face interactions are still invaluable. Many of you have suggested in person meet ups to mingle and chat with other people using Google Buzz, so we&#39;re having our first meet ups focused on Buzz for mobile next week in San Francisco and Toronto. Join @\u003ca href\u003d\"http://www.google.com/profiles/111499908439497508351\" class\u003d\"proflink\" oid\u003d\"111499908439497508351\"\u003ePunit Soni\u003c/a\u003e and @\u003ca href\u003d\"http://www.google.com/profiles/117841284165024027243\" class\u003d\"proflink\" oid\u003d\"117841284165024027243\"\u003eRobin Norvell\u003c/a\u003e from the Buzz for mobile team as well as other users for what promises to be an interesting discussion. \r\u003cbr /\u003e\r\u003cbr /\u003eSan Francisco meet up\r\u003cbr /\u003eTuesday, June 22nd 6pm\r\u003cbr /\u003eAxis Cafe\r\u003cbr /\u003e1201 8th Street\r\u003cbr /\u003eSan Francisco, CA 94107\r\u003cbr /\u003e\r\u003cbr /\u003eToronto meet up*\r\u003cbr /\u003eTuesday, June 29th 7pm\r\u003cbr /\u003elinuxcaffe\r\u003cbr /\u003e326 Harbord Street\r\u003cbr /\u003eToronto, ON M6G 1H3\r\u003cbr /\u003e\r\u003cbr /\u003e* \u003cb\u003eUpdated with new Toronto location\u003c/b\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/fV34ajxduiJ","type":"text/html"}]}},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Two quick Google Buzz for mobile updates Today we released two new features for buzz.google.com o...","published":"2010-06-23T18:33:13.000Z","updated":"2010-06-23T18:33:14.046Z","id":"tag:google.com,2010:buzz:z135ftr5ssyqtxcft22fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z135ftr5ssyqtxcft22fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":141}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/MHNVs7XYWho","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z135ftr5ssyqtxcft22fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":62,"updated":"2010-06-28T19:07:38.888Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z135ftr5ssyqtxcft22fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eTwo quick Google Buzz for mobile updates\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eToday we released two new features for \u003ca href\u003d\"http://buzz.google.com\" \u003ebuzz.google.com\u003c/a\u003e on your phone. \r\u003cbr /\u003e\r\u003cbr /\u003e\u003cb\u003eAddress auto-complete for @replies:\u003c/b\u003e Just type @ and the first few letters of the person&#39;s name and you&#39;ll be prompted with email addresses to choose from. Less typing on tiny mobile keyboards \u003d good ;) You may notice that the first time you do this it seems a little slow to load, but it should get faster after that.\r\u003cbr /\u003e\r\u003cbr /\u003e\u003cb\u003eFull rendering of Google Reader shared items:\u003c/b\u003e You&#39;ll now see more details from blogs/Reader shared items right in the post.\r\u003cbr /\u003e\r\u003cbr /\u003eTry these out and let us know what you think in the comments.","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/MHNVs7XYWho","type":"text/html"}]},"attachments":[{"type":"photo","content":"IMG_0224.PNG","links":{"alternate":[{"href":"http://picasaweb.google.com/111062888259659218284/June232010?authkey\u003dGv1sRgCPzDyajUrvy2gAE#5486038443960949314","type":"text/html"}],"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttps%3A%2F%2Flh6.googleusercontent.com%2F_f0qVMWvWkZQ%2FTCJS5gRt2kI%2FAAAAAAAAACU%2FXONANxYRpXU%2Fs288%2FIMG_0224.PNG","type":"image/jpeg"},{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttps%3A%2F%2Flh6.googleusercontent.com%2F_f0qVMWvWkZQ%2FTCJS5gRt2kI%2FAAAAAAAAACU%2FXONANxYRpXU%2Fs288%2FIMG_0224.PNG","type":"image/jpeg"}],"enclosure":[{"href":"https://lh6.googleusercontent.com/_f0qVMWvWkZQ/TCJS5gRt2kI/AAAAAAAAACU/XONANxYRpXU/IMG_0224.PNG","type":"image/jpeg","height":480,"width":320}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"In case you missed it, videos of the Google I/O talks are now all live: http://code.google.com/ev...","published":"2010-06-10T23:23:57.000Z","updated":"2010-06-10T23:23:58.082Z","id":"tag:google.com,2010:buzz:z13agfwgdxamvdm4d04cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13agfwgdxamvdm4d04cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":98}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/Q1ZTGaJVjvK","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13agfwgdxamvdm4d04cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":14,"updated":"2010-06-16T10:30:51.495Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13agfwgdxamvdm4d04cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"In case you missed it, videos of the Google I/O talks are now all live: \u003ca href\u003d\"http://code.google.com/events/io/2010/sessions.html\" \u003ehttp://code.google.com/events/io/2010/sessions.html\u003c/a\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eAnd for those of you interested in learning more about how to use the Buzz APIs, here&#39;s @\u003ca href\u003d\"http://www.google.com/profiles/108189587050871927619\" class\u003d\"proflink\" oid\u003d\"108189587050871927619\"\u003eChris Chabot\u003c/a\u003e&#39;s talk:\r\u003cbr /\u003e\u003ca href\u003d\"http://www.youtube.com/watch?v\u003dqmzXVSvA7W0\" \u003eGoogle I/O 2010 - What&#39;s the hubbub about Google Buzz APIs?\u003c/a\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eThanks @\u003ca href\u003d\"http://www.google.com/profiles/112443892461436166386\" class\u003d\"proflink\" oid\u003d\"112443892461436166386\"\u003eGoogle I/O 2010\u003c/a\u003e!","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/Q1ZTGaJVjvK","type":"text/html"}]},"attachments":[{"type":"video","title":"Google I/O 2010 - What's the hubbub about Google Buzz APIs?","content":"Google I/O 2010 - What's the hubbub about Google Buzz APIs? \r\n\r\nSocial Web 101 \r\n\r\nChris Chabot, Marco Kaiser (Seesmic), Ming Yong (Socialwok) \r\n\r\nGoogle Buzz is a new way to share updates, photos, videos and more, and start conversations about the things you find interesting. In this session, we'll take a deep dive into building with the Buzz APIs and the open standards it uses, such as ActivityStrea.ms, PubSubHubbub, OAuth, Salmon and WebFinger. \r\n\r\nFor all I/O 2010 sessions, please go to http://code.google.com/events/io/2010/sessions.html","links":{"alternate":[{"href":"http://www.youtube.com/watch?v\u003dqmzXVSvA7W0","type":"text/html"},{"href":"http://www.youtube.com/v/qmzXVSvA7W0&hl\u003den&fs\u003d1&autoplay\u003d1","type":"application/x-shockwave-flash"}],"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Fytimg.googleusercontent.com%2Fvi%2FqmzXVSvA7W0%2Fdefault.jpg","type":"image/jpeg"},{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Fytimg.googleusercontent.com%2Fvi%2FqmzXVSvA7W0%2Fdefault.jpg","type":"image/jpeg"}]}},{"type":"article","title":"Google I/O 2010","links":{"alternate":[{"href":"","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Nice Google Maps previews in Google Buzz Now when you paste a Google Maps link into the post box,...","published":"2010-06-07T23:12:58.000Z","updated":"2010-06-07T23:12:59.726Z","id":"tag:google.com,2010:buzz:z13isldjrtq4thodv22fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13isldjrtq4thodv22fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":139}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/AyXWdwLdJua","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13isldjrtq4thodv22fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":26,"updated":"2010-06-14T09:15:11.316Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13isldjrtq4thodv22fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eNice Google Maps previews in Google Buzz\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eNow when you paste a Google Maps link into the post box, Buzz will automatically fetch a preview of the location you can associate with your post. More info here: \u003ca href\u003d\"http://gmailblog.blogspot.com/2010/06/google-maps-previews-in-gmail-and.html\" \u003ehttp://gmailblog.blogspot.com/2010/06/google-maps-previews-in-gmail-and.html\u003c/a\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/AyXWdwLdJua","type":"text/html"}]},"attachments":[{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F1.bp.blogspot.com%2F_JE4qNpFW6Yk%2FTAhWHBGK22I%2FAAAAAAAAAnQ%2FiAZeq1C8ZRc%2Fmaps_in_buzz.jpg","type":"image/jpeg"}],"enclosure":[{"href":"http://1.bp.blogspot.com/_JE4qNpFW6Yk/TAhWHBGK22I/AAAAAAAAAnQ/iAZeq1C8ZRc/maps_in_buzz.jpg","type":"image/jpeg"}]}},{"type":"article","title":"Google Maps previews in Gmail and Google Buzz - Official Gmail Blog","links":{"alternate":[{"href":"http://gmailblog.blogspot.com/2010/06/google-maps-previews-in-gmail-and.html","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Reshare - coming out today! When you find an interesting buzz post you want to reshare, instead o...","published":"2010-05-27T16:07:16.000Z","updated":"2010-05-27T16:07:17.116Z","id":"tag:google.com,2010:buzz:z12giviqawz3wjsgg04cdjyb3mjeulcwv3c","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12giviqawz3wjsgg04cdjyb3mjeulcwv3c/@liked?alt\u003djson","type":"application/json","count":436}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/QYa2iFCXzy5","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12giviqawz3wjsgg04cdjyb3mjeulcwv3c/@comments?alt\u003djson","type":"application/json","count":205,"updated":"2010-06-07T16:23:28.974Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z12giviqawz3wjsgg04cdjyb3mjeulcwv3c?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eReshare - coming out today!\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eWhen you find an interesting buzz post you want to reshare, instead of copying and pasting it (and maybe attributing the original poster with an @reply along the way), you&#39;ll now be able to reshare posts with two clicks. If you don&#39;t see the &quot;Reshare&quot; link quite yet, hang tight. It should be on for everyone by the end of the day. \r\u003cbr /\u003e\r\u003cbr /\u003eLearn more at: \u003ca href\u003d\"http://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html\" \u003ehttp://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html\u003c/a\u003e","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/QYa2iFCXzy5","type":"text/html"}]},"attachments":[{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F2.bp.blogspot.com%2F_JE4qNpFW6Yk%2FS_3OkIMCMYI%2FAAAAAAAAAmQ%2FjzyvdUVnk1A%2Freshare1.png","type":"image/jpeg"}],"enclosure":[{"href":"http://2.bp.blogspot.com/_JE4qNpFW6Yk/S_3OkIMCMYI/AAAAAAAAAmQ/jzyvdUVnk1A/reshare1.png","type":"image/jpeg"}]}},{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F2.bp.blogspot.com%2F_JE4qNpFW6Yk%2FS_3Oxy3zb1I%2FAAAAAAAAAmY%2FLgpdu9uY_pA%2Freshare2.png","type":"image/jpeg"}],"enclosure":[{"href":"http://2.bp.blogspot.com/_JE4qNpFW6Yk/S_3Oxy3zb1I/AAAAAAAAAmY/Lgpdu9uY_pA/reshare2.png","type":"image/jpeg"}]}},{"type":"photo","links":{"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2F3.bp.blogspot.com%2F_JE4qNpFW6Yk%2FS_3O5_z4SMI%2FAAAAAAAAAmg%2FZDEoHIDXaE0%2Freshare3.png","type":"image/jpeg"}],"enclosure":[{"href":"http://3.bp.blogspot.com/_JE4qNpFW6Yk/S_3O5_z4SMI/AAAAAAAAAmg/ZDEoHIDXaE0/reshare3.png","type":"image/jpeg"}]}},{"type":"article","title":"\"Reshare\" in Google Buzz - Official Gmail Blog","links":{"alternate":[{"href":"http://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html","type":"text/html"}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}},{"kind":"buzz#activity","title":"Tweets with location now showing with Buzz on the map If you've added Twitter as a connected site...","published":"2010-05-11T17:12:43.000Z","updated":"2010-05-11T17:12:45.087Z","id":"tag:google.com,2010:buzz:z13ri1dioqjtjpmur22fzlswnuqoebasu","links":{"liked":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13ri1dioqjtjpmur22fzlswnuqoebasu/@liked?alt\u003djson","type":"application/json","count":218}],"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/FemS5bvnLMb","type":"text/html"}],"replies":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13ri1dioqjtjpmur22fzlswnuqoebasu/@comments?alt\u003djson","type":"application/json","count":100,"updated":"2010-05-21T21:10:34.279Z"}],"self":[{"href":"https://www.googleapis.com/buzz/v1/activities/111062888259659218284/@self/B:z13ri1dioqjtjpmur22fzlswnuqoebasu?alt\u003djson","type":"application/json"}]},"actor":{"id":"111062888259659218284","name":"Google Buzz Team","profileUrl":"http://www.google.com/profiles/googlebuzz","thumbnailUrl":"http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g"},"verbs":["post"],"object":{"type":"note","content":"\u003cb\u003eTweets with location now showing with Buzz on the map\u003c/b\u003e\r\u003cbr /\u003e\r\u003cbr /\u003eIf you&#39;ve added Twitter as a connected site in Google Buzz and your tweets have a location (via Twitter or other services), they&#39;ll now appear in the mobile \u003ca href\u003d\"http://buzz.google.com\" \u003ebuzz.google.com\u003c/a\u003e &quot;Nearby&quot; view and on the Buzz layer in Google Maps (both mobile and desktop). Check out one of these views to see buzz posts, tweets and more around you.","links":{"alternate":[{"href":"http://www.google.com/buzz/111062888259659218284/FemS5bvnLMb","type":"text/html"}]},"attachments":[{"type":"photo","content":"buzz_twitter_traffic.jpg","links":{"alternate":[{"href":"http://picasaweb.google.com/111062888259659218284/20100511?authkey\u003dGv1sRgCJio0JmzpvCI9QE#5470061328611656498","type":"text/html"}],"preview":[{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Flh4.ggpht.com%2F_f0qVMWvWkZQ%2FS-mPy_d_wzI%2FAAAAAAAAACE%2FtRh1_oH8W04%2Fs288%2Fbuzz_twitter_traffic.jpg","type":"image/jpeg"},{"href":"http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container\u003dfocus&gadget\u003da&resize_h\u003d100&url\u003dhttp%3A%2F%2Flh4.ggpht.com%2F_f0qVMWvWkZQ%2FS-mPy_d_wzI%2FAAAAAAAAACE%2FtRh1_oH8W04%2Fs288%2Fbuzz_twitter_traffic.jpg","type":"image/jpeg"}],"enclosure":[{"href":"http://lh4.ggpht.com/_f0qVMWvWkZQ/S-mPy_d_wzI/AAAAAAAAACE/tRh1_oH8W04/buzz_twitter_traffic.jpg","type":"image/jpeg","height":322,"width":521}]}}]},"source":{"title":"Buzz"},"visibility":{"entries":[{"id":"tag:google.com,2010:buzz-group:@me:@public","title":"Public"}]}}]}};
- </script>
- <script type="text/javascript">
- window.browser.lap('parse model');
- </script>
- </head>
- <body ng:init="$window.$scope = this;$window.onInit(this); activities = $window.googlebuzz; log = $window.log" style="display:none;" ng:show="true">
- <a href="{{$location.href}}">reload</a><br/>
- <tt ng:repeat="line in log">{{line}}<br/></tt>
- <hr/>
- <div>
- <span>&lt;angular/&gt; Buzz</span>
- <span>
- filter:
- <input type="text" name="filterText"/>
- </span>
- <span>
- user:
- <input type="text" name="userId" ng:required/>
- <button>fetch</button>
- </span>
- </div>
- <ul>
- <li ng:repeat="item in activities.data.items.$filter(filterText)">
- <h1>
- <img ng:attr-bind="{src:'{{item.actor.thumbnailUrl}}'}"/>
- <a href="{{item.actor.profileUrl}}">{{item.actor.name}}</a>
- <a href="#" ng:click="expandReplies(item)">Replies: {{item.links.replies[0].count}}</a>
- </h1>
- <div>
- {{item.object.content | html}}
- <div>
- <a href="{{attachment.links.enclosure[0].href}}" ng:repeat="attachment in item.object.attachments">
- <img ng:attr-bind="{src:'{{attachment.links.preview[0].href}}'}"/>
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <li ng:repeat="reply in item.replies.data.items">
- <img ng:attr-bind="{src:'{{reply.actor.thumbnailUrl}}'}"/>
- <a href="{{reply.actor.profileUrl}}">{{reply.actor.name}}</a>:
- {{reply.content | html}}
- </li>
- </ul>
- </my:expand>
- </li>
- </ul>
-
- <div ng:eval="$window.browser.lap('DOM created')"></div>
- </body>
- </html>
diff --git a/perf/buzz_raw.html b/perf/buzz_raw.html
deleted file mode 100644
index 059b80d6..00000000
--- a/perf/buzz_raw.html
+++ /dev/null
@@ -1,550 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <link rel="stylesheet" type="text/css" href="buzz.css"/>
- <script type="text/javascript">
-
- function time(timerName){
- var started = new Date().getTime();
- return {
- name: timerName,
- started: started,
- lapped: started,
- lastLap: {duration:0, name:'BEGIN', time:started},
- lap: function(lapName){
- var totalDuration = (this.lapped = new Date().getTime()) - this.started;
- var lapDuration = this.lapped - this.lastLap.time;
- var lastName = this.lastLap.name;
- this.lastLap = {duration:lapDuration, name:lapName, time:this.lapped};
- console.log(timerName, lapName + ': ' + this.lastLap.duration + ' ms.', '(' + totalDuration + ' ms.)');
- }
- };
- }
- window.browser = time('boot:');
-
- </script>
- <script type="text/javascript">
- window.browser.lap('parse <angular/>');
- function onInit() {
- window.browser.lap('compile DOM');
- window.setTimeout(function(){
- window.browser.lap('DOM render');
- }, 1);
- }
- onInit();
- </script>
- <script type="text/javascript">
- window.browser.lap('parse model');
- </script>
- </head>
- <body>
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{$location.href}}&quot;}" href="buzz_raw.html">reload</a>
- <hr>
- <div>
- <span>&lt;angular/&gt; Buzz</span>
- <span>
- filter:
- <input type="text" name="filterText" class="">
- </span>
- <span>
- user:
- <input type="text" name="userId" ng:required="" class="ng-validation-error" ng-validation-error="Required">
- <button>fetch</button>
- </span>
- </div>
- <ul>
- <!--ng:repeat: item in activities.data.items.$filter(filterText)--><li ng:repeat-index="0">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">26</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>AutoShare from YouTube to Buzz</b>
-<br>
-<br>If you use YouTube a lot, you may be familiar with AutoShare (see <a href="http://help.youtube.com/support/youtube/bin/answer.py?hl=en&amp;answer=157215">http://help.youtube.com/support/youtube/bin/answer.py?hl=en&amp;answer=157215</a>) which you can use to automatically share your favorites, likes, uploads, or comments on videos to Facebook. Twitter, and Google Reader. Now you can choose to automatically share from YouTube to Google Buzz as well.
-<br>
-<br>You can still keep YouTube as a connected site in Buzz if you hooked it up previously, but that only automatically posts your uploads for now.</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="1">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">62</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>Google Buzz API talks and hackathons</b>
-<br>
-<br>Come join us to talk about how you can build on Google Buzz -- check out the list below to see if weÍll be in a city near you. We'll cover several open standards (Activity Streams, OAuth, PubSubHubbub, and Salmon) and go in depth with the Google Buzz API and libraries. In some locations weÍll have extended time for hacking with Googlers on hand to answer your questions.
-<br>
-<br>HereÍs the schedule (weÍll add links for the Cambridge, Kiev, and Moscow sessions soon):
-<br>
-<br>Sydney, Australia - July 1: <a href="http://code.google.com/events/devfests/2010/sydney4.html">http://code.google.com/events/devfests/2010/sydney4.html</a>
-<br>Manila, Philippines - July 6: <a href="http://code.google.com/events/devfests/2010/asia1.html">http://code.google.com/events/devfests/2010/asia1.html</a>
-<br>Singapore - July 9: <a href="http://code.google.com/events/devfests/2010/asia2.html">http://code.google.com/events/devfests/2010/asia2.html</a>
-<br>Kuala Lumpur, Malaysia - July 16: <a href="http://code.google.com/events/devfests/2010/asia3.html">http://code.google.com/events/devfests/2010/asia3.html</a>
-<br>New York, NY, USA - July 21: <a href="http://www.meetup.com/NYC-GTUG/calendar/13899003/">http://www.meetup.com/NYC-GTUG/calendar/13899003/</a>
-<br>Cambridge, MA, USA - August 7
-<br>Stockholm, Sweden - July 12: <a href="http://sites.google.com/site/stockholmgtug/extra-gtug-mte-juli">extra gtug mte juli</a>
-<br>Berlin, Germany - July 15: <a href="http://www.berlin-gtug.org/2010/06/july-2010-berlin-gtug-meeting.html">http://www.berlin-gtug.org/2010/06/july-2010-berlin-gtug-meeting.html</a>
-<br>Kiev, Ukraine - July 17
-<br>Moscow, Russia - July 19
-<br>Lisbon, Portugal - July 28th: <a href="https://spreadsheets.google.com/a/google.com/viewform?formkey=dFd5aFo3WVVUX2xaeUZOVDJJVlo1ekE6MQ">https://spreadsheets.google.com/a/google.com/viewform?formkey=dFd5aFo3WVVUX2xaeUZOVDJJVlo1ekE6MQ</a></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments-->
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="2">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">87</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html">When Google Buzz launched, it was only available for devices running Android 2.0+ and iPhone. Not any more! Today weÍre a releasing an XHTML version of the Buzz website which can be accessed from many other mobile devices, including those running Android pre-2.0, Blackberry, Nokia S60, and Windows Mobile.
-<br>
-<br>Read more at <a href="http://googlemobile.blogspot.com/2010/05/google-buzz-for-mobile-now-available-on.html">http://googlemobile.blogspot.com/2010/05/google-buzz-for-mobile-now-available-on.html</a></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://1.bp.blogspot.com/_SS18DlBSIQ8/S_6tBXefeGI/AAAAAAAAGr4/RXnIdiSgYPI/s400/buzz+pic+1.jpg">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F1.bp.blogspot.com%2F_SS18DlBSIQ8%2FS_6tBXefeGI%2FAAAAAAAAGr4%2FRXnIdiSgYPI%2Fs400%2Fbuzz%2Bpic%2B1.jpg'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="1" href="http://2.bp.blogspot.com/_SS18DlBSIQ8/S_6t8CKFnSI/AAAAAAAAGsA/U6qdmKc_6G0/s400/buzz+pic+2.jpg">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F2.bp.blogspot.com%2F_SS18DlBSIQ8%2FS_6t8CKFnSI%2FAAAAAAAAGsA%2FU6qdmKc_6G0%2Fs400%2Fbuzz%2Bpic%2B2.jpg'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="2" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="3">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">96</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>New! Comments and likes tabs on your profile</b>
-<br>
-<br>Many of you have asked for an easy way to refer back to the posts you've commented on and/or liked. Some of you have also requested a way to see what other people have commented on or liked -- a great way to discover posts that may interest you too.
-<br>
-<br>Starting today, you'll see new tabs on your profile that show all the posts you've commented on or liked. By default, these tabs are only visible to you. If you want to share your comments and likes tabs, you can choose to make them publicly visible to others from the Buzz tab under Settings. This won't change who can see each post; private posts stay private.</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="https://lh6.googleusercontent.com/_f0qVMWvWkZQ/TD5Lv7B8_oI/AAAAAAAAACk/dc1Ndqi_gfQ/comments%26likes.png">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=https%3A%2F%2Flh6.googleusercontent.com%2F_f0qVMWvWkZQ%2FTD5Lv7B8_oI%2FAAAAAAAAACk%2Fdc1Ndqi_gfQ%2Fs288%2Fcomments%2526likes.png'}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="4">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">187</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>Fighting follower spam</b>
-<br>
-<br>Any web service that involves following has to fight "follower spam" -- accounts that follow lots and lots of people in the hopes that some of them will click through to their profiles and a few might even end up buying whatever it is they're selling. Buzz is no different. If you're getting following notices from Buzz users with names that sound suspiciously like spammy marketing scams, the chances are that's exactly what they are -- and we're after them. Just like we work hard to protect your Gmail accounts from email spam, we're working to protect Buzz from follower spam. We look at lots of factors when determining whether to disable an account for follower spam including the number of people it attempts to follow and whether people are blocking it. And just as we're constantly tweaking the algorithms which detect Gmail spam, the same goes for follower spam in Buzz.
-<br>
-<br>If you're followed by any suspicious looking users, you can report them by clicking the "Report this profile" link on their profile. If they aren't really suspicious but you just don't want them following you, you can always block them.</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments-->
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="5">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">31</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>New Google Buzz API features</b>
-<br>
-<br>We just launched the Google Buzz firehose (our top developer feature request) which makes all public activities available as they are published, along with new feeds including comments, likes, and shared counts.
-<br>
-<br>Read more on the Code Blog:
-<br><a href="http://googlecode.blogspot.com/2010/07/new-google-buzz-api-features-including.html">http://googlecode.blogspot.com/2010/07/new-google-buzz-api-features-including.html</a></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="6">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">45</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>Two quick Buzz for mobile updates</b>
-<br>
-<br>Yesterday we rolled out a new design for rendering location attached to posts, including a better place icon, a bigger map, and an easy way to get directions from the post itself.
-<br>
-<br>In addition, you can now disable comments from Buzz for mobile. (Look for this option under "More Actions").</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://lh3.ggpht.com/_f0qVMWvWkZQ/TAHzmsivPfI/AAAAAAAAACM/vdqRNwY1Z6Y/buzz_maps_image.jpg">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FTAHzmsivPfI%2FAAAAAAAAACM%2FvdqRNwY1Z6Y%2Fs288%2Fbuzz_maps_image.jpg'}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="7">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">89</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html">Read about the updates we're making to the Google Buzz API (<a href="http://googlecode.blogspot.com/2010/05/introducing-google-buzz-api.html">http://googlecode.blogspot.com/2010/05/introducing-google-buzz-api.html</a>) and check out some of the initial apps developers have created so far (<a href="http://www.google.com/buzz/apps">http://www.google.com/buzz/apps</a>)!</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://4.bp.blogspot.com/_WryZsbWA8Vs/S_NyVvGdpQI/AAAAAAAAAGY/6Z3vfWpVSoo/s1600/BuzzAPI-logosall.png">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F4.bp.blogspot.com%2F_WryZsbWA8Vs%2FS_NyVvGdpQI%2FAAAAAAAAAGY%2F6Z3vfWpVSoo%2Fs1600%2FBuzzAPI-logosall.png'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="1" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="8">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">61</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html">If you started using Google Buzz before we changed the start-up experience from auto-following to suggestions for people to follow, we want to help you ensure that Buzz is set up the way you want. So the next time you click into the Buzz tab you'll see a page asking you to confirm your Buzz settings -- you can review and edit your settings from here, or at anytime from the Buzz tab of Gmail Settings.
-<br>
-<br>For more info, check out this post on the Gmail blog: <a href="http://gmailblog.blogspot.com/2010/04/confirm-your-buzz-settings.html">http://gmailblog.blogspot.com/2010/04/confirm-your-buzz-settings.html</a></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://1.bp.blogspot.com/_JE4qNpFW6Yk/S7ZUkxT141I/AAAAAAAAAjA/gEdS8783dFE/buzzConfirmSetup.png">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F1.bp.blogspot.com%2F_JE4qNpFW6Yk%2FS7ZUkxT141I%2FAAAAAAAAAjA%2FgEdS8783dFE%2FbuzzConfirmSetup.png'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="1" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="9">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">495</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html">Hey all -- this is the account for the Google Buzz team. We'll post all sorts of updates here about what we're working on. Feel free to give us feedback and ideas on Google Buzz!
-<br>
-<br>Here's a photo of our launch "war room" from last week. :-)</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://lh3.ggpht.com/_f0qVMWvWkZQ/S39UD8tY_pI/AAAAAAAAAAM/CTneAri7FGY/buzzLaunchRoom.jpg">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FS39UD8tY_pI%2FAAAAAAAAAAM%2FCTneAri7FGY%2Fs288%2FbuzzLaunchRoom.jpg'}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="10">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">52</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html">The Buzz layer in Google Maps for mobile is now available on BlackBerry phones:
-<br><a href="http://googlemobile.blogspot.com/2010/04/google-maps-40-for-blackberry-adds.html">http://googlemobile.blogspot.com/2010/04/google-maps-40-for-blackberry-adds.html</a></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://1.bp.blogspot.com/_16aYP83FzVs/S7zAh47PpZI/AAAAAAAAACU/UXotejzuskY/s320/buzz3_cropped.png">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F1.bp.blogspot.com%2F_16aYP83FzVs%2FS7zAh47PpZI%2FAAAAAAAAACU%2FUXotejzuskY%2Fs320%2Fbuzz3_cropped.png'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="1" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="11">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">81</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>New! View entire photo albums in Buzz</b>
-<br>
-<br>Tired of only being able to view a handful of photos from a given Flickr or Picasa album in Buzz's photo viewer? Now you can view the entire thing.
-<br>
-<br>@<a href="http://www.google.com/profiles/104987932455782713675" class="proflink" oid="104987932455782713675">Thomas Hawk</a> -- we thought you'd appreciate this ;)</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments-->
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="12">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">59</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html">Need a refresher on how to post by email? Want an easy way to show your mom how to share privately? Check out the 7 tips videos we just added to the Google Buzz YouTube Channel.
-<br>
-<br>Following: <a href="http://www.youtube.com/watch?v=MFo2WvPPgfE">http://www.youtube.com/watch?v=MFo2WvPPgfE</a>
-<br>Comments &amp; likes: <a href="http://www.youtube.com/watch?v=3H0or0Tnrt8">http://www.youtube.com/watch?v=3H0or0Tnrt8</a>
-<br>Photos, links &amp; videos: <a href="http://www.youtube.com/watch?v=sDZAPBy-ups">http://www.youtube.com/watch?v=sDZAPBy-ups</a>
-<br>Connect sites: <a href="http://www.youtube.com/watch?v=2G9ZRBGWQc4">http://www.youtube.com/watch?v=2G9ZRBGWQc4</a>
-<br>Public/private posting: <a href="http://www.youtube.com/watch?v=-IZyk9ECvb8">http://www.youtube.com/watch?v=-IZyk9ECvb8</a>
-<br>@replies: <a href="http://www.youtube.com/watch?v=9LS7MsuHLMI">http://www.youtube.com/watch?v=9LS7MsuHLMI</a>
-<br>Post via email: <a href="http://www.youtube.com/watch?v=JGjj4IGSGQw">http://www.youtube.com/watch?v=JGjj4IGSGQw</a></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="13">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">52</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>Reshare from your mobile device</b>
-<br>
-<br>For the last month or so, you've been able to reshare interesting buzz posts from your computer (see <a href="http://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html">http://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html</a> for more info).
-<br>
-<br>Today, we're excited to announce that we've enabled this feature for <a href="http://buzz.google.com">buzz.google.com</a> on Android and iPhone as well. (If you don't see it right away, try clearing your cache/cookies.)</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://lh3.ggpht.com/_f0qVMWvWkZQ/TCkdpu6bvBI/AAAAAAAAACc/IxE12VFPTDI/Reshare2.png">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2Flh3.ggpht.com%2F_f0qVMWvWkZQ%2FTCkdpu6bvBI%2FAAAAAAAAACc%2FIxE12VFPTDI%2Fs288%2FReshare2.png'}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="14">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">101</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>In San Francisco or Toronto? Come chat with the Buzz for mobile team and other Buzz users.</b>
-<br>
-<br>Google Buzz can be a great place to have a conversation, but we all know face-to-face interactions are still invaluable. Many of you have suggested in person meet ups to mingle and chat with other people using Google Buzz, so we're having our first meet ups focused on Buzz for mobile next week in San Francisco and Toronto. Join @<a href="http://www.google.com/profiles/111499908439497508351" class="proflink" oid="111499908439497508351">Punit Soni</a> and @<a href="http://www.google.com/profiles/117841284165024027243" class="proflink" oid="117841284165024027243">Robin Norvell</a> from the Buzz for mobile team as well as other users for what promises to be an interesting discussion.
-<br>
-<br>San Francisco meet up
-<br>Tuesday, June 22nd 6pm
-<br>Axis Cafe
-<br>1201 8th Street
-<br>San Francisco, CA 94107
-<br>
-<br>Toronto meet up*
-<br>Tuesday, June 29th 7pm
-<br>linuxcaffe
-<br>326 Harbord Street
-<br>Toronto, ON M6G 1H3
-<br>
-<br>* <b>Updated with new Toronto location</b></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments-->
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="15">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">62</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>Two quick Google Buzz for mobile updates</b>
-<br>
-<br>Today we released two new features for <a href="http://buzz.google.com">buzz.google.com</a> on your phone.
-<br>
-<br><b>Address auto-complete for @replies:</b> Just type @ and the first few letters of the person's name and you'll be prompted with email addresses to choose from. Less typing on tiny mobile keyboards = good ;) You may notice that the first time you do this it seems a little slow to load, but it should get faster after that.
-<br>
-<br><b>Full rendering of Google Reader shared items:</b> You'll now see more details from blogs/Reader shared items right in the post.
-<br>
-<br>Try these out and let us know what you think in the comments.</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="https://lh6.googleusercontent.com/_f0qVMWvWkZQ/TCJS5gRt2kI/AAAAAAAAACU/XONANxYRpXU/IMG_0224.PNG">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=https%3A%2F%2Flh6.googleusercontent.com%2F_f0qVMWvWkZQ%2FTCJS5gRt2kI%2FAAAAAAAAACU%2FXONANxYRpXU%2Fs288%2FIMG_0224.PNG'}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="16">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">14</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html">In case you missed it, videos of the Google I/O talks are now all live: <a href="http://code.google.com/events/io/2010/sessions.html">http://code.google.com/events/io/2010/sessions.html</a>
-<br>
-<br>And for those of you interested in learning more about how to use the Buzz APIs, here's @<a href="http://www.google.com/profiles/108189587050871927619" class="proflink" oid="108189587050871927619">Chris Chabot</a>'s talk:
-<br><a href="http://www.youtube.com/watch?v=qmzXVSvA7W0">Google I/O 2010 - What's the hubbub about Google Buzz APIs?</a>
-<br>
-<br>Thanks @<a href="http://www.google.com/profiles/112443892461436166386" class="proflink" oid="112443892461436166386">Google I/O 2010</a>!</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2Fytimg.googleusercontent.com%2Fvi%2FqmzXVSvA7W0%2Fdefault.jpg'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="1" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="17">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">26</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>Nice Google Maps previews in Google Buzz</b>
-<br>
-<br>Now when you paste a Google Maps link into the post box, Buzz will automatically fetch a preview of the location you can associate with your post. More info here: <a href="http://gmailblog.blogspot.com/2010/06/google-maps-previews-in-gmail-and.html">http://gmailblog.blogspot.com/2010/06/google-maps-previews-in-gmail-and.html</a></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://1.bp.blogspot.com/_JE4qNpFW6Yk/TAhWHBGK22I/AAAAAAAAAnQ/iAZeq1C8ZRc/maps_in_buzz.jpg">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F1.bp.blogspot.com%2F_JE4qNpFW6Yk%2FTAhWHBGK22I%2FAAAAAAAAAnQ%2FiAZeq1C8ZRc%2Fmaps_in_buzz.jpg'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="1" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="18">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">205</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>Reshare - coming out today!</b>
-<br>
-<br>When you find an interesting buzz post you want to reshare, instead of copying and pasting it (and maybe attributing the original poster with an @reply along the way), you'll now be able to reshare posts with two clicks. If you don't see the "Reshare" link quite yet, hang tight. It should be on for everyone by the end of the day.
-<br>
-<br>Learn more at: <a href="http://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html">http://gmailblog.blogspot.com/2010/05/reshare-in-google-buzz.html</a></span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://2.bp.blogspot.com/_JE4qNpFW6Yk/S_3OkIMCMYI/AAAAAAAAAmQ/jzyvdUVnk1A/reshare1.png">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F2.bp.blogspot.com%2F_JE4qNpFW6Yk%2FS_3OkIMCMYI%2FAAAAAAAAAmQ%2FjzyvdUVnk1A%2Freshare1.png'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="1" href="http://2.bp.blogspot.com/_JE4qNpFW6Yk/S_3Oxy3zb1I/AAAAAAAAAmY/Lgpdu9uY_pA/reshare2.png">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F2.bp.blogspot.com%2F_JE4qNpFW6Yk%2FS_3Oxy3zb1I%2FAAAAAAAAAmY%2FLgpdu9uY_pA%2Freshare2.png'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="2" href="http://3.bp.blogspot.com/_JE4qNpFW6Yk/S_3O5_z4SMI/AAAAAAAAAmg/ZDEoHIDXaE0/reshare3.png">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2F3.bp.blogspot.com%2F_JE4qNpFW6Yk%2FS_3O5_z4SMI%2FAAAAAAAAAmg%2FZDEoHIDXaE0%2Freshare3.png'}">
- </a><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="3" href="">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:''}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li><li ng:repeat-index="19">
- <h1>
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{item.actor.thumbnailUrl}}'}&quot;}" ng:attr-bind="{src:'http://www.google.com/s2/photos/public/AIbEiAIAAABECOz6ztaiyNHDmQEiC3ZjYXJkX3Bob3RvKigyYTBkYmNlNDgyOGI0NDViOTRlYTlkZjVmNzIxZTllNjMzMWFhODljMAEgSk99ukLxRAAHhTbzhgNkGnE-8g'}">
- <a ng:bind-attr="{&quot;href&quot;:&quot;{{item.actor.profileUrl}}&quot;}" href="http://www.google.com/profiles/googlebuzz"><span ng:bind="item.actor.name">Google Buzz Team</span></a>
- <a href="#" ng:click="expandReplies(item)">Replies: <span ng:bind="item.links.replies[0].count">100</span></a>
- </h1>
- <div>
- <span ng:bind="item.object.content | html"><b>Tweets with location now showing with Buzz on the map</b>
-<br>
-<br>If you've added Twitter as a connected site in Google Buzz and your tweets have a location (via Twitter or other services), they'll now appear in the mobile <a href="http://buzz.google.com">buzz.google.com</a> "Nearby" view and on the Buzz layer in Google Maps (both mobile and desktop). Check out one of these views to see buzz posts, tweets and more around you.</span>
- <div>
- <!--ng:repeat: attachment in item.object.attachments--><a ng:bind-attr="{&quot;href&quot;:&quot;{{attachment.links.enclosure[0].href}}&quot;}" ng:repeat-index="0" href="http://lh4.ggpht.com/_f0qVMWvWkZQ/S-mPy_d_wzI/AAAAAAAAACE/tRh1_oH8W04/buzz_twitter_traffic.jpg">
- <img ng:bind-attr="{&quot;ng:attr-bind&quot;:&quot;{src:'{{attachment.links.preview[0].href}}'}&quot;}" ng:attr-bind="{src:'http://images0-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&amp;gadget=a&amp;resize_h=100&amp;url=http%3A%2F%2Flh4.ggpht.com%2F_f0qVMWvWkZQ%2FS-mPy_d_wzI%2FAAAAAAAAACE%2FtRh1_oH8W04%2Fs288%2Fbuzz_twitter_traffic.jpg'}">
- </a>
- </div>
- </div>
- <my:expand expand="item.replies.show">
- <ul>
- <!--ng:repeat: reply in item.replies.data.items-->
- </ul>
- </my:expand>
- </li>
- </ul>
-
- <div ng:eval="$window.browser.lap('DOM created')"></div>
- </body>
- </html>
diff --git a/scenario/cross-site-post/People.json b/scenario/cross-site-post/People.json
deleted file mode 100644
index de51fd83..00000000
--- a/scenario/cross-site-post/People.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- { name: 'Misko', favorite: ['water melon', 'persimmon', 'passion fruit'] },
- { name: 'Lenka', favorite: ['strawberry'] }
-]
diff --git a/scenario/cross-site-post/index.html b/scenario/cross-site-post/index.html
deleted file mode 100644
index d7a87d3b..00000000
--- a/scenario/cross-site-post/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <script type="text/javascript" src="../../src/angular-bootstrap.js#autobind"></script>
- </head>
- <body ng:init="$window.$scope = this; People = $resource('People.json')">
- <button ng:click="people = People.query()">Load People</button>
- <pre>people = {{people}}</pre>
- </body>
- </html>
diff --git a/scenario/widgets-scenarios.old b/scenario/widgets-scenarios.old
deleted file mode 100644
index a1e6c0ed..00000000
--- a/scenario/widgets-scenarios.old
+++ /dev/null
@@ -1,49 +0,0 @@
-angular.scenarioDef.widgets = {
- $before:[
- {Given:"browser", at:"widgets.html"}
- ],
- checkWidgetBinding:[
- {Then:"text", at:"{{text.basic}}", should_be:""},
- {When:"enter", text:"John", at:":input[name=text.basic]"},
- {Then:"text", at:"{{text.basic}}", should_be:"John"},
-
- {Then:"text", at:"{{gender}}", should_be:"male"},
- {When:"click", at:"input:radio[value=female]"},
- {Then:"text", at:"{{gender}}", should_be:"female"},
-
- {Then:"text", at:"{{tea}}", should_be:"on"},
- {When:"click", at:"input[name=tea]"},
- {Then:"text", at:"{{tea}}", should_be:""},
-
- {Then:"text", at:"{{coffee}}", should_be:""},
- {When:"click", at:"input[name=coffee]"},
- {Then:"text", at:"{{coffee}}", should_be:"on"},
-
- {Then:"text", at:"{{count}}", should_be:0},
- {When:"click", at:"form :button"},
- {When:"click", at:"form :submit"},
- {When:"click", at:"form :image"},
- {Then:"text", at:"{{count}}", should_be:3},
-
- {Then:"text", at:"{{select}}", should_be:"A"},
- {When:"select", at:"select[name=select]", option:"B"},
- {Then:"text", at:"{{select}}", should_be:"B"},
-
- {Then:"text", at:"{{multiple}}", should_be:"[]"},
- {When:"select", at:"select[name=multiple]", option:"A"},
- {Then:"text", at:"{{multiple}}", should_be:["A"]},
- {When:"select", at:"select[name=multiple]", option:"B"},
- {Then:"text", at:"{{multiple}}", should_be:["A", "B"]},
- {When:"select", at:"select[name=multiple]", option:"A"},
- {Then:"text", at:"{{multiple}}", should_be:["B"]},
-
- {Then:"text", at:"{{hidden}}", should_be:"hiddenValue"},
-
- {Then:"text", at:"{{password}}", should_be:"passwordValue"},
- {When:"enter", text:"reset", at:":input[name=password]"},
- {Then:"text", at:"{{password}}", should_be:"reset"},
- ],
- checkNewWidgetEmpty:[
- {Then:"text", at:"{{name}}", should_be:""},
- ]
-};