diff --git a/.gitignore b/.gitignore index 6704566..cf20a5b 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,8 @@ dist # TernJS port file .tern-port + +Version +tmp +.vscode +mongodb.txt \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..735ed08 --- /dev/null +++ b/app.js @@ -0,0 +1,65 @@ +const express = require("express"); +const createError = require("http-errors"); +const bodyParser = require("body-parser"); +const path = require("path"); +const cookieParser = require("cookie-parser"); +const moment = require("jalali-moment"); +const logger = require("morgan"); +//Db Config +require("./config/db")(); +//Router +const indexRouter = require("./routes/index"); +const usersRouter = require("./routes/users"); +const deadsRouter = require("./routes/deads"); +const apiDeadsRouter = require("./routes/api/apiDeads"); +const statesRouter = require("./routes/states"); +const apiStatesRouter = require("./routes/api/apiStates"); +const deadtypesRouter = require("./routes/deadtype"); +const costsRouter = require("./routes/costs"); +const reportsRouter = require("./routes/reports"); +const statementRouter = require("./routes/statements"); +//App +const app = express(); + +// view engine setup +app.set("views", path.join(__dirname, "views")); +app.set("view engine", "vash"); +// Uses +app.use(logger("dev")); +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, "public"))); +app.use(bodyParser.json()); +app.use((req, res, next) => { + moment.locale("fa", { useGregorianParser: true }); + res.locals.moment = moment; + next(); +}); + +//Router +app.use("/", indexRouter); +app.use("/users", usersRouter); +app.use("/deads", deadsRouter); +app.use("/api/deads", apiDeadsRouter); +app.use("/states", statesRouter); +app.use("/api/states", apiStatesRouter); +app.use("/deadtypes", deadtypesRouter); +app.use("/costs", costsRouter); +app.use("/reports", reportsRouter); +app.use("/statements", statementRouter); +// + +// catch 404 and forward to error handler +app.use(function (req, res, next) { + next(createError(404)); +}); + +// error handler +app.use(function (err, req, res, next) { + res.locals.message = err.message; + res.locals.error = req.app.get("env") === "development" ? err : {}; + res.status(err.status || 500); + res.render("error"); +}); +module.exports = app; diff --git a/bin/www b/bin/www new file mode 100644 index 0000000..f9114e4 --- /dev/null +++ b/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +const app = require('../app'); +const debug = require('debug')('node:server'); +const http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +const port = normalizePort(process.env.PORT || '80'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +const server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ +server.timeout = 1200000; +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + const port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + const bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + const addr = server.address(); + const bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/config/db.js b/config/db.js new file mode 100644 index 0000000..dc400a2 --- /dev/null +++ b/config/db.js @@ -0,0 +1,15 @@ +const mongoose = require("mongoose"); +// const url = ""; +const url = "mongodb://localhost:27017/Aramestan"; + +const InitiateMongoServer = async() => { + try { + await mongoose.connect(url, { + useNewUrlParser: true, + useUnifiedTopology: true + }); + } catch (e) { + throw e; + } +}; +module.exports = InitiateMongoServer; \ No newline at end of file diff --git a/model/Costs.js b/model/Costs.js new file mode 100644 index 0000000..9c8da00 --- /dev/null +++ b/model/Costs.js @@ -0,0 +1,22 @@ +var mongoose = require("mongoose"); + +const Cost = mongoose.model( + "C_Costs", + new mongoose.Schema({ + CostId: { + type: Number, + required: true, + unique: true, + }, + Name: { + type: String, + default: "", + }, + Price: { + type: Number, + default: 0, + }, + }) +); + +module.exports = Cost; diff --git a/model/Counter.js b/model/Counter.js new file mode 100644 index 0000000..5c2c4a7 --- /dev/null +++ b/model/Counter.js @@ -0,0 +1,18 @@ +var mongoose = require("mongoose"); + +const Counter = mongoose.model( + "C_Counters", + new mongoose.Schema({ + CounterName: { + type: String, + required: true, + unique: true, + }, + Counter: { + type: Number, + default: 1, + }, + }) +); + +module.exports = Counter; diff --git a/model/DeadTypes.js b/model/DeadTypes.js new file mode 100644 index 0000000..4d0ee56 --- /dev/null +++ b/model/DeadTypes.js @@ -0,0 +1,18 @@ +var mongoose = require("mongoose"); + +const DeadType = mongoose.model( + "C_DeadTypes", + new mongoose.Schema({ + DeadTypeId: { + type: Number, + required: true, + unique: true, + }, + Name: { + type: String, + default:"" + }, + }) +); + +module.exports = DeadType; diff --git a/model/Deads.js b/model/Deads.js new file mode 100644 index 0000000..5c53e27 --- /dev/null +++ b/model/Deads.js @@ -0,0 +1,116 @@ +var mongoose = require("mongoose"); + +const Dead = mongoose.model( + "C_Dead", + new mongoose.Schema({ + FullName: { + type: String, + default: "", + }, + BirthDate: { + type: Date, + default: new Date(), + }, + DeathDate: { + type: Date, + default: new Date(), + }, + FatherName: { + type: String, + default: "", + }, + StateId: { + // Related to C_State + type: Number, + default: 0, + }, + Row: { + type: Number, + default: 0, + }, + GravePlaceId: { + type: Number, + default: 0, + }, + DeadTypeId: { + //Related to C_DeadType + type: Number, + default: 0, + }, + NationalId: { + type: String, + required: true, + unique: true, + }, + DeathReason: { + type: String, + default: "", + }, + ImageName: { + type: String, + default: "", + }, + Latitiude: { + type: String, + }, + Longtitude: { + type: String, + }, + //Update V2 + IntermentDate: { + type: Date, + }, + IncomeDate: { + type: Date, + }, + DoctorName: { + type: String, + }, + IntermentPermitNumber: { + type: String, + }, + DeathPlace: { + type: String, + }, + FollowerName: { + type: String, + }, + FollowerNationalId: { + type: String, + }, + FollowerRelToDeadPerson: { + type: String, + }, + FollowerPhoneNumber: { + type: String, + }, + Costs: { + type: Array, + }, + TotalCosts: { + type: Number, + }, + Details: { + type: String, + }, + isInside: { + type: Boolean, + default: true, + }, + Accepted: { + type: Boolean, + default: false, + }, + // Update V3 + EditDate: { + type: Date, + default: new Date(), + }, + StatementImageName: { + type: String, + default: "", + }, + }) +); + +module.exports = Dead; diff --git a/model/Settings.js b/model/Settings.js new file mode 100644 index 0000000..1780b5d --- /dev/null +++ b/model/Settings.js @@ -0,0 +1,20 @@ +const mongoose = require("mongoose"); + +const Setting = mongoose.model( + "C_Settings", + new mongoose.Schema({ + i: { + type: Number, + required: true, + unique: true, + }, + AramestanManager: { + type: String, + }, + AramestanBankAccount: { + type: String, + }, + }) +); + +module.exports = Setting; diff --git a/model/States.js b/model/States.js new file mode 100644 index 0000000..2e16c17 --- /dev/null +++ b/model/States.js @@ -0,0 +1,26 @@ +var mongoose = require("mongoose"); + +const State = mongoose.model( + "C_States", + new mongoose.Schema({ + StateId: { + type: Number, + required: true, + unique: true, + }, + Name: { + type: String, + default: "", + }, + Rows: { + type: Number, + default: 1, + }, + Count: { + type: Number, + default: 10, + }, + }) +); + +module.exports = State; diff --git a/model/Users.js b/model/Users.js new file mode 100644 index 0000000..3980cad --- /dev/null +++ b/model/Users.js @@ -0,0 +1,29 @@ +var mongoose = require("mongoose"); + +const User = mongoose.model( + "C_Users", + new mongoose.Schema({ + RoleId: { + type: Number, + default: 4, + }, + Username: { + type: String, + required: true, + unique: true, + }, + Password: { + type: String, + default: "admin", + }, + Name: { + type: String, + default: "", + }, + AccessToken: { + type: String, + }, + }) +); + +module.exports = User; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c93f508 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2019 @@ +{ + "name": "node", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.0.tgz", + "integrity": "sha512-jB0yCBl4W/kVHM2whjfyqnxTmOHkCX4kHEa5nYKSoGeYe8YrjTYTc87/6bwt1g8cmV0QrbhKriETg9jWtcREhg==", + "requires": { + "node-addon-api": "^3.0.0", + "node-pre-gyp": "0.15.0" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "bson": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz", + "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz", + "integrity": "sha1-UNFlGGiuYOzP8KLZ80WVN2vGsEE=", + "requires": { + "keypress": "0.1.x" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-flash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz", + "integrity": "sha1-2GMPJtlaf4UfmVax6MxnMvO2qjA=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-parser": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", + "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "express-flash": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/express-flash/-/express-flash-0.0.2.tgz", + "integrity": "sha1-I9GovPP5DXB5KOSJ+Whp7K0KzaI=", + "requires": { + "connect-flash": "0.1.x" + } + }, + "express-session": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz", + "integrity": "sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==", + "requires": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.0", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jalali-moment": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/jalali-moment/-/jalali-moment-3.3.8.tgz", + "integrity": "sha512-elWIoxdrHNV5m5yZmBviINQ4797s6fvD0UZyywoJ7hBTQbxL9dl4hi3RZ0faf2E6F/x7/MaA0NQZ4dDSX0jg6g==", + "requires": { + "commander": "^5.1.0", + "inquirer": "^7.1.0", + "moment": "^2.26.0" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + } + } + }, + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kareem": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", + "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" + }, + "keypress": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", + "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + }, + "mongodb": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz", + "integrity": "sha512-jz7mR58z66JKL8Px4ZY+FXbgB7d0a0hEGCT7kw8iye46/gsqPrOEpZOswwJ2BQlfzsrCLKdsF9UcaUfGVN2HrQ==", + "requires": { + "bl": "^2.2.0", + "bson": "^1.1.4", + "denque": "^1.4.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.9.18", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.18.tgz", + "integrity": "sha512-agZbIuQcN1gZ12BJn6KesA+bgsvoLVjCwhfPw88hggxX8O24SWK4EJwN35GEZKDej9AHUZKNAPgmdeXCVQxviA==", + "requires": { + "bson": "^1.1.4", + "kareem": "2.3.1", + "mongodb": "3.5.8", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.7.0", + "mquery": "3.2.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.1.2", + "sift": "7.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "mpath": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz", + "integrity": "sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg==" + }, + "mquery": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz", + "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "needle": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", + "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-addon-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz", + "integrity": "sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg==" + }, + "node-pre-gyp": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz", + "integrity": "sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.3", + "needle": "^2.5.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=", + "requires": { + "passport-strategy": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "persian-date": { + "version": "1.1.0-rc2", + "resolved": "https://registry.npmjs.org/persian-date/-/persian-date-1.1.0-rc2.tgz", + "integrity": "sha512-qWkCzNn01wsNFJUcMOgatK8WJ2w+wLZXIFGvP2GYwN9nJ713NehDW02J2+yNPMmHqZRGUIG56MABqWw4MQKS6A==" + }, + "persian-datepicker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/persian-datepicker/-/persian-datepicker-1.2.0.tgz", + "integrity": "sha512-o0krgZQsLDxaADui8rVL7G4P1MXXi2IWFseFhgE7RahdaTqAcBj6C5fhwePMqOTJazl1PwB6dAQnKZ9VGKhItA==", + "requires": { + "jquery": "^3.3.1", + "persian-date": "^1.1.0-rc2" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vash": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/vash/-/vash-0.12.10.tgz", + "integrity": "sha512-Y3zH4KYT3DG8tRtu1y1mwPxuuwUo1IGcsUBEpUE//lEJDTebpdYYx0GL6//hcKV6KlBWisu+XJv64I43N94sWA==", + "requires": { + "commander": "~1.1.1", + "debug": "^2.2.0", + "uglify-js": "^2.6.2" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d2390b7 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "node", + "version": "1.3.0", + "private": true, + "main": "./bin/www", + "scripts": { + "start": "nodemon ./bin/www" + }, + "dependencies": { + "bcrypt": "^5.0.0", + "body-parser": "^1.19.0", + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "express": "4.17.1", + "http-errors": "~1.6.3", + "jalali-moment": "^3.3.7", + "mongodb": "^3.5.8", + "mongoose": "^5.9.18", + "morgan": "~1.9.1", + "multer": "^1.2.0", + "persian-datepicker": "^1.2.0", + "vash": "~0.12.6" + } +} diff --git a/public/css/persian-datepicker.min.css b/public/css/persian-datepicker.min.css new file mode 100644 index 0000000..c1e0264 --- /dev/null +++ b/public/css/persian-datepicker.min.css @@ -0,0 +1,10 @@ +/* +** persian-datepicker - v1.2.0 +** Reza Babakhani +** http://babakhani.github.io/PersianWebToolkit/docs/datepicker +** Under MIT license +*/ + +.datepicker-plot-area{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.datepicker-plot-area .datepicker-time-view .down-btn,.datepicker-plot-area .datepicker-time-view .up-btn{transition:all 100ms ease}.datepicker-plot-area .datepicker-day-view .table-days td.disabled span,.datepicker-plot-area .datepicker-year-view .year-item-disable,.datepicker-plot-area .datepicker-month-view .month-item-disable{border-radius:0}.datepicker-plot-area .datepicker-time-view .down-btn,.datepicker-plot-area .datepicker-time-view .up-btn{border-radius:0;border-top-left-radius:0;border-top-right-radius:0}.datepicker-plot-area .datepicker-time-view .down-btn{border-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.datepicker-plot-area,.datepicker-plot-area .datepicker-time-view>.time-segment{border-radius:0}.datepicker-plot-area .datepicker-day-view .table-days td span,.datepicker-plot-area .datepicker-year-view .year-item,.datepicker-plot-area .datepicker-month-view .month-item,.datepicker-plot-area .datepicker-navigator .pwt-btn-next,.datepicker-plot-area .datepicker-navigator .pwt-btn-switch,.datepicker-plot-area .datepicker-navigator .pwt-btn-prev{border-radius:0}.datepicker-plot-area{box-shadow:0 5px 10px rgba(0,0,0,0.2)}.datepicker-plot-area .datepicker-day-view .table-days td span,.datepicker-plot-area .datepicker-year-view .year-item,.datepicker-plot-area .datepicker-month-view .month-item,.datepicker-plot-area .datepicker-day-view .table-days td.disabled span,.datepicker-plot-area .datepicker-year-view .year-item-disable,.datepicker-plot-area .datepicker-month-view .month-item-disable,.datepicker-plot-area .datepicker-time-view>.time-segment,.datepicker-plot-area .datepicker-time-view .down-btn,.datepicker-plot-area .datepicker-time-view .up-btn,.datepicker-plot-area .datepicker-time-view input,.datepicker-plot-area .datepicker-navigator .pwt-btn-next,.datepicker-plot-area .datepicker-navigator .pwt-btn-switch,.datepicker-plot-area .datepicker-navigator .pwt-btn-prev,.datepicker-plot-area .toolbox .pwt-btn-submit,.datepicker-plot-area .toolbox .pwt-btn-calendar,.datepicker-plot-area .toolbox .pwt-btn-today{cursor:pointer}.datepicker-plot-area .datepicker-day-view .table-days td span,.datepicker-plot-area .datepicker-year-view .year-item,.datepicker-plot-area .datepicker-month-view .month-item{font:14px;background-color:#fff;color:#333;border:0;text-shadow:none}.datepicker-plot-area .datepicker-day-view .table-days td.disabled span,.datepicker-plot-area .datepicker-year-view .year-item-disable,.datepicker-plot-area .datepicker-month-view .month-item-disable{background-color:#f1f1f1;color:#ccc;border:none;text-shadow:none;cursor:default}.datepicker-plot-area .datepicker-day-view .table-days td.today span{background-color:#333;color:#fff;border:0;text-shadow:none}.datepicker-plot-area .datepicker-day-view .table-days td span.other-month{background-color:"";color:#ccc;border:none;text-shadow:none}.datepicker-plot-area .datepicker-day-view .table-days td.selected span,.datepicker-plot-area .datepicker-year-view .year-item.selected,.datepicker-plot-area .datepicker-month-view .month-item.selected{background-color:#005299;color:#fff;border:none;text-shadow:1px 1px 1px #000}.datepicker-plot-area .datepicker-day-view .table-days td.selected span .datepicker-plot-area .datepicker-day-view .table-days td:hover,.datepicker-plot-area .datepicker-day-view .table-days td span:hover,.datepicker-plot-area .datepicker-year-view .year-item:hover,.datepicker-plot-area .datepicker-month-view .month-item:hover{background-color:#007be6;color:#fff;border:0;text-shadow:none}.datepicker-container{display:block;position:absolute;z-index:100000;top:0;direction:ltr}.datepicker-container.pwt-hide{display:none}.datepicker-plot-area{box-sizing:border-box;overflow:hidden;min-height:70px;display:block;width:200px;min-width:200px;padding:3px;position:absolute;font:12px tahoma;border:1px solid #ccc;background-color:#fff}.datepicker-plot-area.datepicker-state-only-time{padding:0}.datepicker-plot-area table,.datepicker-plot-area th,.datepicker-plot-area td{border:0;background:none}.datepicker-plot-area *{text-align:center;color:#333}.datepicker-plot-area .datepicker-day-view,.datepicker-plot-area .datepicker-month-view,.datepicker-plot-area .datepicker-year-view{display:block;width:100%;float:left;min-height:200px;margin:0}.datepicker-plot-area-inline-view{display:block;width:100%;position:static;float:left}.datepicker-plot-area .datepicker-time-view{display:block;float:left;width:100%;padding:5px;background:#f9f9f9;border-top:1px solid #f1f1f1}.datepicker-plot-area .datepicker-time-view>.time-segment{display:block;width:22%;float:left;overflow:hidden}.datepicker-plot-area .datepicker-time-view>.time-segment:hover .down-btn,.datepicker-plot-area .datepicker-time-view>.time-segment:hover .up-btn{font-weight:bold}.datepicker-plot-area .datepicker-time-view .divider{display:block;width:3%;height:60px;line-height:60px;float:left;overflow:hidden;font:12px bold}.datepicker-plot-area .datepicker-time-view .divider span{height:60px;line-height:60px}.datepicker-plot-area .datepicker-time-view .down-btn,.datepicker-plot-area .datepicker-time-view .up-btn{display:block;float:left;width:100%;margin:0;height:20px;line-height:22px;color:#ccc}.datepicker-plot-area .datepicker-time-view .down-btn:hover,.datepicker-plot-area .datepicker-time-view .up-btn:hover{background-color:rgba(250,250,250,0.3);color:#807f7f}.datepicker-plot-area .datepicker-time-view input{display:block;width:90%;margin:0 5%;height:20px;padding:0;outline:none;border:none;background:transparent}.datepicker-plot-area.datepicker-state-only-time .datepicker-time-view{padding:0 5px;margin:0}.datepicker-plot-area.datepicker-state-only-time .datepicker-time-view>.time-segment,.datepicker-plot-area.datepicker-state-only-time .datepicker-time-view>.divider{padding:5px 0}.datepicker-plot-area.datepicker-state-no-meridian .datepicker-time-view>.time-segment{width:31.33%}.datepicker-plot-area.datepicker-state-no-meridian .datepicker-time-view>.meridian-divider{display:none}.datepicker-plot-area.datepicker-state-no-second .datepicker-time-view>.time-segment{width:31.33%}.datepicker-plot-area.datepicker-state-no-second .datepicker-time-view>.second-divider{display:none}.datepicker-plot-area.datepicker-state-no-meridian.datepicker-state-no-second .datepicker-time-view>.time-segment{width:48%}.datepicker-plot-area.datepicker-state-no-meridian.datepicker-state-no-second .datepicker-time-view>.second-divider,.datepicker-plot-area.datepicker-state-no-meridian.datepicker-state-no-second .datepicker-time-view>.meridian-divider{display:none}.datepicker-plot-area .datepicker-day-view .table-days{width:100%;float:left;direction:rtl}.datepicker-plot-area .datepicker-day-view .table-days td{width:14.2%;height:26px;padding:0;margin:0;position:relative}.datepicker-plot-area .datepicker-day-view .table-days td .alter-calendar-day{font-style:normal;position:absolute;font-size:8.5px;bottom:0;right:2px;color:#f1f1f1}.datepicker-plot-area .datepicker-day-view .table-days td span{display:block;width:100%;height:26px;line-height:26px;padding:0;margin:0}.datepicker-plot-area .datepicker-day-view .month-grid-box{display:block;width:100%;float:right;min-height:180px;margin:8px 0}.datepicker-plot-area .datepicker-day-view .month-grid-box .header{display:block;width:100%;float:left;padding-bottom:8px}.datepicker-plot-area .datepicker-day-view .month-grid-box .header .header-row{display:block;width:100%;height:25px;float:left}.datepicker-plot-area .datepicker-day-view .month-grid-box .header .header-row-cell{display:block;width:14.2%;height:25px;float:right;line-height:25px;font:11px;font-weight:bold;color:#333}.datepicker-plot-area .datepicker-year-view,.datepicker-plot-area .datepicker-month-view{padding-top:10px}.datepicker-plot-area .datepicker-year-view .year-item,.datepicker-plot-area .datepicker-month-view .month-item{display:block;width:33.333333%;margin:2px 0 0;float:right;height:42px;line-height:42px}.datepicker-plot-area .datepicker-navigator{display:block;width:100%;float:left}.datepicker-plot-area .datepicker-navigator .pwt-btn-next,.datepicker-plot-area .datepicker-navigator .pwt-btn-switch,.datepicker-plot-area .datepicker-navigator .pwt-btn-prev{display:block;float:left;height:28px;line-height:28px;font-weight:bold;background-color:rgba(250,250,250,0.1);color:#333}.datepicker-plot-area .datepicker-navigator .pwt-btn-next:hover,.datepicker-plot-area .datepicker-navigator .pwt-btn-switch:hover,.datepicker-plot-area .datepicker-navigator .pwt-btn-prev:hover{background-color:rgba(250,250,250,0.3)}.datepicker-plot-area .datepicker-navigator .pwt-btn-next{display:block;width:15%;float:left}.datepicker-plot-area .datepicker-navigator .pwt-btn-switch{display:block;width:66%;margin:0 2%;float:left}.datepicker-plot-area .datepicker-navigator .pwt-btn-prev{display:block;width:15%;float:left}.datepicker-plot-area .toolbox{display:block;float:left;width:100%;margin-top:5px}.datepicker-plot-area .toolbox .pwt-btn-submit,.datepicker-plot-area .toolbox .pwt-btn-calendar,.datepicker-plot-area .toolbox .pwt-btn-today{background-color:rgba(250,250,250,0.1);float:right;display:block;font-weight:bold;font-size:11px;height:24px;line-height:24px;white-space:nowrap;margin:0 auto;margin-left:5px;padding:0 5px;min-width:50px}.datepicker-plot-area .toolbox .pwt-btn-submit:hover,.datepicker-plot-area .toolbox .pwt-btn-calendar:hover,.datepicker-plot-area .toolbox .pwt-btn-today:hover{background-color:rgba(250,250,250,0.3)}.datepicker-plot-area .datepicker-navigator{display:block;width:100%;float:left}.datepicker-plot-area .datepicker-navigator .pwt-btn-next,.datepicker-plot-area .datepicker-navigator .pwt-btn-switch,.datepicker-plot-area .datepicker-navigator .pwt-btn-prev{display:block;float:left;height:28px;line-height:28px;font-weight:bold;background-color:rgba(250,250,250,0.1);color:#333}.datepicker-plot-area .datepicker-navigator .pwt-btn-next:hover,.datepicker-plot-area .datepicker-navigator .pwt-btn-switch:hover,.datepicker-plot-area .datepicker-navigator .pwt-btn-prev:hover{background-color:rgba(250,250,250,0.3)}.datepicker-plot-area .datepicker-navigator .pwt-btn-next{display:block;width:15%;float:left}.datepicker-plot-area .datepicker-navigator .pwt-btn-switch{display:block;width:66%;margin:0 2%;float:left}.datepicker-plot-area .datepicker-navigator .pwt-btn-prev{display:block;width:15%;float:left}.datepicker-container.pwt-mobile-view{position:fixed;width:100%;height:100%;top:0;left:0;bottom:0;overflow:hidden;transition:all 1s}.datepicker-container.pwt-mobile-view.pwt-hide{top:100vh;height:0}.datepicker-container.pwt-mobile-view .datepicker-plot-area.datepicker-state-only-time .pwt-btn-submit{color:#fff;background:#ccc}.datepicker-container.pwt-mobile-view .datepicker-plot-area{position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0}.datepicker-container.pwt-mobile-view .datepicker-plot-area .table-days td,.datepicker-container.pwt-mobile-view .datepicker-plot-area .table-days td span{height:44px;line-height:44px;font-size:14px}.datepicker-container.pwt-mobile-view .datepicker-plot-area .datepicker-year-view .year-item,.datepicker-container.pwt-mobile-view .datepicker-plot-area .datepicker-month-view .month-item{height:70px;line-height:70px}.datepicker-container.pwt-mobile-view .datepicker-plot-area [class*='pwt-btn']{height:48px;line-height:48px}.datepicker-container.pwt-mobile-view .datepicker-plot-area .pwt-btn-today{float:left}.datepicker-container.pwt-mobile-view .datepicker-plot-area.datepicker-state-only-time{background:rgba(0,0,0,0.7);border:0;padding-top:60%}.datepicker-container.pwt-mobile-view .datepicker-plot-area.datepicker-state-only-time .pwt-btn-submit{margin-right:5px}.datepicker-container.pwt-mobile-view .datepicker-plot-area.datepicker-state-only-time .datepicker-time-view input{height:40px;line-height:40px;font-size:24px;margin:5px 0}.datepicker-container.pwt-mobile-view .datepicker-plot-area.datepicker-state-only-time .datepicker-time-view .divider,.datepicker-container.pwt-mobile-view .datepicker-plot-area.datepicker-state-only-time .datepicker-time-view .divider span{font-size:16px;display:block;height:144px;line-height:144px}.datepicker-container.pwt-mobile-view .datepicker-plot-area.datepicker-state-only-time .datepicker-time-view .down-btn,.datepicker-container.pwt-mobile-view .datepicker-plot-area.datepicker-state-only-time .datepicker-time-view .up-btn{height:48px;line-height:48px}.datepicker-container.pwt-mobile-view .datepicker-time-view input{height:32px;line-height:34px;font-size:18px}.datepicker-container.pwt-mobile-view .datepicker-time-view .divider,.datepicker-container.pwt-mobile-view .datepicker-time-view .divider span{height:120px;line-height:120px}.datepicker-container.pwt-mobile-view .datepicker-time-view .down-btn,.datepicker-container.pwt-mobile-view .datepicker-time-view .up-btn{height:40px;line-height:40px} + +/*# sourceMappingURL=persian-datepicker.min.css.map */ \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css new file mode 100644 index 0000000..ac5c1b5 --- /dev/null +++ b/public/css/style.css @@ -0,0 +1,530 @@ +@font-face { + font-family: IRANSans; + src: url('../fonts/iransans.ttf'); +} + +* { + margin: 0; + padding: 0; + transition: all 0.4s; + -webkit-transition: all 0.4s; + font-family: IRANSans; +} +input{ + text-align: right; +} +*:focus { + outline: none; +} +a{ + text-decoration: none; +} +/**/ +.nevao_title_shadow { + -webkit-box-shadow: 0 2px 5px 0 rgba(5, 9, 61, 0.15); + box-shadow: 0 2px 5px 0 rgba(5, 9, 61, 0.15); +} + +.nevao_card_shadow { + -webkit-box-shadow: 0 1px 2.5px 0 rgba(0, 0, 0, .15); + box-shadow: 0 1px 2.5px 0 rgba(0, 0, 0, .15); + border-radius: 8px; + background-color: white; +} + +.nevao_card_shadow:hover { + -webkit-box-shadow: 0 2px 5px 0 rgba(5, 9, 61, 0.15); + box-shadow: 0 2px 5px 0 rgba(5, 9, 61, 0.15); +} + +.flex-grow-parent { + display: flex; + align-items: stretch; +} +._flex-grow-parent { + display: flex; + flex-direction: row-reverse; + align-items: stretch; +} + +.header_attrs { + height: 10vh; + background-color: #fff; +} + +.header_login_button { + flex-grow: 2; + display: flex; + align-items: center; + justify-content: flex-start; +} + +.header_login_button_child { + margin-left: 2vw; + border-radius: 8px; + cursor: pointer; + font-size: 85%; + display: flex; + width: 11vw; + height: 5vh; + align-items: center; + justify-items: stretch; +} + +.header_login_button_child_icon { + width: 2vw; + height: 3vh; + flex-grow: 1; + margin-left: 1vw; +} + +.header_login_button_child_text { + flex-grow: 2; + text-align: end; + margin-right: 1.5vw; + font-size: 80%; +} + +.header_title_parent { + flex-grow: 2; + display: flex; + align-items: center; + justify-content: flex-end; +} + +.header_title_text { + margin-right: 2vw; + font-size: 110%; +} + +.login_body_attrs { + height: 80vh; + display: flex; + justify-content: center; + align-items: center; + margin-top: 3px; +} + +.dashboard_body_attrs { + height: auto; + margin-top: 3px; + padding: 1vw; +} + +.body_login_card_parent { + background-color: #fff; + width: 24vw; + height: 70vh; + flex-direction: column; +} + +.body_login_card_title_parent { + flex-grow: 3; + display: flex; + align-items: center; + justify-content: flex-end; +} + +.body_login_card_title_text { + margin-right: 2vw; +} + +.body_login_card_body_parent { + flex-grow: 8; + flex-direction: column; +} + +.body_login_card_body_input1_parent { + flex-grow: 2; + flex-direction: column; +} + +.body_login_card_body_inputX_title_parent { + display: flex; + flex-grow: 1; + justify-content: flex-end; + align-items: flex-end; +} + +.body_login_card_body_inputX_title { + margin: 0.85vh 2vw; + font-size: 85%; +} + +.body_login_card_body_inputX_input_parent { + flex-grow: 1; +} + +.body_login_card_body_input2_parent { + flex-grow: 1; + flex-direction: column; +} + +.body_login_card_body_inputX_input { + border-radius: 8px; + height: 6vh; + flex-grow: 1; + align-self: flex-start; + margin: 0.85vh 2vw; + padding: 0 0.85vw; + text-align: left; +} + +.body_login_card_body_inputX_input::placeholder { + text-align: right; + font-size: 10px; +} + +.body_login_card_body_button1_parent { + flex-grow: 8; +} + +.body_login_card_body_button1 { + align-self: center; + flex-grow: 1; + margin: 0.85vh 2vw; + display: flex; + justify-content: center; + align-items: center; + color: #fff; + height: 6vh; + font-size: 85%; +} + +.body_login_card_footer_title { + font-size: 66%; +} + +.body_login_card_footer_parent { + flex-grow: 2; + display: flex; + justify-content: center; + align-items: center; +} + +.footer_attrs { + height: 10vh; + background-color: #fff; + margin-top: -3px; +} + +.footer_copyright_text_parent { + flex-grow: 2; + display: flex; + align-items: center; + justify-content: flex-start; +} + +.footer_copyright_text { + margin-left: 2vw; + font-size: 60%; + display: flex; + align-items: center; + justify-items: stretch; +} + +.footer_socialmedia_text_parent { + flex-grow: 2; + display: flex; + align-items: center; + justify-content: flex-end; +} + +.footer_socialmedia_text { + margin-right: 2vw; + font-size: 60%; +} + +#users_table_headers_parent_id { + margin-top: 2vh; + padding: 2vh 2vw; + padding-right: 0; +} + +#users_table_headers_parent_id>div { + text-align: center; + color: #757575; + font-size: 75%; +} + +#users_table_items_parent_id { + height: 10vh; + padding-left: 2vw; +} + +#users_table_items_parent_id>div { + display: flex; + justify-content: center; + align-items: center; + text-align: center; + color: #212121; + height: 100%; + font-size: 75%; +} + +.users_table_item_edit_button { + flex-grow: 1; + display: flex; + justify-content: center; + align-items: center; +} + +.users_table_item_remove_button { + flex-grow: 1; + display: flex; + justify-content: center; + align-items: center; +} + +.dashboard_panel_item_active { + background-color: #f7f7f7 !important; +} + +.dashboard_panel_item_active>div:first-child { + color: #f34662 !important; +} + +.dashboard_panel_item_active svg { + fill: #f34662 !important; +} + +#deads_table_headers_parent_id { + margin-top: 2vh; + padding: 2vh 2vw; + padding-right: 0; +} + +#deads_table_headers_parent_id>div { + text-align: center; + color: #757575; + font-size: 75%; +} + +#deads_table_items_parent_id { + height: 10vh; + padding-left: 2vw; +} + +#deads_table_items_parent_id>div { + display: flex; + justify-content: center; + align-items: center; + text-align: center; + color: #212121; + height: 100%; + font-size: 75%; +} + +#deads_pager_parent { + display: flex; + justify-content: space-around; + align-items: center; + height: 18vh; +} + +#deads_pager_parent>div { + width: 70%; + height: 30%; + display: flex; + justify-content: space-between; +} + +#deads_pager { + width: 40%; + display: flex; + align-items: center; + justify-content: space-around; + border-radius: 8px; +} + +#deads_pager>div { + display: flex; + justify-content: space-around; + align-items: center; + border-radius: 8px; + height: 100%; + width: 13%; +} + +#deads_pager>div:last-child { + border-right: none; +} + +#deads_pager>div>* { + text-decoration: none; + font-size: 75%; + color: #212121; + font-weight: bold; +} + +.deads_pager_active_item { + background-color: rgb(244, 69, 100); +} + +.deads_pager_active_item>* { + color: white !important +} + +.deads_pager_changer_button { + width: 15%; + display: flex; + align-items: center; + justify-content: space-evenly; + border-radius: 8px; + color: black; + font-size: 75%; +} + + +/* Zahra */ + +.dead_details { + background-color: white; + display: flex; + align-items: center; + font-size: 1vw; + height: 100vh; +} + +.dead_details_map { + margin-top: 2vw; + background-color: white; + height: 75vh; +} + +.dead_details_picture { + width: 50%; + margin: 2vw; + max-width: 32vw; + border-radius: 8px; + max-height: 47vw; + overflow: auto; +} + +.dead_details_picture>img { + width: 100%; + height: 100%; + border-radius: 8px; +} + +.dead_details_content { + width: 50%; + margin: 2vw; + height: 47vw; + display: flex; + flex-direction: column; +} + +.dead_details_content>div:nth-child(odd) { + background-color: rgb(249, 249, 249); +} + +.dead_details_content_cell { + height: 13%; + width: 100%; + display: flex; + border-radius: 8px; +} + +.dead_details_content_cell>div { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.dead_details_content_cell>div:nth-child(2) { + width: 40%; + color: rgb(164, 164, 164) +} + +.dead_details_content_cell>div:nth-child(1) { + width: 60%; +} + +#dead_details_content_empty_cell { + height: 11%; + width: 100%; + background-color: white; +} + +#dead_details_content_btn_cell { + height: 11%; + width: 100%; + border-radius: 8px; + display: flex; + justify-content: flex-end; +} + +#dead_details_content_btn_cell>div { + color: white; + background-color: rgb(243, 70, 98); + width: 40%; + height: 100%; + display: flex; + justify-content: space-around; + align-items: center; + border-radius: 8px; +} + + +/**/ + +.body_color { + background-color: #f8f8f8; +} + +.body_login_card_footer_color { + background-color: #f6f7f8; +} + +.alert_button_color { + background-color: #f34662; +} + +.alert_text_color { + color: #f34662; +} + +.default_border { + border: #BDBDBD 1px solid; +} + +.default_border_bottom { + border-bottom: #BDBDBD 1px solid; +} + +.default_border_top { + border-top: #BDBDBD 1px solid; +} + +.default_border_right { + border-right: #BDBDBD 1px solid; +} + +.primary_text_color { + color: #212121; +} + +.secondary_text_color { + color: #757575; +} + +.secondary_text_color::placeholder { + color: #757575; +} + +.ic_user_profile { + background: url('../icons/ic_user_icon_profile.svg') no-repeat; +} + +.flex-grow-6 { + flex-grow: 6; +} + +.flex-grow-3 { + flex-grow: 3; +} + +.cursor-pointer { + cursor: pointer; +} \ No newline at end of file diff --git a/public/fonts/iransans.ttf b/public/fonts/iransans.ttf new file mode 100644 index 0000000..41b28d6 Binary files /dev/null and b/public/fonts/iransans.ttf differ diff --git a/public/icons/ic_back_icon.svg b/public/icons/ic_back_icon.svg new file mode 100644 index 0000000..eb5c4bf --- /dev/null +++ b/public/icons/ic_back_icon.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icons/ic_marker.png b/public/icons/ic_marker.png new file mode 100644 index 0000000..4c71fd4 Binary files /dev/null and b/public/icons/ic_marker.png differ diff --git a/public/icons/ic_next_icon.svg b/public/icons/ic_next_icon.svg new file mode 100644 index 0000000..9c5cd99 --- /dev/null +++ b/public/icons/ic_next_icon.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icons/ic_user_icon_profile.svg b/public/icons/ic_user_icon_profile.svg new file mode 100644 index 0000000..65a96ab --- /dev/null +++ b/public/icons/ic_user_icon_profile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/20200613181437650_Luban_1592072045270.jpg b/public/images/20200613181437650_Luban_1592072045270.jpg new file mode 100644 index 0000000..d30b227 Binary files /dev/null and b/public/images/20200613181437650_Luban_1592072045270.jpg differ diff --git a/public/images/20200613182827256_IMG_20200613_225805632.jpg b/public/images/20200613182827256_IMG_20200613_225805632.jpg new file mode 100644 index 0000000..8b14c1b Binary files /dev/null and b/public/images/20200613182827256_IMG_20200613_225805632.jpg differ diff --git a/public/images/20200613192046677_Luban_1592075940087.jpg b/public/images/20200613192046677_Luban_1592075940087.jpg new file mode 100644 index 0000000..f22b900 Binary files /dev/null and b/public/images/20200613192046677_Luban_1592075940087.jpg differ diff --git a/public/images/20201217043342198_asd.png b/public/images/20201217043342198_asd.png new file mode 100644 index 0000000..c958d5c Binary files /dev/null and b/public/images/20201217043342198_asd.png differ diff --git a/public/images/20201217043404423_asd.png b/public/images/20201217043404423_asd.png new file mode 100644 index 0000000..c958d5c Binary files /dev/null and b/public/images/20201217043404423_asd.png differ diff --git a/public/images/20201217043658416_asd.png b/public/images/20201217043658416_asd.png new file mode 100644 index 0000000..c958d5c Binary files /dev/null and b/public/images/20201217043658416_asd.png differ diff --git a/public/images/grave.jpg b/public/images/grave.jpg new file mode 100644 index 0000000..5964913 Binary files /dev/null and b/public/images/grave.jpg differ diff --git a/public/js/jquery-3.5.1.min.js b/public/js/jquery-3.5.1.min.js new file mode 100644 index 0000000..b061403 --- /dev/null +++ b/public/js/jquery-3.5.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 + * http://babakhani.github.io/PersianWebToolkit/docs/persian-date/ + * Under MIT license + * + * + */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.persianDate=t():e.persianDate=t()}(this,function(){return function(e){function t(i){if(a[i])return a[i].exports;var r=a[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var a={};return t.m=e,t.c=a,t.i=function(e){return e},t.d=function(e,a,i){t.o(e,a)||Object.defineProperty(e,a,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var a=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(a,"a",a),a},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=8)}([function(e,t,a){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var a=0;a1&&void 0!==arguments[1]&&arguments[1];return e.toString().replace(/\d+/g,function(e){var a=[],i=[],r=void 0,n=void 0;for(r=0;r-1?e="year":n.month.indexOf(e)>-1?e="month":n.week.indexOf(e)>-1?e="week":n.day.indexOf(e)>-1?e="day":n.hour.indexOf(e)>-1?e="hour":n.minute.indexOf(e)>-1?e="minute":n.second.indexOf(e)>-1?e="second":n.millisecond.indexOf(e)>-1&&(e="millisecond"),{unit:e,value:t}}},{key:"absRound",value:function(e){return e<0?Math.ceil(e):Math.floor(e)}},{key:"absFloor",value:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)}}]),e}();e.exports=s},function(e,t,a){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var a=0;a1||6==e&&t<31||e<6&&e>=2}},{key:"isLeapYear",value:function(e){return void 0===e&&(e=this.year()),"persian"==this.calendarType&&"algorithmic"===this.leapYearMode?this.algorithms.leap_persian(e):"persian"==this.calendarType&&"astronomical"===this.leapYearMode?this.algorithms.leap_persiana(e):"gregorian"==this.calendarType?this.algorithms.leap_gregorian(e):void 0}},{key:"daysInMonth",value:function(e,t){var a=e||this.year(),i=t||this.month();return"persian"===this.calendarType?i<1||i>12?0:i<7?31:i<12?30:this.isLeapYear(a)?30:29:"gregorian"===this.calendarType?new Date(a,i,0).getDate():void 0}},{key:"toDate",value:function(){return this.State.gDate}},{key:"toArray",value:function(){return[this.year(),this.month(),this.date(),this.hour(),this.minute(),this.second(),this.millisecond()]}},{key:"formatNumber",value:function(){var t=void 0,a=this;return"_default"===this.formatPersian?t=void 0!==e&&void 0!==e.exports?!1!==a.formatPersian:!1!==window.formatPersian:!0===this.formatPersian?t=!0:!1===this.formatPersian?t=!1:Error('Invalid Config "formatPersian" !!'),t}},{key:"format",value:function(e){function t(e){switch(e){case"a":return n?r.hour>=12?"ب ظ":"ق ظ":r.hour>=12?"PM":"AM";case"H":return s(r.hour);case"HH":return s(l(r.hour,2));case"h":return s(r.hour%12);case"hh":return s(l(r.hour%12,2));case"m":case"mm":return s(l(r.minute,2));case"s":return s(r.second);case"ss":return s(l(r.second,2));case"D":return s(l(r.date));case"DD":return s(l(r.date,2));case"DDD":var t=a.startOf("year");return s(l(a.diff(t,"days"),3));case"DDDD":var i=a.startOf("year");return s(l(a.diff(i,"days"),3));case"d":return s(a.calendar().weekday);case"ddd":return a._weekNameShort(a.calendar().weekday);case"dddd":return a._weekName(a.calendar().weekday);case"ddddd":return a._dayName(a.calendar().day);case"dddddd":return a._weekNameMin(a.calendar().weekday);case"w":var o=a.startOf("year"),h=parseInt(a.diff(o,"days")/7)+1;return s(h);case"ww":var u=a.startOf("year"),d=l(parseInt(a.diff(u,"days")/7)+1,2);return s(d);case"M":return s(r.month);case"MM":return s(l(r.month,2));case"MMM":return a._monthNameShort(r.month);case"MMMM":return a._monthName(r.month);case"YY":var c=r.year.toString().split("");return s(c[2]+c[3]);case"YYYY":return s(r.year);case"Z":var y="+",f=Math.round(r.timezone/60),v=r.timezone%60;v<0&&(v*=-1),f<0&&(y="-",f*=-1);var m=y+l(f,2)+":"+l(v,2);return s(m);case"ZZ":var p="+",g=Math.round(r.timezone/60),_=r.timezone%60;_<0&&(_*=-1),g<0&&(p="-",g*=-1);var k=p+l(g,2)+""+l(_,2);return s(k);case"X":return a.unix();case"LT":return a.format("H:m a");case"L":return a.format("YYYY/MM/DD");case"l":return a.format("YYYY/M/D");case"LL":return a.format("MMMM DD YYYY");case"ll":return a.format("MMM DD YYYY");case"LLL":return a.format("MMMM YYYY DD H:m a");case"lll":return a.format("MMM YYYY DD H:m a");case"LLLL":return a.format("dddd D MMMM YYYY H:m a");case"llll":return a.format("ddd D MMM YYYY H:m a")}}if(this.State.isInvalidDate)return!1;var a=this,i=/([[^[]*])|(\\)?(Mo|MM?M?M?|Do|DD?D?D?|dddddd?|ddddd?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|SS?S?|zz?|ZZ?|X|LT|ll?l?l?|LL?L?L?)/g,r={year:a.year(),month:a.month(),hour:a.hours(),minute:a.minutes(),second:a.seconds(),date:a.date(),timezone:a.zone(),unix:a.unix()},n=a.formatNumber(),s=function(e){return n?d(e):e};return e?e.replace(i,t):"YYYY-MM-DD HH:mm:ss a".replace(i,t)}},{key:"add",value:function(e,a){if(0===a)return this;var i=c(e,a).unit,r=this.toArray();if(a=c(e,a).value,"year"===i){var n=r[2],s=this.daysInMonth(r[0]+a,r[1]);r[2]>s&&(n=s);return new t([r[0]+a,r[1],n,r[3],r[4],r[5],r[6],r[7]])}if("month"===i){var o=Math.floor(a/12),h=a-12*o,u=null;r[1]+h>12?(o+=1,u=r[1]+h-12):u=r[1]+h;var d=r[2],l=new t([r[0]+o,u,1,r[3],r[4],r[5],r[6],r[7]]).toArray(),y=this.daysInMonth(r[0]+o,u);return r[2]>y&&(d=y),new t([l[0],l[1],d,l[3],l[4],l[5],l[6],l[7]])}if("day"===i){return new t(new t(this.valueOf()).hour(12).valueOf()+864e5*a).hour(r[3])}if("week"===i){return new t(new t(this.valueOf()).hour(12).valueOf()+7*a*864e5).hour(r[3])}if("hour"===i){var f=this.valueOf()+36e5*a;return this.unix(f/1e3)}if("minute"===i){var v=this.valueOf()+6e4*a;return this.unix(v/1e3)}if("second"===i){var m=this.valueOf()+1e3*a;return this.unix(m/1e3)}if("millisecond"===i){var p=this.valueOf()+a;return this.unix(p/1e3)}return this._getSyncedClass(this.valueOf())}},{key:"subtract",value:function(e,t){return this.add(e,-1*t)}},{key:"isSameDay",value:function(e){return this&&e&&this.date()==e.date()&&this.year()==e.year()&&this.month()==e.month()}},{key:"isSameMonth",value:function(e){return this&&e&&this.year()==this.year()&&this.month()==e.month()}}],[{key:"rangeName",value:function(){var e=t,a=e.calendarType;return"fa"===e.localType?"persian"===a?y.persian:y.gregorian:"persian"===a?f.persian:f.gregorian}},{key:"toLeapYearMode",value:function(e){var a=t;return a.leapYearMode=e,a}},{key:"toCalendar",value:function(e){var a=t;return a.calendarType=e,a}},{key:"toLocale",value:function(e){var a=t;return a.localType=e,"fa"!==a.localType?a.formatPersian=!1:a.formatPersian="_default",a}},{key:"isPersianDate",value:function(e){return e instanceof t}},{key:"duration",value:function(e,t){return new h(e,t)}},{key:"isDuration",value:function(e){return e instanceof h}},{key:"unix",value:function(e){return e?new t(1e3*e):(new t).unix()}},{key:"getFirstWeekDayOfMonth",value:function(e,a){return new t([e,a,1]).day()}},{key:"utc",value:function(e){return e?new t(e).utc():(new t).utc()}},{key:"isSameDay",value:function(e,t){return e&&t&&e.date()==t.date()&&e.year()==t.year()&&e.month()==t.month()}},{key:"isSameMonth",value:function(e,t){return e&&t&&e.year()==t.year()&&e.month()==t.month()}}]),t}();e.exports=v},function(e,t,a){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var a=0;ae;)t--,a=this.tehran_equinox_jd(t);for(i=a-1;!(a<=e&&e365}},{key:"leap_persian",value:function(e){return 682*((e-(e>0?474:473))%2820+474+38)%2816<682}},{key:"persian_to_jd",value:function(e,t,a){var i=void 0,r=void 0;return i=e-(e>=0?474:473),r=474+this.ASTRO.mod(i,2820),a+(t<=7?31*(t-1):30*(t-1)+6)+Math.floor((682*r-110)/2816)+365*(r-1)+1029983*Math.floor(i/2820)+(this.PERSIAN_EPOCH-1)}},{key:"jd_to_persian",value:function(e){var t=void 0,a=void 0,i=void 0,r=void 0,n=void 0,s=void 0,o=void 0,h=void 0,u=void 0,d=void 0;return e=Math.floor(e)+.5,r=e-this.persian_to_jd(475,1,1),n=Math.floor(r/1029983),s=this.ASTRO.mod(r,1029983),1029982===s?o=2820:(h=Math.floor(s/366),u=this.ASTRO.mod(s,366),o=Math.floor((2134*h+2816*u+2815)/1028522)+h+1),t=o+2820*n+474,t<=0&&t--,d=e-this.persian_to_jd(t,1,1)+1,a=d<=186?Math.ceil(d/31):Math.ceil((d-6)/30),i=e-this.persian_to_jd(t,a,1)+1,[t,a,i]}},{key:"gWeekDayToPersian",value:function(e){return e+2===8?1:e+2===7?7:e+2}},{key:"updateFromGregorian",value:function(){var e=void 0,t=void 0,a=void 0,i=void 0,r=void 0,n=void 0,s=void 0,o=void 0,h=void 0,u=void 0;t=this.State.gregorian.year,a=this.State.gregorian.month,i=this.State.gregorian.day,r=0,n=0,s=0,this.State.gDate=new Date(t,a,i,this.State.gregorian.hour,this.State.gregorian.minute,this.State.gregorian.second,this.State.gregorian.millisecond),!1===this.parent._utcMode&&(this.State.zone=this.State.gDate.getTimezoneOffset()),this.State.gregorian.year=this.State.gDate.getFullYear(),this.State.gregorian.month=this.State.gDate.getMonth(),this.State.gregorian.day=this.State.gDate.getDate(),e=this.gregorian_to_jd(t,a+1,i)+Math.floor(s+60*(n+60*r)+.5)/86400,this.State.julianday=e,this.State.modifiedjulianday=e-this.JMJD,o=this.ASTRO.jwday(e),this.State.gregorian.weekday=o+1,this.State.gregorian.leap=this.NormLeap[this.leap_gregorian(t)?1:0],o=this.ASTRO.jwday(e),"persian"==this.parent.calendarType&&"algorithmic"==this.parent.leapYearMode&&(u=this.jd_to_persian(e),this.State.persian.year=u[0],this.State.persian.month=u[1]-1,this.State.persian.day=u[2],this.State.persian.weekday=this.gWeekDayToPersian(o),this.State.persian.leap=this.NormLeap[this.leap_persian(u[0])?1:0]),"persian"==this.parent.calendarType&&"astronomical"==this.parent.leapYearMode&&(u=this.jd_to_persiana(e),this.State.persianAstro.year=u[0],this.State.persianAstro.month=u[1]-1,this.State.persianAstro.day=u[2],this.State.persianAstro.weekday=this.gWeekDayToPersian(o),this.State.persianAstro.leap=this.NormLeap[this.leap_persiana(u[0])?1:0]),null!==this.State.gregserial.day&&(this.State.gregserial.day=e-this.J0000),h=864e5*(e-this.J1970),this.State.unixtime=Math.round(h/1e3)}},{key:"calcGregorian",value:function(e){(e[0]||0===e[0])&&(this.State.gregorian.year=e[0]),(e[1]||0===e[1])&&(this.State.gregorian.month=e[1]),(e[2]||0===e[2])&&(this.State.gregorian.day=e[2]),(e[3]||0===e[3])&&(this.State.gregorian.hour=e[3]),(e[4]||0===e[4])&&(this.State.gregorian.minute=e[4]),(e[5]||0===e[5])&&(this.State.gregorian.second=e[5]),(e[6]||0===e[6])&&(this.State.gregorian.millisecond=e[6]),this.updateFromGregorian()}},{key:"calcJulian",value:function(){var e=void 0,t=void 0;e=this.State.julianday,t=this.jd_to_gregorian(e),this.State.gregorian.year=t[0],this.State.gregorian.month=t[1]-1,this.State.gregorian.day=t[2],this.updateFromGregorian()}},{key:"setJulian",value:function(e){this.State.julianday=e,this.calcJulian()}},{key:"calcPersian",value:function(e){(e[0]||0===e[0])&&(this.State.persian.year=e[0]),(e[1]||0===e[1])&&(this.State.persian.month=e[1]),(e[2]||0===e[2])&&(this.State.persian.day=e[2]),(e[3]||0===e[3])&&(this.State.gregorian.hour=e[3]),(e[4]||0===e[4])&&(this.State.gregorian.minute=e[4]),(e[5]||0===e[5])&&(this.State.gregorian.second=e[5]),(e[6]||0===e[6])&&(this.State.gregorian.millisecond=e[6]),this.setJulian(this.persian_to_jd(this.State.persian.year,this.State.persian.month,this.State.persian.day))}},{key:"calcPersiana",value:function(e){(e[0]||0===e[0])&&(this.State.persianAstro.year=e[0]),(e[1]||0===e[1])&&(this.State.persianAstro.month=e[1]),(e[2]||0===e[2])&&(this.State.persianAstro.day=e[2]),(e[3]||0===e[3])&&(this.State.gregorian.hour=e[3]),(e[4]||0===e[4])&&(this.State.gregorian.minute=e[4]),(e[5]||0===e[5])&&(this.State.gregorian.second=e[5]),(e[6]||0===e[6])&&(this.State.gregorian.millisecond=e[6]),this.setJulian(this.persiana_to_jd(this.State.persianAstro.year,this.State.persianAstro.month,this.State.persianAstro.day+.5))}}]),e}();e.exports=o},function(e,t,a){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var a=0;a=1620&&e<=2e3?(i=Math.floor((e-1620)/2),a=(e-1620)/2-i,t=this.deltaTtab[i]+(this.deltaTtab[i+1]-this.deltaTtab[i])*a):(r=(e-2e3)/100,e<948?t=2177+497*r+44.1*r*r:(t=102+102*r+25.3*r*r,e>2e3&&e<2100&&(t+=.37*(e-2100)))),t}},{key:"equinox",value:function(e,t){var a=void 0,i=void 0,r=void 0,n=void 0,s=void 0,o=void 0,h=void 0,u=void 0,d=void 0;for(e<1e3?(s=this.JDE0tab1000,d=e/1e3):(s=this.JDE0tab2000,d=(e-2e3)/1e3),n=s[t][0]+s[t][1]*d+s[t][2]*d*d+s[t][3]*d*d*d+s[t][4]*d*d*d*d,h=(n-2451545)/36525,u=35999.373*h-2.47,a=1+.0334*this.dcos(u)+7e-4*this.dcos(2*u),o=0,i=r=0;i<24;i++)o+=this.EquinoxpTerms[r]*this.dcos(this.EquinoxpTerms[r+1]+this.EquinoxpTerms[r+2]*h),r+=3;return n+1e-5*o/a}},{key:"sunpos",value:function(e){var t=void 0,a=void 0,i=void 0,r=void 0,n=void 0,s=void 0,o=void 0,h=void 0,u=void 0,d=void 0,l=void 0,c=void 0,y=void 0,f=void 0,v=void 0,m=void 0,p=void 0;return t=(e-this.J2000)/this.JulianCentury,a=t*t,i=280.46646+36000.76983*t+3032e-7*a,i=this.fixangle(i),r=357.52911+35999.05029*t+-1537e-7*a,r=this.fixangle(r),n=.016708634+-42037e-9*t+-1.267e-7*a,s=(1.914602+-.004817*t+-14e-6*a)*this.dsin(r)+(.019993-101e-6*t)*this.dsin(2*r)+289e-6*this.dsin(3*r),o=i+s,h=r+s,u=1.000001018*(1-n*n)/(1+n*this.dcos(h)),d=125.04-1934.136*t,l=o+-.00569+-.00478*this.dsin(d),y=this.obliqeq(e),c=y+.00256*this.dcos(d),f=this.rtd(Math.atan2(this.dcos(y)*this.dsin(o),this.dcos(o))),f=this.fixangle(f),v=this.rtd(Math.asin(this.dsin(y)*this.dsin(o))),m=this.rtd(Math.atan2(this.dcos(c)*this.dsin(l),this.dcos(l))),m=this.fixangle(m),p=this.rtd(Math.asin(this.dsin(c)*this.dsin(l))),[i,r,n,s,o,h,u,l,f,v,m,p]}},{key:"equationOfTime",value:function(e){var t=void 0,a=void 0,i=void 0,r=void 0,n=void 0,s=void 0;return s=(e-this.J2000)/this.JulianMillennium,n=280.4664567+360007.6982779*s+.03032028*s*s+s*s*s/49931+-s*s*s*s/15300+-s*s*s*s*s/2e6,n=this.fixangle(n),t=this.sunpos(e)[10],a=this.nutation(e)[0],r=this.obliqeq(e)+this.nutation(e)[1],i=n+-.0057183+-t+a*this.dcos(r),i-=20*Math.floor(i/20),i/=1440}}]),e}();e.exports=n},function(e,t,a){"use strict";e.exports={durationUnit:{year:["y","years","year"],month:["M","months","month"],day:["d","days","day"],hour:["h","hours","hour"],minute:["m","minutes","minute"],second:["s","second","seconds"],millisecond:["ms","milliseconds","millisecond"],week:["W","w","weeks","week"]}}},function(e,t,a){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var a=0;a12)&&(t=!1),(e[2]<1||e[1]>31)&&(t=!1),(e[3]<0||e[3]>24)&&(t=!1),(e[4]<0||e[4]>60)&&(t=!1),(e[5]<0||e[5]>60)&&(t=!1),t}}}])}); \ No newline at end of file diff --git a/public/js/persian-datepicker.min.js b/public/js/persian-datepicker.min.js new file mode 100644 index 0000000..f6a04c5 --- /dev/null +++ b/public/js/persian-datepicker.min.js @@ -0,0 +1,12 @@ +/* +** persian-datepicker - v1.2.0 +** Reza Babakhani +** http://babakhani.github.io/PersianWebToolkit/docs/datepicker +** Under MIT license +*/ + +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.persianDatepicker=t():e.persianDatepicker=t()}(this,function(){return function(e){function t(n){if(i[n])return i[n].exports;var a=i[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}var i={};return t.m=e,t.c=i,t.i=function(e){return e},t.d=function(e,i,n){t.o(e,i)||Object.defineProperty(e,i,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var i=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(i,"a",i),i},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=5)}([function(e,t,i){"use strict";var n={debounce:function(e,t,i){var n;return function(){var a=this,o=arguments,s=function(){n=null,i||e.apply(a,o)},r=i&&!n;clearTimeout(n),n=setTimeout(s,t),r&&e.apply(a,o)}},log:function(e){console.log(e)},isMobile:function(){var e=!1;return function(t){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))&&(e=!0)}(navigator.userAgent||navigator.vendor||window.opera),e}(),debug:function(e,t){window.persianDatepickerDebug&&(e.constructor.name?console.log("Debug: "+e.constructor.name+" : "+t):console.log("Debug: "+t))},delay:function(e,t){clearTimeout(window.datepickerTimer),window.datepickerTimer=setTimeout(e,t)}};e.exports=n},function(e,t,i){"use strict";e.exports='\n
\n {{#navigator.enabled}}\n
\n
{{navigator.text.btnNextText}}
\n
{{navigator.switch.text}}
\n
{{navigator.text.btnPrevText}}
\n
\n {{/navigator.enabled}}\n
\n {{#days.enabled}}\n {{#days.viewMode}}\n
\n
\n
\n
\n
\n {{#weekdays.list}}\n
{{.}}
\n {{/weekdays.list}}\n
\n
\n \n \n {{#days.list}}\n \n \n {{#.}}\n {{#enabled}}\n \n {{/enabled}}\n {{^enabled}}\n \n {{/enabled}}\n \n {{/.}}\n \n {{/days.list}}\n \n
\n {{title}}\n {{#altCalendarShowHint}}\n {{alterCalTitle}}\n {{/altCalendarShowHint}}\n \n {{title}}\n {{#altCalendarShowHint}}\n {{alterCalTitle}}\n {{/altCalendarShowHint}}\n
\n
\n
\n {{/days.viewMode}}\n {{/days.enabled}}\n \n {{#month.enabled}}\n {{#month.viewMode}}\n
\n {{#month.list}}\n {{#enabled}} \n
{{title}}
\n {{/enabled}}\n {{^enabled}} \n
{{title}}
\n {{/enabled}}\n {{/month.list}}\n
\n {{/month.viewMode}}\n {{/month.enabled}}\n \n {{#year.enabled }}\n {{#year.viewMode }}\n
\n {{#year.list}}\n {{#enabled}}\n
{{title}}
\n {{/enabled}}\n {{^enabled}}\n
{{title}}
\n {{/enabled}} \n {{/year.list}}\n
\n {{/year.viewMode }}\n {{/year.enabled }}\n \n
\n {{#time}}\n {{#enabled}}\n
\n {{#hour.enabled}}\n
\n
\n \n
\n
\n
\n :\n
\n {{/hour.enabled}}\n {{#minute.enabled}}\n
\n
\n \n
\n
\n
\n :\n
\n {{/minute.enabled}}\n {{#second.enabled}}\n
\n
\n \n
\n
\n
\n
\n {{/second.enabled}}\n {{#meridian.enabled}}\n
\n
\n \n
\n
\n {{/meridian.enabled}}\n
\n {{/enabled}}\n {{/time}}\n \n {{#toolbox}}\n {{#enabled}}\n
\n {{#toolbox.submitButton.enabled}}\n
{{submitButtonText}}
\n {{/toolbox.submitButton.enabled}} \n {{#toolbox.todayButton.enabled}}\n
{{todayButtonText}}
\n {{/toolbox.todayButton.enabled}} \n {{#toolbox.calendarSwitch.enabled}}\n
{{calendarSwitchText}}
\n {{/toolbox.calendarSwitch.enabled}}\n
\n {{/enabled}}\n {{^enabled}}\n {{#onlyTimePicker}}\n
\n
{{submitButtonText}}
\n
\n {{/onlyTimePicker}}\n {{/enabled}}\n {{/toolbox}}\n
\n'},function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var i=0;i"},onNext:function(e){n.debug(e,"Event: onNext")},onPrev:function(e){n.debug(e,"Event: onPrev")},onSwitch:function(e){n.debug(e,"dayPicker Event: onSwitch")}},toolbox:{enabled:!0,text:{btnToday:"امروز"},submitButton:{enabled:n.isMobile,text:{fa:"تایید",en:"submit"},onSubmit:function(e){n.debug(e,"dayPicker Event: onSubmit")}},todayButton:{enabled:!0,text:{fa:"امروز",en:"today"},onToday:function(e){n.debug(e,"dayPicker Event: onToday")}},calendarSwitch:{enabled:!0,format:"MMMM",onSwitch:function(e){n.debug(e,"dayPicker Event: onSwitch")}},onToday:function(e){n.debug(e,"dayPicker Event: onToday")}},onlyTimePicker:!1,onlySelectOnDate:!0,checkDate:function(){return!0},checkMonth:function(){return!0},checkYear:function(){return!0},timePicker:{enabled:!1,step:1,hour:{enabled:!0,step:null},minute:{enabled:!0,step:null},second:{enabled:!0,step:null},meridian:{enabled:!1}},dayPicker:{enabled:!0,titleFormat:"YYYY MMMM",titleFormatter:function(e,t){return this.model.PersianDate.date([e,t]).format(this.model.options.dayPicker.titleFormat)},onSelect:function(e){n.debug(this,"dayPicker Event: onSelect : "+e)}},monthPicker:{enabled:!0,titleFormat:"YYYY",titleFormatter:function(e){return this.model.PersianDate.date(e).format(this.model.options.monthPicker.titleFormat)},onSelect:function(e){n.debug(this,"monthPicker Event: onSelect : "+e)}},yearPicker:{enabled:!0,titleFormat:"YYYY",titleFormatter:function(e){var t=12*parseInt(e/12,10),i=this.model.PersianDate.date([t]),n=this.model.PersianDate.date([t+11]);return i.format(this.model.options.yearPicker.titleFormat)+"-"+n.format(this.model.options.yearPicker.titleFormat)},onSelect:function(e){n.debug(this,"yearPicker Event: onSelect : "+e)}},onSelect:function(e){n.debug(this,"datepicker Event: onSelect : "+e)},onSet:function(e){n.debug(this,"datepicker Event: onSet : "+e)},position:"auto",onShow:function(e){n.debug(e,"Event: onShow ")},onHide:function(e){n.debug(e,"Event: onHide ")},onToggle:function(e){n.debug(e,"Event: onToggle ")},onDestroy:function(e){n.debug(e,"Event: onDestroy ")},autoClose:!1,template:null,observer:!1,inputDelay:800};e.exports=a},function(e,t,i){"use strict";var n=i(2);!function(e){e.fn.persianDatepicker=e.fn.pDatepicker=function(t){var i=Array.prototype.slice.call(arguments),a=null,o=this;return this||e.error("Invalid selector"),e(this).each(function(){var s=[],r=i.concat(s),l=e(this).data("datepicker"),d=null;l&&"string"==typeof r[0]?(d=r[0],a=l[d](r[0])):o.pDatePicker=new n(this,t)}),e(this).data("datepicker",o.pDatePicker),o.pDatePicker}}(jQuery)},function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var i=0;i0&&(a=!0)}).keyup(function(e){$.inArray(e.keyCode,s)>0&&(a=!1)}),$(t.elem).bind("keyup",function(t){var o=$(this),r=!1;(8===t.keyCode||t.keyCode<105&&t.keyCode>96||t.keyCode<58&&t.keyCode>47||a&&(86==t.keyCode||$.inArray(t.keyCode,s)>0))&&(r=!0),r&&(clearTimeout(i),i=setTimeout(function(){e(o)},n))}),$(t.elem).on("keydown",function(){clearTimeout(i)})}},{key:"_attachInputElementEvents",value:function(){var e=this,t=function t(i){$(i.target).is(e.elem)||$(i.target).is(e.model.view.$container)||0!=$(i.target).closest("#"+e.model.view.$container.attr("id")).length||$(i.target).is($(e.elem).children())||(e.model.api.hide(),$("body").unbind("click",t))};$(this.elem).on("focus click",o.debounce(function(i){return e.model.api.show(),!1===e.model.state.ui.isInline&&$("body").unbind("click",t).bind("click",t),o.isMobile&&$(this).blur(),i.stopPropagation(),!1},200)),$(this.elem).on("keydown",o.debounce(function(t){if(9===t.which)return e.model.api.hide(),!1},200))}},{key:"getInputPosition",value:function(){return $(this.elem).offset()}},{key:"getInputSize",value:function(){return{width:$(this.elem).outerWidth(),height:$(this.elem).outerHeight()}}},{key:"_updateAltField",value:function(e){var t=this.model.options.altFieldFormatter(e);$(this.model.options.altField).val(t)}},{key:"_updateInputField",value:function(e){var t=this.model.options.formatter(e);$(this.elem).val()!=t&&$(this.elem).val(t)}},{key:"update",value:function(e){0==this.model.options.initialValue&&this._firstUpdate?this._firstUpdate=!1:(this._updateInputField(e),this._updateAltField(e))}},{key:"getOnInitState",value:function(){var e=null,t=$(this.elem),i=void 0;if((i="INPUT"===t[0].nodeName?t[0].getAttribute("value"):t.data("date"))&&i.match("^([0-1][0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?$")){var n=i.split(":"),a=new Date;a.setHours(n[0]),a.setMinutes(n[1]),n[2]?a.setSeconds(n[2]):a.setSeconds(0),this.initialUnix=a.valueOf()}else{if("persian"===this.model.options.initialValueType&&i){var o=new s,r=new persianDate(o.parse(i)).valueOf();e=new Date(r).valueOf()}else"unix"===this.model.options.initialValueType&&i?e=parseInt(i):i&&(e=new Date(i).valueOf());this.initialUnix=e&&"undefined"!=e?e:(new Date).valueOf()}return this.initialUnix}}]),e}();e.exports=r},function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var i=0;i0?e.model.state.navigate("next"):e.model.state.navigate("prev"),e.model.view.render(),t.preventDefault()}),this.model.options.timePicker.enabled&&$("#"+e.model.view.id+" .time-segment").each(function(){o(this).wheel(function(t,i){var n=$(t.target),a=n.data("time-key")?n.data("time-key"):n.parents("[data-time-key]").data("time-key");a&&(i>0?e.timeUp(a):e.timeDown(a)),e.model.view.render(),t.preventDefault()})})}}},{key:"timeUp",value:function(e){if(void 0!=this.model.options.timePicker[e]){var t=void 0,i=void 0,n=this;"meridian"==e?(t=12,i="PM"==this.model.state.view.meridian?this.model.PersianDate.date(this.model.state.selected.unixDate).add("hour",t).valueOf():this.model.PersianDate.date(this.model.state.selected.unixDate).subtract("hour",t).valueOf(),this.model.state.meridianToggle()):(t=this.model.options.timePicker[e].step,i=this.model.PersianDate.date(this.model.state.selected.unixDate).add(e,t).valueOf()),this.model.state.setViewDateTime("unix",i),this.model.state.setSelectedDateTime("unix",i),this.model.view.renderTimePartial(),clearTimeout(this.scrollDelayTimeDown),this.scrollDelayTimeUp=setTimeout(function(){n.model.view.markSelectedDay()},300)}}},{key:"timeDown",value:function(e){if(void 0!=this.model.options.timePicker[e]){var t=void 0,i=void 0,n=this;"meridian"==e?(t=12,i="AM"==this.model.state.view.meridian?this.model.PersianDate.date(this.model.state.selected.unixDate).add("hour",t).valueOf():this.model.PersianDate.date(this.model.state.selected.unixDate).subtract("hour",t).valueOf(),this.model.state.meridianToggle()):(t=this.model.options.timePicker[e].step,i=this.model.PersianDate.date(this.model.state.selected.unixDate).subtract(e,t).valueOf()),this.model.state.setViewDateTime("unix",i),this.model.state.setSelectedDateTime("unix",i),this.model.view.renderTimePartial(),clearTimeout(this.scrollDelayTimeDown),this.scrollDelayTimeDown=setTimeout(function(){n.model.view.markSelectedDay()},300)}}},{key:"_attachEvents",value:function(){var e=this;this.model.options.navigator.enabled&&$(document).on("click","#"+e.model.view.id+" .pwt-btn",function(){$(this).is(".pwt-btn-next")?(e.model.state.navigate("next"),e.model.view.render(),e.model.options.navigator.onNext(e.model)):$(this).is(".pwt-btn-switch")?(e.model.state.switchViewMode(),e.model.view.render(),e.model.options.navigator.onSwitch(e.model)):$(this).is(".pwt-btn-prev")&&(e.model.state.navigate("prev"),e.model.view.render(),e.model.options.navigator.onPrev(e.model))}),this.model.options.timePicker.enabled&&($(document).on("click","#"+e.model.view.id+" .up-btn",function(){var t=$(this).data("time-key");e.timeUp(t),e.model.options.onSelect(e.model.state.selected.unixDate)}),$(document).on("click","#"+e.model.view.id+" .down-btn",function(){var t=$(this).data("time-key");e.timeDown(t),e.model.options.onSelect(e.model.state.selected.unixDate)})),this.model.options.dayPicker.enabled&&$(document).on("click","#"+e.model.view.id+" .datepicker-day-view td:not(.disabled)",function(){var t=$(this).data("unix"),i=void 0;e.model.state.setSelectedDateTime("unix",t),i=e.model.state.selected.month!==e.model.state.view.month,e.model.state.setViewDateTime("unix",e.model.state.selected.unixDate),e.model.options.autoClose&&(e.model.view.hide(),e.model.options.onHide(e)),i?e.model.view.render():e.model.view.markSelectedDay(),e.model.options.dayPicker.onSelect(t),e.model.options.onSelect(t)}),this.model.options.monthPicker.enabled&&$(document).on("click","#"+e.model.view.id+" .datepicker-month-view .month-item:not(.month-item-disable)",function(){var t=$(this).data("month"),i=$(this).data("year");e.model.state.switchViewModeTo("day"),e.model.options.onlySelectOnDate||(e.model.state.setSelectedDateTime("year",i),e.model.state.setSelectedDateTime("month",t),e.model.options.autoClose&&(e.model.view.hide(),e.model.options.onHide(e))),e.model.state.setViewDateTime("month",t),e.model.view.render(),e.model.options.monthPicker.onSelect(t),e.model.options.onSelect(e.model.state.selected.unixDate)}),this.model.options.yearPicker.enabled&&$(document).on("click","#"+e.model.view.id+" .datepicker-year-view .year-item:not(.year-item-disable)",function(){var t=$(this).data("year");e.model.state.switchViewModeTo("month"),e.model.options.onlySelectOnDate||(e.model.state.setSelectedDateTime("year",t),e.model.options.autoClose&&(e.model.view.hide(),e.model.options.onHide(e))),e.model.state.setViewDateTime("year",t),e.model.view.render(),e.model.options.yearPicker.onSelect(t),e.model.options.onSelect(e.model.state.selected.unixDate)})}}]),e}();e.exports=s},function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var i=0;i0?t.options.viewMode:this.viewModeList[0],this.viewModeIndex=this.viewModeList.indexOf(t.options.viewMode)>0?this.viewModeList.indexOf(t.options.viewMode):0,this.filterDate={start:{year:0,month:0,date:0,hour:0,minute:0,second:0,unixDate:0},end:{year:0,month:0,date:0,hour:0,minute:0,second:0,unixDate:0}},this.view={year:0,month:0,date:0,hour:0,minute:0,second:0,unixDate:0,dateObject:null,meridian:"AM"},this.selected={year:0,month:0,date:0,hour:0,hour12:0,minute:0,second:0,unixDate:0,dateObject:null},this.ui={isOpen:!1,isInline:this.model.options.inline},this._setFilterDate(this.model.options.minDate,this.model.options.maxDate),this}return a(e,[{key:"_setFilterDate",value:function(e,t){var i=this;e||(e=-2e15),t||(t=2e15);var n=i.model.PersianDate.date(e);i.filterDate.start.unixDate=e,i.filterDate.start.hour=n.hour(),i.filterDate.start.minute=n.minute(),i.filterDate.start.second=n.second(),i.filterDate.start.month=n.month(),i.filterDate.start.date=n.date(),i.filterDate.start.year=n.year();var a=i.model.PersianDate.date(t);i.filterDate.end.unixDate=t,i.filterDate.end.hour=a.hour(),i.filterDate.end.minute=a.minute(),i.filterDate.end.second=a.second(),i.filterDate.end.month=a.month(),i.filterDate.end.date=a.date(),i.filterDate.end.year=a.year()}},{key:"navigate",value:function(e){if("next"==e){if("year"==this.viewMode&&this.setViewDateTime("year",this.view.year+12),"month"==this.viewMode){var t=this.view.year+1;0===t&&(t=1),this.setViewDateTime("year",t)}if("day"==this.viewMode){var i=this.view.year+1;0===i&&(i=1),this.view.month+1==13?(this.setViewDateTime("year",i),this.setViewDateTime("month",1)):this.setViewDateTime("month",this.view.month+1)}}else{if("year"==this.viewMode&&this.setViewDateTime("year",this.view.year-12),"month"==this.viewMode){var n=this.view.year-1;0===n&&(n=-1),this.setViewDateTime("year",n)}if("day"==this.viewMode)if(this.view.month-1<=0){var a=this.view.year-1;0===a&&(a=-1),this.setViewDateTime("year",a),this.setViewDateTime("month",12)}else this.setViewDateTime("month",this.view.month-1)}}},{key:"switchViewMode",value:function(){return this.viewModeIndex=this.viewModeIndex+1>=this.viewModeList.length?0:this.viewModeIndex+1,this.viewMode=this.viewModeList[this.viewModeIndex]?this.viewModeList[this.viewModeIndex]:this.viewModeList[0],this._setViewDateTimeUnix(),this}},{key:"switchViewModeTo",value:function(e){this.viewModeList.indexOf(e)>=0&&(this.viewMode=e,this.viewModeIndex=this.viewModeList.indexOf(e))}},{key:"setSelectedDateTime",value:function(e,t){var i=this;switch(e){case"unix":i.selected.unixDate=t;var n=this.model.PersianDate.date(t);i.selected.year=n.year(),i.selected.month=n.month(),i.selected.date=n.date(),i.selected.hour=n.hour(),i.selected.hour12=n.format("hh"),i.selected.minute=n.minute(),i.selected.second=n.second();break;case"year":this.selected.year=t;break;case"month":this.selected.month=t;break;case"date":this.selected.date=t;break;case"hour":this.selected.hour=t;break;case"minute":this.selected.minute=t;break;case"second":this.selected.second=t}return i._updateSelectedUnix(),this}},{key:"_updateSelectedUnix",value:function(){return this.selected.dateObject=this.model.PersianDate.date([this.selected.year,this.selected.month,this.selected.date,this.view.hour,this.view.minute,this.view.second]),this.selected.unixDate=this.selected.dateObject.valueOf(),this.model.updateInput(this.selected.unixDate),this}},{key:"_setViewDateTimeUnix",value:function(){var e=(new persianDate).daysInMonth(this.view.year,this.view.month);return this.view.date>e&&(this.view.date=e),this.view.dateObject=this.model.PersianDate.date([this.view.year,this.view.month,this.view.date,this.view.hour,this.view.minute,this.view.second]),this.view.year=this.view.dateObject.year(),this.view.month=this.view.dateObject.month(),this.view.date=this.view.dateObject.date(),this.view.hour=this.view.dateObject.hour(),this.view.hour12=this.view.dateObject.format("hh"),this.view.minute=this.view.dateObject.minute(),this.view.second=this.view.dateObject.second(),this.view.unixDate=this.view.dateObject.valueOf(),this}},{key:"setViewDateTime",value:function(e,t){var i=this;switch(e){case"unix":var n=this.model.PersianDate.date(t);i.view.year=n.year(),i.view.month=n.month(),i.view.date=n.date(),i.view.hour=n.hour(),i.view.minute=n.minute(),i.view.second=n.second();break;case"year":this.view.year=t;break;case"month":this.view.month=t;break;case"date":this.view.date=t;break;case"hour":this.view.hour=t;break;case"minute":this.view.minute=t;break;case"second":this.view.second=t}return this._setViewDateTimeUnix(),this}},{key:"meridianToggle",value:function(){var e=this;"AM"===e.view.meridian?e.view.meridian="PM":"PM"===e.view.meridian&&(e.view.meridian="AM")}}]),e}();e.exports=o},function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var i=0;i').appendTo(i.model.inputElement):(this.$container=$('
').appendTo("body"),this.hide(),this.setPickerBoxPosition(),this.addCompatibilityClass()),this}return s(e,[{key:"addCompatibilityClass",value:function(){l.isMobile&&this.model.options.responsive&&this.$container.addClass("pwt-mobile-view")}},{key:"destroy",value:function(){this.$container.remove()}},{key:"setPickerBoxPosition",value:function(){var e=this.model.input.getInputPosition(),t=this.model.input.getInputSize();if(l.isMobile&&this.model.options.responsive)return!1;"auto"===this.model.options.position?this.$container.css({left:e.left+"px",top:t.height+e.top+"px"}):this.$container.css({left:this.model.options.position[1]+e.left+"px",top:this.model.options.position[0]+e.top+"px"})}},{key:"show",value:function(){this.$container.removeClass("pwt-hide"),this.setPickerBoxPosition()}},{key:"hide",value:function(){this.$container.addClass("pwt-hide")}},{key:"toggle",value:function(){this.$container.toggleClass("pwt-hide")}},{key:"_getNavSwitchText",value:function(e){var t=void 0;return"day"==this.model.state.viewMode?t=this.model.options.dayPicker.titleFormatter.call(this,e.year,e.month):"month"==this.model.state.viewMode?t=this.model.options.monthPicker.titleFormatter.call(this,e.dateObject.valueOf()):"year"==this.model.state.viewMode&&(t=this.model.options.yearPicker.titleFormatter.call(this,e.year)),t}},{key:"checkYearAccess",value:function(e){if(this.model.state.filetredDate){var t=this.model.state.filterDate.start.year,i=this.model.state.filterDate.end.year;if(t&&ei)return!1}return this.model.options.checkYear(e)}},{key:"_getYearViewModel",value:function(e){var t=this,i=this.model.options.yearPicker.enabled;if(!i)return{enabled:!1};var a=[].concat(n(Array(this.yearsViewCount).keys())).map(function(i){return i+parseInt(e.year/t.yearsViewCount)*t.yearsViewCount}),o=[],s=this.model.PersianDate.date(),r=!0,l=!1,d=void 0;try{for(var c,u=a[Symbol.iterator]();!(r=(c=u.next()).done);r=!0){var h=c.value;s.year([h]),o.push({title:s.format("YYYY"),enabled:this.checkYearAccess(h),dataYear:h,selected:this.model.state.selected.year==h})}}catch(e){l=!0,d=e}finally{try{!r&&u.return&&u.return()}finally{if(l)throw d}}return{enabled:i,viewMode:"year"==this.model.state.viewMode,list:o}}},{key:"checkMonthAccess",value:function(e){e+=1;var t=this.model.state.view.year;if(this.model.state.filetredDate){var i=this.model.state.filterDate.start.month,n=this.model.state.filterDate.end.month,a=this.model.state.filterDate.start.year,o=this.model.state.filterDate.end.year;if(i&&n&&(t==o&&e>n||t>o)||t==a&&en||t>o))return!1;if(i&&(t==a&&e=t.minDate&&e<=t.maxDate))return!1}else if(t.minDate){if(t.minDate=t.model.PersianDate.date(t.minDate).startOf("day").valueOf(),e<=t.minDate)return!1}else if(t.maxDate&&(t.maxDate=t.model.PersianDate.date(t.maxDate).endOf("day").valueOf(),e>=t.maxDate))return!1;return t.model.options.checkDate(e)}},{key:"_getDayViewModel",value:function(){if("day"!=this.model.state.viewMode)return[];var e=this.model.options.dayPicker.enabled;if(!e)return{enabled:!1};var t=this.model.state.view.month,i=this.model.state.view.year,n=this.model.PersianDate.date(),a=n.daysInMonth(i,t),s=n.getFirstWeekDayOfMonth(i,t)-1,r=[],l=0,d=0,c=[["null","null","null","null","null","null","null"],["null","null","null","null","null","null","null"],["null","null","null","null","null","null","null"],["null","null","null","null","null","null","null"],["null","null","null","null","null","null","null"],["null","null","null","null","null","null","null"]],u=this._getAnotherCalendar(),h=!0,m=!1,v=void 0;try{for(var p,f=c.entries()[Symbol.iterator]();!(h=(p=f.next()).done);h=!0){var w=o(p.value,2),y=w[0],b=w[1];r[y]=[];var k=!0,g=!1,D=void 0;try{for(var x,P=b.entries()[Symbol.iterator]();!(k=(x=P.next()).done);k=!0){var T=o(x.value,1),M=T[0],S=void 0,O=void 0;0===y&&M=s||y<=5&&l=9||(n.SUPPORT=void 0!==i.onmousewheel?"mousewheel":"DOMMouseScroll"),t.addEventListener||(n.ADD_EVENT="attachEvent",n.REMOVE_EVENT="detachEvent",n.PREFIX="on")},event:function(e){var t={originalEvent:e,target:e.target||e.srcElement,type:"wheel",deltaMode:"MozMousePixelScroll"===e.type?0:1,deltaX:0,deltaZ:0,preventDefault:function(){e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){e.stopPropagation?e.stopPropagation():e.cancelBubble=!1}};return e.wheelDelta&&(t.deltaY=-.025*e.wheelDelta),e.wheelDeltaX&&(t.deltaX=-.025*e.wheelDeltaX),e.detail&&(t.deltaY=e.detail),t},delta:function(e){var t,i=0,n=0,s=0,r=0,l=0;return e.deltaY&&(s=-1*e.deltaY,i=s),e.deltaX&&(n=e.deltaX,i=-1*n),e.wheelDelta&&(i=e.wheelDelta),e.wheelDeltaY&&(s=e.wheelDeltaY),e.wheelDeltaX&&(n=-1*e.wheelDeltaX),e.detail&&(i=-1*e.detail),0===i?[0,0,0]:(r=Math.abs(i),(!a||r0?"floor":"ceil",i=Math[t](i/a),n=Math[t](n/o),s=Math[t](s/o),[i,n,s])}},"function"==typeof t.define&&t.define.amd?t.define("hamster",[],function(){return n}):e.exports=n}(window,window.document)},function(e,t,i){var n,a,o;/*! + * mustache.js - Logic-less {{mustache}} templates with JavaScript + * http://github.com/janl/mustache.js + */ +!function(i,s){"object"==typeof t&&t&&"string"!=typeof t.nodeName?s(t):(a=[t],n=s,void 0!==(o="function"==typeof n?n.apply(t,a):n)&&(e.exports=o))}(0,function(e){function t(e){return"function"==typeof e}function i(e){return f(e)?"array":typeof e}function n(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function a(e,t){return null!=e&&"object"==typeof e&&t in e}function o(e,t){return null!=e&&"object"!=typeof e&&e.hasOwnProperty&&e.hasOwnProperty(t)}function s(e,t){return w.call(e,t)}function r(e){return!s(y,e)}function l(e){return String(e).replace(/[&<>"'`=\/]/g,function(e){return b[e]})}function d(t,i){function a(e){if("string"==typeof e&&(e=e.split(g,2)),!f(e)||2!==e.length)throw new Error("Invalid tags: "+e);o=new RegExp(n(e[0])+"\\s*"),s=new RegExp("\\s*"+n(e[1])),l=new RegExp("\\s*"+n("}"+e[1]))}if(!t)return[];var o,s,l,d=[],m=[],v=[],p=!1,w=!1;a(i||e.tags);for(var y,b,T,M,S,O,E=new h(t);!E.eos();){if(y=E.pos,T=E.scanUntil(o))for(var $=0,C=T.length;$0?o[o.length-1][4]:n;break;default:a.push(t)}return n}function h(e){this.string=e,this.tail=e,this.pos=0}function m(e,t){this.view=e,this.cache={".":this.view},this.parent=t}function v(){this.cache={}}var p=Object.prototype.toString,f=Array.isArray||function(e){return"[object Array]"===p.call(e)},w=RegExp.prototype.test,y=/\S/,b={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="},k=/\s*/,g=/\s+/,D=/\s*=/,x=/\s*\}/,P=/#|\^|\/|>|\{|&|=|!/;h.prototype.eos=function(){return""===this.tail},h.prototype.scan=function(e){var t=this.tail.match(e);if(!t||0!==t.index)return"";var i=t[0];return this.tail=this.tail.substring(i.length),this.pos+=i.length,i},h.prototype.scanUntil=function(e){var t,i=this.tail.search(e);switch(i){case-1:t=this.tail,this.tail="";break;case 0:t="";break;default:t=this.tail.substring(0,i),this.tail=this.tail.substring(i)}return this.pos+=t.length,t},m.prototype.push=function(e){return new m(e,this)},m.prototype.lookup=function(e){var i,n=this.cache;if(n.hasOwnProperty(e))i=n[e];else{for(var s,r,l,d=this,c=!1;d;){if(e.indexOf(".")>0)for(s=d.view,r=e.split("."),l=0;null!=s&&l"===s?r=this.renderPartial(o,t,i,a):"&"===s?r=this.unescapedValue(o,t):"name"===s?r=this.escapedValue(o,t):"text"===s&&(r=this.rawValue(o)),void 0!==r&&(l+=r);return l},v.prototype.renderSection=function(e,i,n,a){function o(e){return s.render(e,i,n)}var s=this,r="",l=i.lookup(e[1]);if(l){if(f(l))for(var d=0,c=l.length;d { + window.location.href = "/dashboard"; + }; + document.getElementById("dashboard_item2").onclick = () => { + window.location.href = "/deads"; + }; + document.getElementById("dashboard_item3").onclick = () => { + window.location.href = "/users"; + }; + document.getElementById("dashboard_item4").onclick = () => { + window.location.href = "/users/editme"; + }; + document.getElementById("dashboard_item5").onclick = () => { + window.location.href = "/logout"; + }; + document.getElementById("dashboard_item6").onclick = () => { + window.location.href = "/states"; + }; + document.getElementById("dashboard_item7").onclick = () => { + window.location.href = "/deadtypes"; + }; + document.getElementById("dashboard_item8").onclick = () => { + window.location.href = "/costs"; + }; + document.getElementById("dashboard_item9").onclick = () => { + window.location.href = "/reports"; + }; + document.getElementById("dashboard_item10").onclick = () => { + window.location.href = "/statements/add"; + }; + document.getElementById("dashboard_item11").onclick = () => { + window.location.href = "/setting"; + }; + Array.prototype.forEach.call( + document.getElementsByClassName("toPersian"), + (el) => (el.innerText = toFarsiNumber(el.innerText)) + ); + Array.prototype.forEach.call( + document.getElementsByClassName("toPrice"), + (el) => (el.innerText = PersianPriceSpacer(el.innerText, 3)) + ); + Array.prototype.forEach.call( + document.getElementsByClassName("onInputPrice"), + (el) => { + el.addEventListener("input", () => { + el.value = PersianPriceSpacer(el.value, 3); + }); + } + ); +} +function usersPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + // + let popup = document.getElementById("popup"); + let popupContent = document.getElementById("popup_content_1"); + document.getElementById("add").onclick = (e) => { + e.preventDefault(); + showPopup(popup, popupContent); + }; + let onPopupContent = false; + popupContent.onmouseenter = () => { + onPopupContent = true; + }; + popupContent.onmouseleave = () => { + onPopupContent = false; + }; + popup.onclick = () => { + if (!onPopupContent) hiddenPopup(popup, popupContent); + }; + document.getElementById("popup_content_1_btn1").onclick = () => { + document.getElementById("popup_content_1_form1").submit(); + hiddenPopup(popup, popupContent); + }; + document.getElementById("popup_content_1_btn2").onclick = () => { + hiddenPopup(popup, popupContent); + }; + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_edit_button"), + (element) => { + element.onclick = (e) => { + showPopup(popup, popupContent, JSON.parse(element.id)); + }; + } + ); + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_remove_button"), + (element) => { + element.onclick = (e) => { + document.getElementById("user_remove_item_id").value = element.id; + document.getElementById("user_remove_item_form").submit(); + }; + } + ); + // + document.title = "کارمند ها"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(6)" + ).className += " dashboard_panel_item_active"; +} +function dashboardPage() { + setLayoutProperties( + JSON.parse(document.getElementById("LoggedOnUser").title) + ); + document.title = "داشبورد"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(1)" + ).className += " dashboard_panel_item_active"; + axios({ + method: "get", + url: "/allCount", + }) + .then((value) => { + if (value.data.code == "200") { + document.getElementById("AllCount").innerText = toFarsiNumber( + value.data.AllCounted + ); + document.getElementById("AllCounted").innerText = toFarsiNumber( + value.data.AllCount - value.data.AllCounted + ); + } + return axios({ method: "get", url: "/monthCount" }); + }) + .then((value) => { + if (value.data.code == "200") { + document.getElementById("MonthCount").innerText = toFarsiNumber( + value.data.MonthCounted + ); + document.getElementById("MonthCounted").innerText = toFarsiNumber( + value.data.MonthCount - value.data.MonthCounted + ); + } + return axios({ method: "get", url: "/weekCount" }); + }) + .then((value) => { + if (value.data.code == "200") { + document.getElementById("WeekCount").innerText = toFarsiNumber( + value.data.WeekCounted + ); + document.getElementById("WeekCounted").innerText = toFarsiNumber( + value.data.WeekCount - value.data.WeekCounted + ); + } + return axios({ method: "get", url: "/dayCount" }); + }) + .then((value) => { + if (value.data.code == "200") { + document.getElementById("DayCount").innerText = toFarsiNumber( + value.data.DayCounted + ); + document.getElementById("DayCounted").innerText = toFarsiNumber( + value.data.DayCount - value.data.DayCounted + ); + } + }); +} +function editProfilePage() { + let loggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(loggedUser); + document.title = "ویرایش پروفایل"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(7)" + ).className += " dashboard_panel_item_active"; + document.getElementById("username").value = loggedUser.Username; + document.getElementById("name").value = loggedUser.Name; + document.getElementById("password").value = ""; + document.getElementById("_id").value = loggedUser._id; + // + document.getElementById("edit_profile_form_submit").onclick = () => { + document.getElementById("edit_profile_form").submit(); + }; +} +function editDeadPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + document.getElementById("popup_content_1_btn1").onclick = () => { + if ( + (document.getElementById("fullName").value + "").split(" ").length == 1 + ) { + alert("بین نام و نام خانوادگی فاصله دهید"); + } else { + document.getElementById("deads_edit_form").submit(); + } + }; + document.getElementById("popup_content_2_btn1").onclick = () => { + if ( + (document.getElementById("fullName").value + "").split(" ").length == 1 + ) { + alert("بین نام و نام خانوادگی فاصله دهید"); + } else { + document.getElementById("dirType").value = "1"; + document.getElementById("deads_edit_form").submit(); + } + }; + + document.title = "ویرایش فوتی"; +} +function addDeadPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + document.getElementById("popup_content_1_btn1").onclick = () => { + if ( + (document.getElementById("fullName").value + "").split(" ").length == 1 + ) { + alert("بین نام و نام خانوادگی فاصله دهید"); + } else { + document.getElementById("deads_add_form").submit(); + } + }; + document.getElementById("popup_content_2_btn1").onclick = () => { + if ( + (document.getElementById("fullName").value + "").split(" ").length == 1 + ) { + alert("بین نام و نام خانوادگی فاصله دهید"); + } else { + document.getElementById("dirType").value = "1"; + document.getElementById("deads_add_form").submit(); + } + }; + + document.title = "افزودن فوتی"; +} +function deadsPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_remove_button"), + (element) => { + element.onclick = () => { + document.getElementById("user_remove_item_id").value = element.id; + document.getElementById("user_remove_item_form").submit(); + }; + } + ); + + document.getElementById("pager").oninput = (el1) => { + const el = el1.target; + const number = el.value != "" ? Number(el.value) : "FALSE"; + if (number != "FALSE" && (number > el.max || number < el.min)) { + if (number > el.max) el.value = el.max; + else if (number < el.min) el.value = el.min; + } + }; + document.getElementById("pagerOnClick").onclick = (el) => { + el.preventDefault(); + const number = document.getElementById("pager").value; + const urlParams = new URLSearchParams(window.location.search); + + if (urlParams.get("q")) + window.location.search = "q=" + urlParams.get("q") + "&" + "id=" + number; + else window.location.search = "id=" + number; + }; + document.getElementById("lastPage").onclick = () => { + const widget = document.getElementById("pager"); + const number = Number(widget.value); + const min = Number(widget.min); + const urlParams = new URLSearchParams(window.location.search); + + if (number - 1 >= min) { + if (urlParams.get("q")) + window.location.search = + "q=" + urlParams.get("q") + "&" + "id=" + (number - 1); + else window.location.search = "id=" + (number - 1); + } + }; + document.getElementById("nextPage").onclick = () => { + const widget = document.getElementById("pager"); + const number = Number(widget.value); + const max = Number(widget.max); + const urlParams = new URLSearchParams(window.location.search); + + if (number + 1 <= max) { + if (urlParams.get("q")) + window.location.search = + "q=" + urlParams.get("q") + "&" + "id=" + (number + 1); + else window.location.search = "id=" + (number + 1); + } + }; + document.title = "فوتی ها"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(2)" + ).className += " dashboard_panel_item_active"; +} +function deadPage() { + setLayoutProperties( + JSON.parse(document.getElementById("LoggedOnUser").title) + ); + document.title = "جزییات فوتی"; +} +function settingsPage() { + setLayoutProperties( + JSON.parse(document.getElementById("LoggedOnUser").title) + ); + document.title = "تنظیمات"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(10)" + ).className += " dashboard_panel_item_active"; +} +function statementsAddPage() { + setLayoutProperties( + JSON.parse(document.getElementById("LoggedOnUser").title) + ); + document.title = "اعلامیه ها"; + document.getElementById("statement_add_submit").onclick = () => { + const nI = document.getElementById("nI").value; + axios({ + method: "post", + url: "/statements/getInfo", + data: { + nI: nI, + }, + }).then((value) => { + if (value.data.code == "200") { + document.getElementById( + "deadData" + ).textContent = `نام و نام خانوادگی متوفی: \t${value.data.dead.FullName} \t\t\t\t نام پدر متوفی: \t${value.data.dead.FatherName}`; + document.getElementById("statements_add_nI_hidden").value = nI; + document.getElementById("statements_add_form_holder").style.display = + "block"; + } + }); + }; + document.getElementById("statements_add_pic").onchange = (e) => { + if (e.target.files[0].size > 1097152) { + alert("سایز تصویر اعلامیه بسیار بزرگ است"); + e.target.value = ""; + } + }; + const m = new URLSearchParams(window.location.search).get("m"); + if (m) { + if (m == "200") { + alert("اپلود با موفقیت انجام شد"); + } else if (m == "500") { + alert("مشکلی در آپلود به وجود آمد"); + } + } + document.querySelector( + "#dashboard_items_parent > div:nth-child(9)" + ).className += " dashboard_panel_item_active"; +} +function statesPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + let popup = document.getElementById("popup2"); + let popupContent = document.getElementById("popup_content_2"); + document.getElementById("add").onclick = (e) => { + e.preventDefault(); + showPopup2(popup, popupContent); + }; + let onPopupContent = false; + popupContent.onmouseenter = () => { + onPopupContent = true; + }; + popupContent.onmouseleave = () => { + onPopupContent = false; + }; + popup.onclick = () => { + if (!onPopupContent) hiddenPopup(popup, popupContent); + }; + document.getElementById("popup_content_2_btn1").onclick = () => { + document.getElementById("popup_content_2_form1").submit(); + hiddenPopup(popup, popupContent); + }; + document.getElementById("popup_content_2_btn2").onclick = () => { + hiddenPopup(popup, popupContent); + }; + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_edit_button"), + (element) => { + element.onclick = (e) => { + showPopup2(popup, popupContent, JSON.parse(element.id)); + }; + } + ); + + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_remove_button"), + (element) => { + element.onclick = (e) => { + document.getElementById("user_remove_item_id").value = element.id; + document.getElementById("user_remove_item_form").submit(); + }; + } + ); + + document.title = "قطعه ها"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(3)" + ).className += " dashboard_panel_item_active"; +} +function deadtypesPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + let popup = document.getElementById("popup3"); + let popupContent = document.getElementById("popup_content_3"); + document.getElementById("add").onclick = (e) => { + e.preventDefault(); + showPopup3(popup, popupContent); + }; + let onPopupContent = false; + popupContent.onmouseenter = () => { + onPopupContent = true; + }; + popupContent.onmouseleave = () => { + onPopupContent = false; + }; + popup.onclick = () => { + if (!onPopupContent) hiddenPopup(popup, popupContent); + }; + document.getElementById("popup_content_3_btn1").onclick = () => { + document.getElementById("popup_content_3_form1").submit(); + hiddenPopup(popup, popupContent); + }; + document.getElementById("popup_content_3_btn2").onclick = () => { + hiddenPopup(popup, popupContent); + }; + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_edit_button"), + (element) => { + element.onclick = (e) => { + showPopup3(popup, popupContent, JSON.parse(element.id)); + }; + } + ); + + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_remove_button"), + (element) => { + element.onclick = (e) => { + document.getElementById("user_remove_item_id").value = element.id; + document.getElementById("user_remove_item_form").submit(); + }; + } + ); + + document.title = "انواع فوتی ها"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(4)" + ).className += " dashboard_panel_item_active"; +} +function costsPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + let popup = document.getElementById("popup4"); + let popupContent = document.getElementById("popup_content_4"); + document.getElementById("add").onclick = (e) => { + e.preventDefault(); + showPopup4(popup, popupContent); + let el = document.getElementById("price"); + el.value = PersianPriceSpacer(el.value, 3); + }; + let onPopupContent = false; + popupContent.onmouseenter = () => { + onPopupContent = true; + }; + popupContent.onmouseleave = () => { + onPopupContent = false; + }; + popup.onclick = () => { + if (!onPopupContent) hiddenPopup(popup, popupContent); + }; + document.getElementById("popup_content_4_btn1").onclick = () => { + let el = document.getElementById("price"); + el.value = el.value.replace(/,/g, ""); + document.getElementById("popup_content_4_form1").submit(); + hiddenPopup(popup, popupContent); + }; + document.getElementById("popup_content_4_btn2").onclick = () => { + hiddenPopup(popup, popupContent); + }; + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_edit_button"), + (element) => { + element.onclick = (e) => { + showPopup4(popup, popupContent, JSON.parse(element.id)); + let el = document.getElementById("price"); + el.value = PersianPriceSpacer(el.value, 3); + }; + } + ); + + Array.prototype.forEach.call( + document.getElementsByClassName("users_table_item_remove_button"), + (element) => { + element.onclick = (e) => { + document.getElementById("user_remove_item_id").value = element.id; + document.getElementById("user_remove_item_form").submit(); + }; + } + ); + + document.title = "هزینه ها"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(5)" + ).className += " dashboard_panel_item_active"; +} +function additionalPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + // + let totalCost = document.getElementById("totalPrice"); + let price = 0; + document.querySelectorAll('input[type="checkbox"]').forEach((el) => { + if (el.checked) price += Number(el.getAttribute("price")); + el.onchange = () => { + price = 0; + document.querySelectorAll('input[type="checkbox"]').forEach((el) => { + if (el.checked) price += Number(el.getAttribute("price")); + }); + totalCost.innerText = PersianPriceSpacer(toFarsiNumber(price), 3); + }; + }); + totalCost.innerText = price; + document.getElementById("popup_content_1_btn1").onclick = () => { + document.getElementById("deads_add_form").submit(); + }; + document.title = "افزودن اطلاعات تکمیلی فوتی"; +} +function reports_previewPage() { + Array.prototype.forEach.call( + document.getElementsByClassName("toPersian"), + (el) => (el.innerText = toFarsiNumber(el.innerText)) + ); + Array.prototype.forEach.call( + document.getElementsByClassName("toPrice"), + (el) => (el.innerText = PersianPriceSpacer(el.innerText, 3)) + ); + document.title = "گزارش گیری"; +} +function reportsPage() { + let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + setLayoutProperties(LoggedUser); + document.querySelector("#ChooseSelect > li:first-child").className = "select"; + let items = document.querySelectorAll("#ChooseSelect > li"); + let selected = document.querySelector("#ChooseSelect > li.select"); + items.forEach((el) => { + el.onclick = (i) => { + el.className = "select"; + selected.className = ""; + selected = el; + document.getElementById("ChooseSelectInput").value = selected.title; + }; + }); + + document.title = "گزارش گیری"; + document.querySelector( + "#dashboard_items_parent > div:nth-child(8)" + ).className += " dashboard_panel_item_active"; +} +function deathReportPage() { + // let LoggedUser = JSON.parse(document.getElementById("LoggedOnUser").title); + // setLayoutProperties(LoggedUser); + Array.prototype.forEach.call( + document.getElementsByClassName("toPersian"), + (el) => (el.innerText = toFarsiNumber(el.innerText)) + ); + document.title = "گزارش فوت"; +} +function setLayoutProperties(obj) { + document.getElementById("header_login_button").innerText = obj.Name; + document.getElementById("body_dashboard_panel_little_name").innerText = ( + obj.Name + "" + ).split(" ")[0]; + document.getElementById("body_dashboard_panel_roleId").innerText = + obj.RoleId == 1 + ? "دسترسی : مدیر کل" + : obj.RoleId == 2 + ? "دسترسی : پشتیبانی" + : obj.RoleId == 3 + ? "دسترسی :چاپخانه" + : "دسترسی : ثبت احوال "; +} +function hiddenPopup(popup, popupContent) { + popup.style.visibility = "hidden"; + popup.style.opacity = "0"; + popupContent.style.visibility = "hidden"; + popupContent.style.opacity = "0"; +} +function showPopup(popup, popupContent, obj) { + popup.style.visibility = "visible"; + popup.style.opacity = "1"; + popupContent.style.visibility = "visible"; + popupContent.style.opacity = "1"; + if (obj) { + document.getElementById("username").value = obj.Username; + document.getElementById("password").value = ""; + document.getElementById("name").value = obj.Name; + document.getElementById("roleId").value = obj.RoleId; + document.getElementById("popup_content_1_HID").value = obj._id; + document.getElementById("popup_content_1_title1").innerText = + "ویرایش کاربر"; + document.getElementById("popup_content_1_form1").action = "/users/edit"; + } else { + document.getElementById("username").value = ""; + document.getElementById("password").value = ""; + document.getElementById("name").value = ""; + document.getElementById("roleId").value = 1; + document.getElementById("popup_content_1_title1").innerText = + "اضافه کردن کاربر"; + document.getElementById("popup_content_1_form1").action = "/users/add"; + } +} +function showPopup2(popup, popupContent, obj) { + popup.style.visibility = "visible"; + popup.style.opacity = "1"; + popupContent.style.visibility = "visible"; + popupContent.style.opacity = "1"; + if (obj) { + document.getElementById("name2").value = obj.Name; + document.getElementById("rows").value = obj.Rows; + document.getElementById("count").value = obj.Count; + document.getElementById("popup_content_2_HID").value = obj._id; + document.getElementById("popup_content_2_title1").innerText = "ویرایش قطعه"; + document.getElementById("popup_content_2_form1").action = "/states/edit"; + } else { + document.getElementById("name2").value = ""; + document.getElementById("rows").value = ""; + document.getElementById("count").value = ""; + document.getElementById("popup_content_2_title1").innerText = + "اضافه کردن قطعه"; + document.getElementById("popup_content_2_form1").action = "/states/add"; + } +} +function showPopup3(popup, popupContent, obj) { + popup.style.visibility = "visible"; + popup.style.opacity = "1"; + popupContent.style.visibility = "visible"; + popupContent.style.opacity = "1"; + if (obj) { + document.getElementById("name3").value = obj.Name; + document.getElementById("popup_content_3_HID").value = obj._id; + document.getElementById("popup_content_3_title1").innerText = + "ویرایش نوع فوتی"; + document.getElementById("popup_content_3_form1").action = "/deadtypes/edit"; + } else { + document.getElementById("name3").value = ""; + document.getElementById("popup_content_3_title1").innerText = + "اضافه کردن نوع فوتی"; + document.getElementById("popup_content_3_form1").action = "/deadtypes/add"; + } +} +function showPopup4(popup, popupContent, obj) { + popup.style.visibility = "visible"; + popup.style.opacity = "1"; + popupContent.style.visibility = "visible"; + popupContent.style.opacity = "1"; + if (obj) { + document.getElementById("name4").value = obj.Name; + document.getElementById("price").value = obj.Price; + document.getElementById("popup_content_4_HID").value = obj._id; + document.getElementById("popup_content_4_title1").innerText = + "ویرایش هزینه"; + document.getElementById("popup_content_4_form1").action = "/costs/edit"; + } else { + document.getElementById("name4").value = ""; + document.getElementById("price").value = ""; + document.getElementById("popup_content_4_title1").innerText = + "اضافه کردن هزینه"; + document.getElementById("popup_content_4_form1").action = "/costs/add"; + } +} +function toFarsiNumber(n) { + const farsiDigits = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"]; + return n.toString().replace(/\d/g, (x) => farsiDigits[x]); +} +//Addon Functions +//Link: https://github.com/Canoir/JavaScriptPersianPriceSpacer +function PersianPriceSpacer(price, length) { + let result = ""; + let el; + price = price.replace(/,/g, ""); + if (typeof price == "number") price = String(price); + for (let count = 1; count <= price.length; count++) { + el = price.charAt(price.length - count); + result = el + result; + if (count % length == 0) result = "," + result; + } + return result[0] == "," ? result.substring(1) : result; +} diff --git a/routes/api/apiDeads.js b/routes/api/apiDeads.js new file mode 100644 index 0000000..36c95d3 --- /dev/null +++ b/routes/api/apiDeads.js @@ -0,0 +1,97 @@ +const express = require("express"); +const multer = require("multer"); +const Deads = require("../../model/Deads"); +const router = express.Router(); + +//Picture Uploading +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, "../Aramestan/public/images/"); + }, + filename: (req, file, cb) => { + cb( + null, + new Date().toISOString().replace(/[-T:\.Z]/g, "") + + "_" + + file.originalname + ); + }, +}); +const upload = multer({ storage: storage }); + +//Get single Dead +router.post("/get", async function (req, res) { + try { + const dead = await Deads.findOne({ + NationalId: req.body.NationalId, + }).select("FullName FatherName"); + res.json({ Name: dead.FullName, FatherName: dead.FatherName, code: 200 }); + } catch (e) { + res.json({ code: 500 }); + } +}); +//Find From StateId! +router.post("/getFromState", async (req, res) => { + try { + res.json({ + deads: await Deads.find({ StateId: Number(req.body.StateId) }).sort({ + Row: 1, + GravePlaceId: 1, + }), + code: 200, + }); + } catch (e) { + res.json({ code: 500 }); + } +}); +//Add Picture for Death! +router.post("/addPic", upload.single("image"), async function (req, res) { + try { + const dead = await Deads.findOne({ + NationalId: req.body.NationalId, + }).select("Accepted Latitiude Longtitude"); + let object = { ImageName: req.file.filename }; + if (!dead.Accepted && dead.Latitiude != "" && dead.Longtitude != "") + object = { ImageName: req.file.filename, Accepted: true }; + await dead.updateOne(object); + res.json({ code: 200 }); + } catch (e) { + res.json({ code: 500 }); + } +}); +//Add Location to death! +router.post("/addLoc", async function (req, res) { + try { + const dead = await Deads.findOne({ + NationalId: req.body.NationalId, + }).select("Accepted ImageName"); + let object = { + Latitiude: req.body.Latitiude, + Longtitude: req.body.Longtitude, + }; + if (!dead.Accepted && dead.ImageName) + object = { + Latitiude: req.body.Latitiude, + Longtitude: req.body.Longtitude, + Accepted: true, + }; + await dead.updateOne(object); + res.json({ code: 200 }); + } catch (e) { + res.json({ code: 500 }); + } +}); +//Post Json For Searching! +router.post("/search", async (req, res) => { + try { + res.json({ + deads: await Deads.find({ + FullName: { $regex: req.body.fullName, $options: "i" }, + }).limit(20), + code: 200, + }); + } catch (e) { + res.json({ code: 500 }); + } +}); +module.exports = router; diff --git a/routes/api/apiStates.js b/routes/api/apiStates.js new file mode 100644 index 0000000..a9c599b --- /dev/null +++ b/routes/api/apiStates.js @@ -0,0 +1,13 @@ +const express = require("express"); +const States = require("../../model/States"); +const router = express.Router(); + +//Get All States via Post! +router.post("/getAll", async (req, res) => { + try { + res.json({ states: await States.find({}), code: 200 }); + } catch (e) { + res.json({ code: 500 }); + } +}); +module.exports = router; diff --git a/routes/costs.js b/routes/costs.js new file mode 100644 index 0000000..9b3ab60 --- /dev/null +++ b/routes/costs.js @@ -0,0 +1,70 @@ +const express = require("express"); +const { checkAuth, roleManaging, Roles, findNextId } = require("./utils"); +const Cost = require("../model/Costs"); +const router = express.Router(); + +router.get( + "/", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Main Costs Page! + async (req, res) => { + res.render("costs", { Cost: await Cost.find({}), user: res.locals.user }); + } +); + +router.post( + "/remove", + checkAuth, + roleManaging([Roles.God]), + //Remove Costs! + async (req, res) => { + try { + await Cost.findByIdAndRemove(req.body.user_remove_item_id); + res.redirect("/costs"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); + +router.post( + "/add", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Add Costs! + async (req, res) => { + try { + await new Cost({ + CostId: await findNextId("C_Costs"), + Name: req.body.name, + Price: Number(req.body.price), + }).save(); + res.redirect("/costs"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); + +router.post( + "/edit", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Editing A Cost! + async (req, res) => { + try { + await Cost.findByIdAndUpdate(req.body.popup_content_4_HID, { + Name: req.body.name, + Price: Number(req.body.price), + }); + res.redirect("/costs"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); +module.exports = router; diff --git a/routes/deads.js b/routes/deads.js new file mode 100644 index 0000000..66d574c --- /dev/null +++ b/routes/deads.js @@ -0,0 +1,246 @@ +const express = require("express"); +const Dead = require("../model/Deads"); +const DeadType = require("../model/DeadTypes"); +const States = require("../model/States"); +const Cost = require("../model/Costs"); +const { checkAuth, roleManaging, Roles } = require("./utils"); +const router = express.Router(); + +router.get( + "/", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Get Deaths(Search and All) + async (req, res) => { + let dead = []; + let count; + if (!req.query.id) req.query.id = 1; + if (req.query.q) { + const searchList = []; + req.query.q.split(" ").forEach((el) => { + searchList.push({ FullName: { $regex: el, $options: "i" } }); + }); + dead = await Dead.find({ $and: searchList }) + .sort({ EditDate: -1 }) + .skip((Number(req.query.id) - 1) * 20) + .limit(20); + count = await Dead.countDocuments({ $and: searchList }); + } else { + count = await Dead.estimatedDocumentCount({}); + dead = await Dead.find({}) + .sort({ EditDate: -1 }) + .skip((Number(req.query.id) - 1) * 20) + .limit(20); + } + dead.forEach((el) => { + el.deathDate = res.locals.moment(el.DeathDate + "").format("YYYY/MM/DD"); + }); + res.render("deads", { + user: res.locals.user, + Deads: dead, + max: Number((count) / 20), + index: req.query.id, + }); + } +); + +router.get( + "/details/:id", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Death Data Details! + async (req, res) => { + const moment = res.locals.moment; + const dead = await Dead.findOne({ NationalId: req.params.id }); + dead.State = ( + await States.findOne({ StateId: dead.StateId }).select("Name") + ).Name; + dead.DeadType = ( + await DeadType.findOne({ DeadTypeId: dead.DeadTypeId }).select("Name") + ).Name; + dead.deathDate = moment(dead.DeathDate + "").format("YYYY/MM/DD"); + dead.birthDate = moment(dead.BirthDate + "").format("YYYY/MM/DD"); + dead.intermentDate = + dead.IntermentDate != null + ? moment(dead.IntermentDate + "").format("YYYY/MM/DD") + : "-"; + dead.incomeDate = + dead.IncomeDate != null + ? moment(dead.IncomeDate + "").format("YYYY/MM/DD") + : "-"; + res.render("dead", { + user: res.locals.user, + Dead: dead, + }); + } +); + +router.get( + "/add", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Add Death Page! + async function (req, res) { + res.render("deads_add", { + user: res.locals.user, + DeadTypes: await DeadType.find({}), + States: await States.find({}), + }); + } +); + +router.post( + "/add", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Add Death Post! + async function (req, res) { + try { + await new Dead({ + FullName: req.body.fullName, + BirthDate: req.body.birthDate, + DeathDate: req.body.deathDate, + FatherName: req.body.fatherName, + StateId: req.body.stateId, + Row: req.body.row, + GravePlaceId: req.body.graveStateId, + DeadTypeId: req.body.deathType, + NationalId: req.body.nationalCode, + DeathReason: req.body.deathReason, + EditDate: new Date(), + }).save(); + if (req.body.dirType == "0") res.redirect("/deads/"); + else res.redirect("/deads/additional/" + req.body.nationalCode); + } catch (e) { + res.redirect("/deads/"); + } + } +); + +router.get( + "/edit/:id", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Edit Dead Person Page! + async function (req, res) { + res.render("deads_edit", { + user: res.locals.user, + Dead: await Dead.findOne({ NationalId: req.params.id }), + DeadTypes: await DeadType.find({}), + States: await States.find({}), + }); + } +); + +router.post( + "/edit", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Edit dead person data Post! + async function (req, res) { + try { + const dead = await Dead.findOne({ NationalId: req.body._id }).select( + "FullName Row BirthDate DeathDate FatherName StateId GravePlaceId DeadTypeId NationalId DeathReason" + ); + await dead.updateOne({ + FullName: req.body.fullName == "" ? dead.FullName : req.body.fullName, + BirthDate: + req.body.birthDate == "" ? dead.BirthDate : req.body.birthDate, + DeathDate: + req.body.deathDate == "" ? dead.DeathDate : req.body.deathDate, + FatherName: + req.body.fatherName == "" ? dead.FatherName : req.body.fatherName, + StateId: req.body.stateId == "" ? dead.StateId : req.body.stateId, + Row: req.body.row == "" ? dead.Row : req.body.row, + GravePlaceId: + req.body.graveStateId == "" + ? dead.GravePlaceId + : req.body.graveStateId, + DeadTypeId: + req.body.deathType == "" ? dead.DeadTypeId : req.body.deathType, + NationalId: + req.body.nationalCode == "" ? dead.NationalId : req.body.nationalCode, + DeathReason: + req.body.deathReason == "" ? dead.DeathReason : req.body.deathReason, + EditDate: new Date(), + }); + } catch (e) { + if (e) throw e; + } + if (req.body.dirType == "1") { + res.redirect("/deads/additional/" + req.body.nationalCode); + } else res.redirect("/deads/"); + } +); + +router.post( + "/remove", + checkAuth, + roleManaging([Roles.God]), + //Remove a dead Person post! + async (req, res) => { + try { + await Dead.findByIdAndRemove(req.body.user_remove_item_id); + res.redirect("/deads"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); + +router.get( + "/additional/:id", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //get Additional data from dead person! + async (req, res) => { + res.render("deads_additional", { + user: res.locals.user, + Cost: await Cost.find({}), + id: req.params.id, + Dead: await Dead.findOne({ NationalId: req.params.id }), + }); + } +); + +router.post( + "/additional/", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Change additional Data of dead person! + async (req, res) => { + const costs = []; + let totalCost = 0; + await (await Cost.find({})).forEach((item) => { + if (req.body["checkbox" + item.CostId] == "on") { + costs.push(item.CostId); + totalCost += item.Price; + } + }); + try { + await Dead.findOneAndUpdate( + { NationalId: req.body._id }, + { + IntermentDate: req.body.intermentDate, + IncomeDate: req.body.incomeDate, + DoctorName: req.body.doctorName, + IntermentPermitNumber: req.body.intermentPermitNumber, + DeathPlace: req.body.deathPlace, + FollowerName: req.body.followerName, + FollowerNationalId: req.body.followerNationalId, + FollowerRelToDeadPerson: req.body.followerRelToDeadPerson, + FollowerPhoneNumber: req.body.followerPhoneNumber, + Costs: costs, + TotalCosts: totalCost, + Details: req.body.details, + EditDate: new Date(), + } + ); + } catch (e) { + if (e) throw e; + } + res.redirect("/deads"); + } +); +module.exports = router; diff --git a/routes/deadtype.js b/routes/deadtype.js new file mode 100644 index 0000000..d01e8d5 --- /dev/null +++ b/routes/deadtype.js @@ -0,0 +1,71 @@ +const express = require("express"); +const DeadType = require("../model/DeadTypes"); +const { checkAuth, roleManaging, Roles, findNextId } = require("./utils"); +const router = express.Router(); + +router.get( + "/", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //get Dead Types! + async (req, res) => { + res.render("deadtypes", { + DeadType: await DeadType.find({}), + user: res.locals.user, + }); + } +); + +router.post( + "/remove", + checkAuth, + roleManaging([Roles.God]), + //Remove a Dead Type! + async (req, res) => { + try { + await DeadType.findByIdAndRemove(req.body.user_remove_item_id); + res.redirect("/deadtypes"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); + +router.post( + "/add", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Add dead type! + async (req, res) => { + try { + await new DeadType({ + DeadTypeId: await findNextId("C_DeadTypes"), + Name: req.body.name, + }).save(); + res.redirect("/deadtypes"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); + +router.post( + "/edit", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Edit a dead Type! + async (req, res) => { + try { + await DeadType.findByIdAndUpdate(req.body.popup_content_3_HID, { + Name: req.body.name, + }); + res.redirect("/deadtypes"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); +module.exports = router; diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..b312e73 --- /dev/null +++ b/routes/index.js @@ -0,0 +1,192 @@ +const express = require("express"); +const Deads = require("../model/Deads"); +const User = require("../model/Users"); +const Setting = require("../model/Settings"); +const { checkAuth, checkNotAuth, Roles, roleManaging } = require("./utils"); +const bcrypt = require("bcrypt"); +const crypto = require("crypto"); +const router = express.Router(); + +//index of whole site! +router.get("/", checkNotAuth, async function (req, res) { + res.redirect("/login"); +}); + +//Dashboard! +router.get("/dashboard", checkAuth, async (req, res) => { + switch (res.locals.user.RoleId) { + case Roles.God: + dashboardGodAndSupporter(req, res); + break; + case Roles.Supporter: + dashboardGodAndSupporter(req, res); + break; + case Roles.Printer: + res.redirect("/statements/add"); + break; + case Roles.AcceptOfficer: + res.redirect("/reports"); + break; + } +}); +//Login Page! +router.get("/login", checkNotAuth, async function (req, res) { + res.render("login", { m: req.query.m }); +}); +//Login Post! +router.post("/login", checkNotAuth, async (req, res) => { + const user = await User.findOne({ Username: req.body.username }).select( + "Username Password" + ); + if (user) { + console.log(bcrypt.hashSync(req.body.password, 10)); + if (bcrypt.compareSync(req.body.password, user.Password)) { + const at = await crypto.randomBytes(64).toString("base64"); + res.cookie("AuthUsername", user.Username, { maxAge: 10800000 }); + res.cookie("AuthAccessToken", at, { maxAge: 10800000 }); + await user.updateOne({ AccessToken: at }); + res.redirect("/"); + } else res.redirect(`/login?m=Password is not valid!`); + } else res.redirect(`/login?m=Username is not valid!`); +}); +//Logout! +router.get("/logout", checkAuth, (req, res) => { + res.clearCookie("AuthUsername"); + res.clearCookie("AuthAccessToken"); + res.redirect("/"); +}); + +router.get( + "/setting", + checkAuth, + roleManaging([Roles.God]), + //Setting Page! + async (req, res) => { + try { + let data = await Setting.findOne({ i: 1 }); + if (!data) { + await new Setting({ + i: 1, + AramestanManager: "", + AramestanBankAccount: "", + }).save(); + data = await Setting.findOne({ i: 1 }); + } + res.render("settings", { setting: data }); + } catch (e) { + console.log(e); + res.redirect("/"); + } + } +); + +//Post Settings! +router.post( + "/settings", + checkAuth, + roleManaging([Roles.God]), + async (req, res) => { + try { + await Setting.findOneAndUpdate( + { i: 1 }, + { + AramestanBankAccount: req.body.AramestanBankAccount, + AramestanManager: req.body.AramestanManager, + } + ); + res.redirect("/"); + } catch (e) { + console.log(e); + res.redirect("/setting"); + } + } +); + +//The GET Method of allCount Page! +router.get( + "/allCount", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + async (req, res) => { + res.json({ + AllCount: await Deads.estimatedDocumentCount(), + AllCounted: await Deads.countDocuments({ Accepted: true }), + code: 200, + }); + } +); + +//The GET Method of monthCount Page! +router.get( + "/monthCount", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + async (req, res) => { + const monthDate = new Date(); + monthDate.setDate(monthDate.getDate() - 30); + res.json({ + MonthCount: await Deads.countDocuments({ + DateTime: { $gte: monthDate.toISOString() }, + }), + MonthCounted: await Deads.countDocuments({ + DateTime: { $gte: monthDate.toISOString() }, + Accepted: true, + }), + code: 200, + }); + } +); + +//The GET Method of weekCount Page! +router.get( + "/weekCount", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + async (req, res) => { + const weekDate = new Date(); + weekDate.setDate(weekDate.getDate() - 7); + res.json({ + WeekCount: await Deads.countDocuments({ + DateTime: { $gte: weekDate.toISOString() }, + }), + WeekCounted: await Deads.countDocuments({ + DateTime: { $gte: weekDate.toISOString() }, + Accepted: true, + }), + code: 200, + }); + } +); + +//The GET Method of dayCount Page! +router.get( + "/dayCount", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + async (req, res) => { + const dayDate = new Date(); + dayDate.setDate(dayDate.getDate() - 1); + res.json({ + DayCount: await Deads.countDocuments({ + DateTime: { $gte: dayDate.toISOString() }, + }), + DayCounted: await Deads.countDocuments({ + DateTime: { $gte: dayDate.toISOString() }, + Accepted: true, + }), + code: 200, + }); + } +); + +async function dashboardGodAndSupporter(req, res) { + const dead = await Deads.find({}).sort({ DeathDate: -1 }).limit(10); + dead.forEach((el) => { + el.deathDate = res.locals.moment(el.DeathDate + "").format("YYYY/MM/DD"); + }); + res.render("dashboard", { + user: res.locals.user, + Deads: dead, + }); +} +module.exports = router; diff --git a/routes/reports.js b/routes/reports.js new file mode 100644 index 0000000..e50040d --- /dev/null +++ b/routes/reports.js @@ -0,0 +1,156 @@ +const express = require("express"); +const Deads = require("../model/Deads"); +const Costs = require("../model/Costs"); +const Setting = require("../model/Settings"); +const States = require("../model/States"); +const { checkAuth, roleManaging, Roles } = require("./utils"); +const router = express.Router(); + +const REPORT_TYPE_1 = 2; +const REPORT_TYPE_2 = 1; +const REPORT_TYPE_3 = 3; + +router.get( + "/", + checkAuth, + roleManaging([Roles.God, Roles.Supporter, Roles.AcceptOfficer]), + //Reports Page! + async (req, res) => { + res.render("reports", { user: res.locals.user }); + } +); + +router.get( + "/preview", + checkAuth, + roleManaging([Roles.God, Roles.Supporter, Roles.AcceptOfficer]), + //Reports pages! + async (req, res) => { + const moment = res.locals.moment; + if (req.query.nI) { + if (res.locals.user.RoleId == Roles.AcceptOfficer) + res.redirect("/users/denied"); + const el = await Deads.find({ NationalId: req.query.nI }); + el[0].StatesId = ( + await States.findOne({ StateId: el[0].StateId }).select("Name") + ).Name; + el[0].Cost = await Promise.all( + el[0].Costs.map(async (item) => { + return await Costs.findOne({ CostId: item }); + }) + ); + res.render("report_preview", { + deads: await el, + type: 2, + len: 2, + tC: 0, + startDate: 0, + endDate: 0, + fPC: true, + role: res.locals.user.RoleId, + setting: await Setting.findOne({ i: 1 }).select("AramestanBankAccount"), + today: moment(Date() + "").format("YYYY/MM/DD"), + }); + } else { + const type = Number(req.query.typeId); + const startDate = new Date(Number(req.query.startDate)); + const endDate = new Date(Number(req.query.endDate)); + const fourPagesCheck = req.query.fourPagesCheck == "on"; + let deads; + // + if (fourPagesCheck && res.locals.user.RoleId == Roles.AcceptOfficer) + res.redirect("/users/denied"); + // + switch (type) { + case REPORT_TYPE_1: { + deads = await Deads.find({ + DeathDate: { $gte: startDate, $lt: endDate }, + }).sort({ DeathDate: -1 }); + break; + } + case REPORT_TYPE_2: { + deads = await Deads.find({ + IntermentDate: { $gte: startDate, $lt: endDate }, + }).sort({ IntermentDate: -1 }); + break; + } + case REPORT_TYPE_3: { + if (res.locals.user.RoleId == Roles.AcceptOfficer) + res.redirect("/users/denied"); + deads = await Deads.find({ + IncomeDate: { $gte: startDate, $lt: endDate }, + }).sort({ IncomeDate: -1 }); + break; + } + } + let TotalCost = 0; + const dead = await Promise.all( + deads.map(async (el) => { + switch (type) { + case REPORT_TYPE_1: { + el.DeathDates = moment(el.DeathDate + "").format("YYYY/MM/DD"); + break; + } + case REPORT_TYPE_2: { + el.IntermentDates = moment(el.IntermentDate + "").format( + "YYYY/MM/DD" + ); + break; + } + case REPORT_TYPE_3: { + el.IncomeDates = moment(el.IncomeDate + "").format("YYYY/MM/DD"); + break; + } + } + el.Cost = await Promise.all( + el.Costs.map(async (item) => { + return await Costs.findOne({ CostId: item }); + }) + ); + el.StatesId = (await States.findOne({ StateId: el.StateId })).Name; + TotalCost += el.TotalCosts; + if (!TotalCost) TotalCost = 0; + if (req.query.outOfMalayer) { + if (el.Cost.filter((i) => i == -1)) return el; + } else return el; + }) + ); + res.render("report_preview", { + deads: await dead, + type: type, + len: (await dead).length, + tC: await TotalCost, + startDate: moment(startDate + "").format("YYYY/MM/DD"), + endDate: moment(endDate + "").format("YYYY/MM/DD"), + fPC: fourPagesCheck, + role: res.locals.user.RoleId, + today: moment(Date() + "").format("YYYY/MM/DD"), + }); + } + } +); + +router.get( + "/death-report", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + // Post method of death report + async (req, res) => { + const moment = res.locals.moment; + let result; + if (req.query.nI) { + const _ = await Deads.findOne({ NationalId: req.query.nI }); + result = { + today: moment(Date() + "").format("YYYY/MM/DD"), + death: _, + setting: await Setting.findOne({ i: 1 }).select("AramestanManager"), + }; + result.death.DeathsDate = moment(_.DeathDate).format("YYYY/MM/DD"); + result.death.IntermentsDate = moment(_.IntermentsDate).format( + "YYYY/MM/DD" + ); + } + res.render("death_report", result); + } +); +module.exports = router; diff --git a/routes/statements.js b/routes/statements.js new file mode 100644 index 0000000..cff06ce --- /dev/null +++ b/routes/statements.js @@ -0,0 +1,69 @@ +const express = require("express"); +const Dead = require("../model/Deads"); +const { checkAuth, roleManaging, Roles } = require("./utils"); +const multer = require("multer"); +const router = express.Router(); +//Disk Handling +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, "../Aramestan/public/images/"); + }, + filename: (req, file, cb) => { + cb( + null, + new Date().toISOString().replace(/[-T:\.Z]/g, "") + + "_" + + file.originalname + ); + }, +}); +const upload = multer({ storage: storage }); + +router.get( + "/add", + checkAuth, + roleManaging([Roles.God, Roles.Supporter, Roles.Printer]), + // Statements Add Page! + (req, res) => { + res.render("statements_add", { user: res.locals.user }); + } +); + +router.post( + "/getInfo", + checkAuth, + roleManaging([Roles.God, Roles.Supporter, Roles.Printer]), + // Statements Add Post! + async (req, res) => { + res.json({ + dead: await Dead.findOne({ NationalId: req.body.nI }).select( + "FullName FatherName" + ), + code: 200, + }); + } +); + +router.post( + "/addPic", + checkAuth, + roleManaging([Roles.God, Roles.Supporter, Roles.Printer]), + upload.single("image"), + // Add pic for statement + async (req, res) => { + console.log(req.file); + console.log(req.files); + try { + await Dead.findOneAndUpdate( + { NationalId: req.body.nI }, + { StatementImageName: req.file.filename } + ); + res.redirect("/statements/add?m=200"); + } catch (e) { + console.log(e); + res.redirect("/statements/add?m=500"); + } + } +); + +module.exports = router; diff --git a/routes/states.js b/routes/states.js new file mode 100644 index 0000000..2e9c10e --- /dev/null +++ b/routes/states.js @@ -0,0 +1,75 @@ +const express = require("express"); +const State = require("../model/States"); +const { checkAuth, roleManaging, Roles, findNextId } = require("./utils"); +const router = express.Router(); + +router.get( + "/", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Get List of states! + async (req, res) => { + res.render("states", { + State: await State.find({}), + user: res.locals.user, + }); + } +); + +router.post( + "/remove", + checkAuth, + roleManaging([Roles.God]), + //Remove States post! + async (req, res) => { + try { + await State.findByIdAndRemove(req.body.user_remove_item_id); + res.redirect("/states"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); + +router.post( + "/add", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Add new State! + async (req, res) => { + try { + await new State({ + StateId: await findNextId("C_States"), + Name: req.body.name, + Rows: Number(req.body.rows), + Count: Number(req.body.count), + }).save(); + res.redirect("/states"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); + +router.post( + "/edit", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Edit Some State! + async (req, res) => { + try { + await State.findByIdAndUpdate(req.body.popup_content_2_HID, { + Name: req.body.name, + Rows: Number(req.body.rows), + Count: Number(req.body.count), + }); + res.redirect("/states"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); +module.exports = router; diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..6a1afbe --- /dev/null +++ b/routes/users.js @@ -0,0 +1,102 @@ +const express = require("express"); +const Users = require("../model/Users"); +const bcrypt = require("bcrypt"); +const { checkAuth, roleManaging, Roles } = require("./utils"); +const router = express.Router(); + +router.get( + "/", + checkAuth, + roleManaging([Roles.God, Roles.Supporter]), + //Get List of Users! + async (req, res) => { + res.render("users", { Users: await Users.find(), user: res.locals.user }); + } +); + +//Add new User +router.post("/add", checkAuth, roleManaging([Roles.God]), async (req, res) => { + try { + await new Users({ + Username: req.body.username, + Password: bcrypt.hashSync(req.body.password, 10), + RoleId: req.body.roleId, + Name: req.body.name, + }).save(); + res.redirect("/users"); + } catch (e) { + console.log(e); + if (e) throw e; + } +}); + +//Edit my profile Info page! +router.get("/editme", checkAuth, (req, res) => { + res.render("edit", { user: res.locals.user }); +}); + +//Edit my profile Info post! +router.post("/editme", checkAuth, async (req, res) => { + try { + if (req.body.password == "") + await Users.findByIdAndUpdate(req.body._id, { + Username: req.body.username, + Name: req.body.name, + }); + else + await Users.findByIdAndUpdate(req.body._id, { + Username: req.body.username, + Name: req.body.name, + Password: await bcrypt.hashSync(req.body.password, 10), + }); + res.redirect("/"); + } catch (e) { + console.log(e); + if (e) throw e; + } +}); + +//Edit User data! +router.post("/edit", checkAuth, roleManaging([Roles.God]), async (req, res) => { + try { + if (req.body.password == "") + await Users.findByIdAndUpdate(req.body.popup_content_1_HID, { + Username: req.body.username, + Name: req.body.name, + RoleId: req.body.roleId, + }); + else + await Users.findByIdAndUpdate(req.body.popup_content_1_HID, { + Username: req.body.username, + Name: req.body.name, + RoleId: req.body.roleId, + Password: await bcrypt.hashSync(req.body.password, 10), + }); + res.redirect("/users"); + } catch (e) { + console.log(e); + if (e) throw e; + } +}); + +router.post( + "/remove", + checkAuth, + roleManaging([Roles.God]), + // Remove users! + async (req, res) => { + try { + if (res.locals.user._id != req.body.user_remove_item_id) + await Users.findByIdAndRemove(req.body.user_remove_item_id); + res.redirect("/users"); + } catch (e) { + console.log(e); + if (e) throw e; + } + } +); + +router.get("/denied", checkAuth, (req, res) => { + res.render("access_denied",{}); +}); +module.exports = router; diff --git a/routes/utils.js b/routes/utils.js new file mode 100644 index 0000000..e14df47 --- /dev/null +++ b/routes/utils.js @@ -0,0 +1,78 @@ +const multer = require("multer"); +const User = require("../model/Users"); +const Counter = require("../model/Counter"); + +const Utils = { + //Get Current User if is valid and set it in : + // ^res.locals.user + getUser: async (req, res, next) => { + if (req.cookies["AuthUsername"]) { + //He is Logged Before! + const user = await User.findOne({ + Username: req.cookies["AuthUsername"], + }); + if (user.AccessToken == req.cookies["AuthAccessToken"]) + res.locals.user = user; + } + next(); + }, + //Check if user has Authenticated + checkAuth: async (req, res, next) => { + if (req.cookies["AuthUsername"]) { + //He is Logged Before! + const user = await User.findOne({ + Username: req.cookies["AuthUsername"], + }); + if (user.AccessToken == req.cookies["AuthAccessToken"]) { + res.locals.user = user; + next(); + } else res.redirect("/login"); + } else { + //new Login + res.redirect("/login"); + } + }, + //check if user is not Authenticated! + checkNotAuth: async (req, res, next) => { + if (req.cookies["AuthUsername"]) { + //He is Logged Before! + const user = await User.findOne({ + Username: req.cookies["AuthUsername"], + }); + if (user.AccessToken == req.cookies["AuthAccessToken"]) { + res.locals.user = user; + res.redirect("/dashboard"); + } else next(); + } + //new Login + else next(); + }, + findNextId: async (dbName) => { + const res = await Counter.findOne({ CounterName: dbName }); + let result; + if (res) { + result = res.Counter; + await res.updateOne({ Counter: res.Counter + 1 }); + } else { + await new Counter({ CounterName: dbName }).save(); + result = 1; + } + return result; + }, + roleManaging: (roles) => { + return (req, res, next) => { + let access = false; + for (let i = 0; i < roles.length; i++) { + if (roles[i] == res.locals.user.RoleId) { + access = true; + break; + } + } + if (access) next(); + else res.redirect("/users/denied"); + }; + }, + + Roles: { God: 1, Supporter: 2, Printer: 3, AcceptOfficer: 4 }, +}; +module.exports = Utils; diff --git a/views/access_denied.vash b/views/access_denied.vash new file mode 100644 index 0000000..2f569d7 --- /dev/null +++ b/views/access_denied.vash @@ -0,0 +1,14 @@ +@html.block('content', function(model) { + + + + + +
+

دسترسی محدود است

+

کاربری شما اجازه دسترسی به این صفحه را ندارد

+

پس از چند لحظه دیگر به صفحه مجاز خود منتقل خواهید شد. درصورت انتقال نیافتن خودکار روی لینک کلیک کنید

+
+ + +}) \ No newline at end of file diff --git a/views/admin_layout.vash b/views/admin_layout.vash new file mode 100644 index 0000000..89a5427 --- /dev/null +++ b/views/admin_layout.vash @@ -0,0 +1,380 @@ + + + + + لاگین + + + +
+ +
+
+
شهرداری ملایر
+
+
+
+
+
+ @html.block('content') +
+
+
+
+
+
+
+ مهدی
+
+ دسترسی : مدیر کل +
+
+
+
+ + + + +
+
+
+
+
+
+
+ داشبورد +
+
+ + +
+
+
+
+ فوتی ها +
+
+ + +
+
+
+
+ قطعه ها +
+
+ + +
+
+
+
+ نوع فوتی ها +
+
+ + +
+
+
+
+ هزینه ها +
+
+ + +
+
+
+
+ کارمند ها +
+
+ + + + +
+
+
+
+ ویرایش پروفایل +
+
+ + +
+
+
+
+ گزارش گیری +
+
+ + +
+
+
+
+ اعلامیه ها +
+
+ + +
+
+
+
+ تنظیمات +
+
+ + +
+
+
+
+ خروج از حساب کاربری +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/views/costs.vash b/views/costs.vash new file mode 100644 index 0000000..e619b8f --- /dev/null +++ b/views/costs.vash @@ -0,0 +1,34 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+
هزینه ها
+ +
+
+
کد هزینه
+
نام هزینه
+
قیمت
+
عملیات
+
+ @model.Cost.forEach(function(item){ +
+
@(item.CostId)
+
@(item.Name)
+
@(item.Price)
+
+
ویرایش
+
حذف
+
+
+ }) +
+ + @{model.user.Password = ''} + + + + }) +}) \ No newline at end of file diff --git a/views/dashboard.vash b/views/dashboard.vash new file mode 100644 index 0000000..4a6dbf1 --- /dev/null +++ b/views/dashboard.vash @@ -0,0 +1,111 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+
+
+ + +
+
کل فوت شده ها
+
کلا فوتی تایید شده
+
کلا فوتی تایید نشده
+
+
+
+
+
+ + +
+
کل فوت شده های ماه
+
کلا ... فوتی تایید شده
+
کلا ... فوتی تایید نشده
+
+
+
+
+
+ + +
+
کل فوت شده های هفته
+
کلا ... فوتی تایید شده
+
کلا ... فوتی تایید نشده
+
+
+
+
+
+ + +
+
کل فوت شده های روز
+
کلا ... فوتی تایید شده
+
کلا ... فوتی تایید نشده
+
+
+
+
+
+
فوتی ها
+
+
+ +
+
کد فوتی
+
نام و نام خانوادگی
+
تاریخ فوت
+
نام پدر
+
عملیات
+
+ @model.Deads.forEach(function(item){ +
+
@(item.NationalId)
+
@(item.FullName)
+
@(item.deathDate)
+
@(item.FatherName)
+
+ + back + +
+
+ }) +
+ + + @{model.user.Password = ''} + + + + }) +}) \ No newline at end of file diff --git a/views/dead.vash b/views/dead.vash new file mode 100644 index 0000000..a5206a2 --- /dev/null +++ b/views/dead.vash @@ -0,0 +1,101 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+
+
+
@model.Dead.FullName
+
نام کامل
+
+
+
@model.Dead.FatherName
+
نام پدر
+
+
+
@model.Dead.deathDate
+
تاریخ فوت
+
+
+
@model.Dead.birthDate
+
تاریخ تولد
+
+
+
@(model.Dead.DeadType)
+
نوع فوتی
+
+
+
@(model.Dead.State)
+
قطعه
+
+
+
@(model.Dead.Row)
+
ردیف
+
+
+
@model.Dead.GravePlaceId
+
شماره قطعه
+
+
+
@model.Dead.NationalId
+
کد ملی
+
+
+
@model.Dead.intermentDate
+
تاریخ دفن
+
+
+
@(model.Dead.incomeDate)
+
تاریخ واریز
+
+
+
@model.Dead.DoctorName
+
نام دکتر
+
+
+
@model.Dead.IntermentPermitNumber
+
شماره جواز دفن
+
+
+
@model.Dead.DeathPlace
+
محل فوت
+
+
+
@model.Dead.FollowerName
+
نام کامل پیگیری کننده
+
+
+
@model.Dead.FollowerNationalId
+
کد ملی پیگیری کننده
+
+
+
@model.Dead.FollowerRelToDeadPerson
+
نسبت پیگیری کننده با فوتی
+
+
+
@model.Dead.TotalCosts
+
مجموع هزینه ها(ریال)
+
+
+
@model.Dead.Details
+
توضیحات
+
+
+
@(model.Dead.Accepted ? 'تایید شده' : 'تایید نشده')
+
وضعیت
+
+
+
@(model.Dead.DeathReason == "" ? "-":model.Dead.DeathReason)
+
علت فوت
+
+
+
+ @{var z = model.Dead.ImageName == "" ? "grave.jpg" : model.Dead.ImageName} + تصویر قبر +
+
+
+ + @{model.user.Password = ''} + + }) +}) \ No newline at end of file diff --git a/views/deads.vash b/views/deads.vash new file mode 100644 index 0000000..a08f5c2 --- /dev/null +++ b/views/deads.vash @@ -0,0 +1,59 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+
فوتی ها
+
+ +
+ +
+
کد فوتی
+
نام و نام خانوادگی
+
تاریخ فوت
+
نام پدر
+
عملیات
+
+ @model.Deads.forEach(function(item){ +
+
@(item.NationalId)
+
@(item.FullName)
+
@(item.deathDate)
+
@(item.FatherName)
+ +
+ }) +
+
+
+ back +

صفحه بعدی

+
+
+ برو + + به صفحه +
+
+

صفحه قبلی

+ back +
+
+
+ +
+ + @{model.user.Password = ''} + + + + }) +}) \ No newline at end of file diff --git a/views/deads_add.vash b/views/deads_add.vash new file mode 100644 index 0000000..3f67d97 --- /dev/null +++ b/views/deads_add.vash @@ -0,0 +1,156 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + +
+ + + + + + @{model.user.Password = ''} + + + }) +}) \ No newline at end of file diff --git a/views/deads_additional.vash b/views/deads_additional.vash new file mode 100644 index 0000000..064d4c9 --- /dev/null +++ b/views/deads_additional.vash @@ -0,0 +1,220 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ @{var i = 1} + @{var last} + @{var identifier = model.Cost.length % 2 != 0} + @model.Cost.forEach(function(item){ + @if(i % 2 == 0){ +
+ + +
+ } + @if(i == model.Cost.length && identifier){ +
+ + +
+ } + @{last = item} + @{i += 1} + }) + جمع کل : 0 ریال + +
+ + + + + + @{model.user.Password = ''} + + + }) +}) \ No newline at end of file diff --git a/views/deads_edit.vash b/views/deads_edit.vash new file mode 100644 index 0000000..46e7171 --- /dev/null +++ b/views/deads_edit.vash @@ -0,0 +1,156 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + +
+ + + + + + @{model.user.Password = ''} + + + }) +}) \ No newline at end of file diff --git a/views/deadtypes.vash b/views/deadtypes.vash new file mode 100644 index 0000000..b22f4ea --- /dev/null +++ b/views/deadtypes.vash @@ -0,0 +1,32 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+
نوع فوتی ها
+ +
+
+
کد نوع فوتی
+
نوع فوتی
+
عملیات
+
+ @model.DeadType.forEach(function(item){ +
+
@(item.DeadTypeId)
+
@(item.Name)
+
+
ویرایش
+
حذف
+
+
+ }) +
+ + @{model.user.Password = ''} + + + + }) +}) \ No newline at end of file diff --git a/views/death_report.vash b/views/death_report.vash new file mode 100644 index 0000000..fa6b7c2 --- /dev/null +++ b/views/death_report.vash @@ -0,0 +1,61 @@ + + @html.block('content', function(model) { + + +
+
بسمه تعالی
+
وزارت کشور
+
............................. :شماره
+
شهرداری ملایر
+
@model.today :تاریخ
+
+
............................. :پیوست
+
+
+
+
به: ریاست محترم اداره ثبت احوال
+
+
از: شهرداری ملایر
+
+
موضوع: گواهی فوت
+
+ احتراما برادر / خواهر @model.death.FullName با کد ملی : @model.death.NationalId +
+ فرزند : @model.death.FatherName بموجب جواز دفن : @model.death.DeathReason در تاریخ : @model.death.DeathsDate +
+به علت : @model.death.DeathReason در شهرستان : ملایر فوت نموده +
+و در تاریخ : @model.death.IntermentsDate در این آرامستان به خاك سپرده شده است +
+
+
+
مسئول آرامستان بهشت هاجر ملایر
+
+
@model.setting.AramestanManager
+
+ +
+ + + + + }) \ No newline at end of file diff --git a/views/edit.vash b/views/edit.vash new file mode 100644 index 0000000..32c9920 --- /dev/null +++ b/views/edit.vash @@ -0,0 +1,46 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+ +
+ + +
+
+ +
+
+ +
+ + @{model.user.Password = ''} + + }) +}) \ No newline at end of file diff --git a/views/error.vash b/views/error.vash new file mode 100644 index 0000000..fe4b769 --- /dev/null +++ b/views/error.vash @@ -0,0 +1,5 @@ + @html.block('content', function(model) { +

@model.message

+

@model.error.status

+
@model.error.stack
+ }) \ No newline at end of file diff --git a/views/layout.vash b/views/layout.vash new file mode 100644 index 0000000..956a06b --- /dev/null +++ b/views/layout.vash @@ -0,0 +1,37 @@ + + + + + + لاگین + + + +
+ +
+
+
شهرداری ملایر
+
+
+@html.block('content') + + + \ No newline at end of file diff --git a/views/login.vash b/views/login.vash new file mode 100644 index 0000000..470b6bf --- /dev/null +++ b/views/login.vash @@ -0,0 +1,39 @@ +@html.extend('layout', function(model){ + @html.block('content', function(model) { +

@model.m

+ + }) +}) \ No newline at end of file diff --git a/views/report_preview.vash b/views/report_preview.vash new file mode 100644 index 0000000..e036a8f --- /dev/null +++ b/views/report_preview.vash @@ -0,0 +1,303 @@ + + @html.block('content', function(model) { + + + @if(model.role != 3){ + @if(!model.fPC){ + @if(model.role <= 2){ +
+ +
قبض درآمدی بابت هزینه تطهیر و دفن از تاریخ : @model.startDate تا تاریخ : @model.endDate آرامستان بهشت هاجر ملایر
+
+ + @if(model.type == 2){ + + + + + + + @model.deads.forEach((el)=>{ + + + + + + + }) + }else if(model.type == 1){ + + + + + + + @model.deads.forEach((el)=>{ + + + + + + + }) + }else if(model.type == 3){ + + + + + + + @model.deads.forEach((el)=>{ + + + + + + + }) + } +
خدماتتاریخ فوتهزینه نهایینام و نام خانوادگی
@{el.Cost.forEach((e)=>{,@(e.Name)})}@(el.DeathDates)@(el.TotalCosts)@(el.FullName)
خدماتتاریخ دفنهزینه نهایینام و نام خانوادگی
@{el.Cost.forEach((e)=>{,@(e.Name)})}@(el.IntermentDates)@(el.TotalCosts)@(el.FullName)
خدماتتاریخ واریزهزینه نهایینام و نام خانوادگی
@{el.Cost.forEach((e)=>{,@(e.Name)})}@(el.IncomeDates)@(el.TotalCosts)@(el.FullName)
+
+
+ + تعداد کل متوفیان : @model.len +
+ هزینه کل متوفیان : @model.tC + +
+ }else{ +
+ +
قبض تطهیر و دفن از تاریخ : @model.startDate تا تاریخ : @model.endDate آرامستان بهشت هاجر ملایر
+
+ + @if(model.type == 2){ + + + + + + + @model.deads.forEach((el)=>{ + + + + + + }) + }else if(model.type == 1){ + + + + + + @model.deads.forEach((el)=>{ + + + + + + }) + }else if(model.type == 3){ + + + + + + @model.deads.forEach((el)=>{ + + + + + + }) + } +
خدماتتاریخ فوتنام و نام خانوادگی
@{el.Cost.forEach((e)=>{,@(e.Name)})}@(el.DeathDates)@(el.FullName)
خدماتتاریخ دفننام و نام خانوادگی
@{el.Cost.forEach((e)=>{,@(e.Name)})}@(el.IntermentDates)@(el.FullName)
خدماتتاریخ واریزنام و نام خانوادگی
@{el.Cost.forEach((e)=>{,@(e.Name)})}@(el.IncomeDates)@(el.FullName)
+
+
+ + تعداد کل متوفیان : @model.len +
+ +
+ } + }else{ + @if(model.role <= 2){ + @model.deads.forEach((el)=>{ +
+
+ تاریخ دریافت رسید : @model.today +
+
نسخه ارباب رجوع
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
نام و نام خانوادگی متوفی: @(el.FullName)تاریخ فوت: @(el.DeathDates)کد ملی متوفی: @(el.NationalId)
خدمات: @{el.Cost.forEach((e)=>{ , @(e.Name)})}هزینه نهایی @(el.TotalCosts) ریال نزد @(model.setting.AramestanBankAccount)
ردیف: @(el.Row)قطعه: @(el.StatesId)شماره قبر: @(el.GravePlaceId)
نام و نام خانوادگی همراه: @(el.FollowerName)نسبت همراه با متوفی: @(el.FollowerRelToDeadPerson)کد ملی همراه: @(el.FollowerNationalId)
شماره تماس همراه متوفی: @(el.FollowerPhoneNumber)سریال تراکنش:محل مهر و امضا
+
+
+
+
+
+
+
+
مسئول دفن
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
نام و نام خانوادگی متوفی: @(el.FullName)تاریخ فوت: @(el.DeathDates)کد ملی متوفی: @(el.NationalId)
خدمات: @{el.Cost.forEach((e)=>{ , @(e.Name)})}هزینه نهایی @(el.TotalCosts) ریال نزد بانک ملی به نام آرامستان بهشت هاجر
ردیف: @(el.Row)قطعه: @(el.StatesId)شماره قبر: @(el.GravePlaceId)
نام و نام خانوادگی همراه: @(el.FollowerName)نسبت همراه با متوفی: @(el.FollowerRelToDeadPerson)کد ملی همراه: @(el.FollowerNationalId)
شماره تماس همراه متوفی: @(el.FollowerPhoneNumber)سریال تراکنش:محل مهر و امضا
+
+
+
+
+
+
+
+
نسخه کاربر
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
نام و نام خانوادگی متوفی: @(el.FullName)تاریخ فوت: @(el.DeathDates)کد ملی متوفی: @(el.NationalId)
خدمات: @{el.Cost.forEach((e)=>{ , @(e.Name)})}هزینه نهایی @(el.TotalCosts) ریال نزد بانک ملی به نام آرامستان بهشت هاجر
ردیف: @(el.Row)قطعه: @(el.StatesId)شماره قبر: @(el.GravePlaceId)
نام و نام خانوادگی همراه: @(el.FollowerName)نسبت همراه با متوفی: @(el.FollowerRelToDeadPerson)کد ملی همراه: @(el.FollowerNationalId)
شماره تماس همراه متوفی: @(el.FollowerPhoneNumber)سریال تراکنش:محل مهر و امضا
+
+
+
+
+
+
+
+
+
+
+ }) + } + } + } + + + + + }) \ No newline at end of file diff --git a/views/reports.vash b/views/reports.vash new file mode 100644 index 0000000..8a7fb89 --- /dev/null +++ b/views/reports.vash @@ -0,0 +1,115 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { + +
+
+ + +
    +
  • تاریخ دفن
  • +
  • تاریخ فوت
  • +
  • درامد-تاریخ واریز
  • +
+
+
+ + +
+
+ + +
+ +
+
+ + + + + + @{model.user.Password = ''} + + + }) +}) \ No newline at end of file diff --git a/views/settings.vash b/views/settings.vash new file mode 100644 index 0000000..03b1193 --- /dev/null +++ b/views/settings.vash @@ -0,0 +1,31 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+ + +
+ +
+ + @{model.user.Password = ''} + + }) +}) \ No newline at end of file diff --git a/views/statements_add.vash b/views/statements_add.vash new file mode 100644 index 0000000..7ff0c12 --- /dev/null +++ b/views/statements_add.vash @@ -0,0 +1,46 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+ + +
+
+

+      
+ +
+ + @{model.user.Password = ''} + + + }) +}) \ No newline at end of file diff --git a/views/states.vash b/views/states.vash new file mode 100644 index 0000000..7bb189a --- /dev/null +++ b/views/states.vash @@ -0,0 +1,36 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+
قطعه ها
+ +
+
+
کد قطعه
+
نام قطعه
+
ردیف ها
+
تعداد
+
عملیات
+
+ @model.State.forEach(function(item){ +
+
@(item.StateId)
+
@(item.Name)
+
@(item.Rows)
+
@(item.Count)
+
+
ویرایش
+
حذف
+
+
+ }) +
+ + @{model.user.Password = ''} + + + + }) +}) \ No newline at end of file diff --git a/views/users.vash b/views/users.vash new file mode 100644 index 0000000..a1b2c46 --- /dev/null +++ b/views/users.vash @@ -0,0 +1,37 @@ +@html.extend('admin_layout', function(model) { + @html.block('content', function(model) { +
+
+
کارمند ها
+ +
+
+
ردیف
+
نام
+
نام کاربری
+
عملیات
+
+ @{var counter = 0} + @model.Users.forEach(function(item){ + @{counter += 1} + @{item.Password = ""} +
+
@(counter)
+
@(item.Name)
+
@(item.Username)
+
+
ویرایش
+
حذف
+
+
+ }) +
+ + @{model.user.Password = ''} + + + + }) +}) \ No newline at end of file