Best JavaScript code snippet using stryker-parent
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 }...
jquery.todo.js
Source:jquery.todo.js
1/**2* Theme: Ubold Admin Template3* Author: Coderthemes4* Todos-widget5*/6!function($) {7 "use strict";8 var TodoApp = function() {9 this.$body = $("body"),10 this.$todoContainer = $('#todo-container'),11 this.$todoMessage = $("#todo-message"),12 this.$todoRemaining = $("#todo-remaining"),13 this.$todoTotal = $("#todo-total"),14 this.$archiveBtn = $("#btn-archive"),15 this.$todoList = $("#todo-list"),16 this.$todoDonechk = ".todo-done",17 this.$todoForm = $("#todo-form"),18 this.$todoInput = $("#todo-input-text"),19 this.$todoBtn = $("#todo-btn-submit"),20 this.$todoData = [21 {22 'id': '1',23 'text': 'Design One page theme',24 'done': false25 },26 {27 'id': '2',28 'text': 'Build a js based app',29 'done': true30 },31 {32 'id': '3',33 'text': 'Creating component page',34 'done': true35 },36 {37 'id': '4',38 'text': 'Testing??',39 'done': true40 },41 {42 'id': '5',43 'text': 'Hehe!! This is looks cool!',44 'done': false45 },46 {47 'id': '6',48 'text': 'Build an angular app',49 'done': true50 }];51 this.$todoCompletedData = [];52 this.$todoUnCompletedData = [];53 };54 //mark/unmark - you can use ajax to save data on server side55 TodoApp.prototype.markTodo = function(todoId, complete) {56 for(var count=0; count<this.$todoData.length;count++) {57 if(this.$todoData[count].id == todoId) {58 this.$todoData[count].done = complete;59 }60 }61 },62 //adds new todo63 TodoApp.prototype.addTodo = function(todoText) {64 this.$todoData.push({'id': this.$todoData.length, 'text': todoText, 'done': false});65 //regenerate list66 this.generate();67 },68 //Archives the completed todos69 TodoApp.prototype.archives = function() {70 this.$todoUnCompletedData = [];71 for(var count=0; count<this.$todoData.length;count++) {72 //geretaing html73 var todoItem = this.$todoData[count];74 if(todoItem.done == true) {75 this.$todoCompletedData.push(todoItem);76 } else {77 this.$todoUnCompletedData.push(todoItem);78 }79 }80 this.$todoData = [];81 this.$todoData = [].concat(this.$todoUnCompletedData);82 //regenerate todo list83 this.generate();84 },85 //Generates todos86 TodoApp.prototype.generate = function() {87 //clear list88 this.$todoList.html("");89 var remaining = 0;90 for(var count=0; count<this.$todoData.length;count++) {91 //geretaing html92 var todoItem = this.$todoData[count];93 if(todoItem.done == true)94 this.$todoList.prepend('<li class="list-group-item"><div class="checkbox checkbox-primary"><input class="todo-done" id="' + todoItem.id + '" type="checkbox" checked><label for="' + todoItem.id + '">' + todoItem.text + '</label></div></li>');95 else {96 remaining = remaining + 1;97 this.$todoList.prepend('<li class="list-group-item"><div class="checkbox checkbox-primary"><input class="todo-done" id="' + todoItem.id + '" type="checkbox"><label for="' + todoItem.id + '">' + todoItem.text + '</label></div></li>');98 }99 }100 //set total in ui101 this.$todoTotal.text(this.$todoData.length);102 //set remaining103 this.$todoRemaining.text(remaining);104 },105 //init todo app106 TodoApp.prototype.init = function () {107 var $this = this;108 //generating todo list109 this.generate();110 //binding archive111 this.$archiveBtn.on("click", function(e) {112 e.preventDefault();113 $this.archives();114 return false;115 });116 //binding todo done chk117 $(document).on("change", this.$todoDonechk, function() {118 if(this.checked) 119 $this.markTodo($(this).attr('id'), true);120 else121 $this.markTodo($(this).attr('id'), false);122 //regenerate list123 $this.generate();124 });125 //binding the new todo button126 this.$todoBtn.on("click", function() {127 if ($this.$todoInput.val() == "" || typeof($this.$todoInput.val()) == 'undefined' || $this.$todoInput.val() == null) {128 sweetAlert("Oops...", "You forgot to enter todo text", "error");129 $this.$todoInput.focus();130 } else {131 $this.addTodo($this.$todoInput.val());132 }133 });134 },135 //init TodoApp136 $.TodoApp = new TodoApp, $.TodoApp.Constructor = TodoApp137 138}(window.jQuery),139//initializing todo app140function($) {141 "use strict";142 $.TodoApp.init()...
database.js
Source:database.js
1// @flow2/**3 * This file provided by Facebook is for non-commercial testing and evaluation4 * purposes only. Facebook reserves all rights not expressly granted.5 *6 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR7 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,8 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL9 * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN10 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN11 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.12 */13export class Todo {14 +id: string;15 +text: string;16 +complete: boolean;17 constructor(id: string, text: string, complete: boolean) {18 this.id = id;19 this.text = text;20 this.complete = complete;21 }22}23export class User {24 +id: string;25 constructor(id: string) {26 this.id = id;27 }28}29// Mock authenticated ID30export const USER_ID = 'me';31// Mock user database table32const usersById: Map<string, User> = new Map([[USER_ID, new User(USER_ID)]]);33// Mock todo database table34const todosById: Map<string, Todo> = new Map();35const todoIdsByUser: Map<string, $ReadOnlyArray<string>> = new Map([36 [USER_ID, []],37]);38// Seed initial data39let nextTodoId: number = 0;40addTodo('Taste JavaScript', true);41addTodo('Buy a unicorn', false);42function getTodoIdsForUser(id: string): $ReadOnlyArray<string> {43 return todoIdsByUser.get(id) || [];44}45export function addTodo(text: string, complete: boolean): string {46 const todo = new Todo(`${nextTodoId++}`, text, complete);47 todosById.set(todo.id, todo);48 const todoIdsForUser = getTodoIdsForUser(USER_ID);49 todoIdsByUser.set(USER_ID, todoIdsForUser.concat(todo.id));50 return todo.id;51}52export function changeTodoStatus(id: string, complete: boolean) {53 const todo = getTodoOrThrow(id);54 // Replace with the modified complete value55 todosById.set(id, new Todo(id, todo.text, complete));56}57// Private, for strongest typing, only export `getTodoOrThrow`58function getTodo(id: string): ?Todo {59 return todosById.get(id);60}61export function getTodoOrThrow(id: string): Todo {62 const todo = getTodo(id);63 if (!todo) {64 throw new Error(`Invariant exception, Todo ${id} not found`);65 }66 return todo;67}68export function getTodos(status: string = 'any'): $ReadOnlyArray<Todo> {69 const todoIdsForUser = getTodoIdsForUser(USER_ID);70 const todosForUser = todoIdsForUser.map(getTodoOrThrow);71 if (status === 'any') {72 return todosForUser;73 }74 return todosForUser.filter(75 (todo: Todo): boolean => todo.complete === (status === 'completed'),76 );77}78// Private, for strongest typing, only export `getUserOrThrow`79function getUser(id: string): ?User {80 return usersById.get(id);81}82export function getUserOrThrow(id: string): User {83 const user = getUser(id);84 if (!user) {85 throw new Error(`Invariant exception, User ${id} not found`);86 }87 return user;88}89export function markAllTodos(complete: boolean): $ReadOnlyArray<string> {90 const todosToChange = getTodos().filter(91 (todo: Todo): boolean => todo.complete !== complete,92 );93 todosToChange.forEach((todo: Todo): void =>94 changeTodoStatus(todo.id, complete),95 );96 return todosToChange.map((todo: Todo): string => todo.id);97}98export function removeTodo(id: string) {99 const todoIdsForUser = getTodoIdsForUser(USER_ID);100 // Remove from the users list101 todoIdsByUser.set(102 USER_ID,103 todoIdsForUser.filter((todoId: string): boolean => todoId !== id),104 );105 // And also from the total list of Todos106 todosById.delete(id);107}108export function removeCompletedTodos(): $ReadOnlyArray<string> {109 const todoIdsForUser = getTodoIdsForUser(USER_ID);110 const todoIdsToRemove = getTodos()111 .filter((todo: Todo): boolean => todo.complete)112 .map((todo: Todo): string => todo.id);113 // Remove from the users list114 todoIdsByUser.set(115 USER_ID,116 todoIdsForUser.filter(117 (todoId: string): boolean => !todoIdsToRemove.includes(todoId),118 ),119 );120 // And also from the total list of Todos121 todoIdsToRemove.forEach((id: string): boolean => todosById.delete(id));122 return todoIdsToRemove;123}124export function renameTodo(id: string, text: string) {125 const todo = getTodoOrThrow(id);126 // Replace with the modified text value127 todosById.set(id, new Todo(id, text, todo.complete));...
app.js
Source:app.js
12const todoInput = document.querySelector('.todo-input');3const todoButton = document.querySelector('.todo-button');4const todoList = document.querySelector('.todo-list');5const filterOption = document.querySelector('.filter-todo');678document.addEventListener('DOMContentLoaded', getTodos);9todoButton.addEventListener('click', addTodo);10todoList.addEventListener('click', deleteCheck);11filterOption.addEventListener('click', filterTodo);1213function addTodo(event){14 event.preventDefault();1516 const todoDiv = document.createElement("div");17 todoDiv.classList.add("todo");1819 const newTodo = document.createElement('li');20 newTodo.innerText = todoInput.value;21 newTodo.classList.add('todo-item');22 todoDiv.appendChild(newTodo);2324 saveLocalTodos(todoInput.value);2526 const completedButton = document.createElement('button');27 completedButton.innerText = '<i class ="fas fa-check"></i>';28 completedButton.classList.add("complete-btn");29 todoDiv.appendChild(completedButton);3031 const trashButton = document.createElement('button');32 trashButton.innerText = '<i class="fas fa-trash"></i>';33 trashButton.classList.add("trash-btn");34 todoDiv.appendChild(trashButton);3536 todoList.appendChild(todoDiv);3738 todoInput.value = "";39}4041function deleteCheck(e){42 const item = e.target;4344 if(item.classList[0] === 'trash-btn'){45 const todo = item.parentElement;46 todo.classList.add("fall");47 removeLocalTodos(todo);48 todo.addEventListener('transitionend', function(){49 todo.remove();50 })51 // todo.remove();52 }5354 if(item.classList[0] === 'complete-btn'){55 const todo = item.parentElement;56 todo.classList.toggle("completed");57 }58}5960function filterTodo(e){61 const todos = todoList.childNodes;62 //console.log(todos);63 todos.forEach(function(todo){64 switch(e.target.value){65 case "all":66 todo.style.display = 'flex';67 break;68 case "completed":69 if(todo.classList.contains('completed')){70 todo.style.display = 'flex';71 }72 else{73 todo.style.display = "none";74 }75 break;76 case "uncompleted":77 if(!todo.classList.contains("completed")){78 todo.style.display = 'flex';79 }80 else{81 todo.style.display = "none";82 }83 break;84 }85});86}8788function saveLocalTodos(todo){89 let todos;90 if(localStorage.getItem('todos') === null){91 todos = [];92 }93 else{94 todos = JSON.parse(localStorage.getItem('todos'));95 }9697 todos.push(todo);98 localStorage.setItem("todos", JSON.stringify(todos));99}100101function getTodos(){102 let todos;103104 if(localStorage.getItem('todos') === null){105 todos = [];106 }107 else{108 todos = JSON.parse(localStorage.getItem('todos'));109 }110 todos.forEach(function(todo){111 const todoDiv = document.createElement("div");112 todoDiv.classList.add("todo");113114 const newTodo = document.createElement('li');115 newTodo.innerText = todo;116 newTodo.classList.add('todo-item');117 todoDiv.appendChild(newTodo);118119 const completedButton = document.createElement('button');120 completedButton.innerText = '<i class ="fas fa-check"></i>';121 completedButton.classList.add("complete-btn");122 todoDiv.appendChild(completedButton);123124 const trashButton = document.createElement('button');125 trashButton.innerText = '<i class="fas fa-trash"></i>';126 trashButton.classList.add("trash-btn");127 todoDiv.appendChild(trashButton);128129 todoList.appendChild(todoDiv);130 })131}132133function removeLocalTodos(todo){134 let todos;135136 if(localStorage.getItem('todos') === null){137 todos = [];138 }139 else{140 todos = JSON.parse(localStorage.getItem('todos'));141 }142143 const todoIndex = todo.children[0].inneText;144 todos.splice(todos.indexOf(todoIndex), 1);145 localStorage.setItem("todos", JSON.stringify(todos));
...
todoSaga.js
Source:todoSaga.js
1import { takeEvery, put } from "redux-saga/effects";2import { getTodoList, updateTodo, addTodo, deleteTodo } from "../api/todoApi";3import {4 GET_TODO_LIST_PENDING,5 GET_TODO_LIST_SUCCESS,6 GET_TODO_LIST_FAIL,7 UPDATE_TODO_PENDING,8 UPDATE_TODO_SUCCESS,9 UPDATE_TODO_FAIL,10 ADD_TODO_SUCCESS,11 ADD_TODO_FAIL,12 ADD_TODO_PENDING,13 DELETE_TODO_PENDING,14 DELETE_TODO_SUCCESS,15 DELETE_TODO_FAIL,16} from "../actions/actionTypes";17function* getTodoAsync() {18 try {19 const response = yield getTodoList();20 yield put({ type: GET_TODO_LIST_SUCCESS, payload: response.data });21 } catch (error) {22 yield put({ type: GET_TODO_LIST_FAIL, payload: error });23 }24}25function* UpdateTodoAsync(action) {26 try {27 const response = yield updateTodo(action.payload);28 yield put({ type: UPDATE_TODO_SUCCESS, payload: response.data });29 } catch (error) {30 yield put({ type: UPDATE_TODO_FAIL, payload: error });31 }32}33function* AddTodoAsync(action) {34 try {35 const response = yield addTodo(action.payload);36 yield put({ type: ADD_TODO_SUCCESS, payload: response.data });37 } catch (error) {38 yield put({ type: ADD_TODO_FAIL, payload: error });39 }40}41function* DeleteTodoAsync(action) {42 try {43 const response = yield deleteTodo(action.payload);44 yield put({ type: DELETE_TODO_SUCCESS, payload: response.data });45 yield put({ type: GET_TODO_LIST_PENDING });46 } catch (error) {47 yield put({ type: DELETE_TODO_FAIL, payload: error });48 }49}50export function* watchGetTodo() {51 yield takeEvery(GET_TODO_LIST_PENDING, getTodoAsync);52}53export function* watchUpdateTodo() {54 yield takeEvery(UPDATE_TODO_PENDING, UpdateTodoAsync);55}56export function* watchAddTodo() {57 yield takeEvery(ADD_TODO_PENDING, AddTodoAsync);58}59export function* watchDeleteTodo() {60 yield takeEvery(DELETE_TODO_PENDING, DeleteTodoAsync);...
Using AI Code Generation
1var strykerParent = require('stryker-parent');2strykerParent.toDo();3var strykerParent = require('stryker-parent');4strykerParent.toDo();5var strykerParent = require('stryker-parent');6strykerParent.toDo();7var strykerParent = require('stryker-parent');8strykerParent.toDo();9var strykerParent = require('stryker-parent');10strykerParent.toDo();11var strykerParent = require('stryker-parent');12strykerParent.toDo();13var strykerParent = require('stryker-parent');14strykerParent.toDo();15var strykerParent = require('stryker-parent');16strykerParent.toDo();17var strykerParent = require('stryker-parent');18strykerParent.toDo();19var strykerParent = require('stryker-parent');20strykerParent.toDo();21var strykerParent = require('stryker-parent');22strykerParent.toDo();23var strykerParent = require('stryker-parent');24strykerParent.toDo();25var strykerParent = require('stryker-parent');26strykerParent.toDo();27var strykerParent = require('stryker-parent');28strykerParent.toDo();
Using AI Code Generation
1var strykerParent = require('stryker-parent');2var toDo = strykerParent.toDo;3toDo();4var strykerParent = require('stryker-parent');5var toDo = strykerParent.toDo;6toDo();7var strykerParent = require('stryker-parent');8var toDo = strykerParent.toDo;9toDo();10var strykerParent = require('stryker-parent');11var toDo = strykerParent.toDo;12toDo();13var strykerParent = require('stryker-parent');14var toDo = strykerParent.toDo;15toDo();16var strykerParent = require('stryker-parent');17var toDo = strykerParent.toDo;18toDo();19var strykerParent = require('stryker-parent');20var toDo = strykerParent.toDo;21toDo();22var strykerParent = require('stryker-parent');23var toDo = strykerParent.toDo;24toDo();25var strykerParent = require('stryker-parent');26var toDo = strykerParent.toDo;27toDo();28var strykerParent = require('stryker-parent');29var toDo = strykerParent.toDo;30toDo();31var strykerParent = require('stryker-parent');32var toDo = strykerParent.toDo;33toDo();34var strykerParent = require('stryker-parent');35var toDo = strykerParent.toDo;36toDo();37var strykerParent = require('stryker-parent');38var toDo = strykerParent.toDo;39toDo();40var strykerParent = require('stryker-parent');41var toDo = strykerParent.toDo;42toDo();43var strykerParent = require('stryker-parent');44var toDo = strykerParent.toDo;45toDo();46var strykerParent = require('stryker-parent');
Using AI Code Generation
1var strykerParent = require('stryker-parent');2var strykerChild = require('stryker-child');3var strykerChild2 = require('stryker-child2');4var strykerChild3 = require('stryker-child3');5var strykerChild4 = require('stryker-child4');6var strykerChild5 = require('stryker-child5');7var strykerChild6 = require('stryker-child6');8var strykerChild7 = require('stryker-child7');9var strykerChild8 = require('stryker-child8');10var strykerChild9 = require('stryker-child9');11var strykerChild10 = require('stryker-child10');12var strykerChild11 = require('stryker-child11');13var strykerChild12 = require('stryker-child12');14var strykerChild13 = require('stryker-child13');15var strykerChild14 = require('stryker-child14');16var strykerChild15 = require('stryker-child15');17var strykerChild16 = require('stryker-child16');18var strykerChild17 = require('stryker-child17');19var strykerChild18 = require('stryker-child18');20var strykerChild19 = require('stryker-child19');21var strykerChild20 = require('stryker-child20');22var strykerChild21 = require('stryker-child21');23var strykerChild22 = require('stryker-child22');24var strykerChild23 = require('stryker-child23');25var strykerChild24 = require('stryker-child24');26var strykerChild25 = require('stryker-child25');27var strykerChild26 = require('stryker-child26');28var strykerChild27 = require('stryker-child27');29var strykerChild28 = require('stryker-child28');30var strykerChild29 = require('stryker-child29');31var strykerChild30 = require('stryker-child30');32var strykerChild31 = require('stryker-child31');33var strykerChild32 = require('stryker-child32');34var strykerChild33 = require('stryker-child33');35var strykerChild34 = require('stryker-child34');36var strykerChild35 = require('stryker-child35
Using AI Code Generation
1const { toDo } = require('stryker-parent');2console.log(toDo());3const { toDo } = require('stryker-child');4console.log(toDo());5module.exports = function(config) {6 config.set({7 htmlReporter: {8 },9 mochaOptions: {10 }11 });12};13{14 "scripts": {15 },16 "devDependencies": {17 },18 "dependencies": {19 }20}21{22}23{24}25module.exports = {
Using AI Code Generation
1var toDo = require('stryker-parent').toDo;2toDo();3var toDo = require('stryker-child').toDo;4toDo();5module.exports = function(config) {6 config.set({7 mochaOptions: {8 }9 });10};
Using AI Code Generation
1var stryker = require('stryker-parent');2var toDo = stryker.toDo;3toDo('test');4var toDo = require('stryker-parent').toDo;5toDo('test');6var toDo = require('stryker-parent/to-do');7toDo('test');8var toDo = require('stryker-parent').toDo;9toDo('test');10var toDo = require('stryker-parent/to-do');11toDo('test');12var toDo = require('stryker-parent').toDo;13toDo('test');14var toDo = require('stryker-parent/to-do');15toDo('test');16var toDo = require('stryker-parent').toDo;17toDo('test');18var toDo = require('stryker-parent/to-do');19toDo('test');20var toDo = require('stryker-parent').toDo;21toDo('test');22var toDo = require('stryker-parent/to-do');23toDo('test');24var toDo = require('stryker-parent').toDo;25toDo('test');26var toDo = require('stryker-parent/to-do');27toDo('test');28var toDo = require('stryker-parent').toDo;29toDo('test');30var toDo = require('stryker-parent/to-do');31toDo('test');32var toDo = require('stryker-parent').toDo;33toDo('test');34var toDo = require('stryker-parent/to-do');35toDo('test');36var toDo = require('stryker-parent').toDo;37toDo('test');38var toDo = require('stryker-parent/to-do');39toDo('test');40var toDo = require('stryker-parent').toDo;41toDo('test');42var toDo = require('stryker-parent/to-do');43toDo('test');
Using AI Code Generation
1var toDo = require('stryker-parent').toDo;2toDo();3exports.toDo = function() {4 console.log('To do');5};6{7}8{9 "dependencies": {10 }11}12module.exports = function(config) {13 config.set({14 mochaOptions: {15 }16 });17};18var toDo = require('stryker-parent').toDo;19toDo();20exports.toDo = function() {21 console.log('To do');22};23{24}25{26 "dependencies": {27 }28}29module.exports = function(config) {30 config.set({31 mochaOptions: {32 }33 });34};35var toDo = require('stryker-parent').toDo;36toDo();
Using AI Code Generation
1var toDo = require('stryker-parent').toDo;2toDo();3var toDo = function() {4 console.log('I am doing something');5};6module.exports = {
Using AI Code Generation
1const strykerParent = require('stryker-parent');2strykerParent.toDo();3const toDo = () => console.log('I am a method from stryker-parent');4module.exports = {5};6{7}8{9}10{11 "dependencies": {12 }13}14module.exports = function(config) {15 config.set({16 });17};1814:39:50 (0) INFO Stryker 0.19.0 using Node v8.9.11914:39:50 (0) INFO MochaTestRunner Using Mocha 3.5.32014:39:50 (0) INFO MochaTestRunner Using options: {"files":["test.js"],"opts":"--no
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!!