mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-11-04 15:11:31 +08:00 
			
		
		
		
	use trilium version number in asset paths to avoid caching issues WIP
This commit is contained in:
		
							parent
							
								
									441a59305b
								
							
						
					
					
						commit
						b499640db8
					
				@ -2,7 +2,7 @@ image:
 | 
			
		||||
  file: .gitpod.dockerfile
 | 
			
		||||
 | 
			
		||||
tasks:
 | 
			
		||||
    - before: nvm install 16.15.0 && nvm use 16.15.0
 | 
			
		||||
    - before: nvm install 16.18.0 && nvm use 16.18.0
 | 
			
		||||
      init: npm install
 | 
			
		||||
      command: npm run start-server
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
# !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!!
 | 
			
		||||
FROM node:16.15.0-alpine
 | 
			
		||||
FROM node:16.18.0-alpine
 | 
			
		||||
 | 
			
		||||
# Create app directory
 | 
			
		||||
WORKDIR /usr/src/app
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
PKG_DIR=dist/trilium-linux-x64-server
 | 
			
		||||
NODE_VERSION=16.15.0
 | 
			
		||||
NODE_VERSION=16.18.0
 | 
			
		||||
 | 
			
		||||
if [ "$1" != "DONTCOPY" ]
 | 
			
		||||
