浏览代码

Merge branch 'hotfix'

version-14
Saurabh 7 年前
父节点
当前提交
ad57b47136
共有 4 个文件被更改,包括 57 次插入22 次删除
  1. +1
    -1
      frappe/__init__.py
  2. +3
    -2
      frappe/public/js/frappe/form/toolbar.js
  3. +33
    -8
      frappe/public/js/frappe/ui/page.js
  4. +20
    -11
      frappe/utils/help.py

+ 1
- 1
frappe/__init__.py 查看文件

@@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json
from .exceptions import * from .exceptions import *
from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template


__version__ = '10.0.13'
__version__ = '10.0.14'
__title__ = "Frappe Framework" __title__ = "Frappe Framework"


local = Local() local = Local()


+ 3
- 2
frappe/public/js/frappe/form/toolbar.js 查看文件

@@ -54,14 +54,15 @@ frappe.ui.form.Toolbar = Class.extend({
is_title_editable: function() { is_title_editable: function() {
if (this.frm.meta.title_field==="title" if (this.frm.meta.title_field==="title"
&& this.frm.perm[0].write && this.frm.perm[0].write
&& !this.frm.get_docfield("title").options) {
&& !this.frm.get_docfield("title").options
&& !this.frm.doc.__islocal) {
return true; return true;
} else { } else {
return false; return false;
} }
}, },
can_rename: function() { can_rename: function() {
return this.frm.perm[0].write && this.frm.meta.allow_rename;
return this.frm.perm[0].write && this.frm.meta.allow_rename && !this.frm.doc.__islocal;
}, },
setup_editable_title: function() { setup_editable_title: function() {
var me = this; var me = this;


+ 33
- 8
frappe/public/js/frappe/ui/page.js 查看文件

@@ -256,17 +256,14 @@ frappe.ui.Page = Class.extend({
* @param {object} parent - DOM object representing the parent of the drop down item lists * @param {object} parent - DOM object representing the parent of the drop down item lists
*/ */
add_dropdown_item: function(label, click, standard, parent) { add_dropdown_item: function(label, click, standard, parent) {
const is_already_added = () => {
let found_lists = $(parent).find('li > a.grey-link:contains(' + label + ')');
return found_lists.length > 0;
}
let item_selector = 'li > a.grey-link';


parent.parent().removeClass("hide"); parent.parent().removeClass("hide");


var $li = $('<li><a class="grey-link">'+ label +'</a><li>'), var $li = $('<li><a class="grey-link">'+ label +'</a><li>'),
$link = $li.find("a").on("click", click); $link = $li.find("a").on("click", click);


if (is_already_added()) return;
if (this.is_in_group_button_dropdown(parent, `${item_selector}:contains('${label}')`, label)) return;


if(standard===true) { if(standard===true) {
$li.appendTo(parent); $li.appendTo(parent);
@@ -281,6 +278,21 @@ frappe.ui.Page = Class.extend({
return $link; return $link;
}, },


/*
* Check if there already exists a button with a specified label in a specified button group
* @param {object} parent - This should be the `ul` of the button group.
* @param {string} selector - CSS Selector of the button to be searched for. By default, it is `li`.
* @param {string} label - Label of the button
*/
is_in_group_button_dropdown: function(parent, selector, label){
if (!selector) selector = 'li';

if (!label || !parent) return false;

const result = $(parent).find(`${selector}:contains('${label}')`);
return result.length > 0;
},

clear_btn_group: function(parent) { clear_btn_group: function(parent) {
parent.empty(); parent.empty();
parent.parent().addClass("hide"); parent.parent().addClass("hide");
@@ -323,6 +335,15 @@ frappe.ui.Page = Class.extend({
} }
}, },


/*
* Add button to button group. If there exists another button with the same label,
* `add_inner_button` will not add the new button to the button group even if the callback
* function is different.
*
* @param {string} label - Label of the button to be added to the group
* @param {object} action - function to be called when button is clicked
* @param {string} group - Label of the group button
*/
add_inner_button: function(label, action, group) { add_inner_button: function(label, action, group) {
var me = this; var me = this;
let _action = function() { let _action = function() {
@@ -333,9 +354,13 @@ frappe.ui.Page = Class.extend({
if(group) { if(group) {
var $group = this.get_or_add_inner_group_button(group); var $group = this.get_or_add_inner_group_button(group);
$(this.inner_toolbar).removeClass("hide"); $(this.inner_toolbar).removeClass("hide");
return $('<li><a>'+label+'</a></li>')
.on('click', _action)
.appendTo($group.find(".dropdown-menu"));

if (!this.is_in_group_button_dropdown($group.find(".dropdown-menu"), 'li', label)) {
return $('<li><a>'+label+'</a></li>')
.on('click', _action)
.appendTo($group.find(".dropdown-menu"));
}

} else { } else {
return $('<button class="btn btn-default btn-xs" style="margin-left: 10px;">'+__(label)+'</btn>') return $('<button class="btn btn-default btn-xs" style="margin-left: 10px;">'+__(label)+'</btn>')
.on("click", _action) .on("click", _action)


+ 20
- 11
frappe/utils/help.py 查看文件

@@ -174,7 +174,6 @@ class HelpDatabase(object):
return intro return intro


def make_content(self, html, path, relpath): def make_content(self, html, path, relpath):

if '<h1>' in html: if '<h1>' in html:
html = html.split('</h1>', 1)[1] html = html.split('</h1>', 1)[1]


@@ -185,18 +184,10 @@ class HelpDatabase(object):
app_name = path.split('/', 3)[2] app_name = path.split('/', 3)[2]
html += get_improve_page_html(app_name, target) html += get_improve_page_html(app_name, target)



soup = BeautifulSoup(html, 'html.parser') soup = BeautifulSoup(html, 'html.parser')


for link in soup.find_all('a'):
if link.has_attr('href'):
url = link['href']
if '/user' in url:
data_path = url[url.index('/user'):]
if '.' in data_path:
data_path = data_path[: data_path.rindex('.')]
if data_path:
link['data-path'] = data_path.replace("user", app_name)
self.fix_links(soup, app_name)
self.fix_images(soup, app_name)


parent = self.get_parent(relpath) parent = self.get_parent(relpath)
if parent: if parent:
@@ -208,6 +199,24 @@ class HelpDatabase(object):


return soup.prettify() return soup.prettify()


def fix_links(self, soup, app_name):
for link in soup.find_all('a'):
if link.has_attr('href'):
url = link['href']
if '/user' in url:
data_path = url[url.index('/user'):]
if '.' in data_path:
data_path = data_path[: data_path.rindex('.')]
if data_path:
link['data-path'] = data_path.replace("user", app_name)

def fix_images(self, soup, app_name):
for img in soup.find_all('img'):
if img.has_attr('src'):
url = img['src']
if '/docs/' in url:
img['src'] = url.replace('/docs/', '/assets/{0}_docs/'.format(app_name))

def build_index(self): def build_index(self):
for data in self.db.sql('select path, full_path, content from help'): for data in self.db.sql('select path, full_path, content from help'):
self.make_index(data[0], data[1], data[2]) self.make_index(data[0], data[1], data[2])


正在加载...
取消
保存