diff --git a/frappe/build.py b/frappe/build.py
index 0d27d75f53..42136f59fa 100644
--- a/frappe/build.py
+++ b/frappe/build.py
@@ -153,13 +153,13 @@ def pack(target, sources, no_compress, verbose):
def html_to_js_template(path, content):
# remove whitespace to a single space
- content = re.sub("\s+", " ", content).replace("'", "\'")
+ content = re.sub("\s+", " ", content)
# strip comments
content = re.sub("()", "", content)
return """frappe.templates["{key}"] = '{content}';\n""".format(\
- key=path.rsplit("/", 1)[-1][:-5], content=content)
+ key=path.rsplit("/", 1)[-1][:-5], content=content.replace("'", "\'"))
def files_dirty():
for target, sources in get_build_maps().iteritems():
diff --git a/frappe/core/doctype/user/user_list.js b/frappe/core/doctype/user/user_list.js
index 6256a52b24..227f84ee70 100644
--- a/frappe/core/doctype/user/user_list.js
+++ b/frappe/core/doctype/user/user_list.js
@@ -15,3 +15,5 @@ frappe.listview_settings['User'] = {
}
}
};
+
+frappe.help.youtube_id["User"] = "fnBoRhBrwR4";
diff --git a/frappe/core/page/data_import_tool/data_import_tool.js b/frappe/core/page/data_import_tool/data_import_tool.js
index 142299d6e6..8810d0a5d6 100644
--- a/frappe/core/page/data_import_tool/data_import_tool.js
+++ b/frappe/core/page/data_import_tool/data_import_tool.js
@@ -7,6 +7,9 @@ frappe.DataImportTool = Class.extend({
title: __("Data Import Tool"),
single_column: true
});
+ this.page.add_inner_button(__("Help"), function() {
+ frappe.help.show_video("6wiriRKPhmg");
+ });
this.make();
this.make_upload();
},
diff --git a/frappe/desk/moduleview.py b/frappe/desk/moduleview.py
index 97785b305d..7c6e83c164 100644
--- a/frappe/desk/moduleview.py
+++ b/frappe/desk/moduleview.py
@@ -137,7 +137,8 @@ def apply_permissions(data):
if ((item.type=="doctype" and item.name in user.can_read)
or (item.type=="page" and item.name in allowed_pages)
- or (item.type=="report" and item.doctype in user.can_get_report)):
+ or (item.type=="report" and item.doctype in user.can_get_report)
+ or item.type=="help"):
new_items.append(item)
diff --git a/frappe/email/doctype/email_account/email_account_list.js b/frappe/email/doctype/email_account/email_account_list.js
index 2eb5cbe550..f3bbd99e9b 100644
--- a/frappe/email/doctype/email_account/email_account_list.js
+++ b/frappe/email/doctype/email_account/email_account_list.js
@@ -19,3 +19,5 @@ frappe.listview_settings["Email Account"] = {
}
}
}
+
+frappe.help.youtube_id["Email Account"] = "YFYe0DrB95o";
diff --git a/frappe/public/build.json b/frappe/public/build.json
index 8da0dd58bd..82849f6a16 100644
--- a/frappe/public/build.json
+++ b/frappe/public/build.json
@@ -95,6 +95,7 @@
"public/js/frappe/misc/tools.js",
"public/js/frappe/misc/datetime.js",
"public/js/frappe/misc/number_format.js",
+ "public/js/frappe/misc/help.js",
"public/js/frappe/ui/upload.html",
"public/js/frappe/upload.js",
diff --git a/frappe/public/js/frappe/form/form_sidebar.html b/frappe/public/js/frappe/form/form_sidebar.html
index b77400f0fb..5a4a02c5d0 100644
--- a/frappe/public/js/frappe/form/form_sidebar.html
+++ b/frappe/public/js/frappe/form/form_sidebar.html
@@ -9,6 +9,9 @@
+ {% if(frappe.help.has_help(doctype)) { %}
+
{{ __("Help") }}
+ {% } %}
diff --git a/frappe/public/js/frappe/misc/help.js b/frappe/public/js/frappe/misc/help.js
new file mode 100644
index 0000000000..12df8ba674
--- /dev/null
+++ b/frappe/public/js/frappe/misc/help.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+// MIT License. See license.txt
+
+frappe.provide("frappe.help");
+
+frappe.help.youtube_id = {};
+
+frappe.help.has_help = function(doctype) {
+ return frappe.help.youtube_id[doctype];
+}
+
+frappe.help.show_link = function() {
+
+}
+
+frappe.help.show = function(doctype) {
+ if(frappe.help.youtube_id[doctype]) {
+ frappe.help.show_video(frappe.help.youtube_id[doctype]);
+ }
+}
+
+frappe.help.show_video = function(youtube_id, title) {
+ frappe.msgprint('', title || __("Help"));
+}
+
+$("body").on("click", "a.help-link", function() {
+ var doctype = $(this).attr("data-doctype");
+ doctype && frappe.help.show(doctype);
+});
diff --git a/frappe/public/js/frappe/misc/user.js b/frappe/public/js/frappe/misc/user.js
index 641b8296e5..f9d9d66f7f 100644
--- a/frappe/public/js/frappe/misc/user.js
+++ b/frappe/public/js/frappe/misc/user.js
@@ -132,7 +132,7 @@ $.extend(frappe.user, {
var ret = null;
switch(type) {
case "module":
- if(frappe.boot.user.allow_modules.indexOf(m)!=-1)
+ if(frappe.boot.user.allow_modules.indexOf(m)!=-1 || frappe.modules[m].is_help)
ret = m;
break;
case "page":
diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js
index 1df246f0ff..1d5ba89247 100644
--- a/frappe/public/js/frappe/ui/page.js
+++ b/frappe/public/js/frappe/ui/page.js
@@ -85,7 +85,9 @@ frappe.ui.Page = Class.extend({
this.actions_btn_group = this.page_actions.find(".actions-btn-group");
this.page_form = $('').prependTo(this.main);
+ this.inner_toolbar = $('').prependTo(this.main);
this.icon_group = this.page_actions.find(".page-icon-group");
+
},
set_indicator: function(label, color) {
@@ -225,6 +227,11 @@ frappe.ui.Page = Class.extend({
return $('').appendTo(this.menu);
},
+ add_inner_button: function(label, action) {
+ return $('