Merge pull request #25682 from denisname/select2-jquery-v2

select2: jQuery v1 and v2 type definition compatibility
This commit is contained in:
Ron Buckton
2018-05-15 09:23:11 -07:00
committed by GitHub
2 changed files with 49 additions and 13 deletions

View File

@@ -3,12 +3,39 @@
// Definitions by: Boris Yankov <https://github.com/borisyankov>
// denisname <https://github.com/denisname>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3
// TypeScript Version: 2.6
/// <reference types="jquery"/>
/// <reference types="requirejs"/>
export as namespace Select2;
// --------------------------------------------------------------------------
// For jQuery v1 and v2 backward compatibility
// --------------------------------------------------------------------------
export type Sub<O extends string, D extends string> =
{[K in O]: (Record<D, never> & Record<string, K>)[K]}[O];
/**
* Same as jQuery v3 `JQuery.AjaxSettingsBase`.
*/
export type JQueryAjaxSettingsBase =
Pick<JQueryAjaxSettings, Sub<keyof JQueryAjaxSettings, "url">>;
/**
* Same as jQuery v3 `JQuery.EventHandlerBase`.
*/
export type JQueryEventHandlerBase<TContext extends object, T> =
(this: TContext, t: T, ...args: any[]) => void | false;
/**
* Same as jQuery v3 `JQuery.PlainObject`.
*/
export interface PlainObject<T = any> {
[key: string]: T;
}
// --------------------------------------------------------------------------
// Some Interfaces
// --------------------------------------------------------------------------
@@ -110,7 +137,7 @@ export interface Translation {
export interface DataParams {
data: OptionData; // TODO: must be data source
originalEvent: JQuery.Event;
originalEvent: BaseJQueryEventObject;
}
export interface IngParams {
@@ -118,7 +145,7 @@ export interface IngParams {
prevented: boolean;
}
export interface Event<TElement, T> extends JQuery.Event<TElement, undefined> {
export interface Event<TElement, T> extends BaseJQueryEventObject {
params: T;
}
@@ -133,10 +160,10 @@ export interface Trigger {
// Ajax Option
// --------------------------------------------------------------------------
export interface AjaxOptions<Result = DataFormat | GroupedDataFormat, RemoteResult = any> extends JQuery.Ajax.AjaxSettingsBase<any> {
export interface AjaxOptions<Result = DataFormat | GroupedDataFormat, RemoteResult = any> extends JQueryAjaxSettingsBase {
delay?: number;
url?: string | ((params: QueryOptions) => string);
data?: (params: QueryOptions) => JQuery.PlainObject;
data?: (params: QueryOptions) => PlainObject;
transport?: (settings: JQueryAjaxSettings, success?: (data: RemoteResult) => undefined, failure?: () => undefined) => void;
processResults?: (data: RemoteResult, params: QueryOptions) => ProcessedResult<Result>;
}
@@ -195,6 +222,8 @@ export interface Options<Result = DataFormat | GroupedDataFormat, RemoteResult =
// --------------------------------------------------------------------------
export interface Select2Plugin<TElement extends Node = HTMLElement> {
amd: { require: Require; };
defaults: {
set: (key: string, value: any) => void;
reset: () => void;
@@ -230,13 +259,13 @@ declare global {
trigger(events: Trigger): void;
// TODO: events "change" and "change.select2"
on(events: "select2:closing", handler?: JQuery.EventHandlerBase<TElement, Event<TElement, IngParams>>): this;
on(events: "select2:close", handler?: JQuery.EventHandlerBase<TElement, Event<TElement, {}>>): this;
on(events: "select2:opening", handler?: JQuery.EventHandlerBase<TElement, Event<TElement, IngParams>>): this;
on(events: "select2:open", handler?: JQuery.EventHandlerBase<TElement, Event<TElement, {}>>): this;
on(events: "select2:selecting", handler?: JQuery.EventHandlerBase<TElement, Event<TElement, IngParams>>): this;
on(events: "select2:select", handler?: JQuery.EventHandlerBase<TElement, Event<TElement, DataParams>>): this;
on(events: "select2:unselecting", handler?: JQuery.EventHandlerBase<TElement, Event<TElement, IngParams>>): this;
on(events: "select2:unselect", handler?: JQuery.EventHandlerBase<TElement, Event<TElement, DataParams>>): this;
on(events: "select2:closing", handler?: JQueryEventHandlerBase<TElement, Event<TElement, IngParams>>): this;
on(events: "select2:close", handler?: JQueryEventHandlerBase<TElement, Event<TElement, {}>>): this;
on(events: "select2:opening", handler?: JQueryEventHandlerBase<TElement, Event<TElement, IngParams>>): this;
on(events: "select2:open", handler?: JQueryEventHandlerBase<TElement, Event<TElement, {}>>): this;
on(events: "select2:selecting", handler?: JQueryEventHandlerBase<TElement, Event<TElement, IngParams>>): this;
on(events: "select2:select", handler?: JQueryEventHandlerBase<TElement, Event<TElement, DataParams>>): this;
on(events: "select2:unselecting", handler?: JQueryEventHandlerBase<TElement, Event<TElement, IngParams>>): this;
on(events: "select2:unselect", handler?: JQueryEventHandlerBase<TElement, Event<TElement, DataParams>>): this;
}
}

View File

@@ -733,6 +733,13 @@ $(".js-example-rtl").select2({
// =====================================================
// See: https://select2.org/advanced
$.fn.select2.amd.require(
["select2/utils", "select2/selection/single", "select2/selection/placeholder"],
(Utils: any, SingleSelection: any, Placeholder: any) => {
const CustomSelectionAdapter = Utils.Decorate(SingleSelection, Placeholder);
}
);
// TODO (Adapters)
// =====================================================