├── public
├── favicon.ico
├── caches
│ ├── .gitkeep
│ └── .gitignore
├── .gitignore
└── static
│ ├── images
│ ├── todo
│ │ ├── done.png
│ │ ├── todo.png
│ │ ├── done-2x.png
│ │ ├── search.png
│ │ ├── todo-2x.png
│ │ └── search-2x.png
│ ├── demo
│ │ ├── browser.png
│ │ ├── video.jpg
│ │ ├── html-icon.png
│ │ ├── logo-mask.png
│ │ ├── browser-2x.png
│ │ ├── logo-mask-2x.png
│ │ ├── browser-author.jpg
│ │ ├── browser-pic-1.jpg
│ │ ├── browser-pic-2.jpg
│ │ ├── browser-pic-3.jpg
│ │ ├── browser-pic-4.jpg
│ │ ├── browser-pic-5.jpg
│ │ └── browser-pic-6.jpg
│ ├── footer
│ │ └── logo.png
│ ├── login
│ │ ├── icon.png
│ │ ├── imac.png
│ │ └── imac-2x.png
│ ├── switch
│ │ ├── mask.png
│ │ └── mask-square.png
│ ├── tile
│ │ ├── ribbon.png
│ │ └── ribbon-2x.png
│ ├── video
│ │ ├── pause.png
│ │ ├── play.png
│ │ ├── poster.jpg
│ │ ├── pause-2x.png
│ │ ├── play-2x.png
│ │ ├── fullscreen.png
│ │ ├── volume-full.png
│ │ ├── volume-off.png
│ │ ├── fullscreen-2x.png
│ │ ├── volume-off-2x.png
│ │ └── volume-full-2x.png
│ └── icons
│ │ ├── png
│ │ ├── Book.png
│ │ ├── Chat.png
│ │ ├── Mail.png
│ │ ├── Map.png
│ │ ├── Compas.png
│ │ ├── Pensils.png
│ │ ├── Pocket.png
│ │ ├── Watches.png
│ │ ├── Calendar.png
│ │ ├── Clipboard.png
│ │ ├── Gift-Box.png
│ │ ├── Retina-Ready.png
│ │ ├── Toilet-Paper.png
│ │ └── Infinity-Loop.png
│ │ └── svg
│ │ ├── loop.svg
│ │ ├── paper-bag.svg
│ │ ├── clocks.svg
│ │ ├── mail.svg
│ │ ├── chat.svg
│ │ ├── toilet-paper.svg
│ │ ├── book.svg
│ │ ├── map.svg
│ │ ├── retina.svg
│ │ ├── clipboard.svg
│ │ ├── pencils.svg
│ │ ├── compas.svg
│ │ ├── calendar.svg
│ │ └── gift-box.svg
│ └── fonts
│ ├── Flat-UI-Icons.eot
│ ├── Flat-UI-Icons.ttf
│ ├── Flat-UI-Icons.woff
│ ├── lato
│ ├── lato-black-webfont.eot
│ ├── lato-black-webfont.ttf
│ ├── lato-bold-webfont.eot
│ ├── lato-bold-webfont.ttf
│ ├── lato-bold-webfont.woff
│ ├── lato-light-webfont.eot
│ ├── lato-light-webfont.ttf
│ ├── lato-black-webfont.woff
│ ├── lato-italic-webfont.eot
│ ├── lato-italic-webfont.ttf
│ ├── lato-italic-webfont.woff
│ ├── lato-light-webfont.woff
│ ├── lato-regular-webfont.eot
│ ├── lato-regular-webfont.ttf
│ ├── lato-bolditalic-webfont.eot
│ ├── lato-bolditalic-webfont.ttf
│ ├── lato-regular-webfont.woff
│ └── lato-bolditalic-webfont.woff
│ ├── glyphicons-halflings-regular.eot
│ ├── glyphicons-halflings-regular.ttf
│ ├── glyphicons-halflings-regular.woff
│ ├── Flat-UI-Icons.svg
│ └── Flat-UI-Icons.dev.svg
├── server.js
├── .nodemonignore
├── .gitignore
├── app
├── assets
│ ├── css
│ │ ├── general.styl
│ │ ├── index.styl
│ │ ├── schedule.styl
│ │ └── availables.styl
│ └── js
│ │ └── index.js
├── index.js
├── resources.js
└── passport.js
├── models
├── user.js
├── calendar_item.js
└── index.js
├── routes
├── api
│ ├── confirmed.js
│ └── calendar.js
└── index.js
├── lib
└── sise
│ ├── parsers
│ ├── profile.js
│ ├── login.js
│ ├── schedule.js
│ └── courses.js
│ └── index.js
├── README.md
├── Makefile
├── package.json
├── views
├── index.jade
└── signin.jade
└── LICENSE
/public/favicon.ico:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/caches/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/.gitignore:
--------------------------------------------------------------------------------
1 | assets
2 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | require('./app')
2 |
--------------------------------------------------------------------------------
/public/caches/.gitignore:
--------------------------------------------------------------------------------
1 | *.json
2 |
--------------------------------------------------------------------------------
/.nodemonignore:
--------------------------------------------------------------------------------
1 | /public/*
2 | /app/assets/*
3 | /views/*
4 |
--------------------------------------------------------------------------------
/public/static/images/todo/done.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/todo/done.png
--------------------------------------------------------------------------------
/public/static/images/todo/todo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/todo/todo.png
--------------------------------------------------------------------------------
/public/static/fonts/Flat-UI-Icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/Flat-UI-Icons.eot
--------------------------------------------------------------------------------
/public/static/fonts/Flat-UI-Icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/Flat-UI-Icons.ttf
--------------------------------------------------------------------------------
/public/static/images/demo/browser.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser.png
--------------------------------------------------------------------------------
/public/static/images/demo/video.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/video.jpg
--------------------------------------------------------------------------------
/public/static/images/footer/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/footer/logo.png
--------------------------------------------------------------------------------
/public/static/images/login/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/login/icon.png
--------------------------------------------------------------------------------
/public/static/images/login/imac.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/login/imac.png
--------------------------------------------------------------------------------
/public/static/images/switch/mask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/switch/mask.png
--------------------------------------------------------------------------------
/public/static/images/tile/ribbon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/tile/ribbon.png
--------------------------------------------------------------------------------
/public/static/images/todo/done-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/todo/done-2x.png
--------------------------------------------------------------------------------
/public/static/images/todo/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/todo/search.png
--------------------------------------------------------------------------------
/public/static/images/todo/todo-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/todo/todo-2x.png
--------------------------------------------------------------------------------
/public/static/images/video/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/pause.png
--------------------------------------------------------------------------------
/public/static/images/video/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/play.png
--------------------------------------------------------------------------------
/public/static/images/video/poster.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/poster.jpg
--------------------------------------------------------------------------------
/public/static/fonts/Flat-UI-Icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/Flat-UI-Icons.woff
--------------------------------------------------------------------------------
/public/static/images/demo/html-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/html-icon.png
--------------------------------------------------------------------------------
/public/static/images/demo/logo-mask.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/logo-mask.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Book.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Chat.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Mail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Mail.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Map.png
--------------------------------------------------------------------------------
/public/static/images/login/imac-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/login/imac-2x.png
--------------------------------------------------------------------------------
/public/static/images/tile/ribbon-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/tile/ribbon-2x.png
--------------------------------------------------------------------------------
/public/static/images/todo/search-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/todo/search-2x.png
--------------------------------------------------------------------------------
/public/static/images/video/pause-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/pause-2x.png
--------------------------------------------------------------------------------
/public/static/images/video/play-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/play-2x.png
--------------------------------------------------------------------------------
/public/static/images/demo/browser-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser-2x.png
--------------------------------------------------------------------------------
/public/static/images/demo/logo-mask-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/logo-mask-2x.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Compas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Compas.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Pensils.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Pensils.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Pocket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Pocket.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Watches.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Watches.png
--------------------------------------------------------------------------------
/public/static/images/video/fullscreen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/fullscreen.png
--------------------------------------------------------------------------------
/public/static/images/video/volume-full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/volume-full.png
--------------------------------------------------------------------------------
/public/static/images/video/volume-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/volume-off.png
--------------------------------------------------------------------------------
/public/static/images/demo/browser-author.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser-author.jpg
--------------------------------------------------------------------------------
/public/static/images/demo/browser-pic-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser-pic-1.jpg
--------------------------------------------------------------------------------
/public/static/images/demo/browser-pic-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser-pic-2.jpg
--------------------------------------------------------------------------------
/public/static/images/demo/browser-pic-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser-pic-3.jpg
--------------------------------------------------------------------------------
/public/static/images/demo/browser-pic-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser-pic-4.jpg
--------------------------------------------------------------------------------
/public/static/images/demo/browser-pic-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser-pic-5.jpg
--------------------------------------------------------------------------------
/public/static/images/demo/browser-pic-6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/demo/browser-pic-6.jpg
--------------------------------------------------------------------------------
/public/static/images/icons/png/Calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Calendar.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Clipboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Clipboard.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Gift-Box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Gift-Box.png
--------------------------------------------------------------------------------
/public/static/images/switch/mask-square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/switch/mask-square.png
--------------------------------------------------------------------------------
/public/static/images/video/fullscreen-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/fullscreen-2x.png
--------------------------------------------------------------------------------
/public/static/images/video/volume-off-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/volume-off-2x.png
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-black-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-black-webfont.eot
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-black-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-black-webfont.ttf
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-bold-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-bold-webfont.eot
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-bold-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-bold-webfont.ttf
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-bold-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-bold-webfont.woff
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-light-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-light-webfont.eot
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-light-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-light-webfont.ttf
--------------------------------------------------------------------------------
/public/static/images/icons/png/Retina-Ready.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Retina-Ready.png
--------------------------------------------------------------------------------
/public/static/images/icons/png/Toilet-Paper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Toilet-Paper.png
--------------------------------------------------------------------------------
/public/static/images/video/volume-full-2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/video/volume-full-2x.png
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-black-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-black-webfont.woff
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-italic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-italic-webfont.eot
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-italic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-italic-webfont.ttf
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-italic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-italic-webfont.woff
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-light-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-light-webfont.woff
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-regular-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-regular-webfont.eot
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-regular-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-regular-webfont.ttf
--------------------------------------------------------------------------------
/public/static/images/icons/png/Infinity-Loop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/images/icons/png/Infinity-Loop.png
--------------------------------------------------------------------------------
/public/static/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/public/static/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-bolditalic-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-bolditalic-webfont.eot
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-bolditalic-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-bolditalic-webfont.ttf
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-regular-webfont.woff
--------------------------------------------------------------------------------
/public/static/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/public/static/fonts/lato/lato-bolditalic-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xingrz/biaozi/HEAD/public/static/fonts/lato/lato-bolditalic-webfont.woff
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | lib-cov
2 | *.seed
3 | *.log
4 | *.csv
5 | *.dat
6 | *.out
7 | *.pid
8 | *.gz
9 |
10 | pids
11 | logs
12 | results
13 |
14 | npm-debug.log
15 | node_modules
16 |
17 | .DS_Store
18 |
--------------------------------------------------------------------------------
/app/assets/css/general.styl:
--------------------------------------------------------------------------------
1 | * {
2 | border-radius: 0 !important;
3 | }
4 |
5 | .navbar {
6 | padding: 0 20px;
7 | margin: 0;
8 | }
9 |
10 | .brand {
11 | color: #fff;
12 | line-height: 50px;
13 | margin: 0;
14 | }
15 |
16 | .logged {
17 | color: #ccc;
18 | font-size: 75%;
19 | line-height: 50px;
20 | margin: 0;
21 | }
22 | //end
23 |
--------------------------------------------------------------------------------
/models/user.js:
--------------------------------------------------------------------------------
1 | module.exports = function (seq, T) {
2 | var User = seq.define('User', {
3 | username : { type: T.STRING, unique: true }
4 | , password : { type: T.STRING }
5 | , salt : { type: T.STRING }
6 | , key : { type: T.STRING }
7 | }, {
8 | associate: function (models) {
9 | User.hasMany(models.CalendarItem)
10 | }
11 | })
12 |
13 | return User
14 | }
15 |
--------------------------------------------------------------------------------
/routes/api/confirmed.js:
--------------------------------------------------------------------------------
1 | var User = require('../../models').User
2 |
3 | var sise = require('../../lib/sise')
4 |
5 | exports.show = function (req, res, error) {
6 | sise.confirmed(req.user.key, function (err, confirmed) {
7 | if (err) {
8 | return error(err)
9 | }
10 |
11 | if (!confirmed) {
12 | return res.send(404)
13 | }
14 |
15 | return res.json(200, confirmed)
16 | })
17 | }
18 |
--------------------------------------------------------------------------------
/models/calendar_item.js:
--------------------------------------------------------------------------------
1 | module.exports = function (seq, T) {
2 | var CalendarItem = seq.define('CalendarItem', {
3 | code : { type: T.STRING }
4 | , klass : { type: T.STRING }
5 | , subklass: { type: T.STRING }
6 | , status : { type: T.ENUM, values: ['confirmed', 'favored'] }
7 | }, {
8 | associate: function (models) {
9 | CalendarItem.belongsTo(models.User)
10 | }
11 | })
12 |
13 | return CalendarItem
14 | }
15 |
--------------------------------------------------------------------------------
/routes/index.js:
--------------------------------------------------------------------------------
1 | // deps
2 | var passport = require('passport')
3 |
4 | exports.signin = function (req, res, error) {
5 | return res.render('signin')
6 | }
7 |
8 | exports.authenticate = passport.authenticate('local', {
9 | successReturnToOrRedirect: '/'
10 | , failureRedirect: '/signin'
11 | })
12 |
13 | exports.signout = function (req, res, error) {
14 | req.logout()
15 | res.redirect('/')
16 | }
17 |
18 | exports.show = function (req, res, error) {
19 | return res.render('index')
20 | }
21 |
--------------------------------------------------------------------------------
/lib/sise/parsers/profile.js:
--------------------------------------------------------------------------------
1 | var $ = require('cheerio')
2 |
3 | exports.confirmed = function (html) {
4 | return $(html).find('table.table tr:has(td)').map(function (row) {
5 | var cells = $(this).find('td')
6 | if (cells.length == 10) {
7 | return { code: $(cells[1]).text().trim(), remarks: $(cells[8]).text().trim() }
8 | } else if (cells.length == 9) {
9 | return { code: $(cells[0]).text().trim(), remarks: $(cells[7]).text().trim() }
10 | }
11 | }).filter(function (i) {
12 | return !~['', '已选'].indexOf(i.remarks)
13 | }).map(function (i) {
14 | return i.code
15 | })
16 | }
17 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/loop.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/paper-bag.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/models/index.js:
--------------------------------------------------------------------------------
1 | var readdirSync = require('fs').readdirSync
2 | , join = require('path').join
3 | , Sequelize = require('sequelize')
4 | , extend = require('lodash').extend
5 |
6 | var config = require('../package.json').config.mysql
7 | if ('production' != process.env.NODE_ENV) {
8 | config.database += '_dev'
9 | }
10 |
11 | var sequelize = new Sequelize(config.database, config.username)
12 | , db = {}
13 |
14 | readdirSync(__dirname).forEach(function (file) {
15 | if (file.indexOf('.') !== 0 && file !== 'index.js') {
16 | var model = sequelize.import(join(__dirname, file))
17 | db[model.name] = model
18 | }
19 | })
20 |
21 | Object.keys(db).forEach(function(modelName) {
22 | if (db[modelName].options.hasOwnProperty('associate')) {
23 | db[modelName].options.associate(db)
24 | }
25 | })
26 |
27 | module.exports = extend(db, {
28 | sequelize: sequelize,
29 | Sequelize: Sequelize
30 | })
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 排课神器
2 | ======
3 |
4 | ## 运行环境
5 |
6 | * [NodeJS](http://nodejs.org) 0.10.X
7 | * [MariaDB](http://mariadb.org)(建议) 或 [MySQL](http://www.mysql.com)
8 |
9 | ## 安装
10 |
11 | ```
12 | $ git clone https://github.com/xingrz/biaozi.git
13 | $ cd biaozi
14 | $ npm install
15 | ```
16 |
17 | ## 调试
18 |
19 | ```
20 | $ make debug
21 | ```
22 |
23 | ## 上线
24 |
25 | ```
26 | $ make
27 | $ cd ..
28 | $ NODE_ENV=production PORT=8080 pm2 start biaozi
29 | ```
30 |
31 | ## 贡献
32 |
33 | 这个只是我利用空闲时间写出来的小项目,难免存在许多 BUG 和不足。欢迎各位小伙伴提出意见或帮忙实现功能。
34 |
35 | 上报错误、提建议或者咨询请[新建 Issue](https://github.com/xingrz/biaozi/issues/new)。
36 |
37 | 目前已知错误以及因为时间等原因尚未实现的功能详见[此处](https://github.com/xingrz/biaozi/issues?state=open),提交 Pull Request 时请尽量顺便引用一下原 Issue。
38 |
39 | 本项目仅提供预先制定选课计划的功能,不能用于也永远不会提供抢课、非法选课等违反校规之用途。任何违规功能的提交都会被拒绝合并。
40 |
41 | ## 协议
42 |
43 | 本项目基于 GPL v2 协议开源,总的来说就是你可以下载、修改或重新发布它的源代码,但需要继续将你修改的版本开源并维持原有协议。详情请见 [LICENSE](LICENSE) 文件。
44 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/clocks.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/mail.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/chat.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/toilet-paper.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | TESTS = test/*.test.js
2 | REPORTER = spec
3 | TIMEOUT = 5000
4 | MOCHA_OPTS =
5 | NODE_MODULES = ./node_modules
6 | BIN = $(NODE_MODULES)/.bin
7 |
8 | build: build-css build-js
9 |
10 | build-css: install
11 | rm -rf public/assets/css
12 | mkdir -p public/assets/css
13 | $(BIN)/stylus \
14 | -c \
15 | -o public/assets/css \
16 | -u $(NODE_MODULES)/nib \
17 | app/assets/css/*
18 |
19 | build-js: install
20 | rm -rf public/assets/js
21 | mkdir -p public/assets/js
22 | cd app/assets/js && for i in *.js; do (\
23 | ../../../$(BIN)/uglifyjs $$i \
24 | --mangle \
25 | --compress \
26 | --output ../../../public/assets/js/$$i \
27 | ); done
28 |
29 | install: build
30 | @npm install
31 |
32 | debug:
33 | @NODE_ENV=development DEBUG=@:* nodemon
34 |
35 | start: install
36 | @NODE_ENV=production node server
37 |
38 | test: install test-unit test-cov
39 |
40 | test-unit: install
41 | @NODE_ENV=test $(BIN)/mocha \
42 | --bail \
43 | --reporter $(REPORTER) \
44 | --timeout $(TIMEOUT) \
45 | $(MOCHA_OPTS) \
46 | $(TESTS)
47 |
48 | test-cov:
49 | @rm -f coverage.html
50 | @$(MAKE) test-unit MOCHA_OPTS='--require blanket' REPORTER=html-cov > coverage.html
51 | @$(MAKE) test-unit MOCHA_OPTS='--require blanket' REPORTER=travis-cov
52 |
53 | clean:
54 | rm -f coverage.html
55 | rm -rf public/assets
56 |
57 | .PHONY: build install debug start test test-unit test-cov clean
58 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/book.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/map.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "biaozi"
3 | , "version": "0.1.0"
4 | , "private": true
5 | , "description": ""
6 | , "main": "server.js"
7 | , "dependencies": {
8 | "async": "latest"
9 | , "cheerio": "latest"
10 | , "connect-ensure-login": "latest"
11 | , "connect-redis": "1.4.7"
12 | , "debug": "latest"
13 | , "eventproxy": "latest"
14 | , "express": "3.X"
15 | , "iconv-lite": "latest"
16 | , "jade": "latest"
17 | , "mysql": "2.X"
18 | , "nib": "latest"
19 | , "passport": "0.1.X"
20 | , "passport-local": "0.1.X"
21 | , "request": "2.X"
22 | , "sequelize": "2.X"
23 | , "stylus": "0.40.0"
24 | , "lodash": "latest"
25 | , "tough-cookie": "*"
26 | }
27 | , "devDependencies": {
28 | "mocha": "latest"
29 | , "should": "latest"
30 | , "blanket": "latest"
31 | , "travis-cov": "latest"
32 | , "supertest": "latest"
33 | , "muk": "latest"
34 | , "uglify-js": "latest"
35 | }
36 | , "engines": {
37 | "node": "0.10.X"
38 | }
39 | , "scripts": {
40 | "test": "make test"
41 | , "start": "node server.js"
42 | , "blanket": {
43 | "pattern": "//^((?!(node_modules|test)).)*$/"
44 | , "data-cover-flags": {
45 | "debug": false
46 | }}
47 | , "travis-cov": { "threshold": 80 }
48 | }
49 | , "author": "XiNGRZ "
50 | , "repository": {
51 | "type": "git"
52 | , "url": "https://github.com/xingrz/biaozi.git"
53 | }
54 | , "config": {
55 | "redis": { "prefix": "biaozi:session:" }
56 | , "mysql": { "username": "biaozi", "database": "biaozi" }
57 | , "cookie": { "secret": "6278ef12964caa125c3fc194513dffd3" }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/retina.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/views/index.jade:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | title 内啥
5 |
6 | meta(charset='utf-8')
7 | meta(name='viewport', content='width=device-width, initial-scale=1.0')
8 |
9 | link(rel='stylesheet', href='//cdn.staticfile.org/twitter-bootstrap/3.0.3/css/bootstrap.min.css')
10 | link(rel='stylesheet', href='/static/css/flat-ui.css')
11 |
12 | link(rel='stylesheet', href='/assets/css/general.css')
13 | link(rel='stylesheet', href='/assets/css/index.css')
14 |
15 | script(src='//cdn.staticfile.org/jquery/2.0.3/jquery.min.js')
16 | script(src='//cdn.staticfile.org/lodash.js/2.4.1/lodash.min.js')
17 | script(src='//cdn.staticfile.org/eventproxy/0.2.5/eventproxy.min.js')
18 |
19 | script(src='/assets/js/index.js')
20 |
21 | body
22 | div#loading
23 | .progress.progress-striped.active
24 | .progress-bar
25 | p 请稍候,系统玩命加载中...
26 |
27 | div.navbar.navbar-inverse
28 | p.brand.pull-left 内啥:排课神器
29 | p.logged.pull-right
30 | | #{logged.username}
31 | |
32 | a(href='/signout') 注销
33 |
34 | ul#availables.palette-peter-river
35 |
36 | div#schedule
37 | table
38 | tr
39 | th
40 | th(width='18%') 周一
41 | th(width='18%') 周二
42 | th(width='18%') 周三
43 | th(width='18%') 周四
44 | th(width='18%') 周五
45 |
46 | times = [ '09:00 - 10:20', '10:40 - 12:00', '12:30 - 13:50', '14:00 - 15:20', '15:30 - 16:50', '17:00 - 18:20', '19:00 - 20:20', '20:30 - 21:50' ]
47 |
48 | each timeName, time in times
49 | tr(data-time='#{time}')
50 | th
51 | div #{time * 2 + 1} - #{time * 2 + 2}
52 | div #{timeName}
53 | - for (var day = 0; day < 5; day++)
54 | td(data-day='#{day}'): ul
55 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/clipboard.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/index.js:
--------------------------------------------------------------------------------
1 | var join = require('path').join
2 | , pkg = require('../package.json')
3 |
4 | var express = require('express')
5 | , RedisStore = require('connect-redis')(express)
6 | , app = module.exports = express()
7 |
8 |
9 | app.set('host', '0.0.0.0')
10 | app.set('port', process.env.PORT || 3000)
11 |
12 | if ('production' == app.get('env')) {
13 | app.set('host', '127.0.0.1')
14 | }
15 |
16 |
17 | // set template engine
18 | app.set('views', join(__dirname, '../views'))
19 | app.set('view engine', 'jade')
20 |
21 | // trust proxy
22 | app.enable('trust proxy')
23 |
24 |
25 | // serves default or specified favicon.ico
26 | app.use(express.favicon(join(__dirname, '../public/favicon.ico')))
27 |
28 | // handles error
29 | app.use(express.errorHandler())
30 |
31 | // parses post body
32 | app.use(express.bodyParser())
33 |
34 | // cookie & session
35 | app.use(express.cookieParser(pkg.config.cookie.secret))
36 | app.use(express.session({
37 | secret: pkg.config.cookie.secret
38 | , cookie: { httpOnly: true, maxAge: 24 * 60 * 60 * 1000 }
39 | , store: new RedisStore({ prefix: pkg.config.redis.prefix })
40 | , proxy: true
41 | }))
42 |
43 | if ('development' == app.get('env')) {
44 | // enables jade pretty html output
45 | app.locals.pretty = true
46 |
47 | // prints logs in dev level
48 | app.use(express.logger('dev'))
49 | }
50 |
51 | if ('production' == app.get('env')) {
52 | // prints logs in prod level
53 | app.use(express.logger())
54 | }
55 |
56 | // authentication
57 | require('./passport')(app)
58 |
59 | // resources
60 | require('./resources')(app)
61 |
62 |
63 | require('../models').sequelize
64 | .sync()
65 | .complete(function(err) {
66 | if (err) {
67 | return console.error(err.stack || err)
68 | }
69 |
70 | app.listen(app.get('port'), app.get('host'), function (err) {
71 | if (err) {
72 | return console.error(err.stack || err)
73 | }
74 |
75 | console.log('express started')
76 | console.log(require('util').inspect(app.settings, { colors: true }))
77 | })
78 | })
79 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/pencils.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/views/signin.jade:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | title 内啥
5 |
6 | meta(charset='utf-8')
7 | meta(name='viewport', content='width=device-width, initial-scale=1.0')
8 |
9 | link(rel='stylesheet', href='//cdn.staticfile.org/twitter-bootstrap/3.0.3/css/bootstrap.min.css')
10 | link(rel='stylesheet', href='/static/css/flat-ui.css')
11 |
12 | style.
13 | .container {
14 | max-width: 970px !important;
15 | padding-top: 100px;
16 | }
17 |
18 | * {
19 | border-radius: 0 !important;
20 | }
21 |
22 | .login-icon > h4 {
23 | line-height: 1.2;
24 | text-align: right;
25 | }
26 |
27 | body {
28 | background: #F39C12;
29 | }
30 |
31 | .login-form {
32 | float: right;
33 | width: 400px;
34 | margin: 20px;
35 | }
36 |
37 | article {
38 | color: #000;
39 | }
40 |
41 | article h1 {
42 | font-size: 60px;
43 | font-weight: normal;
44 | }
45 |
46 | article ul {
47 | margin: 30px 0;
48 | padding: 0 2em;
49 | }
50 |
51 | article ul li {
52 | font-size: 20px;
53 | line-height: 50px;
54 | }
55 |
56 | footer {
57 | background: none;
58 | position: fixed;
59 | bottom: 0;
60 | font-weight: normal;
61 | color: #000;
62 | font-size: 14px;
63 | }
64 |
65 | body
66 | div.container
67 | form.login-form(method='post')
68 | div.form-group
69 | input(name='username', type='text', placeholder='学号', required, autofocus).form-control.login-field#login-name
70 | label.login-field-icon.fui-user(for='login-name')
71 |
72 | div.form-group
73 | input(name='password', type='password', placeholder='MYSISE 密码', required).form-control.login-field#login-pass
74 | label.login-field-icon.fui-lock(for='login-pass')
75 |
76 | button.btn.btn-info.btn-lg.btn-block(type='submit') 登录
77 |
78 | article
79 | h1 排课神器
80 | ul
81 | li 直观的上课周数显示
82 | li 自动筛选上课时间
83 | li 智能选课顺序提示
84 |
85 | footer
86 | p 2014 © BestNG
87 |
--------------------------------------------------------------------------------
/app/resources.js:
--------------------------------------------------------------------------------
1 | var ensureLogin = require('connect-ensure-login')
2 | , ensureLoggedIn = ensureLogin.ensureLoggedIn('/signin')
3 | , ensureNotLoggedIn = ensureLogin.ensureNotLoggedIn()
4 |
5 | var express = require('express')
6 | , join = require('path').join
7 |
8 | module.exports = function (app) {
9 | var index = require('../routes/index')
10 | app.all('/' , ensureLoggedIn, index.show)
11 | app.all('/signout' , ensureLoggedIn, index.signout)
12 | app.get('/signin' , ensureNotLoggedIn, index.signin)
13 | .post('/signin' , ensureNotLoggedIn, index.authenticate)
14 |
15 | var calendarApi = require('../routes/api/calendar')
16 | app.get('/api/calendar' , ensureLoggedIn, calendarApi.index)
17 | //.put('/api/calendar/:code' , ensureLoggedIn, calendarApi.modify)
18 | //.del('/api/calendar/:code' , ensureLoggedIn, calendarApi.remove)
19 |
20 | app.del('/api/calendar/:code/confirmed' , ensureLoggedIn, calendarApi.deny)
21 | .post('/api/calendar/:code/confirmed' , ensureLoggedIn, calendarApi.confirm)
22 |
23 | app.del('/api/calendar/:code/favored/:klass' , ensureLoggedIn, calendarApi.bore)
24 | .del('/api/calendar/:code/favored/:klass/:subklass', ensureLoggedIn, calendarApi.bore)
25 | .post('/api/calendar/:code/favored' , ensureLoggedIn, calendarApi.favor)
26 |
27 | var confirmedApi = require('../routes/api/confirmed')
28 | app.get('/api/confirmed', ensureLoggedIn, confirmedApi.show)
29 |
30 | // serves stylus compiled css
31 | var stylus = require('stylus')
32 | , nib = require('nib')
33 |
34 | var dev = 'development' == app.get('env')
35 |
36 | app.use('/assets/css', stylus.middleware({
37 | src: join(__dirname, './assets/css')
38 | , dest: join(__dirname, '../public/assets/css')
39 | , compile: function (str, path) {
40 | return stylus(str)
41 | .set('filename', path)
42 | .set('compress', !dev)
43 | .set('firebug', !dev)
44 | .set('linenos', !dev)
45 | .use(nib())
46 | }
47 | }))
48 |
49 | if (dev) {
50 | app.use('/assets/js', express.static(join(__dirname, './assets/js')))
51 | }
52 |
53 | // serves general static files
54 | app.use(express.static(join(__dirname, '../public')))
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/app/assets/css/index.styl:
--------------------------------------------------------------------------------
1 | h2 {
2 | font-size 120%
3 | font-weight normal
4 | color #fff
5 | padding 10px 20px
6 | margin 0
7 | }
8 |
9 | #loading {
10 | position absolute
11 | left 0
12 | top 0
13 | right 0
14 | bottom 0
15 | z-index 1000
16 |
17 | background #fff
18 | text-align center
19 | padding 200px 100px
20 |
21 | .progress {
22 | max-width 500px
23 | margin 0 auto
24 |
25 | .progress-bar {
26 | width 100%
27 | }
28 | }
29 |
30 | p {
31 | margin-top 10px
32 | font-size 14px
33 | }
34 | }
35 |
36 | @import availables
37 | @import schedule
38 |
39 |
40 | @media(max-width: 720px) {
41 | body {
42 | background #F39C12
43 | }
44 |
45 | .navbar {
46 | display none
47 | }
48 |
49 | #schedule {
50 | display none
51 | }
52 |
53 | #availables {
54 | position initial
55 | width initial
56 | left initial
57 | top initial
58 | bottom initial
59 | background transparent !important
60 |
61 | li:not(.confirmed):not(.favored) {
62 | display none
63 | }
64 |
65 | > li.confirmed,
66 | > li.favored {
67 | height auto
68 | background transparent !important
69 | color #000
70 |
71 | > strong {
72 | font-weight bold
73 | cursor default
74 |
75 | &::before {
76 | display none
77 | }
78 |
79 | p {
80 | color inherit
81 | display inline
82 | padding-left 1em
83 | line-height inherit
84 | }
85 | }
86 |
87 | ul {
88 | background none
89 |
90 | li.confirmed,
91 | li.favored {
92 | color #000
93 | cursor default
94 |
95 | > .fui-heart,
96 | > .fui-check {
97 | color rgba(0, 0, 0, 0.5)
98 |
99 | &:hover {
100 | color rgba(0, 0, 0, 0.7)
101 | }
102 | }
103 | }
104 |
105 | li.confirmed > .fui-check {
106 | display none
107 | }
108 |
109 | li.favored > .fui-heart::before {
110 | content '\e00b'
111 | }
112 | }
113 | }
114 |
115 | }
116 | }
117 | //end
118 |
--------------------------------------------------------------------------------
/app/assets/css/schedule.styl:
--------------------------------------------------------------------------------
1 |
2 | #schedule {
3 | position absolute
4 | left 200px
5 | top 50px
6 | right 0
7 | bottom 0
8 | color #000
9 | font-size 90%
10 | overflow-y scroll
11 | }
12 |
13 | #schedule table {
14 | width 100%
15 | table-layout fixed
16 | }
17 |
18 | #schedule th {
19 | text-align center
20 | padding 5px
21 | border 1px solid #eee
22 | font-weight normal
23 | vertical-align top
24 | white-space nowrap
25 | overflow hidden
26 | }
27 |
28 | #schedule tr:nth-child(even) {
29 | background #fcfdff
30 | }
31 |
32 | #schedule tr:nth-child(odd) {
33 | background #fff
34 | }
35 |
36 | #schedule td {
37 | border 1px solid #eee
38 | vertical-align top
39 | }
40 |
41 | #schedule h3 {
42 | font-size inherit
43 | }
44 |
45 | #schedule p {
46 | font-size inherit
47 | }
48 |
49 | #schedule ul {
50 | list-style none
51 | margin 0
52 | padding 0
53 | min-height 80px
54 | }
55 |
56 | @-webkit-keyframes pending {
57 | 0% { color rgba(0, 0, 0, 0.10) }
58 | 50% { color rgba(0, 0, 0, 0.75) }
59 | 100% { color rgba(0, 0, 0, 0.10) }
60 | }
61 |
62 | #schedule ul li {
63 | display block
64 | margin 0
65 | padding 0
66 | height 40px
67 |
68 | &.twinkling {
69 | -webkit-animation pending linear 1s infinite
70 | }
71 |
72 | &.preview {
73 | opacity 0.5
74 | }
75 |
76 | &.confirmed,
77 | &.favored {
78 | > h3::before {
79 | color rgba(0, 0, 0, 0.2)
80 | float right
81 | font-family 'Flat-UI-Icons'
82 | -webkit-font-smoothing antialiased
83 | }
84 | }
85 |
86 | &.confirmed > h3::before {
87 | content '\e00a'
88 | }
89 |
90 | &.favored > h3::before {
91 | content '\e007'
92 | }
93 | }
94 |
95 | #schedule ul li h3 {
96 | margin 0
97 | position relative
98 | z-index 1
99 | line-height 20px
100 | height 20px
101 | padding 0 5px
102 | white-space nowrap
103 | overflow hidden
104 | text-overflow ellipsis
105 | }
106 |
107 | #schedule ul li .details {
108 | margin 0
109 | position relative
110 | z-index 1
111 | line-height 20px
112 | height 20px
113 | padding 0 5px
114 | white-space nowrap
115 | overflow hidden
116 | text-overflow ellipsis
117 | }
118 |
119 | #schedule ul li .details span {
120 | margin-right 1em
121 | }
122 |
123 | #schedule ul li .graph {
124 | white-space nowrap
125 | font-size 0
126 | margin 0
127 | position relative
128 | top -40px
129 | height 40px
130 | }
131 |
132 | #schedule ul li .graph i {
133 | display inline-block
134 | height 100%
135 | width 5%
136 | background #fff
137 | opacity 0.9
138 | }
139 |
140 | #schedule ul li .graph i.y {
141 | opacity 0.6
142 | }
143 | //end
144 |
--------------------------------------------------------------------------------
/public/static/images/icons/svg/compas.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/lib/sise/parsers/login.js:
--------------------------------------------------------------------------------
1 | var $ = require('cheerio')
2 | , vm = require('vm')
3 |
4 | var debug = require('debug')('@:lib:sise:loginParser')
5 |
6 | var compiled = null
7 | , cache = null
8 |
9 | exports.form = function (html) {
10 | /**
11 | * 如果 HTML 没变,就直接返回之前的结果
12 | */
13 |
14 | if (html === cache) {
15 | return compiled
16 | }
17 |
18 | var form = $(html).find('form')
19 |
20 | if (!form) {
21 | debug('tag