'use strict';

var obsidian = require('obsidian');

/*! *****************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise */

var extendStatics = function(d, b) {
    extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
    return extendStatics(d, b);
};

function __extends(d, b) {
    extendStatics(d, b);
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}

function __awaiter(thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
}

function __generator(thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
}

var Hider = /** @class */ (function (_super) {
    __extends(Hider, _super);
    function Hider() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        // refresh function for when we change settings
        _this.refresh = function () {
            // re-load the style
            _this.updateStyle();
        };
        // update the styles (at the start, or as the result of a settings change)
        _this.updateStyle = function () {
            document.body.classList.toggle('hider-ribbon', _this.settings.hideRibbon);
            document.body.classList.toggle('hider-status', _this.settings.hideStatus);
            document.body.classList.toggle('hider-tabs', _this.settings.hideTabs);
            document.body.classList.toggle('hider-scroll', _this.settings.hideScroll);
            document.body.classList.toggle('hider-sidebar-buttons', _this.settings.hideSidebarButtons);
            document.body.classList.toggle('hider-tooltips', _this.settings.hideTooltips);
            document.body.classList.toggle('hider-search-suggestions', _this.settings.hideSearchSuggestions);
            document.body.classList.toggle('hider-search-counts', _this.settings.hideSearchCounts);
            document.body.classList.toggle('hider-instructions', _this.settings.hideInstructions);
            document.body.classList.toggle('hider-meta', _this.settings.hideMeta);
            document.body.classList.toggle('hider-vault', _this.settings.hideVault);
        };
        return _this;
    }
    Hider.prototype.onload = function () {
        return __awaiter(this, void 0, void 0, function () {
            var _this = this;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0: 
                    // load settings
                    return [4 /*yield*/, this.loadSettings()];
                    case 1:
                        // load settings
                        _a.sent();
                        // add the settings tab
                        this.addSettingTab(new HiderSettingTab(this.app, this));
                        // add the toggle on/off command
                        this.addCommand({
                            id: 'toggle-tab-containers',
                            name: 'Toggle tab bar',
                            callback: function () {
                                _this.settings.hideTabs = !_this.settings.hideTabs;
                                _this.saveData(_this.settings);
                                _this.refresh();
                            }
                        });
                        this.addCommand({
                            id: 'toggle-app-ribbon',
                            name: 'Toggle app ribbon',
                            callback: function () {
                                _this.settings.hideRibbon = !_this.settings.hideRibbon;
                                _this.saveData(_this.settings);
                                _this.refresh();
                            }
                        });
                        this.addCommand({
                            id: 'toggle-hider-status',
                            name: 'Toggle status bar',
                            callback: function () {
                                _this.settings.hideStatus = !_this.settings.hideStatus;
                                _this.saveData(_this.settings);
                                _this.refresh();
                            }
                        });
                        this.refresh();
                        return [2 /*return*/];
                }
            });
        });
    };
    Hider.prototype.onunload = function () {
        console.log('Unloading Hider plugin');
    };
    Hider.prototype.loadSettings = function () {
        return __awaiter(this, void 0, void 0, function () {
            var _a, _b, _c, _d;
            return __generator(this, function (_e) {
                switch (_e.label) {
                    case 0:
                        _a = this;
                        _c = (_b = Object).assign;
                        _d = [DEFAULT_SETTINGS];
                        return [4 /*yield*/, this.loadData()];
                    case 1:
                        _a.settings = _c.apply(_b, _d.concat([_e.sent()]));
                        return [2 /*return*/];
                }
            });
        });
    };
    Hider.prototype.saveSettings = function () {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0: return [4 /*yield*/, this.saveData(this.settings)];
                    case 1:
                        _a.sent();
                        return [2 /*return*/];
                }
            });
        });
    };
    return Hider;
}(obsidian.Plugin));
var DEFAULT_SETTINGS = {
    hideRibbon: false,
    hideStatus: false,
    hideTabs: false,
    hideScroll: false,
    hideSidebarButtons: false,
    hideTooltips: false,
    hideSearchSuggestions: false,
    hideSearchCounts: false,
    hideInstructions: false,
    hideMeta: false,
    hideVault: false
};
var HiderSettingTab = /** @class */ (function (_super) {
    __extends(HiderSettingTab, _super);
    function HiderSettingTab(app, plugin) {
        var _this = _super.call(this, app, plugin) || this;
        _this.plugin = plugin;
        return _this;
    }
    HiderSettingTab.prototype.display = function () {
        var _this = this;
        var containerEl = this.containerEl;
        containerEl.empty();
        new obsidian.Setting(containerEl)
            .setName('Hide app ribbon')
            .setDesc('Hides the Obsidian menu. Warning: to open Settings you will need use the hotkey (default is CMD + ,)')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideRibbon)
            .onChange(function (value) {
            _this.plugin.settings.hideRibbon = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide tab bar')
            .setDesc('Hides the tab container at the top of the window')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideTabs)
            .onChange(function (value) {
            _this.plugin.settings.hideTabs = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide status bar')
            .setDesc('Hides word count, character count and backlink count')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideStatus)
            .onChange(function (value) {
            _this.plugin.settings.hideStatus = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide vault name')
            .setDesc('Hides the root folder name')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideVault)
            .onChange(function (value) {
            _this.plugin.settings.hideVault = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide scroll bars')
            .setDesc('Hides all scroll bars')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideScroll)
            .onChange(function (value) {
            _this.plugin.settings.hideScroll = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide sidebar toggle buttons')
            .setDesc('Hides both sidebar buttons')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideSidebarButtons)
            .onChange(function (value) {
            _this.plugin.settings.hideSidebarButtons = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide tooltips')
            .setDesc('Hides all tooltips')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideTooltips)
            .onChange(function (value) {
            _this.plugin.settings.hideTooltips = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide instructions')
            .setDesc('Hides instructional tips in modals')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideInstructions)
            .onChange(function (value) {
            _this.plugin.settings.hideInstructions = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide search suggestions')
            .setDesc('Hides suggestions in search pane')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideSearchSuggestions)
            .onChange(function (value) {
            _this.plugin.settings.hideSearchSuggestions = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide count of search term matches')
            .setDesc('Hides the number of matches within each search result')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideSearchCounts)
            .onChange(function (value) {
            _this.plugin.settings.hideSearchCounts = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
        new obsidian.Setting(containerEl)
            .setName('Hide metadata block in Reading view')
            .setDesc('When front matter is turned off in your Editor settings this hides the metadata block')
            .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.hideMeta)
            .onChange(function (value) {
            _this.plugin.settings.hideMeta = value;
            _this.plugin.saveData(_this.plugin.settings);
            _this.plugin.refresh();
        }); });
    };
    return HiderSettingTab;
}(obsidian.PluginSettingTab));

module.exports = Hider;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,[encoded data, 43780 characters]
