Smolder

 view release on metacpan or  search on metacpan

MANIFEST  view on Meta::CPAN

t/data/test_run_bad.tar
t/data/test_run_bad.tar.gz
t/data/test_run_bad_yml.tar.gz
t/data/test_run_good.tar.gz
t/data/test_run_good_yml.tar.gz
t/db-developer.t
t/db-pref.t
t/db-proj_dev.t
t/db-project.t
t/db-smoke_test.t
t/dev_prefs.t
t/developer.t
t/graphs.t
t/proj_admin.t
t/proj_auth.t
t/projects.t
t/public.t
t/public_auth.t
t/smoke_signal.t
t/util.t
templates/Admin/Developers/add.tmpl

htdocs/js/smolder.js  view on Meta::CPAN

        };
    },
    // on the preferences form, the project selector should update
    // the preferences form with the selected projects preferences
    // from the server
    '#project_preference_selector': function(element) {
        var form  = element.form;
    
        // if we start off looking at the default options
        if( element.value == form.elements['default_pref_id'].value ) {
            Element.show('dev_prefs_sync_button');
            // if we want to show some info - Element.show('default_pref_info');
        }

        element.onchange = function() {

            // if we are the default preference, then show the stuff
            // that needs to be shown
            if( element.value == form.elements['default_pref_id'].value ) {
                Element.show('dev_prefs_sync_button');
                // if we want to show some info - Element.show('default_pref_info');
            } else {
                Element.hide('dev_prefs_sync_button');
                // if we want to show some info - Element.hide('default_pref_info');
            }
    
            // get the preference details from the server
            Smolder.show_indicator('pref_indicator');
            new Ajax.Request(
                '/app/developer_prefs/get_pref_details',
                {
                    parameters: Form.serialize(form),
                    asynchronous: true,
                    onComplete: function(response, json) {
                        // for every value in our JSON response, set that
                        // same element in the form
                        $A(['email_type', 'email_freq', 'email_limit']).each(
                            function(name) {
                                var elm = form.elements[name];
                                elm.value = json[name];

htdocs/js/smolder.js  view on Meta::CPAN

                            }
                        );
                        Smolder.hide_indicator('pref_indicator');
                    },
                    onFailure: function() { Smolder.show_error() }
                }
            );
        };
    },
    // submit the preference form to sync the other preferences
    '#dev_prefs_sync_button': function(element) {
        element.onclick = function() {
            var form = $('update_pref');
            form.elements['sync'].value = 1;
            Smolder.Ajax.form_update({ 
                form   : form,
                target : 'developer_prefs'
            });
        };
    },
    // hightlight selected text, textarea and select inputs
    'input.hl': function(element) {
        element.onfocus = function() { Smolder.highlight(element);   };
        element.onblur  = function() { Smolder.unHighlight(element); };
    },
    'textarea.hl': function(element) {
        element.onfocus = function() { Smolder.highlight(element);   };

lib/Smolder/DB/Developer.pm  view on Meta::CPAN

        SELECT preference.* FROM preference, project_developer
        WHERE preference.id = project_developer.preference 
        AND project_developer.developer = ?
        AND project_developer.project = ?
    )
    );
    $sth->execute($self->id, $project->id);

    # there should be only one, but it returns an iterator unless
    # in list context
    my @prefs = Smolder::DB::Preference->sth_to_objects($sth);
    return $prefs[0];
}

=head3 full_name

Returns the full name of the Developer, in the following format:

    First Last

=cut

t/dev_prefs.t  view on Meta::CPAN

use Smolder::DB::ProjectDeveloper;
use Smolder::Mech;

if (is_smolder_running) {
    plan(tests => 56);
} else {
    plan(skip_all => 'Smolder not running');
}

my $mech  = Smolder::Mech->new();
my $url   = base_url() . '/developer_prefs';
my $pw    = 's3cr3t';
my $dev   = create_developer(password => $pw);
my $proj1 = create_project();
my $proj2 = create_project();
my %data  = (
    email_type  => 'link',
    email_freq  => 'on_fail',
    email_limit => 10,
);

templates/Developer/Prefs/change_pw.tmpl  view on Meta::CPAN

[% SET page_title = 'Change Password' %]

<div class="sub_menu">
    <a class="sub_menu" href="/app/developer_prefs">Preferences</a>
</div>

[% IF c.dfv_msgs.any_errors %]
<script type="text/javascript">
  [% IF c.dfv_msgs.invalid_current_pw %]
    Smolder.show_message('warning', 'Your Current Password does not match what we have on file.');
  [% END %]
  [% IF c.dfv_msgs.invalid_new_pw %]
    Smolder.show_message('warning', 'Your New Password must be at least 4 characters long.');
  [% END %]
  [% IF c.dfv_msgs.invalid_new_pw_retyped %]
    Smolder.show_message('warning', 'Your 2nd New Password does not match the 1st'); 
  [% END %]
