1// 2// iWeb - WidgetCommon.js 3// Copyright (c) 2007-2008 Apple Inc. All rights reserved. 4// 5 6var widgets=[];var identifiersToStringLocalizations=[];var Widget=Class.create({initialize:function(instanceID,widgetPath,sharedPath,sitePath,preferences,runningInApp) 7{if(instanceID) 8{this.instanceID=instanceID;this.widgetPath=widgetPath;this.sharedPath=sharedPath;this.sitePath=sitePath;this.preferences=preferences;this.runningInApp=(runningInApp===undefined)?false:runningInApp;this.onloadReceived=false;if(this.preferences&&this.runningInApp==true) 9{this.preferences.widget=this;setTransparentGifURL(this.sharedPath.stringByAppendingPathComponent("None.gif"));} 10this.div().widget=this;window[instanceID]=this;widgets.push(this);widgets[instanceID]=this;if(!this.constructor.instances) 11{this.constructor.instances=new Array();} 12this.constructor.instances.push(this);}},div:function() 13{var divID=this.instanceID;if(arguments.length==1) 14{divID=this.instanceID+"-"+arguments[0];} 15return $(divID);},onload:function() 16{this.onloadReceived=true;},onunload:function() 17{},didBecomeSelected:function() 18{},didBecomeDeselected:function() 19{},didBeginEditing:function() 20{},didEndEditing:function() 21{},setNeedsDisplay:function() 22{},preferenceForKey:function(key) 23{var value;if(this.preferences) 24value=this.preferences[key];return value;},initializeDefaultPreferences:function(prefs) 25{var self=this;$H(prefs).each(function(pair) 26{if(self.preferenceForKey(pair.key)===undefined) 27{self.setPreferenceForKey(pair.value,pair.key,false);}});},setPreferenceForKey:function(preference,key,registerUndo) 28{if(this.runningInApp) 29{if(registerUndo===undefined) 30registerUndo=true;if((registerUndo==false)&&this.preferences.disableUndoRegistration) 31this.preferences.disableUndoRegistration();this.preferences[key]=preference;if((registerUndo==false)&&this.preferences.enableUndoRegistration) 32this.preferences.enableUndoRegistration();} 33else 34{this.preferences[key]=preference;this.changedPreferenceForKey(key);}},changedPreferenceForKey:function(key) 35{},postNotificationWithNameAndUserInfo:function(name,userInfo) 36{if(window.NotificationCenter!==undefined) 37{NotificationCenter.postNotification(new IWNotification(name,null,userInfo));}},sizeWillChange:function() 38{},sizeDidChange:function() 39{},widgetWidth:function() 40{var enclosingDiv=this.div();if(enclosingDiv) 41return enclosingDiv.offsetWidth;else 42return null;},widgetHeight:function() 43{var enclosingDiv=this.div();if(enclosingDiv) 44return enclosingDiv.offsetHeight;else 45return null;},getInstanceId:function(id) 46{var fullId=this.instanceID+"-"+id;if(arguments.length==2) 47{fullId+=("$"+arguments[1]);} 48return fullId;},getElementById:function(id) 49{var fullId=this.getInstanceId.apply(this,arguments);return $(fullId);},localizedString:function(string) 50{return LocalizedString(this.widgetIdentifier,string);},showView:function(viewName) 51{var futureView=this.m_views[viewName];if((futureView!=this.m_currentView)&&(futureView!=this.m_futureView)) 52{this.m_futureView=futureView;if(this.m_fadeAnimation) 53{this.m_fadeAnimation.stop();} 54var previousView=this.m_currentView;this.m_currentView=futureView;var currentView=this.m_currentView;this.m_futureView=null;this.m_fadeAnimation=new SimpleAnimation(function(){delete this.m_fadeAnimation;}.bind(this));this.m_fadeAnimation.pre=function() 55{if(previousView) 56{previousView.ensureDiv().setStyle({zIndex:0,opacity:1});} 57if(currentView) 58{currentView.ensureDiv().setStyle({zIndex:1,opacity:0});currentView.show();currentView.render();}} 59this.m_fadeAnimation.post=function() 60{!previousView||previousView.hide();!currentView||currentView.ensureDiv().setStyle({zIndex:'',opacity:1});!currentView||!currentView.doneFadingIn||currentView.doneFadingIn();} 61this.m_fadeAnimation.update=function(now) 62{!currentView||currentView.ensureDiv().setOpacity(now);!previousView||previousView.ensureDiv().setOpacity(1-now);}.bind(this);this.m_fadeAnimation.start();}}});Widget.onload=function() 63{for(var i=0;i<widgets.length;i++) 64{widgets[i].onload();}} 65Widget.onunload=function() 66{for(var i=0;i<widgets.length;i++) 67{widgets[i].onunload();}} 68function RegisterWidgetStrings(identifier,strings) 69{identifiersToStringLocalizations[identifier]=strings;} 70function LocalizedString(identifier,string) 71{var localized=undefined;var localizations=identifiersToStringLocalizations[identifier];if(localizations===undefined) 72{iWLog("warning: no localizations for widget "+identifier+", (key:"+string+")");} 73else 74{localized=localizations[string];} 75if(localized===undefined) 76{iWLog("warning: couldn't find a localization for '"+string+"' for widget "+identifier);localized=string;} 77return localized;} 78function WriteLocalizedString(identifier,string) 79{document.write(LocalizedString(identifier,string));} 80var JSONFeedRendererWidget=Class.create(Widget,{initialize:function($super,instanceID,widgetPath,sharedPath,sitePath,preferences,runningInApp) 81{if(instanceID) 82{$super(instanceID,widgetPath,sharedPath,sitePath,preferences,runningInApp);}},changedPreferenceForKey:function(key) 83{try 84{var value=this.preferenceForKey(key);if(key=="sfr-shadow") 85{if(value!=null) 86{this.sfrShadow=eval(value);} 87else 88{this.sfrShadow=null;} 89this.renderFeedItems("sfr-shadow");} 90if(key=="sfr-stroke") 91{if(value!==null) 92this.sfrStroke=eval(value);else 93this.sfrStroke=null;this.invalidateFeedItems("sfr-stroke");} 94if(key=="sfr-reflection") 95{if(value!==null) 96{this.sfrReflection=eval(value);} 97else 98{this.sfrReflection=null;} 99this.invalidateFeedItems("sfr-reflection");}} 100catch(e) 101{iWLog("JSONFeedRendererWidget: exception");debugPrintException(e);}},invalidateFeedItems:function(reason) 102{trace('invalidateFeedItems(%s)',reason);if(this.pendingRender!==null) 103{clearTimeout(this.pendingRender);} 104this.pendingRender=setTimeout(function() 105{this.pendingRender=null;this.renderFeedItems(reason);}.bind(this),50);},rerenderImage:function(imgGroupDiv,imgDiv,imageUrlString,entryHasImage,photoProportions,imageWidth,positioningHandler,onloadHandler)
106{imgGroupDiv.update();if(entryHasImage) 107{imgGroupDiv.strokeApplied=false;imgGroupDiv.reflectionApplied=false;imgGroupDiv.shadowApplied=false;imgGroupDiv.setStyle({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});imgGroupDiv.style.position='relative';imgDiv.style.position='relative';var imageUrl=imageUrlString||transparentGifURL();var image=IWCreateImage(imageUrl);image.load(function(image,imgDiv,imgGroupDiv,positioningHandler,onloadHandler) 108{var cropDiv=this.croppingDivForImage(image,photoProportions,imageWidth);imgGroupDiv.appendChild(cropDiv);if(positioningHandler) 109{positioningHandler();} 110if(image.sourceURL()!==transparentGifURL()) 111{this.applyEffects(imgGroupDiv);} 112if(onloadHandler) 113{onloadHandler();}}.bind(this,image,imgDiv,imgGroupDiv,positioningHandler,onloadHandler));}},croppingDivForImage:function(image,kind,width) 114{var croppedSize=function(originalSize,cropKind,width) 115{if(cropKind=="Square") 116{return new IWSize(width,width);} 117else if(cropKind=="Landscape") 118{return new IWSize(width,width*(3/4));} 119else if(cropKind=="Portrait") 120{return new IWSize(width,width*(4/3));} 121else 122{var scaleFactor=width/originalSize.width;return originalSize.scale(scaleFactor,scaleFactor,true);}};var cropDiv=null;if(image.loaded()) 123{var img=$(document.createElement('img'));img.src=image.sourceURL();var natural=image.naturalSize();cropDiv=$(document.createElement("div"));cropDiv.appendChild(img);var croppingDivForImage_helper=function(loadedImage) 124{if(loadedImage) 125{natural=new IWSize(loadedImage.width,loadedImage.height);} 126var cropped=croppedSize(natural,kind,width);var scaleFactor=cropped.width/natural.width;if(natural.aspectRatio()>cropped.aspectRatio()) 127{scaleFactor=cropped.height/natural.height;} 128var scaled=natural.scale(scaleFactor);var offset=new IWPoint(Math.abs(scaled.width-cropped.width)/2,Math.abs(scaled.height-cropped.height)/2);img.setStyle({width:px(scaled.width),height:px(scaled.height),marginLeft:px(-offset.x),marginTop:px(-offset.y),position:'relative'});cropDiv.setStyle({width:px(cropped.width),height:px(cropped.height),overflow:"hidden",position:'relative'});cropDiv.className="crop";} 129if(windowsInternetExplorer&&effectiveBrowserVersion<7&&img.src.indexOf(transparentGifURL())!=-1) 130{var originalImage=new Image();originalImage.src=img.originalSrc;if(originalImage.complete) 131{croppingDivForImage_helper(originalImage);} 132else 133{originalImage.onload=croppingDivForImage_helper.bind(null,originalImage);}} 134else 135{croppingDivForImage_helper(null);}} 136return cropDiv;},applyEffects:function(div) 137{if(this.sfrShadow||this.sfrReflection||this.sfrStroke) 138{if((div.offsetWidth===undefined)||(div.offsetHeight===undefined)||(div.offsetWidth===0)||(div.offsetHeight===0)) 139{setTimeout(JSONFeedRendererWidget.prototype.applyEffects.bind(this,div),0) 140return;} 141if(this.sfrStroke&&(div.strokeApplied==false)) 142{this.sfrStroke.applyToElement(div);div.strokeApplied=true;} 143if(this.sfrReflection&&(div.reflectionApplied==false)) 144{this.sfrReflection.applyToElement(div);div.reflectionApplied=true;} 145if(this.sfrShadow&&(!this.disableShadows)&&(div.shadowApplied==false)) 146{this.sfrShadow.applyToElement(div);div.shadowApplied=true;} 147if(this.runningInApp&&(window.webKitVersion<=419)&&this.preferences.setNeedsDisplay) 148{this.preferences.setNeedsDisplay();}} 149if(windowsInternetExplorer) 150{var cropDivs=div.select(".crop");var cropDiv=cropDivs[cropDivs.length-1];if(cropDiv) 151{cropDiv.onclick=function() 152{var anchorNode=div.parentNode;var targetHref=locationHRef();while(anchorNode&&(anchorNode.tagName!="A")) 153{anchorNode=anchorNode.parentNode} 154if(anchorNode) 155{targetHref=anchorNode.href;} 156window.location=targetHref;};cropDiv.onmouseover=function() 157{this.style.cursor='pointer';}}}},summaryExcerpt:function(descriptionHTML,maxSummaryLength) 158{var div=document.createElement("div");div.innerHTML=descriptionHTML;if(maxSummaryLength>0) 159{var model=new HTMLTextModel(div);model.truncateAroundPosition(maxSummaryLength,"...");} 160else if(maxSummaryLength===0) 161{div.innerHTML="";} 162return div.innerHTML;}});var PrefMarkupWidget=Class.create(Widget,{initialize:function($super,instanceID,widgetPath,sharedPath,sitePath,preferences,runningInApp) 163{if(instanceID) 164{$super(instanceID,widgetPath,sharedPath,sitePath,preferences,runningInApp);}},onload:function() 165{if(!this.runningInApp) 166{this.setUpSubDocumentOnLoad();}},setUpSubDocumentOnLoad:function() 167{var self=this;var oIFrame=this.getElementById("frame");
167if(oIFrame) 168{setTimeout(function(){self.loadedSubDocument()},250);}},loadedSubDocument:function() 169{var oIFrame=this.getElementById("frame");var oSubDocument=oIFrame.contentWindow||oIFrame.contentDocument;if(oSubDocument.document) 170{oSubDocument=oSubDocument.document;} 171if(oSubDocument.body) 172{this.fixTargetOnElements(oSubDocument,"a");this.fixTargetOnElements(oSubDocument,"form");} 173else 174{var self=this;setTimeout(function(){self.loadedSubDocument()},250);}},fixTargetOnElements:function(doc,tagName) 175{var elements=doc.getElementsByTagName(tagName);for(var i=0;i<elements.length;i++) 176{var target=elements[i].target;if(target===undefined||target=="") 177elements[i].target="_top";}}});function IWScrollbar(scrollbar) 178{} 179IWScrollbar.prototype._init=function() 180{var style=null;var element=null;this._track=$(document.createElement("div"));style=this._track.style;style.height="100%";style.width="100%";this.scrollbar.appendChild(this._track);element=$(document.createElement("div"));element.style.position="absolute";this._setObjectStart(element,0);this._track.appendChild(element);element=$(document.createElement("div"));element.style.position="absolute";this._track.appendChild(element);element=$(document.createElement("div"));element.style.position="absolute";windowsInternetExplorer||this._setObjectEnd(element,0);this._track.appendChild(element);this._thumb=$(document.createElement("div"));style=this._thumb.style;style.position="absolute";this._setObjectSize(this._thumb,this.minThumbSize);this._track.appendChild(this._thumb);element=$(document.createElement("div"));element.style.position="absolute";this._setObjectStart(element,0);this._thumb.appendChild(element);element=$(document.createElement("div"));element.style.position="absolute";this._thumb.appendChild(element);element=$(document.createElement("div"));element.style.position="absolute";windowsInternetExplorer||this._setObjectEnd(element,0);this._thumb.appendChild(element);this.setSize(this.size);this.setTrackStart(this.trackStartPath,this.trackStartLength);this.setTrackMiddle(this.trackMiddlePath);this.setTrackEnd(this.trackEndPath,this.trackEndLength);this.setThumbStart(this.thumbStartPath,this.thumbStartLength);this.setThumbMiddle(this.thumbMiddlePath);this.setThumbEnd(this.thumbEndPath,this.thumbEndLength);this._thumb.style.display="none";Event.observe(this._track,"mousedown",this._mousedownTrackHandler,false);Event.observe(this._thumb,"mousedown",this._mousedownThumbHandler,false);} 181IWScrollbar.prototype.remove=function() 182{this.scrollbar.removeChild(this._track);} 183IWScrollbar.prototype._captureEvent=function(event) 184{event.stopPropagation();event.preventDefault();} 185IWScrollbar.prototype._mousedownThumb=function(event) 186{Event.observe(document,"mousemove",this._mousemoveThumbHandler,true);Event.observe(document,"mouseup",this._mouseupThumbHandler,true);Event.observe(document,"mouseover",this._captureEventHandler,true);Event.observe(document,"mouseout",this._captureEventHandler,true);this._thumbStart_temp=this._getMousePosition(event);this._scroll_thumbStartPos=this._getThumbStartPos();event.stopPropagation();event.preventDefault();} 187IWScrollbar.prototype._mousemoveThumb=function(event) 188{var delta=this._getMousePosition(event)-this._thumbStart_temp;var new_pos=this._scroll_thumbStartPos+delta;this.scrollTo(this._contentPositionForThumbPosition(new_pos));event.stopPropagation();event.preventDefault();} 189IWScrollbar.prototype._mouseupThumb=function(event) 190{Event.stopObserving(document,"mousemove",this._mousemoveThumbHandler,true);Event.stopObserving(document,"mouseup",this._mouseupThumbHandler,true);Event.stopObserving(document,"mouseover",this._captureEventHandler,true);Event.stopObserving(document,"mouseout",this._captureEventHandler,true);delete this._thumbStart_temp;delete this._scroll_thumbStartPos;event.stopPropagation();event.preventDefault();} 191IWScrollbar.prototype._mousedownTrack=function(event) 192{this._track_mouse_temp=this._getMousePosition(event)-this._trackOffset;if(event.altKey) 193{this.scrollTo(this._contentPositionForThumbPosition(this._track_mouse_temp-(this._thumbLength/2)));delete this._track_mouse_temp;} 194else 195{this._track_scrolling=true;Event.observe(this._track,"mousemove",this._mousemoveTrackHandler,true);Event.observe(this._track,"mouseover",this._mouseoverTrackHandler,true);Event.observe(this._track,"mouseout",this._mouseoutTrackHandler,true);Event.observe(document,"mouseup",this._mouseupTrackHandler,true);this._trackScrollOnePage(this);this._track_timer=setInterval(this._trackScrollDelay,500,this);} 196event.stopPropagation();event.preventDefault();} 197IWScrollbar.prototype._trackScrollDelay=function(self) 198{if(!self._track_scrolling)return;clearInterval(self._track_timer);self._trackScrollOnePage(self);self._track_timer=setInterval(self._trackScrollOnePage,150,self);} 199IWScrollbar.prototype._mousemoveTrack=function(event) 200{this._track_mouse_temp=this._getMousePosition(event)-this._trackOffset;event.stopPropagation();event.preventDefault();} 201IWScrollbar.prototype._mouseoverTrack=function(event) 202{this._track_mouse_temp=this._getMousePosition(event)-this._trackOffset;this._track_scrolling=true;event.stopPropagation();event.preventDefault();} 203IWScrollbar.prototype._mouseoutTrack=function(event) 204{this._track_scrolling=false;event.stopPropagation();event.preventDefault();} 205IWScrollbar.prototype._mouseupTrack=function(event) 206{clearInterval(this._track_timer);
206Event.stopObserving(this._track,"mousemove",this._mousemoveTrackHandler,true);Event.stopObserving(this._track,"mouseover",this._mouseoverTrackHandler,true);Event.stopObserving(this._track,"mouseout",this._mouseoutTrackHandler,true);Event.stopObserving(document,"mouseup",this._mouseupTrackHandler,true);delete this._track_mouse_temp;delete this._track_scrolling;delete this._track_timer;event.stopPropagation();event.preventDefault();} 207IWScrollbar.prototype._trackScrollOnePage=function(self) 208{if(!self._track_scrolling)return;var deltaScroll=Math.round(self._trackLength*self._getViewToContentRatio());if(self._track_mouse_temp<self._thumbStart) 209self.scrollByThumbDelta(-deltaScroll);else if(self._track_mouse_temp>(self._thumbStart+self._thumbLength)) 210self.scrollByThumbDelta(deltaScroll);} 211IWScrollbar.prototype.setScrollArea=function(scrollarea) 212{if(this.scrollarea) 213{Event.stopObserving(this.scrollbar,"mousewheel",this.scrollarea._mousewheelScrollHandler,true);Event.stopObserving(this.scrollbar,"DOMMouseScroll",this.scrollarea._mousewheelScrollHandler,true);} 214this.scrollarea=scrollarea;Event.observe(this.scrollbar,"mousewheel",this.scrollarea._mousewheelScrollHandler,true);Event.observe(this.scrollbar,"DOMMouseScroll",this.scrollarea._mousewheelScrollHandler,true);} 215IWScrollbar.prototype.refresh=function() 216{this._trackOffset=this._computeTrackOffset();this._trackLength=this._computeTrackLength();var ratio=this._getViewToContentRatio();if(ratio>=1.0||!this._canScroll()) 217{if(this.autohide) 218{this.hide();} 219this._thumb.style.display="none";this.scrollbar.style.appleDashboardRegion="none";} 220else 221{this._thumbLength=Math.max(Math.round(this._trackLength*ratio),this.minThumbSize);this._numScrollablePixels=this._trackLength-this._thumbLength-(2*this.padding);this._setObjectLength(this._thumb,this._thumbLength);if(windowsInternetExplorer) 222{this._setObjectStart(this._thumb.down().next(),this.thumbStartLength);this._setObjectLength(this._thumb.down().next(),this._thumbLength 223-this.thumbStartLength-this.thumbEndLength);this._setObjectStart(this._thumb.down().next(1),this._thumbLength-this.thumbEndLength);this._setObjectLength(this._thumb.down().next(1),this.thumbEndLength);if(!this.fixedUpIEPNGBGs) 224{fixupIEPNGBGsInTree(this._track);Event.stopObserving(this._track,"mousedown",this._mousedownTrackHandler);Event.stopObserving(this._thumb,"mousedown",this._mousedownThumbHandler);Event.observe(this._track,"mousedown",this._mousedownTrackHandler);Event.observe(this._thumb,"mousedown",this._mousedownThumbHandler);this.fixedUpIEPNGBGs=true;}} 225this._thumb.style.display="block";this.scrollbar.style.appleDashboardRegion="dashboard-region(control rectangle)";this.show();} 226this.verticalHasScrolled();this.horizontalHasScrolled();} 227IWScrollbar.prototype.setAutohide=function(autohide) 228{this.autohide=autohide;if(this._getViewToContentRatio()>=1.0&&autohide) 229{this.hide();} 230else 231{this.show();}} 232IWScrollbar.prototype.hide=function() 233{this._track.style.display="none";this.hidden=true;} 234IWScrollbar.prototype.show=function() 235{this._track.style.display="block";this.hidden=false;} 236IWScrollbar.prototype.setSize=function(size) 237{this.size=size;this._setObjectSize(this.scrollbar,size);this._setObjectSize(this._track.down().next(),size);this._setObjectSize(this._thumb.down().next(),size);} 238IWScrollbar.prototype.setTrackStart=function(imgpath,length) 239{this.trackStartPath=imgpath;this.trackStartLength=length;var element=this._track.down();element.style.background="url("+imgpath+") no-repeat top left";this._setObjectLength(element,length);this._setObjectSize(element,this.size);this._setObjectStart(this._track.down().next(),length);} 240IWScrollbar.prototype.setTrackMiddle=function(imgpath) 241{this.trackMiddlePath=imgpath;this._track.down().next().style.background="url("+imgpath+") "+this._repeatType+" top left";} 242IWScrollbar.prototype.setTrackEnd=function(imgpath,length) 243{this.trackEndPath=imgpath;this.trackEndLength=length;var element=this._track.down().next(1);element.style.background="url("+imgpath+") no-repeat top left";this._setObjectLength(element,length);this._setObjectSize(element,this.size);windowsInternetExplorer||this._setObjectEnd(this._track.down().next(),length);} 244IWScrollbar.prototype.setThumbStart=function(imgpath,length) 245{this.thumbStartPath=imgpath;this.thumbStartLength=length;var element=this._thumb.down();element.style.background="url("+imgpath+") no-repeat top left";this._setObjectLength(element,length);this._setObjectSize(element,this.size);this._setObjectStart(this._thumb.down().next(),length);} 246IWScrollbar.prototype.setThumbMiddle=function(imgpath) 247{this.thumbMiddlePath=imgpath;this._thumb.down().next().style.background="url("+imgpath+") "+this._repeatType+" top left";} 248IWScrollbar.prototype.setThumbEnd=function(imgpath,length) 249{this.thumbEndPath=imgpath;this.thumbEndLength=length;var element=this._thumb.down().next(1);element.style.background="url("+imgpath+") no-repeat top left";this._setObjectLength(element,length);this._setObjectSize(element,this.size);windowsInternetExplorer||this._setObjectEnd(this._thumb.down().next(),length);} 250IWScrollbar.prototype._contentPositionForThumbPosition=function(thumb_pos) 251{if(this._getViewToContentRatio()>=1.0) 252{return 0;} 253else 254{return(thumb_pos-this.padding)*((this._getContentLength()-this._getViewLength())/this._numScrollablePixels);}} 255IWScrollbar.prototype._thumbPositionForContentPosition=function(page_pos) 256{if(this._getViewToContentRatio()>=1.0) 257{return this.padding;} 258else 259{var result=this.padding+(page_pos/((this._getContentLength()-this._getViewLength())/this._numScrollablePixels));if(isNaN(result)) 260result=0;return result;}} 261IWScrollbar.prototype.scrollByThumbDelta=function(deltaScroll) 262{if(deltaScroll==0) 263return;this.scrollTo(this._contentPositionForThumbPosition(this._thumbStart+deltaScroll));} 264function IWVerticalScrollbar(scrollbar) 265{this.scrollarea=null;this.scrollbar=$(scrollbar);this.minThumbSize=28;this.padding=-1;this.autohide=true;this.hidden=true;this.size=19;this.trackStartPath=transparentGifURL();this.trackStartLength=18;this.trackMiddlePath=transparentGifURL();this.trackEndPath=transparentGifURL();this.trackEndLength=18;this.thumbStartPath=transparentGifURL();this.thumbStartLength=9;this.thumbMiddlePath=transparentGifURL();this.thumbEndPath=transparentGifURL();this.thumbEndLength=9;this._track=null;this._thumb=null;this._trackOffset=0;this._trackLength=0;this._numScrollablePixels=0;this._thumbLength=0;this._repeatType="repeat-y";this._thumbStart=this.padding;var _self=this;this._captureEventHandler=function(event){_self._captureEvent(event);};
265this._mousedownThumbHandler=function(event){_self._mousedownThumb(event);};this._mousemoveThumbHandler=function(event){_self._mousemoveThumb(event);};this._mouseupThumbHandler=function(event){_self._mouseupThumb(event);};this._mousedownTrackHandler=function(event){_self._mousedownTrack(event);};this._mousemoveTrackHandler=function(event){_self._mousemoveTrack(event);};this._mouseoverTrackHandler=function(event){_self._mouseoverTrack(event);};this._mouseoutTrackHandler=function(event){_self._mouseoutTrack(event);};this._mouseupTrackHandler=function(event){_self._mouseupTrack(event);};this._init();} 266IWVerticalScrollbar.prototype=new IWScrollbar(null);IWVerticalScrollbar.prototype.scrollTo=function(pos) 267{this.scrollarea.verticalScrollTo(pos);} 268IWVerticalScrollbar.prototype._setObjectSize=function(object,size) 269{object.style.width=size+"px";} 270IWVerticalScrollbar.prototype._setObjectLength=function(object,length) 271{object.style.height=length+"px";} 272IWVerticalScrollbar.prototype._setObjectStart=function(object,start) 273{object.style.top=start+"px";} 274IWVerticalScrollbar.prototype._setObjectEnd=function(object,end) 275{object.style.bottom=end+"px";} 276IWVerticalScrollbar.prototype._getMousePosition=function(event) 277{if(event!=undefined) 278return Event.pointerY(event);else 279return 0;} 280IWVerticalScrollbar.prototype._getThumbStartPos=function() 281{return this._thumb.offsetTop;} 282IWVerticalScrollbar.prototype._computeTrackOffset=function() 283{var obj=this.scrollbar;var curtop=0;while(obj.offsetParent) 284{curtop+=obj.offsetTop;obj=obj.offsetParent;} 285return curtop;} 286IWVerticalScrollbar.prototype._computeTrackLength=function() 287{return this.scrollbar.offsetHeight;} 288IWVerticalScrollbar.prototype._getViewToContentRatio=function() 289{return this.scrollarea.viewToContentHeightRatio;} 290IWVerticalScrollbar.prototype._getContentLength=function() 291{return this.scrollarea.content.scrollHeight;} 292IWVerticalScrollbar.prototype._getViewLength=function() 293{return this.scrollarea.viewHeight;} 294IWVerticalScrollbar.prototype._canScroll=function() 295{return this.scrollarea.scrollsVertically;} 296IWVerticalScrollbar.prototype.verticalHasScrolled=function() 297{var new_thumb_pos=this._thumbPositionForContentPosition(this.scrollarea.content.scrollTop);this._thumbStart=new_thumb_pos;this._thumb.style.top=new_thumb_pos+"px";} 298IWVerticalScrollbar.prototype.horizontalHasScrolled=function() 299{} 300function IWHorizontalScrollbar(scrollbar) 301{this.scrollarea=null;this.scrollbar=$(scrollbar);this.minThumbSize=28;this.padding=-1;this.autohide=true;this.hidden=true;this.size=19;this.trackStartPath=transparentGifURL();this.trackStartLength=18;this.trackMiddlePath=transparentGifURL();this.trackEndPath=transparentGifURL();this.trackEndLength=18;this.thumbStartPath=transparentGifURL();this.thumbStartLength=9;this.thumbMiddlePath=transparentGifURL();this.thumbEndPath=transparentGifURL();this.thumbEndLength=9;this._track=null;this._thumb=null;this._trackOffset=0;this._trackLength=0;this._numScrollablePixels=0;this._thumbLength=0;this._repeatType="repeat-x";this._thumbStart=this.padding;var _self=this;this._captureEventHandler=function(event){_self._captureEvent(event);};this._mousedownThumbHandler=function(event){_self._mousedownThumb(event);};this._mousemoveThumbHandler=function(event){_self._mousemoveThumb(event);};this._mouseupThumbHandler=function(event){_self._mouseupThumb(event);};this._mousedownTrackHandler=function(event){_self._mousedownTrack(event);};this._mousemoveTrackHandler=function(event){_self._mousemoveTrack(event);};this._mouseoverTrackHandler=function(event){_self._mouseoverTrack(event);};this._mouseoutTrackHandler=function(event){_self._mouseoutTrack(event);};this._mouseupTrackHandler=function(event){_self._mouseupTrack(event);};this._init();} 302IWHorizontalScrollbar.prototype=new IWScrollbar(null);IWHorizontalScrollbar.prototype.scrollTo=function(pos) 303{this.scrollarea.horizontalScrollTo(pos);} 304IWHorizontalScrollbar.prototype._setObjectSize=function(object,size) 305{object.style.height=size+"px";} 306IWHorizontalScrollbar.prototype._setObjectLength=function(object,length) 307{object.style.width=length+"px";} 308IWHorizontalScrollbar.prototype._setObjectStart=function(object,start) 309{object.style.left=start+"px";} 310IWHorizontalScrollbar.prototype._setObjectEnd=function(object,end) 311{object.style.right=end+"px";} 312IWHorizontalScrollbar.prototype._getMousePosition=function(event) 313{if(event!=undefined) 314return Event.pointerX(event);else 315return 0;} 316IWHorizontalScrollbar.prototype._getThumbStartPos=function() 317{return this._thumb.offsetLeft;} 318IWHorizontalScrollbar.prototype._computeTrackOffset=function() 319{var obj=this.scrollbar;var curtop=0;while(obj.offsetParent) 320{curtop+=obj.offsetLeft;obj=obj.offsetParent;} 321return curtop;} 322IWHorizontalScrollbar.prototype._computeTrackLength=function() 323{return this.scrollbar.offsetWidth;} 324IWHorizontalScrollbar.prototype._getViewToContentRatio=function() 325{return this.scrollarea.viewToContentWidthRatio;} 326IWHorizontalScrollbar.prototype._getContentLength=function() 327{return this.scrollarea.content.scrollWidth;} 328IWHorizontalScrollbar.prototype._getViewLength=function() 329{return this.scrollarea.viewWidth;} 330IWHorizontalScrollbar.prototype._canScroll=function() 331{return this.scrollarea.scrollsHorizontally;} 332IWHorizontalScrollbar.prototype.verticalHasScrolled=function() 333{} 334IWHorizontalScrollbar.prototype.horizontalHasScrolled=function() 335{var new_thumb_pos=this._thumbPositionForContentPosition(this.scrollarea.content.scrollLeft);this._thumbStart=new_thumb_pos;this._thumb.style.left=new_thumb_pos+"px";} 336function IWScrollArea(content) 337{this.content=$(content);this.scrollsVertically=true;this.scrollsHorizontally=true;this.singlepressScrollPixels=10;this.viewHeight=0;this.viewToContentHeightRatio=1.0;this.viewWidth=0;this.viewToContentWidthRatio=1.0;this._scrollbars=new Array();var _self=this;this._refreshHandler=function(){_self.refresh();};this._keyPressedHandler=function(){_self.keyPressed(event);};this._mousewheelScrollHandler=function(event){_self.mousewheelScroll(event);};this.content.style.overflow="hidden";this.content.scrollTop=0;this.content.scrollLeft=0;Event.observe(this.content,"mousewheel",this._mousewheelScrollHandler,true);Event.observe(this.content,"DOMMouseScroll",this._mousewheelScrollHandler,true);this.refresh();var c=arguments.length;for(var i=1;i<c;++i) 338{this.addScrollbar(arguments[i]);}} 339IWScrollArea.prototype.addScrollbar=function(scrollbar) 340{scrollbar.setScrollArea(this);this._scrollbars.push(scrollbar);scrollbar.refresh();} 341IWScrollArea.prototype.removeScrollbar=function(scrollbar) 342{var scrollbars=this._scrollbars;var c=scrollbars.length;for(var i=0;i<c;++i) 343{if(scrollbars[i]==scrollbar) 344{scrollbars.splice(i,1);break;}}} 345IWScrollArea.prototype.remove=function() 346{Event.stopObserving(this.content,"mousewheel",this._mousewheelScrollHandler,true);
346Event.stopObserving(this.content,"DOMMouseScroll",this._mousewheelScrollHandler,true);var scrollbars=this._scrollbars;var c=scrollbars.length;for(var i=0;i<c;++i) 347{scrollbars[i].setScrollArea(null);}} 348IWScrollArea.prototype.refresh=function() 349{this.viewHeight=this.content.offsetHeight;this.viewWidth=this.content.offsetWidth;if(this.content.scrollHeight>this.viewHeight) 350{this.viewToContentHeightRatio=this.viewHeight/this.content.scrollHeight;this.verticalScrollTo(this.content.scrollTop);} 351else 352{this.viewToContentHeightRatio=1.0;this.verticalScrollTo(0);} 353if(this.content.scrollWidth>this.viewWidth) 354{this.viewToContentWidthRatio=this.viewWidth/this.content.scrollWidth;this.horizontalScrollTo(this.content.scrollLeft);} 355else 356{this.viewToContentWidthRatio=1.0;this.horizontalScrollTo(0);} 357var scrollbars=this._scrollbars;var c=scrollbars.length;for(var i=0;i<c;++i) 358{scrollbars[i].refresh();}} 359IWScrollArea.prototype.focus=function() 360{Event.observe(document,"keypress",this._keyPressedHandler,true);} 361IWScrollArea.prototype.blur=function() 362{Event.stopObserving(document,"keypress",this._keyPressedHandler,true);} 363IWScrollArea.prototype.reveal=function(element) 364{var offsetY=0;var obj=element;do 365{offsetY+=obj.offsetTop;obj=obj.offsetParent;}while(obj&&obj!=this.content);var offsetX=0;obj=element;do 366{offsetX+=obj.offsetLeft;obj=obj.offsetParent;}while(obj&&obj!=this.content);this.verticalScrollTo(offsetY);this.horizontalScrollTo(offsetX);} 367IWScrollArea.prototype.verticalScrollTo=function(new_content_top) 368{if(!this.scrollsVertically) 369return;var bottom=this.content.scrollHeight-this.viewHeight;if(new_content_top<0) 370{new_content_top=0;} 371else if(new_content_top>bottom) 372{new_content_top=bottom;} 373this.content.scrollTop=new_content_top;var scrollbars=this._scrollbars;var c=scrollbars.length;for(var i=0;i<c;++i) 374{scrollbars[i].verticalHasScrolled();}} 375IWScrollArea.prototype.horizontalScrollTo=function(new_content_left) 376{if(!this.scrollsHorizontally) 377return;var right=this.content_width-this.viewWidth;if(new_content_left<0) 378{new_content_left=0;} 379else if(new_content_left>right) 380{new_content_left=right;} 381this.content.scrollLeft=new_content_left;var scrollbars=this._scrollbars;var c=scrollbars.length;for(var i=0;i<c;++i) 382{scrollbars[i].horizontalHasScrolled();}} 383IWScrollArea.prototype.keyPressed=function(event) 384{var handled=true;if(event.altKey) 385return;if(event.shiftKey) 386return;switch(event.keyIdentifier) 387{case"Home":this.verticalScrollTo(0);break;case"End":this.verticalScrollTo(this.content.scrollHeight-this.viewHeight);break;case"Up":this.verticalScrollTo(this.content.scrollTop-this.singlepressScrollPixels);break;case"Down":this.verticalScrollTo(this.content.scrollTop+this.singlepressScrollPixels);break;case"PageUp":this.verticalScrollTo(this.content.scrollTop-this.viewHeight);break;case"PageDown":this.verticalScrollTo(this.content.scrollTop+this.viewHeight);break;case"Left":this.horizontalScrollTo(this.content.scrollLeft-this.singlepressScrollPixels);break;case"Right":this.horizontalScrollTo(this.content.scrollLeft+this.singlepressScrollPixels);break;default:handled=false;} 388if(handled) 389{event.stopPropagation();event.preventDefault();}} 390IWScrollArea.prototype.mousewheelScroll=function(event) 391{var deltaScroll=event.wheelDelta?(event.wheelDelta/120*this.singlepressScrollPixels):(event.detail/-2*this.singlepressScrollPixels);this.verticalScrollTo(this.content.scrollTop-deltaScroll);event.stopPropagation();event.preventDefault();} 392var View=Class.create({initialize:function(widget,parentDiv) 393{this.m_widget=widget;this.m_parentDiv=parentDiv;this.m_divInstanceId=this.m_divId;this.hide();},ensureDiv:function() 394{var div=this.m_widget.div(this.m_divInstanceId);if(!div) 395{div=new Element('div',{'id':this.m_widget.getInstanceId(this.m_divInstanceId)});div.addClassName(this.m_divClass);this.m_parentDiv.appendChild(div);} 396return $(div);},hide:function() 397{this.ensureDiv().hide();},show:function() 398{this.ensureDiv().show();},render:function() 399{},resize:function() 400{}});var StatusView=Class.create(View,{initialize:function($super,widget,parentDiv) 401{$super(widget,parentDiv);this.render();this.hide();},render:function() 402{var markup="<table class='StatusMessageTable'><tr><td>";if(this.badgeImage) 403{markup+=imgMarkup(this.m_widget.widgetPath+"/"+this.badgeImage,"","id='"+this.p_badgeImgId()+"'","");} 404markup+="</td></tr></table>";if(this.upperRightBadgeWidth&&this.upperRightBadgeHeight) 405{var badgeURL=(this.upperRightBadge)?(this.m_widget.widgetPath+"/"+this.upperRightBadge):transparentGifURL();markup+=imgMarkup(badgeURL,"","class='StatusUpperRightBadge' width='"+this.upperRightBadgeWidth+"' height='"+this.upperRightBadgeHeight+"' ","");} 406var overlayPath=this.m_widget.sharedPath.stringByAppendingPathComponent("Translucent-Overlay.png");markup+=imgMarkup(overlayPath,"position: absolute; top: 0; left: 0;","id='"+this.p_overlayImgId()+"' width='700' height='286' ","");if(this.statusMessageKey) 407{markup+="<div id='"+this.p_statusMessageBlockId()+"' class='StatusMessageBlock' ><span>"+ 408this.m_widget.localizedString(this.statusMessageKey)+"</span></div>";} 409this.ensureDiv().update(markup);this.resize();},resize:function() 410{var widgetWidth=(this.runningInApp)?window.innerWidth:this.m_widget.div().offsetWidth;var widgetHeight=(this.runningInApp)?window.innerHeight:this.m_widget.div().offsetHeight;if(this.badgeImage) 411{var badgeImageEl=$(this.p_badgeImgId());var badgeSize=new IWSize(this.badgeImageWidth,this.badgeImageHeight);if((badgeSize.width>widgetWidth)||(badgeSize.height>widgetHeight)) 412{var widgetSize=new IWSize(widgetWidth,widgetHeight);badgeSize=badgeSize.scaleToFit(widgetSize);} 413badgeImageEl.width=badgeSize.width;badgeImageEl.height=badgeSize.height;} 414var overlayNativeWidth=700;var overlayNativeHeight=286;var overlayWidth=Math.max(widgetWidth,overlayNativeWidth);var overlayHeight=overlayNativeHeight;var overlayTop=Math.min(((widgetHeight/2)-overlayNativeHeight),0);var overlayLeft=Math.min(((widgetWidth/2)-(overlayNativeWidth/2)),0);var overlayImage=$(this.p_overlayImgId());overlayImage.width=overlayWidth;overlayImage.height=overlayHeight;overlayImage.setStyle({left:px(overlayLeft),top:px(overlayTop)});var statusMessageBlock=$(this.p_statusMessageBlockId());if(statusMessageBlock) 415{var leftValue=px(Math.max(((widgetWidth-statusMessageBlock.offsetWidth)/2),0));var positionStyles={left:leftValue};if(this.statusMessageVerticallyCentered) 416{var topValue=px(Math.max(((widgetHeight-statusMessageBlock.offsetHeight)/2),
4160));positionStyles.top=topValue;} 417statusMessageBlock.setStyle(positionStyles);} 418if(this.footerView) 419{this.footerView.resize();}},doneFadingIn:function() 420{this.m_widget.setPreferenceForKey(true,"x-viewDoneFadingIn",false);},p_badgeImgId:function() 421{return this.m_widget.getInstanceId(this.m_divId+"-badge");},p_overlayImgId:function() 422{return this.m_widget.getInstanceId(this.m_divId+"-overlay");},p_statusMessageBlockId:function() 423{return this.m_widget.getInstanceId(this.m_divId+"-messageBlock");}});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.