diff --git a/addons/mail/static/src/js/models/threads/mailbox.js b/addons/mail/static/src/js/models/threads/mailbox.js
index 9523ad46517..f3e0754ee20 100644
--- a/addons/mail/static/src/js/models/threads/mailbox.js
+++ b/addons/mail/static/src/js/models/threads/mailbox.js
@@ -20,10 +20,8 @@ var Mailbox = SearchableThread.extend({
* @override
* @param {Object} params
* @param {Object} params.data
- * @param {string} params.data.id the ID of the mailbox, without the
- * 'mailbox_' prefix.
- * @param {integer} [params.data.mailboxCounter=0] the initial mailbox
- * counter of this mailbox.
+ * @param {string} params.data.id the ID of the mailbox, without the ``mailbox_`` prefix.
+ * @param {integer} [params.data.mailboxCounter=0] the initial mailbox counter of this mailbox.
*/
init: function (params) {
var data = params.data;
diff --git a/addons/web/static/src/js/core/dom.js b/addons/web/static/src/js/core/dom.js
index 115cc5fcf0c..9280b9a0884 100644
--- a/addons/web/static/src/js/core/dom.js
+++ b/addons/web/static/src/js/core/dom.js
@@ -438,7 +438,7 @@ return {
}
},
/**
- * Cleans what has been done by `initAutoMoreMenu'.
+ * Cleans what has been done by ``initAutoMoreMenu``.
*
* @param {jQuery} $el
*/
diff --git a/addons/web/static/src/js/core/domain.js b/addons/web/static/src/js/core/domain.js
index 5ebc6bd22c9..01d9aaee8ff 100644
--- a/addons/web/static/src/js/core/domain.js
+++ b/addons/web/static/src/js/core/domain.js
@@ -458,7 +458,7 @@ var Domain = collections.Tree.extend({
* Converts python condition to a JS prefix-array representation of a domain
*
* @static
- * @param {string} domain
+ * @param {string} condition
* @returns {Array}
*/
conditionToDomain: function (condition) {
diff --git a/addons/web/static/src/js/views/search/filters_menu.js b/addons/web/static/src/js/views/search/filters_menu.js
index e15d9bf282a..8f58316e092 100644
--- a/addons/web/static/src/js/views/search/filters_menu.js
+++ b/addons/web/static/src/js/views/search/filters_menu.js
@@ -47,9 +47,7 @@ var FiltersMenu = DropdownMenu.extend({
* defaultOptionId: string refers to an optionId (optional)
* currentOptionId: string refers to an optionId that is activated if item is active (optional)
* }
- * @param {Object[]} periodOptions determines the options available for filter with date attribute
- * @param {Object} fields 'field_get' of a model: mapping from field name
- * to an object with its properties
+ * @param {Object} fields
*/
init: function (parent, filters, fields) {
// determines where the filter menu is displayed and its style
diff --git a/doc/_extensions/autojsdoc/parser/jsdoc.py b/doc/_extensions/autojsdoc/parser/jsdoc.py
index ff6d3196254..eb9d595330a 100644
--- a/doc/_extensions/autojsdoc/parser/jsdoc.py
+++ b/doc/_extensions/autojsdoc/parser/jsdoc.py
@@ -62,6 +62,11 @@ class CommentDoc(pyjsdoc.CommentDoc):
d['name'] = self.name
return d
+ # don't resolve already resolved docs (e.g. a literal dict being
+ # include-ed in two different classes because I don't even care anymore
+ def become(self, modules):
+ return self
+
class PropertyDoc(CommentDoc):
@classmethod
def from_param(cls, s, sourcemodule=None):
diff --git a/doc/_extensions/autojsdoc/parser/parser.py b/doc/_extensions/autojsdoc/parser/parser.py
index d979170bbc9..a5eb45a8e85 100644
--- a/doc/_extensions/autojsdoc/parser/parser.py
+++ b/doc/_extensions/autojsdoc/parser/parser.py
@@ -60,7 +60,7 @@ ref = collections.namedtuple('Ref', 'object property')
def _name(r):
bits = []
while isinstance(r, ref):
- bits.append(r.property)
+ bits.append(str(r.property))
r = r.object
return '.'.join(reversed(bits))
def deref(item, prop=None):
@@ -348,7 +348,8 @@ class ModuleExtractor(Visitor):
def resolve_extension(modules):
t = target.become(modules)
if not isinstance(t, jsdoc.ClassDoc):
- raise ValueError("include() subjects should be classes, %s is %s" % (target_name, type(t)))
+ return # FIXME: log warning
+ # raise ValueError("include() subjects should be classes, %s is %s" % (target_name, type(t)))
# TODO: note which module added these
for it in items:
if isinstance(it, dict):
diff --git a/doc/_extensions/odoo_ext/translator.py b/doc/_extensions/odoo_ext/translator.py
index da4e8731628..cf6c149d063 100644
--- a/doc/_extensions/odoo_ext/translator.py
+++ b/doc/_extensions/odoo_ext/translator.py
@@ -190,6 +190,18 @@ class BootstrapTranslator(nodes.NodeVisitor, object):
def depart_compact_paragraph(self, node):
pass
+ def visit_problematic(self, node):
+ if node.hasattr('refid'):
+ self.body.append('' % node['refid'])
+ self.context.append('')
+ else:
+ self.context.append('')
+ self.body.append(self.starttag(node, 'span', CLASS='problematic'))
+
+ def depart_problematic(self, node):
+ self.body.append('')
+ self.body.append(self.context.pop())
+
def visit_literal_block(self, node):
if node.rawsource != node.astext():
# most probably a parsed-literal block -- don't highlight
diff --git a/doc/reference/orm.rst b/doc/reference/orm.rst
index a7febdc7c7b..14dfdb4c058 100644
--- a/doc/reference/orm.rst
+++ b/doc/reference/orm.rst
@@ -288,7 +288,7 @@ Common ORM methods
>>> self.create([{'name': "Jack"}, {'name': "William"}, {'name': "Averell"}])
res.partner(79, 80, 81)
- See :ref:`how to define method `create` with one API or the other
+ See :ref:`how to define method \`create\` with one API or the other
`.
:meth:`~odoo.models.Model.write`
diff --git a/doc/setup/enterprise.rst b/doc/setup/enterprise.rst
index 66f8fe82671..0051b1fafc1 100644
--- a/doc/setup/enterprise.rst
+++ b/doc/setup/enterprise.rst
@@ -1,4 +1,5 @@
:banner: banners/enterprise.jpg
+
.. _setup/enterprise:
============================