OSDN Git Service

v1.5.2
authorAoichaan0513 <aoichaan0513@gmail.com>
Sat, 25 May 2019 17:53:34 +0000 (02:53 +0900)
committerAoichaan0513 <aoichaan0513@gmail.com>
Sat, 25 May 2019 17:53:34 +0000 (02:53 +0900)
・スタートページ等のUIの大幅修正
・アプリケーションディレクトリの構成変更
・その他バグ・不具合の修正

76 files changed:
app/electron/Application.js
app/electron/Preload.js
app/electron/WindowManager.js
app/package.json
app/pages/bookmarks.html [new file with mode: 0644]
app/pages/home.html [new file with mode: 0644]
app/src/Browser.js
app/src/Components/Tab.jsx
app/src/Components/Toolbar.jsx
app/src/Components/ToolbarButton.jsx
app/src/Components/ToolbarTextBox.jsx
app/src/Resources/arrow_back_inactive.svg
app/src/Resources/arrow_forward_inactive.svg
app/src/Resources/dark/add.svg [new file with mode: 0644]
app/src/Resources/dark/arrow_back.svg [new file with mode: 0644]
app/src/Resources/dark/arrow_forward.svg [new file with mode: 0644]
app/src/Resources/dark/close.svg [new file with mode: 0644]
app/src/Resources/dark/home.svg [new file with mode: 0644]
app/src/Resources/dark/info.svg [new file with mode: 0644]
app/src/Resources/dark/more.svg [new file with mode: 0644]
app/src/Resources/dark/public.svg [new file with mode: 0644]
app/src/Resources/dark/reload.svg [new file with mode: 0644]
app/src/Resources/dark/shield.svg [new file with mode: 0644]
app/src/Resources/dark/star-filled.svg [new file with mode: 0644]
app/src/Resources/dark/star.svg [new file with mode: 0644]
app/src/Resources/light/add.svg [new file with mode: 0644]
app/src/Resources/light/arrow_back.svg [new file with mode: 0644]
app/src/Resources/light/arrow_forward.svg [new file with mode: 0644]
app/src/Resources/light/close.svg [new file with mode: 0644]
app/src/Resources/light/home.svg [new file with mode: 0644]
app/src/Resources/light/info.svg [new file with mode: 0644]
app/src/Resources/light/more.svg [new file with mode: 0644]
app/src/Resources/light/public.svg [new file with mode: 0644]
app/src/Resources/light/reload.svg [new file with mode: 0644]
app/src/Resources/light/shield.svg [new file with mode: 0644]
app/src/Resources/light/star-filled.svg [new file with mode: 0644]
app/src/Resources/light/star.svg [new file with mode: 0644]
app/src/Resources/public_inactive.svg
app/static/arrow_back.png [new file with mode: 0644]
app/static/arrow_back@2x.png [new file with mode: 0644]
app/static/arrow_back_inactive.png [new file with mode: 0644]
app/static/arrow_back_inactive@2x.png [new file with mode: 0644]
app/static/arrow_downward.png [new file with mode: 0644]
app/static/arrow_downward@2x.png [new file with mode: 0644]
app/static/arrow_forward.png [new file with mode: 0644]
app/static/arrow_forward@2x.png [new file with mode: 0644]
app/static/arrow_forward_inactive.png [new file with mode: 0644]
app/static/arrow_forward_inactive@2x.png [new file with mode: 0644]
app/static/arrow_upward.png [new file with mode: 0644]
app/static/arrow_upward@2x.png [new file with mode: 0644]
app/static/bookmarks.png [new file with mode: 0644]
app/static/bookmarks@2x.png [new file with mode: 0644]
app/static/close.png [new file with mode: 0644]
app/static/close@2x.png [new file with mode: 0644]
app/static/download.png [new file with mode: 0644]
app/static/download@2x.png [new file with mode: 0644]
app/static/find.png [new file with mode: 0644]
app/static/find@2x.png [new file with mode: 0644]
app/static/help.png [new file with mode: 0644]
app/static/help@2x.png [new file with mode: 0644]
app/static/help_outline.png [new file with mode: 0644]
app/static/help_outline@2x.png [new file with mode: 0644]
app/static/history.png [new file with mode: 0644]
app/static/history@2x.png [new file with mode: 0644]
app/static/print.png [new file with mode: 0644]
app/static/print@2x.png [new file with mode: 0644]
app/static/refresh.png [new file with mode: 0644]
app/static/refresh@2x.png [new file with mode: 0644]
app/static/settings.png [new file with mode: 0644]
app/static/settings@2x.png [new file with mode: 0644]
app/static/shield.png [new file with mode: 0644]
app/static/shield@2x.png [new file with mode: 0644]
build-linux.js
build-mac.js
build-win.js
package.json

