[BUGFIX] Prevent loading jsfunc.inline.js twice
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Resources / Private / TypeScript / Popover.ts
1 /*
2  * This file is part of the TYPO3 CMS project.
3  *
4  * It is free software; you can redistribute it and/or modify it under
5  * the terms of the GNU General Public License, either version 2
6  * of the License, or any later version.
7  *
8  * For the full copyright and license information, please read the
9  * LICENSE.txt file that was distributed with this source code.
10  *
11  * The TYPO3 project - inspiring people to share!
12  */
13
14 import 'bootstrap';
15 import * as $ from 'jquery';
16
17 /**
18  * Module: TYPO3/CMS/Backend/Popover
19  * API for popover windows powered by Twitter Bootstrap.
20  * @exports TYPO3/CMS/Backend/Popover
21  */
22 class Popover {
23
24   /**
25    * Default selector string.
26    *
27    * @return {string}
28    */
29   private readonly DEFAULT_SELECTOR: string = '[data-toggle="popover"]';
30
31   // noinspection JSMethodCanBeStatic
32   /**
33    * Initialize
34    */
35   public initialize(selector?: string): void {
36     selector = selector || this.DEFAULT_SELECTOR;
37     $(selector).popover();
38   }
39
40   // noinspection JSMethodCanBeStatic
41   /**
42    * Popover wrapper function
43    *
44    * @param {JQuery} $element
45    */
46   public popover($element: JQuery): void {
47     $element.popover();
48   }
49
50   // noinspection JSMethodCanBeStatic
51   /**
52    * Set popover options on $element
53    *
54    * @param {JQuery} $element
55    * @param {PopoverOptions} options
56    */
57   public setOptions($element: JQuery, options?: PopoverOptions): void {
58     options = options || {};
59     const title: string|(() => void) = options.title || $element.data('title') || '';
60     const content: string|(() => void) = options.content || $element.data('content') || '';
61     $element
62       .attr('data-original-title', (title as string))
63       .attr('data-content', (content as string))
64       .attr('data-placement', 'auto')
65       .popover(options);
66   }
67
68   // noinspection JSMethodCanBeStatic
69   /**
70    * Set popover option on $element
71    *
72    * @param {JQuery} $element
73    * @param {String} key
74    * @param {String} value
75    */
76   public setOption($element: JQuery, key: string, value: string): void {
77     $element.data('bs.popover').options[key] = value;
78   }
79
80   // noinspection JSMethodCanBeStatic
81   /**
82    * Show popover with title and content on $element
83    *
84    * @param {JQuery} $element
85    */
86   public show($element: JQuery): void {
87     $element.popover('show');
88   }
89
90   // noinspection JSMethodCanBeStatic
91   /**
92    * Hide popover on $element
93    *
94    * @param {JQuery} $element
95    */
96   public hide($element: JQuery): void {
97     $element.popover('hide');
98   }
99
100   // noinspection JSMethodCanBeStatic
101   /**
102    * Destroy popover on $element
103    *
104    * @param {Object} $element
105    */
106   public destroy($element: JQuery): void {
107     $element.popover('destroy');
108   }
109
110   // noinspection JSMethodCanBeStatic
111   /**
112    * Toggle popover on $element
113    *
114    * @param {Object} $element
115    */
116   public toggle($element: JQuery): void {
117     $element.popover('toggle');
118   }
119 }
120
121 // create an instance, initialize and return it
122 const popover: Popover = new Popover();
123 popover.initialize();
124
125 // @deprecated since TYPO3 v9, will be removed in TYPO3 v10 prevent global object usage
126 TYPO3.Popover = popover;
127 export = popover;