mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-13 22:54:42 -04:00
Jump to 0.3.1
This commit is contained in:
parent
f7f8c901f4
commit
10c9811fc5
49 changed files with 2336 additions and 448 deletions
153
lib/note.js
153
lib/note.js
|
@ -1,22 +1,56 @@
|
|||
//note
|
||||
//external modules
|
||||
var mongoose = require('mongoose');
|
||||
var Schema = mongoose.Schema;
|
||||
var LZString = require('lz-string');
|
||||
var marked = require('marked');
|
||||
var cheerio = require('cheerio');
|
||||
var shortId = require('shortid');
|
||||
|
||||
//others
|
||||
var db = require("./db.js");
|
||||
var logger = require("./logger.js");
|
||||
|
||||
//permission types
|
||||
permissionTypes = ["freely", "editable", "locked"];
|
||||
|
||||
// create a note model
|
||||
var model = mongoose.model('note', {
|
||||
id: String,
|
||||
shortid: {
|
||||
type: String,
|
||||
unique: true,
|
||||
default: shortId.generate
|
||||
},
|
||||
permission: {
|
||||
type: String,
|
||||
enum: permissionTypes
|
||||
},
|
||||
viewcount: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
updated: Date,
|
||||
created: Date
|
||||
});
|
||||
|
||||
//public
|
||||
var note = {
|
||||
model: model,
|
||||
findNote: findNote,
|
||||
newNote: newNote,
|
||||
findOrNewNote: findOrNewNote,
|
||||
checkNoteIdValid: checkNoteIdValid,
|
||||
checkNoteExist: checkNoteExist,
|
||||
getNoteTitle: getNoteTitle
|
||||
getNoteTitle: getNoteTitle,
|
||||
generateWebTitle: generateWebTitle,
|
||||
increaseViewCount: increaseViewCount,
|
||||
updatePermission: updatePermission
|
||||
};
|
||||
|
||||
function checkNoteIdValid(noteId) {
|
||||
try {
|
||||
//console.log(noteId);
|
||||
//logger.info(noteId);
|
||||
var id = LZString.decompressFromBase64(noteId);
|
||||
if (!id) return false;
|
||||
var uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
||||
|
@ -26,21 +60,21 @@ function checkNoteIdValid(noteId) {
|
|||
else
|
||||
return false;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function checkNoteExist(noteId) {
|
||||
try {
|
||||
//console.log(noteId);
|
||||
//logger.info(noteId);
|
||||
var id = LZString.decompressFromBase64(noteId);
|
||||
db.readFromDB(id, function (err, result) {
|
||||
if (err) return false;
|
||||
return true;
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
logger.error(err);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -50,11 +84,118 @@ function getNoteTitle(body) {
|
|||
var $ = cheerio.load(marked(body));
|
||||
var h1s = $("h1");
|
||||
var title = "";
|
||||
if (h1s.length > 0)
|
||||
if (h1s.length > 0 && h1s.first().text().split('\n').length == 1)
|
||||
title = h1s.first().text();
|
||||
else
|
||||
title = "Untitled";
|
||||
return title;
|
||||
}
|
||||
|
||||
//generate note web page title
|
||||
function generateWebTitle(title) {
|
||||
title = !title || title == "Untitled" ? "HackMD - Collaborative notes" : title + " - HackMD";
|
||||
return title;
|
||||
}
|
||||
|
||||
function findNote(id, callback) {
|
||||
model.findOne({
|
||||
$or: [
|
||||
{
|
||||
id: id
|
||||
},
|
||||
{
|
||||
shortid: id
|
||||
}
|
||||
]
|
||||
}, function (err, note) {
|
||||
if (err) {
|
||||
logger.error('find note failed: ' + err);
|
||||
callback(err, null);
|
||||
}
|
||||
if (!err && note) {
|
||||
callback(null, note);
|
||||
} else {
|
||||
logger.error('find note failed: ' + err);
|
||||
callback(err, null);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function newNote(id, permission, callback) {
|
||||
var note = new model({
|
||||
id: id,
|
||||
permission: permission,
|
||||
updated: Date.now(),
|
||||
created: Date.now()
|
||||
});
|
||||
note.save(function (err) {
|
||||
if (err) {
|
||||
logger.error('new note failed: ' + err);
|
||||
callback(err, null);
|
||||
} else {
|
||||
logger.info("new note success: " + note.id);
|
||||
callback(null, note);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function findOrNewNote(id, permission, callback) {
|
||||
findNote(id, function (err, note) {
|
||||
if (err || !note) {
|
||||
newNote(id, permission, function (err, note) {
|
||||
if (err) {
|
||||
logger.error('find or new note failed: ' + err);
|
||||
callback(err, null);
|
||||
} else {
|
||||
callback(null, note);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (!note.permission) {
|
||||
note.permission = permission;
|
||||
note.updated = Date.now();
|
||||
note.save(function (err) {
|
||||
if (err) {
|
||||
logger.error('add note permission failed: ' + err);
|
||||
callback(err, null);
|
||||
} else {
|
||||
logger.info("add note permission success: " + note.id);
|
||||
callback(null, note);
|
||||
};
|
||||
});
|
||||
} else {
|
||||
callback(null, note);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function increaseViewCount(note, callback) {
|
||||
note.viewcount++;
|
||||
note.updated = Date.now();
|
||||
note.save(function (err) {
|
||||
if (err) {
|
||||
logger.error('increase note viewcount failed: ' + err);
|
||||
callback(err, null);
|
||||
} else {
|
||||
logger.info("increase note viewcount success: " + note.id);
|
||||
callback(null, note);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function updatePermission(note, permission, callback) {
|
||||
note.permission = permission;
|
||||
note.updated = Date.now();
|
||||
note.save(function (err) {
|
||||
if (err) {
|
||||
logger.error('update note permission failed: ' + err);
|
||||
callback(err, null);
|
||||
} else {
|
||||
logger.info("update note permission success: " + note.id);
|
||||
callback(null, note);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = note;
|
Loading…
Add table
Add a link
Reference in a new issue