PageSourceSearch

https://methishotel.it/modules/htaccess-to-nginx/global.js?1744897815

js methishotel.it collected 2026-10-06 03:55:05 UTC 3,930 bytes, 118 lines download raw bytes

1// Copyright 1999-2022. Parallels IP Holdings GmbH. All Rights Reserved.
2
3(() => {
4class ModuleHtaccessToNginxEvent {
5    constructor() {
6        this.eventList = [];
7    }
8
9    on(event, callback) {
10        if (!this.eventList[event]) {
11            this.eventList[event] = [];
12        }
13
14        this.eventList[event].push(callback);
15        return this;
16    }
17
18    emit(event) {
19        if (!this.eventList[event]) return;
20
21        this.eventList[event].forEach(cb => cb.call(null))
22    }
23}
24
25const elementObserver = selector => {
26    const event = new ModuleHtaccessToNginxEvent();
27
28    let elementExistBefore = false;
29
30    const observer = new MutationObserver(() => {
31        const el = document.querySelector(selector)
32
33        if (!elementExistBefore && el) {
34            elementExistBefore = true;
35            event.emit('added');
36        } else if (elementExistBefore && !el) {
37            elementExistBefore = false;
38            event.emit('removed');
39        }
40    });
41
42    const container = document.documentElement || document.body;
43    observer.observe(container, {
44        childList: true,
45        subtree: true,
46    });
47
48    return event;
49}
50
51const http2Nginx = () => {
52    let settingsField = $('additionalNginx-additionalNginxSettings');
53    if (null == settingsField) {
54        return;
55    }
56
57    $$("head").first().insert(
58        new Element("script", {type: "text/javascript", src: "/modules/htaccess-to-nginx/rewrite-conf.js"})
59    );
60
61    var htaccessField = new Element('textarea', {
62        'class': 'code pul-textarea pul-textarea--size-fill',
63        'name': 'htaccess',
64        'id': 'htaccess',
65        'rows': 6,
66        'cols': 80
67    });
68
69    var convertBtn = new Element('span', {'class': 'btn action'}).insert(
70        new Element('button').update('Convert to nginx')
71    );
72    convertBtn.observe('click', function(event) {
73        Event.stop(event);
74        let htaccess = htaccessField.getValue();
75        let nginx = RewriteConf.convert(htaccess);
76        let nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, "value").set;
77        nativeInputValueSetter.call(settingsField, nginx);
78        let event1 = new Event('input', {bubbles: true});
79        settingsField.dispatchEvent(event1);
80    });
81
82    var htaccessRow = new Element('div', {'class': 'pul-section-item pul-form-field pul-form-field-text pul-form-field-text--multiline'}).insert(
83        new Element('div', {'class': 'pul-section-item__title'}).insert(
84            new Element('label', {'for': 'htaccess'}).insert('.htaccess content ')
85        )
86    ).insert(
87        new Element('div', {'class': 'pul-section-item__value'}).insert(htaccessField)
88            .insert(new Element('p', {'class': 'hint'}).update('Attention: .htaccess converter is an experimental feature. Always check conversion results for possible issues.'))
89            .insert(convertBtn)
90    );
91
92    var settingsRow = settingsField.up('.pul-form-field');
93
94    var toggleLink = new Element("a", {'href': '#', 'class': "toggler"});
95    toggleLink.setStyle({'float': 'right'});
96    var showLink = toggleLink.clone().update('Show .htaccess converter');
97    var hideLink = toggleLink.clone().update('Hide .htaccess converter');
98
99    var toggleFunc = function(event, show) {
100        event && event.preventDefault();
101        showLink.toggle(!show);
102        hideLink.toggle(show);
103        htaccessRow.toggle(show);
104    };
105    showLink.observe('click', function(event) { toggleFunc(event, true); });
106    settingsRow.insert({before: showLink});
107    hideLink.observe('click', function(event) { toggleFunc(event, false); });
108    settingsRow.insert({before: hideLink});
109    settingsRow.insert({before: new Element('div', {'class': 'clearfix'})});
110    settingsRow.insert({before: htaccessRow});
111    toggleFunc(null, false);
112};
113
114
115elementObserver('#additionalNginx-additionalNginxSettings')
116    .on('added', http2Nginx);
117
118})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.