[UPD] black, isort, prettier

pull/1979/head
Tom Blauwendraat 2021-06-26 09:27:23 +02:00 committed by hkapatel
parent aba42c8523
commit 1033e5ac43
6 changed files with 183 additions and 176 deletions

View File

@ -3,29 +3,21 @@
#
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
'name': 'Web Widget Text Markdown',
'version': '11.0.1.0.0',
"name": "Web Widget Text Markdown",
"version": "11.0.1.0.0",
"author": "Alexandre Díaz, "
"Komit, "
"Sudokeys, "
"Odoo Community Association (OCA)",
'category': 'Web',
'license': 'AGPL-3',
'website': 'https://github.com/OCA/web',
'summary': 'Widget to text fields that adds markdown support',
'depends': [
'web'
],
'demo': [
"demo/bootstrap_markdown.xml",
],
'data': [
'views/assets.xml',
],
"qweb": [
"static/src/xml/bootstrap_markdown.xml",
],
'installable': True,
'auto_install': False,
'application': False
"Komit, "
"Sudokeys, "
"Odoo Community Association (OCA)",
"category": "Web",
"license": "AGPL-3",
"website": "https://github.com/OCA/web",
"summary": "Widget to text fields that adds markdown support",
"depends": ["web"],
"demo": ["demo/bootstrap_markdown.xml"],
"data": ["views/assets.xml"],
"qweb": ["static/src/xml/bootstrap_markdown.xml"],
"installable": True,
"auto_install": False,
"application": False,
}

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_groups_form_inherited" model="ir.ui.view">
<field name="model">res.groups</field>

View File

