diff --git a/gulp/config.js b/gulp/config.js index 4c89f6131e..55f00cefff 100644 --- a/gulp/config.js +++ b/gulp/config.js @@ -81,7 +81,8 @@ module.exports = { './_build/assets/css/foundation-rtl.css', './_build/assets/css/foundation-rtl.css.map', '_build/assets/js/foundation.js', - '_build/assets/js/foundation.js.map' + '_build/assets/js/foundation.js.map', + 'js/typescript/foundation.d.ts' ], // Tests diff --git a/gulp/tasks/deploy.js b/gulp/tasks/deploy.js index 6af30d780d..b0e0d18754 100644 --- a/gulp/tasks/deploy.js +++ b/gulp/tasks/deploy.js @@ -52,6 +52,7 @@ gulp.task('deploy:dist', function(done) { var jsFilter = filter(['**/*.js'], { restore: true }); var cssSourcemapFilter = filter(['**/*.css.map'], { restore: true }); var jsSourcemapFilter = filter(['**/*.js.map'], { restore: true }); + var tsFilter = filter(['**/*.ts'], { restore: true }); return gulp.src(CONFIG.DIST_FILES) .pipe(plumber()) @@ -88,6 +89,13 @@ gulp.task('deploy:dist', function(done) { .pipe(uglify()) .pipe(sourcemaps.write('.')) .pipe(gulp.dest('./dist/js')) + .pipe(jsFilter.restore) + + // --- TypeScript files --- + // * Copy typescript files to the dist folder + .pipe(tsFilter) + .pipe(gulp.dest('./dist/js')) + .pipe(tsFilter.restore) .on('finish', done); }); diff --git a/js/typescript/foundation.d.ts b/js/typescript/foundation.d.ts new file mode 100644 index 0000000000..a0e6e063bc --- /dev/null +++ b/js/typescript/foundation.d.ts @@ -0,0 +1,496 @@ +// Type definitions for Foundation Sites v6.3.1 +// Project: http://foundation.zurb.com/ +// Github: https://github.com/zurb/foundation-sites +// +// Definitions by: Sam Vloeberghs +// Original Definitions: https://github.com/samvloeberghs/foundation-sites-typings + +declare module FoundationSites { + + // http://foundation.zurb.com/sites/docs/abide.html#javascript-reference + interface Abide { + requiredChecked(element: JQuery): boolean; + findFormError(element: JQuery): JQuery; + findLabel(element: JQuery): boolean; + addErrorClasses(element: JQuery): void; + removeRadioErrorClasses(groupName: string): void; + removeErrorClasses(element: JQuery): void; + validateInput(element: JQuery): boolean; + validateForm(): boolean; + validateText(element: JQuery, pattern: string): boolean; + validateRadio(groupName: string): boolean; + matchValidation(element: JQuery, validators: string, required: boolean): boolean; + resetForm(): void; + destroy(): void; + } + + interface AbideDefaults { + validateOn: string; + labelErrorClass: string; + inputErrorClass: string; + formErrorSelector: string; + formErrorClass: string; + liveValidate: boolean; + validateOnBlur: boolean; + patterns: IAbidePatterns; + validators: any; // TODO, maybe there is a better solution to describe how this object may look like + } + + interface IAbidePatterns { + alpha?: RegExp; + alpha_numeric?: RegExp; + integer?: RegExp; + number?: RegExp; + card?: RegExp; + cvv?: RegExp; + email ?: RegExp; + url?: RegExp; + domain?: RegExp; + datetime?: RegExp; + date?: RegExp; + time?: RegExp; + dateISO?: RegExp; + month_day_year?: RegExp; + day_month_year?: RegExp; + color?: RegExp; + } + + interface IAbideOptions { + validateOn?: string; + labelErrorClass?: string; + inputErrorClass?: string; + formErrorSelector?: string; + formErrorClass?: string; + liveValidate?: boolean; + validators?: any; + } + + // http://foundation.zurb.com/sites/docs/accordion.html#javascript-reference + interface Accordion { + toggle($target: JQuery): void; + down($target: JQuery, firstTime: boolean): void; + up($target: JQuery): void; + destroy(): void; + } + + interface IAccordionOptions { + slideSpeed?: number + multiExpand?: boolean; + allowAllClosed?: boolean; + } + + // http://foundation.zurb.com/sites/docs/accordion-menu.html#javascript-reference + interface AccordionMenu { + hideAll(): void; + toggle($target: JQuery): void; + down($target: JQuery, firstTime: boolean): void; + up($target: JQuery): void; + destroy(): void; + } + + interface IAccordionMenuOptions { + slideSpeed?: number; + multiOpen?: boolean; + } + + // http://foundation.zurb.com/sites/docs/drilldown-menu.html#javascript-reference + interface Drilldown { + destroy(): void; + } + + interface IDrilldownOptions { + backButton?: string; + wrapper?: string; + parentLink?: boolean; + closeOnClick?: boolean; + } + + // http://foundation.zurb.com/sites/docs/dropdown.html#javascript-reference + interface Dropdown { + getPositionClass(): string; + open(): void; + close(): void; + toggle(): void; + destroy(): void; + } + + interface IDropdownOptions { + hoverDelay?: number; + hover?: boolean; + hoverPane?: boolean; + vOffset?: number; + hOffset?: number; + positionClass?: string; + trapFocus?: boolean; + autoFocus?: boolean; + closeOnClick?: boolean; + } + + // http://foundation.zurb.com/sites/docs/dropdown-menu.html#javascript-reference + interface DropdownMenu { + destroy(): void; + } + + interface IDropdownMenuOptions { + disableHover?: boolean; + autoclose?: boolean; + hoverDelay?: number; + clickOpen?: boolean; + closingTime?: number; + alignment?: string; + closeOnClick?: boolean; + verticalClass?: string; + rightClass?: string; + forceFollow?: boolean; + } + + // http://foundation.zurb.com/sites/docs/equalizer.html#javascript-reference + interface Equalizer { + getHeights(cb: Function): Array; + getHeightsByRow(cb: Function): Array; + applyHeight(heights: Array): void; + applyHeightByRow(groups: Array): void; + destroy(): void; + } + + interface IEqualizerOptions { + equalizeOnStack?: boolean; + equalizeByRow?: boolean; + equalizeOn?: string; + } + + // http://foundation.zurb.com/sites/docs/interchange.html#javascript-reference + interface Interchange { + replace(path: string): void; + destroy(): void; + } + + interface IInterchangeOptions { + rules?: Array + } + + // http://foundation.zurb.com/sites/docs/magellan.html#javascript-reference + interface Magellan { + calcPoints(): void; + scrollToLoc(location: string): void; + reflow(): void; + destroy(): void; + } + + interface IMagellanOptions { + animationDuration?: number; + animationEasing?: string; + threshold?: number; + activeClass?: string; + deepLinking?: boolean; + barOffset?: number; + } + + // http://foundation.zurb.com/sites/docs/offcanvas.html#javascript-reference + interface OffCanvas { + reveal(isRevealed: boolean): void; + open(event: Event, trigger: JQuery): void; + close(cb?: Function): void; + toggle(event: Event, trigger: JQuery): void; + destroy(): void; + } + + interface IOffCanvasOptions { + closeOnClick?: boolean; + transitionTime?: number; + position?: string; + forceTop?: boolean; + isRevealed?: boolean; + revealOn?: string; + autoFocus?: boolean; + revealClass?: string; + trapFocus?: boolean; + } + + // http://foundation.zurb.com/sites/docs/orbit.html#javascript-reference + interface Orbit { + geoSync(): void; + changeSlide(isLTR: boolean, chosenSlide?: JQuery, idx?: number): void; + destroy(): void; + } + + interface IOrbitOptions { + bullets?: boolean; + navButtons?: boolean; + animInFromRight?: string; + animOutToRight?: string; + animInFromLeft?: string; + animOutToLeft?: string; + autoPlay?: boolean; + timerDelay?: number; + infiniteWrap?: boolean; + swipe?: boolean; + pauseOnHover?: boolean; + accessible?: boolean; + containerClass?: string; + slideClass?: string; + boxOfBullets?: string; + nextClass?: string; + prevClass?: string; + useMUI?: boolean; + } + + // http://foundation.zurb.com/sites/docs/reveal.html#javascript-reference + interface Reveal { + open(): void; + toggle(): void; + close(): void; + destroy(): void; + } + + interface IRevealOptions { + animationIn?: string; + animationOut?: string; + showDelay?: number; + hideDelay?: number; + closeOnClick?: boolean; + closeOnEsc?: boolean; + multipleOpened?: boolean; + vOffset?: number; + hOffset?: number; + fullScreen?: boolean; + btmOffsetPct?: number; + overlay?: boolean; + resetOnClose?: boolean; + deepLink?: boolean; + } + + // http://foundation.zurb.com/sites/docs/slider.html#javascript-reference + interface Slider { + destroy(): void; + } + + interface ISliderOptions { + start?: number; + end?: number; + step?: number; + initialStart ?: number; + initialEnd?: number; + binding?: boolean; + clickSelect?: boolean; + vertical?: boolean; + draggable?: boolean; + disabled?: boolean; + doubleSided?: boolean; + decimal?: number; + moveTime?: number; + disabledClass?: string; + } + + // http://foundation.zurb.com/sites/docs/sticky.html#javascript-reference + interface Sticky { + destroy(): void; + } + + interface IStickyOptions { + container?: string; + stickTo?: string; + anchor?: string; + topAnchor?: string; + btmAnchor?: string; + marginTop?: number; + marginBottom?: number; + stickyOn?: string; + stickyClass?: string; + containerClass?: string; + checkEvery?: number; + } + + // http://foundation.zurb.com/sites/docs/tabs.html#javascript-reference + interface Tabs { + selectTab(element: JQuery | string): void; + destroy(): void; + } + + interface ITabsOptions { + autoFocus?: boolean; + wrapOnKeys?: boolean; + matchHeight?: boolean; + linkClass?: string; + panelClass?: string; + } + + // http://foundation.zurb.com/sites/docs/toggler.html#javascript-reference + interface Toggler { + toggle(): void; + destroy(): void; + } + + interface ITogglerOptions { + animate?: boolean; + } + + // http://foundation.zurb.com/sites/docs/tooltip.html#javascript-reference + interface Tooltip { + show(): void; + hide(): void; + toggle(): void; + destroy(): void; + } + + interface ITooltipOptions { + hoverDelay?: number; + fadeInDuration?: number; + fadeOutDuration?: number; + disableHover?: boolean; + templateClasses?: string; + tooltipClass?: string; + triggerClass?: string; + showOn?: string; + template?: string; + tipText?: string; + clickOpen?: boolean; + positionClass?: string; + vOffset?: number; + hOffset?: number; + } + + // Utilities + // --------- + + interface Box { + ImNotTouchingYou(element: Object, parent?: Object, lrOnly?: boolean, tbOnly?: boolean): boolean; + GetDimensions(element: Object): Object; + GetOffsets(element: Object, anchor: Object, position: string, vOffset: number, hOffset: number, isOverflow: boolean): Object; + } + + interface Keyboard { + parseKey(event: any): string; + handleKey(event: any, component: any, functions: any): void; + findFocusable($element: Object): Object; + } + + interface MediaQuery { + get(size: string): string; + atLeast(size: string): boolean; + queries: Array; + current: string; + } + + interface Motion { + animateIn(element: Object, animation: any, cb: Function): void; + animateOut(element: Object, animation: any, cb: Function): void; + } + + interface Move { + // TODO + } + + interface Nest { + Feather(menu: any, type: any): void; + Burn(menu: any, type: any): void; + } + + interface Timer { + start(): void; + restart(): void; + pause(): void; + } + + interface Touch { + // TODO :extension on jQuery + } + + interface Triggers { + // TODO :extension on jQuery + } + + interface FoundationSitesStatic { + version: string; + + rtl(): boolean; + plugin(plugin: Object, name: string): void; + registerPlugin(plugin: Object): void; + unregisterPlugin(plugin: Object): void; + reInit(plugins: Array): void; + GetYoDigits(length: number, namespace?: string): string; + reflow(elem: Object, plugins?: Array|string): void; + getFnName(fn: string): string; + transitionend(): string; + + util: { + throttle(func: (...args: any[]) => any, delay: number): (...args: any[]) => any; + }; + + Abide: { + new(element: JQuery, options?: IAbideOptions): Abide; + defaults: AbideDefaults; + } + Accordion: { + new(element: JQuery, options?: IAccordionOptions): Accordion; + } + AccordionMenu: { + new(element: JQuery, options?: IAccordionMenuOptions): AccordionMenu; + } + Drilldown: { + new(element: JQuery, options?: IDrilldownOptions): Drilldown; + } + Dropdown: { + new(element: JQuery, options?: IDropdownOptions): Dropdown; + } + DropdownMenu: { + new(element: JQuery, options?: IDropdownMenuOptions): DropdownMenu; + } + Equalizer: { + new(element: JQuery, options?: IEqualizerOptions): Equalizer; + } + Interchange: { + new(element: JQuery, options?: IInterchangeOptions): Interchange; + } + Magellan: { + new(element: JQuery, options?: IMagellanOptions): Magellan; + } + OffCanvas: { + new(element: JQuery, options?: IOffCanvasOptions): OffCanvas; + } + Orbit: { + new(element: JQuery, options?: IOrbitOptions): Orbit; + } + Reveal: { + new(element: JQuery, options?: IRevealOptions): Reveal; + }; + Slider: { + new(element: JQuery, options?: ISliderOptions): Slider; + } + Sticky: { + new(element: JQuery, options?: IStickyOptions): Sticky; + } + Tabs: { + new(element: JQuery, options?: ITabsOptions): Tabs; + } + Toggler: { + new(element: JQuery, options?: ITogglerOptions): Toggler; + } + Tooltip: { + new(element: JQuery, options?: ITooltipOptions): Tooltip; + } + + // utils + Box: Box; + Keyboard: Keyboard; + MediaQuery: MediaQuery; + Motion: Motion; + Move: Move; + Nest: Nest; + Timer: Timer; + Touch: Touch; + Triggers: Triggers; + + } + +} + +interface JQuery { + foundation(method?: string|Array, $element?: JQuery): JQuery; +} + +declare var Foundation: FoundationSites.FoundationSitesStatic; + +declare module "Foundation" { + export = Foundation; +}