Marked as 0.2.9
This commit is contained in:
parent
4e64583a0b
commit
f7f8c901f4
33 changed files with 2972 additions and 242 deletions
45
README.md
45
README.md
|
@ -1,11 +1,26 @@
|
|||
HackMD 0.2.8
|
||||
HackMD 0.2.9
|
||||
===
|
||||
|
||||
This is a realtime collaborative markdown notes on all platforms.
|
||||
But still in early stage, feel free to fork or contribute to it.
|
||||
HackMD is a realtime collaborative markdown notes on all platforms.
|
||||
Inspired by Hackpad, but more focusing on speed and flexibility.
|
||||
Still in early stage, feel free to fork or contribute to this.
|
||||
|
||||
Thanks for your using!
|
||||
Thanks for your using! :smile:
|
||||
|
||||
Dependency
|
||||
---
|
||||
- PostgreSQL 9.3.6 or 9.4.1
|
||||
- MongoDB 3.0.2
|
||||
|
||||
Import db schema
|
||||
---
|
||||
The notes are store in PostgreSQL, the schema is in the `hackmd_schema.sql`
|
||||
To import the sql file in PostgreSQL, type `psql -i hackmd_schema.sql`
|
||||
|
||||
The users, temps and sessions are store in MongoDB, which don't need schema, so just make sure you have the correct connection string.
|
||||
|
||||
Config
|
||||
---
|
||||
There are some config you need to change in below files
|
||||
```
|
||||
./run.sh
|
||||
|
@ -13,13 +28,25 @@ There are some config you need to change in below files
|
|||
./public/js/common.js
|
||||
```
|
||||
|
||||
You can use SSL to encrypt your site by passing certificate path in the `config.js` and set `usessl=true`.
|
||||
|
||||
And there is a script called `run.sh`, it's for someone like me to run the server via npm package `forever`, and can passing environment variable to the server, like heroku does.
|
||||
The script `run.sh`, it's for someone like me to run the server via npm package `forever`, and can passing environment variable to the server, like heroku does.
|
||||
|
||||
To install `forever`, just type `npm install forever -g`
|
||||
|
||||
The notes are store in PostgreSQL, and I provided the schema in the `hackmd_schema.sql`.
|
||||
The users and sessions are store in mongoDB, which don't need schema, so just connect it directly.
|
||||
You can use SSL to encrypt your site by passing certificate path in the `config.js` and set `usessl=true`
|
||||
|
||||
Run a server
|
||||
---
|
||||
To run the server, type `bash run.sh`
|
||||
Log will be at `~/.forever/hackmd.log`
|
||||
|
||||
Stop a server
|
||||
---
|
||||
To stop the server, simply type `forever stop hackmd`
|
||||
|
||||
Backup db
|
||||
---
|
||||
To backup the db, type `bash backup.sh`
|
||||
Backup files will be at `./backups/`
|
||||
|
||||
|
||||
**License under MIT.**
|
40
app.js
40
app.js
|
@ -5,6 +5,7 @@ var toobusy = require('toobusy-js');
|
|||
var ejs = require('ejs');
|
||||
var passport = require('passport');
|
||||
var methodOverride = require('method-override');
|
||||
var cookieParser = require('cookie-parser');
|
||||
var bodyParser = require('body-parser');
|
||||
var mongoose = require('mongoose');
|
||||
var compression = require('compression')
|
||||
|
@ -14,9 +15,12 @@ var fs = require('fs');
|
|||
var shortid = require('shortid');
|
||||
var imgur = require('imgur');
|
||||
var formidable = require('formidable');
|
||||
var morgan = require('morgan');
|
||||
var passportSocketIo = require("passport.socketio");
|
||||
|
||||
//core
|
||||
var config = require("./config.js");
|
||||
var logger = require("./lib/logger.js");
|
||||
var User = require("./lib/user.js");
|
||||
var Temp = require("./lib/temp.js");
|
||||
var auth = require("./lib/auth.js");
|
||||
|
@ -45,7 +49,12 @@ if (config.usessl) {
|
|||
var app = express();
|
||||
var server = require('http').createServer(app);
|
||||
}
|
||||
//socket io listen
|
||||
var io = require('socket.io').listen(server);
|
||||
//logger
|
||||
app.use(morgan('combined', {
|
||||
"stream": logger.stream
|
||||
}));
|
||||
|
||||
// connect to the mongodb
|
||||
mongoose.connect(process.env.MONGOLAB_URI || config.mongodbstring);
|
||||
|
@ -65,6 +74,15 @@ var urlencodedParser = bodyParser.urlencoded({
|
|||
extended: false
|
||||
});
|
||||
|
||||
//session store
|
||||
var sessionStore = new MongoStore({
|
||||
mongooseConnection: mongoose.connection,
|
||||
touchAfter: config.sessiontouch
|
||||
},
|
||||
function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
|
||||
//compression
|
||||
app.use(compression());
|
||||
|
||||
|
@ -79,13 +97,7 @@ app.use(session({
|
|||
expires: new Date(Date.now() + config.sessionlife),
|
||||
},
|
||||
maxAge: new Date(Date.now() + config.sessionlife),
|
||||
store: new MongoStore({
|
||||
mongooseConnection: mongoose.connection,
|
||||
touchAfter: config.sessiontouch
|
||||
},
|
||||
function (err) {
|
||||
console.log(err);
|
||||
})
|
||||
store: sessionStore
|
||||
}));
|
||||
|
||||
//middleware which blocks requests when we're too busy
|
||||
|
@ -293,6 +305,7 @@ app.get('/me', function (req, res) {
|
|||
var profile = JSON.parse(user.profile);
|
||||
res.send({
|
||||
status: 'ok',
|
||||
id: req.session.passport.user,
|
||||
name: profile.displayName || profile.username
|
||||
});
|
||||
}
|
||||
|
@ -317,7 +330,9 @@ app.post('/uploadimage', function (req, res) {
|
|||
.then(function (json) {
|
||||
if (config.debug)
|
||||
console.log('SERVER uploadimage success: ' + JSON.stringify(json));
|
||||
res.send({link:json.data.link});
|
||||
res.send({
|
||||
link: json.data.link
|
||||
});
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.error(err);
|
||||
|
@ -337,6 +352,15 @@ app.get("/:noteId/:action", response.noteActions);
|
|||
|
||||
//socket.io secure
|
||||
io.use(realtime.secure);
|
||||
//socket.io auth
|
||||
io.use(passportSocketIo.authorize({
|
||||
cookieParser: cookieParser,
|
||||
key: config.sessionname,
|
||||
secret: config.sessionsecret,
|
||||
store: sessionStore,
|
||||
success: realtime.onAuthorizeSuccess,
|
||||
fail: realtime.onAuthorizeFail
|
||||
}));
|
||||
//socket.io heartbeat
|
||||
io.set('heartbeat interval', config.heartbeatinterval);
|
||||
io.set('heartbeat timeout', config.heartbeattimeout);
|
||||
|
|
7
backup.sh
Normal file
7
backup.sh
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
path=./backups
|
||||
today=$(date +"%Y%m%d")
|
||||
timestamp=$(date +"%Y%m%d%H%M%S")
|
||||
mkdir -p $path/$today
|
||||
pg_dump hackmd > $path/$today/postgresql_$timestamp
|
||||
mongodump -d hackmd -o $path/$today/mongodb_$timestamp
|
21
lib/logger.js
Normal file
21
lib/logger.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
var winston = require('winston');
|
||||
winston.emitErrs = true;
|
||||
|
||||
var logger = new winston.Logger({
|
||||
transports: [
|
||||
new winston.transports.Console({
|
||||
level: 'debug',
|
||||
handleExceptions: true,
|
||||
json: false,
|
||||
colorize: true
|
||||
})
|
||||
],
|
||||
exitOnError: false
|
||||
});
|
||||
|
||||
module.exports = logger;
|
||||
module.exports.stream = {
|
||||
write: function(message, encoding){
|
||||
logger.info(message);
|
||||
}
|
||||
};
|
185
lib/realtime.js
185
lib/realtime.js
|
@ -7,6 +7,8 @@ var async = require('async');
|
|||
var LZString = require('lz-string');
|
||||
var shortId = require('shortid');
|
||||
var randomcolor = require("randomcolor");
|
||||
var Chance = require('chance'),
|
||||
chance = new Chance();
|
||||
|
||||
//core
|
||||
var config = require("../config.js");
|
||||
|
@ -18,11 +20,22 @@ var User = require("./user.js");
|
|||
|
||||
//public
|
||||
var realtime = {
|
||||
onAuthorizeSuccess: onAuthorizeSuccess,
|
||||
onAuthorizeFail: onAuthorizeFail,
|
||||
secure: secure,
|
||||
connection: connection,
|
||||
getStatus: getStatus
|
||||
};
|
||||
|
||||
function onAuthorizeSuccess(data, accept) {
|
||||
accept(null, true);
|
||||
}
|
||||
|
||||
function onAuthorizeFail(data, message, error, accept) {
|
||||
if (error) throw new Error(message);
|
||||
accept(null, true);
|
||||
}
|
||||
|
||||
function secure(socket, next) {
|
||||
try {
|
||||
var handshakeData = socket.request;
|
||||
|
@ -53,8 +66,10 @@ var updater = setInterval(function () {
|
|||
if (note.isDirty) {
|
||||
if (config.debug)
|
||||
console.log("updater found dirty note: " + key);
|
||||
var title = Note.getNoteTitle(LZString.decompressFromBase64(note.body));
|
||||
db.saveToDB(key, title, note.body,
|
||||
var body = LZString.decompressFromUTF16(note.body);
|
||||
var title = Note.getNoteTitle(body);
|
||||
body = LZString.compressToBase64(body);
|
||||
db.saveToDB(key, title, body,
|
||||
function (err, result) {});
|
||||
note.isDirty = false;
|
||||
}
|
||||
|
@ -72,7 +87,7 @@ function getStatus(callback) {
|
|||
var distinctaddresses = [];
|
||||
Object.keys(users).forEach(function (key) {
|
||||
var value = users[key];
|
||||
if(value.login)
|
||||
if (value.login)
|
||||
regusers++;
|
||||
var found = false;
|
||||
for (var i = 0; i < distinctaddresses.length; i++) {
|
||||
|
@ -83,7 +98,7 @@ function getStatus(callback) {
|
|||
}
|
||||
if (!found) {
|
||||
distinctaddresses.push(value.address);
|
||||
if(value.login)
|
||||
if (value.login)
|
||||
distinctregusers++;
|
||||
}
|
||||
});
|
||||
|
@ -129,17 +144,25 @@ function emitOnlineUsers(socket) {
|
|||
Object.keys(notes[notename].users).forEach(function (key) {
|
||||
var user = notes[notename].users[key];
|
||||
if (user)
|
||||
users.push({
|
||||
id: user.id,
|
||||
color: user.color,
|
||||
cursor: user.cursor
|
||||
});
|
||||
users.push(buildUserOutData(user));
|
||||
});
|
||||
notes[notename].socks.forEach(function (sock) {
|
||||
sock.emit('online users', {
|
||||
count: notes[notename].socks.length,
|
||||
var out = {
|
||||
users: users
|
||||
};
|
||||
out = LZString.compressToUTF16(JSON.stringify(out));
|
||||
sock.emit('online users', out);
|
||||
});
|
||||
}
|
||||
|
||||
function emitUserStatus(socket) {
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
if (!notename || !notes[notename]) return;
|
||||
notes[notename].socks.forEach(function (sock) {
|
||||
if (sock != socket) {
|
||||
var out = buildUserOutData(users[socket.id]);
|
||||
sock.emit('user status', out);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -198,7 +221,8 @@ function startConnection(socket) {
|
|||
isConnectionBusy = false;
|
||||
return console.error(err);
|
||||
}
|
||||
var body = data.rows[0].content;
|
||||
var body = LZString.decompressFromBase64(data.rows[0].content);
|
||||
body = LZString.compressToUTF16(body);
|
||||
notes[notename] = {
|
||||
socks: [],
|
||||
body: body,
|
||||
|
@ -232,8 +256,10 @@ function disconnect(socket) {
|
|||
notes[notename].socks.splice(index, 1);
|
||||
}
|
||||
if (Object.keys(notes[notename].users).length <= 0) {
|
||||
var title = Note.getNoteTitle(LZString.decompressFromBase64(notes[notename].body));
|
||||
db.saveToDB(notename, title, notes[notename].body,
|
||||
var body = LZString.decompressFromUTF16(notes[notename].body);
|
||||
var title = Note.getNoteTitle(body);
|
||||
body = LZString.compressToBase64(body);
|
||||
db.saveToDB(notename, title, body,
|
||||
function (err, result) {
|
||||
delete notes[notename];
|
||||
if (config.debug) {
|
||||
|
@ -265,20 +291,80 @@ function disconnect(socket) {
|
|||
}
|
||||
}
|
||||
|
||||
function buildUserOutData(user) {
|
||||
var out = {
|
||||
id: user.id,
|
||||
login: user.login,
|
||||
userid: user.userid,
|
||||
color: user.color,
|
||||
cursor: user.cursor,
|
||||
name: user.name,
|
||||
idle: user.idle,
|
||||
type: user.type
|
||||
};
|
||||
return out;
|
||||
}
|
||||
|
||||
function updateUserData(socket, user) {
|
||||
//retrieve user data from passport
|
||||
if (socket.request.user && socket.request.user.logged_in) {
|
||||
var profile = JSON.parse(socket.request.user.profile);
|
||||
user.name = profile.displayName || profile.username;
|
||||
user.userid = socket.request.user._id;
|
||||
user.login = true;
|
||||
} else {
|
||||
user.userid = null;
|
||||
user.name = 'Guest ' + chance.last();
|
||||
user.login = false;
|
||||
}
|
||||
}
|
||||
|
||||
function connection(socket) {
|
||||
//split notename from socket
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
|
||||
//initialize user data
|
||||
//random color
|
||||
var color = randomcolor({
|
||||
luminosity: 'light'
|
||||
});
|
||||
//make sure color not duplicated or reach max random count
|
||||
if (notename && notes[notename]) {
|
||||
var randomcount = 0;
|
||||
var maxrandomcount = 5;
|
||||
var found = false;
|
||||
do {
|
||||
Object.keys(notes[notename].users).forEach(function (user) {
|
||||
if (user.color == color) {
|
||||
found = true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (found) {
|
||||
color = randomcolor({
|
||||
luminosity: 'light'
|
||||
});
|
||||
randomcount++;
|
||||
}
|
||||
} while (found && randomcount < maxrandomcount);
|
||||
}
|
||||
//create user data
|
||||
users[socket.id] = {
|
||||
id: socket.id,
|
||||
address: socket.handshake.address,
|
||||
'user-agent': socket.handshake.headers['user-agent'],
|
||||
otk: shortId.generate(),
|
||||
color: randomcolor({
|
||||
luminosity: 'light'
|
||||
}),
|
||||
color: color,
|
||||
cursor: null,
|
||||
login: false
|
||||
login: false,
|
||||
userid: null,
|
||||
name: null,
|
||||
idle: false,
|
||||
type: null
|
||||
};
|
||||
updateUserData(socket, users[socket.id]);
|
||||
|
||||
//start connection
|
||||
connectionSocketQueue.push(socket);
|
||||
startConnection(socket);
|
||||
|
||||
|
@ -294,60 +380,87 @@ function connection(socket) {
|
|||
}
|
||||
});
|
||||
|
||||
//received user status
|
||||
socket.on('user status', function (data) {
|
||||
if(data)
|
||||
users[socket.id].login = data.login;
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
if (!notename) return;
|
||||
if (config.debug)
|
||||
console.log('SERVER received [' + notename + '] user status from [' + socket.id + ']: ' + JSON.stringify(data));
|
||||
if (data) {
|
||||
var user = users[socket.id];
|
||||
user.idle = data.idle;
|
||||
user.type = data.type;
|
||||
}
|
||||
emitUserStatus(socket);
|
||||
});
|
||||
|
||||
socket.on('online users', function () {
|
||||
//reveiced when user logout or changed
|
||||
socket.on('user changed', function () {
|
||||
console.log('user changed');
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
if (!notename || !notes[notename]) return;
|
||||
updateUserData(socket, notes[notename].users[socket.id]);
|
||||
emitOnlineUsers(socket);
|
||||
});
|
||||
|
||||
//received sync of online users request
|
||||
socket.on('online users', function () {
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
if (!notename || !notes[notename]) return;
|
||||
var users = [];
|
||||
Object.keys(notes[notename].users).forEach(function (key) {
|
||||
var user = notes[notename].users[key];
|
||||
if (user)
|
||||
users.push(buildUserOutData(user));
|
||||
});
|
||||
var out = {
|
||||
users: users
|
||||
};
|
||||
out = LZString.compressToUTF16(JSON.stringify(out));
|
||||
socket.emit('online users', out);
|
||||
});
|
||||
|
||||
//check version
|
||||
socket.on('version', function () {
|
||||
socket.emit('version', config.version);
|
||||
});
|
||||
|
||||
//received cursor focus
|
||||
socket.on('cursor focus', function (data) {
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
if (!notename || !notes[notename]) return;
|
||||
users[socket.id].cursor = data;
|
||||
var out = buildUserOutData(users[socket.id]);
|
||||
notes[notename].socks.forEach(function (sock) {
|
||||
if (sock != socket) {
|
||||
var out = {
|
||||
id: socket.id,
|
||||
color: users[socket.id].color,
|
||||
cursor: data
|
||||
};
|
||||
sock.emit('cursor focus', out);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//received cursor activity
|
||||
socket.on('cursor activity', function (data) {
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
if (!notename || !notes[notename]) return;
|
||||
users[socket.id].cursor = data;
|
||||
var out = buildUserOutData(users[socket.id]);
|
||||
notes[notename].socks.forEach(function (sock) {
|
||||
if (sock != socket) {
|
||||
var out = {
|
||||
id: socket.id,
|
||||
color: users[socket.id].color,
|
||||
cursor: data
|
||||
};
|
||||
sock.emit('cursor activity', out);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//received cursor blur
|
||||
socket.on('cursor blur', function () {
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
if (!notename || !notes[notename]) return;
|
||||
users[socket.id].cursor = null;
|
||||
notes[notename].socks.forEach(function (sock) {
|
||||
if (sock != socket) {
|
||||
var out = {
|
||||
id: socket.id
|
||||
};
|
||||
notes[notename].socks.forEach(function (sock) {
|
||||
if (sock != socket) {
|
||||
if (sock != socket) {
|
||||
sock.emit('cursor blur', out);
|
||||
}
|
||||
|
@ -365,7 +478,7 @@ function connection(socket) {
|
|||
socket.on('change', function (op) {
|
||||
var notename = getNotenameFromSocket(socket);
|
||||
if (!notename) return;
|
||||
op = LZString.decompressFromBase64(op);
|
||||
op = LZString.decompressFromUTF16(op);
|
||||
if (op)
|
||||
op = JSON.parse(op);
|
||||
if (config.debug)
|
||||
|
@ -390,10 +503,12 @@ function connection(socket) {
|
|||
if (sock != socket) {
|
||||
if (config.debug)
|
||||
console.log('SERVER emit sync data out [' + notename + ']: ' + sock.id + ', op:' + JSON.stringify(op));
|
||||
sock.emit('change', LZString.compressToBase64(JSON.stringify(op)));
|
||||
sock.emit('change', LZString.compressToUTF16(JSON.stringify(op)));
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
console.log('SERVER received uncaught [' + notename + '] data changed: ' + socket.id + ', op:' + JSON.stringify(op));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "hackmd",
|
||||
"version": "0.2.8",
|
||||
"version": "0.2.9",
|
||||
"description": "Realtime collaborative markdown notes on all platforms.",
|
||||
"main": "app.js",
|
||||
"author": "jackycute",
|
||||
|
@ -9,6 +9,7 @@
|
|||
"dependencies": {
|
||||
"async": "^0.9.0",
|
||||
"body-parser": "^1.12.3",
|
||||
"chance": "^0.7.5",
|
||||
"cheerio": "^0.19.0",
|
||||
"compression": "^1.4.3",
|
||||
"connect-mongo": "^0.8.1",
|
||||
|
@ -27,17 +28,20 @@
|
|||
"marked": "^0.3.3",
|
||||
"method-override": "^2.3.2",
|
||||
"mongoose": "^4.0.2",
|
||||
"morgan": "^1.5.3",
|
||||
"node-uuid": "^1.4.3",
|
||||
"passport": "^0.2.1",
|
||||
"passport-dropbox-oauth2": "^0.1.6",
|
||||
"passport-facebook": "^2.0.0",
|
||||
"passport-github": "^0.1.5",
|
||||
"passport-twitter": "^1.0.3",
|
||||
"passport.socketio": "^3.5.1",
|
||||
"pg": "4.x",
|
||||
"randomcolor": "^0.2.0",
|
||||
"shortid": "2.1.3",
|
||||
"socket.io": "1.3.5",
|
||||
"toobusy-js": "^0.4.1"
|
||||
"toobusy-js": "^0.4.1",
|
||||
"winston": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "0.10.x"
|
||||
|
|
|
@ -20,7 +20,6 @@ form,
|
|||
font-family: 'Source Code Pro', Consolas, monaco, monospace;
|
||||
line-height: 18px;
|
||||
font-size: 16px;
|
||||
/*height: auto;*/
|
||||
min-height: 100%;
|
||||
overflow-y: hidden !important;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
@ -30,7 +29,7 @@ form,
|
|||
overflow-y: auto !important;
|
||||
}
|
||||
.CodeMirror-code {
|
||||
/*padding-bottom: 72px;*/
|
||||
padding-bottom: 36px;
|
||||
}
|
||||
.CodeMirror-linenumber {
|
||||
opacity: 0.5;
|
||||
|
@ -73,23 +72,82 @@ form,
|
|||
font-size: 14px;
|
||||
}
|
||||
.nav-mobile {
|
||||
position: relative;
|
||||
position: inherit;
|
||||
margin-top: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.nav-mobile .dropdown-menu {
|
||||
left: 40%;
|
||||
right: 6px;
|
||||
top: 42px;
|
||||
}
|
||||
.nav-status {
|
||||
float: right !important;
|
||||
padding: 7px 8px;
|
||||
}
|
||||
.ui-status {
|
||||
cursor: auto !important;
|
||||
min-width: 120px;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
.ui-status span {
|
||||
cursor: pointer;
|
||||
}
|
||||
.ui-short-status {
|
||||
cursor: pointer;
|
||||
min-width: 40px;
|
||||
}
|
||||
.ui-short-status:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
.ui-user-item {
|
||||
/*na*/
|
||||
}
|
||||
.ui-user-name {
|
||||
margin-top: 2px;
|
||||
}
|
||||
.ui-user-icon {
|
||||
font-size: 20px;
|
||||
margin-top: 2px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.ui-user-status {
|
||||
margin-top: 5px;
|
||||
}
|
||||
.ui-user-status-online {
|
||||
color: rgb(92,184,92);
|
||||
}
|
||||
.ui-user-status-idle {
|
||||
color: rgb(240,173,78);
|
||||
}
|
||||
.ui-user-status-offline {
|
||||
color: rgb(119,119,119);
|
||||
}
|
||||
.list > li > a {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
#short-online-user-list .list .name {
|
||||
max-width: 65%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
float: left;
|
||||
}
|
||||
#online-user-list .list .name {
|
||||
max-width: 110px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
float: left;
|
||||
}
|
||||
.navbar-right {
|
||||
margin-right: 0;
|
||||
}
|
||||
.navbar-nav > li > a {
|
||||
cursor: pointer;
|
||||
}
|
||||
.dropdown-menu > li > a {
|
||||
cursor: pointer;
|
||||
}
|
||||
.other-cursors {
|
||||
position:relative;
|
||||
z-index:3;
|
||||
|
@ -99,6 +157,19 @@ form,
|
|||
position: absolute;
|
||||
border-right: none;
|
||||
}
|
||||
.cursortag {
|
||||
cursor: pointer;
|
||||
background: black;
|
||||
position: absolute;
|
||||
padding: 2px 7px 2px 8px;
|
||||
font-size: 12px;
|
||||
max-width: 150px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
font-family: inherit;
|
||||
border-radius: .25em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.fixfixed .navbar-fixed-top {
|
||||
position: absolute !important;
|
||||
}
|
||||
|
@ -106,3 +177,43 @@ div[contenteditable]:empty:not(:focus):before{
|
|||
content:attr(data-ph);
|
||||
color: gray;
|
||||
}
|
||||
.dropdown-menu {
|
||||
max-height: 80vh;
|
||||
overflow: auto;
|
||||
}
|
||||
.dropdown-menu::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
.dropdown-menu .emoji {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
.dropdown-menu.other-cursor {
|
||||
width: auto !important;
|
||||
}
|
||||
.CodeMirror-scrollbar-filler {
|
||||
background: inherit;
|
||||
}
|
||||
.unselectable {
|
||||
-moz-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
-o-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.cm-trailing-space-a:before,
|
||||
.cm-trailing-space-b:before,
|
||||
.cm-trailing-space-new-line:before {
|
||||
font-weight: bold;
|
||||
color: hsl(30, 100%, 50%); /* a dark orange */
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.cm-trailing-space-a:before,
|
||||
.cm-trailing-space-b:before {
|
||||
content: '·';
|
||||
}
|
||||
|
||||
.cm-trailing-space-new-line:before {
|
||||
content: '↵';
|
||||
}
|
|
@ -81,8 +81,8 @@
|
|||
</div>
|
||||
<hr>
|
||||
<form class="form-inline">
|
||||
<div class="form-group">
|
||||
<input class="form-control ui-use-tags" style="width:172px;" />
|
||||
<div class="form-group" style="vertical-align: bottom;">
|
||||
<input class="form-control ui-use-tags" style="min-width:172px;max-width:344px;" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input class="search form-control" placeholder="Search anything..." />
|
||||
|
@ -188,6 +188,8 @@
|
|||
<!-- Placed at the end of the document so the pages load faster -->
|
||||
<script src="/js/fb.js" async defer></script>
|
||||
<script src="//code.jquery.com/jquery-1.11.3.min.js" defer></script>
|
||||
<script src="/vendor/greensock-js/TweenMax.min.js" defer></script>
|
||||
<script src="/vendor/greensock-js/jquery.gsap.min.js" defer></script>
|
||||
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" defer></script>
|
||||
<script src="/vendor/select2/select2.min.js" defer></script>
|
||||
<script src="/vendor/js.cookie.js" defer></script>
|
||||
|
|
|
@ -3,38 +3,62 @@ var domain = 'change this';
|
|||
var checkAuth = false;
|
||||
var profile = null;
|
||||
var lastLoginState = getLoginState();
|
||||
var lastUserId = getUserId();
|
||||
var loginStateChangeEvent = null;
|
||||
|
||||
function resetCheckAuth() {
|
||||
checkAuth = false;
|
||||
}
|
||||
|
||||
function setLoginState(bool) {
|
||||
function setLoginState(bool, id) {
|
||||
Cookies.set('loginstate', bool, {
|
||||
expires: 14
|
||||
});
|
||||
if (loginStateChangeEvent && bool != lastLoginState)
|
||||
loginStateChangeEvent();
|
||||
if (id) {
|
||||
Cookies.set('userid', id, {
|
||||
expires: 14
|
||||
});
|
||||
} else {
|
||||
Cookies.remove('userid');
|
||||
}
|
||||
lastLoginState = bool;
|
||||
lastUserId = id;
|
||||
checkLoginStateChanged();
|
||||
}
|
||||
|
||||
function checkLoginStateChanged() {
|
||||
if (getLoginState() != lastLoginState || getUserId() != lastUserId) {
|
||||
if(loginStateChangeEvent)
|
||||
loginStateChangeEvent();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function getLoginState() {
|
||||
return Cookies.get('loginstate') === "true";
|
||||
}
|
||||
|
||||
function getUserId() {
|
||||
return Cookies.get('userid');
|
||||
}
|
||||
|
||||
function clearLoginState() {
|
||||
Cookies.remove('loginstate');
|
||||
}
|
||||
|
||||
function checkIfAuth(yesCallback, noCallback) {
|
||||
var cookieLoginState = getLoginState();
|
||||
if (checkLoginStateChanged())
|
||||
checkAuth = false;
|
||||
if (!checkAuth || typeof cookieLoginState == 'undefined') {
|
||||
$.get('/me')
|
||||
.done(function (data) {
|
||||
if (data && data.status == 'ok') {
|
||||
profile = data;
|
||||
yesCallback(profile);
|
||||
setLoginState(true);
|
||||
setLoginState(true, data.id);
|
||||
} else {
|
||||
noCallback();
|
||||
setLoginState(false);
|
||||
|
@ -43,8 +67,10 @@ function checkIfAuth(yesCallback, noCallback) {
|
|||
.fail(function () {
|
||||
noCallback();
|
||||
setLoginState(false);
|
||||
});
|
||||
})
|
||||
.always(function () {
|
||||
checkAuth = true;
|
||||
});
|
||||
} else if (cookieLoginState) {
|
||||
yesCallback(profile);
|
||||
} else {
|
||||
|
|
|
@ -229,6 +229,44 @@ var source = $("#template").html();
|
|||
var template = Handlebars.compile(source);
|
||||
var context = {
|
||||
release: [
|
||||
{
|
||||
version: "0.2.9",
|
||||
tag: "wildfire",
|
||||
date: moment("201505301400", 'YYYYMMDDhhmm').fromNow(),
|
||||
detail: [
|
||||
{
|
||||
title: "Features",
|
||||
item: [
|
||||
"+ Support text auto complete",
|
||||
"+ Support cursor tag and random last name",
|
||||
"+ Support online user list",
|
||||
"+ Support show user info in blockquote"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Enhancements",
|
||||
item: [
|
||||
"* Added more code highlighting support",
|
||||
"* Added more continue list support",
|
||||
"* Adjust menu and history filter UI for better UX",
|
||||
"* Adjust sync scoll animte to gain performance",
|
||||
"* Change compression method of dynamic data",
|
||||
"* Optimized render script"
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Fixes",
|
||||
item: [
|
||||
"* Access history fallback might get wrong",
|
||||
"* Sync scroll not accurate",
|
||||
"* Sync scroll reach bottom range too much",
|
||||
"* Detect login state change not accurate",
|
||||
"* Detect editor focus not accurate",
|
||||
"* Server not handle some editor events"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
version: "0.2.8",
|
||||
tag: "flame",
|
||||
|
|
|
@ -65,6 +65,7 @@ function finishView(view) {
|
|||
try {
|
||||
for (var i = 0; i < mathjaxdivs.length; i++) {
|
||||
MathJax.Hub.Queue(["Typeset", MathJax.Hub, mathjaxdivs[i].innerHTML]);
|
||||
MathJax.Hub.Queue(viewAjaxCallback);
|
||||
$(mathjaxdivs[i]).removeClass("mathjax");
|
||||
}
|
||||
} catch(err) {
|
||||
|
@ -101,6 +102,18 @@ function finishView(view) {
|
|||
//render title
|
||||
document.title = renderTitle(view);
|
||||
}
|
||||
|
||||
//regex for blockquote
|
||||
var spaceregex = /\s*/;
|
||||
var notinhtmltagregex = /(?![^<]*>|[^<>]*<\/)/;
|
||||
var coloregex = /\[color=([#|\(|\)|\s|\,|\w]*)\]/;
|
||||
coloregex = new RegExp(coloregex.source + notinhtmltagregex.source, "g");
|
||||
var nameregex = /\[name=([-|_|\s|\w]*)\]/;
|
||||
var timeregex = /\[time=([:|,|+|-|\(|\)|\s|\w]*)\]/;
|
||||
var nameandtimeregex = new RegExp(nameregex.source + spaceregex.source + timeregex.source + notinhtmltagregex.source, "g");
|
||||
nameregex = new RegExp(nameregex.source + notinhtmltagregex.source, "g");
|
||||
timeregex = new RegExp(timeregex.source + notinhtmltagregex.source, "g");
|
||||
|
||||
//only static transform should be here
|
||||
function postProcess(code) {
|
||||
var result = $('<div>' + code + '</div>');
|
||||
|
@ -121,6 +134,20 @@ function postProcess(code) {
|
|||
lis[i].setAttribute('class', 'task-list-item');
|
||||
}
|
||||
}
|
||||
//blockquote
|
||||
var blockquote = result.find("blockquote");
|
||||
blockquote.each(function (key, value) {
|
||||
var html = $(value).html();
|
||||
html = html.replace(coloregex, '<span class="color" data-color="$1"></span>');
|
||||
html = html.replace(nameandtimeregex, '<small><i class="fa fa-user"></i> $1 <i class="fa fa-clock-o"></i> $2</small>');
|
||||
html = html.replace(nameregex, '<small><i class="fa fa-user"></i> $1</small>');
|
||||
html = html.replace(timeregex, '<small><i class="fa fa-clock-o"></i> $1</small>');
|
||||
$(value).html(html);
|
||||
});
|
||||
var blockquotecolor = result.find("blockquote .color");
|
||||
blockquotecolor.each(function (key, value) {
|
||||
$(value).closest("blockquote").css('border-left-color', $(value).attr('data-color'));
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -195,7 +222,7 @@ function highlightRender(code, lang) {
|
|||
if (/\=$/.test(lang)) {
|
||||
var lines = result.value.split('\n');
|
||||
var linenumbers = [];
|
||||
for (var i = 0; i < lines.length; i++) {
|
||||
for (var i = 0; i < lines.length - 1; i++) {
|
||||
linenumbers[i] = "<div class='linenumber'>" + (i + 1) + "</div>";
|
||||
}
|
||||
var linegutter = "<div class='gutter'>" + linenumbers.join('\n') + "</div>";
|
||||
|
|
|
@ -47,7 +47,7 @@ function saveHistoryToStorage(notehistory) {
|
|||
if (store.enabled)
|
||||
store.set('notehistory', JSON.stringify(notehistory));
|
||||
else
|
||||
saveHistoryToCookie(notehistory);
|
||||
saveHistoryToStorage(notehistory);
|
||||
}
|
||||
|
||||
function saveHistoryToCookie(notehistory) {
|
||||
|
@ -146,11 +146,14 @@ function writeHistoryToServer(view) {
|
|||
} catch (err) {
|
||||
var notehistory = [];
|
||||
}
|
||||
if(!notehistory)
|
||||
notehistory = [];
|
||||
|
||||
var newnotehistory = generateHistory(view, notehistory);
|
||||
saveHistoryToServer(newnotehistory);
|
||||
})
|
||||
.fail(function () {
|
||||
writeHistoryToCookie(view);
|
||||
writeHistoryToStorage(view);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -160,6 +163,8 @@ function writeHistoryToCookie(view) {
|
|||
} catch (err) {
|
||||
var notehistory = [];
|
||||
}
|
||||
if(!notehistory)
|
||||
notehistory = [];
|
||||
|
||||
var newnotehistory = generateHistory(view, notehistory);
|
||||
saveHistoryToCookie(newnotehistory);
|
||||
|
@ -174,6 +179,9 @@ function writeHistoryToStorage(view) {
|
|||
var notehistory = data;
|
||||
} else
|
||||
var notehistory = [];
|
||||
if(!notehistory)
|
||||
notehistory = [];
|
||||
|
||||
var newnotehistory = generateHistory(view, notehistory);
|
||||
saveHistoryToStorage(newnotehistory);
|
||||
} else {
|
||||
|
@ -241,7 +249,7 @@ function getServerHistory(callback) {
|
|||
}
|
||||
})
|
||||
.fail(function () {
|
||||
getCookieHistory(callback);
|
||||
getStorageHistory(callback);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -282,7 +290,7 @@ function parseServerToHistory(list, callback) {
|
|||
}
|
||||
})
|
||||
.fail(function () {
|
||||
parseCookieToHistory(list, callback);
|
||||
parseStorageToHistory(list, callback);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -144,10 +144,14 @@ md.renderer.rules.code = function (tokens, idx /*, options, env */ ) {
|
|||
return '<code>' + Remarkable.utils.escapeHtml(tokens[idx].content) + '</code>';
|
||||
};
|
||||
|
||||
//var editorScrollThrottle = 100;
|
||||
var buildMapThrottle = 100;
|
||||
|
||||
var viewScrolling = false;
|
||||
var viewScrollingDelay = 200;
|
||||
var viewScrollingTimer = null;
|
||||
|
||||
//editor.on('scroll', _.throttle(syncScrollToView, editorScrollThrottle));
|
||||
editor.on('scroll', syncScrollToView);
|
||||
ui.area.view.on('scroll', function () {
|
||||
viewScrolling = true;
|
||||
|
@ -168,10 +172,12 @@ function clearMap() {
|
|||
lineHeightMap = null;
|
||||
}
|
||||
|
||||
var buildMap = _.throttle(buildMapInner, buildMapThrottle);
|
||||
|
||||
// Build offsets for each line (lines can be wrapped)
|
||||
// That's a bit dirty to process each line everytime, but ok for demo.
|
||||
// Optimizations are required only for big texts.
|
||||
function buildMap() {
|
||||
function buildMapInner(syncBack) {
|
||||
var i, offset, nonEmptyList, pos, a, b, _lineHeightMap, linesCount,
|
||||
acc, sourceLikeDiv, textarea = ui.area.codemirror,
|
||||
wrap = $('.CodeMirror-wrap pre'),
|
||||
|
@ -182,8 +188,6 @@ function buildMap() {
|
|||
visibility: 'hidden',
|
||||
height: 'auto',
|
||||
width: wrap.width(),
|
||||
padding: wrap.css('padding'),
|
||||
margin: wrap.css('margin'),
|
||||
'font-size': textarea.css('font-size'),
|
||||
'font-family': textarea.css('font-family'),
|
||||
'line-height': textarea.css('line-height'),
|
||||
|
@ -198,21 +202,23 @@ function buildMap() {
|
|||
_lineHeightMap = [];
|
||||
|
||||
acc = 0;
|
||||
editor.getValue().split('\n').forEach(function (str) {
|
||||
var lines = editor.getValue().split('\n');
|
||||
for (i = 0; i < lines.length; i++) {
|
||||
var str = lines[i];
|
||||
var h, lh;
|
||||
|
||||
_lineHeightMap.push(acc);
|
||||
|
||||
if (str.length === 0) {
|
||||
acc++;
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
sourceLikeDiv.text(str);
|
||||
h = parseFloat(sourceLikeDiv.css('height'));
|
||||
lh = parseFloat(sourceLikeDiv.css('line-height'));
|
||||
acc += Math.round(h / lh);
|
||||
});
|
||||
}
|
||||
sourceLikeDiv.remove();
|
||||
_lineHeightMap.push(acc);
|
||||
linesCount = acc;
|
||||
|
@ -224,9 +230,10 @@ function buildMap() {
|
|||
nonEmptyList.push(0);
|
||||
_scrollMap[0] = 0;
|
||||
|
||||
ui.area.markdown.find('.part').each(function (n, el) {
|
||||
var $el = $(el),
|
||||
t = $el.data('startline') - 1;
|
||||
var parts = ui.area.markdown.find('.part').toArray();
|
||||
for (i = 0; i < parts.length; i++) {
|
||||
var $el = $(parts[i]),
|
||||
t = $el.attr('data-startline') - 1;
|
||||
if (t === '') {
|
||||
return;
|
||||
}
|
||||
|
@ -235,7 +242,7 @@ function buildMap() {
|
|||
nonEmptyList.push(t);
|
||||
}
|
||||
_scrollMap[t] = Math.round($el.offset().top + offset);
|
||||
});
|
||||
}
|
||||
|
||||
nonEmptyList.push(linesCount);
|
||||
_scrollMap[linesCount] = ui.area.view[0].scrollHeight;
|
||||
|
@ -256,6 +263,9 @@ function buildMap() {
|
|||
|
||||
scrollMap = _scrollMap;
|
||||
lineHeightMap = _lineHeightMap;
|
||||
|
||||
if(loaded && syncBack)
|
||||
syncScrollToView();
|
||||
}
|
||||
|
||||
function getPartByEditorLineNo(lineNo) {
|
||||
|
@ -290,20 +300,20 @@ function getEditorLineNoByTop(top) {
|
|||
return null;
|
||||
}
|
||||
|
||||
function syncScrollToView(_lineNo) {
|
||||
function syncScrollToView(event, _lineNo) {
|
||||
if (currentMode != modeType.both) return;
|
||||
var lineNo, posTo;
|
||||
var scrollInfo = editor.getScrollInfo();
|
||||
if (!scrollMap || !lineHeightMap) {
|
||||
buildMap();
|
||||
buildMap(true);
|
||||
return;
|
||||
}
|
||||
if (typeof _lineNo != "number") {
|
||||
if (!_lineNo) {
|
||||
var topDiffPercent, posToNextDiff;
|
||||
var textHeight = editor.defaultTextHeight();
|
||||
lineNo = Math.floor(scrollInfo.top / textHeight);
|
||||
var lineCount = editor.lineCount();
|
||||
var lastLineHeight = editor.getLineHandle(lineCount - 1).height;
|
||||
//if reach last line, then scroll to end
|
||||
if (scrollInfo.top + scrollInfo.clientHeight >= scrollInfo.height - lastLineHeight) {
|
||||
//if reach bottom, then scroll to end
|
||||
if (scrollInfo.top + scrollInfo.clientHeight >= scrollInfo.height - defaultTextHeight) {
|
||||
posTo = ui.area.view[0].scrollHeight - ui.area.view.height();
|
||||
} else {
|
||||
topDiffPercent = (scrollInfo.top % textHeight) / textHeight;
|
||||
|
@ -316,12 +326,18 @@ function syncScrollToView(_lineNo) {
|
|||
posTo = scrollMap[lineHeightMap[_lineNo]];
|
||||
}
|
||||
var posDiff = Math.abs(ui.area.view.scrollTop() - posTo);
|
||||
var duration = posDiff / 50;
|
||||
ui.area.view.stop(true, true).animate({
|
||||
scrollTop: posTo
|
||||
}, duration >= 100 ? duration : 100, "linear");
|
||||
/*
|
||||
if (posDiff > scrollInfo.clientHeight / 5) {
|
||||
var duration = posDiff / 50;
|
||||
ui.area.view.stop(true).animate({
|
||||
ui.area.view.stop(true, true).animate({
|
||||
scrollTop: posTo
|
||||
}, duration >= 50 ? duration : 100, "linear");
|
||||
}, duration >= 100 ? duration : 100, "linear");
|
||||
} else {
|
||||
ui.area.view.stop(true).scrollTop(posTo);
|
||||
ui.area.view.stop(true, true).scrollTop(posTo);
|
||||
}
|
||||
*/
|
||||
}
|
|
@ -63,7 +63,7 @@
|
|||
}
|
||||
for (var i = ranges.length - 1; i >= 0; i--) {
|
||||
var cur = ranges[i].head;
|
||||
cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1));
|
||||
cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@
|
|||
if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass;
|
||||
}
|
||||
cm.operation(function() {
|
||||
cm.replaceSelection("\n\n", null);
|
||||
cm.replaceSelection("\n\n", null, "+input");
|
||||
cm.execCommand("goCharLeft");
|
||||
ranges = cm.listSelections();
|
||||
for (var i = 0; i < ranges.length; i++) {
|
||||
|
@ -144,12 +144,12 @@
|
|||
var sels = cm.getSelections();
|
||||
for (var i = 0; i < sels.length; i++)
|
||||
sels[i] = left + sels[i] + right;
|
||||
cm.replaceSelections(sels, "around");
|
||||
cm.replaceSelections(sels, "around", "+input");
|
||||
} else if (type == "both") {
|
||||
cm.replaceSelection(left + right, null);
|
||||
cm.replaceSelection(left + right, null, "+input");
|
||||
cm.execCommand("goCharLeft");
|
||||
} else if (type == "addFour") {
|
||||
cm.replaceSelection(left + left + left + left, "before");
|
||||
cm.replaceSelection(left + left + left + left, "before", "+input");
|
||||
cm.execCommand("goCharRight");
|
||||
}
|
||||
});
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
})(function(CodeMirror) {
|
||||
"use strict";
|
||||
|
||||
var listRE = /^(\s*)(>[> ]*|[*+-]\s|(\d+)\.)(\s*)/,
|
||||
emptyListRE = /^(\s*)(>[> ]*|[*+-]|(\d+)\.)(\s*)$/,
|
||||
var listRE = /^(\s*)(>[> ]*|[*+-]\s|(\d+)\.)(\[\s\]\s|\[x\]\s|\s*)/,
|
||||
emptyListRE = /^(\s*)(>[> ]*|[*+-]\s|(\d+)\.)(\[\s\]\s*|\[x\]\s|\s*)$/,
|
||||
unorderedListRE = /[*+-]\s/;
|
||||
|
||||
CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {
|
||||
|
|
23
public/vendor/codemirror/codemirror.min.js
vendored
23
public/vendor/codemirror/codemirror.min.js
vendored
File diff suppressed because one or more lines are too long
18
public/vendor/codemirror/compress.sh
vendored
18
public/vendor/codemirror/compress.sh
vendored
|
@ -1,6 +1,8 @@
|
|||
uglifyjs --compress --mangle --output codemirror.min.js \
|
||||
lib/codemirror.js \
|
||||
addon/mode/overlay.js \
|
||||
addon/mode/simple.js \
|
||||
addon/mode/multiplex.js \
|
||||
addon/selection/active-line.js \
|
||||
addon/search/searchcursor.js \
|
||||
addon/search/search.js \
|
||||
|
@ -14,6 +16,7 @@ addon/edit/matchtags.js \
|
|||
addon/edit/closetag.js \
|
||||
addon/edit/continuelist.js \
|
||||
addon/comment/comment.js \
|
||||
addon/comment/continuecomment.js \
|
||||
addon/wrap/hardwrap.js \
|
||||
addon/fold/foldcode.js \
|
||||
addon/fold/brace-fold.js \
|
||||
|
@ -26,7 +29,22 @@ mode/gfm/gfm.js \
|
|||
mode/javascript/javascript.js \
|
||||
mode/css/css.js \
|
||||
mode/htmlmixed/htmlmixed.js \
|
||||
mode/htmlembedded/htmlembedded.js \
|
||||
mode/clike/clike.js \
|
||||
mode/clojure/clojure.js \
|
||||
mode/ruby/ruby.js \
|
||||
mode/python/python.js \
|
||||
mode/shell/shell.js \
|
||||
mode/php/php.js \
|
||||
mode/sql/sql.js \
|
||||
mode/coffeescript/coffeescript.js \
|
||||
mode/yaml/yaml.js \
|
||||
mode/jade/jade.js \
|
||||
mode/lua/lua.js \
|
||||
mode/cmake/cmake.js \
|
||||
mode/nginx/nginx.js \
|
||||
mode/perl/perl.js \
|
||||
mode/sass/sass.js \
|
||||
mode/r/r.js \
|
||||
mode/dockerfile/dockerfile.js \
|
||||
keymap/sublime.js
|
12
public/vendor/codemirror/lib/codemirror.js
vendored
12
public/vendor/codemirror/lib/codemirror.js
vendored
|
@ -388,7 +388,7 @@
|
|||
viewWidth: d.wrapper.clientWidth,
|
||||
barLeft: cm.options.fixedGutter ? gutterW : 0,
|
||||
docHeight: docH,
|
||||
scrollHeight: docH + scrollGap(cm) + d.barHeight,
|
||||
scrollHeight: docH + scrollGap(cm) + d.barHeight + textHeight(cm.display),
|
||||
nativeBarWidth: d.nativeBarWidth,
|
||||
gutterWidth: gutterW
|
||||
};
|
||||
|
@ -2287,9 +2287,13 @@
|
|||
}
|
||||
|
||||
$('.other-cursor').each(function(key, value) {
|
||||
var coord = cm.charCoords({line:$(value).attr('data-line'), ch:$(value).attr('data-ch')}, 'windows');
|
||||
$(value)[0].style.left = coord.left + 'px';
|
||||
$(value)[0].style.top = coord.top + 'px';
|
||||
var line = parseInt($(value).attr('data-line'));
|
||||
var ch = parseInt($(value).attr('data-ch'));
|
||||
var offsetLeft = parseFloat($(value).attr('data-offset-left'));
|
||||
var offsetTop = parseFloat($(value).attr('data-offset-top'));
|
||||
var coord = cm.charCoords({line: line, ch: ch}, 'windows');
|
||||
$(value)[0].style.left = coord.left + offsetLeft + 'px';
|
||||
$(value)[0].style.top = coord.top + offsetTop + 'px';
|
||||
});
|
||||
}
|
||||
|
||||
|
|
17
public/vendor/greensock-js/TweenMax.min.js
vendored
Executable file
17
public/vendor/greensock-js/TweenMax.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
14
public/vendor/greensock-js/jquery.gsap.min.js
vendored
Executable file
14
public/vendor/greensock-js/jquery.gsap.min.js
vendored
Executable file
|
@ -0,0 +1,14 @@
|
|||
/*!
|
||||
* VERSION: 0.1.11
|
||||
* DATE: 2015-03-13
|
||||
* UPDATES AND DOCS AT: http://greensock.com/jquery-gsap-plugin/
|
||||
*
|
||||
* Requires TweenLite version 1.8.0 or higher and CSSPlugin.
|
||||
*
|
||||
* @license Copyright (c) 2013-2015, GreenSock. All rights reserved.
|
||||
* This work is subject to the terms at http://greensock.com/standard-license or for
|
||||
* Club GreenSock members, the software agreement that was issued with your membership.
|
||||
*
|
||||
* @author: Jack Doyle, jack@greensock.com
|
||||
*/
|
||||
(function(t){"use strict";var e,i,s,r=t.fn.animate,n=t.fn.stop,a=!0,o=function(t){var e,i={};for(e in t)i[e]=t[e];return i},h={overwrite:1,delay:1,useFrames:1,runBackwards:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,autoCSS:1},l=",scrollTop,scrollLeft,show,hide,toggle,",_=l,u=function(t,e){for(var i in h)h[i]&&void 0!==t[i]&&(e[i]=t[i])},f=function(t){return function(e){return t.getRatio(e)}},c={},p=function(){var r,n,a,o=window.GreenSockGlobals||window;if(e=o.TweenMax||o.TweenLite,e&&(r=(e.version+".0.0").split("."),n=!(Number(r[0])>0&&Number(r[1])>7),o=o.com.greensock,i=o.plugins.CSSPlugin,c=o.easing.Ease.map||{}),!e||!i||n)return e=null,!s&&window.console&&(window.console.log("The jquery.gsap.js plugin requires the TweenMax (or at least TweenLite and CSSPlugin) JavaScript file(s)."+(n?" Version "+r.join(".")+" is too old.":"")),s=!0),void 0;if(t.easing){for(a in c)t.easing[a]=f(c[a]);p=!1}};t.fn.animate=function(s,n,h,l){if(s=s||{},p&&(p(),!e||!i))return r.call(this,s,n,h,l);if(!a||s.skipGSAP===!0||"object"==typeof n&&"function"==typeof n.step)return r.call(this,s,n,h,l);var f,m,d,g,v=t.speed(n,h,l),y={ease:c[v.easing]||(v.easing===!1?c.linear:c.swing)},T=this,w="object"==typeof n?n.specialEasing:null;for(m in s){if(f=s[m],f instanceof Array&&c[f[1]]&&(w=w||{},w[m]=f[1],f=f[0]),"show"===f||"hide"===f||"toggle"===f||-1!==_.indexOf(m)&&-1!==_.indexOf(","+m+","))return r.call(this,s,n,h,l);y[-1===m.indexOf("-")?m:t.camelCase(m)]=f}if(w){y=o(y),g=[];for(m in w)f=g[g.length]={},u(y,f),f.ease=c[w[m]]||y.ease,-1!==m.indexOf("-")&&(m=t.camelCase(m)),f[m]=y[m],delete y[m];0===g.length&&(g=null)}return d=function(i){var s,r=o(y);if(g)for(s=g.length;--s>-1;)e.to(this,t.fx.off?0:v.duration/1e3,g[s]);r.onComplete=function(){i?i():v.old&&t(this).each(v.old)},e.to(this,t.fx.off?0:v.duration/1e3,r)},v.queue!==!1?(T.queue(v.queue,d),"function"==typeof v.old&&T.queue(v.queue,function(t){v.old.call(this),t()})):d.call(T),T},t.fn.stop=function(t,i){if(n.call(this,t,i),e){if(i)for(var s,r=e.getTweensOf(this),a=r.length;--a>-1;)s=r[a].totalTime()/r[a].totalDuration(),s>0&&1>s&&r[a].seek(r[a].totalDuration());e.killTweensOf(this)}return this},t.gsap={enabled:function(t){a=t},version:"0.1.11",legacyProps:function(t){_=l+t+","}}})(jQuery);
|
160
public/vendor/idle.js
vendored
Executable file
160
public/vendor/idle.js
vendored
Executable file
|
@ -0,0 +1,160 @@
|
|||
(function() {
|
||||
var Idle;
|
||||
|
||||
/** IE8/old browser support **/
|
||||
if (!document.addEventListener) {
|
||||
if (document.attachEvent) {
|
||||
document.addEventListener = function(event, callback, useCapture) {
|
||||
return document.attachEvent("on" + event, callback, useCapture);
|
||||
};
|
||||
} else {
|
||||
document.addEventListener = function() {
|
||||
return {};
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (!document.removeEventListener) {
|
||||
if (document.detachEvent) {
|
||||
document.removeEventListener = function(event, callback) {
|
||||
return document.detachEvent("on" + event, callback);
|
||||
};
|
||||
} else {
|
||||
document.removeEventListener = function() {
|
||||
return {};
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
"use strict";
|
||||
|
||||
Idle = {};
|
||||
|
||||
Idle = (function() {
|
||||
Idle.isAway = false;
|
||||
|
||||
Idle.awayTimeout = 3000;
|
||||
|
||||
Idle.awayTimestamp = 0;
|
||||
|
||||
Idle.awayTimer = null;
|
||||
|
||||
Idle.onAway = null;
|
||||
|
||||
Idle.onAwayBack = null;
|
||||
|
||||
Idle.onVisible = null;
|
||||
|
||||
Idle.onHidden = null;
|
||||
|
||||
function Idle(options) {
|
||||
var activeMethod, activity;
|
||||
if (options) {
|
||||
this.awayTimeout = parseInt(options.awayTimeout, 10);
|
||||
this.onAway = options.onAway;
|
||||
this.onAwayBack = options.onAwayBack;
|
||||
this.onVisible = options.onVisible;
|
||||
this.onHidden = options.onHidden;
|
||||
}
|
||||
activity = this;
|
||||
activeMethod = function() {
|
||||
return activity.onActive();
|
||||
};
|
||||
window.onclick = activeMethod;
|
||||
window.onmousemove = activeMethod;
|
||||
window.onmouseenter = activeMethod;
|
||||
window.onkeydown = activeMethod;
|
||||
window.onscroll = activeMethod;
|
||||
window.onmousewheel = activeMethod;
|
||||
}
|
||||
|
||||
Idle.prototype.onActive = function() {
|
||||
this.awayTimestamp = new Date().getTime() + this.awayTimeout;
|
||||
if (this.isAway) {
|
||||
this.isAway = false;
|
||||
if (this.onAwayBack) {
|
||||
this.onAwayBack();
|
||||
}
|
||||
this.start();
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
Idle.prototype.start = function() {
|
||||
var activity;
|
||||
if (!this.listener) {
|
||||
this.listener = (function() {
|
||||
return activity.handleVisibilityChange();
|
||||
});
|
||||
document.addEventListener("visibilitychange", this.listener, false);
|
||||
document.addEventListener("webkitvisibilitychange", this.listener, false);
|
||||
document.addEventListener("msvisibilitychange", this.listener, false);
|
||||
}
|
||||
this.awayTimestamp = new Date().getTime() + this.awayTimeout;
|
||||
if (this.awayTimer !== null) {
|
||||
clearTimeout(this.awayTimer);
|
||||
}
|
||||
activity = this;
|
||||
this.awayTimer = setTimeout((function() {
|
||||
return activity.checkAway();
|
||||
}), this.awayTimeout + 100);
|
||||
return this;
|
||||
};
|
||||
|
||||
Idle.prototype.stop = function() {
|
||||
if (this.awayTimer !== null) {
|
||||
clearTimeout(this.awayTimer);
|
||||
}
|
||||
if (this.listener !== null) {
|
||||
document.removeEventListener("visibilitychange", this.listener);
|
||||
document.removeEventListener("webkitvisibilitychange", this.listener);
|
||||
document.removeEventListener("msvisibilitychange", this.listener);
|
||||
this.listener = null;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Idle.prototype.setAwayTimeout = function(ms) {
|
||||
this.awayTimeout = parseInt(ms, 10);
|
||||
return this;
|
||||
};
|
||||
|
||||
Idle.prototype.checkAway = function() {
|
||||
var activity, t;
|
||||
t = new Date().getTime();
|
||||
if (t < this.awayTimestamp) {
|
||||
this.isAway = false;
|
||||
activity = this;
|
||||
this.awayTimer = setTimeout((function() {
|
||||
return activity.checkAway();
|
||||
}), this.awayTimestamp - t + 100);
|
||||
return;
|
||||
}
|
||||
if (this.awayTimer !== null) {
|
||||
clearTimeout(this.awayTimer);
|
||||
}
|
||||
this.isAway = true;
|
||||
if (this.onAway) {
|
||||
return this.onAway();
|
||||
}
|
||||
};
|
||||
|
||||
Idle.prototype.handleVisibilityChange = function() {
|
||||
if (document.hidden || document.msHidden || document.webkitHidden) {
|
||||
if (this.onHidden) {
|
||||
return this.onHidden();
|
||||
}
|
||||
} else {
|
||||
if (this.onVisible) {
|
||||
return this.onVisible();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
return Idle;
|
||||
|
||||
})();
|
||||
|
||||
window.Idle = Idle;
|
||||
|
||||
}).call(this);
|
33
public/vendor/jquery-textcomplete/jquery.textcomplete.css
vendored
Executable file
33
public/vendor/jquery-textcomplete/jquery.textcomplete.css
vendored
Executable file
|
@ -0,0 +1,33 @@
|
|||
/* Sample */
|
||||
|
||||
.dropdown-menu {
|
||||
border: 1px solid #ddd;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.dropdown-menu li {
|
||||
border-top: 1px solid #ddd;
|
||||
padding: 2px 5px;
|
||||
}
|
||||
|
||||
.dropdown-menu li:first-child {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.dropdown-menu li:hover,
|
||||
.dropdown-menu .active {
|
||||
background-color: rgb(110, 183, 219);
|
||||
}
|
||||
|
||||
|
||||
/* SHOULD not modify */
|
||||
|
||||
.dropdown-menu {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.dropdown-menu a:hover {
|
||||
cursor: pointer;
|
||||
}
|
1147
public/vendor/jquery-textcomplete/jquery.textcomplete.js
vendored
Executable file
1147
public/vendor/jquery-textcomplete/jquery.textcomplete.js
vendored
Executable file
File diff suppressed because it is too large
Load diff
4
public/vendor/jquery-textcomplete/jquery.textcomplete.min.js
vendored
Executable file
4
public/vendor/jquery-textcomplete/jquery.textcomplete.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
1
public/vendor/jquery-textcomplete/jquery.textcomplete.min.map
vendored
Executable file
1
public/vendor/jquery-textcomplete/jquery.textcomplete.min.map
vendored
Executable file
File diff suppressed because one or more lines are too long
98
public/vendor/lodash.min.js
vendored
Normal file
98
public/vendor/lodash.min.js
vendored
Normal file
|
@ -0,0 +1,98 @@
|
|||
/**
|
||||
* @license
|
||||
* lodash 3.9.3 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
|
||||
* Build: `lodash modern -o ./lodash.js`
|
||||
*/
|
||||
;(function(){function n(n,t){if(n!==t){var r=null===n,e=n===m,u=n===n,i=null===t,o=t===m,f=t===t;if(n>t&&!i||!u||r&&!o&&f||e&&f)return 1;if(n<t&&!r||!f||i&&!e&&u||o&&u)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return s(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return typeof n=="function"||false}function u(n){return typeof n=="string"?n:null==n?"":n+""}function i(n,t){for(var r=-1,e=n.length;++r<e&&-1<t.indexOf(n.charAt(r)););
|
||||
return r}function o(n,t){for(var r=n.length;r--&&-1<t.indexOf(n.charAt(r)););return r}function f(t,r){return n(t.a,r.a)||t.b-r.b}function l(n){return Nn[n]}function a(n){return Ln[n]}function c(n){return"\\"+Mn[n]}function s(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function p(n){return!!n&&typeof n=="object"}function h(n){return 160>=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n);
|
||||
}function _(n,t){for(var r=-1,e=n.length,u=-1,i=[];++r<e;)n[r]===t&&(n[r]=L,i[++u]=r);return i}function v(n){for(var t=-1,r=n.length;++t<r&&h(n.charCodeAt(t)););return t}function g(n){for(var t=n.length;t--&&h(n.charCodeAt(t)););return t}function y(n){return zn[n]}function d(h){function Nn(n){if(p(n)&&!(Ti(n)||n instanceof Bn)){if(n instanceof zn)return n;if(ru.call(n,"__chain__")&&ru.call(n,"__wrapped__"))return Mr(n)}return new zn(n)}function Ln(){}function zn(n,t,r){this.__wrapped__=n,this.__actions__=r||[],
|
||||
this.__chain__=!!t}function Bn(n){this.__wrapped__=n,this.__actions__=null,this.__dir__=1,this.__filtered__=false,this.__iteratees__=null,this.__takeCount__=Su,this.__views__=null}function Mn(){this.__data__={}}function Pn(n){var t=n?n.length:0;for(this.data={hash:bu(null),set:new vu};t--;)this.push(n[t])}function qn(n,t){var r=n.data;return(typeof t=="string"||ve(t)?r.set.has(t):r.hash[t])?0:-1}function Dn(n,t){var r=-1,e=n.length;for(t||(t=Me(e));++r<e;)t[r]=n[r];return t}function Kn(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););
|
||||
return n}function Vn(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function Gn(n,t){for(var r=-1,e=n.length,u=-1,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[++u]=o)}return i}function Jn(n,t){for(var r=-1,e=n.length,u=Me(e);++r<e;)u[r]=t(n[r],r,n);return u}function Xn(n,t,r,e){var u=-1,i=n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);return r}function Hn(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;return false}function Qn(n,t){return n===m?t:n}function nt(n,t,r,e){
|
||||
return n!==m&&ru.call(e,r)?n:t}function tt(n,t,r){for(var e=-1,u=Ki(t),i=u.length;++e<i;){var o=u[e],f=n[o],l=r(f,t[o],o,n,t);(l===l?l===f:f!==f)&&(f!==m||o in n)||(n[o]=l)}return n}function rt(n,t){return null==t?n:ut(t,Ki(t),n)}function et(n,t){for(var r=-1,e=null==n,u=!e&&Ir(n),i=u?n.length:0,o=t.length,f=Me(o);++r<o;){var l=t[r];f[r]=u?Er(l,i)?n[l]:m:e?m:n[l]}return f}function ut(n,t,r){r||(r={});for(var e=-1,u=t.length;++e<u;){var i=t[e];r[i]=n[i]}return r}function it(n,t,r){var e=typeof n;return"function"==e?t===m?n:Mt(n,t,r):null==n?Fe:"object"==e?xt(n):t===m?Be(n):At(n,t);
|
||||
}function ot(n,t,r,e,u,i,o){var f;if(r&&(f=u?r(n,e,u):r(n)),f!==m)return f;if(!ve(n))return n;if(e=Ti(n)){if(f=jr(n),!t)return Dn(n,f)}else{var l=uu.call(n),a=l==D;if(l!=V&&l!=z&&(!a||u))return $n[l]?Or(n,l,t):u?n:{};if(f=kr(a?{}:n),!t)return rt(f,n)}for(i||(i=[]),o||(o=[]),u=i.length;u--;)if(i[u]==n)return o[u];return i.push(n),o.push(f),(e?Kn:vt)(n,function(e,u){f[u]=ot(e,t,r,u,n,i,o)}),f}function ft(n,t,r){if(typeof n!="function")throw new Je(N);return gu(function(){n.apply(m,r)},t)}function lt(n,t){
|
||||
var e=n?n.length:0,u=[];if(!e)return u;var i=-1,o=br(),f=o==r,l=f&&200<=t.length?Vu(t):null,a=t.length;l&&(o=qn,f=false,t=l);n:for(;++i<e;)if(l=n[i],f&&l===l){for(var c=a;c--;)if(t[c]===l)continue n;u.push(l)}else 0>o(t,l,0)&&u.push(l);return u}function at(n,t){var r=true;return Mu(n,function(n,e,u){return r=!!t(n,e,u)}),r}function ct(n,t,r,e){var u=e,i=u;return Mu(n,function(n,o,f){o=+t(n,o,f),(r(o,u)||o===e&&o===i)&&(u=o,i=n)}),i}function st(n,t){var r=[];return Mu(n,function(n,e,u){t(n,e,u)&&r.push(n);
|
||||
}),r}function pt(n,t,r,e){var u;return r(n,function(n,r,i){return t(n,r,i)?(u=e?r:n,false):void 0}),u}function ht(n,t,r){for(var e=-1,u=n.length,i=-1,o=[];++e<u;){var f=n[e];if(p(f)&&Ir(f)&&(r||Ti(f)||se(f))){t&&(f=ht(f,t,r));for(var l=-1,a=f.length;++l<a;)o[++i]=f[l]}else r||(o[++i]=f)}return o}function _t(n,t){qu(n,t,ke)}function vt(n,t){return qu(n,t,Ki)}function gt(n,t){return Du(n,t,Ki)}function yt(n,t){for(var r=-1,e=t.length,u=-1,i=[];++r<e;){var o=t[r];$i(n[o])&&(i[++u]=o)}return i}function dt(n,t,r){
|
||||
if(null!=n){r!==m&&r in zr(n)&&(t=[r]),r=0;for(var e=t.length;null!=n&&r<e;)n=n[t[r++]];return r&&r==e?n:m}}function mt(n,t,r,e,u,i){if(n===t)n=true;else if(null==n||null==t||!ve(n)&&!p(t))n=n!==n&&t!==t;else n:{var o=mt,f=Ti(n),l=Ti(t),a=B,c=B;f||(a=uu.call(n),a==z?a=V:a!=V&&(f=we(n))),l||(c=uu.call(t),c==z?c=V:c!=V&&we(t));var s=a==V,l=c==V,c=a==c;if(!c||f||s){if(!e&&(a=s&&ru.call(n,"__wrapped__"),l=l&&ru.call(t,"__wrapped__"),a||l)){n=o(a?n.value():n,l?t.value():t,r,e,u,i);break n}if(c){for(u||(u=[]),
|
||||
i||(i=[]),a=u.length;a--;)if(u[a]==n){n=i[a]==t;break n}u.push(n),i.push(t),n=(f?gr:dr)(n,t,o,r,e,u,i),u.pop(),i.pop()}else n=false}else n=yr(n,t,a)}return n}function wt(n,t,r){var e=t.length,u=e,i=!r;if(null==n)return!u;for(n=zr(n);e--;){var o=t[e];if(i&&o[2]?o[1]!==n[o[0]]:!(o[0]in n))return false}for(;++e<u;){var o=t[e],f=o[0],l=n[f],a=o[1];if(i&&o[2]){if(l===m&&!(f in n))return false}else if(o=r?r(l,a,f):m,o===m?!mt(a,l,r,true):!o)return false}return true}function bt(n,t){var r=-1,e=Ir(n)?Me(n.length):[];return Mu(n,function(n,u,i){
|
||||
e[++r]=t(n,u,i)}),e}function xt(n){var t=xr(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:n[r]===e&&(e!==m||r in zr(n))}}return function(n){return wt(n,t)}}function At(n,t){var r=Ti(n),e=Wr(n)&&t===t&&!ve(t),u=n+"";return n=Br(n),function(i){if(null==i)return false;var o=u;if(i=zr(i),!(!r&&e||o in i)){if(i=1==n.length?i:dt(i,Ct(n,0,-1)),null==i)return false;o=Vr(n),i=zr(i)}return i[o]===t?t!==m||o in i:mt(t,i[o],m,true)}}function jt(n,t,r,e,u){if(!ve(n))return n;var i=Ir(t)&&(Ti(t)||we(t)),o=i?null:Ki(t);
|
||||
return Kn(o||t,function(f,l){if(o&&(l=f,f=t[l]),p(f)){e||(e=[]),u||(u=[]);n:{for(var a=l,c=e,s=u,h=c.length,_=t[a];h--;)if(c[h]==_){n[a]=s[h];break n}var h=n[a],v=r?r(h,_,a,n,t):m,g=v===m;g&&(v=_,Ir(_)&&(Ti(_)||we(_))?v=Ti(h)?h:Ir(h)?Dn(h):[]:Fi(_)||se(_)?v=se(h)?Ae(h):Fi(h)?h:{}:g=false),c.push(_),s.push(v),g?n[a]=jt(v,_,r,c,s):(v===v?v!==h:h===h)&&(n[a]=v)}}else a=n[l],c=r?r(a,f,l,n,t):m,(s=c===m)&&(c=f),c===m&&(!i||l in n)||!s&&(c===c?c===a:a!==a)||(n[l]=c)}),n}function kt(n){return function(t){return null==t?m:t[n];
|
||||
}}function Ot(n){var t=n+"";return n=Br(n),function(r){return dt(r,n,t)}}function Rt(n,t){for(var r=n?t.length:0;r--;){var e=t[r];if(e!=u&&Er(e)){var u=e;yu.call(n,e,1)}}}function It(n,t){return n+su(Cu()*(t-n+1))}function Et(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=false,n):t(r,n,u,i)}),r}function Ct(n,t,r){var e=-1,u=n.length;for(t=null==t?0:+t||0,0>t&&(t=-t>u?0:u+t),r=r===m||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Me(u);++e<u;)r[e]=n[e+t];return r}function Wt(n,t){var r;return Mu(n,function(n,e,u){
|
||||
return r=t(n,e,u),!r}),!!r}function St(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function Tt(t,r,e){var u=mr(),i=-1;return r=Jn(r,function(n){return u(n)}),t=bt(t,function(n){return{a:Jn(r,function(t){return t(n)}),b:++i,c:n}}),St(t,function(t,r){var u;n:{u=-1;for(var i=t.a,o=r.a,f=i.length,l=e.length;++u<f;){var a=n(i[u],o[u]);if(a){u=u<l?a*(e[u]?1:-1):a;break n}}u=t.b-r.b}return u})}function Ut(n,t){var r=0;return Mu(n,function(n,e,u){r+=+t(n,e,u)||0}),r}function $t(n,t){var e=-1,u=br(),i=n.length,o=u==r,f=o&&200<=i,l=f?Vu():null,a=[];
|
||||
l?(u=qn,o=false):(f=false,l=t?[]:a);n:for(;++e<i;){var c=n[e],s=t?t(c,e,n):c;if(o&&c===c){for(var p=l.length;p--;)if(l[p]===s)continue n;t&&l.push(s),a.push(c)}else 0>u(l,s,0)&&((t||f)&&l.push(s),a.push(c))}return a}function Ft(n,t){for(var r=-1,e=t.length,u=Me(e);++r<e;)u[r]=n[t[r]];return u}function Nt(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?Ct(n,e?0:i,e?i+1:u):Ct(n,e?i+1:0,e?u:i)}function Lt(n,t){var r=n;r instanceof Bn&&(r=r.value());for(var e=-1,u=t.length;++e<u;){
|
||||
var r=[r],i=t[e];_u.apply(r,i.args),r=i.func.apply(i.thisArg,r)}return r}function zt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&u<=Uu){for(;e<u;){var i=e+u>>>1,o=n[i];(r?o<=t:o<t)&&null!==o?e=i+1:u=i}return u}return Bt(n,t,Fe,r)}function Bt(n,t,r,e){t=r(t);for(var u=0,i=n?n.length:0,o=t!==t,f=null===t,l=t===m;u<i;){var a=su((u+i)/2),c=r(n[a]),s=c!==m,p=c===c;(o?p||e:f?p&&s&&(e||null!=c):l?p&&(e||s):null==c?0:e?c<=t:c<t)?u=a+1:i=a}return Ou(i,Tu)}function Mt(n,t,r){if(typeof n!="function")return Fe;
|
||||
if(t===m)return n;switch(r){case 1:return function(r){return n.call(t,r)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)};case 5:return function(r,e,u,i,o){return n.call(t,r,e,u,i,o)}}return function(){return n.apply(t,arguments)}}function Pt(n){return lu.call(n,0)}function qt(n,t,r){for(var e=r.length,u=-1,i=ku(n.length-e,0),o=-1,f=t.length,l=Me(i+f);++o<f;)l[o]=t[o];for(;++u<e;)l[r[u]]=n[u];for(;i--;)l[o++]=n[u++];return l}function Dt(n,t,r){
|
||||
for(var e=-1,u=r.length,i=-1,o=ku(n.length-u,0),f=-1,l=t.length,a=Me(o+l);++i<o;)a[i]=n[i];for(o=i;++f<l;)a[o+f]=t[f];for(;++e<u;)a[o+r[e]]=n[i++];return a}function Kt(n,t){return function(r,e,u){var i=t?t():{};if(e=mr(e,u,3),Ti(r)){u=-1;for(var o=r.length;++u<o;){var f=r[u];n(i,f,e(f,u,r),r)}}else Mu(r,function(t,r,u){n(i,t,e(t,r,u),u)});return i}}function Vt(n){return ae(function(t,r){var e=-1,u=null==t?0:r.length,i=2<u?r[u-2]:m,o=2<u?r[2]:m,f=1<u?r[u-1]:m;for(typeof i=="function"?(i=Mt(i,f,5),
|
||||
u-=2):(i=typeof f=="function"?f:m,u-=i?1:0),o&&Cr(r[0],r[1],o)&&(i=3>u?m:i,u=1);++e<u;)(o=r[e])&&n(t,o,i);return t})}function Yt(n,t){return function(r,e){var u=r?Zu(r):0;if(!Tr(u))return n(r,e);for(var i=t?u:-1,o=zr(r);(t?i--:++i<u)&&false!==e(o[i],i,o););return r}}function Zt(n){return function(t,r,e){var u=zr(t);e=e(t);for(var i=e.length,o=n?i:-1;n?o--:++o<i;){var f=e[o];if(false===r(u[f],f,u))break}return t}}function Gt(n,t){function r(){return(this&&this!==Yn&&this instanceof r?e:n).apply(t,arguments);
|
||||
}var e=Xt(n);return r}function Jt(n){return function(t){var r=-1;t=Te(Ie(t));for(var e=t.length,u="";++r<e;)u=n(u,t[r],r);return u}}function Xt(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4])}var r=Bu(n.prototype),t=n.apply(r,t);return ve(t)?t:r}}function Ht(n){function t(r,e,u){return u&&Cr(r,e,u)&&(e=null),
|
||||
r=vr(r,n,null,null,null,null,null,e),r.placeholder=t.placeholder,r}return t}function Qt(n,t){return function(r,e,u){if(u&&Cr(r,e,u)&&(e=null),e=mr(e,u,3),1==e.length){u=r=Lr(r);for(var i=e,o=-1,f=u.length,l=t,a=l;++o<f;){var c=u[o],s=+i(c);n(s,l)&&(l=s,a=c)}if(u=a,!r.length||u!==t)return u}return ct(r,e,n,t)}}function nr(n,r){return function(e,u,i){return u=mr(u,i,3),Ti(e)?(u=t(e,u,r),-1<u?e[u]:m):pt(e,u,n)}}function tr(n){return function(r,e,u){return r&&r.length?(e=mr(e,u,3),t(r,e,n)):-1}}function rr(n){
|
||||
return function(t,r,e){return r=mr(r,e,3),pt(t,r,n,true)}}function er(n){return function(){for(var t,r=arguments.length,e=n?r:-1,u=0,i=Me(r);n?e--:++e<r;){var o=i[u++]=arguments[e];if(typeof o!="function")throw new Je(N);!t&&zn.prototype.thru&&"wrapper"==wr(o)&&(t=new zn([]))}for(e=t?-1:r;++e<r;){var o=i[e],u=wr(o),f="wrapper"==u?Yu(o):null;t=f&&Sr(f[0])&&f[1]==(I|j|O|E)&&!f[4].length&&1==f[9]?t[wr(f[0])].apply(t,f[3]):1==o.length&&Sr(o)?t[u]():t.thru(o)}return function(){var n=arguments;if(t&&1==n.length&&Ti(n[0]))return t.plant(n[0]).value();
|
||||
for(var e=0,n=r?i[e].apply(this,n):n[0];++e<r;)n=i[e].call(this,n);return n}}}function ur(n,t){return function(r,e,u){return typeof e=="function"&&u===m&&Ti(r)?n(r,e):t(r,Mt(e,u,3))}}function ir(n){return function(t,r,e){return(typeof r!="function"||e!==m)&&(r=Mt(r,e,3)),n(t,r,ke)}}function or(n){return function(t,r,e){return(typeof r!="function"||e!==m)&&(r=Mt(r,e,3)),n(t,r)}}function fr(n){return function(t,r,e){var u={};return r=mr(r,e,3),vt(t,function(t,e,i){i=r(t,e,i),e=n?i:e,t=n?t:i,u[e]=t}),
|
||||
u}}function lr(n){return function(t,r,e){return t=u(t),(n?t:"")+pr(t,r,e)+(n?"":t)}}function ar(n){var t=ae(function(r,e){var u=_(e,t.placeholder);return vr(r,n,null,e,u)});return t}function cr(n,t){return function(r,e,u,i){var o=3>arguments.length;return typeof e=="function"&&i===m&&Ti(r)?n(r,e,u,o):Et(r,mr(e,i,4),u,o,t)}}function sr(n,t,r,e,u,i,o,f,l,a){function c(){for(var w=arguments.length,A=w,j=Me(w);A--;)j[A]=arguments[A];if(e&&(j=qt(j,e,u)),i&&(j=Dt(j,i,o)),v||y){var A=c.placeholder,k=_(j,A),w=w-k.length;
|
||||
if(w<a){var I=f?Dn(f):null,w=ku(a-w,0),E=v?k:null,k=v?null:k,C=v?j:null,j=v?null:j;return t|=v?O:R,t&=~(v?R:O),g||(t&=~(b|x)),j=[n,t,r,C,E,j,k,I,l,w],I=sr.apply(m,j),Sr(n)&&Gu(I,j),I.placeholder=A,I}}if(A=p?r:this,I=h?A[n]:n,f)for(w=j.length,E=Ou(f.length,w),k=Dn(j);E--;)C=f[E],j[E]=Er(C,w)?k[C]:m;return s&&l<j.length&&(j.length=l),this&&this!==Yn&&this instanceof c&&(I=d||Xt(n)),I.apply(A,j)}var s=t&I,p=t&b,h=t&x,v=t&j,g=t&A,y=t&k,d=h?null:Xt(n);return c}function pr(n,t,r){return n=n.length,t=+t,
|
||||
n<t&&Au(t)?(t-=n,r=null==r?" ":r+"",We(r,au(t/r.length)).slice(0,t)):""}function hr(n,t,r,e){function u(){for(var t=-1,f=arguments.length,l=-1,a=e.length,c=Me(f+a);++l<a;)c[l]=e[l];for(;f--;)c[l++]=arguments[++t];return(this&&this!==Yn&&this instanceof u?o:n).apply(i?r:this,c)}var i=t&b,o=Xt(n);return u}function _r(n){return function(t,r,e,u){var i=mr(e);return null==e&&i===it?zt(t,r,n):Bt(t,r,i(e,u,1),n)}}function vr(n,t,r,e,u,i,o,f){var l=t&x;if(!l&&typeof n!="function")throw new Je(N);var a=e?e.length:0;
|
||||
if(a||(t&=~(O|R),e=u=null),a-=u?u.length:0,t&R){var c=e,s=u;e=u=null}var p=l?null:Yu(n);return r=[n,t,r,e,u,c,s,i,o,f],p&&(e=r[1],t=p[1],f=e|t,u=t==I&&e==j||t==I&&e==E&&r[7].length<=p[8]||t==(I|E)&&e==j,(f<I||u)&&(t&b&&(r[2]=p[2],f|=e&b?0:A),(e=p[3])&&(u=r[3],r[3]=u?qt(u,e,p[4]):Dn(e),r[4]=u?_(r[3],L):Dn(p[4])),(e=p[5])&&(u=r[5],r[5]=u?Dt(u,e,p[6]):Dn(e),r[6]=u?_(r[5],L):Dn(p[6])),(e=p[7])&&(r[7]=Dn(e)),t&I&&(r[8]=null==r[8]?p[8]:Ou(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=f),t=r[1],f=r[9]),
|
||||
r[9]=null==f?l?0:n.length:ku(f-a,0)||0,(p?Ku:Gu)(t==b?Gt(r[0],r[2]):t!=O&&t!=(b|O)||r[4].length?sr.apply(m,r):hr.apply(m,r),r)}function gr(n,t,r,e,u,i,o){var f=-1,l=n.length,a=t.length;if(l!=a&&(!u||a<=l))return false;for(;++f<l;){var c=n[f],a=t[f],s=e?e(u?a:c,u?c:a,f):m;if(s!==m){if(s)continue;return false}if(u){if(!Hn(t,function(n){return c===n||r(c,n,e,u,i,o)}))return false}else if(c!==a&&!r(c,a,e,u,i,o))return false}return true}function yr(n,t,r){switch(r){case M:case P:return+n==+t;case q:return n.name==t.name&&n.message==t.message;
|
||||
case K:return n!=+n?t!=+t:n==+t;case Y:case Z:return n==t+""}return false}function dr(n,t,r,e,u,i,o){var f=Ki(n),l=f.length,a=Ki(t).length;if(l!=a&&!u)return false;for(a=l;a--;){var c=f[a];if(!(u?c in t:ru.call(t,c)))return false}for(var s=u;++a<l;){var c=f[a],p=n[c],h=t[c],_=e?e(u?h:p,u?p:h,c):m;if(_===m?!r(p,h,e,u,i,o):!_)return false;s||(s="constructor"==c)}return s||(r=n.constructor,e=t.constructor,!(r!=e&&"constructor"in n&&"constructor"in t)||typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)?true:false;
|
||||
}function mr(n,t,r){var e=Nn.callback||Ue,e=e===Ue?it:e;return r?e(n,t,r):e}function wr(n){for(var t=n.name,r=Lu[t],e=r?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function br(n,t,e){var u=Nn.indexOf||Kr,u=u===Kr?r:u;return n?u(n,t,e):u}function xr(n){n=Oe(n);for(var t=n.length;t--;){var r=n[t][1];n[t][2]=r===r&&!ve(r)}return n}function Ar(n,t){var r=null==n?m:n[t];return ge(r)?r:m}function jr(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&ru.call(n,"index")&&(r.index=n.index,
|
||||
r.input=n.input),r}function kr(n){return n=n.constructor,typeof n=="function"&&n instanceof n||(n=Ye),new n}function Or(n,t,r){var e=n.constructor;switch(t){case G:return Pt(n);case M:case P:return new e(+n);case J:case X:case H:case Q:case nn:case tn:case rn:case en:case un:return t=n.buffer,new e(r?Pt(t):t,n.byteOffset,n.length);case K:case Z:return new e(n);case Y:var u=new e(n.source,jn.exec(n));u.lastIndex=n.lastIndex}return u}function Rr(n,t,r){return null==n||Wr(t,n)||(t=Br(t),n=1==t.length?n:dt(n,Ct(t,0,-1)),
|
||||
t=Vr(t)),t=null==n?n:n[t],null==t?m:t.apply(n,r)}function Ir(n){return null!=n&&Tr(Zu(n))}function Er(n,t){return n=typeof n=="number"||Rn.test(n)?+n:-1,t=null==t?Fu:t,-1<n&&0==n%1&&n<t}function Cr(n,t,r){if(!ve(r))return false;var e=typeof t;return("number"==e?Ir(r)&&Er(t,r.length):"string"==e&&t in r)?(t=r[t],n===n?n===t:t!==t):false}function Wr(n,t){var r=typeof n;return"string"==r&&yn.test(n)||"number"==r?true:Ti(n)?false:!gn.test(n)||null!=t&&n in zr(t)}function Sr(n){var t=wr(n);return t in Bn.prototype?(t=Nn[t],
|
||||
n===t?true:(t=Yu(t),!!t&&n===t[0])):false}function Tr(n){return typeof n=="number"&&-1<n&&0==n%1&&n<=Fu}function Ur(n,t){n=zr(n);for(var r=-1,e=t.length,u={};++r<e;){var i=t[r];i in n&&(u[i]=n[i])}return u}function $r(n,t){var r={};return _t(n,function(n,e,u){t(n,e,u)&&(r[e]=n)}),r}function Fr(n){var t;if(!p(n)||uu.call(n)!=V||!(ru.call(n,"constructor")||(t=n.constructor,typeof t!="function"||t instanceof t)))return false;var r;return _t(n,function(n,t){r=t}),r===m||ru.call(n,r)}function Nr(n){for(var t=ke(n),r=t.length,e=r&&n.length,u=!!e&&Tr(e)&&(Ti(n)||se(n)),i=-1,o=[];++i<r;){
|
||||
var f=t[i];(u&&Er(f,e)||ru.call(n,f))&&o.push(f)}return o}function Lr(n){return null==n?[]:Ir(n)?ve(n)?n:Ye(n):Re(n)}function zr(n){return ve(n)?n:Ye(n)}function Br(n){if(Ti(n))return n;var t=[];return u(n).replace(dn,function(n,r,e,u){t.push(e?u.replace(xn,"$1"):r||n)}),t}function Mr(n){return n instanceof Bn?n.clone():new zn(n.__wrapped__,n.__chain__,Dn(n.__actions__))}function Pr(n,t,r){return n&&n.length?((r?Cr(n,t,r):null==t)&&(t=1),Ct(n,0>t?0:t)):[]}function qr(n,t,r){var e=n?n.length:0;return e?((r?Cr(n,t,r):null==t)&&(t=1),
|
||||
t=e-(+t||0),Ct(n,0,0>t?0:t)):[]}function Dr(n){return n?n[0]:m}function Kr(n,t,e){var u=n?n.length:0;if(!u)return-1;if(typeof e=="number")e=0>e?ku(u+e,0):e;else if(e)return e=zt(n,t),n=n[e],(t===t?t===n:n!==n)?e:-1;return r(n,t,e||0)}function Vr(n){var t=n?n.length:0;return t?n[t-1]:m}function Yr(n){return Pr(n,1)}function Zr(n,t,e,u){if(!n||!n.length)return[];null!=t&&typeof t!="boolean"&&(u=e,e=Cr(n,t,u)?null:t,t=false);var i=mr();if((null!=e||i!==it)&&(e=i(e,u,3)),t&&br()==r){t=e;var o;e=-1,u=n.length;
|
||||
for(var i=-1,f=[];++e<u;){var l=n[e],a=t?t(l,e,n):l;e&&o===a||(o=a,f[++i]=l)}n=f}else n=$t(n,e);return n}function Gr(n){if(!n||!n.length)return[];var t=-1,r=0;n=Gn(n,function(n){return Ir(n)?(r=ku(n.length,r),true):void 0});for(var e=Me(r);++t<r;)e[t]=Jn(n,kt(t));return e}function Jr(n,t,r){return n&&n.length?(n=Gr(n),null==t?n:(t=Mt(t,r,4),Jn(n,function(n){return Xn(n,t,m,true)}))):[]}function Xr(n,t){var r=-1,e=n?n.length:0,u={};for(!e||t||Ti(n[0])||(t=[]);++r<e;){var i=n[r];t?u[i]=t[r]:i&&(u[i[0]]=i[1]);
|
||||
}return u}function Hr(n){return n=Nn(n),n.__chain__=true,n}function Qr(n,t,r){return t.call(r,n)}function ne(n,t,r){var e=Ti(n)?Vn:at;return r&&Cr(n,t,r)&&(t=null),(typeof t!="function"||r!==m)&&(t=mr(t,r,3)),e(n,t)}function te(n,t,r){var e=Ti(n)?Gn:st;return t=mr(t,r,3),e(n,t)}function re(n,t,r,e){var u=n?Zu(n):0;return Tr(u)||(n=Re(n),u=n.length),u?(r=typeof r!="number"||e&&Cr(t,r,e)?0:0>r?ku(u+r,0):r||0,typeof n=="string"||!Ti(n)&&me(n)?r<u&&-1<n.indexOf(t,r):-1<br(n,t,r)):false}function ee(n,t,r){
|
||||
var e=Ti(n)?Jn:bt;return t=mr(t,r,3),e(n,t)}function ue(n,t,r){if(r?Cr(n,t,r):null==t){n=Lr(n);var e=n.length;return 0<e?n[It(0,e-1)]:m}r=-1,n=xe(n);var e=n.length,u=e-1;for(t=Ou(0>t?0:+t||0,e);++r<t;){var e=It(r,u),i=n[e];n[e]=n[r],n[r]=i}return n.length=t,n}function ie(n,t,r){var e=Ti(n)?Hn:Wt;return r&&Cr(n,t,r)&&(t=null),(typeof t!="function"||r!==m)&&(t=mr(t,r,3)),e(n,t)}function oe(n,t){var r;if(typeof t!="function"){if(typeof n!="function")throw new Je(N);var e=n;n=t,t=e}return function(){
|
||||
return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}}function fe(n,t,r){function e(){var r=t-(wi()-a);0>=r||r>t?(f&&cu(f),r=p,f=s=p=m,r&&(h=wi(),l=n.apply(c,o),s||f||(o=c=null))):s=gu(e,r)}function u(){s&&cu(s),f=s=p=m,(v||_!==t)&&(h=wi(),l=n.apply(c,o),s||f||(o=c=null))}function i(){if(o=arguments,a=wi(),c=this,p=v&&(s||!g),false===_)var r=g&&!s;else{f||g||(h=a);var i=_-(a-h),y=0>=i||i>_;y?(f&&(f=cu(f)),h=a,l=n.apply(c,o)):f||(f=gu(u,i))}return y&&s?s=cu(s):s||t===_||(s=gu(e,t)),r&&(y=true,l=n.apply(c,o)),
|
||||
!y||s||f||(o=c=null),l}var o,f,l,a,c,s,p,h=0,_=false,v=true;if(typeof n!="function")throw new Je(N);if(t=0>t?0:+t||0,true===r)var g=true,v=false;else ve(r)&&(g=r.leading,_="maxWait"in r&&ku(+r.maxWait||0,t),v="trailing"in r?r.trailing:v);return i.cancel=function(){s&&cu(s),f&&cu(f),f=s=p=m},i}function le(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;return i.has(u)?i.get(u):(e=n.apply(this,e),r.cache=i.set(u,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new Je(N);return r.cache=new le.Cache,
|
||||
r}function ae(n,t){if(typeof n!="function")throw new Je(N);return t=ku(t===m?n.length-1:+t||0,0),function(){for(var r=arguments,e=-1,u=ku(r.length-t,0),i=Me(u);++e<u;)i[e]=r[t+e];switch(t){case 0:return n.call(this,i);case 1:return n.call(this,r[0],i);case 2:return n.call(this,r[0],r[1],i)}for(u=Me(t+1),e=-1;++e<t;)u[e]=r[e];return u[t]=i,n.apply(this,u)}}function ce(n,t){return n>t}function se(n){return p(n)&&Ir(n)&&uu.call(n)==z}function pe(n){return!!n&&1===n.nodeType&&p(n)&&-1<uu.call(n).indexOf("Element");
|
||||
}function he(n,t,r,e){return e=(r=typeof r=="function"?Mt(r,e,3):m)?r(n,t):m,e===m?mt(n,t,r):!!e}function _e(n){return p(n)&&typeof n.message=="string"&&uu.call(n)==q}function ve(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function ge(n){return null==n?false:uu.call(n)==D?ou.test(tu.call(n)):p(n)&&On.test(n)}function ye(n){return typeof n=="number"||p(n)&&uu.call(n)==K}function de(n){return p(n)&&uu.call(n)==Y}function me(n){return typeof n=="string"||p(n)&&uu.call(n)==Z}function we(n){return p(n)&&Tr(n.length)&&!!Un[uu.call(n)];
|
||||
}function be(n,t){return n<t}function xe(n){var t=n?Zu(n):0;return Tr(t)?t?Dn(n):[]:Re(n)}function Ae(n){return ut(n,ke(n))}function je(n){return yt(n,ke(n))}function ke(n){if(null==n)return[];ve(n)||(n=Ye(n));for(var t=n.length,t=t&&Tr(t)&&(Ti(n)||se(n))&&t||0,r=n.constructor,e=-1,r=typeof r=="function"&&r.prototype===n,u=Me(t),i=0<t;++e<t;)u[e]=e+"";for(var o in n)i&&Er(o,t)||"constructor"==o&&(r||!ru.call(n,o))||u.push(o);return u}function Oe(n){n=zr(n);for(var t=-1,r=Ki(n),e=r.length,u=Me(e);++t<e;){
|
||||
var i=r[t];u[t]=[i,n[i]]}return u}function Re(n){return Ft(n,Ki(n))}function Ie(n){return(n=u(n))&&n.replace(In,l).replace(bn,"")}function Ee(n){return(n=u(n))&&wn.test(n)?n.replace(mn,"\\$&"):n}function Ce(n,t,r){return r&&Cr(n,t,r)&&(t=0),Eu(n,t)}function We(n,t){var r="";if(n=u(n),t=+t,1>t||!n||!Au(t))return r;do t%2&&(r+=n),t=su(t/2),n+=n;while(t);return r}function Se(n,t,r){var e=n;return(n=u(n))?(r?Cr(e,t,r):null==t)?n.slice(v(n),g(n)+1):(t+="",n.slice(i(n,t),o(n,t)+1)):n}function Te(n,t,r){
|
||||
return r&&Cr(n,t,r)&&(t=null),n=u(n),n.match(t||Wn)||[]}function Ue(n,t,r){return r&&Cr(n,t,r)&&(t=null),p(n)?Ne(n):it(n,t)}function $e(n){return function(){return n}}function Fe(n){return n}function Ne(n){return xt(ot(n,true))}function Le(n,t,r){if(null==r){var e=ve(t),u=e?Ki(t):null;((u=u&&u.length?yt(t,u):null)?u.length:e)||(u=false,r=t,t=n,n=this)}u||(u=yt(t,Ki(t)));var i=true,e=-1,o=$i(n),f=u.length;false===r?i=false:ve(r)&&"chain"in r&&(i=r.chain);for(;++e<f;){r=u[e];var l=t[r];n[r]=l,o&&(n.prototype[r]=function(t){
|
||||
return function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=Dn(this.__actions__)).push({func:t,args:arguments,thisArg:n}),e.__chain__=r,e}return r=[this.value()],_u.apply(r,arguments),t.apply(n,r)}}(l))}return n}function ze(){}function Be(n){return Wr(n)?kt(n):Ot(n)}h=h?Zn.defaults(Yn.Object(),h,Zn.pick(Yn,Tn)):Yn;var Me=h.Array,Pe=h.Date,qe=h.Error,De=h.Function,Ke=h.Math,Ve=h.Number,Ye=h.Object,Ze=h.RegExp,Ge=h.String,Je=h.TypeError,Xe=Me.prototype,He=Ye.prototype,Qe=Ge.prototype,nu=(nu=h.window)?nu.document:null,tu=De.prototype.toString,ru=He.hasOwnProperty,eu=0,uu=He.toString,iu=h._,ou=Ze("^"+Ee(tu.call(ru)).replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),fu=Ar(h,"ArrayBuffer"),lu=Ar(fu&&new fu(0),"slice"),au=Ke.ceil,cu=h.clearTimeout,su=Ke.floor,pu=Ar(Ye,"getPrototypeOf"),hu=h.parseFloat,_u=Xe.push,vu=Ar(h,"Set"),gu=h.setTimeout,yu=Xe.splice,du=Ar(h,"Uint8Array"),mu=Ar(h,"WeakMap"),wu=function(){
|
||||
try{var n=Ar(h,"Float64Array"),t=new n(new fu(10),0,1)&&n}catch(r){}return t||null}(),bu=Ar(Ye,"create"),xu=Ar(Me,"isArray"),Au=h.isFinite,ju=Ar(Ye,"keys"),ku=Ke.max,Ou=Ke.min,Ru=Ar(Pe,"now"),Iu=Ar(Ve,"isFinite"),Eu=h.parseInt,Cu=Ke.random,Wu=Ve.NEGATIVE_INFINITY,Su=Ve.POSITIVE_INFINITY,Tu=4294967294,Uu=2147483647,$u=wu?wu.BYTES_PER_ELEMENT:0,Fu=9007199254740991,Nu=mu&&new mu,Lu={},zu=Nn.support={};!function(n){function t(){this.x=n}var r=[];t.prototype={valueOf:n,y:n};for(var e in new t)r.push(e);
|
||||
try{zu.dom=11===nu.createDocumentFragment().nodeType}catch(u){zu.dom=false}}(1,0),Nn.templateSettings={escape:hn,evaluate:_n,interpolate:vn,variable:"",imports:{_:Nn}};var Bu=function(){function n(){}return function(t){if(ve(t)){n.prototype=t;var r=new n;n.prototype=null}return r||{}}}(),Mu=Yt(vt),Pu=Yt(gt,true),qu=Zt(),Du=Zt(true),Ku=Nu?function(n,t){return Nu.set(n,t),n}:Fe;lu||(Pt=fu&&du?function(n){var t=n.byteLength,r=wu?su(t/$u):0,e=r*$u,u=new fu(t);if(r){var i=new wu(u,0,r);i.set(new wu(n,0,r))}return t!=e&&(i=new du(u,e),
|
||||
i.set(new du(n,e))),u}:$e(null));var Vu=bu&&vu?function(n){return new Pn(n)}:$e(null),Yu=Nu?function(n){return Nu.get(n)}:ze,Zu=kt("length"),Gu=function(){var n=0,t=0;return function(r,e){var u=wi(),i=T-(u-t);if(t=u,0<i){if(++n>=S)return r}else n=0;return Ku(r,e)}}(),Ju=ae(function(n,t){return Ir(n)?lt(n,ht(t,false,true)):[]}),Xu=tr(),Hu=tr(true),Qu=ae(function(n){for(var t=n.length,e=t,u=Me(c),i=br(),o=i==r,f=[];e--;){var l=n[e]=Ir(l=n[e])?l:[];u[e]=o&&120<=l.length?Vu(e&&l):null}var o=n[0],a=-1,c=o?o.length:0,s=u[0];
|
||||
n:for(;++a<c;)if(l=o[a],0>(s?qn(s,l):i(f,l,0))){for(e=t;--e;){var p=u[e];if(0>(p?qn(p,l):i(n[e],l,0)))continue n}s&&s.push(l),f.push(l)}return f}),ni=ae(function(t,r){r=ht(r);var e=et(t,r);return Rt(t,r.sort(n)),e}),ti=_r(),ri=_r(true),ei=ae(function(n){return $t(ht(n,false,true))}),ui=ae(function(n,t){return Ir(n)?lt(n,t):[]}),ii=ae(Gr),oi=ae(function(n){var t=n.length,r=2<t?n[t-2]:m,e=1<t?n[t-1]:m;return 2<t&&typeof r=="function"?t-=2:(r=1<t&&typeof e=="function"?(--t,e):m,e=m),n.length=t,Jr(n,r,e)}),fi=ae(function(n,t){
|
||||
return et(n,ht(t))}),li=Kt(function(n,t,r){ru.call(n,r)?++n[r]:n[r]=1}),ai=nr(Mu),ci=nr(Pu,true),si=ur(Kn,Mu),pi=ur(function(n,t){for(var r=n.length;r--&&false!==t(n[r],r,n););return n},Pu),hi=Kt(function(n,t,r){ru.call(n,r)?n[r].push(t):n[r]=[t]}),_i=Kt(function(n,t,r){n[r]=t}),vi=ae(function(n,t,r){var e=-1,u=typeof t=="function",i=Wr(t),o=Ir(n)?Me(n.length):[];return Mu(n,function(n){var f=u?t:i&&null!=n?n[t]:null;o[++e]=f?f.apply(n,r):Rr(n,t,r)}),o}),gi=Kt(function(n,t,r){n[r?0:1].push(t)},function(){
|
||||
return[[],[]]}),yi=cr(Xn,Mu),di=cr(function(n,t,r,e){var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r},Pu),mi=ae(function(n,t){if(null==n)return[];var r=t[2];return r&&Cr(t[0],t[1],r)&&(t.length=1),Tt(n,ht(t),[])}),wi=Ru||function(){return(new Pe).getTime()},bi=ae(function(n,t,r){var e=b;if(r.length)var u=_(r,bi.placeholder),e=e|O;return vr(n,e,t,r,u)}),xi=ae(function(n,t){t=t.length?ht(t):je(n);for(var r=-1,e=t.length;++r<e;){var u=t[r];n[u]=vr(n[u],b,n)}return n}),Ai=ae(function(n,t,r){
|
||||
var e=b|x;if(r.length)var u=_(r,Ai.placeholder),e=e|O;return vr(t,e,n,r,u)}),ji=Ht(j),ki=Ht(k),Oi=ae(function(n,t){return ft(n,1,t)}),Ri=ae(function(n,t,r){return ft(n,t,r)}),Ii=er(),Ei=er(true),Ci=ar(O),Wi=ar(R),Si=ae(function(n,t){return vr(n,E,null,null,null,ht(t))}),Ti=xu||function(n){return p(n)&&Tr(n.length)&&uu.call(n)==B};zu.dom||(pe=function(n){return!!n&&1===n.nodeType&&p(n)&&!Fi(n)});var Ui=Iu||function(n){return typeof n=="number"&&Au(n)},$i=e(/x/)||du&&!e(du)?function(n){return uu.call(n)==D;
|
||||
}:e,Fi=pu?function(n){if(!n||uu.call(n)!=V)return false;var t=Ar(n,"valueOf"),r=t&&(r=pu(t))&&pu(r);return r?n==r||pu(n)==r:Fr(n)}:Fr,Ni=Vt(function(n,t,r){return r?tt(n,t,r):rt(n,t)}),Li=ae(function(n){var t=n[0];return null==t?t:(n.push(Qn),Ni.apply(m,n))}),zi=rr(vt),Bi=rr(gt),Mi=ir(qu),Pi=ir(Du),qi=or(vt),Di=or(gt),Ki=ju?function(n){var t=null==n?null:n.constructor;return typeof t=="function"&&t.prototype===n||typeof n!="function"&&Ir(n)?Nr(n):ve(n)?ju(n):[]}:Nr,Vi=fr(true),Yi=fr(),Zi=Vt(jt),Gi=ae(function(n,t){
|
||||
if(null==n)return{};if("function"!=typeof t[0])return t=Jn(ht(t),Ge),Ur(n,lt(ke(n),t));var r=Mt(t[0],t[1],3);return $r(n,function(n,t,e){return!r(n,t,e)})}),Ji=ae(function(n,t){return null==n?{}:"function"==typeof t[0]?$r(n,Mt(t[0],t[1],3)):Ur(n,ht(t))}),Xi=Jt(function(n,t,r){return t=t.toLowerCase(),n+(r?t.charAt(0).toUpperCase()+t.slice(1):t)}),Hi=Jt(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Qi=lr(),no=lr(true);8!=Eu(Sn+"08")&&(Ce=function(n,t,r){return(r?Cr(n,t,r):null==t)?t=0:t&&(t=+t),
|
||||
n=Se(n),Eu(n,t||(kn.test(n)?16:10))});var to=Jt(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),ro=Jt(function(n,t,r){return n+(r?" ":"")+(t.charAt(0).toUpperCase()+t.slice(1))}),eo=ae(function(n,t){try{return n.apply(m,t)}catch(r){return _e(r)?r:new qe(r)}}),uo=ae(function(n,t){return function(r){return Rr(r,n,t)}}),io=ae(function(n,t){return function(r){return Rr(n,r,t)}}),oo=Qt(ce,Wu),fo=Qt(be,Su);return Nn.prototype=Ln.prototype,zn.prototype=Bu(Ln.prototype),zn.prototype.constructor=zn,
|
||||
Bn.prototype=Bu(Ln.prototype),Bn.prototype.constructor=Bn,Mn.prototype["delete"]=function(n){return this.has(n)&&delete this.__data__[n]},Mn.prototype.get=function(n){return"__proto__"==n?m:this.__data__[n]},Mn.prototype.has=function(n){return"__proto__"!=n&&ru.call(this.__data__,n)},Mn.prototype.set=function(n,t){return"__proto__"!=n&&(this.__data__[n]=t),this},Pn.prototype.push=function(n){var t=this.data;typeof n=="string"||ve(n)?t.set.add(n):t.hash[n]=true},le.Cache=Mn,Nn.after=function(n,t){if(typeof t!="function"){
|
||||
if(typeof n!="function")throw new Je(N);var r=n;n=t,t=r}return n=Au(n=+n)?n:0,function(){return 1>--n?t.apply(this,arguments):void 0}},Nn.ary=function(n,t,r){return r&&Cr(n,t,r)&&(t=null),t=n&&null==t?n.length:ku(+t||0,0),vr(n,I,null,null,null,null,t)},Nn.assign=Ni,Nn.at=fi,Nn.before=oe,Nn.bind=bi,Nn.bindAll=xi,Nn.bindKey=Ai,Nn.callback=Ue,Nn.chain=Hr,Nn.chunk=function(n,t,r){t=(r?Cr(n,t,r):null==t)?1:ku(+t||1,1),r=0;for(var e=n?n.length:0,u=-1,i=Me(au(e/t));r<e;)i[++u]=Ct(n,r,r+=t);return i},Nn.compact=function(n){
|
||||
for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var i=n[t];i&&(u[++e]=i)}return u},Nn.constant=$e,Nn.countBy=li,Nn.create=function(n,t,r){var e=Bu(n);return r&&Cr(n,t,r)&&(t=null),t?rt(e,t):e},Nn.curry=ji,Nn.curryRight=ki,Nn.debounce=fe,Nn.defaults=Li,Nn.defer=Oi,Nn.delay=Ri,Nn.difference=Ju,Nn.drop=Pr,Nn.dropRight=qr,Nn.dropRightWhile=function(n,t,r){return n&&n.length?Nt(n,mr(t,r,3),true,true):[]},Nn.dropWhile=function(n,t,r){return n&&n.length?Nt(n,mr(t,r,3),true):[]},Nn.fill=function(n,t,r,e){var u=n?n.length:0;
|
||||
if(!u)return[];for(r&&typeof r!="number"&&Cr(n,t,r)&&(r=0,e=u),u=n.length,r=null==r?0:+r||0,0>r&&(r=-r>u?0:u+r),e=e===m||e>u?u:+e||0,0>e&&(e+=u),u=r>e?0:e>>>0,r>>>=0;r<u;)n[r++]=t;return n},Nn.filter=te,Nn.flatten=function(n,t,r){var e=n?n.length:0;return r&&Cr(n,t,r)&&(t=false),e?ht(n,t):[]},Nn.flattenDeep=function(n){return n&&n.length?ht(n,true):[]},Nn.flow=Ii,Nn.flowRight=Ei,Nn.forEach=si,Nn.forEachRight=pi,Nn.forIn=Mi,Nn.forInRight=Pi,Nn.forOwn=qi,Nn.forOwnRight=Di,Nn.functions=je,Nn.groupBy=hi,Nn.indexBy=_i,
|
||||
Nn.initial=function(n){return qr(n,1)},Nn.intersection=Qu,Nn.invert=function(n,t,r){r&&Cr(n,t,r)&&(t=null),r=-1;for(var e=Ki(n),u=e.length,i={};++r<u;){var o=e[r],f=n[o];t?ru.call(i,f)?i[f].push(o):i[f]=[o]:i[f]=o}return i},Nn.invoke=vi,Nn.keys=Ki,Nn.keysIn=ke,Nn.map=ee,Nn.mapKeys=Vi,Nn.mapValues=Yi,Nn.matches=Ne,Nn.matchesProperty=function(n,t){return At(n,ot(t,true))},Nn.memoize=le,Nn.merge=Zi,Nn.method=uo,Nn.methodOf=io,Nn.mixin=Le,Nn.negate=function(n){if(typeof n!="function")throw new Je(N);return function(){
|
||||
return!n.apply(this,arguments)}},Nn.omit=Gi,Nn.once=function(n){return oe(2,n)},Nn.pairs=Oe,Nn.partial=Ci,Nn.partialRight=Wi,Nn.partition=gi,Nn.pick=Ji,Nn.pluck=function(n,t){return ee(n,Be(t))},Nn.property=Be,Nn.propertyOf=function(n){return function(t){return dt(n,Br(t),t+"")}},Nn.pull=function(){var n=arguments,t=n[0];if(!t||!t.length)return t;for(var r=0,e=br(),u=n.length;++r<u;)for(var i=0,o=n[r];-1<(i=e(t,o,i));)yu.call(t,i,1);return t},Nn.pullAt=ni,Nn.range=function(n,t,r){r&&Cr(n,t,r)&&(t=r=null),
|
||||
n=+n||0,r=null==r?1:+r||0,null==t?(t=n,n=0):t=+t||0;var e=-1;t=ku(au((t-n)/(r||1)),0);for(var u=Me(t);++e<t;)u[e]=n,n+=r;return u},Nn.rearg=Si,Nn.reject=function(n,t,r){var e=Ti(n)?Gn:st;return t=mr(t,r,3),e(n,function(n,r,e){return!t(n,r,e)})},Nn.remove=function(n,t,r){var e=[];if(!n||!n.length)return e;var u=-1,i=[],o=n.length;for(t=mr(t,r,3);++u<o;)r=n[u],t(r,u,n)&&(e.push(r),i.push(u));return Rt(n,i),e},Nn.rest=Yr,Nn.restParam=ae,Nn.set=function(n,t,r){if(null==n)return n;var e=t+"";t=null!=n[e]||Wr(t,n)?[e]:Br(t);
|
||||
for(var e=-1,u=t.length,i=u-1,o=n;null!=o&&++e<u;){var f=t[e];ve(o)&&(e==i?o[f]=r:null==o[f]&&(o[f]=Er(t[e+1])?[]:{})),o=o[f]}return n},Nn.shuffle=function(n){return ue(n,Su)},Nn.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&Cr(n,t,r)&&(t=0,r=e),Ct(n,t,r)):[]},Nn.sortBy=function(n,t,r){if(null==n)return[];r&&Cr(n,t,r)&&(t=null);var e=-1;return t=mr(t,r,3),n=bt(n,function(n,r,u){return{a:t(n,r,u),b:++e,c:n}}),St(n,f)},Nn.sortByAll=mi,Nn.sortByOrder=function(n,t,r,e){return null==n?[]:(e&&Cr(t,r,e)&&(r=null),
|
||||
Ti(t)||(t=null==t?[]:[t]),Ti(r)||(r=null==r?[]:[r]),Tt(n,t,r))},Nn.spread=function(n){if(typeof n!="function")throw new Je(N);return function(t){return n.apply(this,t)}},Nn.take=function(n,t,r){return n&&n.length?((r?Cr(n,t,r):null==t)&&(t=1),Ct(n,0,0>t?0:t)):[]},Nn.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?Cr(n,t,r):null==t)&&(t=1),t=e-(+t||0),Ct(n,0>t?0:t)):[]},Nn.takeRightWhile=function(n,t,r){return n&&n.length?Nt(n,mr(t,r,3),false,true):[]},Nn.takeWhile=function(n,t,r){return n&&n.length?Nt(n,mr(t,r,3)):[];
|
||||
},Nn.tap=function(n,t,r){return t.call(r,n),n},Nn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new Je(N);return false===r?e=false:ve(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),Fn.leading=e,Fn.maxWait=+t,Fn.trailing=u,fe(n,t,Fn)},Nn.thru=Qr,Nn.times=function(n,t,r){if(n=su(n),1>n||!Au(n))return[];var e=-1,u=Me(Ou(n,4294967295));for(t=Mt(t,r,1);++e<n;)4294967295>e?u[e]=t(e):t(e);return u},Nn.toArray=xe,Nn.toPlainObject=Ae,Nn.transform=function(n,t,r,e){var u=Ti(n)||we(n);
|
||||
return t=mr(t,e,4),null==r&&(u||ve(n)?(e=n.constructor,r=u?Ti(n)?new e:[]:Bu($i(e)?e.prototype:null)):r={}),(u?Kn:vt)(n,function(n,e,u){return t(r,n,e,u)}),r},Nn.union=ei,Nn.uniq=Zr,Nn.unzip=Gr,Nn.unzipWith=Jr,Nn.values=Re,Nn.valuesIn=function(n){return Ft(n,ke(n))},Nn.where=function(n,t){return te(n,xt(t))},Nn.without=ui,Nn.wrap=function(n,t){return t=null==t?Fe:t,vr(t,O,null,[n],[])},Nn.xor=function(){for(var n=-1,t=arguments.length;++n<t;){var r=arguments[n];if(Ir(r))var e=e?lt(e,r).concat(lt(r,e)):r;
|
||||
}return e?$t(e):[]},Nn.zip=ii,Nn.zipObject=Xr,Nn.zipWith=oi,Nn.backflow=Ei,Nn.collect=ee,Nn.compose=Ei,Nn.each=si,Nn.eachRight=pi,Nn.extend=Ni,Nn.iteratee=Ue,Nn.methods=je,Nn.object=Xr,Nn.select=te,Nn.tail=Yr,Nn.unique=Zr,Le(Nn,Nn),Nn.add=function(n,t){return(+n||0)+(+t||0)},Nn.attempt=eo,Nn.camelCase=Xi,Nn.capitalize=function(n){return(n=u(n))&&n.charAt(0).toUpperCase()+n.slice(1)},Nn.clone=function(n,t,r,e){return t&&typeof t!="boolean"&&Cr(n,t,r)?t=false:typeof t=="function"&&(e=r,r=t,t=false),typeof r=="function"?ot(n,t,Mt(r,e,1)):ot(n,t);
|
||||
},Nn.cloneDeep=function(n,t,r){return typeof t=="function"?ot(n,true,Mt(t,r,1)):ot(n,true)},Nn.deburr=Ie,Nn.endsWith=function(n,t,r){n=u(n),t+="";var e=n.length;return r=r===m?e:Ou(0>r?0:+r||0,e),r-=t.length,0<=r&&n.indexOf(t,r)==r},Nn.escape=function(n){return(n=u(n))&&pn.test(n)?n.replace(cn,a):n},Nn.escapeRegExp=Ee,Nn.every=ne,Nn.find=ai,Nn.findIndex=Xu,Nn.findKey=zi,Nn.findLast=ci,Nn.findLastIndex=Hu,Nn.findLastKey=Bi,Nn.findWhere=function(n,t){return ai(n,xt(t))},Nn.first=Dr,Nn.get=function(n,t,r){
|
||||
return n=null==n?m:dt(n,Br(t),t+""),n===m?r:n},Nn.gt=ce,Nn.gte=function(n,t){return n>=t},Nn.has=function(n,t){if(null==n)return false;var r=ru.call(n,t);if(!r&&!Wr(t)){if(t=Br(t),n=1==t.length?n:dt(n,Ct(t,0,-1)),null==n)return false;t=Vr(t),r=ru.call(n,t)}return r||Tr(n.length)&&Er(t,n.length)&&(Ti(n)||se(n))},Nn.identity=Fe,Nn.includes=re,Nn.indexOf=Kr,Nn.inRange=function(n,t,r){return t=+t||0,"undefined"===typeof r?(r=t,t=0):r=+r||0,n>=Ou(t,r)&&n<ku(t,r)},Nn.isArguments=se,Nn.isArray=Ti,Nn.isBoolean=function(n){
|
||||
return true===n||false===n||p(n)&&uu.call(n)==M},Nn.isDate=function(n){return p(n)&&uu.call(n)==P},Nn.isElement=pe,Nn.isEmpty=function(n){return null==n?true:Ir(n)&&(Ti(n)||me(n)||se(n)||p(n)&&$i(n.splice))?!n.length:!Ki(n).length},Nn.isEqual=he,Nn.isError=_e,Nn.isFinite=Ui,Nn.isFunction=$i,Nn.isMatch=function(n,t,r,e){return r=typeof r=="function"?Mt(r,e,3):m,wt(n,xr(t),r)},Nn.isNaN=function(n){return ye(n)&&n!=+n},Nn.isNative=ge,Nn.isNull=function(n){return null===n},Nn.isNumber=ye,Nn.isObject=ve,Nn.isPlainObject=Fi,
|
||||
Nn.isRegExp=de,Nn.isString=me,Nn.isTypedArray=we,Nn.isUndefined=function(n){return n===m},Nn.kebabCase=Hi,Nn.last=Vr,Nn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?ku(e+r,0):Ou(r||0,e-1))+1;else if(r)return u=zt(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1;if(t!==t)return s(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Nn.lt=be,Nn.lte=function(n,t){return n<=t},Nn.max=oo,Nn.min=fo,Nn.noConflict=function(){return h._=iu,this},Nn.noop=ze,Nn.now=wi,
|
||||
Nn.pad=function(n,t,r){n=u(n),t=+t;var e=n.length;return e<t&&Au(t)?(e=(t-e)/2,t=su(e),e=au(e),r=pr("",e,r),r.slice(0,t)+n+r):n},Nn.padLeft=Qi,Nn.padRight=no,Nn.parseInt=Ce,Nn.random=function(n,t,r){r&&Cr(n,t,r)&&(t=r=null);var e=null==n,u=null==t;return null==r&&(u&&typeof n=="boolean"?(r=n,n=1):typeof t=="boolean"&&(r=t,u=true)),e&&u&&(t=1,u=false),n=+n||0,u?(t=n,n=0):t=+t||0,r||n%1||t%1?(r=Cu(),Ou(n+r*(t-n+hu("1e-"+((r+"").length-1))),t)):It(n,t)},Nn.reduce=yi,Nn.reduceRight=di,Nn.repeat=We,Nn.result=function(n,t,r){
|
||||
var e=null==n?m:n[t];return e===m&&(null==n||Wr(t,n)||(t=Br(t),n=1==t.length?n:dt(n,Ct(t,0,-1)),e=null==n?m:n[Vr(t)]),e=e===m?r:e),$i(e)?e.call(n):e},Nn.runInContext=d,Nn.size=function(n){var t=n?Zu(n):0;return Tr(t)?t:Ki(n).length},Nn.snakeCase=to,Nn.some=ie,Nn.sortedIndex=ti,Nn.sortedLastIndex=ri,Nn.startCase=ro,Nn.startsWith=function(n,t,r){return n=u(n),r=null==r?0:Ou(0>r?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Nn.sum=function(n,t,r){r&&Cr(n,t,r)&&(t=null);var e=mr(),u=null==t;if(u&&e===it||(u=false,
|
||||
t=e(t,r,3)),u){for(n=Ti(n)?n:Lr(n),t=n.length,r=0;t--;)r+=+n[t]||0;n=r}else n=Ut(n,t);return n},Nn.template=function(n,t,r){var e=Nn.templateSettings;r&&Cr(n,t,r)&&(t=r=null),n=u(n),t=tt(rt({},r||t),e,nt),r=tt(rt({},t.imports),e.imports,nt);var i,o,f=Ki(r),l=Ft(r,f),a=0;r=t.interpolate||En;var s="__p+='";r=Ze((t.escape||En).source+"|"+r.source+"|"+(r===vn?An:En).source+"|"+(t.evaluate||En).source+"|$","g");var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,f,l){
|
||||
return e||(e=u),s+=n.slice(a,l).replace(Cn,c),r&&(i=true,s+="'+__e("+r+")+'"),f&&(o=true,s+="';"+f+";\n__p+='"),e&&(s+="'+((__t=("+e+"))==null?'':__t)+'"),a=l+t.length,t}),s+="';",(t=t.variable)||(s="with(obj){"+s+"}"),s=(o?s.replace(on,""):s).replace(fn,"$1").replace(ln,"$1;"),s="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(i?",__e=_.escape":"")+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+s+"return __p}",t=eo(function(){return De(f,p+"return "+s).apply(m,l);
|
||||
}),t.source=s,_e(t))throw t;return t},Nn.trim=Se,Nn.trimLeft=function(n,t,r){var e=n;return(n=u(n))?n.slice((r?Cr(e,t,r):null==t)?v(n):i(n,t+"")):n},Nn.trimRight=function(n,t,r){var e=n;return(n=u(n))?(r?Cr(e,t,r):null==t)?n.slice(0,g(n)+1):n.slice(0,o(n,t+"")+1):n},Nn.trunc=function(n,t,r){r&&Cr(n,t,r)&&(t=null);var e=C;if(r=W,null!=t)if(ve(t)){var i="separator"in t?t.separator:i,e="length"in t?+t.length||0:e;r="omission"in t?u(t.omission):r}else e=+t||0;if(n=u(n),e>=n.length)return n;if(e-=r.length,
|
||||
1>e)return r;if(t=n.slice(0,e),null==i)return t+r;if(de(i)){if(n.slice(e).search(i)){var o,f=n.slice(0,e);for(i.global||(i=Ze(i.source,(jn.exec(i)||"")+"g")),i.lastIndex=0;n=i.exec(f);)o=n.index;t=t.slice(0,null==o?e:o)}}else n.indexOf(i,e)!=e&&(i=t.lastIndexOf(i),-1<i&&(t=t.slice(0,i)));return t+r},Nn.unescape=function(n){return(n=u(n))&&sn.test(n)?n.replace(an,y):n},Nn.uniqueId=function(n){var t=++eu;return u(n)+t},Nn.words=Te,Nn.all=ne,Nn.any=ie,Nn.contains=re,Nn.eq=he,Nn.detect=ai,Nn.foldl=yi,
|
||||
Nn.foldr=di,Nn.head=Dr,Nn.include=re,Nn.inject=yi,Le(Nn,function(){var n={};return vt(Nn,function(t,r){Nn.prototype[r]||(n[r]=t)}),n}(),false),Nn.sample=ue,Nn.prototype.sample=function(n){return this.__chain__||null!=n?this.thru(function(t){return ue(t,n)}):ue(this.value())},Nn.VERSION=w,Kn("bind bindKey curry curryRight partial partialRight".split(" "),function(n){Nn[n].placeholder=Nn}),Kn(["dropWhile","filter","map","takeWhile"],function(n,t){var r=t!=F,e=t==U;Bn.prototype[n]=function(n,u){var i=this.__filtered__,o=i&&e?new Bn(this):this.clone();
|
||||
return(o.__iteratees__||(o.__iteratees__=[])).push({done:false,count:0,index:0,iteratee:mr(n,u,1),limit:-1,type:t}),o.__filtered__=i||r,o}}),Kn(["drop","take"],function(n,t){var r=n+"While";Bn.prototype[n]=function(r){var e=this.__filtered__,u=e&&!t?this.dropWhile():this.clone();return r=null==r?1:ku(su(r)||0,0),e?t?u.__takeCount__=Ou(u.__takeCount__,r):Vr(u.__iteratees__).limit=r:(u.__views__||(u.__views__=[])).push({size:r,type:n+(0>u.__dir__?"Right":"")}),u},Bn.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse();
|
||||
},Bn.prototype[n+"RightWhile"]=function(n,t){return this.reverse()[r](n,t).reverse()}}),Kn(["first","last"],function(n,t){var r="take"+(t?"Right":"");Bn.prototype[n]=function(){return this[r](1).value()[0]}}),Kn(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");Bn.prototype[n]=function(){return this[r](1)}}),Kn(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?xt:Be;Bn.prototype[n]=function(n){return this[r](e(n))}}),Bn.prototype.compact=function(){return this.filter(Fe)},Bn.prototype.reject=function(n,t){
|
||||
return n=mr(n,t,1),this.filter(function(t){return!n(t)})},Bn.prototype.slice=function(n,t){n=null==n?0:+n||0;var r=this;return 0>n?r=this.takeRight(-n):n&&(r=this.drop(n)),t!==m&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r},Bn.prototype.toArray=function(){return this.drop(0)},vt(Bn.prototype,function(n,t){var r=Nn[t];if(r){var e=/^(?:filter|map|reject)|While$/.test(t),u=/^(?:first|last)$/.test(t);Nn.prototype[t]=function(){function t(n){return n=[n],_u.apply(n,i),r.apply(Nn,n)}var i=arguments,o=this.__chain__,f=this.__wrapped__,l=!!this.__actions__.length,a=f instanceof Bn,c=i[0],s=a||Ti(f);
|
||||
return s&&e&&typeof c=="function"&&1!=c.length&&(a=s=false),a=a&&!l,u&&!o?a?n.call(f):r.call(Nn,this.value()):s?(f=n.apply(a?f:new Bn(this),i),u||!l&&!f.__actions__||(f.__actions__||(f.__actions__=[])).push({func:Qr,args:[t],thisArg:Nn}),new zn(f,o)):this.thru(t)}}}),Kn("concat join pop push replace shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?Qe:Xe)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|replace|shift)$/.test(n);Nn.prototype[n]=function(){
|
||||
var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),vt(Bn.prototype,function(n,t){var r=Nn[t];if(r){var e=r.name;(Lu[e]||(Lu[e]=[])).push({name:t,func:r})}}),Lu[sr(null,x).name]=[{name:"wrapper",func:null}],Bn.prototype.clone=function(){var n=this.__actions__,t=this.__iteratees__,r=this.__views__,e=new Bn(this.__wrapped__);return e.__actions__=n?Dn(n):null,e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=t?Dn(t):null,
|
||||
e.__takeCount__=this.__takeCount__,e.__views__=r?Dn(r):null,e},Bn.prototype.reverse=function(){if(this.__filtered__){var n=new Bn(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Bn.prototype.value=function(){var n=this.__wrapped__.value();if(!Ti(n))return Lt(n,this.__actions__);var t,r=this.__dir__,e=0>r;t=n.length;for(var u=this.__views__,i=0,o=-1,f=u?u.length:0;++o<f;){var l=u[o],a=l.size;switch(l.type){case"drop":i+=a;break;case"dropRight":t-=a;break;case"take":
|
||||
t=Ou(t,i+a);break;case"takeRight":i=ku(i,t-a)}}t={start:i,end:t},u=t.start,i=t.end,t=i-u,u=e?i:u-1,i=Ou(t,this.__takeCount__),f=(o=this.__iteratees__)?o.length:0,l=0,a=[];n:for(;t--&&l<i;){for(var u=u+r,c=-1,s=n[u];++c<f;){var p=o[c],h=p.iteratee,_=p.type;if(_==U){if(p.done&&(e?u>p.index:u<p.index)&&(p.count=0,p.done=false),p.index=u,!(p.done||(_=p.limit,p.done=-1<_?p.count++>=_:!h(s))))continue n}else if(p=h(s),_==F)s=p;else if(!p){if(_==$)continue n;break n}}a[l++]=s}return a},Nn.prototype.chain=function(){
|
||||
return Hr(this)},Nn.prototype.commit=function(){return new zn(this.value(),this.__chain__)},Nn.prototype.plant=function(n){for(var t,r=this;r instanceof Ln;){var e=Mr(r);t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},Nn.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Bn?(this.__actions__.length&&(n=new Bn(this)),new zn(n.reverse(),this.__chain__)):this.thru(function(n){return n.reverse()})},Nn.prototype.toString=function(){return this.value()+""},Nn.prototype.run=Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){
|
||||
return Lt(this.__wrapped__,this.__actions__)},Nn.prototype.collect=Nn.prototype.map,Nn.prototype.head=Nn.prototype.first,Nn.prototype.select=Nn.prototype.filter,Nn.prototype.tail=Nn.prototype.rest,Nn}var m,w="3.9.3",b=1,x=2,A=4,j=8,k=16,O=32,R=64,I=128,E=256,C=30,W="...",S=150,T=16,U=0,$=1,F=2,N="Expected a function",L="__lodash_placeholder__",z="[object Arguments]",B="[object Array]",M="[object Boolean]",P="[object Date]",q="[object Error]",D="[object Function]",K="[object Number]",V="[object Object]",Y="[object RegExp]",Z="[object String]",G="[object ArrayBuffer]",J="[object Float32Array]",X="[object Float64Array]",H="[object Int8Array]",Q="[object Int16Array]",nn="[object Int32Array]",tn="[object Uint8Array]",rn="[object Uint8ClampedArray]",en="[object Uint16Array]",un="[object Uint32Array]",on=/\b__p\+='';/g,fn=/\b(__p\+=)''\+/g,ln=/(__e\(.*?\)|\b__t\))\+'';/g,an=/&(?:amp|lt|gt|quot|#39|#96);/g,cn=/[&<>"'`]/g,sn=RegExp(an.source),pn=RegExp(cn.source),hn=/<%-([\s\S]+?)%>/g,_n=/<%([\s\S]+?)%>/g,vn=/<%=([\s\S]+?)%>/g,gn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,yn=/^\w*$/,dn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,mn=/[.*+?^${}()|[\]\/\\]/g,wn=RegExp(mn.source),bn=/[\u0300-\u036f\ufe20-\ufe23]/g,xn=/\\(\\)?/g,An=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,jn=/\w*$/,kn=/^0[xX]/,On=/^\[object .+?Constructor\]$/,Rn=/^\d+$/,In=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,En=/($^)/,Cn=/['\n\r\u2028\u2029\\]/g,Wn=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Sn=" \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",Tn="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout document isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap window".split(" "),Un={};
|
||||
Un[J]=Un[X]=Un[H]=Un[Q]=Un[nn]=Un[tn]=Un[rn]=Un[en]=Un[un]=true,Un[z]=Un[B]=Un[G]=Un[M]=Un[P]=Un[q]=Un[D]=Un["[object Map]"]=Un[K]=Un[V]=Un[Y]=Un["[object Set]"]=Un[Z]=Un["[object WeakMap]"]=false;var $n={};$n[z]=$n[B]=$n[G]=$n[M]=$n[P]=$n[J]=$n[X]=$n[H]=$n[Q]=$n[nn]=$n[K]=$n[V]=$n[Y]=$n[Z]=$n[tn]=$n[rn]=$n[en]=$n[un]=true,$n[q]=$n[D]=$n["[object Map]"]=$n["[object Set]"]=$n["[object WeakMap]"]=false;var Fn={leading:false,maxWait:0,trailing:false},Nn={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A",
|
||||
"\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u",
|
||||
"\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Ln={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},zn={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},Bn={"function":true,object:true},Mn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Pn=Bn[typeof exports]&&exports&&!exports.nodeType&&exports,qn=Bn[typeof module]&&module&&!module.nodeType&&module,Dn=Bn[typeof self]&&self&&self.Object&&self,Kn=Bn[typeof window]&&window&&window.Object&&window,Vn=qn&&qn.exports===Pn&&Pn,Yn=Pn&&qn&&typeof global=="object"&&global&&global.Object&&global||Kn!==(this&&this.window)&&Kn||Dn||this,Zn=d();
|
||||
typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Yn._=Zn, define(function(){return Zn})):Pn&&qn?Vn?(qn.exports=Zn)._=Zn:Pn._=Zn:Yn._=Zn}).call(this);
|
1
public/vendor/visibility-1.2.1.min.js
vendored
Normal file
1
public/vendor/visibility-1.2.1.min.js
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
!function(e){"use strict";var i=-1,t={onVisible:function(e){var i=t.isSupported();if(!i||!t.hidden())return e(),i;var n=t.change(function(){t.hidden()||(t.unbind(n),e())});return n},change:function(e){if(!t.isSupported())return!1;i+=1;var n=i;return t._callbacks[n]=e,t._listen(),n},unbind:function(e){delete t._callbacks[e]},afterPrerendering:function(e){var i=t.isSupported(),n="prerender";if(!i||n!=t.state())return e(),i;var r=t.change(function(i,d){n!=d&&(t.unbind(r),e())});return r},hidden:function(){return!(!t._doc.hidden&&!t._doc.webkitHidden)},state:function(){return t._doc.visibilityState||t._doc.webkitVisibilityState||"visible"},isSupported:function(){return!(!t._doc.visibilityState&&!t._doc.webkitVisibilityState)},_doc:document||{},_callbacks:{},_change:function(e){var i=t.state();for(var n in t._callbacks)t._callbacks[n].call(t._doc,e,i)},_listen:function(){if(!t._init){var e="visibilitychange";t._doc.webkitVisibilityState&&(e="webkit"+e);var i=function(){t._change.apply(t,arguments)};t._doc.addEventListener?t._doc.addEventListener(e,i):t._doc.attachEvent(e,i),t._init=!0}}};"undefined"!=typeof module&&module.exports?module.exports=t:e.Visibility=t}(this),function(e){"use strict";var i=-1,t=function(t){return t.every=function(e,n,r){t._time(),r||(r=n,n=null),i+=1;var d=i;return t._timers[d]={visible:e,hidden:n,callback:r},t._run(d,!1),t.isSupported()&&t._listen(),d},t.stop=function(e){return t._timers[e]?(t._stop(e),delete t._timers[e],!0):!1},t._timers={},t._time=function(){t._timed||(t._timed=!0,t._wasHidden=t.hidden(),t.change(function(){t._stopRun(),t._wasHidden=t.hidden()}))},t._run=function(i,n){var r,d=t._timers[i];if(t.hidden()){if(null===d.hidden)return;r=d.hidden}else r=d.visible;var a=function(){d.last=new Date,d.callback.call(e)};if(n){var o=new Date,u=o-d.last;r>u?d.delay=setTimeout(function(){a(),d.id=setInterval(a,r)},r-u):(a(),d.id=setInterval(a,r))}else d.id=setInterval(a,r)},t._stop=function(e){var i=t._timers[e];clearInterval(i.id),clearTimeout(i.delay),delete i.id,delete i.delay},t._stopRun=function(){var e=t.hidden(),i=t._wasHidden;if(e&&!i||!e&&i)for(var n in t._timers)t._stop(n),t._run(n,!e)},t};"undefined"!=typeof module&&module.exports?module.exports=t(require("./visibility.core")):t(e.Visibility)}(window);
|
|
@ -1,6 +1,8 @@
|
|||
<script src="/vendor/spin.min.js" defer></script>
|
||||
<script src="/vendor/jquery-1.11.2.min.js" defer></script>
|
||||
<script src="/vendor/bootstrap/js/bootstrap.min.js" defer></script>
|
||||
<script src="/vendor/greensock-js/TweenMax.min.js" defer></script>
|
||||
<script src="/vendor/greensock-js/jquery.gsap.min.js" defer></script>
|
||||
<!--codemirror-->
|
||||
<script src="/vendor/codemirror/codemirror.min.js" defer></script>
|
||||
<script src="/vendor/inlineAttachment/inline-attachment.js" defer></script>
|
||||
|
@ -17,12 +19,16 @@
|
|||
<script src="/vendor/emojify/js/emojify.js" defer></script>
|
||||
<script src="/vendor/to-markdown.js" defer></script>
|
||||
<script src="/vendor/raphael-min.js" defer></script>
|
||||
<script src="/vendor/underscore-min.js" defer></script>
|
||||
<script src="/vendor/lodash.min.js" defer></script>
|
||||
<script src="/vendor/sequence-diagrams/sequence-diagram-min.js" defer></script>
|
||||
<script src="/vendor/flowchart/flowchart-1.4.0.min.js" defer></script>
|
||||
<script src="/vendor/FileSaver.min.js" defer></script>
|
||||
<script src="/vendor/store.min.js" defer></script>
|
||||
<script src="/vendor/url.min.js" defer></script>
|
||||
<script src="/vendor/jquery-textcomplete/jquery.textcomplete.js" defer></script>
|
||||
<script src="/vendor/idle.js" defer></script>
|
||||
<script src="/vendor/visibility-1.2.1.min.js" defer></script>
|
||||
<script src="/vendor/list.min.js" defer></script>
|
||||
<script type="text/javascript" src="https://www.dropbox.com/static/api/2/dropins.js" id="dropboxjs" data-app-key="rdoizrlnkuha23r" async defer></script>
|
||||
<script type="text/x-mathjax-config">
|
||||
MathJax.Hub.Config({ messageStyle: "none", skipStartupTypeset: true ,tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']], processEscapes: true }});
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<link rel="stylesheet" href="/css/github-extract.css">
|
||||
<link rel="stylesheet" href="/css/gist.css">
|
||||
<link rel="stylesheet" href="/vendor/highlight-js/github.min.css">
|
||||
<link rel="stylesheet" href="/vendor/emojify/css/emojify.min.css" />
|
||||
<link rel="stylesheet" href="/vendor/emojify/css/emojify.min.css">
|
||||
<link rel="stylesheet" href="/css/markdown.css">
|
||||
<link rel="stylesheet" href="/css/index.css">
|
||||
<link rel="stylesheet" href="/css/extra.css">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<nav class="hidden-print navbar navbar-default navbar-fixed-top">
|
||||
<nav class="hidden-print navbar navbar-default navbar-fixed-top unselectable">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<h4 class="pull-right" style="margin-top: 17px; color: #777;">
|
||||
|
@ -7,9 +7,11 @@
|
|||
<div class="visible-md"> </div>
|
||||
<div class="visible-lg"> </div>
|
||||
</h4>
|
||||
<div class="nav-mobile nav-status visible-xs">
|
||||
<div class="ui-short-status"><span class="label label-danger"><i class="fa fa-plug"></i></span>
|
||||
</div>
|
||||
<div class="nav-mobile nav-status visible-xs" id="short-online-user-list">
|
||||
<a class="ui-short-status" data-target="#" data-toggle="dropdown"><span class="label label-danger"><i class="fa fa-plug"></i> </span>
|
||||
</a>
|
||||
<ul class="dropdown-menu list" role="menu" aria-labelledby="menu">
|
||||
</ul>
|
||||
</div>
|
||||
<a class="navbar-brand" href="./"><i class="fa fa-file-text"></i> HackMD</a>
|
||||
<div class="nav-mobile pull-right visible-xs">
|
||||
|
@ -62,44 +64,44 @@
|
|||
</a>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a>
|
||||
<div class="ui-status">
|
||||
<li id="online-user-list">
|
||||
<a class="ui-status" data-target="#" data-toggle="dropdown">
|
||||
<span class="label label-danger"><i class="fa fa-plug"></i> OFFLINE</span>
|
||||
</div>
|
||||
</a>
|
||||
<ul class="dropdown-menu list" role="menu" aria-labelledby="menu" style="right: 15px;width: 200px;">
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="navbar-form navbar-right" style="padding:0;">
|
||||
<a href="./new" target="_blank" class="btn btn-link ui-new">
|
||||
<ul class="nav navbar-nav navbar-right" style="padding:0;">
|
||||
<li>
|
||||
<a href="./new" target="_blank" class="ui-new">
|
||||
<i class="fa fa-plus"></i> New
|
||||
</a>
|
||||
<a href="#" target="_blank" class="btn btn-link ui-pretty">
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" target="_blank" class="ui-pretty">
|
||||
<i class="fa fa-share-alt"></i> Share
|
||||
</a>
|
||||
<span>
|
||||
<a class="btn btn-link" data-target="#" data-toggle="dropdown">
|
||||
Save <i class="fa fa-caret-down"></i>
|
||||
</li>
|
||||
<li>
|
||||
<a data-target="#" data-toggle="dropdown">
|
||||
Menu <i class="fa fa-caret-down"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="menu" style="right: 230px;">
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="menu">
|
||||
<li class="dropdown-header">Save</li>
|
||||
<li role="presentation"><a role="menuitem" class="ui-save-dropbox" tabindex="-1" href="#" target="_self"><i class="fa fa-dropbox fa-fw"></i> Dropbox</a>
|
||||
</li>
|
||||
<li role="presentation"><a role="menuitem" class="ui-download-markdown" tabindex="-1" href="#" target="_self"><i class="fa fa-file-text fa-fw"></i> Markdown</a>
|
||||
</li>
|
||||
</ul>
|
||||
</span>
|
||||
<span>
|
||||
<a class="btn btn-link" data-target="#" data-toggle="dropdown">
|
||||
Import <i class="fa fa-caret-down"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="menu" style="right: 150px;">
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header">Import</li>
|
||||
<li role="presentation"><a role="menuitem" class="ui-import-dropbox" tabindex="-1" href="#" target="_self"><i class="fa fa-dropbox fa-fw"></i> Dropbox</a>
|
||||
</li>
|
||||
<li role="presentation"><a role="menuitem" class="ui-import-clipboard" href="#" data-toggle="modal" data-target="#clipboardModal"><i class="fa fa-clipboard fa-fw"></i> Clipboard</a>
|
||||
</li>
|
||||
</ul>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="ui-spinner"></div>
|
|
@ -38,7 +38,7 @@
|
|||
<script src="<%- url %>/vendor/highlight-js/highlight.min.js" defer></script>
|
||||
<script src="<%- url %>/vendor/emojify/js/emojify.min.js" defer></script>
|
||||
<script src="<%- url %>/vendor/raphael-min.js" defer></script>
|
||||
<script src="<%- url %>/vendor/underscore-min.js" defer></script>
|
||||
<script src="<%- url %>/vendor/lodash.min.js" defer></script>
|
||||
<script src="<%- url %>/vendor/sequence-diagrams/sequence-diagram-min.js" defer></script>
|
||||
<script src="<%- url %>/vendor/flowchart/flowchart-1.4.0.min.js" defer></script>
|
||||
<script type="text/x-mathjax-config">
|
||||
|
|
1
run.sh
1
run.sh
|
@ -1,3 +1,4 @@
|
|||
#!/bin/bash
|
||||
forever stop hackmd
|
||||
DATABASE_URL='change this' \
|
||||
MONGOLAB_URI='change this' \
|
||||
|
|
Loading…
Reference in a new issue