</script>
[% END %]

<div class="boxed">
[% PROCESS form_header.tmpl %]
<form action="/app/developer_prefs/process_change_pw" class="ajaxable show_indicator" name="change_pw" id="change_pw" method="post">
<table>
<tr>
  <td><label class="required[% IF c.dfv_msgs.err_current_pw %] warn[% END %]">Current Password</label></td>
  <td><input class="first" type="password" name="current_pw" /></td>
</tr>
<tr>
  <td><label class="required[% IF c.dfv_msgs.err_new_pw %] warn[% END %]">New Password</label></td>
  <td><input type="password" name="new_pw" /></td>
</tr>
<tr>

templates/Developer/Prefs/pref_form.tmpl  view on Meta::CPAN

<div id="developer_prefs_[% pref.id %]">
<form class="ajaxable for_developer_prefs_[% pref.id %] show_pref_indicator_[% pref.id %]" id="update_pref_[% default ? 'default' : pref.id %]" name="update_pref_[% default ? 'default' : pref.id %]" action="/app/developer_prefs/update_pref" method="p...
<input type="hidden" name="project" value="[% project.id %]" />
[% IF default %]
<input type="hidden" name="sync" value="0" />
[% END %]

[% PROCESS form_header.tmpl %]

<table>
<tr>
  <td><label class="required[% IF c.dfv_msgs.err_email_type %] warn[% END %]">Email Type</td>

templates/Developer/Prefs/pref_form.tmpl  view on Meta::CPAN

  <td>
    <input name="email_limit" value="[% pref.email_limit %]" size="5"/>
    <em>0</em> means there is no limit
  </td>
</tr>
<tr>
  <td colspan="2" align="right">
    <img src="[% c.static_url('/images/indicator.gif') %]" style="display:none" class="indicator" id="pref_indicator_[% pref.id %]" alt="loading" />
    <input type="submit" value="Update" />
    [% IF default %]
    <input type="button" value="Sync All Projects" id="dev_prefs_sync_button" />
    [% END %]
  </td>
</tr>
</table>
</form>
</div>

templates/Developer/Prefs/show.tmpl  view on Meta::CPAN

[% UNLESS ajax %]
[% SET page_title = 'Preferences' %]

<div class="sub_menu">
    <a class="sub_menu" href="/app/developer_prefs/change_pw">Change Password</a>
</div>

<div id="developer_prefs" class="boxed">
[% END %]
<form class="ajaxable for_developer_prefs show_pref_indicator" id="update_pref" name="update_pref" action="/app/developer_prefs/update_pref" method="post">
<input type="hidden" name="update_pref" value="1" />
<input type="hidden" name="sync" value="0" />
<input type="hidden" name="default_pref_id" value="[% c.developer.preference.id %]" />

<h2>Update Preferences</h2>
[% PROCESS form_header.tmpl %]

<table>
<tr>
  <td><label>Project</label>

templates/Developer/Prefs/show.tmpl  view on Meta::CPAN

  <td><label class="required[% IF c.dfv_msgs.err_show_passing %] warn[% END %]">Show Passing Results</td>
  <td>
    <input type="radio" name="show_passing" value="1" /> Yes
    <input type="radio" name="show_passing" value="0" /> No
  </td>
</tr>
<tr>
  <td colspan="2" align="right">
    <img src="[% c.static_url('/images/indicator.gif') %]" style="display:none" class="indicator" id="pref_indicator" alt="loading" />
    <input type="submit" value="Update" />
    <input type="button" value="Reset Projects to Default" id="dev_prefs_sync_button" style="display:none" />
  </td>
</tr>
</table>
</form>
[% UNLESS ajax %]
</div>
[% END %]

templates/nav.tmpl  view on Meta::CPAN

[% SET projects = c.developer.projects %]
[% SET public_projects = c.public_projects %]
[% SET username = c.developer.guest ? '' : c.developer.username %]

<div id="top_nav">[ 
  <ul>
[% IF username %]
    <li class="first">
      <span class="menu">[% username %]</span>
      <ul>
        <li><a href="/app/developer_prefs">preferences</a></li>
        <li><a href="/app/public_auth/logout">logout</a></li>
      </ul>
    </li>
    <li>
      <a href="/app/projects"[% IF projects %] class="menu"[% END %]>my projects</a>
      [% IF projects %]
      <ul>
      [% FOREACH proj = projects %]
        <li><a href="/app/projects/smoke_reports/[% proj.id %]">[% proj.name | html %]</a></li>
      [% END %]



( run in 3.940 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )