/*
 * Copyright © 2016-2018 The Thingsboard Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

export default function fixAceEditor(aceEditor) {
    aceEditor.$blockScrolling = Infinity;
    aceEditor.on("showGutterTooltip", function (tooltip) {
        if (!tooltip.isAttachedToBody) {
            document.body.appendChild(tooltip.$element); //eslint-disable-line
            tooltip.isAttachedToBody = true;
            onElementRemoved(tooltip.$parentNode, () => {
                if (tooltip.$element.parentNode != null) {
                    tooltip.$element.parentNode.removeChild(tooltip.$element);
                }
            });
        }
    });
}

function onElementRemoved(element, callback) {
    if (!document.body.contains(element)) { //eslint-disable-line
        callback();
    } else {
        var observer;
        observer = new MutationObserver(function(mutations) { //eslint-disable-line
            if (!document.body.contains(element)) { //eslint-disable-line
                callback();
                observer.disconnect();
            }
        });
        observer.observe(document.body, {childList: true}); //eslint-disable-line
    }
}
