Skip to content

Instantly share code, notes, and snippets.

@screeny05
Created January 29, 2018 11:27
Show Gist options
  • Save screeny05/3f0d290adcc8f361c98be8afb7643380 to your computer and use it in GitHub Desktop.
Save screeny05/3f0d290adcc8f361c98be8afb7643380 to your computer and use it in GitHub Desktop.
// jquery.d.ts
interface JQuery {
toggleClass(name: string, add: boolean): JQuery;
}
interface JQueryStatic {
(...any): JQuery;
fn: JQuery;
}
declare const $: JQueryStatic;
// shopware.d.ts
interface SwStateManager {
}
declare abstract class SwPluginPrototype {
_name: string;
$el: JQuery;
opts: any;
eventSuffix: string;
_events: any;
_destroy(): this;
_on($el: JQuery, event: string, ...args): this;
_off($el: JQuery, event: string): this;
getName(): string;
getEventName(event: string): string;
getElement(): JQuery;
getOptions(): any;
getOption(): any;
setOption(key: string, value: any): this;
applyDataAttributes(shouldDeserialize: boolean): any;
}
interface SwPluginPrototypeConstructor {
new(): SwPluginPrototype;
}
interface SwPluginDefinition {
defaults?: any;
init();
destroy?(): void;
update?(): void;
}
interface SwPluginsCollection {
swAddArticle: SwPluginDefinition;
swAddressEditor: SwPluginDefinition;
swAddressSelection: SwPluginDefinition;
swAjaxProductNavigation: SwPluginDefinition;
swAjaxVariant: SwPluginDefinition;
swAjaxWishlist: SwPluginDefinition;
swAutoSubmit: SwPluginDefinition;
swCaptcha: SwPluginDefinition;
swCollapseCart: SwPluginDefinition;
swCollapsePanel: SwPluginDefinition;
swDropdownMenu: SwPluginDefinition;
swEmotionLoader: SwPluginDefinition;
swEmotion: SwPluginDefinition;
swEmotionBanner: SwPluginDefinition;
swEmotionVideo: SwPluginDefinition;
swFilterComponent: SwPluginDefinition;
swFormPolyfill: SwPluginDefinition;
swImageGallery: SwPluginDefinition;
swImageSlider: SwPluginDefinition;
swImageZoom: SwPluginDefinition;
swInfiniteScolling: SwPluginDefinition;
swJumpToTab: SwPluginDefinition;
swLastSeenProducts: SwPluginDefinition;
swListingActions: SwPluginDefinition;
swMenuScroller: SwPluginDefinition;
swModalbox: SwPluginDefinition;
swNewsletter: SwPluginDefinition;
swOffcanvasButton: SwPluginDefinition;
swOffcanvasMenu: SwPluginDefinition;
swOffcanvasHtmlPanel: SwPluginDefinition;
swPanelAutoResizer: SwPluginDefinition;
swPreloaderButton: SwPluginDefinition;
swProductCompareAdd: SwPluginDefinition;
swProductCompareMenu: SwPluginDefinition;
swProductSlider: SwPluginDefinition;
swPseudoText: SwPluginDefinition;
swRangeSlider: SwPluginDefinition;
swRegister: SwPluginDefinition;
swScrollAnimate: SwPluginDefinition;
swSearch: SwPluginDefinition;
swSelectboxReplacement: SwPluginDefinition;
swShippingPayment: SwPluginDefinition;
swSubCategoryNav: SwPluginDefinition;
swTabMenu: SwPluginDefinition;
}
type SwPluginDefaultFn = (options?: any) => this;
interface JQueryStatic {
subscribe(name: string, handler: Function): void;
unsubscribe(name: string, handler: Function): void;
publish(name: string, data: any[]): void;
plugin(name: string, plugin: SwPluginDefinition): void;
overridePlugin(pluginName: string, override: any): void;
extendsPlugin(pluginName: string, basePluginName: string, override: any): void;
PluginBase: SwPluginPrototypeConstructor;
}
interface JQuery {
swAddArticle: SwPluginDefaultFn;
swAddressEditor: SwPluginDefaultFn;
swAddressSelection: SwPluginDefaultFn;
swAjaxProductNavigation: SwPluginDefaultFn;
swAjaxVariant: SwPluginDefaultFn;
swAjaxWishlist: SwPluginDefaultFn;
swAutoSubmit: SwPluginDefaultFn;
swCaptcha: SwPluginDefaultFn;
swCollapseCart: SwPluginDefaultFn;
swCollapsePanel: SwPluginDefaultFn;
swDropdownMenu: SwPluginDefaultFn;
swEmotionLoader: SwPluginDefaultFn;
swEmotion: SwPluginDefaultFn;
swEmotionBanner: SwPluginDefaultFn;
swEmotionVideo: SwPluginDefaultFn;
swFilterComponent: SwPluginDefaultFn;
swFormPolyfill: SwPluginDefaultFn;
swImageGallery: SwPluginDefaultFn;
swImageSlider: SwPluginDefaultFn;
swImageZoom: SwPluginDefaultFn;
swInfiniteScolling: SwPluginDefaultFn;
swJumpToTab: SwPluginDefaultFn;
swLastSeenProducts: SwPluginDefaultFn;
swListingActions: SwPluginDefaultFn;
swMenuScroller: SwPluginDefaultFn;
swModalbox: SwPluginDefaultFn;
swNewsletter: SwPluginDefaultFn;
swOffcanvasButton: SwPluginDefaultFn;
swOffcanvasMenu: SwPluginDefaultFn;
swOffcanvasHtmlPanel: SwPluginDefaultFn;
swPanelAutoResizer: SwPluginDefaultFn;
swPreloaderButton: SwPluginDefaultFn;
swProductCompareAdd: SwPluginDefaultFn;
swProductCompareMenu: SwPluginDefaultFn;
swProductSlider: SwPluginDefaultFn;
swPseudoText: SwPluginDefaultFn;
swRangeSlider: SwPluginDefaultFn;
swRegister: SwPluginDefaultFn;
swScrollAnimate: SwPluginDefaultFn;
swSearch: SwPluginDefaultFn;
swSelectboxReplacement: SwPluginDefaultFn;
swShippingPayment: SwPluginDefaultFn;
swSubCategoryNav: SwPluginDefaultFn;
swTabMenu: SwPluginDefaultFn;
}
declare var PluginsCollection: SwPluginsCollection;
// plugin.ts
interface FlyoutOptions {
foobar: string;
quxbaz: number;
}
class Flyout extends $.PluginBase implements SwPluginDefinition {
defaults: FlyoutOptions = {
foobar: '',
quxbaz: 12
}
constructor() {
super()
}
init() {
this.foobar();
this._destroy();
}
foobar(): void {
console.log('hello, world!');
}
}
$.plugin('bitFlyout', Flyout.prototype);
interface SwPluginsCollection { bitFlyout: Flyout; }
interface JQuery { bitFlyout: (options: Partial<FlyoutOptions>) => void; }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment