Settings tabs + lotta fixes

- tab menu handled by Backbone Router
- fixed minor styling issues
- fixed html structure of listings & forms titles so that notices are positioned correctly
This commit is contained in:
Jonathan Labreuille
2015-10-13 11:53:20 +02:00
parent 9fd13767f0
commit 39354d131d
15 changed files with 168 additions and 64 deletions

View File

@@ -1,7 +1,10 @@
.mailpoet_form .form-table th #mailpoet_role_permissions
margin-top: 20px;
#mailpoet_settings .form-table th
width:20em width:20em
// responsive // responsive
@media screen and (max-width: 782px) @media screen and (max-width: 782px)
.mailpoet_form .form-table th #mailpoet_settings .form-table th
width: auto width: auto

View File

@@ -80,7 +80,10 @@ define(
render: function() { render: function() {
return ( return (
<div> <div>
<h1>Newsletters <Link className="add-new-h2" to="new">New</Link></h1> <h2 className="title">
Newsletters <Link className="add-new-h2" to="new">New</Link>
</h2>
<Listing <Listing
endpoint="newsletters" endpoint="newsletters"
onRenderItem={this.renderItem} onRenderItem={this.renderItem}

View File

@@ -24,7 +24,7 @@ define(
var App = React.createClass({ var App = React.createClass({
render: function() { render: function() {
return ( return (
<RouteHandler/> <RouteHandler />
); );
} }
}); });

View File

@@ -1,11 +1,13 @@
define( define(
[ [
'react', 'react',
'react-router',
'mailpoet', 'mailpoet',
'form/form.jsx' 'form/form.jsx'
], ],
function( function(
React, React,
Router,
MailPoet, MailPoet,
Form Form
) { ) {
@@ -27,15 +29,22 @@ define(
} }
}; };
var Link = Router.Link;
var SegmentForm = React.createClass({ var SegmentForm = React.createClass({
render: function() { render: function() {
return ( return (
<Form <div>
endpoint="segments" <h2 className="title">
fields={ fields } Segment <Link className="add-new-h2" to="/">Back to list</Link>
params={ this.props.params } </h2>
messages={ messages } />
<Form
endpoint="segments"
fields={ fields }
params={ this.props.params }
messages={ messages } />
</div>
); );
} }
}); });

View File

@@ -1,11 +1,13 @@
define( define(
[ [
'react', 'react',
'react-router',
'listing/listing.jsx', 'listing/listing.jsx',
'classnames' 'classnames'
], ],
function( function(
React, React,
Router,
Listing, Listing,
classNames classNames
) { ) {
@@ -34,6 +36,8 @@ define(
} }
]; ];
var Link = Router.Link;
var SegmentList = React.createClass({ var SegmentList = React.createClass({
renderItem: function(segment, actions) { renderItem: function(segment, actions) {
var rowClasses = classNames( var rowClasses = classNames(
@@ -61,11 +65,17 @@ define(
}, },
render: function() { render: function() {
return ( return (
<Listing <div>
endpoint="segments" <h2 className="title">
onRenderItem={this.renderItem} Segments <Link className="add-new-h2" to="new">New</Link>
columns={columns} </h2>
bulk_actions={ bulk_actions } />
<Listing
endpoint="segments"
onRenderItem={this.renderItem}
columns={columns}
bulk_actions={ bulk_actions } />
</div>
); );
} }
}); });

View File

@@ -20,15 +20,7 @@ define(
var App = React.createClass({ var App = React.createClass({
render: function() { render: function() {
return ( return (
<div> <RouteHandler />
<h1>
{ MailPoetI18n.pageTitle }
&nbsp;
<Link className="add-new-h2" to="new">New</Link>
</h1>
<RouteHandler/>
</div>
); );
} }
}); });

View File

@@ -0,0 +1,79 @@
define(
[
'backbone',
'jquery',
'mailpoet'
],
function(
Backbone,
jQuery,
MailPoet
) {
if(jQuery('#mailpoet_settings').length === 0) {
return;
}
MailPoet.Router = new (Backbone.Router.extend({
routes: {
'mta(/:method)': 'sendingMethod',
'(:tab)': 'tabs',
},
sendingMethod: function(method) {
// display mta tab
this.tabs('mta');
// hide all sending methods' settings
jQuery(
'#mailpoet_sending_method_setup, .mailpoet_sending_method'
).hide();
// hide "save settings" button
jQuery('.mailpoet_settings_submit').hide();
if(method === null) {
// show sending methods
jQuery('.mailpoet_sending_methods').fadeIn();
} else {
// hide DKIM option when using MailPoet's API
jQuery('#mailpoet_mta_dkim')[
(method === 'mailpoet')
? 'hide'
: 'show'
]();
// hide sending methods
jQuery('.mailpoet_sending_methods').hide();
// display selected sending method's settings
jQuery('.mailpoet_sending_method[data-method="'+ method +'"]').show();
jQuery('#mailpoet_sending_method_setup').fadeIn();
}
},
tabs: function(tab, section) {
// set default tab
tab = tab || 'basics';
// reset all active tabs
jQuery('.nav-tab-wrapper a').removeClass('nav-tab-active');
// hide panels & sections
jQuery('.mailpoet_panel, .mailpoet_section').hide();
// set active tab
jQuery('a.nav-tab[href="#'+tab+'"]').addClass('nav-tab-active').blur();
// show selected panel
if(jQuery('.mailpoet_panel[data-tab="'+ tab +'"]').length > 0) {
jQuery('.mailpoet_panel[data-tab="'+ tab +'"]').show();
}
// show "save settings" button
jQuery('.mailpoet_settings_submit').show();
}
}));
jQuery(document).ready(function() {
Backbone.history.start();
});
}
);

View File

@@ -1,11 +1,13 @@
define( define(
[ [
'react', 'react',
'react-router',
'mailpoet', 'mailpoet',
'form/form.jsx' 'form/form.jsx'
], ],
function( function(
React, React,
Router,
MailPoet, MailPoet,
Form Form
) { ) {
@@ -47,15 +49,22 @@ define(
} }
}; };
var Link = Router.Link;
var SubscriberForm = React.createClass({ var SubscriberForm = React.createClass({
render: function() { render: function() {
return ( return (
<Form <div>
endpoint="subscribers" <h2 className="title">
fields={ fields } Subscriber <Link className="add-new-h2" to="/">Back to list</Link>
params={ this.props.params } </h2>
messages={ messages } />
<Form
endpoint="subscribers"
fields={ fields }
params={ this.props.params }
messages={ messages } />
</div>
); );
} }
}); });

View File

@@ -177,11 +177,17 @@ define(
}, },
render: function() { render: function() {
return ( return (
<Listing <div>
endpoint="subscribers" <h2 className="title">
onRenderItem={ this.renderItem } Subscribers <Link className="add-new-h2" to="new">New</Link>
columns={ columns } </h2>
bulk_actions={ bulk_actions } />
<Listing
endpoint="subscribers"
onRenderItem={ this.renderItem }
columns={ columns }
bulk_actions={ bulk_actions } />
</div>
); );
} }
}); });

View File

@@ -20,15 +20,7 @@ define(
var App = React.createClass({ var App = React.createClass({
render: function() { render: function() {
return ( return (
<div> <RouteHandler />
<h1>
{ MailPoetI18n.pageTitle }
&nbsp;
<Link className="add-new-h2" to="new">New</Link>
</h1>
<RouteHandler/>
</div>
); );
} }
}); });

View File

@@ -3,7 +3,7 @@
<% block content %> <% block content %>
<div id="mailpoet_settings"> <div id="mailpoet_settings">
<h1 class="title"><%= __('Settings') %></h1> <h2 class="title"><%= __('Settings') %></h2>
<!-- settings form --> <!-- settings form -->
<form <form
@@ -22,32 +22,31 @@
</h2> </h2>
<!-- basics --> <!-- basics -->
<div data-tab="basics" class="mailpoet_panel">
<div id="mailpoet_settings_basics" class="mailpoet_panel"> <% include 'settings/basics.html' %>
<% include 'settings/basics.html' %>
</div> </div>
<!-- signup confirmation --> <!-- signup confirmation -->
<div id="mailpoet_settings_signup" class="mailpoet_panel"> <div data-tab="signup" class="mailpoet_panel">
<% include 'settings/signup.html' %> <% include 'settings/signup.html' %>
</div> </div>
<#
<!-- sending method --> <!-- sending method -->
<div id="mailpoet_settings_mta" class="mailpoet_panel"> <div data-tab="mta" class="mailpoet_panel">
<% include 'settings/mta.html' %> <% include 'settings/mta.html' %>
</div> </div>
#>
<!-- advanced --> <!-- advanced -->
<div id="mailpoet_settings_advanced" class="mailpoet_panel"> <div data-tab="advanced" class="mailpoet_panel">
<% include 'settings/advanced.html' %> <% include 'settings/advanced.html' %>
</div> </div>
<#
<!-- bounce --> <!-- bounce -->
<div id="mailpoet_settings_bounce" class="mailpoet_panel"> <div data-tab="bounce" class="mailpoet_panel">
<% include 'settings/bounce.html' %> <% include 'settings/bounce.html' %>
</div> </div>
#>
<p> <p class="submit mailpoet_settings_submit">
<input <input
type="submit" type="submit"
class="button button-primary" class="button button-primary"
@@ -62,7 +61,6 @@
jQuery(function($) { jQuery(function($) {
// on dom loaded // on dom loaded
$(function() { $(function() {
// setup toggle checkboxes // setup toggle checkboxes
function toggleContent() { function toggleContent() {
$('#'+$(this).data('toggle'))[ $('#'+$(this).data('toggle'))[

View File

@@ -1,4 +1,4 @@
<table class="widefat fixed"> <table id="mailpoet_role_permissions" class="widefat fixed">
<thead> <thead>
<tr> <tr>
<th class="manage-column"> <th class="manage-column">
@@ -85,7 +85,7 @@
<% if(settings.analytics) %> <% if(settings.analytics) %>
checked="checked" checked="checked"
<% endif %> <% endif %>
/> <%= __('Yes') %> /><%= __('Yes') %>
</label> </label>
&nbsp; &nbsp;
<label> <label>
@@ -96,7 +96,7 @@
<% if not(settings.analytics) %> <% if not(settings.analytics) %>
checked="checked" checked="checked"
<% endif %> <% endif %>
/> <%= __('No') %> /><%= __('No') %>
</label> </label>
</p> </p>
</td> </td>

View File

@@ -1 +0,0 @@
mta.html

View File

@@ -113,7 +113,10 @@
<% if(settings.signup_confirmation_email_subject) %> <% if(settings.signup_confirmation_email_subject) %>
value="<%= settings.signup_confirmation_email_subject %>" value="<%= settings.signup_confirmation_email_subject %>"
<% else %> <% else %>
value="<%= __('Confirm your subscription to %1$s') %>" value="<%=
__('Confirm your subscription to %1$s')
| format(get_option('blogname'))
%>"
<% endif %> <% endif %>
/> />
</td> </td>

View File

@@ -68,7 +68,8 @@ config.push(_.extend({}, baseConfig, {
admin: [ admin: [
'subscribers/subscribers.jsx', 'subscribers/subscribers.jsx',
'newsletters/newsletters.jsx', 'newsletters/newsletters.jsx',
'segments/segments.jsx' 'segments/segments.jsx',
'settings/tabs.js'
], ],
newsletter_editor: [ newsletter_editor: [
'underscore', 'underscore',