diff --git a/javascript/src/Alert.js b/javascript/src/Alert.js index 5958d9c6a5ae8d693cc21ab1c881522ca0848c17..57c9077f4978e1877d799e6fc9d2218d76c1ff14 100644 --- a/javascript/src/Alert.js +++ b/javascript/src/Alert.js @@ -66,9 +66,6 @@ var QfqNS = QfqNS || {}; this.eventEmitter = new EventEmitter(); - this.userOkButtonHandlers = new n.Helper.FunctionList(); - this.userCancelButtonHandlers = new n.Helper.FunctionList(); - this.userSaveButtonHandlers = new n.Helper.FunctionList(); }; n.Alert.prototype.on = n.EventEmitter.onMixin; diff --git a/javascript/src/QfqForm.js b/javascript/src/QfqForm.js index 5898b57d5f96ae543977cec87db6263f91df5342..22f61b8883fc644abcf7b757b7f213894f2d23e9 100644 --- a/javascript/src/QfqForm.js +++ b/javascript/src/QfqForm.js @@ -179,8 +179,23 @@ var QfqNS = QfqNS || {}; /** * @private */ - n.QfqForm.prototype.handleNewClick = function () { + n.QfqForm.prototype.handleNewClick = function (event) { + event.preventDefault(); + var anchorTarget = event.target.getAttribute("href"); + this.lastButtonPress = "new"; + if (this.form.getFormChanged()) { + var alert = new n.Alert("You have unsaved changes. Do you want to close?", "warning", "yesnosave"); + var that = this; + alert.on('alert.save', function () { + that.form.submitTo(that.submitTo); + window.location = anchorTarget; + }); + alert.on('alert.ok', function () { + window.location = anchorTarget; + }); + alert.show(); + } n.Log.debug("new click"); }; @@ -330,7 +345,7 @@ var QfqNS = QfqNS || {}; * @private */ n.QfqForm.prototype.getNewButton = function () { - return $("#new-button"); + return $("#form-new-button"); }; diff --git a/tests/jasmine/SpecRunner.html b/tests/jasmine/SpecRunner.html index 2b1365c68d32e2e1e49e5bfec9d6aaf7e3af966b..5a57794736da12978b61bebeee103dff7eebffc4 100644 --- a/tests/jasmine/SpecRunner.html +++ b/tests/jasmine/SpecRunner.html @@ -6,8 +6,8 @@ <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.4.1/jasmine_favicon.png"> <link rel="stylesheet" href="lib/jasmine-2.4.1/jasmine.css"> - <link rel="stylesheet" href="../../packages/bootstrap/css/bootstrap.min.css"> - <link rel="stylesheet" href="../../packages/bootstrap/css/bootstrap-theme.min.css"> + <link rel="stylesheet" href="../../css/bootstrap.min.css"> + <link rel="stylesheet" href="../../css/bootstrap-theme.min.css"> <script src="lib/jasmine-2.4.1/jasmine.js"></script> <script src="lib/jasmine-2.4.1/jasmine-html.js"></script> diff --git a/tests/jasmine/spec/BSTabsSpec.js b/tests/jasmine/spec/BSTabsSpec.js index 6364535237fa2af077c10fbe4823718796d3cf3a..1193ebb409d7594892194b78b9ea2e10f8fd3b66 100644 --- a/tests/jasmine/spec/BSTabsSpec.js +++ b/tests/jasmine/spec/BSTabsSpec.js @@ -61,7 +61,7 @@ describe("Bootstrap Tabs", function () { it("should call user 'show tab' handlers", function () { var showHandlerSpy = jasmine.createSpy('showhandler'); - bsTabs.addTabShowHandler(showHandlerSpy); + bsTabs.on('bootstrap.tab.shown', showHandlerSpy); bsTabs.activateTab('tab1'); expect(showHandlerSpy).toHaveBeenCalled(); diff --git a/tests/jasmine/spec/FormSpec.js b/tests/jasmine/spec/FormSpec.js index 45047ccbbbdfb7afeb571c8cf90c0eaaaf3fd70a..0ed3c93e0c5b9b8a868cdbea9126e5572a06dc75 100644 --- a/tests/jasmine/spec/FormSpec.js +++ b/tests/jasmine/spec/FormSpec.js @@ -45,23 +45,28 @@ describe("Form", function () { it("should notify upon form change", function () { var changeHandler = jasmine.createSpy('ChangeHandler'); - form.addChangeHandler(changeHandler); + form.on('form.changed', changeHandler); $("#name").change(); expect(changeHandler).toHaveBeenCalledTimes(1); - expect(changeHandler).toHaveBeenCalledWith(form); + var callArgs = changeHandler.calls.argsFor(0)[0]; + + expect(callArgs.target).toBeDefined(); + expect(callArgs.target).toBe(form); }); it("should notify upon state reset", function () { var resetHandler = jasmine.createSpy('StateResetHandler'); - form.addResetHandler(resetHandler); + form.on('form.reset', resetHandler); form.resetFormChanged(); expect(resetHandler).toHaveBeenCalledTimes(1); - expect(resetHandler).toHaveBeenCalledWith(form); + var callArgs = resetHandler.calls.argsFor(0)[0]; + expect(callArgs.target).toBeDefined(); + expect(callArgs.target).toBe(form); }); it("should reset state upon resetFormChanged()", function () { @@ -79,8 +84,8 @@ describe("Form", function () { var successHandler = jasmine.createSpy("success"); var failureHandler = jasmine.createSpy("failure"); - form.addSubmitSuccessHandler(successHandler); - form.addSubmitFailureHandler(failureHandler); + form.on('form.submit.successful', successHandler); + form.on('form.submit.failed', failureHandler); form.submitTo("/test/url"); jasmine.Ajax.requests.mostRecent().respondWith({ @@ -89,7 +94,7 @@ describe("Form", function () { "responseText": "{ \"status\": \"success\" }" }); - expect(successHandler).toHaveBeenCalledWith(form, {status: "success"}, "success"); + expect(successHandler).toHaveBeenCalledTimes(1); expect(failureHandler).not.toHaveBeenCalled(); jasmine.Ajax.uninstall(); @@ -101,8 +106,8 @@ describe("Form", function () { var successHandler = jasmine.createSpy("success"); var failureHandler = jasmine.createSpy("failure"); - form.addSubmitSuccessHandler(successHandler); - form.addSubmitFailureHandler(failureHandler); + form.on('form.submit.successful', successHandler); + form.on('form.submit.failed', failureHandler); form.submitTo("/test/url"); jasmine.Ajax.requests.mostRecent().respondWith({ @@ -114,10 +119,12 @@ describe("Form", function () { expect(successHandler).not.toHaveBeenCalled(); expect(failureHandler).toHaveBeenCalled(); - expect(failureHandler.calls.argsFor(0)[0]).toBe(form); - expect(failureHandler.calls.argsFor(0)[1]).toBe("error"); - // arg 2 is jqXHR, which I don't want to test for, and therefore continue with 3 - expect(failureHandler.calls.argsFor(0)[3]).toBe("not found"); + + var callArgs = failureHandler.calls.argsFor(0)[0]; + + expect(callArgs.target).toBe(form); + expect(callArgs.textStatus).toBe("error"); + expect(callArgs.errorThrown).toBe("not found"); jasmine.Ajax.uninstall(); });