/usr/local/Vellum

changeset 495:fe7319ddb9f0

r619: move signup stuff into its own js module

committer: corydodt <corydodt>
author corydodt <corydodt>
date Fri Jan 05 16:49:07 2007 +0000 (2007-01-05)
parents e9529b87da38
children 867ff69545ee
files code/webby/signup.py code/webby/static/Signup/Tests.js code/webby/static/Signup/__init__.js code/webby/static/WebbyVellum/Tests.js code/webby/static/WebbyVellum/__init__.js code/webby/test/livetest_ircweb.py code/webby/test/livetest_signup.py
line diff
     1.1 --- a/code/webby/signup.py	Fri Jan 05 16:09:58 2007 +0000
     1.2 +++ b/code/webby/signup.py	Fri Jan 05 16:49:07 2007 +0000
     1.3 @@ -11,7 +11,7 @@
     1.4  
     1.5  class Signup(athena.LiveElement):
     1.6      docFactory = loaders.xmlfile(RESOURCE('elements/Signup'))
     1.7 -    jsClass = u'WebbyVellum.Signup'
     1.8 +    jsClass = u'Signup.Signup'
     1.9      def __init__(self, pageURL, *a, **kw):
    1.10          super(Signup, self).__init__(*a, **kw)
    1.11          self.pageURL = pageURL
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/code/webby/static/Signup/Tests.js	Fri Jan 05 16:49:07 2007 +0000
     2.3 @@ -0,0 +1,84 @@
     2.4 +// import Nevow.Athena.Test
     2.5 +// import Divmod
     2.6 +
     2.7 +Signup.Tests.TestSignup = Nevow.Athena.Test.TestCase.subclass("Signup.Tests.TestSignup");
     2.8 +Signup.Tests.TestSignup.methods( // {{{
     2.9 +    function test_initialize(self) { // {{{
    2.10 +        var d = self.setUp();
    2.11 +        d.addCallback(function _(signup) {
    2.12 +            var email = signup.node.email;
    2.13 +            var password1 = signup.node.password1;
    2.14 +            var password2 = signup.node.password2;
    2.15 +            var message = signup.firstNodeByAttribute('class', 'message');
    2.16 +            self.assertEqual(email.value, '');
    2.17 +            self.assertEqual(password1.value, '');
    2.18 +            self.assertEqual(password2.value, '');
    2.19 +            self.assertEqual(message.innerHTML, '');
    2.20 +        });
    2.21 +        return d
    2.22 +    }, // }}}
    2.23 +
    2.24 +    function test_submit(self) { // {{{
    2.25 +        var d = self.setUp();
    2.26 +        d.addCallback(function _(signup) {
    2.27 +            var email = signup.firstNodeByAttribute('name', 'email');
    2.28 +            var password1 = signup.firstNodeByAttribute('name', 'password1');
    2.29 +            var password2 = signup.firstNodeByAttribute('name', 'password2');
    2.30 +            var message = signup.firstNodeByAttribute('class', 'message');
    2.31 +            var ev = new MockEvent(signup.node);
    2.32 +            // submit with all fields blank
    2.33 +            signup.submit(ev);
    2.34 +            self.assertEqual(message.innerHTML, 
    2.35 +                    'Please fill in your email address.');
    2.36 +            // submit with password1 or password2 blank
    2.37 +            email.value = 'foo@sample.com';
    2.38 +            signup.submit(ev);
    2.39 +            self.assertEqual(message.innerHTML, 
    2.40 +                    'Please fill in your new password twice.');
    2.41 +
    2.42 +            message.innerHTML = '';
    2.43 +
    2.44 +            password1.value = 'ohno';
    2.45 +            signup.submit(ev);
    2.46 +            self.assertEqual(message.innerHTML, 
    2.47 +                    'Please fill in your new password twice.');
    2.48 +            // submit with password1 != password2
    2.49 +            password2.value = 'ohmy';
    2.50 +            signup.submit(ev);
    2.51 +            self.assertEqual(message.innerHTML, 
    2.52 +                    "Passwords don't match! Try again.");
    2.53 +            // submit correctly
    2.54 +            password2.value = 'ohno';
    2.55 +            var d2 = signup.submit(ev);
    2.56 +            d2.addCallback(function _(ignored) {
    2.57 +                self.assertEqual(message.innerHTML,
    2.58 +                    "An email has been sent to the above address."); 
    2.59 +            });
    2.60 +
    2.61 +            // submit with a bad email address. this will make the call
    2.62 +            // errback due to the test infrastructure, but has no such effect
    2.63 +            // in the production environment.  FIXME, maybe.
    2.64 +            email.value = 'foo_sample.com';
    2.65 +            var d3 = signup.submit(ev);
    2.66 +            d3.addCallback(function _(ignored) {
    2.67 +                self.assert(0, "This should have called errback.");
    2.68 +            });
    2.69 +            d3.addErrback(function _(ignored) {
    2.70 +                self.assertEqual(message.innerHTML, 
    2.71 +                        'An error occurred signing you up.');
    2.72 +            });
    2.73 +            return Divmod.Defer.DeferredList([d2, d3], false, true);
    2.74 +        });
    2.75 +        return d;
    2.76 +    }, // }}}
    2.77 +
    2.78 +    function setUp(self) { // {{{
    2.79 +        var d = self.callRemote("newSignup");
    2.80 +        d.addCallback(
    2.81 +            function _(wi) { return self.addChildWidgetFromWidgetInfo(wi); }
    2.82 +            );
    2.83 +        return d;
    2.84 +    } // }}}
    2.85 +); // }}}
    2.86 +
    2.87 +
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/code/webby/static/Signup/__init__.js	Fri Jan 05 16:49:07 2007 +0000
     3.3 @@ -0,0 +1,70 @@
     3.4 +// import Nevow.Athena
     3.5 +// import DeanEdwards
     3.6 +
     3.7 +/*
     3.8 + * Javascript functionality to support the signup page
     3.9 + */
    3.10 +
    3.11 +/* clear the node and replace contents with the text */
    3.12 +function replaceText(node, newText) { // {{{
    3.13 +    /* clear message node */
    3.14 +    while (node.childNodes.length > 0) 
    3.15 +            node.removeChild(node.childNodes[0]);
    3.16 +    var tn = document.createTextNode(newText);
    3.17 +            
    3.18 +    node.appendChild(tn);
    3.19 +} // }}}
    3.20 +
    3.21 +Signup.Signup = Nevow.Athena.Widget.subclass('Signup.Signup');
    3.22 +Signup.Signup.methods( // {{{
    3.23 +    function __init__(self, node) { // {{{
    3.24 +        Signup.Signup.upcall(self, '__init__', node);
    3.25 +        DeanEdwards.addEvent(node, 'submit', 
    3.26 +            function processSignup(event) { return self.submit(event) });
    3.27 +    }, // }}}
    3.28 +
    3.29 +    function submit(self, event) { // {{{
    3.30 +        event.stopPropagation();
    3.31 +        event.preventDefault();
    3.32 +        var message = self.firstNodeByClass('message');
    3.33 +
    3.34 +        var email = self.node.email.value;
    3.35 +        if (email == '')
    3.36 +        {
    3.37 +            replaceText(message, 'Please fill in your email address.');
    3.38 +            return null;
    3.39 +        }
    3.40 +
    3.41 +        var password1 = self.node.password1.value;
    3.42 +        var password2 = self.node.password2.value;
    3.43 +        if (password1 == '' || password2 == '')
    3.44 +        {
    3.45 +            replaceText(message, 'Please fill in your new password twice.');
    3.46 +            return null;
    3.47 +        }
    3.48 +        if (password1 != password2)
    3.49 +        {
    3.50 +            replaceText(message, "Passwords don't match! Try again.");
    3.51 +            return null;
    3.52 +        }
    3.53 +
    3.54 +        var submit = self.node.signup;
    3.55 +        submit.style['display'] = 'none';
    3.56 +        replaceText(message, 'Sending email. (This may take a minute.)');
    3.57 +        var loading = document.createElement('img');
    3.58 +        loading.setAttribute('src', "/static/loading.gif");
    3.59 +        message.appendChild(loading);
    3.60 +
    3.61 +        var d = self.callRemote("processSignup", email, password1);
    3.62 +        d.addCallback(function _(status) {
    3.63 +            replaceText(message, 'An email has been sent to the above address.');
    3.64 +        });
    3.65 +        d.addErrback(function _(failure) {
    3.66 +            replaceText(message, 'An error occurred signing you up.');
    3.67 +            submit.style['display'] = '';
    3.68 +        });
    3.69 +        return d;
    3.70 +    } // }}}
    3.71 +); // }}}
    3.72 +
    3.73 +// vi:foldmethod=marker
     4.1 --- a/code/webby/static/WebbyVellum/Tests.js	Fri Jan 05 16:09:58 2007 +0000
     4.2 +++ b/code/webby/static/WebbyVellum/Tests.js	Fri Jan 05 16:49:07 2007 +0000
     4.3 @@ -146,86 +146,6 @@
     4.4      } // }}}
     4.5  ); // }}}
     4.6  
     4.7 -WebbyVellum.Tests.TestSignup = Nevow.Athena.Test.TestCase.subclass("WebbyVellum.Tests.TestSignup");
     4.8 -WebbyVellum.Tests.TestSignup.methods( // {{{
     4.9 -    function test_initialize(self) { // {{{
    4.10 -        var d = self.setUp();
    4.11 -        d.addCallback(function _(signup) {
    4.12 -            var email = signup.node.email;
    4.13 -            var password1 = signup.node.password1;
    4.14 -            var password2 = signup.node.password2;
    4.15 -            var message = signup.firstNodeByAttribute('class', 'message');
    4.16 -            self.assertEqual(email.value, '');
    4.17 -            self.assertEqual(password1.value, '');
    4.18 -            self.assertEqual(password2.value, '');
    4.19 -            self.assertEqual(message.innerHTML, '');
    4.20 -        });
    4.21 -        return d
    4.22 -    }, // }}}
    4.23 -
    4.24 -    function test_submit(self) { // {{{
    4.25 -        var d = self.setUp();
    4.26 -        d.addCallback(function _(signup) {
    4.27 -            var email = signup.firstNodeByAttribute('name', 'email');
    4.28 -            var password1 = signup.firstNodeByAttribute('name', 'password1');
    4.29 -            var password2 = signup.firstNodeByAttribute('name', 'password2');
    4.30 -            var message = signup.firstNodeByAttribute('class', 'message');
    4.31 -            var ev = new MockEvent(signup.node);
    4.32 -            // submit with all fields blank
    4.33 -            signup.submit(ev);
    4.34 -            self.assertEqual(message.innerHTML, 
    4.35 -                    'Please fill in your email address.');
    4.36 -            // submit with password1 or password2 blank
    4.37 -            email.value = 'foo@sample.com';
    4.38 -            signup.submit(ev);
    4.39 -            self.assertEqual(message.innerHTML, 
    4.40 -                    'Please fill in your new password twice.');
    4.41 -
    4.42 -            message.innerHTML = '';
    4.43 -
    4.44 -            password1.value = 'ohno';
    4.45 -            signup.submit(ev);
    4.46 -            self.assertEqual(message.innerHTML, 
    4.47 -                    'Please fill in your new password twice.');
    4.48 -            // submit with password1 != password2
    4.49 -            password2.value = 'ohmy';
    4.50 -            signup.submit(ev);
    4.51 -            self.assertEqual(message.innerHTML, 
    4.52 -                    "Passwords don't match! Try again.");
    4.53 -            // submit correctly
    4.54 -            password2.value = 'ohno';
    4.55 -            var d2 = signup.submit(ev);
    4.56 -            d2.addCallback(function _(ignored) {
    4.57 -                self.assertEqual(message.innerHTML,
    4.58 -                    "An email has been sent to the above address."); 
    4.59 -            });
    4.60 -
    4.61 -            // submit with a bad email address. this will make the call
    4.62 -            // errback due to the test infrastructure, but has no such effect
    4.63 -            // in the production environment.  FIXME, maybe.
    4.64 -            email.value = 'foo_sample.com';
    4.65 -            var d3 = signup.submit(ev);
    4.66 -            d3.addCallback(function _(ignored) {
    4.67 -                self.assert(0, "This should have called errback.");
    4.68 -            });
    4.69 -            d3.addErrback(function _(ignored) {
    4.70 -                self.assertEqual(message.innerHTML, 
    4.71 -                        'An error occurred signing you up.');
    4.72 -            });
    4.73 -            return Divmod.Defer.DeferredList([d2, d3], false, true);
    4.74 -        });
    4.75 -        return d;
    4.76 -    }, // }}}
    4.77 -
    4.78 -    function setUp(self) { // {{{
    4.79 -        var d = self.callRemote("newSignup");
    4.80 -        d.addCallback(
    4.81 -            function _(wi) { return self.addChildWidgetFromWidgetInfo(wi); }
    4.82 -            );
    4.83 -        return d;
    4.84 -    } // }}}
    4.85 -); // }}}
    4.86 -
    4.87  WebbyVellum.Tests.TestAccountManager = Nevow.Athena.Test.TestCase.subclass("WebbyVellum.Tests.TestAccountManager");
    4.88  WebbyVellum.Tests.TestAccountManager.methods( // {{{
    4.89      function test_initialize(self) { // {{{
     5.1 --- a/code/webby/static/WebbyVellum/__init__.js	Fri Jan 05 16:09:58 2007 +0000
     5.2 +++ b/code/webby/static/WebbyVellum/__init__.js	Fri Jan 05 16:49:07 2007 +0000
     5.3 @@ -161,68 +161,6 @@
     5.4      } // }}}
     5.5  ); // }}}
     5.6  
     5.7 -/* clear the node and replace contents with the text */
     5.8 -function replaceText(node, newText) {
     5.9 -    /* clear message node */
    5.10 -    while (node.childNodes.length > 0) 
    5.11 -            node.removeChild(node.childNodes[0]);
    5.12 -    var tn = document.createTextNode(newText);
    5.13 -            
    5.14 -    node.appendChild(tn);
    5.15 -}
    5.16 -
    5.17 -WebbyVellum.Signup = Nevow.Athena.Widget.subclass('WebbyVellum.Signup');
    5.18 -WebbyVellum.Signup.methods( // {{{
    5.19 -    function __init__(self, node) { // {{{
    5.20 -        WebbyVellum.Signup.upcall(self, '__init__', node);
    5.21 -        DeanEdwards.addEvent(node, 'submit', 
    5.22 -            function processSignup(event) { return self.submit(event) });
    5.23 -    }, // }}}
    5.24 -
    5.25 -    function submit(self, event) { // {{{
    5.26 -        event.stopPropagation();
    5.27 -        event.preventDefault();
    5.28 -        var message = self.firstNodeByClass('message');
    5.29 -
    5.30 -        var email = self.node.email.value;
    5.31 -        if (email == '')
    5.32 -        {
    5.33 -            replaceText(message, 'Please fill in your email address.');
    5.34 -            return null;
    5.35 -        }
    5.36 -
    5.37 -        var password1 = self.node.password1.value;
    5.38 -        var password2 = self.node.password2.value;
    5.39 -        if (password1 == '' || password2 == '')
    5.40 -        {
    5.41 -            replaceText(message, 'Please fill in your new password twice.');
    5.42 -            return null;
    5.43 -        }
    5.44 -        if (password1 != password2)
    5.45 -        {
    5.46 -            replaceText(message, "Passwords don't match! Try again.");
    5.47 -            return null;
    5.48 -        }
    5.49 -
    5.50 -        var submit = self.node.signup;
    5.51 -        submit.style['display'] = 'none';
    5.52 -        replaceText(message, 'Sending email. (This may take a minute.)');
    5.53 -        var loading = document.createElement('img');
    5.54 -        loading.setAttribute('src', "/static/loading.gif");
    5.55 -        message.appendChild(loading);
    5.56 -
    5.57 -        var d = self.callRemote("processSignup", email, password1);
    5.58 -        d.addCallback(function _(status) {
    5.59 -            replaceText(message, 'An email has been sent to the above address.');
    5.60 -        });
    5.61 -        d.addErrback(function _(failure) {
    5.62 -            replaceText(message, 'An error occurred signing you up.');
    5.63 -            submit.style['display'] = '';
    5.64 -        });
    5.65 -        return d;
    5.66 -    } // }}}
    5.67 -); // }}}
    5.68 -
    5.69  WebbyVellum.FileChooser = Nevow.Athena.Widget.subclass('WebbyVellum.FileChooser');
    5.70  WebbyVellum.FileChooser.methods( // {{{
    5.71      function __init__(self, node) { // {{{
     6.1 --- a/code/webby/test/livetest_ircweb.py	Fri Jan 05 16:09:58 2007 +0000
     6.2 +++ b/code/webby/test/livetest_ircweb.py	Fri Jan 05 16:49:07 2007 +0000
     6.3 @@ -3,7 +3,7 @@
     6.4  from nevow import athena
     6.5  from nevow.livetrial import testcase
     6.6  
     6.7 -from webby import ircweb, signup, data, gmtools, iwebby
     6.8 +from webby import ircweb, data, gmtools, iwebby
     6.9  from webby.minchat import NullConversation
    6.10  from webby.test.teststore import cleanStore, testUser
    6.11  
    6.12 @@ -89,33 +89,6 @@
    6.13  
    6.14      athena.expose(newTopicBar)
    6.15  
    6.16 -class StubSignup(signup.Signup):
    6.17 -    """Signup widget that doesn't really send email."""
    6.18 -    def processSignup(self, email, password):
    6.19 -        """
    6.20 -        Make it succeed or fail by passing an email address with or without
    6.21 -        an @ sign.
    6.22 -        """
    6.23 -        if '@' in email:
    6.24 -            d = defer.succeed(None)
    6.25 -        else:
    6.26 -            1/0
    6.27 -        return d
    6.28 -
    6.29 -    athena.expose(processSignup)
    6.30 -
    6.31 -class TestSignup(testcase.TestCase):
    6.32 -    jsClass = u'WebbyVellum.Tests.TestSignup'
    6.33 -    def newSignup(self, ):
    6.34 -        """
    6.35 -        Return a new Signup widget
    6.36 -        """
    6.37 -        su = StubSignup('http://')
    6.38 -        su.setFragmentParent(self)
    6.39 -        return su
    6.40 -
    6.41 -    athena.expose(newSignup)
    6.42 -
    6.43  class TestFileChooser(testcase.TestCase):
    6.44      jsClass = u'WebbyVellum.Tests.TestFileChooser'
    6.45      def newFileChooser(self, labels=None):
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/code/webby/test/livetest_signup.py	Fri Jan 05 16:49:07 2007 +0000
     7.3 @@ -0,0 +1,34 @@
     7.4 +from twisted.internet import defer
     7.5 +
     7.6 +from nevow import athena
     7.7 +from nevow.livetrial import testcase
     7.8 +
     7.9 +from webby import signup
    7.10 +
    7.11 +class StubSignup(signup.Signup):
    7.12 +    """Signup widget that doesn't really send email."""
    7.13 +    def processSignup(self, email, password):
    7.14 +        """
    7.15 +        Make it succeed or fail by passing an email address with or without
    7.16 +        an @ sign.
    7.17 +        """
    7.18 +        if '@' in email:
    7.19 +            d = defer.succeed(None)
    7.20 +        else:
    7.21 +            1/0
    7.22 +        return d
    7.23 +
    7.24 +    athena.expose(processSignup)
    7.25 +
    7.26 +class TestSignup(testcase.TestCase):
    7.27 +    jsClass = u'Signup.Tests.TestSignup'
    7.28 +    def newSignup(self, ):
    7.29 +        """
    7.30 +        Return a new Signup widget
    7.31 +        """
    7.32 +        su = StubSignup('http://')
    7.33 +        su.setFragmentParent(self)
    7.34 +        return su
    7.35 +
    7.36 +    athena.expose(newSignup)
    7.37 +