@ -3,54 +3,54 @@
* Copyright 2017 Komit - <http:///komit-consulting.com>
* Copyright 2019 Alexandre Díaz - <dev@redneboa.es>
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
odoo.define("web_widget_text_markdown.FieldTextMarkDown", function (require) {
'use strict';
odoo.define("web_widget_text_markdown.FieldTextMarkDown", function(require) {
"use strict";
var basic_fields = require('web.basic_fields');
var field_registry = require('web.field_registry');
var core = require('web.core');
var basic_fields = require("web.basic_fields");
var field_registry = require("web.field_registry");
var core = require("web.core");
var _t = core._t;
var LIBS_PATH = '/web_widget_text_markdown/static/src/lib/';
var LIBS_PATH = "/web_widget_text_markdown/static/src/lib/";
var FieldTextMarkDown = basic_fields.FieldText.extend({
className: [
basic_fields.FieldText.prototype.className,
'o_field_text_markdown',
].join(' '),
"o_field_text_markdown",
].join(" "),
jsLibs: [
LIBS_PATH + 'marked.js',
LIBS_PATH + 'dropzone.js',
LIBS_PATH + 'bootstrap-markdown.js',
],
cssLibs: [
LIBS_PATH + 'bootstrap-markdown.min.css',
LIBS_PATH + "marked.js",
LIBS_PATH + "dropzone.js",
LIBS_PATH + "bootstrap-markdown.js",
],
cssLibs: [LIBS_PATH + "bootstrap-markdown.min.css"],
_getValue: function () {
_getValue: function() {
return this.$markdown.getContent();
},
_prepareInput: function () {
_prepareInput: function() {
var $input = this._super.apply(this, arguments);
_.defer(function ($elm) {
$input.removeClass(this.className);
$input.wrap(
_.str.sprintf("<div class='%s'></div>", this.className));
$elm.markdown(this._getMarkdownOptions());
this.$markdown = $elm.data("markdown");
this.$markdown.setContent(this.value || "");
}.bind(this), $input);
_.defer(
function($elm) {
$input.removeClass(this.className);
$input.wrap(
_.str.sprintf("<div class='%s'></div>", this.className)
);
$elm.markdown(this._getMarkdownOptions());
this.$markdown = $elm.data("markdown");
this.$markdown.setContent(this.value || "");
}.bind(this),
$input
);
return $input;
},
_renderReadonly: function () {
_renderReadonly: function() {
this.$el.html(marked(this._formatValue(this.value)));
},
_getMarkdownOptions: function () {
_getMarkdownOptions: function() {
var markdownOpts = {
autofocus: false,
savable: false,
@ -61,39 +61,43 @@ odoo.define("web_widget_text_markdown.FieldTextMarkDown", function (require) {
if (this.res_id) {
var self = this;
markdownOpts.dropZoneOptions = {
paramName: 'ufile',
url: '/web/binary/upload_attachment',
acceptedFiles: 'image/*',
width: 'o_field_text_markdown',
paramName: "ufile",
url: "/web/binary/upload_attachment",
acceptedFiles: "image/*",
width: "o_field_text_markdown",
params: {
csrf_token: core.csrf_token,
session_id: this.getSession().override_session,
callback: '',
callback: "",
model: this.model,
id: this.res_id,
},
success: function () {
success: function() {
self._markdownDropZoneUploadSuccess(this);
},
error: function () {
error: function() {
self._markdownDropZoneUploadError(this);
},
init: function () {
init: function() {
self._markdownDropZoneInit(this);
},
};
if (_t.database.multi_lang && this.field.translate) {
markdownOpts.additionalButtons = [
[{
name: 'oTranslate',
data: [{
name: 'cmdTranslate',
title: _t('Translate'),
icon: {glyph: 'glyphicon glyphicon-flag'},
callback: this._markdownTranslate,
}],
}],
[
{
name: "oTranslate",
data: [
{
name: "cmdTranslate",
title: _t("Translate"),
icon: {glyph: "glyphicon glyphicon-flag"},
callback: this._markdownTranslate,
},
],
},
],
];
}
}
@ -101,7 +105,7 @@ odoo.define("web_widget_text_markdown.FieldTextMarkDown", function (require) {
return markdownOpts;
},
_getAttachmentId: function (response) {
_getAttachmentId: function(response) {
var matchElms = response.match(/"id":\s?(\d+)/);
if (matchElms && matchElms.length) {
return matchElms[1];
@ -109,52 +113,51 @@ odoo.define("web_widget_text_markdown.FieldTextMarkDown", function (require) {
return null;
},
_markdownDropZoneInit: function (markdown) {
_markdownDropZoneInit: function(markdown) {
var self = this;
var caretPos = 0;
var $textarea = null;
markdown.on('drop', function (e) {
markdown.on("drop", function(e) {
$textarea = $(e.target);
caretPos = $textarea.prop('selectionStart');
caretPos = $textarea.prop("selectionStart");
});
markdown.on('success', function (file, response) {
markdown.on("success", function(file, response) {
var text = $textarea.val();
var attachment_id = self._getAttachmentId(response);
if (attachment_id) {
var ftext = text.substring(0, caretPos) + '\n![' +
_t('description') +
'](/web/image/' + attachment_id + ')\n' +
text.substring(caretPos);
var ftext =
text.substring(0, caretPos) +
"\n![" +
_t("description") +
"](/web/image/" +
attachment_id +
")\n" +
text.substring(caretPos);
$textarea.val(ftext);
} else {
self.do_warn(
_t('Error'),
_t("Can't create the attachment."));
self.do_warn(_t("Error"), _t("Can't create the attachment."));
}
});
markdown.on('error', function (file, error) {
markdown.on("error", function(file, error) {
console.warn(error);
});
},
_markdownDropZoneUploadSuccess: function () {
_markdownDropZoneUploadSuccess: function() {
this.isDirty = true;
this._doDebouncedAction();
this.$markdown.$editor.find(".dz-error-mark:last")
.css("display", "none");
this.$markdown.$editor.find(".dz-error-mark:last").css("display", "none");
},
_markdownDropZoneUploadError: function () {
this.$markdown.$editor.find(".dz-success-mark:last")
.css("display", "none");
_markdownDropZoneUploadError: function() {
this.$markdown.$editor.find(".dz-success-mark:last").css("display", "none");
},
_markdownTranslate: function () {
_markdownTranslate: function() {
this._onTranslate();
},
});
field_registry.add('bootstrap_markdown', FieldTextMarkDown);
field_registry.add("bootstrap_markdown", FieldTextMarkDown);
return FieldTextMarkDown;
});

View File

@ -1,22 +1,22 @@
/* Copyright 2019 Alexandre Díaz - <dev@redneboa.es>
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
.o_field_text_markdown {
.dz-preview {
display: inline-block;
margin: 0.5em;
.dz-preview {
display: inline-block;
margin: 0.5em;
.dz-success-mark svg {
background-color: green;
border-radius: 30px;
width: 32px;
height: 32px;
}
.dz-success-mark svg {
background-color: green;
border-radius: 30px;
width: 32px;
height: 32px;
}
.dz-error-mark svg {
background: red;
border-radius: 30px;
width: 32px;
height: 32px;
.dz-error-mark svg {
background: red;
border-radius: 30px;
width: 32px;
height: 32px;
}
}
}
}

View File

@ -2,75 +2,78 @@
/* Copyright 2019 Alexandre Díaz - <dev@redneboa.es>
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
odoo.define('web_widget_text_markdown.test', function (require) {
'use strict';
odoo.define("web_widget_text_markdown.test", function(require) {
"use strict";
var FormView = require('web.FormView');
var testUtils = require('web.test_utils');
var FormView = require("web.FormView");
var testUtils = require("web.test_utils");
var createAsyncView = testUtils.createAsyncView;
QUnit.module('web_widget_text_markdown', {
beforeEach: function () {
this.data = {
partner: {
fields: {comment: {string: "Comment", type: "text"}},
records: [
{id: 1, comment: "This is a test\n**Hello**"},
],
},
};
this.arch = '<form><sheet>' +
'<field name="comment"' +
' widget="bootstrap_markdown" />' +
'</sheet></form>';
QUnit.module(
"web_widget_text_markdown",
{
beforeEach: function() {
this.data = {
partner: {
fields: {comment: {string: "Comment", type: "text"}},
records: [{id: 1, comment: "This is a test\n**Hello**"}],
},
};
this.arch =
"<form><sheet>" +
'<field name="comment"' +
' widget="bootstrap_markdown" />' +
"</sheet></form>";
},
},
}, function () {
QUnit.module('FieldTextMarkDown');
QUnit.test('bootstrap markdown widget are correctly rendered (preview)',
function (assert) {
assert.expect(1);
function() {
QUnit.module("FieldTextMarkDown");
QUnit.test(
"bootstrap markdown widget are correctly rendered (preview)",
function(assert) {
assert.expect(1);
var done = assert.async();
var done = assert.async();
createAsyncView({
View: FormView,
model: 'partner',
data: this.data,
arch: this.arch,
res_id: 1,
}).then(function (form) {
_.defer(function () {
assert.strictEqual(form.$('.md-editor').length, 0);
form.destroy();
done();
createAsyncView({
View: FormView,
model: "partner",
data: this.data,
arch: this.arch,
res_id: 1,
}).then(function(form) {
_.defer(function() {
assert.strictEqual(form.$(".md-editor").length, 0);
form.destroy();
done();
});
});
});
}
);
QUnit.test('bootstrap markdown widget are correctly rendered (edit)',
function (assert) {
assert.expect(1);
}
);
QUnit.test(
"bootstrap markdown widget are correctly rendered (edit)",
function(assert) {
assert.expect(1);
var done = assert.async();
var done = assert.async();
createAsyncView({
View: FormView,
model: 'partner',
data: this.data,
arch: this.arch,
res_id: 1,
viewOptions: {mode: 'edit'},
}).then(function (form) {
_.defer(function () {
assert.strictEqual(form.$('.md-editor').length, 1);
form.destroy();
done();
createAsyncView({
View: FormView,
model: "partner",
data: this.data,
arch: this.arch,
res_id: 1,
viewOptions: {mode: "edit"},
}).then(function(form) {
_.defer(function() {
assert.strictEqual(form.$(".md-editor").length, 1);
form.destroy();
done();
});
});
});
}
);
});
}
);
}
);
});

View File

@ -1,22 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- * Copyright 2014 Sudokeys <http://www.sudokeys.com>
* Copyright 2017 Komit - <http:///komit-consulting.com>
* Copyright 2019 Alexandre Díaz - <dev@redneboa.es>
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).-->
<odoo>
<template id="assets_backend" name="web_widget_text_markdown_assets" inherit_id="web.assets_backend">
<template
id="assets_backend"
name="web_widget_text_markdown_assets"
inherit_id="web.assets_backend"
>
<xpath expr="." position="inside">
<link rel='stylesheet'
href='/web_widget_text_markdown/static/src/less/web_widget_text_markdown.less'/>
<script type="text/javascript"
src="/web_widget_text_markdown/static/src/js/web_widget_text_markdown.js"/>
<link
rel='stylesheet'
href='/web_widget_text_markdown/static/src/less/web_widget_text_markdown.less'
/>
<script
type="text/javascript"
src="/web_widget_text_markdown/static/src/js/web_widget_text_markdown.js"
/>
</xpath>
</template>
<template id="qunit_suite" inherit_id="web.qunit_suite">
<xpath expr="//t[@t-set='head']" position="inside">
<script type="application/javascript"
src="/web_widget_text_markdown/static/tests/js/web_widget_text_markdown.js"
/>
<script
type="application/javascript"
src="/web_widget_text_markdown/static/tests/js/web_widget_text_markdown.js"
/>
</xpath>
</template>
</odoo>