Best Python code snippet using tappy_python
todo_pb.js
Source:todo_pb.js
1/**2 * @fileoverview3 * @enhanceable4 * @suppress {messageConventions} JS Compiler reports an error if a variable or5 * field starts with 'MSG_' and isn't a translatable message.6 * @public7 */8// GENERATED CODE -- DO NOT EDIT!9/* eslint-disable */10var jspb = require('google-protobuf');11var goog = jspb;12var global = Function('return this')();13var google_protobuf_Empty_pb = require('google-protobuf/google/protobuf/empty_pb.js');14goog.exportSymbol('proto.todoList.AddTodoRequest', null, global);15goog.exportSymbol('proto.todoList.GetTodoRequest', null, global);16goog.exportSymbol('proto.todoList.Todo', null, global);17goog.exportSymbol('proto.todoList.TodoListResponse', null, global);18/**19 * Generated by JsPbCodeGenerator.20 * @param {Array=} opt_data Optional initial data array, typically from a21 * server response, or constructed directly in Javascript. The array is used22 * in place and becomes part of the constructed object. It is not cloned.23 * If no data is provided, the constructed object will be empty, but still24 * valid.25 * @extends {jspb.Message}26 * @constructor27 */28proto.todoList.TodoListResponse = function(opt_data) {29 jspb.Message.initialize(30 this,31 opt_data,32 0,33 -1,34 proto.todoList.TodoListResponse.repeatedFields_,35 null36 );37};38goog.inherits(proto.todoList.TodoListResponse, jspb.Message);39if (goog.DEBUG && !COMPILED) {40 proto.todoList.TodoListResponse.displayName =41 'proto.todoList.TodoListResponse';42}43/**44 * List of repeated fields within this message type.45 * @private {!Array<number>}46 * @const47 */48proto.todoList.TodoListResponse.repeatedFields_ = [1];49if (jspb.Message.GENERATE_TO_OBJECT) {50 /**51 * Creates an object representation of this proto suitable for use in Soy templates.52 * Field names that are reserved in JavaScript and will be renamed to pb_name.53 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.54 * For the list of reserved names please see:55 * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.56 * @param {boolean=} opt_includeInstance Whether to include the JSPB instance57 * for transitional soy proto support: http://goto/soy-param-migration58 * @return {!Object}59 */60 proto.todoList.TodoListResponse.prototype.toObject = function(61 opt_includeInstance62 ) {63 return proto.todoList.TodoListResponse.toObject(opt_includeInstance, this);64 };65 /**66 * Static version of the {@see toObject} method.67 * @param {boolean|undefined} includeInstance Whether to include the JSPB68 * instance for transitional soy proto support:69 * http://goto/soy-param-migration70 * @param {!proto.todoList.TodoListResponse} msg The msg instance to transform.71 * @return {!Object}72 * @suppress {unusedLocalVariables} f is only used for nested messages73 */74 proto.todoList.TodoListResponse.toObject = function(includeInstance, msg) {75 var f,76 obj = {77 todoList: jspb.Message.toObjectList(78 msg.getTodoList(),79 proto.todoList.Todo.toObject,80 includeInstance81 )82 };83 if (includeInstance) {84 obj.$jspbMessageInstance = msg;85 }86 return obj;87 };88}89/**90 * Deserializes binary data (in protobuf wire format).91 * @param {jspb.ByteSource} bytes The bytes to deserialize.92 * @return {!proto.todoList.TodoListResponse}93 */94proto.todoList.TodoListResponse.deserializeBinary = function(bytes) {95 var reader = new jspb.BinaryReader(bytes);96 var msg = new proto.todoList.TodoListResponse();97 return proto.todoList.TodoListResponse.deserializeBinaryFromReader(98 msg,99 reader100 );101};102/**103 * Deserializes binary data (in protobuf wire format) from the104 * given reader into the given message object.105 * @param {!proto.todoList.TodoListResponse} msg The message object to deserialize into.106 * @param {!jspb.BinaryReader} reader The BinaryReader to use.107 * @return {!proto.todoList.TodoListResponse}108 */109proto.todoList.TodoListResponse.deserializeBinaryFromReader = function(110 msg,111 reader112) {113 while (reader.nextField()) {114 if (reader.isEndGroup()) {115 break;116 }117 var field = reader.getFieldNumber();118 switch (field) {119 case 1:120 var value = new proto.todoList.Todo();121 reader.readMessage(122 value,123 proto.todoList.Todo.deserializeBinaryFromReader124 );125 msg.addTodo(value);126 break;127 default:128 reader.skipField();129 break;130 }131 }132 return msg;133};134/**135 * Serializes the message to binary data (in protobuf wire format).136 * @return {!Uint8Array}137 */138proto.todoList.TodoListResponse.prototype.serializeBinary = function() {139 var writer = new jspb.BinaryWriter();140 proto.todoList.TodoListResponse.serializeBinaryToWriter(this, writer);141 return writer.getResultBuffer();142};143/**144 * Serializes the given message to binary data (in protobuf wire145 * format), writing to the given BinaryWriter.146 * @param {!proto.todoList.TodoListResponse} message147 * @param {!jspb.BinaryWriter} writer148 * @suppress {unusedLocalVariables} f is only used for nested messages149 */150proto.todoList.TodoListResponse.serializeBinaryToWriter = function(151 message,152 writer153) {154 var f = undefined;155 f = message.getTodoList();156 if (f.length > 0) {157 writer.writeRepeatedMessage(158 1,159 f,160 proto.todoList.Todo.serializeBinaryToWriter161 );162 }163};164/**165 * repeated Todo todo = 1;166 * @return {!Array<!proto.todoList.Todo>}167 */168proto.todoList.TodoListResponse.prototype.getTodoList = function() {169 return /** @type{!Array<!proto.todoList.Todo>} */ (jspb.Message.getRepeatedWrapperField(170 this,171 proto.todoList.Todo,172 1173 ));174};175/** @param {!Array<!proto.todoList.Todo>} value */176proto.todoList.TodoListResponse.prototype.setTodoList = function(value) {177 jspb.Message.setRepeatedWrapperField(this, 1, value);178};179/**180 * @param {!proto.todoList.Todo=} opt_value181 * @param {number=} opt_index182 * @return {!proto.todoList.Todo}183 */184proto.todoList.TodoListResponse.prototype.addTodo = function(185 opt_value,186 opt_index187) {188 return jspb.Message.addToRepeatedWrapperField(189 this,190 1,191 opt_value,192 proto.todoList.Todo,193 opt_index194 );195};196proto.todoList.TodoListResponse.prototype.clearTodoList = function() {197 this.setTodoList([]);198};199/**200 * Generated by JsPbCodeGenerator.201 * @param {Array=} opt_data Optional initial data array, typically from a202 * server response, or constructed directly in Javascript. The array is used203 * in place and becomes part of the constructed object. It is not cloned.204 * If no data is provided, the constructed object will be empty, but still205 * valid.206 * @extends {jspb.Message}207 * @constructor208 */209proto.todoList.Todo = function(opt_data) {210 jspb.Message.initialize(this, opt_data, 0, -1, null, null);211};212goog.inherits(proto.todoList.Todo, jspb.Message);213if (goog.DEBUG && !COMPILED) {214 proto.todoList.Todo.displayName = 'proto.todoList.Todo';215}216if (jspb.Message.GENERATE_TO_OBJECT) {217 /**218 * Creates an object representation of this proto suitable for use in Soy templates.219 * Field names that are reserved in JavaScript and will be renamed to pb_name.220 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.221 * For the list of reserved names please see:222 * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.223 * @param {boolean=} opt_includeInstance Whether to include the JSPB instance224 * for transitional soy proto support: http://goto/soy-param-migration225 * @return {!Object}226 */227 proto.todoList.Todo.prototype.toObject = function(opt_includeInstance) {228 return proto.todoList.Todo.toObject(opt_includeInstance, this);229 };230 /**231 * Static version of the {@see toObject} method.232 * @param {boolean|undefined} includeInstance Whether to include the JSPB233 * instance for transitional soy proto support:234 * http://goto/soy-param-migration235 * @param {!proto.todoList.Todo} msg The msg instance to transform.236 * @return {!Object}237 * @suppress {unusedLocalVariables} f is only used for nested messages238 */239 proto.todoList.Todo.toObject = function(includeInstance, msg) {240 var f,241 obj = {242 id: jspb.Message.getFieldWithDefault(msg, 1, ''),243 title: jspb.Message.getFieldWithDefault(msg, 2, ''),244 detail: jspb.Message.getFieldWithDefault(msg, 3, '')245 };246 if (includeInstance) {247 obj.$jspbMessageInstance = msg;248 }249 return obj;250 };251}252/**253 * Deserializes binary data (in protobuf wire format).254 * @param {jspb.ByteSource} bytes The bytes to deserialize.255 * @return {!proto.todoList.Todo}256 */257proto.todoList.Todo.deserializeBinary = function(bytes) {258 var reader = new jspb.BinaryReader(bytes);259 var msg = new proto.todoList.Todo();260 return proto.todoList.Todo.deserializeBinaryFromReader(msg, reader);261};262/**263 * Deserializes binary data (in protobuf wire format) from the264 * given reader into the given message object.265 * @param {!proto.todoList.Todo} msg The message object to deserialize into.266 * @param {!jspb.BinaryReader} reader The BinaryReader to use.267 * @return {!proto.todoList.Todo}268 */269proto.todoList.Todo.deserializeBinaryFromReader = function(msg, reader) {270 while (reader.nextField()) {271 if (reader.isEndGroup()) {272 break;273 }274 var field = reader.getFieldNumber();275 switch (field) {276 case 1:277 var value = /** @type {string} */ (reader.readString());278 msg.setId(value);279 break;280 case 2:281 var value = /** @type {string} */ (reader.readString());282 msg.setTitle(value);283 break;284 case 3:285 var value = /** @type {string} */ (reader.readString());286 msg.setDetail(value);287 break;288 default:289 reader.skipField();290 break;291 }292 }293 return msg;294};295/**296 * Serializes the message to binary data (in protobuf wire format).297 * @return {!Uint8Array}298 */299proto.todoList.Todo.prototype.serializeBinary = function() {300 var writer = new jspb.BinaryWriter();301 proto.todoList.Todo.serializeBinaryToWriter(this, writer);302 return writer.getResultBuffer();303};304/**305 * Serializes the given message to binary data (in protobuf wire306 * format), writing to the given BinaryWriter.307 * @param {!proto.todoList.Todo} message308 * @param {!jspb.BinaryWriter} writer309 * @suppress {unusedLocalVariables} f is only used for nested messages310 */311proto.todoList.Todo.serializeBinaryToWriter = function(message, writer) {312 var f = undefined;313 f = message.getId();314 if (f.length > 0) {315 writer.writeString(1, f);316 }317 f = message.getTitle();318 if (f.length > 0) {319 writer.writeString(2, f);320 }321 f = message.getDetail();322 if (f.length > 0) {323 writer.writeString(3, f);324 }325};326/**327 * optional string id = 1;328 * @return {string}329 */330proto.todoList.Todo.prototype.getId = function() {331 return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));332};333/** @param {string} value */334proto.todoList.Todo.prototype.setId = function(value) {335 jspb.Message.setProto3StringField(this, 1, value);336};337/**338 * optional string title = 2;339 * @return {string}340 */341proto.todoList.Todo.prototype.getTitle = function() {342 return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ''));343};344/** @param {string} value */345proto.todoList.Todo.prototype.setTitle = function(value) {346 jspb.Message.setProto3StringField(this, 2, value);347};348/**349 * optional string detail = 3;350 * @return {string}351 */352proto.todoList.Todo.prototype.getDetail = function() {353 return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ''));354};355/** @param {string} value */356proto.todoList.Todo.prototype.setDetail = function(value) {357 jspb.Message.setProto3StringField(this, 3, value);358};359/**360 * Generated by JsPbCodeGenerator.361 * @param {Array=} opt_data Optional initial data array, typically from a362 * server response, or constructed directly in Javascript. The array is used363 * in place and becomes part of the constructed object. It is not cloned.364 * If no data is provided, the constructed object will be empty, but still365 * valid.366 * @extends {jspb.Message}367 * @constructor368 */369proto.todoList.GetTodoRequest = function(opt_data) {370 jspb.Message.initialize(this, opt_data, 0, -1, null, null);371};372goog.inherits(proto.todoList.GetTodoRequest, jspb.Message);373if (goog.DEBUG && !COMPILED) {374 proto.todoList.GetTodoRequest.displayName = 'proto.todoList.GetTodoRequest';375}376if (jspb.Message.GENERATE_TO_OBJECT) {377 /**378 * Creates an object representation of this proto suitable for use in Soy templates.379 * Field names that are reserved in JavaScript and will be renamed to pb_name.380 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.381 * For the list of reserved names please see:382 * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.383 * @param {boolean=} opt_includeInstance Whether to include the JSPB instance384 * for transitional soy proto support: http://goto/soy-param-migration385 * @return {!Object}386 */387 proto.todoList.GetTodoRequest.prototype.toObject = function(388 opt_includeInstance389 ) {390 return proto.todoList.GetTodoRequest.toObject(opt_includeInstance, this);391 };392 /**393 * Static version of the {@see toObject} method.394 * @param {boolean|undefined} includeInstance Whether to include the JSPB395 * instance for transitional soy proto support:396 * http://goto/soy-param-migration397 * @param {!proto.todoList.GetTodoRequest} msg The msg instance to transform.398 * @return {!Object}399 * @suppress {unusedLocalVariables} f is only used for nested messages400 */401 proto.todoList.GetTodoRequest.toObject = function(includeInstance, msg) {402 var f,403 obj = {404 id: jspb.Message.getFieldWithDefault(msg, 1, '')405 };406 if (includeInstance) {407 obj.$jspbMessageInstance = msg;408 }409 return obj;410 };411}412/**413 * Deserializes binary data (in protobuf wire format).414 * @param {jspb.ByteSource} bytes The bytes to deserialize.415 * @return {!proto.todoList.GetTodoRequest}416 */417proto.todoList.GetTodoRequest.deserializeBinary = function(bytes) {418 var reader = new jspb.BinaryReader(bytes);419 var msg = new proto.todoList.GetTodoRequest();420 return proto.todoList.GetTodoRequest.deserializeBinaryFromReader(msg, reader);421};422/**423 * Deserializes binary data (in protobuf wire format) from the424 * given reader into the given message object.425 * @param {!proto.todoList.GetTodoRequest} msg The message object to deserialize into.426 * @param {!jspb.BinaryReader} reader The BinaryReader to use.427 * @return {!proto.todoList.GetTodoRequest}428 */429proto.todoList.GetTodoRequest.deserializeBinaryFromReader = function(430 msg,431 reader432) {433 while (reader.nextField()) {434 if (reader.isEndGroup()) {435 break;436 }437 var field = reader.getFieldNumber();438 switch (field) {439 case 1:440 var value = /** @type {string} */ (reader.readString());441 msg.setId(value);442 break;443 default:444 reader.skipField();445 break;446 }447 }448 return msg;449};450/**451 * Serializes the message to binary data (in protobuf wire format).452 * @return {!Uint8Array}453 */454proto.todoList.GetTodoRequest.prototype.serializeBinary = function() {455 var writer = new jspb.BinaryWriter();456 proto.todoList.GetTodoRequest.serializeBinaryToWriter(this, writer);457 return writer.getResultBuffer();458};459/**460 * Serializes the given message to binary data (in protobuf wire461 * format), writing to the given BinaryWriter.462 * @param {!proto.todoList.GetTodoRequest} message463 * @param {!jspb.BinaryWriter} writer464 * @suppress {unusedLocalVariables} f is only used for nested messages465 */466proto.todoList.GetTodoRequest.serializeBinaryToWriter = function(467 message,468 writer469) {470 var f = undefined;471 f = message.getId();472 if (f.length > 0) {473 writer.writeString(1, f);474 }475};476/**477 * optional string id = 1;478 * @return {string}479 */480proto.todoList.GetTodoRequest.prototype.getId = function() {481 return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));482};483/** @param {string} value */484proto.todoList.GetTodoRequest.prototype.setId = function(value) {485 jspb.Message.setProto3StringField(this, 1, value);486};487/**488 * Generated by JsPbCodeGenerator.489 * @param {Array=} opt_data Optional initial data array, typically from a490 * server response, or constructed directly in Javascript. The array is used491 * in place and becomes part of the constructed object. It is not cloned.492 * If no data is provided, the constructed object will be empty, but still493 * valid.494 * @extends {jspb.Message}495 * @constructor496 */497proto.todoList.AddTodoRequest = function(opt_data) {498 jspb.Message.initialize(this, opt_data, 0, -1, null, null);499};500goog.inherits(proto.todoList.AddTodoRequest, jspb.Message);501if (goog.DEBUG && !COMPILED) {502 proto.todoList.AddTodoRequest.displayName = 'proto.todoList.AddTodoRequest';503}504if (jspb.Message.GENERATE_TO_OBJECT) {505 /**506 * Creates an object representation of this proto suitable for use in Soy templates.507 * Field names that are reserved in JavaScript and will be renamed to pb_name.508 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.509 * For the list of reserved names please see:510 * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.511 * @param {boolean=} opt_includeInstance Whether to include the JSPB instance512 * for transitional soy proto support: http://goto/soy-param-migration513 * @return {!Object}514 */515 proto.todoList.AddTodoRequest.prototype.toObject = function(516 opt_includeInstance517 ) {518 return proto.todoList.AddTodoRequest.toObject(opt_includeInstance, this);519 };520 /**521 * Static version of the {@see toObject} method.522 * @param {boolean|undefined} includeInstance Whether to include the JSPB523 * instance for transitional soy proto support:524 * http://goto/soy-param-migration525 * @param {!proto.todoList.AddTodoRequest} msg The msg instance to transform.526 * @return {!Object}527 * @suppress {unusedLocalVariables} f is only used for nested messages528 */529 proto.todoList.AddTodoRequest.toObject = function(includeInstance, msg) {530 var f,531 obj = {532 title: jspb.Message.getFieldWithDefault(msg, 1, ''),533 detail: jspb.Message.getFieldWithDefault(msg, 2, '')534 };535 if (includeInstance) {536 obj.$jspbMessageInstance = msg;537 }538 return obj;539 };540}541/**542 * Deserializes binary data (in protobuf wire format).543 * @param {jspb.ByteSource} bytes The bytes to deserialize.544 * @return {!proto.todoList.AddTodoRequest}545 */546proto.todoList.AddTodoRequest.deserializeBinary = function(bytes) {547 var reader = new jspb.BinaryReader(bytes);548 var msg = new proto.todoList.AddTodoRequest();549 return proto.todoList.AddTodoRequest.deserializeBinaryFromReader(msg, reader);550};551/**552 * Deserializes binary data (in protobuf wire format) from the553 * given reader into the given message object.554 * @param {!proto.todoList.AddTodoRequest} msg The message object to deserialize into.555 * @param {!jspb.BinaryReader} reader The BinaryReader to use.556 * @return {!proto.todoList.AddTodoRequest}557 */558proto.todoList.AddTodoRequest.deserializeBinaryFromReader = function(559 msg,560 reader561) {562 while (reader.nextField()) {563 if (reader.isEndGroup()) {564 break;565 }566 var field = reader.getFieldNumber();567 switch (field) {568 case 1:569 var value = /** @type {string} */ (reader.readString());570 msg.setTitle(value);571 break;572 case 2:573 var value = /** @type {string} */ (reader.readString());574 msg.setDetail(value);575 break;576 default:577 reader.skipField();578 break;579 }580 }581 return msg;582};583/**584 * Serializes the message to binary data (in protobuf wire format).585 * @return {!Uint8Array}586 */587proto.todoList.AddTodoRequest.prototype.serializeBinary = function() {588 var writer = new jspb.BinaryWriter();589 proto.todoList.AddTodoRequest.serializeBinaryToWriter(this, writer);590 return writer.getResultBuffer();591};592/**593 * Serializes the given message to binary data (in protobuf wire594 * format), writing to the given BinaryWriter.595 * @param {!proto.todoList.AddTodoRequest} message596 * @param {!jspb.BinaryWriter} writer597 * @suppress {unusedLocalVariables} f is only used for nested messages598 */599proto.todoList.AddTodoRequest.serializeBinaryToWriter = function(600 message,601 writer602) {603 var f = undefined;604 f = message.getTitle();605 if (f.length > 0) {606 writer.writeString(1, f);607 }608 f = message.getDetail();609 if (f.length > 0) {610 writer.writeString(2, f);611 }612};613/**614 * optional string title = 1;615 * @return {string}616 */617proto.todoList.AddTodoRequest.prototype.getTitle = function() {618 return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ''));619};620/** @param {string} value */621proto.todoList.AddTodoRequest.prototype.setTitle = function(value) {622 jspb.Message.setProto3StringField(this, 1, value);623};624/**625 * optional string detail = 2;626 * @return {string}627 */628proto.todoList.AddTodoRequest.prototype.getDetail = function() {629 return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ''));630};631/** @param {string} value */632proto.todoList.AddTodoRequest.prototype.setDetail = function(value) {633 jspb.Message.setProto3StringField(this, 2, value);634};...
todos.js
Source:todos.js
1const express = require("express");2const morgan = require("morgan");3const flash = require("express-flash");4const session = require("express-session");5const { body, validationResult } = require("express-validator");6const TodoList = require("./lib/todolist");7const { sortTodoLists, sortTodos } = require("./lib/sort");8const store = require("connect-loki");9const app = express();10const host = "localhost";11const port = 3000;12const LokiStore = store(session);13const Todo = require("./lib/todo");14const removeTodoList = (todoListId, todoLists) => {15 let todoListIdx = todoLists.findIndex(todoList => todoList.id === todoListId);16 todoLists.splice(todoListIdx, 1);17}18app.set("views", "./views");19app.set("view engine", "pug");20app.use(morgan("common"));21app.use(express.static("public"));22app.use(express.urlencoded({ extended: false }));23app.use(session({24 cookie: {25 httpOnly: true,26 maxAge: 31 * 24 * 60 * 60 * 1000, // 31 days in millseconds27 path: "/",28 secure: false,29 },30 name: "launch-school-todos-session-id",31 resave: false,32 saveUninitialized: true,33 secret: "this is not very secure",34 store: new LokiStore({}),35}));36app.use(flash());37// Set up persistent session data38app.use((req, res, next) => {39 let todoLists = [];40 if ("todoLists" in req.session) {41 req.session.todoLists.forEach(todoList => {42 todoLists.push(TodoList.makeTodoList(todoList));43 });44 }45 req.session.todoLists = todoLists;46 next();47});48app.use((req, res, next) => {49 res.locals.flash = req.session.flash;50 delete req.session.flash;51 next();52});53app.use((err, req, res, _next) => {54 console.log(err);55 res.status(404).send(err.message);56});57const loadTodoList = (todoListId, todoLists) => {58 return todoLists.find(todoList => todoList.id === todoListId);59};60// I added this61const loadTodo = (todoList, todoId, todoLists) => {62 return todoList.todos.find(todo => todo.id === Number(todoId));63};64app.get("/", (req, res) => {65 res.redirect("/lists");66});67app.get("/lists/new", (req, res) => {68 res.render("new-list");69});70app.post("/lists",71 [72 body("todoListTitle")73 .trim()74 .isLength({ min: 1 })75 .withMessage("The list title is required.")76 .isLength({ max: 100 })77 .withMessage("List title must be between 1 and 100 characters.")78 .custom((title, { req }) => {79 let todoLists = req.session.todoLists;80 let duplicate = todoLists.find(list => list.title === title);81 return duplicate === undefined;82 })83 .withMessage("List title must be unique."),84 ],85 (req, res) => {86 let errors = validationResult(req);87 if (!errors.isEmpty()) {88 errors.array().forEach(message => req.flash("error", message.msg));89 res.render("new-list", {90 flash: req.flash(),91 todoListTitle: req.body.todoListTitle,92 });93 } else {94 let todoLists = req.session.todoLists;95 todoLists.push(new TodoList(req.body.todoListTitle));96 req.flash("success", "The todo list has been created.");97 res.redirect("/lists");98 }99 }100);101app.get("/lists", (req, res) => {102 res.render("lists", {103 todoLists: sortTodoLists(req.session.todoLists),104 });105});106app.get("/lists/:todoListId", (req, res, next) => {107 let todoListId = req.params.todoListId;108 let todoList = loadTodoList(+todoListId, req.session.todoLists);109 if (todoList === undefined) {110 next(new Error("Not found."));111 } else {112 res.render("list", {113 todoList: todoList,114 todos: sortTodos(todoList),115 });116 }117});118app.get("/lists/:todoListId/edit", (req, res, next) => {119 let todoListId = req.params.todoListId;120 let todoList = loadTodoList(+todoListId, req.session.todoLists);121 if (!todoList) {122 next(new Error("Not found."));123 } else {124 res.render("edit-list", {todoList: todoList});125 }126});127app.post("/lists/:todoListId/todos/:todoId/toggle", (req, res) => {128 let todoLists = req.session.todoLists;129 let todoListId = req.params.todoListId;130 let todoList = loadTodoList(+todoListId, todoLists);131 let todoId = req.params.todoId;132 let todo = loadTodo(todoList, todoId, todoLists);133 if (!todo || !todoList) {134 next(new Error("Not found."));135 } else { 136 todo.isDone() ? todo.markUndone() : todo.markDone();137 req.flash("success", `Your task has been marked ${todo.isDone() ? 'done' : 'undone'}.`);138 res.redirect(`/lists/${todoListId}/`);139 }140});141app.post("/lists/:todoListId/complete_all", (req, res) => {142 let todoListId = req.params.todoListId;143 let todoList = loadTodoList(+todoListId, req.session.todoLists);144 if (!todoList) {145 next(new Error('Not found.'));146 } else {147 todoList.markAllDone();148 req.flash("success", "All tasks have been marked done.");149 res.redirect(`/lists/${todoListId}`);150 }151})152app.post("/lists/:todoListId/todos",153 [154 body("todoTitle")155 .trim()156 .isLength({ min: 1 })157 .withMessage("Todo must be between 1 and 100 characters.")158 .isLength({ max: 100 })159 .withMessage("Todo must be between 1 and 100 characters.")160 ],161 (req, res, next) => {162 let todoListId = req.params.todoListId;163 let todoList = loadTodoList(+todoListId, req.session.todoLists);164 let errors = validationResult(req);165 if (!todoList) {166 next(new Error('Not found.')); 167 } else if (!errors.isEmpty()) {168 errors.array().forEach(message => req.flash("error", message.msg));169 res.render("list", {170 flash: req.flash(),171 todoList: todoList,172 todos: sortTodos(todoList),173 todoTitle: req.body.todoTitle,174 });175 } else {176 let todo = new Todo(req.body.todoTitle);177 todoList.add(todo);178 req.flash("sucess", "The todo has been created.");179 res.redirect(`/lists/${todoListId}`);180 }181 });182app.post("/lists/:todoListId/destroy", (req, res, next) => {183 let todoListId = req.params.todoListId;184 let todoList = loadTodoList(+todoListId, req.session.todoLists);185 186 if (!todoList) {187 next(new Error('Not found.'));188 } else {189 removeTodoList(todoListId, req.session.todoLists);190 req.flash("sucess", "The todo list has been deleted.");191 res.redirect("/lists");192 }193});194// stopped here195app.post("/lists/:todoListId/edit",196 [197 body("todoListTitle")198 .trim()199 .isLength({ min: 1 })200 .withMessage("The new title must be between 1 and 100 characters.")201 .isLength({ max: 100 })202 .withMessage("List title must be between 1 and 100 characters.")203 .custom((title, { req }) => {204 let todoLists = req.session.todoLists;205 let duplicate = todoLists.find(list => list.title === title);206 return duplicate === undefined;207 })208 .withMessage("List title must be unique."),209 ],210 (req, res, next) => {211 let todoListId = req.params.todoListId;212 let todoList = loadTodoList(+todoListId, req.session.todoLists);213 let errors = validationResult(req);214 if (!todoList) {215 next(new Error('Not found.'));216 } 217 218 else if (!errors.isEmpty()) {219 errors.array().forEach(message => req.flash("error", message.msg));220 res.render("edit-list", {221 flash: req.flash(),222 todoListTitle: req.body.todoListTitle,223 todoList: todoList224 });225 } else {226 todoList.setTitle(req.body.todoListTitle);227 req.flash("success", "The todo list title has been updated.");228 res.redirect(`/lists/${todoListId}`);229 }230 });231app.listen(port, host, () => {232 console.log(`Todos is listening on port ${port} of ${host}!`);...
todolistresponse.js
Source:todolistresponse.js
1/**2 * @fileoverview3 * @enhanceable4 * @suppress {messageConventions} JS Compiler reports an error if a variable or5 * field starts with 'MSG_' and isn't a translatable message.6 * @public7 */8// GENERATED CODE -- DO NOT EDIT!9goog.provide('proto.todoList.TodoListResponse');10goog.require('jspb.BinaryReader');11goog.require('jspb.BinaryWriter');12goog.require('jspb.Message');13goog.require('proto.todoList.Todo');14/**15 * Generated by JsPbCodeGenerator.16 * @param {Array=} opt_data Optional initial data array, typically from a17 * server response, or constructed directly in Javascript. The array is used18 * in place and becomes part of the constructed object. It is not cloned.19 * If no data is provided, the constructed object will be empty, but still20 * valid.21 * @extends {jspb.Message}22 * @constructor23 */24proto.todoList.TodoListResponse = function(opt_data) {25 jspb.Message.initialize(this, opt_data, 0, -1, proto.todoList.TodoListResponse.repeatedFields_, null);26};27goog.inherits(proto.todoList.TodoListResponse, jspb.Message);28if (goog.DEBUG && !COMPILED) {29 proto.todoList.TodoListResponse.displayName = 'proto.todoList.TodoListResponse';30}31/**32 * List of repeated fields within this message type.33 * @private {!Array<number>}34 * @const35 */36proto.todoList.TodoListResponse.repeatedFields_ = [1];37if (jspb.Message.GENERATE_TO_OBJECT) {38/**39 * Creates an object representation of this proto suitable for use in Soy templates.40 * Field names that are reserved in JavaScript and will be renamed to pb_name.41 * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.42 * For the list of reserved names please see:43 * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.44 * @param {boolean=} opt_includeInstance Whether to include the JSPB instance45 * for transitional soy proto support: http://goto/soy-param-migration46 * @return {!Object}47 */48proto.todoList.TodoListResponse.prototype.toObject = function(opt_includeInstance) {49 return proto.todoList.TodoListResponse.toObject(opt_includeInstance, this);50};51/**52 * Static version of the {@see toObject} method.53 * @param {boolean|undefined} includeInstance Whether to include the JSPB54 * instance for transitional soy proto support:55 * http://goto/soy-param-migration56 * @param {!proto.todoList.TodoListResponse} msg The msg instance to transform.57 * @return {!Object}58 * @suppress {unusedLocalVariables} f is only used for nested messages59 */60proto.todoList.TodoListResponse.toObject = function(includeInstance, msg) {61 var f, obj = {62 todoList: jspb.Message.toObjectList(msg.getTodoList(),63 proto.todoList.Todo.toObject, includeInstance)64 };65 if (includeInstance) {66 obj.$jspbMessageInstance = msg;67 }68 return obj;69};70}71/**72 * Deserializes binary data (in protobuf wire format).73 * @param {jspb.ByteSource} bytes The bytes to deserialize.74 * @return {!proto.todoList.TodoListResponse}75 */76proto.todoList.TodoListResponse.deserializeBinary = function(bytes) {77 var reader = new jspb.BinaryReader(bytes);78 var msg = new proto.todoList.TodoListResponse;79 return proto.todoList.TodoListResponse.deserializeBinaryFromReader(msg, reader);80};81/**82 * Deserializes binary data (in protobuf wire format) from the83 * given reader into the given message object.84 * @param {!proto.todoList.TodoListResponse} msg The message object to deserialize into.85 * @param {!jspb.BinaryReader} reader The BinaryReader to use.86 * @return {!proto.todoList.TodoListResponse}87 */88proto.todoList.TodoListResponse.deserializeBinaryFromReader = function(msg, reader) {89 while (reader.nextField()) {90 if (reader.isEndGroup()) {91 break;92 }93 var field = reader.getFieldNumber();94 switch (field) {95 case 1:96 var value = new proto.todoList.Todo;97 reader.readMessage(value,proto.todoList.Todo.deserializeBinaryFromReader);98 msg.addTodo(value);99 break;100 default:101 reader.skipField();102 break;103 }104 }105 return msg;106};107/**108 * Serializes the message to binary data (in protobuf wire format).109 * @return {!Uint8Array}110 */111proto.todoList.TodoListResponse.prototype.serializeBinary = function() {112 var writer = new jspb.BinaryWriter();113 proto.todoList.TodoListResponse.serializeBinaryToWriter(this, writer);114 return writer.getResultBuffer();115};116/**117 * Serializes the given message to binary data (in protobuf wire118 * format), writing to the given BinaryWriter.119 * @param {!proto.todoList.TodoListResponse} message120 * @param {!jspb.BinaryWriter} writer121 * @suppress {unusedLocalVariables} f is only used for nested messages122 */123proto.todoList.TodoListResponse.serializeBinaryToWriter = function(message, writer) {124 var f = undefined;125 f = message.getTodoList();126 if (f.length > 0) {127 writer.writeRepeatedMessage(128 1,129 f,130 proto.todoList.Todo.serializeBinaryToWriter131 );132 }133};134/**135 * repeated Todo todo = 1;136 * @return {!Array<!proto.todoList.Todo>}137 */138proto.todoList.TodoListResponse.prototype.getTodoList = function() {139 return /** @type{!Array<!proto.todoList.Todo>} */ (140 jspb.Message.getRepeatedWrapperField(this, proto.todoList.Todo, 1));141};142/** @param {!Array<!proto.todoList.Todo>} value */143proto.todoList.TodoListResponse.prototype.setTodoList = function(value) {144 jspb.Message.setRepeatedWrapperField(this, 1, value);145};146/**147 * @param {!proto.todoList.Todo=} opt_value148 * @param {number=} opt_index149 * @return {!proto.todoList.Todo}150 */151proto.todoList.TodoListResponse.prototype.addTodo = function(opt_value, opt_index) {152 return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.todoList.Todo, opt_index);153};154proto.todoList.TodoListResponse.prototype.clearTodoList = function() {155 this.setTodoList([]);...
todomvc.js
Source:todomvc.js
1module.exports = {2 'todomvc': function (browser) {3 browser4 .url('http://localhost:8080/examples/todomvc/#test')5 .waitForElementVisible('.todoapp', 1000)6 .assert.notVisible('.main')7 .assert.notVisible('.footer')8 .assert.count('.filters .selected', 1)9 .assert.evaluate(function () {10 return document.querySelector('.filters .selected').textContent === 'All'11 })12 createNewItem('test')13 .assert.count('.todo', 1)14 .assert.notVisible('.todo .edit')15 .assert.containsText('.todo label', 'test')16 .assert.containsText('.todo-count strong', '1')17 .assert.checked('.todo .toggle', false)18 .assert.visible('.main')19 .assert.visible('.footer')20 .assert.notVisible('.clear-completed')21 .assert.value('.new-todo', '')22 createNewItem('test2')23 .assert.count('.todo', 2)24 .assert.containsText('.todo:nth-child(2) label', 'test2')25 .assert.containsText('.todo-count strong', '2')26 // toggle27 browser28 .click('.todo .toggle')29 .assert.count('.todo.completed', 1)30 .assert.cssClassPresent('.todo:nth-child(1)', 'completed')31 .assert.containsText('.todo-count strong', '1')32 .assert.visible('.clear-completed')33 createNewItem('test3')34 .assert.count('.todo', 3)35 .assert.containsText('.todo:nth-child(3) label', 'test3')36 .assert.containsText('.todo-count strong', '2')37 createNewItem('test4')38 createNewItem('test5')39 .assert.count('.todo', 5)40 .assert.containsText('.todo-count strong', '4')41 // toggle more42 browser43 .click('.todo:nth-child(4) .toggle')44 .click('.todo:nth-child(5) .toggle')45 .assert.count('.todo.completed', 3)46 .assert.containsText('.todo-count strong', '2')47 // remove48 removeItemAt(1)49 .assert.count('.todo', 4)50 .assert.count('.todo.completed', 2)51 .assert.containsText('.todo-count strong', '2')52 removeItemAt(2)53 .assert.count('.todo', 3)54 .assert.count('.todo.completed', 2)55 .assert.containsText('.todo-count strong', '1')56 // remove all57 browser58 .click('.clear-completed')59 .assert.count('.todo', 1)60 .assert.containsText('.todo label', 'test2')61 .assert.count('.todo.completed', 0)62 .assert.containsText('.todo-count strong', '1')63 .assert.notVisible('.clear-completed')64 // prepare to test filters65 createNewItem('test')66 createNewItem('test')67 .click('.todo:nth-child(2) .toggle')68 .click('.todo:nth-child(3) .toggle')69 // active filter70 browser71 .click('.filters li:nth-child(2) a')72 .assert.count('.todo', 1)73 .assert.count('.todo.completed', 0)74 // add item with filter active75 createNewItem('test')76 .assert.count('.todo', 2)77 // complted filter78 browser.click('.filters li:nth-child(3) a')79 .assert.count('.todo', 2)80 .assert.count('.todo.completed', 2)81 // filter on page load82 browser.url('http://localhost:8080/examples/todomvc/#active')83 .assert.count('.todo', 2)84 .assert.count('.todo.completed', 0)85 .assert.containsText('.todo-count strong', '2')86 // completed on page load87 browser.url('http://localhost:8080/examples/todomvc/#completed')88 .assert.count('.todo', 2)89 .assert.count('.todo.completed', 2)90 .assert.containsText('.todo-count strong', '2')91 // toggling with filter active92 browser93 .click('.todo .toggle')94 .assert.count('.todo', 1)95 .click('.filters li:nth-child(2) a')96 .assert.count('.todo', 3)97 .click('.todo .toggle')98 .assert.count('.todo', 2)99 // editing triggered by blur100 browser101 .click('.filters li:nth-child(1) a')102 .dblClick('.todo:nth-child(1) label')103 .assert.count('.todo.editing', 1)104 .assert.focused('.todo:nth-child(1) .edit')105 .clearValue('.todo:nth-child(1) .edit')106 .setValue('.todo:nth-child(1) .edit', 'edited!')107 .click('footer') // blur108 .assert.count('.todo.editing', 0)109 .assert.containsText('.todo:nth-child(1) label', 'edited!')110 // editing triggered by enter111 browser112 .dblClick('.todo label')113 .enterValue('.todo:nth-child(1) .edit', 'edited again!')114 .assert.count('.todo.editing', 0)115 .assert.containsText('.todo:nth-child(1) label', 'edited again!')116 // cancel117 browser118 .dblClick('.todo label')119 .clearValue('.todo:nth-child(1) .edit')120 .setValue('.todo:nth-child(1) .edit', 'edited!')121 .trigger('.todo:nth-child(1) .edit', 'keyup', 27)122 .assert.count('.todo.editing', 0)123 .assert.containsText('.todo:nth-child(1) label', 'edited again!')124 // empty value should remove125 browser126 .dblClick('.todo label')127 .enterValue('.todo:nth-child(1) .edit', ' ')128 .assert.count('.todo', 3)129 // toggle all130 browser131 .click('.toggle-all')132 .assert.count('.todo.completed', 3)133 .click('.toggle-all')134 .assert.count('.todo:not(.completed)', 3)135 .end()136 function createNewItem (text) {137 return browser.enterValue('.new-todo', text)138 }139 function removeItemAt (n) {140 return browser141 .moveToElement('.todo:nth-child(' + n + ')', 10, 10)142 .click('.todo:nth-child(' + n + ') .destroy')143 }144 }...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!