diff --git a/README.md b/README.md index efa5c42e13..b48c5939dc 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Complete * [SoundJS](http://www.createjs.com/#!/SoundJS) (by [Pedro Ferreira](https://bitbucket.org/drk4)) * [Spin](http://fgnass.github.com/spin.js/) (by [Boris Yankov](https://github.com/borisyankov)) * [Sugar](http://sugarjs.com/) (by [Josh Baldwin](https://github.com/jbaldwin/)) +* [SwipeView](http://cubiq.org/swipeview) (by [Boris Yankov](https://github.com/borisyankov)) * [Teechart](http://www.steema.com) (by [Steema](http://www.steema.com)) * [Toastr](https://github.com/CodeSeven/toastr) (by [Boris Yankov](https://github.com/borisyankov)) * [TweenJS](http://www.createjs.com/#!/TweenJS) (by [Pedro Ferreira](https://bitbucket.org/drk4)) diff --git a/iscroll/iscroll-4.2.d.ts b/iscroll/iscroll-4.2.d.ts index 938da44ac2..aee179cac5 100644 --- a/iscroll/iscroll-4.2.d.ts +++ b/iscroll/iscroll-4.2.d.ts @@ -39,7 +39,7 @@ interface iScrollOptions { wheelAction?: string; // Snap - snap?: bool; + snap?: any; snapThreshold?: number; // Events diff --git a/iscroll/iscroll-tests.ts b/iscroll/iscroll-tests.ts new file mode 100644 index 0000000000..0f82c855f1 --- /dev/null +++ b/iscroll/iscroll-tests.ts @@ -0,0 +1,19 @@ +/// + +var myScroll1 = new iScroll('wrapper'); +var myScroll2 = new iScroll('wrapper', { hScrollbar: false, vScrollbar: false }); +var myScroll3= new iScroll('wrapper', { + snap: true, + momentum: false, + hScrollbar: false, + vScrollbar: false +}); +var myScroll4 = new iScroll('wrapper', { + snap: 'li', + momentum: false, + hScrollbar: false, + vScrollbar: false +}); +var myScroll6 = new iScroll('wrapper', { scrollbarClass: 'myScrollbar' }); + +myScroll1.refresh(); \ No newline at end of file diff --git a/swipeview/swipeview-1.0.d.ts b/swipeview/swipeview-1.0.d.ts new file mode 100644 index 0000000000..52ca9ecff6 --- /dev/null +++ b/swipeview/swipeview-1.0.d.ts @@ -0,0 +1,46 @@ +// Type definitions for SwipeView 1.0 +// Project: http://cubiq.org/swipeview +// Definitions by: Boris Yankov +// Definitions: https://github.com/borisyankov/DefinitelyTyped + + +interface SwipeViewEvent { + (fn: Function): void; +} + +interface SwipeViewOptions { + text?: string; + numberOfPages?: number; + snapThreshold?: number; + hastyPageFlip?: bool; + loop?: bool; +} + +interface PageHTMLElement extends HTMLElement { + dataset: any; +} + +class SwipeView { + + masterPages: PageHTMLElement[]; + currentMasterPage: number; + wrapper: HTMLElement; + slider: HTMLElement; + + constructor (element: string); + constructor (element: string, options: SwipeViewOptions); + + destroy(): void; + refreshSize(): void; + updatePageCount(n: number): void; + goToPage(p: number): void; + next(): void; + prev(): void; + handleEvent(e: Event): void; + + onFlip: SwipeViewEvent; + onMoveOut: SwipeViewEvent; + onMoveIn: SwipeViewEvent; + onTouchStart: SwipeViewEvent; + +} \ No newline at end of file diff --git a/swipeview/swipeview-tests.ts b/swipeview/swipeview-tests.ts new file mode 100644 index 0000000000..3bb9c152f3 --- /dev/null +++ b/swipeview/swipeview-tests.ts @@ -0,0 +1,252 @@ +/// + +function demo1() { + document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); + +var + el, + i, + page, + dots = document.querySelectorAll('#nav li'), + slides = [ + { + img: 'images/pic01.jpg', + width: 300, + height: 213, + desc: 'Piazza del Duomo, Florence, Italy' + }, + { + img: 'images/pic02.jpg', + width: 300, + height: 164, + desc: 'Tuscan Landscape' + } + ]; + + var gallery = new SwipeView('#wrapper', { numberOfPages: slides.length }); + + // Load initial data + for (i = 0; i < 3; i++) { + page = i == 0 ? slides.length - 1 : i - 1; + el = document.createElement('img'); + el.className = 'loading'; + el.src = slides[page].img; + el.width = slides[page].width; + el.height = slides[page].height; + el.onload = function () { this.className = ''; } + gallery.masterPages[i].appendChild(el); + + el = document.createElement('span'); + el.innerHTML = slides[page].desc; + gallery.masterPages[i].appendChild(el) + } + + gallery.onFlip(function () { + var el, + upcoming, + i; + + for (i = 0; i < 3; i++) { + upcoming = gallery.masterPages[i].dataset.upcomingPageIndex; + + if (upcoming != gallery.masterPages[i].dataset.pageIndex) { + el = gallery.masterPages[i].querySelector('img'); + el.className = 'loading'; + el.src = slides[upcoming].img; + el.width = slides[upcoming].width; + el.height = slides[upcoming].height; + + el = gallery.masterPages[i].querySelector('span'); + el.innerHTML = slides[upcoming].desc; + } + } + }); + + gallery.onMoveOut(function () { + gallery.masterPages[gallery.currentMasterPage].className = gallery.masterPages[gallery.currentMasterPage].className.replace(/(^|\s)swipeview-active(\s|$)/, ''); + }); + + gallery.onMoveIn(function () { + var className = gallery.masterPages[gallery.currentMasterPage].className; + /(^|\s)swipeview-active(\s|$)/.test(className) || (gallery.masterPages[gallery.currentMasterPage].className = !className ? 'swipeview-active' : className + ' swipeview-active'); + }); +} + +function demo2() { +var carousel: SwipeView, + el, + i, + page, + slides = [ + 'Swipe to know more >>>
Or scroll down for Lorem Ipsum', + '1. A robot may not injure a human being or, through inaction, allow a human being to come to harm.', + '2. A robot must obey the orders given to it by human beings, except where such orders would conflict with the First Law.', + '3. A robot must protect its own existence as long as such protection does not conflict with the First or Second Laws.' + ]; + + carousel = new SwipeView('#wrapper', { + numberOfPages: slides.length, + hastyPageFlip: true + }); + + // Load initial data + for (i = 0; i < 3; i++) { + page = i == 0 ? slides.length - 1 : i - 1; + + el = document.createElement('span'); + el.innerHTML = slides[page]; + carousel.masterPages[i].appendChild(el) + } + + carousel.onFlip(function () { + var el, + upcoming, + i; + + for (i = 0; i < 3; i++) { + upcoming = carousel.masterPages[i].dataset.upcomingPageIndex; + + if (upcoming != carousel.masterPages[i].dataset.pageIndex) { + el = carousel.masterPages[i].querySelector('span'); + el.innerHTML = slides[upcoming]; + } + } + }); +} + +function demo3() { + document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); + + window.addEventListener('load', function () { + var ereader: SwipeView, + el, + i, + pageIndex, + pages = [], + req = new XMLHttpRequest(); + + ereader = new SwipeView('#wrapper', { hastyPageFlip: true }); + + // Ajax request + req.open('GET', 'flowers.txt', true); + req.onreadystatechange = function () { + if (req.readyState != 4) return; + + paginate(req.status != 200 && req.status != 304 ? false : req.responseText); + + req = null; + } + req.send(null); + + function paginate(book) { + var that = this, + container, + helper, + words = [], + segment, + wordCount = 80, + avgWordCount = 0, + progressTotal = 0, + progressCurrent = 0, + progressMaxWidth = document.getElementById('progressbar').clientWidth, + progressToBookRatio = 0, + progressBar = document.querySelector('#progressbar > span'), + size; + + if (!book) return; + + book = book.replace(/\n\n/g, '

').replace(/\n/g, ' '); + progressTotal = book.length; + progressToBookRatio = progressMaxWidth / book.length; + + container = document.createElement('div'); + container.style.visibility = 'hidden'; + container.innerHTML = '
'; + ereader.slider.appendChild(container); + helper = document.getElementById('ereader-helper'); + helper.innerHTML = ''; + + var loopy = function () { + words = book.split(' ', wordCount); + segment = words.join(' '); + helper.innerHTML = segment; + + if (helper.offsetHeight > ereader.wrapperHeight) { + if (size == -1) { + words.pop(); + segment = words.join(' '); + + pages.push(segment); + book = book.substr(segment.length); + avgWordCount = Math.round((wordCount + avgWordCount) / 2); + wordCount = avgWordCount; + size = 0; + progressTotal -= segment.length; + } else { + size = 1; + wordCount--; + } + } else { + if (size == 1) { + pages.push(segment); + book = book.substr(segment.length); + avgWordCount = Math.round((wordCount + avgWordCount) / 2); + wordCount = avgWordCount; + size = 0; + progressTotal -= segment.length; + } else { + if (segment == book) { + pages.push(segment); + book = ''; + } + + size = -1; + wordCount++; + } + } + + if (book) { + progressBar.style.width = 150 - Math.round(progressToBookRatio * progressTotal) + 'px'; + setTimeout(loopy, 1); + } else { + book = null; + words = null; + segment = null; + helper.innerHTML = ''; + ereader.slider.removeChild(container); + + ereader.updatePageCount(pages.length); + ereader.masterPages[0].dataset.pageIndex = pages.length - 1; + ereader.masterPages[0].dataset.upcomingPageIndex = ereader.masterPages[0].dataset.pageIndex; + + // Load initial data + for (i = 0; i < 3; i++) { + pageIndex = i == 0 ? pages.length - 1 : i - 1; + el = document.createElement('div'); + el.innerHTML = pages[pageIndex]; + ereader.masterPages[i].appendChild(el) + } + + document.getElementById('loading').style.display = 'none'; + } + } + + loopy(); + } + + ereader.onFlip(function () { + var el, + upcoming, + i; + + for (i = 0; i < 3; i++) { + upcoming = ereader.masterPages[i].dataset.upcomingPageIndex; + + if (upcoming != ereader.masterPages[i].dataset.pageIndex) { + el = ereader.masterPages[i].querySelector('div'); + el.innerHTML = pages[upcoming]; + } + } + }); + }, false); +} \ No newline at end of file diff --git a/youtube/youtube.d.ts b/youtube/youtube.d.ts index 8056271380..b1c1e43140 100644 --- a/youtube/youtube.d.ts +++ b/youtube/youtube.d.ts @@ -1,24 +1,31 @@ // Type definitions for YouTube [No version numbering] // Project: https://developers.google.com/youtube/ // Definitions by: Daz Wilkin +// Updated by: Ian Obermiller // Definitions: https://github.com/borisyankov/DefinitelyTyped -// I'm a TypeScript noob so please be gentle! +module YT { + interface EventArgs { + target: Player; + data: any; + } -module Google.YT { - interface Event { - (event: any): void; + interface EventHandler { + (event: EventArgs): void; } + export interface Events { - onReady?: Event; - onPlayback?: Event; - onStateChange?: Event; + onReady?: EventHandler; + onPlayback?: EventHandler; + onStateChange?: EventHandler; } + export enum ListType { search, user_uploads, playlist, } + export interface PlayerVars { autohide?: number; autoplay?: number; @@ -42,91 +49,104 @@ module Google.YT { start?: number; theme?: string; } + export interface PlayerOptions { - width: number; - height: number; - videoId: string; - playerVars: PlayerVars; - events: Events; + width?: number; + height?: number; + videoId?: string; + playerVars?: PlayerVars; + events?: Events; } - interface LoadVideoByTestId { + + interface VideoByIdParams { videoId: string; - startSeconds: number; - endSeconds: number; - suggestedQuality: string; + startSeconds?: number; + endSeconds?: number; + suggestedQuality?: string; } - export interface Player { - + + interface VideoByUrlParams { + mediaContentUrl: string; + startSeconds?: number; + endSeconds?: number; + suggestedQuality?: string; + } + + export class Player { // Constructor - new (string, playerOptions:PlayerOptions): any; + constructor(id: string, playerOptions: PlayerOptions); // Queueing functions - //loadVideoById:(videoId: string, startSeconds: number, suggestedQuality: string)=> void; - loadVideoById:(LoadVideoByTestId)=> void; + loadVideoById(videoId: string, startSeconds?: number, suggestedQuality?: string): void; + loadVideoById(VideoByIdParams): void; + cueVideoById(videoId: string, startSeconds?: number, suggestedQuality?: string): void; + cueVideoById(VideoByIdParams): void; + + loadVideoByUrl(mediaContentUrl: string, startSeconds?: number, suggestedQuality?: string): void; + loadVideoByUrl(VideoByUrlParams): void; + cueVideoByUrl(mediaContentUrl: string, startSeconds?: number, suggestedQuality?: string): void; + cueVideoByUrl(VideoByUrlParams): void; // Properties size; // Playing - playVideo: () =>void; - pauseVideo: () =>void; - stopVideo: () =>void; - seekTo: (seconds:number, allowSeekAhead:bool) =>void; - clearVideo: () =>void; + playVideo(): void; + pauseVideo(): void; + stopVideo(): void; + seekTo(seconds:number, allowSeekAhead:bool): void; + clearVideo(): void; // Playlist - nextVideo: () =>void; - previousVideo: () =>void; - playVideoAt:(index: number) =>void; + nextVideo(): void; + previousVideo(): void; + playVideoAt(index: number): void; // Volume - mute: () =>void; - unMute: () =>void; - isMuted: () =>bool; - setVolume: (volume: number) =>void; - getVolume: () =>number; + mute(): void; + unMute(): void; + isMuted(): bool; + setVolume(volume: number): void; + getVolume(): number; // Sizing - setSize: (width: number, height: number) =>any; + setSize(width: number, height: number): any; // Playback - getPlaybackRate: () =>number; - setPlaybackRate: (suggestedRate:number) =>void; + getPlaybackRate(): number; + setPlaybackRate(suggestedRate:number): void; getAvailablePlaybackRates(): number[]; // Behavior - setLoop: (loopPlaylists: bool) =>void; - setShuffle: (shufflePlaylist: bool) =>void; + setLoop(loopPlaylists: bool): void; + setShuffle(shufflePlaylist: bool): void; // Status - getVideoLoadedFraction: () =>number; - getPlayerState: () =>number; - getCurrentTime:()=> number; - getVideoStartBytes:()=>number; - getVideoBytesLoaded: () =>number; - getVideoBytesTotal: () =>number; + getVideoLoadedFraction(): number; + getPlayerState(): number; + getCurrentTime(): number; + getVideoStartBytes(): number; + getVideoBytesLoaded(): number; + getVideoBytesTotal(): number; // Information - getDuration: () =>number; - getVideoUrl: () =>string; - getVideoEmbedCode: () =>string; + getDuration(): number; + getVideoUrl(): string; + getVideoEmbedCode(): string; // Playlist - getPlaylist: () =>any[]; - getPlaylistIndex:()=>number; + getPlaylist(): any[]; + getPlaylistIndex(): number; // Event Listener - addEventListener: (event: string, listener: string) =>void; - + addEventListener(event: string, listener: string): void; } -} -interface YT { - Player: Google.YT.Player; - PlayerState: { - BUFFERING: number; - CUED: number; - ENDED: number; - PAUSED: number; - PLAYING: number; + + export enum PlayerState { + BUFFERING, + CUED, + ENDED, + PAUSED, + PLAYING }; -} \ No newline at end of file +}