I have another two chapters nearing readiness for 3D Game Programming for Kids. Before that happens, I need a few changes to my fork of Mr Doob code editor.
I have been testing some changes recently and most look good. The remaining issues are minor issues. The most pressing is that a few new templates (referenced in the chapters) are needed. There is also a nagging bug in which Ctrl-X no longer seems to copy cut text to the clipboard.
But before I deal with any of those, I would like to be able to delete projects. I have been coding in this editor for many months now and have accumulated a number of dead projects:
This is one of those things that has been outstanding for so long that I built it into a more significant problem than it really was. I need to a add a link to the projects dialog:
var projectsDialogRow = function(doc) { var row = document.createElement( 'p' ); var link = document.createElement( 'a' ); // More for the project link here... row.appendChild(link); row.appendChild(document.createTextNode(' ')); var del = document.createElement( 'a' ); del.href = '#'; del.textContent = '[delete]'; del.className = 'delete'; del.addEventListener( 'click', function ( event ) { var message = 'Once a project is deleted, there is no way to get it back. ' + 'Are you sure that you want to delete "' + doc.filename + '"?'; if (confirm(message)) { deleteProject(doc.filename); openProjectsDialog(); } event.stopPropagation(); event.preventDefault(); }, false ); row.appendChild(del); return row; };There is nothing fancy here at all. I have the usual "are you sure?" confirmation dialog surrounding the
deleteProject()
call. I really hate confirmation dialogs. Since the book is meant for kids, I think it best to leave this in there anyway.As for the
deleteProject()
function, I iterate through all documents so that I can NOT add the target project the updated list of documents:var deleteProject = function(filename) { var new_documents = []; var i = 0, found; while (i < documents.length) { if (documents[i].filename == filename) { found = documents[i]; } else { new_documents.push(documents[i]); } i++; } if ( ! found ) return; documents = new_documents; syncStore(); };In addition to the function, the
syncStore()
method is new as well. I consolidate a number of existing localStorage
update calls into this function:var syncStore = function() { localStorage.codeeditor = JSON.stringify( documents ); };I knock off a few of the smaller GitHub issues while I am at it. Once I am ready, I update the application cache version date in
editor.appcache
:CACHE MANIFEST # 2013-03-03 CACHE: ...I push the changes to ICE, ICE Beta and call it a night.
Day #679
No comments:
Post a Comment