Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
9 lines
No EOL
2.2 KiB
JavaScript
9 lines
No EOL
2.2 KiB
JavaScript
;'use strict';function ThumbnailDateGroup(item){if(!item){throw new Error('item should not be null or undefined.');}
|
|
this.thumbnails=[];this.groupID=ThumbnailDateGroup.getGroupID(item);this.date=item.date;this.header=document.createElement('div');this.header.className='thumbnail-group-header';this.container=document.createElement('div');this.container.className='thumbnail-group-container';this.htmlNode=document.createElement('li');this.htmlNode.appendChild(this.header);this.htmlNode.appendChild(this.container);this.localize();}
|
|
ThumbnailDateGroup.getGroupID=function(item){var dateObj=new Date(item.date);var month=dateObj.getMonth()+1;return'group_'+dateObj.getFullYear()+'-'+
|
|
(month<10?'0'+month:month);};ThumbnailDateGroup.compareGroupID=function(id1,id2){return id1>id2?1:(id1<id2?-1:0);};ThumbnailDateGroup.prototype.addItem=function(item){if(!item){return;}
|
|
var self=this;function getInsertPosition(thumbnail){if(self.thumbnails.length===0||thumbnail.data.date>self.thumbnails[0].data.date){return 0;}
|
|
else if(thumbnail.data.date<self.thumbnails[self.thumbnails.length-1].data.date){return self.thumbnails.length;}
|
|
else{return MediaUtils.binarySearch(self.thumbnails,thumbnail,function(a,b){return b.data.date-a.data.date;});}}
|
|
var thumbnail=new ThumbnailItem(item);var insertPosition=getInsertPosition(thumbnail);this.container.insertBefore(thumbnail.htmlNode,this.container.children[insertPosition]);this.thumbnails.splice(insertPosition,0,thumbnail);return thumbnail;};ThumbnailDateGroup.prototype.getCount=function(){return this.thumbnails.length;};ThumbnailDateGroup.prototype.removeItem=function(thumbnail){var idx=this.thumbnails.indexOf(thumbnail);if(idx<0){return;}
|
|
this.thumbnails.splice(idx,1);URL.revokeObjectURL(thumbnail.imgNode.src);this.container.removeChild(thumbnail.htmlNode);};ThumbnailDateGroup.formatter=new Intl.DateTimeFormat(navigator.languages,{month:'long',year:'numeric',});ThumbnailDateGroup.resetFormatter=()=>{ThumbnailDateGroup.formatter=new Intl.DateTimeFormat(navigator.languages,{month:'long',year:'numeric',});};ThumbnailDateGroup.prototype.localize=function(){var date=new Date(this.date);this.header.textContent=ThumbnailDateGroup.formatter.format(date);this.thumbnails.forEach(function(thumbnail){thumbnail.localize();});}; |