summaryrefslogtreecommitdiff
path: root/public/js/history.js
diff options
context:
space:
mode:
authorWu Cheng-Han2015-05-04 15:53:29 +0800
committerWu Cheng-Han2015-05-04 15:53:29 +0800
commit4b0ca55eb79e963523eb6c8197825e9e8ae904e2 (patch)
tree574f3923af77b37b41dbf1b00bcd7827ef724a28 /public/js/history.js
parent61eb11d23c65c9e5c493c67d055f785cbec139e2 (diff)
First commit, version 0.2.7
Diffstat (limited to 'public/js/history.js')
-rw-r--r--public/js/history.js256
1 files changed, 256 insertions, 0 deletions
diff --git a/public/js/history.js b/public/js/history.js
new file mode 100644
index 00000000..c6deaa53
--- /dev/null
+++ b/public/js/history.js
@@ -0,0 +1,256 @@
+//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 = "<div class='ui-history-close fa fa-close fa-fw'></div>";
+ var text = "<h4 class='text'>" + value.text + "</h2>";
+ var timestamp = "<i class='timestamp' style='display:none;'>" + value.timestamp + "</i>";
+ var fromNow = "<i class='fromNow'><i class='fa fa-clock-o'></i> " + value.fromNow + "</i>";
+ var time = "<i class='time'>" + value.time + "</i>";
+ var tags = "";
+ if (value.tags) {
+ var labels = [];
+ for (var j = 0; j < value.tags.length; j++)
+ labels.push("<span class='label label-default'>" + value.tags[j] + "</span>");
+ tags = "<p class='tags'>" + labels.join(" ") + "</p>";
+ }
+ var li = "<li class='col-xs-12 col-sm-6 col-md-6 col-lg-6'><a href='" + "./" + value.id + "'><div class='item'>" + close + text + '<p>' + fromNow + '<br>' + timestamp + time + '</p>' + tags + "</div></a></li>"
+ //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();
+} \ No newline at end of file