index 8860ca9..b352715 100644 (file)
@@ -44,6 +44,7 @@ registerProtocols = () => {
 
 module.exports = class Application {
     loadWindow = () => {
+        app.setPath('userData', path.join(app.getPath('userData'), 'Stable'));
         protocol.registerSchemesAsPrivileged([
             { scheme: 'my', privileges: { standard: true, bypassCSP: true, secure: true } }
         ]);
index f3b6fc6..756a710 100644 (file)
@@ -2,63 +2,10 @@ const { remote, ipcRenderer, shell } = require('electron');
 const path = require('path');
 const fs = require('fs');
 
+const package = require(`${remote.app.getAppPath()}/package.json`);
+
 const Config = require('electron-store');
-const config = new Config({
-    defaults: {
-        design: {
-            homeButton: false,
-            darkTheme: false,
-            theme: 'default'
-        },
-        homePage: {
-            defaultPage: 'my://newtab',
-            defaultEngine: 'Google',
-            searchEngines: [
-                {
-                    name: 'Google',
-                    url: 'https://www.google.com/search?q=%s'
-                },
-                {
-                    name: 'Bing',
-                    url: 'https://www.bing.com/search?q=%s'
-                },
-                {
-                    name: 'Yahoo! Japan',
-                    url: 'https://search.yahoo.co.jp/search?p=%s'
-                },
-                {
-                    name: 'goo',
-                    url: 'https://search.goo.ne.jp/web.jsp?MT=%s'
-                },
-                {
-                    name: 'Google Translate',
-                    url: 'https://translate.google.com/?text=%s'
-                },
-                {
-                    name: 'Youtube',
-                    url: 'https://www.youtube.com/results?search_query=%s'
-                },
-                {
-                    name: 'Twitter',
-                    url: 'https://www.twitter.com/search?q=%s'
-                },
-                {
-                    name: 'GitHub',
-                    url: 'https://github.com/search?q=%s'
-                }
-            ]
-        },
-        adBlocker: true,
-        window: {
-            isCustomTitlebar: true,
-            isMaximized: false,
-            bounds: {
-                width: 1100,
-                height: 680
-            }
-        }
-    },
-});
+const config = new Config();
 
 // ファイルタイプの列挙体(のつもり)
 const FileType = {
@@ -156,6 +103,30 @@ global.getFile = (path, json = false) => {
 // ====================================================================== //
 */
 
+global.getAppName = (b) => {
+    if (location.protocol != 'my:') return;
+
+    return package.name;
+}
+
+global.getAppDescription = (b) => {
+    if (location.protocol != 'my:') return;
+
+    return package.description;
+}
+
+global.getAppVersion = (b) => {
+    if (location.protocol != 'my:') return;
+
+    return package.version;
+}
+
+/*
+// ====================================================================== //
+// ====================================================================== //
+// ====================================================================== //
+*/
+
 global.clearBrowserData = (b) => {
     if (location.protocol != 'my:') return;
 
index 72ec184..b860327 100644 (file)
@@ -15,7 +15,7 @@ const config = new Config({
             theme: 'default'
         },
         homePage: {
-            defaultPage: 'my://newtab',
+            defaultPage: 'my://home',
             defaultEngine: 'Google',
             searchEngines: [
                 {
@@ -68,12 +68,12 @@ const Datastore = require('nedb');
 let db = {};
 
 db.history = new Datastore({
-    filename: path.join(app.getPath('userData'), 'Files', 'History.db'),
+    filename: path.join(app.getPath('userData'), 'Stable', 'Files', 'History.db'),
     autoload: true,
     timestampData: true
 });
 db.bookmark = new Datastore({
-    filename: path.join(app.getPath('userData'), 'Files', 'Bookmark.db'),
+    filename: path.join(app.getPath('userData'), 'Stable', 'Files', 'Bookmark.db'),
     autoload: true,
     timestampData: true
 });
@@ -527,7 +527,7 @@ module.exports = class WindowManager {
         view.webContents.on('did-finish-load', (e) => {
             if (view.isDestroyed()) return;
 
-            if (String(windowId).startsWith('private'))
+            if (String(windowId).startsWith('private') && view.webContents.getURL().startsWith('my://'))
                 view.webContents.setUserAgent(defaultUserAgent + ' PrivMode');
 
             window.setTitle(view.webContents.getTitle());
@@ -706,26 +706,29 @@ module.exports = class WindowManager {
                     {
                         label: '戻る',
                         accelerator: 'Alt+Left',
+                        icon: view.webContents.canGoBack() ? `${app.getAppPath()}/static/arrow_back.png` : `${app.getAppPath()}/static/arrow_back_inactive.png`,
                         enabled: view.webContents.canGoBack(),
                         click: () => { view.webContents.goBack(); }
                     },
                     {
                         label: '進む',
                         accelerator: 'Alt+Right',
+                        icon: view.webContents.canGoForward() ? `${app.getAppPath()}/static/arrow_forward.png` : `${app.getAppPath()}/static/arrow_forward_inactive.png`,
                         enabled: view.webContents.canGoForward(),
                         click: () => { view.webContents.goForward(); }
                     },
                     {
-                        label: '再読み込み',
+                        label: !view.webContents.isLoadingMainFrame() ? '再読み込み' : '読み込み中止',
                         accelerator: 'CmdOrCtrl+R',
-                        click: () => { view.webContents.reload(); }
+                        icon: !view.webContents.isLoadingMainFrame() ? `${app.getAppPath()}/static/refresh.png` : `${app.getAppPath()}/static/close.png`,
+                        click: () => { !view.webContents.isLoadingMainFrame() ? view.webContents.reload() : view.webContents.stop(); }
                     },
                     { type: 'separator' },
                     {
                         label: 'Floating Window (Beta)',
                         type: 'checkbox',
                         checked: (floatingWindows.indexOf(windowId) != -1),
-                        enabled: (!window.isFullScreen() && !window.isMaximized()),
+                        enabled: (!window.isFullScreen() && !window.isMaximized() && config.get('window.isCustomTitlebar')),
                         click: () => {
                             if (floatingWindows.indexOf(windowId) != -1) {
                                 floatingWindows.filter((win, i) => {
@@ -753,6 +756,7 @@ module.exports = class WindowManager {
                     {
                         label: '印刷',
                         accelerator: 'CmdOrCtrl+P',
+                        icon: `${app.getAppPath()}/static/print.png`,
                         enabled: !view.webContents.getURL().startsWith('my://'),
                         click: () => { view.webContents.print(); }
                     },
@@ -785,6 +789,10 @@ module.exports = class WindowManager {
             } else if ((input.control || input.meta) && input.shift && input.key == 'R') {
                 e.preventDefault();
                 view.webContents.reloadIgnoringCache();
+            } else if (input.key == 'F11') {
+                e.preventDefault();
+                window.setFullScreen(!window.isFullScreen());
+                this.fixBounds(windowId, (floatingWindows.indexOf(windowId) != -1));
             }
         });
 
index 2ff2372..ca08478 100644 (file)
@@ -1,6 +1,7 @@
 {
        "name": "MyBrowser",
-       "version": "1.4.7",
+       "description": "Cross-platform browser based on Chromium.",
+       "version": "1.5.2",
        "private": true,
        "main": "electron/Starter.js",
        "homepage": "./",
@@ -9,6 +10,19 @@
                "email": "aoichaan0513@gmail.com",
                "url": "http://aoichaan0513.xyz"
        },
+       "scripts": {
+               "start": "react-scripts start",
+               "build": "react-scripts build",
+               "test": "react-scripts test --env=jsdom",
+               "eject": "react-scripts eject",
+               "electron:dev": "electron .",
+               "package": "electron-packager . MyBrowser --platform=all --arch=x64 --prune --out=release --overwrite",
+               "package:win": "electron-packager . MyBrowser --platform=win32 --arch=x64 --prune --out=release --overwrite --icon=./public/icon.ico",
+               "package:linux": "electron-packager . MyBrowser --platform=linux --arch=x64 --prune --out=release --overwrite",
+               "package:mas": "electron-packager . MyBrowser --platform=mas --arch=x64 --prune --out=release --overwrite",
+               "package:darwin": "electron-packager . MyBrowser --platform=darwin --arch=x64 --prune --out=release --overwrite",
+               "dev": "npm-run-all --parallel electron:dev start"
+       },
        "dependencies": {
                "@cliqz/adblocker": "0.8.0",
                "axios": "0.18.0",
                "tldts": "^4.0.6",
                "username": "^5.0.0"
        },
-       "scripts": {
-               "start": "react-scripts start",
-               "build": "react-scripts build",
-               "test": "react-scripts test --env=jsdom",
-               "eject": "react-scripts eject",
-               "electron:dev": "electron .",
-               "package": "electron-packager . MyBrowser --platform=all --arch=x64 --prune --out=release --overwrite",
-               "package:win": "electron-packager . MyBrowser --platform=win32 --arch=x64 --prune --out=release --overwrite --icon=./public/icon.ico",
-               "package:linux": "electron-packager . MyBrowser --platform=linux --arch=x64 --prune --out=release --overwrite",
-               "package:mas": "electron-packager . MyBrowser --platform=mas --arch=x64 --prune --out=release --overwrite",
-               "package:darwin": "electron-packager . MyBrowser --platform=darwin --arch=x64 --prune --out=release --overwrite",
-               "dev": "npm-run-all --parallel electron:dev start"
-       },
        "devDependencies": {
                "electron": "^5.0.1",
                "electron-builder": "^20.40.2",
diff --git a/app/pages/bookmarks.html b/app/pages/bookmarks.html
new file mode 100644 (file)
index 0000000..1c71cca
--- /dev/null
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html lang="ja">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>ブックマーク</title>
+    <link href="my://style.css" type="text/css" rel="stylesheet" />
+    <script>
+        if (getDarkTheme()) {
+            document.write(
+                `<link href="https://stackpath.bootstrapcdn.com/bootswatch/3.4.1/darkly/bootstrap.min.css" type="text/css" rel="stylesheet" integrity="sha384-pKJMCXwCXq3HwRBt27cwwSmc0/DAo2BjRxGd7nEESEStk++p6LffHmhX9oqzVDUk" crossorigin="anonymous" />`
+            );
+        } else {
+            document.write(
+                `<link href="https://stackpath.bootstrapcdn.com/bootswatch/3.4.1/flatly/bootstrap.min.css" type="text/css" rel="stylesheet" integrity="sha384-bfWZLPtvQKHg/nZNhaO/ZW4Ba8ISud5CtEjnCTU6OR1yOq5zrrF+JP2o7om6rzLf" crossorigin="anonymous" />`
+            );
+        }
+    </script>
+    <link href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.min.css" type="text/css" rel="stylesheet" />
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans|Noto+Sans+JP|Roboto" type="text/css" rel="stylesheet" />
+    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" type="text/css" rel="stylesheet" />
+    <link rel="icon" sizes="any" href="my://public.svg" type="image/svg+xml">
+    <link rel="mask-icon" href="my://public.svg" color="black">
+</head>
+
+<body style="padding-top: 75px;">
+    <nav class="navbar navbar-default navbar-fixed-top">
+        <div class="container-fluid">
+            <div class="navbar-header">
+                <a class="navbar-brand"><script>document.write(getAppName());</script></a>
+                <ul class="nav navbar-nav navbar-right">
+                    <li><a href="#" data-toggle="modal" data-target="#clearModal">ブックマークをクリア</a></li>
+                </ul>
+            </div>
+        </div>
+    </nav>
+    <div class="container-fluid">
+        <div class="row">
+            <div class="col-md-3">
+                <ul class="nav nav-pills nav-stacked">
+                    <li>
+                        <a href="my://home/">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">home</i>
+                            ホーム
+                        </a>
+                    </li>
+                    <hr>
+                    <li>
+                        <a href="my://history/">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">history</i>
+                            履歴
+                        </a>
+                    </li>
+                    <li>
+                        <a href="my://downloads/">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">get_app</i>
+                            ダウンロード
+                        </a>
+                    </li>
+                    <li>
+                        <a href="my://bookmarks/">
+                            <i class="material-icons"
+                                style="vertical-align: text-bottom; font-size: 16px;">bookmarks</i> ブックマーク
+                        </a>
+                    </li>
+                    <li>
+                        <a href="my://store/">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">shop</i>
+                            WebApp Store
+                        </a>
+                    </li>
+                    <li class="dropdown">
+                        <a class="dropdown-toggle" data-toggle="dropdown" href="#">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">settings</i>
+                            設定
+                        </a>
+                        <ul class="dropdown-menu" style="width: 100%;">
+                            <li><a href="my://settings/">ホーム</a></li>
+                            <li class="divider"></li>
+                            <li><a href="my://settings/#design">デザイン</a></li>
+                            <li><a href="my://settings/#engine">検索エンジン</a></li>
+                            <li><a href="my://settings/#adblock">広告ブロック</a></li>
+                            <li><a href="my://settings/#window">ウィンドウ</a></li>
+                            <li class="divider"></li>
+                            <li><a href="my://settings/#about"><script>document.write(getAppName());</script> について</a></li>
+                        </ul>
+                    </li>
+                    <li>
+                        <a href="my://help/">
+                            <i class="material-icons"
+                                style="vertical-align: text-bottom; font-size: 16px;">help_outline</i> ヘルプ
+                        </a>
+                    </li>
+                </ul>
+            </div>
+            <div class="col-md-9" style="padding-right: 0px;">
+                <div style="padding: 15px; overflow-y: auto; height: calc(100vh - 75px);">
+                    <h3>ブックマーク</h3>
+                    <hr>
+                    <script>
+                        if (navigator.userAgent.indexOf('PrivMode') != -1) {
+                            document.write(
+                                `<div class="panel panel-default" id="private">
+                                    <div class="panel-heading">プライベート ブックマーク</div>
+                                    <div class="panel-body">
+                                        <div class="table-responsive">
+                                            <table class="table table-striped table-hover table-style" id="privMarkList">
+                                                <thead>
+                                                    <tr>
+                                                        <th class="table-title">タイトル</th>
+                                                        <th class="table-url">URL</th>
+                                                        <th style="width: 200px; white-space: nowrap;">追加日時</th>
+                                                    </tr>
+                                                </thead>
+                                                <tbody>
+                                                </tbody>
+                                            </table>
+                                        </div>
+                                    </div>
+                                </div>
+                                <hr>`
+                            );
+                        }
+                    </script>
+                    <div class="panel panel-default" id="normal">
+                        <div class="panel-heading">ブックマーク</div>
+                        <div class="panel-body">
+                            <div class="table-responsive">
+                                <table class="table table-striped table-hover table-style" id="markList">
+                                    <thead>
+                                        <tr>
+                                            <th class="table-title">タイトル</th>
+                                            <th class="table-url">URL</th>
+                                            <th style="width: 200px; white-space: nowrap;">追加日時</th>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="modal fade" id="clearModal" tabindex="-1">
+        <div class="modal-dialog" style="z-index: 9999;">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal"><span>×</span></button>
+                    <h4 class="modal-title">ブックマークをクリア</h4>
+                </div>
+                <div class="modal-body">
+                    これまでのブックマークをクリアします。
+                    続行を押すとブックマークがクリアされます。
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-link" data-dismiss="modal">閉じる</button>
+                    <button type="button" class="btn btn-primary" id="clearBookmark">続行</button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/locale/ja.js"></script>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            $(`a[href="${window.location.href}"]`).parent().addClass('active');
+
+            $('#clearBookmark').click(function () {
+                clearBookmark(true);
+                location.reload();
+            });
+
+            if (navigator.userAgent.indexOf('PrivMode') != -1) {
+                getBookmarks(true).then((data) => {
+                    data.forEach((item, i) => {
+                        $('#privMarkList').append($('<tr></tr>').append($('<td class="table-title"></td>').append($(`<a href="${item.url}"></a>`).text(item.title))).append($('<td class="table-url"></td>').text(item.url)).append($('<td></td>').text(moment(item.createdAt).format('YYYY/MM/DD HH:mm'))));
+                    });
+                    getBookmarks(false).then((data) => {
+                        data.forEach((item, i) => {
+                            $('#markList').append($('<tr></tr>').append($('<td class="table-title"></td>').append($(`<a href="${item.url}"></a>`).text(item.title))).append($('<td class="table-url"></td>').text(item.url)).append($('<td></td>').text(moment(item.createdAt).format('YYYY/MM/DD HH:mm'))));
+                        });
+                    });
+                });
+            } else {
+                getBookmarks(false).then((data) => {
+                    data.forEach((item, i) => {
+                        $('#markList').append($('<tr></tr>').append($('<td class="table-title"></td>').append($(`<a href="${item.url}"></a>`).text(item.title))).append($('<td class="table-url"></td>').text(item.url)).append($('<td></td>').text(moment(item.createdAt).format('YYYY/MM/DD HH:mm'))));
+                    });
+                });
+            }
+        });
+    </script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/app/pages/home.html b/app/pages/home.html
new file mode 100644 (file)
index 0000000..e467fec
--- /dev/null
@@ -0,0 +1,250 @@
+<!DOCTYPE html>
+<html lang="ja">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>ホーム</title>
+    <link href="my://style.css" type="text/css" rel="stylesheet" />
+    <script>
+        if (getDarkTheme()) {
+            document.write(
+                `<link href="https://stackpath.bootstrapcdn.com/bootswatch/3.4.1/darkly/bootstrap.min.css" type="text/css" rel="stylesheet" integrity="sha384-pKJMCXwCXq3HwRBt27cwwSmc0/DAo2BjRxGd7nEESEStk++p6LffHmhX9oqzVDUk" crossorigin="anonymous" />`
+            );
+        } else {
+            document.write(
+                `<link href="https://stackpath.bootstrapcdn.com/bootswatch/3.4.1/flatly/bootstrap.min.css" type="text/css" rel="stylesheet" integrity="sha384-bfWZLPtvQKHg/nZNhaO/ZW4Ba8ISud5CtEjnCTU6OR1yOq5zrrF+JP2o7om6rzLf" crossorigin="anonymous" />`
+            );
+        }
+    </script>
+    <link href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.min.css" type="text/css" rel="stylesheet" />
+    <link href="https://fonts.googleapis.com/css?family=Noto+Sans|Noto+Sans+JP|Roboto" type="text/css" rel="stylesheet" />
+    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" type="text/css" rel="stylesheet" />
+    <link rel="icon" sizes="any" href="my://public.svg" type="image/svg+xml">
+    <link rel="mask-icon" href="my://public.svg" color="black">
+</head>
+
+<body style="padding-top: 75px;">
+    <nav class="navbar navbar-default navbar-fixed-top">
+        <div class="container-fluid">
+            <div class="navbar-header">
+                <a class="navbar-brand">
+                    <script>document.write(getAppName());</script></a>
+                <div class="navbar-form navbar-right" role="search" style="width: 75%;">
+                    <input class="form-control" id="search" placeholder="Google で検索または URL を入力" style="width: 90%;"
+                        onkeydown="handleKeydown();">
+                    <button type="submit" class="btn btn-default">Search</button>
+                </div>
+            </div>
+        </div>
+    </nav>
+    <div class="container-fluid">
+        <div class="row">
+            <div class="col-md-3">
+                <ul class="nav nav-pills nav-stacked">
+                    <li>
+                        <a href="my://home/">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">home</i>
+                            ホーム
+                        </a>
+                    </li>
+                    <hr>
+                    <li>
+                        <a href="my://history/" target="_blank">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">history</i>
+                            履歴
+                        </a>
+                    </li>
+                    <li>
+                        <a href="my://downloads/" target="_blank">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">get_app</i>
+                            ダウンロード
+                        </a>
+                    </li>
+                    <li>
+                        <a href="my://bookmarks/" target="_blank">
+                            <i class="material-icons"
+                                style="vertical-align: text-bottom; font-size: 16px;">bookmarks</i> ブックマーク
+                        </a>
+                    </li>
+                    <li>
+                        <a href="my://store/" target="_blank">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">shop</i>
+                            WebApp Store
+                        </a>
+                    </li>
+                    <li class="dropdown">
+                        <a class="dropdown-toggle" data-toggle="dropdown" href="#">
+                            <i class="material-icons" style="vertical-align: text-bottom; font-size: 16px;">settings</i>
+                            設定
+                        </a>
+                        <ul class="dropdown-menu" style="width: 100%;">
+                            <li><a href="my://settings/" target="_blank">ホーム</a></li>
+                            <li class="divider"></li>
+                            <li><a href="my://settings/#design" target="_blank">デザイン</a></li>
+                            <li><a href="my://settings/#engine" target="_blank">検索エンジン</a></li>
+                            <li><a href="my://settings/#adblock" target="_blank">広告ブロック</a></li>
+                            <li><a href="my://settings/#window" target="_blank">ウィンドウ</a></li>
+                            <li class="divider"></li>
+                            <li><a href="my://settings/#about" target="_blank">
+                                    <script>document.write(getAppName());</script> について</a></li>
+                        </ul>
+                    </li>
+                    <li>
+                        <a href="my://help/" target="_blank">
+                            <i class="material-icons"
+                                style="vertical-align: text-bottom; font-size: 16px;">help_outline</i> ヘルプ
+                        </a>
+                    </li>
+                </ul>
+            </div>
+            <div class="col-md-9" style="padding-right: 0px;">
+                <div style="padding: 15px; overflow-y: auto; height: calc(100vh - 75px);">
+                    <script>
+                        if (localStorage.getItem('isFirst') == true || localStorage.getItem('isFirst') == undefined) {
+                            document.write(
+                                `<div class="jumbotron">
+                                    <div class="container">
+                                        <h1>ようこそ</h1>
+                                        <p>新しいタブ ページはホームとして生まれ変わりました。</p>
+                                    </div>
+                                </div>`
+                            );
+                            localStorage.setItem('isFirst', false);
+                        }
+                    </script>
+                    <script>
+                        if (navigator.userAgent.indexOf('PrivMode') != -1) {
+                            document.write(
+                                `<h5>プライベート モード</h5>
+                                        <hr>
+                                        <p>
+                                            現在、プライベート モードで閲覧しています。プライベート モードでは、閲覧履歴やCookieなどが${getAppName()}に保存されません。<br>
+                                            また、ブックマークはプライベート ブックマークに保存されます。<br>
+                                            ※ プライベート ブックマークは、プライベート モードの時のみブックマークの表示や編集ができる機能です。<br>
+                                            ただし、ダウンロードしたファイルは通常通り保存されます。<br><br>
+                                            ${getAppName()} に<b>以下の情報は</b>保存されません。<br>
+                                            <ul>
+                                                <li>閲覧履歴</li>
+                                                <li>Cookieとサイトデータ</li>
+                                                <li>ログイン情報</li>
+                                            </ul>
+                                        </p>`
+                            );
+                        }
+                    </script>
+                    <h3>ホーム</h3>
+                    <hr>
+                    <div class="panel panel-default" id="normal">
+                        <div class="panel-heading">
+                            最近の履歴
+                            <a href="my://history" target="_blank" class="text-muted"
+                                style="float: right;">すべての履歴を表示</a>
+                        </div>
+                        <div class="panel-body">
+                            <div class="table-responsive">
+                                <table class="table table-striped table-hover table-style" id="historyList">
+                                    <thead>
+                                        <tr>
+                                            <th class="table-title">タイトル</th>
+                                            <th class="table-url">URL</th>
+                                            <th style="width: 200px; white-space: nowrap;">閲覧日時</th>
+                                        </tr>
+                                    </thead>
+                                    <tbody>
+                                    </tbody>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
+    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/locale/ja.js"></script>
+    <script type="text/javascript">
+        $(document).ready(function () {
+            $(`a[href="${window.location.href}"]`).parent().addClass('active');
+
+            $('#search').prop('placeholder', `${getSearchEngine().name} で検索または URL を入力`);
+
+            $('#search').autocomplete({
+                source: function (request, response) {
+                    $.ajax({
+                        url: "http://www.google.com/complete/search",
+                        data: { hl: 'ja', client: 'firefox', q: request.term },
+                        dataType: "jsonp",
+                        type: "GET",
+                        success: function (data) {
+                            response(data[1]);
+                        }
+                    });
+                },
+                delay: 300,
+                minLength: 2,
+            });
+
+            if (getDarkTheme()) {
+                $('.topbar').css({ 'background-color': '#323232', 'color': 'white' });
+                $('.topbar > .title').css('color', 'white');
+                $('.topbar-search').css({ 'background-color': '#252525', 'color': 'white' });
+                $('div.nav > a.nav-item').css('color', 'white');
+                $('body').css('background-color', '#252525');
+
+                $('.nav-toggle').hover(function () {
+                    $(this).css('background-color', 'rgba(130, 130, 130, 0.3)');
+                }, function () {
+                    $(this).css('background-color', '');
+                });
+            } else {
+                $('.topbar').css({ 'background-color': '', 'color': '' });
+                $('.topbar > .title').css('color', '');
+                $('.topbar-search').css({ 'background-color': '', 'color': '' });
+                $('div.nav > a.nav-item').css('color', '');
+                $('body').css('background-color', '');
+
+                $('.nav-toggle').hover(function () {
+                    $(this).css('background-color', 'rgba(0, 0, 0, 0.06)');
+                }, function () {
+                    $(this).css('background-color', '');
+                });
+            }
+
+            getHistorys().then((data) => {
+                let v = 0;
+                data.forEach((item, i) => {
+                    if (v > 9) return;
+                    $('#historyList').append($('<tr></tr>').append($('<td class="table-title"></td>').append($(`<a href="${item.url}"></a>`).text(item.title))).append($('<td class="table-url"></td>').text(item.url)).append($('<td></td>').text(moment(item.createdAt).format('YYYY/MM/DD HH:mm'))));
+                    v++;
+                });
+            });
+        });
+
+        function handleKeydown() {
+            let searchBar = $('#search');
+            if (event.keyCode != 13 || searchBar.val().length == 0 || searchBar.val() == '') return;
+
+            if (isURL(searchBar.val())) {
+                location.href = searchBar.val();
+            } else {
+                location.href = window.getSearchEngine().url.replace('%s', searchBar.val());
+            }
+        }
+
+        function isURL(input) {
+            const pattern = /^((?:\w+:)?\/\/([^\s.]+\.\S{2}|localhost[:?\d]*)|my:\/\/\S.*)\S*$/;
+
+            if (pattern.test(input)) {
+                return true;
+            }
+            return pattern.test(`http://${input}`);
+        }
+    </script>
+</body>
+
+</html>
\ No newline at end of file
index 47f1bc7..1424067 100644 (file)
@@ -21,93 +21,55 @@ import WindowMinimizeIcon from './Resources/windows/minimize.svg';
 import WindowMaximizeIcon from './Resources/windows/maximize.svg';
 import WindowCloseIcon from './Resources/windows/close.svg';
 
-import BackIcon from './Resources/arrow_back.svg';
-import ForwardIcon from './Resources/arrow_forward.svg';
+import DarkBackIcon from './Resources/dark/arrow_back.svg';
+import DarkForwardIcon from './Resources/dark/arrow_forward.svg';
+import LightBackIcon from './Resources/light/arrow_back.svg';
+import LightForwardIcon from './Resources/light/arrow_forward.svg';
+
 import BackInActiveIcon from './Resources/arrow_back_inactive.svg';
 import ForwardInActiveIcon from './Resources/arrow_forward_inactive.svg';
-import ReloadIcon from './Resources/reload.svg';
-import HomeIcon from './Resources/home.svg';
-import InfomationIcon from './Resources/info.svg';
-import StarIcon from './Resources/star.svg';
-import StarFilledIcon from './Resources/star-filled.svg';
-import AccountIcon from './Resources/account.svg';
-import ShieldIcon from './Resources/shield.svg';
+
+import DarkReloadIcon from './Resources/dark/reload.svg';
+import DarkHomeIcon from './Resources/dark/home.svg';
+import LightReloadIcon from './Resources/light/reload.svg';
+import LightHomeIcon from './Resources/light/home.svg';
+
+import DarkInfomationIcon from './Resources/dark/info.svg';
+import LightInfomationIcon from './Resources/light/info.svg';
+
+import DarkStarIcon from './Resources/dark/star.svg';
+import DarkStarFilledIcon from './Resources/dark/star-filled.svg';
+import LightStarIcon from './Resources/light/star.svg';
+import LightStarFilledIcon from './Resources/light/star-filled.svg';
+
 import FeedbackIcon from './Resources/feedback.svg';
-import MoreIcon from './Resources/more.svg';
+import AccountIcon from './Resources/account.svg';
+
+import DarkShieldIcon from './Resources/dark/shield.svg';
+import LightShieldIcon from './Resources/light/shield.svg';
+
+import DarkMoreIcon from './Resources/dark/more.svg';
+import LightMoreIcon from './Resources/light/more.svg';
 
-import PublicIcon from './Resources/public.svg';
-import PublicInActiveIcon from './Resources/public_inactive.svg';
-import AddIcon from './Resources/add.svg';
-import CloseIcon from './Resources/close.svg';
+import DarkPublicIcon from './Resources/dark/public.svg';
+import LightPublicIcon from './Resources/light/public.svg';
+
+import DarkAddIcon from './Resources/dark/add.svg';
+import DarkCloseIcon from './Resources/dark/close.svg';
+import LightAddIcon from './Resources/light/add.svg';
+import LightCloseIcon from './Resources/light/close.svg';
 
 import isURL from './Utils/isURL';
 
 const { remote, ipcRenderer, shell } = window.require('electron');
-const systemPreferences = remote.systemPreferences;
-const Menu = remote.Menu;
-const MenuItem = remote.MenuItem;
-const dialog = remote.dialog;
+const { app, systemPreferences, Menu, MenuItem, dialog } = remote;
 
 const platform = window.require('electron-platform');
+const path = window.require('path');
 const process = window.require('process');
 
 const Config = window.require('electron-store');
-const config = new Config({
-       defaults: {
-               design: {
-                       homeButton: false,
-                       darkTheme: false,
-                       theme: 'default'
-               },
-               homePage: {
-                       defaultPage: 'my://newtab',
-                       defaultEngine: 'Google',
-                       searchEngines: [
-                               {
-                                       name: 'Google',
-                                       url: 'https://www.google.com/search?q=%s'
-                               },
-                               {
-                                       name: 'Bing',
-                                       url: 'https://www.bing.com/search?q=%s'
-                               },
-                               {
-                                       name: 'Yahoo! Japan',
-                                       url: 'https://search.yahoo.co.jp/search?p=%s'
-                               },
-                               {
-                                       name: 'goo',
-                                       url: 'https://search.goo.ne.jp/web.jsp?MT=%s'
-                               },
-                               {
-                                       name: 'Google Translate',
-                                       url: 'https://translate.google.com/?text=%s'
-                               },
-                               {
-                                       name: 'Youtube',
-                                       url: 'https://www.youtube.com/results?search_query=%s'
-                               },
-                               {
-                                       name: 'Twitter',
-                                       url: 'https://www.twitter.com/search?q=%s'
-                               },
-                               {
-                                       name: 'GitHub',
-                                       url: 'https://github.com/search?q=%s'
-                               }
-                       ]
-               },
-               adBlocker: true,
-               window: {
-                       isCustomTitlebar: true,
-                       isMaximized: false,
-                       bounds: {
-                               width: 1100,
-                               height: 680
-                       }
-               }
-       },
-});
+const config = new Config();
 
 class BrowserView extends Component {
        constructor(props) {
@@ -345,23 +307,41 @@ class BrowserView extends Component {
                        { type: 'separator' },
                        {
                                label: '履歴',
+                               icon: `${app.getAppPath()}/static/history.png`,
                                click: () => { this.props.addTab('my://history'); }
                        },
                        {
                                label: 'ダウンロード',
+                               icon: `${app.getAppPath()}/static/download.png`,
                                click: () => { this.props.addTab('my://history'); }
                        },
                        {
                                label: 'ブックマーク',
-                               click: () => { this.props.addTab('my://bookmark'); }
+                               icon: `${app.getAppPath()}/static/bookmarks.png`,
+                               click: () => { this.props.addTab('my://bookmarks'); }
+                       },
+                       { type: 'separator' },
+                       {
+                               label: '印刷',
+                               icon: `${app.getAppPath()}/static/print.png`,
+                               enabled: false,
+                               click: () => { this.props.addTab('my://settings'); }
+                       },
+                       {
+                               label: '検索',
+                               icon: `${app.getAppPath()}/static/find.png`,
+                               enabled: false,
+                               click: () => { this.props.addTab('my://help'); }
                        },
                        { type: 'separator' },
                        {
                                label: '設定',
+                               icon: `${app.getAppPath()}/static/settings.png`,
                                click: () => { this.props.addTab('my://settings'); }
                        },
                        {
                                label: 'ヘルプ',
+                               icon: `${app.getAppPath()}/static/help.png`,
                                click: () => { this.props.addTab('my://help'); }
                        },
                        { type: 'separator' },
@@ -379,22 +359,32 @@ class BrowserView extends Component {
        render() {
                return (
                        <ContentWrapper>
-                               <Toolbar>
-                                       <ToolbarButton isShowing={true} isRight={false} isMarginLeft={true} isEnabled={this.state.canGoBack} src={this.state.canGoBack ? BackIcon : BackInActiveIcon} size={24} title="前のページに戻る" onClick={() => { this.goBack(); }} />
-                                       <ToolbarButton isShowing={true} isRight={false} isMarginLeft={false} isEnabled={this.state.canGoForward} src={this.state.canGoForward ? ForwardIcon : ForwardInActiveIcon} size={24} title="次のページに進む" onClick={() => { this.goForward(); }} />
-                                       <ToolbarButton isShowing={true} isRight={false} isMarginLeft={false} isEnabled={true} src={!this.state.isLoading ? ReloadIcon : CloseIcon} size={24} title={!this.state.isLoading ? '再読み込み' : '読み込み中止'} onClick={() => { this.reload(); }} />
-                                       <ToolbarButton isShowing={config.get('design.homeButton')} isRight={false} isMarginLeft={false} isEnabled={true} src={HomeIcon} size={24} title="ホームページに移動" onClick={() => { this.goHome(); }} />
-                                       <ToolbarTextBoxWrapper buttonCount={config.get('design.homeButton') ? 6 : 5}>
-                                               <ToolbarButton isShowing={true} isRight={false} isMarginLeft={true} isEnabled={true} src={InfomationIcon} size={24} title="このページの情報" />
+                               <Toolbar isPrivate={String(this.props.windowId).startsWith('private')}>
+                                       <ToolbarButton isPrivate={String(this.props.windowId).startsWith('private')} src={this.state.canGoBack ? (!String(this.props.windowId).startsWith('private') ? LightBackIcon : DarkBackIcon) : BackInActiveIcon} size={24}
+                                               isShowing={true} isRight={false} isMarginLeft={true} isEnabled={this.state.canGoBack} title="前のページに戻る" onClick={() => { this.goBack(); }} />
+                                       <ToolbarButton isPrivate={String(this.props.windowId).startsWith('private')} src={this.state.canGoForward ? (!String(this.props.windowId).startsWith('private') ? LightForwardIcon : DarkForwardIcon) : ForwardInActiveIcon} size={24}
+                                               isShowing={true} isRight={false} isMarginLeft={false} isEnabled={this.state.canGoForward} title="次のページに進む" onClick={() => { this.goForward(); }} />
+                                       <ToolbarButton isPrivate={String(this.props.windowId).startsWith('private')} src={!this.state.isLoading ? (!String(this.props.windowId).startsWith('private') ? LightReloadIcon : DarkReloadIcon) : (!String(this.props.windowId).startsWith('private') ? LightCloseIcon : DarkCloseIcon)} size={24}
+                                               isShowing={true} isRight={false} isMarginLeft={false} isEnabled={true} title={!this.state.isLoading ? '再読み込み' : '読み込み中止'} onClick={() => { this.reload(); }} />
+                                       <ToolbarButton isPrivate={String(this.props.windowId).startsWith('private')} src={!String(this.props.windowId).startsWith('private') ? LightHomeIcon : DarkHomeIcon} size={24}
+                                               isShowing={config.get('design.homeButton')} isRight={false} isMarginLeft={false} isEnabled={true} title="ホームページに移動" onClick={() => { this.goHome(); }} />
+                                       <ToolbarTextBoxWrapper isPrivate={String(this.props.windowId).startsWith('private')} buttonCount={config.get('design.homeButton') ? 6 : 5}>
+                                               <ToolbarButton src={!String(this.props.windowId).startsWith('private') ? LightInfomationIcon : DarkInfomationIcon} size={12}
+                                                       isShowing={true} isRight={false} isMarginLeft={true} isEnabled={true} title="このページの情報" />
                                                <ToolbarTextBox value={this.state.barText} onChange={(e) => { this.setState({ barText: e.target.value }); }} onKeyDown={this.handleKeyDown} onContextMenu={this.handleContextMenu} />
-                                               <ToolbarButton data-tip={this.state.isBookmarked ? `${this.props.windowId.startsWith('private') ? 'プライベート ' : ''}ブックマークから削除しました。` : `${this.props.windowId.startsWith('private') ? 'プライベート ' : ''}ブックマークに追加しました。`} ref="markTooltip" isShowing={true} isRight={true} isMarginLeft={true} isEnabled={true} src={this.state.isBookmarked ? StarFilledIcon : StarIcon} size={24} title={this.state.isBookmarked ? 'ブックマークから削除' : 'ブックマークに追加'} onClick={() => { this.bookMark(); }}>
+                                               <ToolbarButton data-tip={this.state.isBookmarked ? `${this.props.windowId.startsWith('private') ? 'プライベート ' : ''}ブックマークから削除しました。` : `${this.props.windowId.startsWith('private') ? 'プライベート ' : ''}ブックマークに追加しました。`} ref="markTooltip"
+                                                       isPrivate={String(this.props.windowId).startsWith('private')} src={this.state.isBookmarked ? (!String(this.props.windowId).startsWith('private') ? LightStarFilledIcon : DarkStarFilledIcon) : (!String(this.props.windowId).startsWith('private') ? LightStarIcon : DarkStarIcon)} size={12}
+                                                       isShowing={true} isRight={true} isMarginLeft={true} isEnabled={true} title={this.state.isBookmarked ? 'ブックマークから削除' : 'ブックマークに追加'} onClick={() => { this.bookMark(); }}>
                                                        <Tooltip effect="solid" place="left" event="no-event" />
                                                </ToolbarButton>
                                        </ToolbarTextBoxWrapper>
-                                       <ToolbarButton isShowing={true} isRight={true} isMarginLeft={true} isEnabled={true} src={FeedbackIcon} size={24} title="フィードバックの送信" />
-                                       <ToolbarDivider />
-                                       <ToolbarButton isShowing={true} isRight={true} isMarginLeft={true} isEnabled={true} src={this.props.windowId.startsWith('private') ? ShieldIcon : AccountIcon} size={24} title={this.props.windowId.startsWith('private') ? 'プライベートモード' : process.env.USERNAME} onClick={() => { this.userMenu(); }} />
-                                       <ToolbarButton isShowing={true} isRight={true} isMarginLeft={false} isEnabled={true} src={MoreIcon} size={24} title="メニュー" onClick={() => { this.moreMenu(); }} />
+                                       <ToolbarButton isPrivate={String(this.props.windowId).startsWith('private')} src={FeedbackIcon} size={24}
+                                               isShowing={true} isRight={true} isMarginLeft={true} isEnabled={true} title="フィードバックの送信" />
+                                       <ToolbarDivider isPrivate={String(this.props.windowId).startsWith('private')} />
+                                       <ToolbarButton isPrivate={String(this.props.windowId).startsWith('private')} src={this.props.windowId.startsWith('private') ? (!String(this.props.windowId).startsWith('private') ? LightShieldIcon : DarkShieldIcon) : AccountIcon} size={24}
+                                               isShowing={true} isRight={true} isMarginLeft={true} isEnabled={true} title={this.props.windowId.startsWith('private') ? 'プライベートモード' : process.env.USERNAME} onClick={() => { this.userMenu(); }} />
+                                       <ToolbarButton isPrivate={String(this.props.windowId).startsWith('private')} src={!String(this.props.windowId).startsWith('private') ? LightMoreIcon : DarkMoreIcon} size={24}
+                                               isShowing={true} isRight={true} isMarginLeft={false} isEnabled={true} title="メニュー" onClick={() => { this.moreMenu(); }} />
                                </Toolbar>
                        </ContentWrapper>
                );
@@ -512,15 +502,15 @@ class App extends Component {
                                                <TabContainer>
                                                        {this.state.tabs.map((tab, i) => {
                                                                return (
-                                                                       <Tab isActive={tab.id == this.state.current} isFixed={tab.fixed} onClick={() => { ipcRenderer.send(`browserview-select-${this.props.match.params.windowId}`, { id: tab.id }); }} onContextMenu={this.handleContextMenu.bind(this, tab.id)}>
-                                                                               <TabIcon src={tab.icon != undefined ? tab.icon : PublicIcon} width={18} height={18} />
-                                                                               <TabTitle isFixed={tab.fixed} title={tab.title}>{tab.title}</TabTitle>
-                                                                               <TabCloseButton isActive={tab.id == this.state.current} isFixed={tab.fixed} isRight={true} src={CloseIcon} size={14} title="このタブを閉じる" onClick={() => { this.removeTab(tab.id); }} />
+                                                                       <Tab isPrivate={String(this.props.match.params.windowId).startsWith('private')} isActive={tab.id == this.state.current} isFixed={tab.fixed} onClick={() => { ipcRenderer.send(`browserview-select-${this.props.match.params.windowId}`, { id: tab.id }); }} onContextMenu={this.handleContextMenu.bind(this, tab.id)}>
+                                                                               <TabIcon src={tab.icon != undefined ? tab.icon : (!String(this.props.match.params.windowId).startsWith('private') ? LightPublicIcon : DarkPublicIcon)} width={18} height={18} />
+                                                                               <TabTitle color={this.getForegroundColor(!String(this.props.match.params.windowId).startsWith('private') ? (platform.isWin32 || platform.isDarwin ? `#${systemPreferences.getAccentColor()}` : '#353535') : '#353535')} isFixed={tab.fixed} title={tab.title}>{tab.title}</TabTitle>
+                                                                               <TabCloseButton isActive={tab.id == this.state.current} isFixed={tab.fixed} isRight={true} src={!String(this.props.match.params.windowId).startsWith('private') ? LightCloseIcon : DarkCloseIcon} size={14} title="このタブを閉じる" onClick={() => { this.removeTab(tab.id); }} />
                                                                        </Tab>
                                                                );
                                                        })}
                                                </TabContainer>
-                                               <TabButton isRight={true} src={AddIcon} size={24} title="新しいタブを開く" onClick={() => { this.addTab(); }} />
+                                               <TabButton isRight={true} src={!String(this.props.match.params.windowId).startsWith('private') ? LightAddIcon : DarkAddIcon} size={24} title="新しいタブを開く" onClick={() => { this.addTab(); }} />
                                        </Tabs>
                                        <WindowButtons isCustomTitlebar={config.get('window.isCustomTitlebar')}>
                                                <WindowButton isClose={false} title="最小化" onClick={() => { remote.getCurrentWindow().minimize(); }}>
index a456b4e..99b7a57 100644 (file)
@@ -17,10 +17,10 @@ export const Tab = styled.div`
   height: 100%;
   padding: 6px ${paddingSize}px;
   position: relative;
-  background: ${props => props.isActive ? '#f9f9fa' : 'initial'};
+  background: ${props => props.isActive ? (!props.isPrivate ? '#f9f9fa' : '#353535') : 'initial'};
   border-top: ${props => props.isActive ? `solid 2px #0a84ff` : 'solid 2px transparent'};
   border-right: solid 0.5px #8b8b8b;
-  color: ${props => props.isActive ? 'black' : 'white'};
+  color: ${props => props.isActive ? (!props.isPrivate ? 'black' : 'white') : 'white'};
   font-size: 11px;
   overflow: hidden;
   white-space: nowrap;
@@ -29,7 +29,7 @@ export const Tab = styled.div`
   box-sizing: border-box;
   -webkit-app-region: no-drag;
   &:hover {
-    background-color: ${props => !props.isActive ? 'rgba(196, 196, 196, 0.4)' : '#f9f9fa'};
+    background-color: ${props => !props.isActive ? 'rgba(196, 196, 196, 0.4)' : (!props.isPrivate ? '#f9f9fa' : '#353535')};
   }
 `;
 
index 27ce14d..d0e23e4 100644 (file)
@@ -4,7 +4,7 @@ const Toolbar = styled.div`
   width: 100%;
   height: 40px;
   display: flex;
-  background: #f9f9fa;
+  background: ${props => !props.isPrivate ? '#f9f9fa' : '#353535'};
   border-bottom: solid 1px #e1e1e2;
   box-sizing: border-box;
 `;
index 3dea58a..1a60ff7 100644 (file)
@@ -18,7 +18,7 @@ const ToolbarButton = styled.div`
   box-sizing: border-box;
   float: ${props => props.isRight ? 'right' : 'left'};
   &:hover {
-    ${props => props.isEnabled && 'background-color: rgba(0, 0, 0, 0.06);'}
+    ${props => props.isEnabled && `background-color: ${!props.isPrivate ? 'rgba(0, 0, 0, 0.06)' : 'rgba(130, 130, 130, 0.3)'};`}
   }
 `;
 
index 66a76bd..414cb3a 100644 (file)
@@ -3,11 +3,12 @@ import styled from 'styled-components';
 const buttonSize = 30;
 
 export const ToolbarTextBoxWrapper = styled.div`
-  background: white;
+  background: ${props => !props.isPrivate ? 'white' : '#252525'};
   border: solid 1px #c1c1c1;
   border-radius: 2px;
-  font-size: 14.5px;
   outline: none;
+  color: ${props => !props.isPrivate ? 'black' : 'white'};
+  font-size: 14.5px;
   width: calc((100% - 40px * ${props => props.buttonCount}) - 25px);
   height: auto;
   margin: 5px;
@@ -47,6 +48,7 @@ export const ToolbarTextBox = styled.input`
   box-sizing: border-box;
   outline: none;
   cursor: initial;
+  background: unset;
   border: none;
   border-left: solid 1px #c1c1c1;
   border-right: solid 1px #c1c1c1;
index 1b905af..bc3c220 100644 (file)
@@ -1,52 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="24"
-   height="24"
-   viewBox="0 0 24 24"
-   version="1.1"
-   id="svg3729"
-   sodipodi:docname="arrow_back_inactive.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
-  <metadata
-     id="metadata3735">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs3733" />
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1017"
-     id="namedview3731"
-     showgrid="false"
-     inkscape:zoom="35.333333"
-     inkscape:cx="12"
-     inkscape:cy="12"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg3729" />
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
   <path
      d="M0 0h24v24H0z"
      fill="none"
index 3cdffe5..6c696d4 100644 (file)
@@ -1,52 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="24"
-   height="24"
-   viewBox="0 0 24 24"
-   version="1.1"
-   id="svg3761"
-   sodipodi:docname="arrow_forward_inactive.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
-  <metadata
-     id="metadata3767">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs3765" />
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1017"
-     id="namedview3763"
-     showgrid="false"
-     inkscape:zoom="35.333333"
-     inkscape:cx="12"
-     inkscape:cy="12"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg3761" />
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
   <path
      d="M0 0h24v24H0z"
      fill="none"
diff --git a/app/src/Resources/dark/add.svg b/app/src/Resources/dark/add.svg
new file mode 100644 (file)
index 0000000..523ae40
--- /dev/null
@@ -0,0 +1,4 @@
+<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" fill="#ffffff">
+    <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
+    <path d="M0 0h24v24H0z" fill="none"/>
+</svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/arrow_back.svg b/app/src/Resources/dark/arrow_back.svg
new file mode 100644 (file)
index 0000000..e5e1402
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/arrow_forward.svg b/app/src/Resources/dark/arrow_forward.svg
new file mode 100644 (file)
index 0000000..f1ea7b0
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/close.svg b/app/src/Resources/dark/close.svg
new file mode 100644 (file)
index 0000000..5d673fc
--- /dev/null
@@ -0,0 +1,4 @@
+<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" fill="#ffffff">
+    <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
+    <path d="M0 0h24v24H0z" fill="none"/>
+</svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/home.svg b/app/src/Resources/dark/home.svg
new file mode 100644 (file)
index 0000000..3b2838f
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/info.svg b/app/src/Resources/dark/info.svg
new file mode 100644 (file)
index 0000000..7e0348f
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/more.svg b/app/src/Resources/dark/more.svg
new file mode 100644 (file)
index 0000000..12d5961
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/public.svg b/app/src/Resources/dark/public.svg
new file mode 100644 (file)
index 0000000..ca24a46
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/reload.svg b/app/src/Resources/dark/reload.svg
new file mode 100644 (file)
index 0000000..50e7b75
--- /dev/null
@@ -0,0 +1,4 @@
+<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" fill="#ffffff">
+    <path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/>
+    <path d="M0 0h24v24H0z" fill="none"/>
+</svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/shield.svg b/app/src/Resources/dark/shield.svg
new file mode 100644 (file)
index 0000000..867f2fc
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/star-filled.svg b/app/src/Resources/dark/star-filled.svg
new file mode 100644 (file)
index 0000000..9b3ac2b
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/dark/star.svg b/app/src/Resources/dark/star.svg
new file mode 100644 (file)
index 0000000..697fe8d
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/add.svg b/app/src/Resources/light/add.svg
new file mode 100644 (file)
index 0000000..d5c10a9
--- /dev/null
@@ -0,0 +1,4 @@
+<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" fill="#000000">
+    <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
+    <path d="M0 0h24v24H0z" fill="none"/>
+</svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/arrow_back.svg b/app/src/Resources/light/arrow_back.svg
new file mode 100644 (file)
index 0000000..3a735d8
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/arrow_forward.svg b/app/src/Resources/light/arrow_forward.svg
new file mode 100644 (file)
index 0000000..de05024
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/close.svg b/app/src/Resources/light/close.svg
new file mode 100644 (file)
index 0000000..6fff8b1
--- /dev/null
@@ -0,0 +1,4 @@
+<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" fill="#000000">
+    <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
+    <path d="M0 0h24v24H0z" fill="none"/>
+</svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/home.svg b/app/src/Resources/light/home.svg
new file mode 100644 (file)
index 0000000..ffba26b
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/info.svg b/app/src/Resources/light/info.svg
new file mode 100644 (file)
index 0000000..f8aba4c
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/more.svg b/app/src/Resources/light/more.svg
new file mode 100644 (file)
index 0000000..2c3fd9c
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/public.svg b/app/src/Resources/light/public.svg
new file mode 100644 (file)
index 0000000..74981e0
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/reload.svg b/app/src/Resources/light/reload.svg
new file mode 100644 (file)
index 0000000..e8312dc
--- /dev/null
@@ -0,0 +1,4 @@
+<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg" fill="#000000">
+    <path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/>
+    <path d="M0 0h24v24H0z" fill="none"/>
+</svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/shield.svg b/app/src/Resources/light/shield.svg
new file mode 100644 (file)
index 0000000..d453581
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/star-filled.svg b/app/src/Resources/light/star-filled.svg
new file mode 100644 (file)
index 0000000..0c13d08
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
\ No newline at end of file
diff --git a/app/src/Resources/light/star.svg b/app/src/Resources/light/star.svg
new file mode 100644 (file)
index 0000000..d7a81a5
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"/><path d="M0 0h24v24H0z" fill="none"/></svg>
\ No newline at end of file
index 567c6da..0fa6734 100644 (file)
@@ -1,52 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="24"
-   height="24"
-   viewBox="0 0 24 24"
-   version="1.1"
-   id="svg26"
-   sodipodi:docname="public_inactive.svg"
-   inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
-  <metadata
-     id="metadata32">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs30" />
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1017"
-     id="namedview28"
-     showgrid="false"
-     inkscape:zoom="35.333333"
-     inkscape:cx="12"
-     inkscape:cy="12"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg26" />
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
   <path
      d="M0 0h24v24H0z"
      fill="none"
diff --git a/app/static/arrow_back.png b/app/static/arrow_back.png
new file mode 100644 (file)
index 0000000..4a04f65
Binary files /dev/null and b/app/static/arrow_back.png differ
diff --git a/app/static/arrow_back@2x.png b/app/static/arrow_back@2x.png
new file mode 100644 (file)
index 0000000..7ffa686
Binary files /dev/null and b/app/static/arrow_back@2x.png differ
diff --git a/app/static/arrow_back_inactive.png b/app/static/arrow_back_inactive.png
new file mode 100644 (file)
index 0000000..70f01c9
Binary files /dev/null and b/app/static/arrow_back_inactive.png differ
diff --git a/app/static/arrow_back_inactive@2x.png b/app/static/arrow_back_inactive@2x.png
new file mode 100644 (file)
index 0000000..0247ff7
Binary files /dev/null and b/app/static/arrow_back_inactive@2x.png differ
diff --git a/app/static/arrow_downward.png b/app/static/arrow_downward.png
new file mode 100644 (file)
index 0000000..d5bb07e
Binary files /dev/null and b/app/static/arrow_downward.png differ
diff --git a/app/static/arrow_downward@2x.png b/app/static/arrow_downward@2x.png
new file mode 100644 (file)
index 0000000..4cf9383
Binary files /dev/null and b/app/static/arrow_downward@2x.png differ
diff --git a/app/static/arrow_forward.png b/app/static/arrow_forward.png
new file mode 100644 (file)
index 0000000..f428a26
Binary files /dev/null and b/app/static/arrow_forward.png differ
diff --git a/app/static/arrow_forward@2x.png b/app/static/arrow_forward@2x.png
new file mode 100644 (file)
index 0000000..d9d51b1
Binary files /dev/null and b/app/static/arrow_forward@2x.png differ
diff --git a/app/static/arrow_forward_inactive.png b/app/static/arrow_forward_inactive.png
new file mode 100644 (file)
index 0000000..1c12c07
Binary files /dev/null and b/app/static/arrow_forward_inactive.png differ
diff --git a/app/static/arrow_forward_inactive@2x.png b/app/static/arrow_forward_inactive@2x.png
new file mode 100644 (file)
index 0000000..a5f9591
Binary files /dev/null and b/app/static/arrow_forward_inactive@2x.png differ
diff --git a/app/static/arrow_upward.png b/app/static/arrow_upward.png
new file mode 100644 (file)
index 0000000..8dd9cf0
Binary files /dev/null and b/app/static/arrow_upward.png differ
diff --git a/app/static/arrow_upward@2x.png b/app/static/arrow_upward@2x.png
new file mode 100644 (file)
index 0000000..e7bbf5d
Binary files /dev/null and b/app/static/arrow_upward@2x.png differ
diff --git a/app/static/bookmarks.png b/app/static/bookmarks.png
new file mode 100644 (file)
index 0000000..ab4aa48
Binary files /dev/null and b/app/static/bookmarks.png differ
diff --git a/app/static/bookmarks@2x.png b/app/static/bookmarks@2x.png
new file mode 100644 (file)
index 0000000..c4dcc7a
Binary files /dev/null and b/app/static/bookmarks@2x.png differ
diff --git a/app/static/close.png b/app/static/close.png
new file mode 100644 (file)
index 0000000..aa51b15
Binary files /dev/null and b/app/static/close.png differ
diff --git a/app/static/close@2x.png b/app/static/close@2x.png
new file mode 100644 (file)
index 0000000..858996e
Binary files /dev/null and b/app/static/close@2x.png differ
diff --git a/app/static/download.png b/app/static/download.png
new file mode 100644 (file)
index 0000000..043f6f6
Binary files /dev/null and b/app/static/download.png differ
diff --git a/app/static/download@2x.png b/app/static/download@2x.png
new file mode 100644 (file)
index 0000000..d94bd3f
Binary files /dev/null and b/app/static/download@2x.png differ
diff --git a/app/static/find.png b/app/static/find.png
new file mode 100644 (file)
index 0000000..10f9b49
Binary files /dev/null and b/app/static/find.png differ
diff --git a/app/static/find@2x.png b/app/static/find@2x.png
new file mode 100644 (file)
index 0000000..7e699f1
Binary files /dev/null and b/app/static/find@2x.png differ
diff --git a/app/static/help.png b/app/static/help.png
new file mode 100644 (file)
index 0000000..295008f
Binary files /dev/null and b/app/static/help.png differ
diff --git a/app/static/help@2x.png b/app/static/help@2x.png
new file mode 100644 (file)
index 0000000..5e282bc
Binary files /dev/null and b/app/static/help@2x.png differ
diff --git a/app/static/help_outline.png b/app/static/help_outline.png
new file mode 100644 (file)
index 0000000..b612684
Binary files /dev/null and b/app/static/help_outline.png differ
diff --git a/app/static/help_outline@2x.png b/app/static/help_outline@2x.png
new file mode 100644 (file)
index 0000000..cf703c4
Binary files /dev/null and b/app/static/help_outline@2x.png differ
diff --git a/app/static/history.png b/app/static/history.png
new file mode 100644 (file)
index 0000000..a4c238e
Binary files /dev/null and b/app/static/history.png differ
diff --git a/app/static/history@2x.png b/app/static/history@2x.png
new file mode 100644 (file)
index 0000000..213aa9a
Binary files /dev/null and b/app/static/history@2x.png differ
diff --git a/app/static/print.png b/app/static/print.png
new file mode 100644 (file)
index 0000000..9c54d0d
Binary files /dev/null and b/app/static/print.png differ
diff --git a/app/static/print@2x.png b/app/static/print@2x.png
new file mode 100644 (file)
index 0000000..036f25a
Binary files /dev/null and b/app/static/print@2x.png differ
diff --git a/app/static/refresh.png b/app/static/refresh.png
new file mode 100644 (file)
index 0000000..b1321c3
Binary files /dev/null and b/app/static/refresh.png differ
diff --git a/app/static/refresh@2x.png b/app/static/refresh@2x.png
new file mode 100644 (file)
index 0000000..1d613e5
Binary files /dev/null and b/app/static/refresh@2x.png differ
diff --git a/app/static/settings.png b/app/static/settings.png
new file mode 100644 (file)
index 0000000..39c472f
Binary files /dev/null and b/app/static/settings.png differ
diff --git a/app/static/settings@2x.png b/app/static/settings@2x.png
new file mode 100644 (file)
index 0000000..f2d6980
Binary files /dev/null and b/app/static/settings@2x.png differ
diff --git a/app/static/shield.png b/app/static/shield.png
new file mode 100644 (file)
index 0000000..e82960e
Binary files /dev/null and b/app/static/shield.png differ
diff --git a/app/static/shield@2x.png b/app/static/shield@2x.png
new file mode 100644 (file)
index 0000000..f7c5b21
Binary files /dev/null and b/app/static/shield@2x.png differ
index 42aa791..21d9f40 100644 (file)
@@ -1,5 +1,3 @@
-'use strict';
-
 const builder = require('electron-builder');
 const fs = require('fs');
 const packageJson = JSON.parse(fs.readFileSync('./app/package.json', 'utf8'));
@@ -9,13 +7,28 @@ builder.build({
     config: {
         'appId': `org.aoichaan0513.${packageJson.name}`,
         'productName': packageJson.name,
+        'copyright': `Copyright 2019 ${packageJson.author.name}. All rights reserved.`,
         'asar': true,
+        'fileAssociations': [
+            {
+                'name': 'Document',
+                'description': packageJson.name,
+                'role': 'Viewer',
+                'ext': 'html'
+            }
+        ],
         'nsis': {
             'installerIcon': './static/icon.ico',
             'uninstallerIcon': './static/icon.ico'
         },
         'linux': {
-            'target': 'deb',
+            'category': 'Network',
+            'target': [
+                {
+                    'target': 'AppImage',
+                    'arch': ['ia32', 'x64']
+                }
+            ],
             'icon': './static/icon.ico',
         },
     },
index 13af746..90100db 100644 (file)
@@ -1,5 +1,3 @@
-'use strict';
-
 const builder = require('electron-builder');
 const fs = require('fs');
 const packageJson = JSON.parse(fs.readFileSync('./app/package.json', 'utf8'));
@@ -9,7 +7,16 @@ builder.build({
     config: {
         'appId': `org.aoichaan0513.${packageJson.name}`,
         'productName': packageJson.name,
+        'copyright': `Copyright 2019 ${packageJson.author.name}. All rights reserved.`,
         'asar': true,
+        'fileAssociations': [
+            {
+                'name': 'Document',
+                'description': packageJson.name,
+                'role': 'Viewer',
+                'ext': 'html'
+            }
+        ],
         'nsis': {
             'installerIcon': './static/icon.ico',
             'uninstallerIcon': './static/icon.ico'
index c1da1cc..2dfb71e 100644 (file)
@@ -1,5 +1,3 @@
-'use strict';
-
 const builder = require('electron-builder');
 const fs = require('fs');
 const packageJson = JSON.parse(fs.readFileSync('./app/package.json', 'utf8'));
@@ -9,7 +7,16 @@ builder.build({
     config: {
         'appId': `org.aoichaan0513.${packageJson.name}`,
         'productName': packageJson.name,
+        'copyright': `Copyright 2019 ${packageJson.author.name}. All rights reserved.`,
         'asar': true,
+        'fileAssociations': [
+            {
+                'name': 'Document',
+                'description': packageJson.name,
+                'role': 'Viewer',
+                'ext': 'html'
+            }
+        ],
         'nsis': {
             'installerIcon': './static/icon.ico',
             'uninstallerIcon': './static/icon.ico'
index 758f2e3..6f78771 100644 (file)
@@ -1,6 +1,7 @@
 {
        "name": "MyBrowser",
-       "version": "1.4.7",
+       "description": "Cross-platform browser based on Chromium.",
+       "version": "1.5.2",
        "private": true,
        "author": {
                "name": "Aoichaan0513",