mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-13 06:34:39 -04:00
Use JavaScript Standard Style (part 2)
Fixed all fail on frontend code.
This commit is contained in:
parent
4889e9732d
commit
5bc642d02e
19 changed files with 6790 additions and 7032 deletions
|
@ -1,7 +1,10 @@
|
|||
require('./locale');
|
||||
/* eslint-env browser, jquery */
|
||||
/* global moment, serverurl */
|
||||
|
||||
require('../css/cover.css');
|
||||
require('../css/site.css');
|
||||
require('./locale')
|
||||
|
||||
require('../css/cover.css')
|
||||
require('../css/site.css')
|
||||
|
||||
import {
|
||||
checkIfAuth,
|
||||
|
@ -9,7 +12,7 @@ import {
|
|||
getLoginState,
|
||||
resetCheckAuth,
|
||||
setloginStateChangeEvent
|
||||
} from './lib/common/login';
|
||||
} from './lib/common/login'
|
||||
|
||||
import {
|
||||
clearDuplicatedHistory,
|
||||
|
@ -23,411 +26,403 @@ import {
|
|||
removeHistory,
|
||||
saveHistory,
|
||||
saveStorageHistoryToServer
|
||||
} from './history';
|
||||
} from './history'
|
||||
|
||||
import { saveAs } from 'file-saver';
|
||||
import List from 'list.js';
|
||||
import S from 'string';
|
||||
import { saveAs } from 'file-saver'
|
||||
import List from 'list.js'
|
||||
import S from 'string'
|
||||
|
||||
const options = {
|
||||
valueNames: ['id', 'text', 'timestamp', 'fromNow', 'time', 'tags', 'pinned'],
|
||||
item: '<li class="col-xs-12 col-sm-6 col-md-6 col-lg-4">\
|
||||
<span class="id" style="display:none;"></span>\
|
||||
<a href="#">\
|
||||
<div class="item">\
|
||||
<div class="ui-history-pin fa fa-thumb-tack fa-fw"></div>\
|
||||
<div class="ui-history-close fa fa-close fa-fw" data-toggle="modal" data-target=".delete-modal"></div>\
|
||||
<div class="content">\
|
||||
<h4 class="text"></h4>\
|
||||
<p>\
|
||||
<i><i class="fa fa-clock-o"></i> visited </i><i class="fromNow"></i>\
|
||||
<br>\
|
||||
<i class="timestamp" style="display:none;"></i>\
|
||||
<i class="time"></i>\
|
||||
</p>\
|
||||
<p class="tags"></p>\
|
||||
</div>\
|
||||
</div>\
|
||||
</a>\
|
||||
</li>',
|
||||
page: 18,
|
||||
plugins: [
|
||||
ListPagination({
|
||||
outerWindow: 1
|
||||
})
|
||||
]
|
||||
};
|
||||
const historyList = new List('history', options);
|
||||
valueNames: ['id', 'text', 'timestamp', 'fromNow', 'time', 'tags', 'pinned'],
|
||||
item: '<li class="col-xs-12 col-sm-6 col-md-6 col-lg-4">' +
|
||||
'<span class="id" style="display:none;"></span>' +
|
||||
'<a href="#">' +
|
||||
'<div class="item">' +
|
||||
'<div class="ui-history-pin fa fa-thumb-tack fa-fw"></div>' +
|
||||
'<div class="ui-history-close fa fa-close fa-fw" data-toggle="modal" data-target=".delete-modal"></div>' +
|
||||
'<div class="content">' +
|
||||
'<h4 class="text"></h4>' +
|
||||
'<p>' +
|
||||
'<i><i class="fa fa-clock-o"></i> visited </i><i class="fromNow"></i>' +
|
||||
'<br>' +
|
||||
'<i class="timestamp" style="display:none;"></i>' +
|
||||
'<i class="time"></i>' +
|
||||
'</p>' +
|
||||
'<p class="tags"></p>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</a>' +
|
||||
'</li>',
|
||||
page: 18,
|
||||
plugins: [
|
||||
window.ListPagination({
|
||||
outerWindow: 1
|
||||
})
|
||||
]
|
||||
}
|
||||
const historyList = new List('history', options)
|
||||
|
||||
migrateHistoryFromTempCallback = pageInit;
|
||||
setloginStateChangeEvent(pageInit);
|
||||
window.migrateHistoryFromTempCallback = pageInit
|
||||
setloginStateChangeEvent(pageInit)
|
||||
|
||||
pageInit();
|
||||
pageInit()
|
||||
|
||||
function pageInit() {
|
||||
checkIfAuth(
|
||||
function pageInit () {
|
||||
checkIfAuth(
|
||||
data => {
|
||||
$('.ui-signin').hide();
|
||||
$('.ui-or').hide();
|
||||
$('.ui-welcome').show();
|
||||
if (data.photo) $('.ui-avatar').prop('src', data.photo).show();
|
||||
else $('.ui-avatar').prop('src', '').hide();
|
||||
$('.ui-name').html(data.name);
|
||||
$('.ui-signout').show();
|
||||
$(".ui-history").click();
|
||||
parseServerToHistory(historyList, parseHistoryCallback);
|
||||
$('.ui-signin').hide()
|
||||
$('.ui-or').hide()
|
||||
$('.ui-welcome').show()
|
||||
if (data.photo) $('.ui-avatar').prop('src', data.photo).show()
|
||||
else $('.ui-avatar').prop('src', '').hide()
|
||||
$('.ui-name').html(data.name)
|
||||
$('.ui-signout').show()
|
||||
$('.ui-history').click()
|
||||
parseServerToHistory(historyList, parseHistoryCallback)
|
||||
},
|
||||
() => {
|
||||
$('.ui-signin').show();
|
||||
$('.ui-or').show();
|
||||
$('.ui-welcome').hide();
|
||||
$('.ui-avatar').prop('src', '').hide();
|
||||
$('.ui-name').html('');
|
||||
$('.ui-signout').hide();
|
||||
parseStorageToHistory(historyList, parseHistoryCallback);
|
||||
$('.ui-signin').show()
|
||||
$('.ui-or').show()
|
||||
$('.ui-welcome').hide()
|
||||
$('.ui-avatar').prop('src', '').hide()
|
||||
$('.ui-name').html('')
|
||||
$('.ui-signout').hide()
|
||||
parseStorageToHistory(historyList, parseHistoryCallback)
|
||||
}
|
||||
);
|
||||
)
|
||||
}
|
||||
|
||||
$(".masthead-nav li").click(function () {
|
||||
$(this).siblings().removeClass("active");
|
||||
$(this).addClass("active");
|
||||
});
|
||||
$('.masthead-nav li').click(function () {
|
||||
$(this).siblings().removeClass('active')
|
||||
$(this).addClass('active')
|
||||
})
|
||||
|
||||
// prevent empty link change hash
|
||||
$('a[href="#"]').click(function (e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
e.preventDefault()
|
||||
})
|
||||
|
||||
$(".ui-home").click(function (e) {
|
||||
if (!$("#home").is(':visible')) {
|
||||
$(".section:visible").hide();
|
||||
$("#home").fadeIn();
|
||||
}
|
||||
});
|
||||
$('.ui-home').click(function (e) {
|
||||
if (!$('#home').is(':visible')) {
|
||||
$('.section:visible').hide()
|
||||
$('#home').fadeIn()
|
||||
}
|
||||
})
|
||||
|
||||
$(".ui-history").click(() => {
|
||||
if (!$("#history").is(':visible')) {
|
||||
$(".section:visible").hide();
|
||||
$("#history").fadeIn();
|
||||
}
|
||||
});
|
||||
$('.ui-history').click(() => {
|
||||
if (!$('#history').is(':visible')) {
|
||||
$('.section:visible').hide()
|
||||
$('#history').fadeIn()
|
||||
}
|
||||
})
|
||||
|
||||
function checkHistoryList() {
|
||||
if ($("#history-list").children().length > 0) {
|
||||
$('.pagination').show();
|
||||
$(".ui-nohistory").hide();
|
||||
$(".ui-import-from-browser").hide();
|
||||
} else if ($("#history-list").children().length == 0) {
|
||||
$('.pagination').hide();
|
||||
$(".ui-nohistory").slideDown();
|
||||
getStorageHistory(data => {
|
||||
if (data && data.length > 0 && getLoginState() && historyList.items.length == 0) {
|
||||
$(".ui-import-from-browser").slideDown();
|
||||
}
|
||||
});
|
||||
}
|
||||
function checkHistoryList () {
|
||||
if ($('#history-list').children().length > 0) {
|
||||
$('.pagination').show()
|
||||
$('.ui-nohistory').hide()
|
||||
$('.ui-import-from-browser').hide()
|
||||
} else if ($('#history-list').children().length === 0) {
|
||||
$('.pagination').hide()
|
||||
$('.ui-nohistory').slideDown()
|
||||
getStorageHistory(data => {
|
||||
if (data && data.length > 0 && getLoginState() && historyList.items.length === 0) {
|
||||
$('.ui-import-from-browser').slideDown()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function parseHistoryCallback(list, notehistory) {
|
||||
checkHistoryList();
|
||||
//sort by pinned then timestamp
|
||||
list.sort('', {
|
||||
sortFunction(a, b) {
|
||||
const notea = a.values();
|
||||
const noteb = b.values();
|
||||
if (notea.pinned && !noteb.pinned) {
|
||||
return -1;
|
||||
} else if (!notea.pinned && noteb.pinned) {
|
||||
return 1;
|
||||
} else {
|
||||
if (notea.timestamp > noteb.timestamp) {
|
||||
return -1;
|
||||
} else if (notea.timestamp < noteb.timestamp) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
// parse filter tags
|
||||
const filtertags = [];
|
||||
for (let i = 0, l = list.items.length; i < l; i++) {
|
||||
const tags = list.items[i]._values.tags;
|
||||
if (tags && tags.length > 0) {
|
||||
for (let j = 0; j < tags.length; j++) {
|
||||
//push info filtertags if not found
|
||||
let found = false;
|
||||
if (filtertags.includes(tags[j]))
|
||||
found = true;
|
||||
if (!found)
|
||||
filtertags.push(tags[j]);
|
||||
}
|
||||
function parseHistoryCallback (list, notehistory) {
|
||||
checkHistoryList()
|
||||
// sort by pinned then timestamp
|
||||
list.sort('', {
|
||||
sortFunction (a, b) {
|
||||
const notea = a.values()
|
||||
const noteb = b.values()
|
||||
if (notea.pinned && !noteb.pinned) {
|
||||
return -1
|
||||
} else if (!notea.pinned && noteb.pinned) {
|
||||
return 1
|
||||
} else {
|
||||
if (notea.timestamp > noteb.timestamp) {
|
||||
return -1
|
||||
} else if (notea.timestamp < noteb.timestamp) {
|
||||
return 1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
}
|
||||
buildTagsFilter(filtertags);
|
||||
})
|
||||
// parse filter tags
|
||||
const filtertags = []
|
||||
for (let i = 0, l = list.items.length; i < l; i++) {
|
||||
const tags = list.items[i]._values.tags
|
||||
if (tags && tags.length > 0) {
|
||||
for (let j = 0; j < tags.length; j++) {
|
||||
// push info filtertags if not found
|
||||
let found = false
|
||||
if (filtertags.includes(tags[j])) { found = true }
|
||||
if (!found) { filtertags.push(tags[j]) }
|
||||
}
|
||||
}
|
||||
}
|
||||
buildTagsFilter(filtertags)
|
||||
}
|
||||
|
||||
// update items whenever list updated
|
||||
historyList.on('updated', e => {
|
||||
for (let i = 0, l = e.items.length; i < l; i++) {
|
||||
const item = e.items[i];
|
||||
if (item.visible()) {
|
||||
const itemEl = $(item.elm);
|
||||
const values = item._values;
|
||||
const a = itemEl.find("a");
|
||||
const pin = itemEl.find(".ui-history-pin");
|
||||
const tagsEl = itemEl.find(".tags");
|
||||
//parse link to element a
|
||||
a.attr('href', `${serverurl}/${values.id}`);
|
||||
//parse pinned
|
||||
if (values.pinned) {
|
||||
pin.addClass('active');
|
||||
} else {
|
||||
pin.removeClass('active');
|
||||
}
|
||||
//parse tags
|
||||
const tags = values.tags;
|
||||
if (tags && tags.length > 0 && tagsEl.children().length <= 0) {
|
||||
const labels = [];
|
||||
for (let j = 0; j < tags.length; j++) {
|
||||
//push into the item label
|
||||
labels.push(`<span class='label label-default'>${tags[j]}</span>`);
|
||||
}
|
||||
tagsEl.html(labels.join(' '));
|
||||
}
|
||||
for (let i = 0, l = e.items.length; i < l; i++) {
|
||||
const item = e.items[i]
|
||||
if (item.visible()) {
|
||||
const itemEl = $(item.elm)
|
||||
const values = item._values
|
||||
const a = itemEl.find('a')
|
||||
const pin = itemEl.find('.ui-history-pin')
|
||||
const tagsEl = itemEl.find('.tags')
|
||||
// parse link to element a
|
||||
a.attr('href', `${serverurl}/${values.id}`)
|
||||
// parse pinned
|
||||
if (values.pinned) {
|
||||
pin.addClass('active')
|
||||
} else {
|
||||
pin.removeClass('active')
|
||||
}
|
||||
// parse tags
|
||||
const tags = values.tags
|
||||
if (tags && tags.length > 0 && tagsEl.children().length <= 0) {
|
||||
const labels = []
|
||||
for (let j = 0; j < tags.length; j++) {
|
||||
// push into the item label
|
||||
labels.push(`<span class='label label-default'>${tags[j]}</span>`)
|
||||
}
|
||||
tagsEl.html(labels.join(' '))
|
||||
}
|
||||
}
|
||||
$(".ui-history-close").off('click');
|
||||
$(".ui-history-close").on('click', historyCloseClick);
|
||||
$(".ui-history-pin").off('click');
|
||||
$(".ui-history-pin").on('click', historyPinClick);
|
||||
});
|
||||
}
|
||||
$('.ui-history-close').off('click')
|
||||
$('.ui-history-close').on('click', historyCloseClick)
|
||||
$('.ui-history-pin').off('click')
|
||||
$('.ui-history-pin').on('click', historyPinClick)
|
||||
})
|
||||
|
||||
function historyCloseClick(e) {
|
||||
e.preventDefault();
|
||||
const id = $(this).closest("a").siblings("span").html();
|
||||
const value = historyList.get('id', id)[0]._values;
|
||||
$('.ui-delete-modal-msg').text('Do you really want to delete below history?');
|
||||
$('.ui-delete-modal-item').html(`<i class="fa fa-file-text"></i> ${value.text}<br><i class="fa fa-clock-o"></i> ${value.time}`);
|
||||
clearHistory = false;
|
||||
deleteId = id;
|
||||
function historyCloseClick (e) {
|
||||
e.preventDefault()
|
||||
const id = $(this).closest('a').siblings('span').html()
|
||||
const value = historyList.get('id', id)[0]._values
|
||||
$('.ui-delete-modal-msg').text('Do you really want to delete below history?')
|
||||
$('.ui-delete-modal-item').html(`<i class="fa fa-file-text"></i> ${value.text}<br><i class="fa fa-clock-o"></i> ${value.time}`)
|
||||
clearHistory = false
|
||||
deleteId = id
|
||||
}
|
||||
|
||||
function historyPinClick(e) {
|
||||
e.preventDefault();
|
||||
const $this = $(this);
|
||||
const id = $this.closest("a").siblings("span").html();
|
||||
const item = historyList.get('id', id)[0];
|
||||
const values = item._values;
|
||||
let pinned = values.pinned;
|
||||
if (!values.pinned) {
|
||||
pinned = true;
|
||||
item._values.pinned = true;
|
||||
} else {
|
||||
pinned = false;
|
||||
item._values.pinned = false;
|
||||
}
|
||||
checkIfAuth(() => {
|
||||
postHistoryToServer(id, {
|
||||
pinned
|
||||
}, (err, result) => {
|
||||
if (!err) {
|
||||
if (pinned)
|
||||
$this.addClass('active');
|
||||
else
|
||||
$this.removeClass('active');
|
||||
}
|
||||
});
|
||||
}, () => {
|
||||
getHistory(notehistory => {
|
||||
for(let i = 0; i < notehistory.length; i++) {
|
||||
if (notehistory[i].id == id) {
|
||||
notehistory[i].pinned = pinned;
|
||||
break;
|
||||
}
|
||||
}
|
||||
saveHistory(notehistory);
|
||||
if (pinned)
|
||||
$this.addClass('active');
|
||||
else
|
||||
$this.removeClass('active');
|
||||
});
|
||||
});
|
||||
function historyPinClick (e) {
|
||||
e.preventDefault()
|
||||
const $this = $(this)
|
||||
const id = $this.closest('a').siblings('span').html()
|
||||
const item = historyList.get('id', id)[0]
|
||||
const values = item._values
|
||||
let pinned = values.pinned
|
||||
if (!values.pinned) {
|
||||
pinned = true
|
||||
item._values.pinned = true
|
||||
} else {
|
||||
pinned = false
|
||||
item._values.pinned = false
|
||||
}
|
||||
checkIfAuth(() => {
|
||||
postHistoryToServer(id, {
|
||||
pinned
|
||||
}, (err, result) => {
|
||||
if (!err) {
|
||||
if (pinned) { $this.addClass('active') } else { $this.removeClass('active') }
|
||||
}
|
||||
})
|
||||
}, () => {
|
||||
getHistory(notehistory => {
|
||||
for (let i = 0; i < notehistory.length; i++) {
|
||||
if (notehistory[i].id === id) {
|
||||
notehistory[i].pinned = pinned
|
||||
break
|
||||
}
|
||||
}
|
||||
saveHistory(notehistory)
|
||||
if (pinned) { $this.addClass('active') } else { $this.removeClass('active') }
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
//auto update item fromNow every minutes
|
||||
setInterval(updateItemFromNow, 60000);
|
||||
// auto update item fromNow every minutes
|
||||
setInterval(updateItemFromNow, 60000)
|
||||
|
||||
function updateItemFromNow() {
|
||||
const items = $('.item').toArray();
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
const item = $(items[i]);
|
||||
const timestamp = parseInt(item.find('.timestamp').text());
|
||||
item.find('.fromNow').text(moment(timestamp).fromNow());
|
||||
}
|
||||
function updateItemFromNow () {
|
||||
const items = $('.item').toArray()
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
const item = $(items[i])
|
||||
const timestamp = parseInt(item.find('.timestamp').text())
|
||||
item.find('.fromNow').text(moment(timestamp).fromNow())
|
||||
}
|
||||
}
|
||||
|
||||
var clearHistory = false;
|
||||
var deleteId = null;
|
||||
var clearHistory = false
|
||||
var deleteId = null
|
||||
|
||||
function deleteHistory() {
|
||||
checkIfAuth(() => {
|
||||
deleteServerHistory(deleteId, (err, result) => {
|
||||
if (!err) {
|
||||
if (clearHistory) {
|
||||
historyList.clear();
|
||||
checkHistoryList();
|
||||
} else {
|
||||
historyList.remove('id', deleteId);
|
||||
checkHistoryList();
|
||||
}
|
||||
}
|
||||
$('.delete-modal').modal('hide');
|
||||
deleteId = null;
|
||||
clearHistory = false;
|
||||
});
|
||||
}, () => {
|
||||
function deleteHistory () {
|
||||
checkIfAuth(() => {
|
||||
deleteServerHistory(deleteId, (err, result) => {
|
||||
if (!err) {
|
||||
if (clearHistory) {
|
||||
saveHistory([]);
|
||||
historyList.clear();
|
||||
checkHistoryList();
|
||||
deleteId = null;
|
||||
historyList.clear()
|
||||
checkHistoryList()
|
||||
} else {
|
||||
if (!deleteId) return;
|
||||
getHistory(notehistory => {
|
||||
const newnotehistory = removeHistory(deleteId, notehistory);
|
||||
saveHistory(newnotehistory);
|
||||
historyList.remove('id', deleteId);
|
||||
checkHistoryList();
|
||||
deleteId = null;
|
||||
});
|
||||
historyList.remove('id', deleteId)
|
||||
checkHistoryList()
|
||||
}
|
||||
$('.delete-modal').modal('hide');
|
||||
clearHistory = false;
|
||||
});
|
||||
}
|
||||
|
||||
$(".ui-delete-modal-confirm").click(() => {
|
||||
deleteHistory();
|
||||
});
|
||||
|
||||
$(".ui-import-from-browser").click(() => {
|
||||
saveStorageHistoryToServer(() => {
|
||||
parseStorageToHistory(historyList, parseHistoryCallback);
|
||||
});
|
||||
});
|
||||
|
||||
$(".ui-save-history").click(() => {
|
||||
getHistory(data => {
|
||||
const history = JSON.stringify(data);
|
||||
const blob = new Blob([history], {
|
||||
type: "application/json;charset=utf-8"
|
||||
});
|
||||
saveAs(blob, `hackmd_history_${moment().format('YYYYMMDDHHmmss')}`, true);
|
||||
});
|
||||
});
|
||||
|
||||
$(".ui-open-history").bind("change", e => {
|
||||
const files = e.target.files || e.dataTransfer.files;
|
||||
const file = files[0];
|
||||
const reader = new FileReader();
|
||||
reader.onload = () => {
|
||||
const notehistory = JSON.parse(reader.result);
|
||||
//console.log(notehistory);
|
||||
if (!reader.result) return;
|
||||
getHistory(data => {
|
||||
let mergedata = data.concat(notehistory);
|
||||
mergedata = clearDuplicatedHistory(mergedata);
|
||||
saveHistory(mergedata);
|
||||
parseHistory(historyList, parseHistoryCallback);
|
||||
});
|
||||
$(".ui-open-history").replaceWith($(".ui-open-history").val('').clone(true));
|
||||
};
|
||||
reader.readAsText(file);
|
||||
});
|
||||
|
||||
$(".ui-clear-history").click(() => {
|
||||
$('.ui-delete-modal-msg').text('Do you really want to clear all history?');
|
||||
$('.ui-delete-modal-item').html('There is no turning back.');
|
||||
clearHistory = true;
|
||||
deleteId = null;
|
||||
});
|
||||
|
||||
$(".ui-refresh-history").click(() => {
|
||||
const lastTags = $(".ui-use-tags").select2('val');
|
||||
$(".ui-use-tags").select2('val', '');
|
||||
historyList.filter();
|
||||
const lastKeyword = $('.search').val();
|
||||
$('.search').val('');
|
||||
historyList.search();
|
||||
$('#history-list').slideUp('fast');
|
||||
$('.pagination').hide();
|
||||
|
||||
resetCheckAuth();
|
||||
historyList.clear();
|
||||
parseHistory(historyList, (list, notehistory) => {
|
||||
parseHistoryCallback(list, notehistory);
|
||||
$(".ui-use-tags").select2('val', lastTags);
|
||||
$(".ui-use-tags").trigger('change');
|
||||
historyList.search(lastKeyword);
|
||||
$('.search').val(lastKeyword);
|
||||
checkHistoryList();
|
||||
$('#history-list').slideDown('fast');
|
||||
});
|
||||
});
|
||||
|
||||
$(".ui-logout").click(() => {
|
||||
clearLoginState();
|
||||
location.href = `${serverurl}/logout`;
|
||||
});
|
||||
|
||||
let filtertags = [];
|
||||
$(".ui-use-tags").select2({
|
||||
placeholder: $(".ui-use-tags").attr('placeholder'),
|
||||
multiple: true,
|
||||
data() {
|
||||
return {
|
||||
results: filtertags
|
||||
};
|
||||
}
|
||||
});
|
||||
$('.select2-input').css('width', 'inherit');
|
||||
buildTagsFilter([]);
|
||||
|
||||
function buildTagsFilter(tags) {
|
||||
for (let i = 0; i < tags.length; i++)
|
||||
tags[i] = {
|
||||
id: i,
|
||||
text: S(tags[i]).unescapeHTML().s
|
||||
};
|
||||
filtertags = tags;
|
||||
}
|
||||
$(".ui-use-tags").on('change', function () {
|
||||
const tags = [];
|
||||
const data = $(this).select2('data');
|
||||
for (let i = 0; i < data.length; i++)
|
||||
tags.push(data[i].text);
|
||||
if (tags.length > 0) {
|
||||
historyList.filter(item => {
|
||||
const values = item.values();
|
||||
if (!values.tags) return false;
|
||||
let found = false;
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
if (values.tags.includes(tags[i])) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return found;
|
||||
});
|
||||
}
|
||||
$('.delete-modal').modal('hide')
|
||||
deleteId = null
|
||||
clearHistory = false
|
||||
})
|
||||
}, () => {
|
||||
if (clearHistory) {
|
||||
saveHistory([])
|
||||
historyList.clear()
|
||||
checkHistoryList()
|
||||
deleteId = null
|
||||
} else {
|
||||
historyList.filter();
|
||||
if (!deleteId) return
|
||||
getHistory(notehistory => {
|
||||
const newnotehistory = removeHistory(deleteId, notehistory)
|
||||
saveHistory(newnotehistory)
|
||||
historyList.remove('id', deleteId)
|
||||
checkHistoryList()
|
||||
deleteId = null
|
||||
})
|
||||
}
|
||||
checkHistoryList();
|
||||
});
|
||||
$('.delete-modal').modal('hide')
|
||||
clearHistory = false
|
||||
})
|
||||
}
|
||||
|
||||
$('.ui-delete-modal-confirm').click(() => {
|
||||
deleteHistory()
|
||||
})
|
||||
|
||||
$('.ui-import-from-browser').click(() => {
|
||||
saveStorageHistoryToServer(() => {
|
||||
parseStorageToHistory(historyList, parseHistoryCallback)
|
||||
})
|
||||
})
|
||||
|
||||
$('.ui-save-history').click(() => {
|
||||
getHistory(data => {
|
||||
const history = JSON.stringify(data)
|
||||
const blob = new Blob([history], {
|
||||
type: 'application/json;charset=utf-8'
|
||||
})
|
||||
saveAs(blob, `hackmd_history_${moment().format('YYYYMMDDHHmmss')}`, true)
|
||||
})
|
||||
})
|
||||
|
||||
$('.ui-open-history').bind('change', e => {
|
||||
const files = e.target.files || e.dataTransfer.files
|
||||
const file = files[0]
|
||||
const reader = new FileReader()
|
||||
reader.onload = () => {
|
||||
const notehistory = JSON.parse(reader.result)
|
||||
// console.log(notehistory);
|
||||
if (!reader.result) return
|
||||
getHistory(data => {
|
||||
let mergedata = data.concat(notehistory)
|
||||
mergedata = clearDuplicatedHistory(mergedata)
|
||||
saveHistory(mergedata)
|
||||
parseHistory(historyList, parseHistoryCallback)
|
||||
})
|
||||
$('.ui-open-history').replaceWith($('.ui-open-history').val('').clone(true))
|
||||
}
|
||||
reader.readAsText(file)
|
||||
})
|
||||
|
||||
$('.ui-clear-history').click(() => {
|
||||
$('.ui-delete-modal-msg').text('Do you really want to clear all history?')
|
||||
$('.ui-delete-modal-item').html('There is no turning back.')
|
||||
clearHistory = true
|
||||
deleteId = null
|
||||
})
|
||||
|
||||
$('.ui-refresh-history').click(() => {
|
||||
const lastTags = $('.ui-use-tags').select2('val')
|
||||
$('.ui-use-tags').select2('val', '')
|
||||
historyList.filter()
|
||||
const lastKeyword = $('.search').val()
|
||||
$('.search').val('')
|
||||
historyList.search()
|
||||
$('#history-list').slideUp('fast')
|
||||
$('.pagination').hide()
|
||||
|
||||
resetCheckAuth()
|
||||
historyList.clear()
|
||||
parseHistory(historyList, (list, notehistory) => {
|
||||
parseHistoryCallback(list, notehistory)
|
||||
$('.ui-use-tags').select2('val', lastTags)
|
||||
$('.ui-use-tags').trigger('change')
|
||||
historyList.search(lastKeyword)
|
||||
$('.search').val(lastKeyword)
|
||||
checkHistoryList()
|
||||
$('#history-list').slideDown('fast')
|
||||
})
|
||||
})
|
||||
|
||||
$('.ui-logout').click(() => {
|
||||
clearLoginState()
|
||||
location.href = `${serverurl}/logout`
|
||||
})
|
||||
|
||||
let filtertags = []
|
||||
$('.ui-use-tags').select2({
|
||||
placeholder: $('.ui-use-tags').attr('placeholder'),
|
||||
multiple: true,
|
||||
data () {
|
||||
return {
|
||||
results: filtertags
|
||||
}
|
||||
}
|
||||
})
|
||||
$('.select2-input').css('width', 'inherit')
|
||||
buildTagsFilter([])
|
||||
|
||||
function buildTagsFilter (tags) {
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
tags[i] = {
|
||||
id: i,
|
||||
text: S(tags[i]).unescapeHTML().s
|
||||
}
|
||||
}
|
||||
filtertags = tags
|
||||
}
|
||||
$('.ui-use-tags').on('change', function () {
|
||||
const tags = []
|
||||
const data = $(this).select2('data')
|
||||
for (let i = 0; i < data.length; i++) { tags.push(data[i].text) }
|
||||
if (tags.length > 0) {
|
||||
historyList.filter(item => {
|
||||
const values = item.values()
|
||||
if (!values.tags) return false
|
||||
let found = false
|
||||
for (let i = 0; i < tags.length; i++) {
|
||||
if (values.tags.includes(tags[i])) {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
return found
|
||||
})
|
||||
} else {
|
||||
historyList.filter()
|
||||
}
|
||||
checkHistoryList()
|
||||
})
|
||||
|
||||
$('.search').keyup(() => {
|
||||
checkHistoryList();
|
||||
});
|
||||
checkHistoryList()
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue