summaryrefslogtreecommitdiff
path: root/public/js/cover.js
diff options
context:
space:
mode:
authorBoHong Li2017-03-13 02:09:52 +0800
committerBoHong Li2017-03-13 02:09:52 +0800
commitbefa89be8b69ed1b951099828c5dbc7e550d4c68 (patch)
tree835b840c390029c596756a59abc919bf17d14b54 /public/js/cover.js
parent747da6772d339329ed130f5a0dbc896be5391ef8 (diff)
parent5bc642d02e8955b200bb21cf30e863fdf0c53765 (diff)
Merge branch 'use_javascript_standard_style'
Introduce JavaScript Standard Style Signed-off-by: BoHong Li <a60814billy@gmail.com>
Diffstat (limited to 'public/js/cover.js')
-rw-r--r--public/js/cover.js739
1 files changed, 367 insertions, 372 deletions
diff --git a/public/js/cover.js b/public/js/cover.js
index bc6e73f9..a45a1c13 100644
--- a/public/js/cover.js
+++ b/public/js/cover.js
@@ -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);
-
-migrateHistoryFromTempCallback = pageInit;
-setloginStateChangeEvent(pageInit);
-
-pageInit();
-
-function pageInit() {
- checkIfAuth(
+ 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)
+
+window.migrateHistoryFromTempCallback = pageInit
+setloginStateChangeEvent(pageInit)
+
+pageInit()
+
+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();
-});
-
-$(".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();
- }
-});
-
-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();
- }
- });
- }
+ e.preventDefault()
+})
+
+$('.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()
+ }
+})
+
+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;
- }
- }
+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]);
- }
- }
+ 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);
+ }
+ 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);
-});
-
-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;
+ }
+ $('.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 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;
-
-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;
- });
- }, () => {
+var clearHistory = false
+var deleteId = null
+
+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;
- });
+ }
+ $('.delete-modal').modal('hide')
+ deleteId = null
+ clearHistory = false
+ })
+ }, () => {
+ if (clearHistory) {
+ saveHistory([])
+ historyList.clear()
+ checkHistoryList()
+ deleteId = null
+ } else {
+ if (!deleteId) return
+ getHistory(notehistory => {
+ const newnotehistory = removeHistory(deleteId, notehistory)
+ saveHistory(newnotehistory)
+ historyList.remove('id', deleteId)
+ checkHistoryList()
+ deleteId = null
+ })
+ }
+ $('.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(() => {
+$('.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 => {
- 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
- };
+ 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();
+ }
+})
+$('.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
}
- checkHistoryList();
-});
+ }
+ 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()
+})