/* INCLUDE: old: js/commentmanage.js jquery: js/jquery/jquery.ui.widget.js jquery: js/jquery.ajaxtip.js jquery: js/jquery.commentmanage.js jquery: js/jquery/jquery.ui.core.js jquery: js/jquery/jquery.ui.dialog.js jquery: js/jquery/jquery.ui.tooltip.js jquery: js/jquery/jquery.ui.position.js */ var lifecycle = { setup: function() { var p = { "freeze": { "mode": "freeze", "text": "Freeze", "img": "http://localhost/img/silk/comments/freeze.png", "url": "http://localhost/talkscreen?mode=freeze&journal=test&talkid=123", "msg": "thread was frozen" }, "unfreeze": { "mode": "unfreeze", "text": "Unfreeze", "img": "http://localhost/img/silk/comments/unfreeze.png", "url": "http://localhost/talkscreen?mode=unfreeze&journal=test&talkid=123", "msg": "thread was unfrozen" }, "screen": { "mode": "screen", "text": "Screen", "img": "http://localhost/img/silk/comments/screen.png", "url": "http://localhost/talkscreen?mode=screen&journal=test&talkid=123", "msg": "comment was screened" }, "unscreen": { "mode": "unscreen", "text": "Unscreen", "img": "http://localhost/img/silk/comments/unscreen.png", "url": "http://localhost/talkscreen?mode=unscreen&journal=test&talkid=123", "msg": "comment was unscreened" }, "delete": { "mode": "delete", "text": "Delete", "img": "http://localhost/img/silk/comments/delete.png", "url": "http://localhost/delcomment?journal=test&id=123", "msg": "comment deleted" } }; this.linkprops = p; this.del_args = { cmtinfo: { "form_auth": "authauthauth", "remote": "test", "journal": "test", "canSpam": 1, "canAdmin": 1, "123": { "parent": "", "u": "test", "rc": [ "456" ], "full": 1 }, "456": { "parent": "123", "u": "test", "rc": [], "full": 1 } }, journal: "test", form_auth: "authauthauth" }; this.mod_args = { journal: "test", form_auth: "authauthauth" }; this.server = sinon.sandbox.useFakeServer(); this.server.respondWith( /mode=freeze/, [ 200, {}, '{\ "mode": "freeze",\ "id": 123,\ "newalt": "'+p.unfreeze.text+'",\ "oldimage": "'+p.freeze.img+'",\ "newimage": "'+p.unfreeze.img+'",\ "newurl": "'+p.unfreeze.url+'",\ "msg": "'+p.unfreeze.msg+'"\ }' ] ); this.server.respondWith( /mode=unfreeze/, [ 200, {}, '{\ "mode": "unfreeze",\ "id": 123,\ "newalt": "'+p.freeze.text+'",\ "oldimage": "'+p.unfreeze.img+'",\ "newimage": "'+p.freeze.img+'",\ "newurl": "'+p.freeze.url+'",\ "msg": "'+p.freeze.msg+'"\ }' ] ); this.server.respondWith( /mode=screen/, [ 200, {}, '{\ "mode": "screen",\ "id": 123,\ "newalt": "'+p.unscreen.text+'",\ "oldimage": "'+p.screen.img+'",\ "newimage": "'+p.unscreen.img+'",\ "newurl": "'+p.unscreen.url+'",\ "msg": "'+p.unscreen.msg+'"\ }' ] ); this.server.respondWith( /mode=unscreen/, [ 200, {}, '{\ "mode": "unscreen",\ "id": 123,\ "newalt": "'+p.screen.text+'",\ "oldimage": "'+p.unscreen.img+'",\ "newimage": "'+p.screen.img+'",\ "newurl": "'+p.screen.url+'",\ "msg": "'+p.screen.msg+'"\ }' ] ); this.server.respondWith( /delforcefail/ [ 200, {}, '{ "error": "fail!" }' ] ); this.server.respondWith( /delcomment/, [ 200, {}, '{ "msg": "'+p["delete"].msg+'" }' ] ); this.server.respondWith( [ 200, {}, '{ "error": "error!" }' ] ); }, teardown: function() { this.server.restore(); } }; module( "jquery", lifecycle ); function _check_link(linkid, oldstate, newstate) { var $link = $("#"+linkid); equal($link.attr("href"), oldstate.url, linkid + " - original url" ); equal($link.text(), oldstate.text, linkid + " - original text" ); $link .moderate(this.mod_args) .one( "moderatecomplete", function( event, data ) { equal($link.attr("href"), newstate.url, linkid + " - new url" ); equal($link.text(), newstate.text, linkid + " - new text" ); equals($link.ajaxtip("option", "content"), newstate.msg, linkid + " - did action"); }) .trigger("click"); this.server.respond(); $link .one("moderatecomplete", function( event, data ) { equal($link.attr("href"), oldstate.url, linkid + " - changed back to old url"); equal($link.text(), oldstate.text, linkid + " - changed back to old text"); equals($link.ajaxtip("option", "content"), oldstate.msg, linkid + " - did action"); }) .trigger("click"); this.server.respond(); } function _check_link_with_image(linkid, oldstate, newstate) { var $link = $("#"+linkid); var $img = $link.find("img"); equal($link.attr("href"), oldstate.url, linkid + " - original url" ); equal($img.attr("alt"), oldstate.text, linkid + " - original alt" ); equal($img.attr("title"), oldstate.text, linkid + " - original title" ); $link .moderate(this.mod_args) .one( "moderatecomplete", function(event, data) { equal($link.attr("href"), newstate.url, linkid + " - new url" ); equal($img.attr("alt"), newstate.text, linkid + " - new alt" ); equal($img.attr("title"), newstate.text, linkid + " - new title" ); equals($link.ajaxtip("option", "content"), newstate.msg, linkid + " - did action"); }) .trigger("click"); this.server.respond(); $link .one("moderatecomplete", function(event, data) { equal($link.attr("href"), oldstate.url, linkid + " - changed back to old url"); equal($img.attr("alt"), oldstate.text, linkid + " - changed back to old alt"); equal($img.attr("title"), oldstate.text, linkid + " - changed back to old title" ); equals($link.ajaxtip("option", "content"), oldstate.msg, linkid + " - did action"); }) .trigger("click"); this.server.respond(); } test( "freeze / unfreeze", 38, function() { _check_link.call(this, "freeze_link", this.linkprops.freeze, this.linkprops.unfreeze); _check_link.call(this, "unfreeze_link", this.linkprops.unfreeze, this.linkprops.freeze); _check_link_with_image.call(this, "freeze_img", this.linkprops.freeze, this.linkprops.unfreeze); _check_link_with_image.call(this, "unfreeze_img", this.linkprops.unfreeze, this.linkprops.freeze); } ); test( "screen / unscreen", 38, function() { _check_link.call(this, "screen_link", this.linkprops.screen, this.linkprops.unscreen); _check_link.call(this, "unscreen_link", this.linkprops.unscreen, this.linkprops.screen); _check_link_with_image.call(this, "screen_img", this.linkprops.screen, this.linkprops.unscreen); _check_link_with_image.call(this, "unscreen_img", this.linkprops.unscreen, this.linkprops.screen); } ); test( "delete with shift", 4, function() { var parent = $("#cmt123"); var child = $("#cmt456"); ok( parent.is(":visible"), "Parent comment started out visible" ); ok( child.is(":visible"), "Child comment started out visible" ); $("#delete_link") .delcomment(this.del_args) .one( "delcommentcomplete", function(event, data) { // finish animation early parent.stop(true, true); // child.stop(true, true); ok( ! parent.is(":visible"), "Parent comment successfully hidden after delete" ); ok( child.is(":visible"), "Child comment not deleted, still visible" ); }) .trigger({type: "click", shiftKey: true}); this.server.respond(); } ); test( "delete all children (has children)", 4, function() { var parent = $("#cmt123"); var child = $("#cmt456"); ok( parent.is(":visible"), "Parent comment started out visible" ); ok( child.is(":visible"), "Child comment started out visible" ); $("#delete_link") .delcomment(this.del_args) .one( "delcommentcomplete", function(event, data) { // finish animation early parent.stop(true, true); child.stop(true, true); ok( ! parent.is(":visible"), "Parent comment successfully hidden after delete" ); ok( ! child.is(":visible"), "Child comment successfully hidden after delete" ); }) .trigger("click"); $(".popdel") .find("input[value='thread']") .attr("checked", "checked") .end() .find("button") .click(); this.server.respond(); } ); test( "delete all children (has no children)", 4, function() { var parent = $("#cmt123"); var child = $("#cmt456"); ok( parent.is(":visible"), "Parent comment started out visible" ); ok( child.is(":visible"), "Child comment started out visible" ); $("#child_delete_link") .delcomment(this.del_args) .one( "delcommentcomplete", function(event, data) { // finish animation early // parent.stop(true, true); child.stop(true, true); ok( parent.is(":visible"), "Parent comment not deleted" ); ok( ! child.is(":visible"), "Child comment successfully hidden after delete" ); }) .trigger("click"); $(".popdel") .find("input[value='thread']") .attr("checked", "checked") .end() .find("button") .click(); this.server.respond(); } ); test( "delete no children (has children)", 4, function() { var parent = $("#cmt123"); var child = $("#cmt456"); ok( parent.is(":visible"), "Parent comment started out visible" ); ok( child.is(":visible"), "Child comment started out visible" ); $("#delete_link") .delcomment(this.del_args) .one( "delcommentcomplete", function(event, data) { // finish animation early parent.stop(true, true); // child.stop(true, true); ok( ! parent.is(":visible"), "Parent comment successfully hidden after delete" ); ok( child.is(":visible"), "Child comment not deleted, still visible" ); }) .trigger("click"); $(".popdel") .find("button") .click(); this.server.respond(); } ); test( "delete no children (has no children)", 4, function() { var parent = $("#cmt123"); var child = $("#cmt456"); ok( parent.is(":visible"), "Parent comment started out visible" ); ok( child.is(":visible"), "Child comment started out visible" ); $("#child_delete_link") .delcomment(this.del_args) .one( "delcommentcomplete", function(event, data) { // finish animation early // parent.stop(true, true); child.stop(true, true); ok( parent.is(":visible"), "Parent comment not deleted, still visible" ); ok( ! child.is(":visible"), "Child comment successfully hidden after delete" ); }) .trigger("click"); $(".popdel") .find("button") .click(); this.server.respond(); } ); test( "failed delete: no hiding", 4, function() { var parent = $("#cmt123"); var child = $("#cmt456"); ok( parent.is(":visible"), "Parent comment started out visible" ); ok( child.is(":visible"), "Child comment started out visible" ); this.del_args["endpoint"] = "/delforcefail"; $("#delete_link") .delcomment(this.del_args) .one( "delcommentcomplete", function(event, data) { // finish animation early // parent.stop(true, true); // child.stop(true, true); ok( parent.is(":visible"), "Parent comment not deleted, still visible" ); ok( child.is(":visible"), "Child comment not deleted, still visible" ); }) .trigger("click"); $(".popdel") .find("button") .click(); this.server.respond(); } ); test( "invalid moderate link", 1, function() { $("#invalid_moderate_link") .moderate(this.mod_args) .trigger("click") this.server.respond() equals($("#invalid_moderate_link").ajaxtip("option","content"), "Error moderating comment #. Not enough context available."); }); test( "invalid delete link", 1, function() { $("#invalid_delete_link") .delcomment(this.del_args) .trigger({ type: "click", shiftKey: true }) this.server.respond(); equals($("#invalid_delete_link").ajaxtip("option","content"), "Error deleting comment #. Comment is not visible on this page."); } ); test( "no such comment for moderation", 1, function() { $("#mismatched_moderate_link") .moderate(this.mod_args) .trigger("click") this.server.respond(); equals($("#mismatched_moderate_link").ajaxtip("option","content"), "Error moderating comment #999. Cannot moderate comment which is not visible on this page.") } ); test( "mismatched journal for deletion", 1, function() { $("#mismatched_journal_delete_link") .delcomment(this.del_args) .trigger({ type: "click", shiftKey: true }) this.server.respond(); equals($("#mismatched_journal_delete_link").ajaxtip("option","content"), "Error deleting comment #123. Journal in link does not match expected journal.") } ); test( "no such comment for moderation", 1, function() { $("#mismatched_journal_moderate_link") .moderate(this.mod_args) .trigger("click") this.server.respond(); equals($("#mismatched_journal_moderate_link").ajaxtip("option","content"), "Error moderating comment #123. Journal in link does not match expected journal.") } ); test( "no such comment for deletion", 1, function() { $("#mismatched_delete_link") .delcomment(this.del_args) .trigger({ type: "click", shiftKey: true }) this.server.respond(); equals($("#mismatched_delete_link").ajaxtip("option","content"), "Error deleting comment #999. Comment is not visible on this page.") } ); test( "lacking arguments for moderate: form_auth", 1, function() { delete this.mod_args["form_auth"] $("#freeze_link") .moderate(this.mod_args) .trigger("click"); this.server.respond(); equals($("#freeze_link").ajaxtip("option","content"), "Error moderating comment #123. Not enough context available.") } ); test( "lacking arguments for moderate: journal", 1, function() { delete this.mod_args["journal"] $("#freeze_link") .moderate(this.mod_args) .trigger("click"); this.server.respond(); equals($("#freeze_link").ajaxtip("option","content"), "Error moderating comment #123. Not enough context available.") } ); test( "lacking arguments for delete: cmtinfo", 1, function() { delete this.del_args["cmtinfo"] $("#delete_link") .delcomment(this.del_args) .trigger({ type: "click", shiftKey: true }) this.server.respond(); equals($("#delete_link").ajaxtip("option","content"), "Error deleting comment #123. Not enough context available.") } ); test( "lacking arguments for delete: journal", 1, function() { delete this.del_args["journal"]; $("#delete_link") .delcomment(this.del_args) .trigger({ type: "click", shiftKey: true }) this.server.respond(); equals($("#delete_link").ajaxtip("option","content"), "Error deleting comment #123. Not enough context available.") } ); test( "lacking arguments for delete: form_auth", 1, function() { delete this.del_args["form_auth"] $("#delete_link") .delcomment(this.del_args) .trigger({ type: "click", shiftKey: true }) this.server.respond(); equals($("#delete_link").ajaxtip("option","content"), "Error deleting comment #123. Not enough context available.") } ); module( "jquery util" ); test( "extract params", 18, function() { var params; params = $.extractParams("http://blah.com/"); deepEqual( params, {}, "no params" ); params = $.extractParams("http://blah.com/?"); deepEqual( params, {}, "has ?, but no params" ); params = $.extractParams("http://blah.com/?noequals&novalue=&key=value&key2=value 2"); equal( params["key"], "value", "extract url params: key" ); equal( params["noequals"], undefined, "extract url params: noequals" ); equal( params["novalue"], "", "extract url params: novalue" ); equal( params["key2"], "value 2", "extract url params: key2" ); params = $.extractParams("http://blah.com/?noequals&novalue=&key=value&key2=value%202"); equal( params["key"], "value", "extract url params URI-escaped: key" ); equal( params["noequals"], undefined, "extract url params URI-escaped: noequals" ); equal( params["novalue"], "", "extract url params URI-escaped: novalue" ); equal( params["key2"], "value 2", "extract url params: key2" ); params = $.extractParams($("#url_with_params_noescape").attr("href")); equal( params["key"], "value", "url from dom: key" ); equal( params["noequals"], undefined, "url from dom: noequals" ); equal( params["novalue"], "", "url from dom: novalue" ); equal( params["key2"], "value 2", "url from dom: key2" ); params = $.extractParams($("#url_with_params_escaped").attr("href")); equal( params["key"], "value", "url from dom, escaped: key" ); equal( params["noequals"], undefined, "url from dom, escaped: noequals" ); equal( params["novalue"], "", "url from dom, escaped: novalue" ); equal( params["key2"], "value 2", "url from dom, escaped: key2" ); });