[REF] project: migrate js modules to es6

PR : #68899

task-2393768
This commit is contained in:
Thibault Libioulle
2021-06-01 11:59:52 +02:00
parent 323776bb25
commit faae0abe5c
8 changed files with 301 additions and 341 deletions
@@ -1,8 +1,7 @@
odoo.define('website_rating_project.rating', function (require) {
'use strict';
/** @odoo-module **/
var time = require('web.time');
var publicWidget = require('web.public.widget');
import time from 'web.time';
import publicWidget from 'web.public.widget';
publicWidget.registry.ProjectRatingImage = publicWidget.Widget.extend({
selector: '.o_portal_project_rating .o_rating_image',
@@ -29,4 +28,3 @@ publicWidget.registry.ProjectRatingImage = publicWidget.Widget.extend({
return this._super.apply(this, arguments);
},
});
});
@@ -1,22 +1,19 @@
odoo.define('project.ProjectCalendarView', function (require) {
"use strict";
/** @odoo-module **/
const CalendarController = require('web.CalendarController');
const CalendarView = require('web.CalendarView');
const viewRegistry = require('web.view_registry');
import CalendarController from 'web.CalendarController';
import CalendarView from 'web.CalendarView';
import viewRegistry from 'web.view_registry';
const ProjectCalendarController = CalendarController.extend({
_renderButtonsParameters() {
return _.extend({}, this._super(...arguments), {scaleDrop: true});
return Object.assign({}, this._super(...arguments), {scaleDrop: true});
},
});
const ProjectCalendarView = CalendarView.extend({
config: _.extend({}, CalendarView.prototype.config, {
Controller: ProjectCalendarController,
}),
});
export const ProjectCalendarView = CalendarView.extend({
config: Object.assign({}, CalendarView.prototype.config, {
Controller: ProjectCalendarController,
}),
});
viewRegistry.add('project_calendar', ProjectCalendarView);
return ProjectCalendarView;
});
+109 -115
View File
@@ -1,122 +1,116 @@
odoo.define('project.ProjectFormView', function (require) {
"use strict";
/** @odoo-module **/
const Dialog = require('web.Dialog');
const FormView = require('web.FormView');
const FormController = require('web.FormController');
const core = require('web.core');
const { device } = require('web.config');
const view_registry = require('web.view_registry');
import Dialog from 'web.Dialog';
import FormView from 'web.FormView';
import FormController from 'web.FormController';
import { bus, _t } from 'web.core';
import { device } from 'web.config';
import viewRegistry from 'web.view_registry';
const _t = core._t;
const ProjectFormController = FormController.extend({
init() {
this._super(...arguments);
if (!device.isMobile) {
core.bus.on("DOM_updated", this, () => {
const $editable = this.$el.find('.note-editable');
if ($editable.length) {
const resizerHeight = this.$el.find('.o_wysiwyg_resizer').outerHeight();
const newHeight = window.innerHeight - $editable.offset().top - resizerHeight - 1;
$editable.outerHeight(newHeight);
}
});
}
},
_getActionMenuItems(state) {
if (!this.archiveEnabled || !state.data['recurrence_id']) {
return this._super(...arguments);
}
this.archiveEnabled = false;
let actions = this._super(...arguments);
this.archiveEnabled = true;
if (actions) {
const activeField = this.model.getActiveField(state);
actions.items.other.unshift({
description: state.data[activeField] ? _t('Archive') : _t('Unarchive'),
callback: () => this._stopRecurrence(state.data['id'], state.data[activeField]?'archive':'unarchive'),
});
}
return actions;
},
_onDeleteRecord() {
const record = this.model.get(this.handle);
if(!record.data.recurrence_id) {
return this._super(...arguments);
}
this._stopRecurrence(record.res_id, 'delete');
},
_stopRecurrence(res_id, mode) {
new Dialog(this, {
buttons: [
{
classes: 'btn-primary',
click: () => {
this._rpc({
model: 'project.task',
method: 'action_stop_recurrence',
args: [res_id],
}).then(() => {
if (mode === 'archive') {
this._toggleArchiveState(true);
} else if (mode === 'unarchive') {
this._toggleArchiveState(false);
} else if (mode === 'delete') {
this._deleteRecords([this.handle]);
}
});
},
close: true,
text: _t('Stop Recurrence'),
},
{
click: () => {
this._rpc({
model: 'project.task',
method: 'action_continue_recurrence',
args: [res_id],
}).then(() => {
if (mode === 'archive') {
this._toggleArchiveState(true);
} else if (mode === 'unarchive') {
this._toggleArchiveState(false);
} else if (mode === 'delete') {
this._deleteRecords([this.handle]);
}
});
},
close: true,
text: _t('Continue Recurrence'),
},
{
close: true,
text: _t('Discard'),
}
],
size: 'medium',
title: _t('Confirmation'),
$content: $('<main/>', {
role: 'alert',
text: _t('It seems that this task is part of a recurrence.'),
}),
}).open();
const ProjectFormController = FormController.extend({
init() {
this._super(...arguments);
if (!device.isMobile) {
bus.on("DOM_updated", this, () => {
const $editable = this.$el.find('.note-editable');
if ($editable.length) {
const resizerHeight = this.$el.find('.o_wysiwyg_resizer').outerHeight();
const newHeight = window.innerHeight - $editable.offset().top - resizerHeight - 1;
$editable.outerHeight(newHeight);
}
});
}
},
_getActionMenuItems(state) {
if (!this.archiveEnabled || !state.data['recurrence_id']) {
return this._super(...arguments);
}
});
const ProjectFormView = FormView.extend({
config: _.extend({}, FormView.prototype.config, {
Controller: ProjectFormController,
}),
});
this.archiveEnabled = false;
let actions = this._super(...arguments);
this.archiveEnabled = true;
view_registry.add('project_form', ProjectFormView);
if (actions) {
const activeField = this.model.getActiveField(state);
actions.items.other.unshift({
description: state.data[activeField] ? _t('Archive') : _t('Unarchive'),
callback: () => this._stopRecurrence(state.data['id'], state.data[activeField] ? 'archive' : 'unarchive'),
});
}
return ProjectFormView;
return actions;
},
_onDeleteRecord() {
const record = this.model.get(this.handle);
if (!record.data.recurrence_id) {
return this._super(...arguments);
}
this._stopRecurrence(record.res_id, 'delete');
},
_stopRecurrence(resId, mode) {
new Dialog(this, {
buttons: [
{
classes: 'btn-primary',
click: () => {
this._rpc({
model: 'project.task',
method: 'action_stop_recurrence',
args: [resId],
}).then(() => {
if (mode === 'archive') {
this._toggleArchiveState(true);
} else if (mode === 'unarchive') {
this._toggleArchiveState(false);
} else if (mode === 'delete') {
this._deleteRecords([this.handle]);
}
});
},
close: true,
text: _t('Stop Recurrence'),
},
{
click: () => {
this._rpc({
model: 'project.task',
method: 'action_continue_recurrence',
args: [resId],
}).then(() => {
if (mode === 'archive') {
this._toggleArchiveState(true);
} else if (mode === 'unarchive') {
this._toggleArchiveState(false);
} else if (mode === 'delete') {
this._deleteRecords([this.handle]);
}
});
},
close: true,
text: _t('Continue Recurrence'),
},
{
close: true,
text: _t('Discard'),
}
],
size: 'medium',
title: _t('Confirmation'),
$content: $('<main/>', {
role: 'alert',
text: _t('It seems that this task is part of a recurrence.'),
}),
}).open();
}
});
export const ProjectFormView = FormView.extend({
config: Object.assign({}, FormView.prototype.config, {
Controller: ProjectFormController,
}),
});
viewRegistry.add('project_form', ProjectFormView);
+15 -19
View File
@@ -1,11 +1,10 @@
odoo.define('project.project_kanban', function (require) {
'use strict';
/** @odoo-module **/
var KanbanController = require('web.KanbanController');
var KanbanView = require('web.KanbanView');
var KanbanColumn = require('web.KanbanColumn');
var view_registry = require('web.view_registry');
var KanbanRecord = require('web.KanbanRecord');
import KanbanController from 'web.KanbanController';
import KanbanView from 'web.KanbanView';
import KanbanColumn from 'web.KanbanColumn';
import viewRegistry from 'web.view_registry';
import KanbanRecord from 'web.KanbanRecord';
KanbanRecord.include({
//--------------------------------------------------------------------------
@@ -27,20 +26,20 @@ KanbanRecord.include({
},
});
var ProjectKanbanController = KanbanController.extend({
custom_events: _.extend({}, KanbanController.prototype.custom_events, {
export const ProjectKanbanController = KanbanController.extend({
custom_events: Object.assign({}, KanbanController.prototype.custom_events, {
'kanban_column_delete_wizard': '_onDeleteColumnWizard',
}),
_onDeleteColumnWizard: function (ev) {
ev.stopPropagation();
const self = this;
const column_id = ev.target.id;
var state = this.model.get(this.handle, {raw: true});
const columnId = ev.target.id;
const state = this.model.get(this.handle, {raw: true});
this._rpc({
model: 'project.task.type',
method: 'unlink_wizard',
args: [column_id],
args: [columnId],
context: state.getContext(),
}).then(function (res) {
self.do_action(res);
@@ -48,9 +47,9 @@ var ProjectKanbanController = KanbanController.extend({
}
});
var ProjectKanbanView = KanbanView.extend({
config: _.extend({}, KanbanView.prototype.config, {
Controller: ProjectKanbanController
const ProjectKanbanView = KanbanView.extend({
config: Object.assign({}, KanbanView.prototype.config, {
Controller: ProjectKanbanController,
}),
});
@@ -65,7 +64,4 @@ KanbanColumn.include({
}
});
view_registry.add('project_kanban', ProjectKanbanView);
return ProjectKanbanController;
});
viewRegistry.add('project_kanban', ProjectKanbanView);
+99 -105
View File
@@ -1,112 +1,106 @@
odoo.define('project.ProjectListView', function (require) {
"use strict";
/** @odoo-module **/
const Dialog = require('web.Dialog');
const ListView = require('web.ListView');
const ListController = require('web.ListController');
const core = require('web.core');
const view_registry = require('web.view_registry');
const _t = core._t;
const ProjectListController = ListController.extend({
_getActionMenuItems(state) {
if(!this.archiveEnabled) {
return this._super(...arguments);
}
const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id);
this.archiveEnabled = recurringRecords.length == 0;
let actions = this._super(...arguments);
this.archiveEnabled = true;
if(actions && recurringRecords.length > 0) {
actions.items.other.unshift({
description: _t('Archive'),
callback: () => this._stopRecurrence(recurringRecords, this.selectedRecords, 'archive'),
}, {
description: _t('Unarchive'),
callback: () => this._toggleArchiveState(false)
});
}
return actions;
},
_onDeleteSelectedRecords() {
const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id);
if(recurringRecords.length > 0) {
return this._stopRecurrence(recurringRecords, this.selectedRecords, 'delete');
}
import { _t } from 'web.core';
import Dialog from 'web.Dialog';
import ListView from 'web.ListView';
import ListController from 'web.ListController';
import viewRegistry from 'web.view_registry';
const ProjectListController = ListController.extend({
_getActionMenuItems(state) {
if (!this.archiveEnabled) {
return this._super(...arguments);
},
_stopRecurrence(recurring_res_ids, res_ids, mode) {
let warning;
if (res_ids.length > 1) {
warning = _t('It seems that some tasks are part of a recurrence.');
} else {
warning = _t('It seems that this task is part of a recurrence.');
}
return new Dialog(this, {
buttons: [
{
classes: 'btn-primary',
click: () => {
this._rpc({
model: 'project.task',
method: 'action_stop_recurrence',
args: [recurring_res_ids],
}).then(() => {
if (mode === 'archive') {
this._toggleArchiveState(true);
} else if (mode === 'delete') {
this._deleteRecords(res_ids);
}
});
},
close: true,
text: _t('Stop Recurrence'),
},
{
click: () => {
this._rpc({
model: 'project.task',
method: 'action_continue_recurrence',
args: [recurring_res_ids],
}).then(() => {
if (mode === 'archive') {
this._toggleArchiveState(true);
} else if (mode === 'delete') {
this._deleteRecords(res_ids);
}
});
},
close: true,
text: _t('Continue Recurrence'),
},
{
close: true,
text: _t('Discard'),
}
],
size: 'medium',
title: _t('Confirmation'),
$content: $('<main/>', {
role: 'alert',
text: warning,
}),
}).open();
}
});
const ProjectListView = ListView.extend({
config: _.extend({}, ListView.prototype.config, {
Controller: ProjectListController,
}),
});
view_registry.add('project_list', ProjectListView);
const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id);
this.archiveEnabled = recurringRecords.length == 0;
let actions = this._super(...arguments);
this.archiveEnabled = true;
return ProjectListView;
if (actions && recurringRecords.length > 0) {
actions.items.other.unshift({
description: _t('Archive'),
callback: () => this._stopRecurrence(recurringRecords, this.selectedRecords, 'archive'),
}, {
description: _t('Unarchive'),
callback: () => this._toggleArchiveState(false)
});
}
return actions;
},
_onDeleteSelectedRecords() {
const recurringRecords = this.getSelectedRecords().filter(rec => rec.data.recurrence_id).map(rec => rec.data.id);
if (recurringRecords.length > 0) {
return this._stopRecurrence(recurringRecords, this.selectedRecords, 'delete');
}
return this._super(...arguments);
},
_stopRecurrence(recurringResIds, resIds, mode) {
let warning;
if (resIds.length > 1) {
warning = _t('It seems that some tasks are part of a recurrence.');
} else {
warning = _t('It seems that this task is part of a recurrence.');
}
return new Dialog(this, {
buttons: [
{
classes: 'btn-primary',
click: () => {
this._rpc({
model: 'project.task',
method: 'action_stop_recurrence',
args: [recurringResIds],
}).then(() => {
if (mode === 'archive') {
this._toggleArchiveState(true);
} else if (mode === 'delete') {
this._deleteRecords(resIds);
}
});
},
close: true,
text: _t('Stop Recurrence'),
},
{
click: () => {
this._rpc({
model: 'project.task',
method: 'action_continue_recurrence',
args: [recurringResIds],
}).then(() => {
if (mode === 'archive') {
this._toggleArchiveState(true);
} else if (mode === 'delete') {
this._deleteRecords(resIds);
}
});
},
close: true,
text: _t('Continue Recurrence'),
},
{
close: true,
text: _t('Discard'),
}
],
size: 'medium',
title: _t('Confirmation'),
$content: $('<main/>', {
role: 'alert',
text: warning,
}),
}).open();
}
});
export const ProjectListView = ListView.extend({
config: Object.assign({}, ListView.prototype.config, {
Controller: ProjectListController,
}),
});
viewRegistry.add('project_list', ProjectListView);
@@ -1,38 +1,31 @@
odoo.define('project.name_with_subtask_count', function (require) {
"use strict";
/** @odoo-module **/
const fieldRegistry = require('web.field_registry');
const FieldChar = require('web.basic_fields').FieldChar;
import fieldRegistry from 'web.field_registry';
import { FieldChar } from 'web.basic_fields';
const FieldNameWithSubTaskCount = FieldChar.extend({
/**
* @override
*/
init() {
this._super(...arguments);
if (this.viewType === 'kanban') {
// remove click event handler
const {click, ...events} = this.events;
this.events = events;
}
},
/**
* @override
*/
_render() {
let result = this._super.apply(this, arguments);
if (this.recordData.child_text) {
this.$el.append($('<span>')
.addClass("text-muted ml-2")
.text(this.recordData.child_text)
.css('font-weight', 'normal'));
}
return result;
export const FieldNameWithSubTaskCount = FieldChar.extend({
/**
* @override
*/
init() {
this._super(...arguments);
if (this.viewType === 'kanban') {
// remove click event handler
const {click, ...events} = this.events;
this.events = events;
}
});
},
fieldRegistry.add('name_with_subtask_count', FieldNameWithSubTaskCount);
return FieldNameWithSubTaskCount;
_render: function () {
let result = this._super.apply(this, arguments);
if (this.recordData.child_text) {
this.$el.append($('<span>')
.addClass("text-muted ml-2")
.text(this.recordData.child_text)
.css('font-weight', 'normal'));
}
return result;
}
});
fieldRegistry.add('name_with_subtask_count', FieldNameWithSubTaskCount);
@@ -1,24 +1,19 @@
odoo.define('project.project_rating_reporting', function (require) {
'use strict';
/** @odoo-module **/
const core = require('web.core');
const _t = core._t;
import { _t } from 'web.core';
import GraphController from 'web.GraphController';
import GraphView from 'web.GraphView';
import PivotController from 'web.PivotController';
import PivotView from 'web.PivotView';
import viewRegistry from 'web.view_registry';
const viewRegistry = require('web.view_registry');
const PivotController = require('web.PivotController');
const PivotView = require('web.PivotView');
const GraphController = require('web.GraphController');
const GraphView = require('web.GraphView');
var ProjectPivotController = PivotController.extend({
const ProjectPivotController = PivotController.extend({
/**
* @override
*/
init: function () {
this._super.apply(this, arguments);
var measures = JSON.parse(JSON.stringify(this.measures));
const measures = JSON.parse(JSON.stringify(this.measures));
if ('res_id' in measures) {
measures.res_id.string = _t('Task');
}
@@ -32,15 +27,15 @@ var ProjectPivotController = PivotController.extend({
},
});
var ProjectPivotView = PivotView.extend({
config: _.extend({}, PivotView.prototype.config, {
const ProjectPivotView = PivotView.extend({
config: Object.assign({}, PivotView.prototype.config, {
Controller: ProjectPivotController,
}),
});
viewRegistry.add('project_rating_pivot', ProjectPivotView);
var ProjectGraphController = GraphController.extend({
const ProjectGraphController = GraphController.extend({
/**
* @override
*/
@@ -58,12 +53,10 @@ var ProjectGraphController = GraphController.extend({
},
});
var ProjectGraphView = GraphView.extend({
config: _.extend({}, GraphView.prototype.config, {
const ProjectGraphView = GraphView.extend({
config: Object.assign({}, GraphView.prototype.config, {
Controller: ProjectGraphController,
}),
});
viewRegistry.add('project_rating_graph', ProjectGraphView);
});
@@ -1,21 +1,18 @@
odoo.define('project.task_kanban_examples', function (require) {
'use strict';
/** @odoo-module **/
var core = require('web.core');
var kanbanExamplesRegistry = require('web.kanban_examples_registry');
import { _lt } from 'web.core';
import kanbanExamplesRegistry from 'web.kanban_examples_registry';
var _lt = core._lt;
const greenBullet = '<span class="o_status o_status_green"></span>';
const redBullet = '<span class="o_status o_status_red"></span>';
const star = '<a style="color: gold;" class="fa fa-star"/>';
const clock = '<a class="fa fa-clock-o" />';
var greenBullet = '<span class="o_status o_status_green"></span>';
var redBullet = '<span class="o_status o_status_red"></span>';
var star = '<a style="color: gold;" class="fa fa-star"/>';
var clock = '<a class="fa fa-clock-o" />'
var description_activities = escFormat(_lt('%s Use the %s icon to organize your daily activities.'), '<br/>', clock);
var description = escFormat(_lt('Prioritize Tasks by using the %s icon.'+
'%s Use the %s button to signalize to your colleagues that a task is ready for the next stage.'+
'%s Use the %s to signalize a problem or a need for discussion on a task.'+
'%s'), star, '<br/>', greenBullet, '<br/>', redBullet, description_activities);
const descriptionActivities = escFormat(_lt('%s Use the %s icon to organize your daily activities.'), '<br/>', clock);
const description = escFormat(_lt('Prioritize Tasks by using the %s icon.' +
'%s Use the %s button to signalize to your colleagues that a task is ready for the next stage.' +
'%s Use the %s to signalize a problem or a need for discussion on a task.' +
'%s'), star, '<br/>', greenBullet, '<br/>', redBullet, descriptionActivities);
/**
* Helper function to escape a text before formatting it.
@@ -28,7 +25,7 @@ var description = escFormat(_lt('Prioritize Tasks by using the %s icon.'+
* @returns {string} the formatted and escaped string
*/
function escFormat() {
var args = arguments;
const args = arguments;
return {
toString: function () {
args[0] = _.escape(args[0]);
@@ -43,56 +40,56 @@ kanbanExamplesRegistry.add('project', {
examples:[{
name: _lt('Software Development'),
columns: [_lt('Backlog'), _lt('Specifications'), _lt('Development'), _lt('Tests'), _lt('Delivered')],
description: escFormat(_lt('Prioritize Tasks by using the %s icon.'+
'%s Use the %s button to inform your colleagues that a task is ready for the next stage.'+
'%s Use the %s to indicate a problem or a need for discussion on a task.'+
'%s'), star, '<br/>', greenBullet, '<br/>', redBullet, description_activities),
description: escFormat(_lt('Prioritize Tasks by using the %s icon.' +
'%s Use the %s button to inform your colleagues that a task is ready for the next stage.' +
'%s Use the %s to indicate a problem or a need for discussion on a task.' +
'%s'), star, '<br/>', greenBullet, '<br/>', redBullet, descriptionActivities),
bullets: [greenBullet, redBullet, star],
}, {
name: _lt('Agile Scrum'),
columns: [_lt('Backlog'), _lt('Sprint Backlog'), _lt('Sprint in Progress'), _lt('Sprint Complete'), _lt('Old Completed Sprint')],
description: escFormat(_lt('Waiting for the next stage: use %s and %s bullets. %s'), greenBullet, redBullet, description_activities),
description: escFormat(_lt('Waiting for the next stage: use %s and %s bullets. %s'), greenBullet, redBullet, descriptionActivities),
bullets: [greenBullet, redBullet],
}, {
name: _lt('Digital Marketing'),
columns: [_lt('Ideas'), _lt('Researching'), _lt('Writing'), _lt('Editing'), _lt('Done')],
description: escFormat(_lt('Everyone can propose ideas, and the Editor marks the best ones ' +
'as %s. Attach all documents or links to the task directly, to have all information about ' +
'a research centralized. %s'), greenBullet, description_activities),
'a research centralized. %s'), greenBullet, descriptionActivities),
bullets: [greenBullet, redBullet],
}, {
name: _lt('Customer Feedback'),
columns: [_lt('New'), _lt('In development'), _lt('Done'), _lt('Refused')],
description: escFormat(_lt('Customers propose feedbacks by email; Odoo creates tasks ' +
'automatically, and you can communicate on the task directly. Your managers decide which ' +
'feedback is accepted %s and which feedback is moved to the %s column. %s'), greenBullet, _lt('"Refused"'), description_activities),
'feedback is accepted %s and which feedback is moved to the %s column. %s'), greenBullet, _lt('"Refused"'), descriptionActivities),
bullets: [greenBullet, redBullet],
}, {
name: _lt('Getting Things Done (GTD)'),
columns: [_lt('Inbox'), _lt('Today'), _lt('This Week'), _lt('This Month'), _lt('Long Term')],
description: escFormat(_lt('Fill your Inbox easily with the email gateway. Periodically review your ' +
'Inbox and schedule tasks by moving them to others columns. Every day, you review the ' +
'%s column to move important tasks %s. Every Monday, you review the %s column. %s'), _lt('"This Week"'), _lt('"Today"'), _lt('"This Month"'), description_activities),
'%s column to move important tasks %s. Every Monday, you review the %s column. %s'), _lt('"This Week"'), _lt('"Today"'), _lt('"This Month"'), descriptionActivities),
}, {
name: _lt('Consulting'),
columns: [_lt('New Projects'), _lt('Resources Allocation'), _lt('In Progress'), _lt('Done')],
description: escFormat(_lt('Manage the lifecycle of your project using the kanban view. Add newly acquired projects, assign them and use the %s and %s to define if the project is ready for the next step. %s'), greenBullet, redBullet, description_activities),
description: escFormat(_lt('Manage the lifecycle of your project using the kanban view. Add newly acquired projects, assign them and use the %s and %s to define if the project is ready for the next step. %s'), greenBullet, redBullet, descriptionActivities),
bullets: [greenBullet, redBullet],
}, {
name: _lt('Research Project'),
columns: [_lt('Brainstorm'), _lt('Research'), _lt('Draft'), _lt('Final Document')],
description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, description_activities),
description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, descriptionActivities),
bullets: [greenBullet, redBullet],
}, {
name: _lt('Website Redesign'),
columns: [_lt('Page Ideas'), _lt('Copywriting'), _lt('Design'), _lt('Live')],
description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, description_activities),
description: escFormat(_lt('Handle your idea gathering within Tasks of your new Project and discuss them in the chatter of the tasks. Use the %s and %s to signalize what is the current status of your Idea. %s'), greenBullet, redBullet, descriptionActivities),
}, {
name: _lt('T-shirt Printing'),
columns: [_lt('New Orders'), _lt('Logo Design'), _lt('To Print'), _lt('Done')],
description: escFormat(_lt('Communicate with customers on the task using the email gateway. ' +
'Attach logo designs to the task, so that information flow from designers to the workers ' +
'who print the t-shirt. Organize priorities amongst orders %s using the icon. %s'), star, description_activities),
'who print the t-shirt. Organize priorities amongst orders %s using the icon. %s'), star, descriptionActivities),
bullets: [star],
}, {
name: _lt('Design'),
@@ -116,5 +113,3 @@ kanbanExamplesRegistry.add('project', {
bullets: [greenBullet, redBullet, star, clock],
}],
});
});