[TASK] Migrate EXT:backend Tabs.js to TypeScript
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Resources / Private / TypeScript / Tabs.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 $ = require('jquery');
15 import 'bootstrap';
16 import Client = require('./Storage/Client');
17
18 /**
19  * Module: TYPO3/CMS/Backend/Tabs
20  * @exports TYPO3/CMS/Backend/Tabs
21  */
22 class Tabs {
23
24   /**
25    * Resolve timestamp
26    */
27   public static getTimestamp(): number {
28     return Math.round((new Date()).getTime() / 1000);
29   }
30
31   public storage: any;
32   protected cacheTimeInSeconds = 1800;
33   protected storeLastActiveTab = true;
34
35   constructor() {
36     this.storage = Client;
37
38     const that = this;
39     $('.t3js-tabs').each(function(this: Element): void {
40       const $tabContainer: JQuery = $(this);
41       that.storeLastActiveTab = $tabContainer.data('storeLastTab') === 1;
42       const currentActiveTab = that.receiveActiveTab($tabContainer.attr('id'));
43       if (currentActiveTab) {
44         $tabContainer.find('a[href="' + currentActiveTab + '"]').tab('show');
45       }
46       $tabContainer.on('show.bs.tab', (e: any) => {
47         if (that.storeLastActiveTab) {
48           const id = e.currentTarget.id;
49           const target = e.target.hash;
50           that.storeActiveTab(id, target);
51         }
52       });
53     });
54   }
55
56   /**
57    * Receive active tab from storage
58    *
59    * @param {string} id
60    * @returns {string}
61    */
62   public receiveActiveTab(id: string): string {
63     const target = this.storage.get(id) || '';
64     const expire = this.storage.get(id + '.expire') || 0;
65     if (expire > Tabs.getTimestamp()) {
66       return target;
67     }
68     return '';
69   }
70
71   /**
72    * Set active tab to storage
73    *
74    * @param {string} id
75    * @param {string} target
76    */
77   public storeActiveTab(id: string, target: string) {
78     this.storage.set(id, target);
79     this.storage.set(id + '.expire', Tabs.getTimestamp() + this.cacheTimeInSeconds);
80   }
81 }
82
83 const tabs = new Tabs();
84 export = tabs;