//common function checkIfAuth(yesCallback, noCallback) { $.get('/me') .done(function (data) { if (data && data.status == 'ok') { yesCallback(data); } else { noCallback(); } }) .fail(function () { noCallback(); }); } function saveHistory(notehistory) { checkIfAuth( function () { saveHistoryToServer(notehistory); }, function () { saveHistoryToCookie(notehistory); } ); } function saveHistoryToCookie(notehistory) { $.cookie('notehistory', JSON.stringify(notehistory), { expires: 365 }); } function saveHistoryToServer(notehistory) { $.post('/history', { history: JSON.stringify(notehistory) }); } function saveCookieHistoryToServer(callback) { $.post('/history', { history: $.cookie('notehistory') }) .done(function (data) { callback(); }); } function clearDuplicatedHistory(notehistory) { var newnotehistory = []; for (var i = 0; i < notehistory.length; i++) { var found = false; for (var j = 0; j < newnotehistory.length; j++) { if (notehistory[i].id == newnotehistory[j].id) { found = true; break; } } if (!found) newnotehistory.push(notehistory[i]); } return notehistory; } function addHistory(id, text, time, tags, notehistory) { notehistory.push({ id: id, text: text, time: time, tags: tags }); return notehistory; } function removeHistory(id, notehistory) { for (var i = 0; i < notehistory.length; i++) { if (notehistory[i].id == id) notehistory.splice(i, 1); } return notehistory; } //used for inner function writeHistory(view) { checkIfAuth( function () { writeHistoryToServer(view); }, function () { writeHistoryToCookie(view); } ); } function writeHistoryToServer(view) { $.get('/history') .done(function (data) { try { if (data.history) { var notehistory = data.history; } else { var notehistory = []; } } catch (err) { var notehistory = []; } var newnotehistory = generateHistory(view, notehistory); saveHistoryToServer(newnotehistory); }) .fail(function () { writeHistoryToCookie(view); }); } function writeHistoryToCookie(view) { try { var notehistory = JSON.parse($.cookie('notehistory')); } catch (err) { var notehistory = []; } var newnotehistory = generateHistory(view, notehistory); saveHistoryToCookie(newnotehistory); } function renderHistory(view) { var title = renderFilename(view); var tags = []; var rawtags = []; view.find('h6').each(function (key, value) { if (/^tags/gmi.test($(value).text())) { var codes = $(value).find("code"); for (var i = 0; i < codes.length; i++) rawtags.push(codes[i]); } }); for (var i = 0; i < rawtags.length; i++) { var found = false; for (var j = 0; j < tags.length; j++) { if (tags[j] == rawtags[i].innerHTML) { found = true; break; } } if (!found) tags.push(rawtags[i].innerHTML); } //console.debug(tags); return { id: location.pathname.split('/')[1], text: title, time: moment().format('MMMM Do YYYY, h:mm:ss a'), tags: tags }; } function generateHistory(view, notehistory) { var info = renderHistory(view); notehistory = clearDuplicatedHistory(notehistory); notehistory = removeHistory(info.id, notehistory); notehistory = addHistory(info.id, info.text, info.time, info.tags, notehistory); return notehistory; } //used for outer function getHistory(callback) { checkIfAuth( function () { getServerHistory(callback); }, function () { getCookieHistory(callback); } ); } function getServerHistory(callback) { $.get('/history') .done(function (data) { if (data.history) { callback(data.history); } }) .fail(function () { getCookieHistory(callback); }); } function getCookieHistory(callback) { callback(JSON.parse($.cookie('notehistory'))); } function parseHistory(callback) { checkIfAuth( function () { parseServerToHistory(callback); }, function () { parseCookieToHistory(callback); } ); } function parseServerToHistory(callback) { $.get('/history') .done(function (data) { if (data.history) { //console.log(data.history); parseToHistory(data.history, callback); } }) .fail(function () { parseCookieToHistory(callback); }); } function parseCookieToHistory(callback) { var notehistory = JSON.parse($.cookie('notehistory')); parseToHistory(notehistory, callback); } function parseToHistory(notehistory, callback) { if (notehistory && notehistory.length > 0) { //console.log(notehistory); for (var i = 0; i < notehistory.length; i++) { notehistory[i].timestamp = moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a').unix(); notehistory[i].fromNow = moment(notehistory[i].time, 'MMMM Do YYYY, h:mm:ss a').fromNow(); } $(notehistory).each(function (key, value) { var close = "
"; var text = "

" + value.text + "

"; var timestamp = ""; var fromNow = " " + value.fromNow + ""; var time = "" + value.time + ""; var tags = ""; if (value.tags) { var labels = []; for (var j = 0; j < value.tags.length; j++) labels.push("" + value.tags[j] + ""); tags = "

" + labels.join(" ") + "

"; } var li = "
  • " + close + text + '

    ' + fromNow + '
    ' + timestamp + time + '

    ' + tags + "
  • " //console.debug(li); $("#history-list").append(li); }); } var options = { valueNames: ['text', 'timestamp', 'fromNow', 'time', 'tags'] }; var historyList = new List('history', options); historyList.sort('timestamp', { order: "desc" }); callback(); }