diff --git a/.eslintrc.es6.json b/.eslintrc.es6.json index 7a60d30c86..36aca75725 100644 --- a/.eslintrc.es6.json +++ b/.eslintrc.es6.json @@ -31,7 +31,6 @@ "react/jsx-boolean-value": 0, "react/jsx-no-bind": 0, "react/no-array-index-key": 0, - "react/jsx-closing-bracket-location": 0, "react/no-string-refs": 0, "react/no-did-mount-set-state": 0, "react/prefer-stateless-function": 0, diff --git a/assets/js/src/form/fields/checkbox.jsx b/assets/js/src/form/fields/checkbox.jsx index fae71c1a4b..1a392bc40d 100644 --- a/assets/js/src/form/fields/checkbox.jsx +++ b/assets/js/src/form/fields/checkbox.jsx @@ -28,7 +28,7 @@ define([ checked={isChecked} onChange={this.onValueChange} name={this.props.field.name} - /> + /> { this.props.field.values[value] }

diff --git a/assets/js/src/form/fields/date.jsx b/assets/js/src/form/fields/date.jsx index 12cc650a8d..1cdfc57db9 100644 --- a/assets/js/src/form/fields/date.jsx +++ b/assets/js/src/form/fields/date.jsx @@ -22,7 +22,7 @@ define([ + >{ i } )); } return ( @@ -52,7 +52,7 @@ define([ + >{ this.props.monthNames[i - 1] } )); } return ( diff --git a/assets/js/src/form/fields/radio.jsx b/assets/js/src/form/fields/radio.jsx index 60e8e6cc61..d95d865cec 100644 --- a/assets/js/src/form/fields/radio.jsx +++ b/assets/js/src/form/fields/radio.jsx @@ -20,7 +20,8 @@ define([ checked={selectedValue === value} value={value} onChange={this.props.onValueChange} - name={this.props.field.name} /> + name={this.props.field.name} + /> { this.props.field.values[value] }

diff --git a/assets/js/src/form/fields/select.jsx b/assets/js/src/form/fields/select.jsx index 850c1c5cf5..b673c4b3ae 100644 --- a/assets/js/src/form/fields/select.jsx +++ b/assets/js/src/form/fields/select.jsx @@ -50,7 +50,8 @@ const FormFieldSelect = React.createClass({ (value, index) => ( ) diff --git a/assets/js/src/form/form.jsx b/assets/js/src/form/form.jsx index f7138594b1..a8143a9f0c 100644 --- a/assets/js/src/form/form.jsx +++ b/assets/js/src/form/form.jsx @@ -194,7 +194,8 @@ define( field={field} item={this.getValues()} onValueChange={onValueChange} - key={`field-${i}`} /> + key={`field-${i}`} + /> ); }); @@ -207,7 +208,8 @@ define( className="button button-primary" type="submit" value={MailPoet.I18n.t('save')} - disabled={this.state.loading} /> + disabled={this.state.loading} + /> ); } diff --git a/assets/js/src/help-tooltip.jsx b/assets/js/src/help-tooltip.jsx index cfbf203186..f9301b0826 100644 --- a/assets/js/src/help-tooltip.jsx +++ b/assets/js/src/help-tooltip.jsx @@ -32,14 +32,14 @@ function Tooltip(props) { data-event="click" data-tip data-for={tooltipId} - /> + /> + > {tooltip} diff --git a/assets/js/src/listing/bulk_actions.jsx b/assets/js/src/listing/bulk_actions.jsx index f171ab3f36..913c6c0c47 100644 --- a/assets/js/src/listing/bulk_actions.jsx +++ b/assets/js/src/listing/bulk_actions.jsx @@ -84,7 +84,8 @@ define([
@@ -99,14 +100,15 @@ define([ + >{ action.label } )) } + className="button action" + /> { this.state.extra }
diff --git a/assets/js/src/listing/filters.jsx b/assets/js/src/listing/filters.jsx index b19afd4fa6..87de6b55a3 100644 --- a/assets/js/src/listing/filters.jsx +++ b/assets/js/src/listing/filters.jsx @@ -52,12 +52,12 @@ define([ ref={`filter-${i}`} key={`filter-${i}`} name={filter} - > + > { filters[filter].map((option, j) => ( + >{ option.label } )) } )); @@ -71,7 +71,8 @@ define([ onClick={this.handleFilterAction} type="submit" defaultValue={MailPoet.I18n.t('filter')} - className="button" /> + className="button" + /> ); } diff --git a/assets/js/src/listing/groups.jsx b/assets/js/src/listing/groups.jsx index 01bdc314ae..59fd47fc2d 100644 --- a/assets/js/src/listing/groups.jsx +++ b/assets/js/src/listing/groups.jsx @@ -19,7 +19,8 @@ define(['react', 'classnames'], (React, classNames) => { + onClick={this.handleSelect.bind(this, group.name)} + > {group.label} ({ parseInt(group.count, 10).toLocaleString() }) diff --git a/assets/js/src/listing/header.jsx b/assets/js/src/listing/header.jsx index b492b07142..b3fba5558a 100644 --- a/assets/js/src/listing/header.jsx +++ b/assets/js/src/listing/header.jsx @@ -20,7 +20,8 @@ const ListingHeader = React.createClass({ onSort={this.props.onSort} sort_by={this.props.sort_by} key={`column-${index}`} - column={renderColumn} /> + column={renderColumn} + /> ); }); @@ -29,7 +30,8 @@ const ListingHeader = React.createClass({ if (this.props.is_selectable === true) { checkbox = ( + className="manage-column column-cb check-column" + > @@ -38,7 +40,8 @@ const ListingHeader = React.createClass({ name="select_all" ref="toggle" checked={this.props.selection} - onChange={this.handleSelectItems} /> + onChange={this.handleSelectItems} + /> ); } diff --git a/assets/js/src/listing/listing.jsx b/assets/js/src/listing/listing.jsx index a250924322..7e2ae495de 100644 --- a/assets/js/src/listing/listing.jsx +++ b/assets/js/src/listing/listing.jsx @@ -53,7 +53,8 @@ const ListingItem = React.createClass({ this.props.item.selected || this.props.selection === 'all' } onChange={this.handleSelectItem} - disabled={this.props.selection === 'all'} /> + disabled={this.props.selection === 'all'} + /> ); } @@ -77,7 +78,8 @@ const ListingItem = React.createClass({ onClick={this.handleTrashItem.bind( null, this.props.item.id - )}> + )} + > {MailPoet.I18n.t('moveToTrash')} @@ -86,7 +88,8 @@ const ListingItem = React.createClass({ customAction = ( + key={`action-${index}`} className={action.name} + > {(!isFirst) ? ' | ' : ''} { action.link(this.props.item) } @@ -94,7 +97,8 @@ const ListingItem = React.createClass({ } else if (action.link) { customAction = ( + key={`action-${index}`} className={action.name} + > {(!isFirst) ? ' | ' : ''} { action.link(this.props.item) } @@ -102,7 +106,8 @@ const ListingItem = React.createClass({ } else { customAction = ( + key={`action-${index}`} className={action.name} + > {(!isFirst) ? ' | ' : ''} { action.label } + } + >{ action.label } ); } @@ -159,7 +165,8 @@ const ListingItem = React.createClass({ @@ -172,7 +179,8 @@ const ListingItem = React.createClass({ @@ -213,7 +221,8 @@ const ListingItems = React.createClass({ this.props.columns.length + (this.props.is_selectable ? 1 : 0) } - className="colspanchange"> + className="colspanchange" + > {message} @@ -235,7 +244,8 @@ const ListingItems = React.createClass({ + } + > { (this.props.selection !== 'all') ? MailPoet.I18n.t('selectAllLabel') @@ -247,7 +257,8 @@ const ListingItems = React.createClass({   { + href="javascript:;" + >{ (this.props.selection !== 'all') ? MailPoet.I18n.t('selectAllLink') : MailPoet.I18n.t('clearSelection') @@ -274,7 +285,8 @@ const ListingItems = React.createClass({ item_actions={this.props.item_actions} group={this.props.group} key={`item-${renderItem.id}-${index}`} - item={renderItem} /> + item={renderItem} + /> ); })} @@ -822,7 +834,8 @@ const Listing = React.createClass({ bulk_actions={bulkActions} selection={this.state.selection} selected_ids={this.state.selected_ids} - onBulkAction={this.handleBulkAction} /> + onBulkAction={this.handleBulkAction} + /> + onSetPage={this.handleSetPage} + /> @@ -847,7 +861,8 @@ const Listing = React.createClass({ sort_by={sortBy} sort_order={sortOrder} columns={columns} - is_selectable={bulkActions.length > 0} /> + is_selectable={bulkActions.length > 0} + /> + items={items} + /> 0} /> + is_selectable={bulkActions.length > 0} + />
@@ -888,12 +905,14 @@ const Listing = React.createClass({ bulk_actions={bulkActions} selection={this.state.selection} selected_ids={this.state.selected_ids} - onBulkAction={this.handleBulkAction} /> + onBulkAction={this.handleBulkAction} + /> + onSetPage={this.handleSetPage} + /> ); diff --git a/assets/js/src/listing/pages.jsx b/assets/js/src/listing/pages.jsx index 9ee26a5f17..b1adde04af 100644 --- a/assets/js/src/listing/pages.jsx +++ b/assets/js/src/listing/pages.jsx @@ -78,7 +78,8 @@ define([ previousPage = (
+ className="prev-page" + > {MailPoet.I18n.t('previousPage')} @@ -89,7 +90,8 @@ define([ firstPage = ( + className="first-page" + > {MailPoet.I18n.t('firstPage')} @@ -100,7 +102,8 @@ define([ nextPage = ( + className="next-page" + > {MailPoet.I18n.t('nextPage')} @@ -111,7 +114,8 @@ define([ lastPage = ( + className="last-page" + > {MailPoet.I18n.t('lastPage')} @@ -132,7 +136,8 @@ define([ + htmlFor="current-page-selector" + >{MailPoet.I18n.t('currentPage')} + className="current-page" + /> {MailPoet.I18n.t('pageOutOf')}  {Math.ceil(this.props.count / this.props.limit).toLocaleString()} diff --git a/assets/js/src/listing/search.jsx b/assets/js/src/listing/search.jsx index 4cc273c6d5..f0df05367f 100644 --- a/assets/js/src/listing/search.jsx +++ b/assets/js/src/listing/search.jsx @@ -30,11 +30,13 @@ define([ id="search_input" ref="search" name="s" - defaultValue={this.props.search} /> + defaultValue={this.props.search} + /> + className="button" + />

); diff --git a/assets/js/src/newsletters/listings/mixins.jsx b/assets/js/src/newsletters/listings/mixins.jsx index 04d6364ee0..e074fa2abd 100644 --- a/assets/js/src/newsletters/listings/mixins.jsx +++ b/assets/js/src/newsletters/listings/mixins.jsx @@ -101,7 +101,7 @@ const QueueMixin = { ? 'inline-block' : 'none' }} href="javascript:;" onClick={this.resumeSending.bind(null, newsletter)} - >{MailPoet.I18n.t('resume')} + >{MailPoet.I18n.t('resume')} {MailPoet.I18n.t('pause')} + >{MailPoet.I18n.t('pause')}
); } @@ -129,7 +129,7 @@ const QueueMixin = { + /> { percentage } @@ -309,7 +309,7 @@ const StatisticsMixin = { key={`stats-${newsletter.id}`} to={params.link} onClick={params.onClick || null} - > + > {content} {afterContent} diff --git a/assets/js/src/newsletters/listings/notification.jsx b/assets/js/src/newsletters/listings/notification.jsx index 10ccc4220b..fb3755e944 100644 --- a/assets/js/src/newsletters/listings/notification.jsx +++ b/assets/js/src/newsletters/listings/notification.jsx @@ -271,7 +271,7 @@ const NewsletterListNotification = React.createClass({ return ( { MailPoet.I18n.t('viewHistory') } + >{ MailPoet.I18n.t('viewHistory') } ); }, renderItem: function (newsletter, actions) { diff --git a/assets/js/src/newsletters/send.jsx b/assets/js/src/newsletters/send.jsx index 582908a4ec..6d0e1fee50 100644 --- a/assets/js/src/newsletters/send.jsx +++ b/assets/js/src/newsletters/send.jsx @@ -346,7 +346,8 @@ define( className="button button-primary" type="button" onClick={this.handleResume} - value={MailPoet.I18n.t('resume')} /> + value={MailPoet.I18n.t('resume')} + /> : + /> }   + value={MailPoet.I18n.t('saveDraftAndClose')} + />  {MailPoet.I18n.t('orSimply')}  + onClick={this.handleRedirectToDesign} + > {MailPoet.I18n.t('goBackToDesign')} .

diff --git a/assets/js/src/newsletters/send/standard.jsx b/assets/js/src/newsletters/send/standard.jsx index 84e5d008de..45cb3e2d3a 100644 --- a/assets/js/src/newsletters/send/standard.jsx +++ b/assets/js/src/newsletters/send/standard.jsx @@ -160,7 +160,8 @@ define( disabled={this.props.disabled} onChange={this.onChange} ref="dateInput" - {...this.props.validation} /> + {...this.props.validation} + /> ); }, }); @@ -171,7 +172,8 @@ define( (value, index) => ( ) @@ -238,13 +240,15 @@ define( displayFormat={dateDisplayFormat} storageFormat={dateStorageFormat} disabled={this.props.disabled} - validation={this.props.dateValidation} /> + validation={this.props.dateValidation} + /> + validation={this.props.timeValidation} + />
); }, @@ -298,7 +302,8 @@ define( value={this.getCurrentValue().scheduledAt} onChange={this.handleValueChange} disabled={this.props.field.disabled} - dateValidation={this.getDateValidation()} /> + dateValidation={this.getDateValidation()} + />   {MailPoet.I18n.t('websiteTimeIs')} {currentTime} @@ -315,7 +320,8 @@ define( checked={this.isScheduled()} disabled={this.props.field.disabled} name="isScheduled" - onChange={this.handleCheckboxChange} /> + onChange={this.handleCheckboxChange} + /> {schedulingOptions} diff --git a/assets/js/src/newsletters/templates/import_template.jsx b/assets/js/src/newsletters/templates/import_template.jsx index ce9f3358ff..e2b9c04619 100644 --- a/assets/js/src/newsletters/templates/import_template.jsx +++ b/assets/js/src/newsletters/templates/import_template.jsx @@ -102,7 +102,8 @@ class ImportTemplate extends React.Component { + value={MailPoet.I18n.t('upload')} + />

diff --git a/assets/js/src/newsletters/templates/tabs.jsx b/assets/js/src/newsletters/templates/tabs.jsx index 4317172f06..2a806bb87b 100644 --- a/assets/js/src/newsletters/templates/tabs.jsx +++ b/assets/js/src/newsletters/templates/tabs.jsx @@ -8,7 +8,7 @@ const Tabs = ({ tabs, selected, select }) => ( href="javascript:" className={selected === name ? 'current' : ''} onClick={() => select(name)} - > {label} + > {label} ))} diff --git a/assets/js/src/newsletters/templates/template_box.jsx b/assets/js/src/newsletters/templates/template_box.jsx index 2a70491c80..50330ee1a2 100644 --- a/assets/js/src/newsletters/templates/template_box.jsx +++ b/assets/js/src/newsletters/templates/template_box.jsx @@ -133,7 +133,7 @@ class TemplateBox extends React.Component { className="button button-primary" data-automation-id={`select_template_${index}`} onClick={this.onSelect} - > {MailPoet.I18n.t('select')} + > {MailPoet.I18n.t('select')} { readonly === '1' ? false : deleteLink } diff --git a/assets/js/src/newsletters/types/automatic_emails/events_list.jsx b/assets/js/src/newsletters/types/automatic_emails/events_list.jsx index 264362278d..b0d85b88a1 100644 --- a/assets/js/src/newsletters/types/automatic_emails/events_list.jsx +++ b/assets/js/src/newsletters/types/automatic_emails/events_list.jsx @@ -22,7 +22,8 @@ class AutomaticEmailEventsList extends React.Component { if (this.automaticEmail.premium) { action = ( + target="_blank" + > {MailPoet.I18n.t('premiumFeatureLink')} ); diff --git a/assets/js/src/newsletters/types/notification/notification.jsx b/assets/js/src/newsletters/types/notification/notification.jsx index d203bfde6d..174fc9e169 100644 --- a/assets/js/src/newsletters/types/notification/notification.jsx +++ b/assets/js/src/newsletters/types/notification/notification.jsx @@ -75,14 +75,16 @@ define( + onValueChange={this.handleValueChange} + />

+ value={MailPoet.I18n.t('next')} + />

); diff --git a/assets/js/src/newsletters/types/notification/scheduling.jsx b/assets/js/src/newsletters/types/notification/scheduling.jsx index 5c7f08262f..f84e12e9b5 100644 --- a/assets/js/src/newsletters/types/notification/scheduling.jsx +++ b/assets/js/src/newsletters/types/notification/scheduling.jsx @@ -93,7 +93,8 @@ const NotificationScheduling = React.createClass({ + onValueChange={this.handleWeekDayChange} + /> ); } @@ -111,7 +113,8 @@ const NotificationScheduling = React.createClass({ + onValueChange={this.handleNthWeekDayChange} + /> ); } @@ -129,7 +133,8 @@ const NotificationScheduling = React.createClass({ + onValueChange={this.handleRoleChange} + /> ); } else { roleSegmentSelection = ( + onValueChange={this.handleEventChange} + /> { roleSegmentSelection } @@ -163,7 +167,8 @@ const WelcomeScheduling = React.createClass({