then
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ if [[ $# -eq 0 ]] ; then
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
n exec 16.15.0 npm run webpack
 | 
			
		||||
n exec 16.18.0 npm run webpack
 | 
			
		||||
 | 
			
		||||
DIR=$1
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,7 @@ cp -r electron.js $DIR/
 | 
			
		||||
cp webpack-* $DIR/
 | 
			
		||||
 | 
			
		||||
# run in subshell (so we return to original dir)
 | 
			
		||||
(cd $DIR && n exec 16.15.0 npm install --only=prod)
 | 
			
		||||
(cd $DIR && n exec 16.18.0 npm install --only=prod)
 | 
			
		||||
 | 
			
		||||
# cleanup of useless files in dependencies
 | 
			
		||||
rm -r $DIR/node_modules/image-q/demo
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ It is meant as a last resort solution when the standard mean to access your data
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
This tool requires node.js, testing has been done on 16.15.0, but it will probably work on other versions as well.
 | 
			
		||||
This tool requires node.js, testing has been done on 16.18.0, but it will probably work on other versions as well.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
npm install
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@ -1,12 +1,12 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "trilium",
 | 
			
		||||
  "version": "0.56.0-beta",
 | 
			
		||||
  "version": "0.56.1",
 | 
			
		||||
  "lockfileVersion": 2,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "packages": {
 | 
			
		||||
    "": {
 | 
			
		||||
      "name": "trilium",
 | 
			
		||||
      "version": "0.56.0-beta",
 | 
			
		||||
      "version": "0.56.1",
 | 
			
		||||
      "hasInstallScript": true,
 | 
			
		||||
      "license": "AGPL-3.0-only",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@ const Branch = require('../../src/becca/entities/branch');
 | 
			
		||||
const SearchContext = require('../../src/services/search/search_context');
 | 
			
		||||
const dateUtils = require('../../src/services/date_utils');
 | 
			
		||||
const becca = require('../../src/becca/becca');
 | 
			
		||||
const {NoteBuilder, findNoteByTitle, note} = require('./note_cache_mocking');
 | 
			
		||||
const {NoteBuilder, findNoteByTitle, note} = require('./becca_mocking.js');
 | 
			
		||||
 | 
			
		||||
describe("Search", () => {
 | 
			
		||||
    let rootNote;
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
const {note} = require('./note_cache_mocking');
 | 
			
		||||
const {note} = require('./becca_mocking.js');
 | 
			
		||||
const ValueExtractor = require('../../src/services/search/value_extractor');
 | 
			
		||||
const becca = require('../../src/becca/becca');
 | 
			
		||||
const SearchContext = require("../../src/services/search/search_context");
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								src/app.js
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								src/app.js
									
									
									
									
									
								
							@ -10,6 +10,7 @@ const FileStore = require('session-file-store')(session);
 | 
			
		||||
const sessionSecret = require('./services/session_secret');
 | 
			
		||||
const dataDir = require('./services/data_dir');
 | 
			
		||||
const utils = require('./services/utils');
 | 
			
		||||
const assetPath = require('./services/asset_path');
 | 
			
		||||
require('./services/handlers');
 | 
			
		||||
require('./becca/becca_loader');
 | 
			
		||||
 | 
			
		||||
@ -34,14 +35,19 @@ app.use(express.json({limit: '500mb'}));
 | 
			
		||||
app.use(express.raw({limit: '500mb'}));
 | 
			
		||||
app.use(express.urlencoded({extended: false}));
 | 
			
		||||
app.use(cookieParser());
 | 
			
		||||
app.use(express.static(path.join(__dirname, 'public')));
 | 
			
		||||
app.use('/libraries', express.static(path.join(__dirname, '..', 'libraries')));
 | 
			
		||||
app.use(express.static(path.join(__dirname, 'public/root')));
 | 
			
		||||
app.use(`/${assetPath}/app`, express.static(path.join(__dirname, 'public/app')));
 | 
			
		||||
app.use(`/${assetPath}/app-dist`, express.static(path.join(__dirname, 'public/app-dist')));
 | 
			
		||||
app.use(`/${assetPath}/fonts`, express.static(path.join(__dirname, 'public/fonts')));
 | 
			
		||||
app.use(`/${assetPath}/stylesheets`, express.static(path.join(__dirname, 'public/stylesheets')));
 | 
			
		||||
app.use(`/${assetPath}/libraries`, express.static(path.join(__dirname, '..', 'libraries')));
 | 
			
		||||
// excalidraw-view mode in shared notes
 | 
			
		||||
app.use('/node_modules/react/umd/react.production.min.js', express.static(path.join(__dirname, '..', 'node_modules/react/umd/react.production.min.js')));
 | 
			
		||||
app.use('/node_modules/react-dom/umd/react-dom.production.min.js', express.static(path.join(__dirname, '..', 'node_modules/react-dom/umd/react-dom.production.min.js')));
 | 
			
		||||
app.use(`/${assetPath}/node_modules/react/umd/react.production.min.js`, express.static(path.join(__dirname, '..', 'node_modules/react/umd/react.production.min.js')));
 | 
			
		||||
app.use(`/${assetPath}/node_modules/react-dom/umd/react-dom.production.min.js`, express.static(path.join(__dirname, '..', 'node_modules/react-dom/umd/react-dom.production.min.js')));
 | 
			
		||||
// expose whole dist folder since complete assets are needed in edit and share
 | 
			
		||||
app.use('/node_modules/@excalidraw/excalidraw/dist/', express.static(path.join(__dirname, '..', 'node_modules/@excalidraw/excalidraw/dist/')));
 | 
			
		||||
app.use('/images', express.static(path.join(__dirname, '..', 'images')));
 | 
			
		||||
app.use(`/node_modules/@excalidraw/excalidraw/dist/`, express.static(path.join(__dirname, '..', 'node_modules/@excalidraw/excalidraw/dist/')));
 | 
			
		||||
app.use(`/${assetPath}/node_modules/@excalidraw/excalidraw/dist/`, express.static(path.join(__dirname, '..', 'node_modules/@excalidraw/excalidraw/dist/')));
 | 
			
		||||
app.use(`/${assetPath}/images`, express.static(path.join(__dirname, '..', 'images')));
 | 
			
		||||
const sessionParser = session({
 | 
			
		||||
    secret: sessionSecret,
 | 
			
		||||
    resave: false, // true forces the session to be saved back to the session store, even if the session was never modified during the request.
 | 
			
		||||
 | 
			
		||||
@ -64,7 +64,7 @@ function setupGlobs() {
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    for (const appCssNoteId of glob.appCssNoteIds || []) {
 | 
			
		||||
        libraryLoader.requireCss(`api/notes/download/${appCssNoteId}`);
 | 
			
		||||
        libraryLoader.requireCss(`api/notes/download/${appCssNoteId}`, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    utils.initHelpButtons($(window));
 | 
			
		||||
 | 
			
		||||
@ -86,6 +86,8 @@ async function requireLibrary(library) {
 | 
			
		||||
const loadedScriptPromises = {};
 | 
			
		||||
 | 
			
		||||
async function requireScript(url) {
 | 
			
		||||
    url = window.glob.assetPath + "/" + url;
 | 
			
		||||
 | 
			
		||||
    if (!loadedScriptPromises[url]) {
 | 
			
		||||
        loadedScriptPromises[url] = $.ajax({
 | 
			
		||||
            url: url,
 | 
			
		||||
@ -97,12 +99,16 @@ async function requireScript(url) {
 | 
			
		||||
    await loadedScriptPromises[url];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function requireCss(url) {
 | 
			
		||||
async function requireCss(url, prependAssetPath = true) {
 | 
			
		||||
    const cssLinks = Array
 | 
			
		||||
        .from(document.querySelectorAll('link'))
 | 
			
		||||
        .map(el => el.href);
 | 
			
		||||
 | 
			
		||||
    if (!cssLinks.some(l => l.endsWith(url))) {
 | 
			
		||||
        if (prependAssetPath) {
 | 
			
		||||
            url = window.glob.assetPath + "/" + url;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $('head').append($('<link rel="stylesheet" type="text/css" />').attr('href', url));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ const TPL = `
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    .global-menu-button {
 | 
			
		||||
        background-image: url("images/icon-black.png");
 | 
			
		||||
        background-image: url("${window.glob.assetPath}/images/icon-black.png");
 | 
			
		||||
        background-repeat: no-repeat;
 | 
			
		||||
        background-position: 50% 45%;
 | 
			
		||||
        width: 100%;
 | 
			
		||||
@ -26,7 +26,7 @@ const TPL = `
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    .global-menu-button:hover {
 | 
			
		||||
        background-image: url("images/icon-color.png");
 | 
			
		||||
        background-image: url("${window.glob.assetPath}/images/icon-color.png");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    .global-menu-button-update-available {
 | 
			
		||||
 | 
			
		||||
@ -237,15 +237,17 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
 | 
			
		||||
            $promotedAttributes = (await attributeRenderer.renderNormalAttributes(this.note)).$renderedAttributes;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const {assetPath} = window.glob;
 | 
			
		||||
 | 
			
		||||
        this.$widget.find('.note-detail-printable:visible').printThis({
 | 
			
		||||
            header: $("<div>")
 | 
			
		||||
                        .append($("<h2>").text(this.note.title))
 | 
			
		||||
                        .append($promotedAttributes)
 | 
			
		||||
                        .prop('outerHTML'),
 | 
			
		||||
            footer: `
 | 
			
		||||
<script src="libraries/katex/katex.min.js"></script>
 | 
			
		||||
<script src="libraries/katex/mhchem.min.js"></script>
 | 
			
		||||
<script src="libraries/katex/auto-render.min.js"></script>
 | 
			
		||||
<script src="${assetPath}/libraries/katex/katex.min.js"></script>
 | 
			
		||||
<script src="${assetPath}/libraries/katex/mhchem.min.js"></script>
 | 
			
		||||
<script src="${assetPath}/libraries/katex/auto-render.min.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
    document.body.className += ' ck-content printed-content';
 | 
			
		||||
    
 | 
			
		||||
@ -254,13 +256,13 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
 | 
			
		||||
`,
 | 
			
		||||
            importCSS: false,
 | 
			
		||||
            loadCSS: [
 | 
			
		||||
                "libraries/codemirror/codemirror.css",
 | 
			
		||||
                "libraries/ckeditor/ckeditor-content.css",
 | 
			
		||||
                "libraries/bootstrap/css/bootstrap.min.css",
 | 
			
		||||
                "libraries/katex/katex.min.css",
 | 
			
		||||
                "stylesheets/print.css",
 | 
			
		||||
                "stylesheets/relation_map.css",
 | 
			
		||||
                "stylesheets/ckeditor-theme.css"
 | 
			
		||||
                assetPath + "/libraries/codemirror/codemirror.css",
 | 
			
		||||
                assetPath + "/libraries/ckeditor/ckeditor-content.css",
 | 
			
		||||
                assetPath + "/libraries/bootstrap/css/bootstrap.min.css",
 | 
			
		||||
                assetPath + "/libraries/katex/katex.min.css",
 | 
			
		||||
                assetPath + "/stylesheets/print.css",
 | 
			
		||||
                assetPath + "/stylesheets/relation_map.css",
 | 
			
		||||
                assetPath + "/stylesheets/ckeditor-theme.css"
 | 
			
		||||
            ],
 | 
			
		||||
            debug: true
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,7 @@ const env = require('../services/env');
 | 
			
		||||
const utils = require('../services/utils');
 | 
			
		||||
const protectedSessionService = require("../services/protected_session");
 | 
			
		||||
const packageJson = require('../../package.json');
 | 
			
		||||
const assetPath = require("../services/asset_path");
 | 
			
		||||
 | 
			
		||||
function index(req, res) {
 | 
			
		||||
    const options = optionService.getOptionsMap();
 | 
			
		||||
@ -36,7 +37,8 @@ function index(req, res) {
 | 
			
		||||
        extraHoistedNoteId: req.query.extraHoistedNoteId,
 | 
			
		||||
        isProtectedSessionAvailable: protectedSessionService.isProtectedSessionAvailable(),
 | 
			
		||||
        maxContentWidth: parseInt(options.maxContentWidth),
 | 
			
		||||
        triliumVersion: packageJson.version
 | 
			
		||||
        triliumVersion: packageJson.version,
 | 
			
		||||
        assetPath: assetPath
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -46,7 +48,7 @@ function getThemeCssUrl(theme) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (theme === 'dark') {
 | 
			
		||||
        return `stylesheets/theme-dark.css`;
 | 
			
		||||
        return `${assetPath}/stylesheets/theme-dark.css`;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        const themeNote = attributeService.getNoteWithLabel('appTheme', theme);
 | 
			
		||||
 | 
			
		||||
@ -5,13 +5,20 @@ const optionService = require('../services/options');
 | 
			
		||||
const myScryptService = require('../services/my_scrypt');
 | 
			
		||||
const log = require('../services/log');
 | 
			
		||||
const passwordService = require("../services/password");
 | 
			
		||||
const assetPath = require("../services/asset_path");
 | 
			
		||||
 | 
			
		||||
function loginPage(req, res) {
 | 
			
		||||
    res.render('login', { failedAuth: false });
 | 
			
		||||
    res.render('login', {
 | 
			
		||||
        failedAuth: false,
 | 
			
		||||
        assetPath: assetPath
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function setPasswordPage(req, res) {
 | 
			
		||||
    res.render('set_password', { error: false });
 | 
			
		||||
    res.render('set_password', {
 | 
			
		||||
        error: false,
 | 
			
		||||
        assetPath: assetPath
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function setPassword(req, res) {
 | 
			
		||||
@ -32,7 +39,10 @@ function setPassword(req, res) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (error) {
 | 
			
		||||
        res.render('set_password', { error });
 | 
			
		||||
        res.render('set_password', {
 | 
			
		||||
            error,
 | 
			
		||||
            assetPath: assetPath
 | 
			
		||||
        });
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -62,7 +72,10 @@ function login(req, res) {
 | 
			
		||||
        // note that logged IP address is usually meaningless since the traffic should come from a reverse proxy
 | 
			
		||||
        log.info(`WARNING: Wrong password from ${req.ip}, rejecting.`);
 | 
			
		||||
 | 
			
		||||
        res.render('login', {'failedAuth': true});
 | 
			
		||||
        res.render('login', {
 | 
			
		||||
            failedAuth: true,
 | 
			
		||||
            assetPath: assetPath
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@
 | 
			
		||||
const sqlInit = require('../services/sql_init');
 | 
			
		||||
const setupService = require('../services/setup');
 | 
			
		||||
const utils = require('../services/utils');
 | 
			
		||||
const assetPath = require("../services/asset_path");
 | 
			
		||||
 | 
			
		||||
function setupPage(req, res) {
 | 
			
		||||
    if (sqlInit.isDbInitialized()) {
 | 
			
		||||
@ -28,7 +29,8 @@ function setupPage(req, res) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    res.render('setup', {
 | 
			
		||||
        syncInProgress: syncInProgress
 | 
			
		||||
        syncInProgress: syncInProgress,
 | 
			
		||||
        assetPath: assetPath
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								src/services/asset_path.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/services/asset_path.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
const packageJson = require('../../package.json');
 | 
			
		||||
 | 
			
		||||
module.exports = "assets/v" + packageJson.version;
 | 
			
		||||
@ -6,6 +6,7 @@ const shaca = require("./shaca/shaca");
 | 
			
		||||
const shacaLoader = require("./shaca/shaca_loader");
 | 
			
		||||
const shareRoot = require("./share_root");
 | 
			
		||||
const contentRenderer = require("./content_renderer");
 | 
			
		||||
const assetPath = require("../services/asset_path");
 | 
			
		||||
 | 
			
		||||
function getSharedSubTreeRoot(note) {
 | 
			
		||||
    if (note.noteId === shareRoot.SHARE_ROOT_NOTE_ID) {
 | 
			
		||||
@ -103,7 +104,8 @@ function register(router) {
 | 
			
		||||
            header,
 | 
			
		||||
            content,
 | 
			
		||||
            isEmpty,
 | 
			
		||||
            subRoot
 | 
			
		||||
            subRoot,
 | 
			
		||||
            assetPath
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,8 @@
 | 
			
		||||
        isMainWindow: <%= isMainWindow %>,
 | 
			
		||||
        extraHoistedNoteId: '<%= extraHoistedNoteId %>',
 | 
			
		||||
        isProtectedSessionAvailable: <%= isProtectedSessionAvailable %>,
 | 
			
		||||
        triliumVersion: "<%= triliumVersion %>"
 | 
			
		||||
        triliumVersion: "<%= triliumVersion %>",
 | 
			
		||||
        assetPath: "<%= assetPath %>"
 | 
			
		||||
    };
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
@ -47,40 +48,40 @@
 | 
			
		||||
<!-- Required for correct loading of scripts in Electron -->
 | 
			
		||||
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/jquery.min.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/jquery.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<link href="libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<script src="libraries/bootstrap/js/bootstrap.bundle.min.js"></script>
 | 
			
		||||
<link href="<%= assetPath %>/libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<script src="<%= assetPath %>/libraries/bootstrap/js/bootstrap.bundle.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<!-- Include Fancytree library and skip -->
 | 
			
		||||
<link href="stylesheets/tree.css" rel="stylesheet">
 | 
			
		||||
<script src="libraries/fancytree/jquery.fancytree-all-deps.min.js"></script>
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/tree.css" rel="stylesheet">
 | 
			
		||||
<script src="<%= assetPath %>/libraries/fancytree/jquery.fancytree-all-deps.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/jquery.hotkeys.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/jquery.hotkeys.js"></script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/autocomplete.jquery.min.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/autocomplete.jquery.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/dayjs.min.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/dayjs.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/split.min.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/split.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<link href="stylesheets/ckeditor-theme.css" rel="stylesheet">
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/ckeditor-theme.css" rel="stylesheet">
 | 
			
		||||
<link href="api/fonts" rel="stylesheet">
 | 
			
		||||
<link href="stylesheets/theme-light.css" rel="stylesheet">
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/theme-light.css" rel="stylesheet">
 | 
			
		||||
 | 
			
		||||
<% if (themeCssUrl) { %>
 | 
			
		||||
<link href="<%= themeCssUrl %>" rel="stylesheet">
 | 
			
		||||
<% } %>
 | 
			
		||||
 | 
			
		||||
<link href="stylesheets/style.css" rel="stylesheet">
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/style.css" rel="stylesheet">
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
    $("body").show();
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script src="app/desktop.js" crossorigin type="module"></script>
 | 
			
		||||
<script src="<%= assetPath %>/app/desktop.js" crossorigin type="module"></script>
 | 
			
		||||
 | 
			
		||||
<link rel="stylesheet" type="text/css" href="libraries/boxicons/css/boxicons.min.css">
 | 
			
		||||
<link rel="stylesheet" type="text/css" href="<%= assetPath %>/libraries/boxicons/css/boxicons.min.css">
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 | 
			
		||||
    <title>Login</title>
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="180x180" href="images/app-icons/ios/apple-touch-icon.png">
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="180x180" href="<%= assetPath %>/images/app-icons/ios/apple-touch-icon.png">
 | 
			
		||||
    <link rel="shortcut icon" href="favicon.ico">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
@ -68,6 +68,6 @@
 | 
			
		||||
    }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<link href="libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<link href="<%= assetPath %>/libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
@ -115,31 +115,32 @@
 | 
			
		||||
        csrfToken: '<%= csrfToken %>',
 | 
			
		||||
        isDev: <%= isDev %>,
 | 
			
		||||
        appCssNoteIds: <%- JSON.stringify(appCssNoteIds) %>,
 | 
			
		||||
        isProtectedSessionAvailable: <%= isProtectedSessionAvailable %>
 | 
			
		||||
        isProtectedSessionAvailable: <%= isProtectedSessionAvailable %>,
 | 
			
		||||
        assetPath: "<%= assetPath %>"
 | 
			
		||||
    };
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/jquery.min.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/jquery.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/dayjs.min.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/dayjs.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<link href="stylesheets/tree.css" rel="stylesheet">
 | 
			
		||||
<script src="libraries/fancytree/jquery.fancytree-all-deps.min.js"></script>
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/tree.css" rel="stylesheet">
 | 
			
		||||
<script src="<%= assetPath %>/libraries/fancytree/jquery.fancytree-all-deps.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<link href="libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<script src="libraries/bootstrap/js/bootstrap.bundle.min.js"></script>
 | 
			
		||||
<link href="<%= assetPath %>/libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<script src="<%= assetPath %>/libraries/bootstrap/js/bootstrap.bundle.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<script src="app/mobile.js" crossorigin type="module"></script>
 | 
			
		||||
<script src="<%= assetPath %>/app/mobile.js" crossorigin type="module"></script>
 | 
			
		||||
 | 
			
		||||
<link href="api/fonts" rel="stylesheet">
 | 
			
		||||
<link href="stylesheets/ckeditor-theme.css" rel="stylesheet">
 | 
			
		||||
<link href="stylesheets/theme-light.css" rel="stylesheet">
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/ckeditor-theme.css" rel="stylesheet">
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/theme-light.css" rel="stylesheet">
 | 
			
		||||
<% if (themeCssUrl) { %>
 | 
			
		||||
    <link href="<%= themeCssUrl %>" rel="stylesheet">
 | 
			
		||||
<% } %>
 | 
			
		||||
<link href="stylesheets/style.css" rel="stylesheet">
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/style.css" rel="stylesheet">
 | 
			
		||||
 | 
			
		||||
<link rel="stylesheet" type="text/css" href="libraries/boxicons/css/boxicons.min.css">
 | 
			
		||||
<link rel="stylesheet" type="text/css" href="<%= assetPath %>/libraries/boxicons/css/boxicons.min.css">
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
    <meta charset="utf-8">
 | 
			
		||||
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 | 
			
		||||
    <title>Login</title>
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="180x180" href="images/app-icons/ios/apple-touch-icon.png">
 | 
			
		||||
    <link rel="apple-touch-icon" sizes="180x180" href="<%= assetPath %>/images/app-icons/ios/apple-touch-icon.png">
 | 
			
		||||
    <link rel="shortcut icon" href="favicon.ico">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
@ -46,6 +46,6 @@
 | 
			
		||||
    if (typeof module === 'object') {window.module = module; module = undefined;}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<link href="libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<link href="<%= assetPath %>/libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
@ -153,15 +153,15 @@
 | 
			
		||||
<!-- Required for correct loading of scripts in Electron -->
 | 
			
		||||
<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/jquery.min.js"></script>
 | 
			
		||||
<script src="libraries/jquery.hotkeys.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/jquery.min.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/jquery.hotkeys.js"></script>
 | 
			
		||||
 | 
			
		||||
<link href="libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<script src="libraries/bootstrap/js/bootstrap.bundle.min.js"></script>
 | 
			
		||||
<link href="<%= assetPath %>/libraries/bootstrap/css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<script src="<%= assetPath %>/libraries/bootstrap/js/bootstrap.bundle.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<script src="libraries/knockout.min.js"></script>
 | 
			
		||||
<script src="<%= assetPath %>/libraries/knockout.min.js"></script>
 | 
			
		||||
 | 
			
		||||
<script src="app/setup.js" crossorigin type="module"></script>
 | 
			
		||||
<link href="stylesheets/theme-light.css" rel="stylesheet">
 | 
			
		||||
<script src="<%= assetPath %>/app/setup.js" crossorigin type="module"></script>
 | 
			
		||||
<link href="<%= assetPath %>/stylesheets/theme-light.css" rel="stylesheet">
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
 | 
			
		||||
@ -12,13 +12,13 @@
 | 
			
		||||
    <% } else { %>
 | 
			
		||||
    <link rel="shortcut icon" href="../favicon.ico">
 | 
			
		||||
    <% } %>
 | 
			
		||||
    <script src="../app/share.js"></script>
 | 
			
		||||
    <script src="../<%= assetPath %>/app/share.js"></script>
 | 
			
		||||
    <% if (!note.hasLabel("shareOmitDefaultCss")) { %>
 | 
			
		||||
        <link href="../libraries/normalize.min.css" rel="stylesheet">
 | 
			
		||||
        <link href="../stylesheets/share.css" rel="stylesheet">
 | 
			
		||||
        <link href="../<%= assetPath %>/libraries/normalize.min.css" rel="stylesheet">
 | 
			
		||||
        <link href="../<%= assetPath %>/stylesheets/share.css" rel="stylesheet">
 | 
			
		||||
    <% } %>
 | 
			
		||||
    <% if (note.type === 'text' || note.type === 'book') { %>
 | 
			
		||||
        <link href="../libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
 | 
			
		||||
        <link href="../<%= assetPath %>/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
 | 
			
		||||
    <% } %>
 | 
			
		||||
    <% for (const cssRelation of note.getRelations("shareCss")) { %>
 | 
			
		||||
        <link href="api/notes/<%= cssRelation.value %>/download" rel="stylesheet">
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const assetPath = require('./src/services/asset_path');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    mode: 'production',
 | 
			
		||||
@ -6,7 +7,7 @@ module.exports = {
 | 
			
		||||
        mobile: './src/public/app/desktop.js',
 | 
			
		||||
    },
 | 
			
		||||
    output: {
 | 
			
		||||
        publicPath: 'app-dist/',
 | 
			
		||||
        publicPath: `/${assetPath}/app-dist/`,
 | 
			
		||||
        path: path.resolve(__dirname, 'src/public/app-dist'),
 | 
			
		||||
        filename: 'desktop.js'
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const assetPath = require('./src/services/asset_path');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    mode: 'production',
 | 
			
		||||
@ -6,7 +7,7 @@ module.exports = {
 | 
			
		||||
        mobile: './src/public/app/mobile.js',
 | 
			
		||||
    },
 | 
			
		||||
    output: {
 | 
			
		||||
        publicPath: 'app-dist/',
 | 
			
		||||
        publicPath: `/${assetPath}/app-dist/`,
 | 
			
		||||
        path: path.resolve(__dirname, 'src/public/app-dist'),
 | 
			
		||||
        filename: 'mobile.js'
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
const path = require('path');
 | 
			
		||||
const assetPath = require('./src/services/asset_path');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    mode: 'production',
 | 
			
		||||
@ -6,7 +7,7 @@ module.exports = {
 | 
			
		||||
        mobile: './src/public/app/setup.js',
 | 
			
		||||
    },
 | 
			
		||||
    output: {
 | 
			
		||||
        publicPath: 'app-dist/',
 | 
			
		||||
        publicPath: `/${assetPath}/app-dist/`,
 | 
			
		||||
        path: path.resolve(__dirname, 'src/public/app-dist'),
 | 
			
		||||
        filename: 'setup.js'
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user