@@ -569,14 +569,21 @@ def get_all_apps(with_frappe=False, with_internal_apps=True, sites_path=None): | |||||
if with_internal_apps: | if with_internal_apps: | ||||
apps.extend(get_file_items(os.path.join(local.site_path, "apps.txt"))) | apps.extend(get_file_items(os.path.join(local.site_path, "apps.txt"))) | ||||
if with_frappe: | if with_frappe: | ||||
if "frappe" in apps: | |||||
apps.remove("frappe") | |||||
apps.insert(0, 'frappe') | apps.insert(0, 'frappe') | ||||
return apps | return apps | ||||
def get_installed_apps(): | |||||
def get_installed_apps(sort=False): | |||||
"""Get list of installed apps in current site.""" | """Get list of installed apps in current site.""" | ||||
if getattr(flags, "in_install_db", True): | if getattr(flags, "in_install_db", True): | ||||
return [] | return [] | ||||
installed = json.loads(db.get_global("installed_apps") or "[]") | installed = json.loads(db.get_global("installed_apps") or "[]") | ||||
if sort: | |||||
installed = [app for app in get_all_apps(True) if app in installed] | |||||
return installed | return installed | ||||
@whitelist() | @whitelist() | ||||
@@ -715,8 +722,8 @@ def call(fn, *args, **kwargs): | |||||
fnargs, varargs, varkw, defaults = inspect.getargspec(fn) | fnargs, varargs, varkw, defaults = inspect.getargspec(fn) | ||||
newargs = {} | newargs = {} | ||||
for a in fnargs: | |||||
if a in kwargs: | |||||
for a in kwargs: | |||||
if (a in fnargs) or varkw: | |||||
newargs[a] = kwargs.get(a) | newargs[a] = kwargs.get(a) | ||||
if "flags" in newargs: | if "flags" in newargs: | ||||
@@ -164,9 +164,14 @@ class FrappeClient(object): | |||||
new_doc = frappe.get_doc(doc) | new_doc = frappe.get_doc(doc) | ||||
new_doc.insert() | new_doc.insert() | ||||
if doctype != "Comment" and not meta.istable: | |||||
self.migrate_doctype("Comment", {"comment_doctype": doctype, "comment_docname": doc["name"]}, | |||||
update={"comment_docname": new_doc.name}, verbose=0) | |||||
if not meta.istable: | |||||
if doctype != "Comment": | |||||
self.migrate_doctype("Comment", {"comment_doctype": doctype, "comment_docname": doc["name"]}, | |||||
update={"comment_docname": new_doc.name}, verbose=0) | |||||
if doctype != "File Data": | |||||
self.migrate_doctype("File Data", {"attached_to_doctype": doctype, | |||||
"attached_to_name": doc["name"]}, update={"attached_to_name": new_doc.name}, verbose=0) | |||||
def migrate_single(self, doctype): | def migrate_single(self, doctype): | ||||
doc = self.get_doc(doctype, doctype) | doc = self.get_doc(doctype, doctype) | ||||
@@ -521,9 +521,6 @@ a.active { | |||||
pointer-events: none; | pointer-events: none; | ||||
cursor: default; | cursor: default; | ||||
} | } | ||||
:target { | |||||
background-color: #ffa; | |||||
} | |||||
.page-breadcrumbs .breadcrumb { | .page-breadcrumbs .breadcrumb { | ||||
padding: 0px; | padding: 0px; | ||||
background-color: transparent; | background-color: transparent; | ||||
@@ -547,9 +544,6 @@ a.active { | |||||
.docs-attr-desc { | .docs-attr-desc { | ||||
padding-left: 30px; | padding-left: 30px; | ||||
} | } | ||||
.page-content { | |||||
min-height: 400px; | |||||
} | |||||
@media (max-width: 767px) { | @media (max-width: 767px) { | ||||
.page-content { | .page-content { | ||||
min-height: 200px; | min-height: 200px; | ||||
@@ -278,9 +278,9 @@ a.active { | |||||
cursor: default; | cursor: default; | ||||
} | } | ||||
:target { | |||||
background-color: #ffa; | |||||
} | |||||
// :target { | |||||
// background-color: #ffa; | |||||
// } | |||||
.page-breadcrumbs .breadcrumb { | .page-breadcrumbs .breadcrumb { | ||||
padding: 0px; | padding: 0px; | ||||
@@ -311,11 +311,6 @@ a.active { | |||||
padding-left: 30px; | padding-left: 30px; | ||||
} | } | ||||
.page-content { | |||||
min-height: 400px; | |||||
} | |||||
@media (max-width: 767px) { | @media (max-width: 767px) { | ||||
.page-content { | .page-content { | ||||
min-height: 200px; | min-height: 200px; | ||||
@@ -3,13 +3,16 @@ frappe.ready(function() { | |||||
var result_wrapper = $(".website-list .result"); | var result_wrapper = $(".website-list .result"); | ||||
$(".website-list .btn-more").on("click", function() { | $(".website-list .btn-more").on("click", function() { | ||||
var data = $.extend(get_query_params(), { | |||||
doctype: "{{ doctype }}", | |||||
txt: "{{ txt or '' }}", | |||||
limit_start: next_start, | |||||
pathname: location.pathname | |||||
}); | |||||
return $.ajax({ | return $.ajax({ | ||||
url:"/api/method/frappe.templates.pages.list.get", | url:"/api/method/frappe.templates.pages.list.get", | ||||
data: { | |||||
doctype: "{{ doctype }}", | |||||
txt: "{{ txt or '' }}", | |||||
limit_start: next_start | |||||
}, | |||||
data: data, | |||||
statusCode: { | statusCode: { | ||||
200: function(data) { | 200: function(data) { | ||||
var data = data.message; | var data = data.message; | ||||
@@ -28,4 +31,4 @@ frappe.ready(function() { | |||||
$(".website-list .more-block").addClass("hide"); | $(".website-list .more-block").addClass("hide"); | ||||
} | } | ||||
}; | }; | ||||
}) | |||||
}); |
@@ -5,6 +5,7 @@ from __future__ import unicode_literals | |||||
import frappe | import frappe | ||||
from frappe.model.base_document import get_controller | from frappe.model.base_document import get_controller | ||||
from frappe.utils import cint | from frappe.utils import cint | ||||
from frappe.website.render import resolve_path | |||||
no_cache = 1 | no_cache = 1 | ||||
no_sitemap = 1 | no_sitemap = 1 | ||||
@@ -30,7 +31,14 @@ def get(doctype, txt=None, limit_start=0, **kwargs): | |||||
limit_start = cint(limit_start) | limit_start = cint(limit_start) | ||||
limit_page_length = 20 | limit_page_length = 20 | ||||
next_start = limit_start + limit_page_length | next_start = limit_start + limit_page_length | ||||
filters = frappe._dict(kwargs) | filters = frappe._dict(kwargs) | ||||
if filters.pathname: | |||||
# resolve additional filters from path | |||||
resolve_path(filters.pathname) | |||||
for key, val in frappe.local.form_dict.items(): | |||||
if not (key in ("doctype", "txt", "limit_start") and key in filters): | |||||
filters[key] = val | |||||
controller = get_controller(doctype) | controller = get_controller(doctype) | ||||
meta = frappe.get_meta(doctype) | meta = frappe.get_meta(doctype) | ||||
@@ -91,11 +91,8 @@ def get_jloader(): | |||||
if not frappe.local.jloader: | if not frappe.local.jloader: | ||||
from jinja2 import ChoiceLoader, PackageLoader, PrefixLoader | from jinja2 import ChoiceLoader, PackageLoader, PrefixLoader | ||||
apps = frappe.get_installed_apps() | |||||
# put frappe at the end | |||||
apps.remove("frappe") | |||||
apps.append("frappe") | |||||
apps = frappe.get_installed_apps(sort=True) | |||||
apps.reverse() | |||||
frappe.local.jloader = ChoiceLoader( | frappe.local.jloader = ChoiceLoader( | ||||
# search for something like app/templates/... | # search for something like app/templates/... | ||||
@@ -42,6 +42,8 @@ def build_context(context): | |||||
"""get_context method of doc or module is supposed to render content templates and push it into context""" | """get_context method of doc or module is supposed to render content templates and push it into context""" | ||||
context = frappe._dict(context) | context = frappe._dict(context) | ||||
context.update(get_website_settings()) | context.update(get_website_settings()) | ||||
context.update(frappe.get_hooks("website_context") or {}) | |||||
context.update(frappe.local.conf.get("website_context") or {}) | |||||
# provide doc | # provide doc | ||||
if context.doc: | if context.doc: | ||||
@@ -75,7 +77,6 @@ def build_context(context): | |||||
context.children = module.get_children(context) | context.children = module.get_children(context) | ||||
add_metatags(context) | add_metatags(context) | ||||
context.update(frappe.get_hooks("website_context") or {}) | |||||
# determine templates to be used | # determine templates to be used | ||||
if not context.base_template_path: | if not context.base_template_path: | ||||
@@ -459,6 +459,36 @@ function get_url_arg(name) { | |||||
return decodeURIComponent(results[1]); | return decodeURIComponent(results[1]); | ||||
} | } | ||||
function get_query_params() { | |||||
var query_params = {}; | |||||
var query_string = location.search.substring(1); | |||||
var query_list = query_string.split("&"); | |||||
for (var i=0, l=query_list.length; i < l; i++ ){ | |||||
var pair = query_list[i].split("="); | |||||
var key = pair[0]; | |||||
if (!key) { | |||||
continue; | |||||
} | |||||
var value = pair[1]; | |||||
if (typeof value === "string") { | |||||
value = decodeURIComponent(value); | |||||
} | |||||
if (key in query_params) { | |||||
if (typeof query_params[key] === undefined) { | |||||
query_params[key] = []; | |||||
} else if (typeof query_params[key] === "string") { | |||||
query_params[key] = [query_params[key]]; | |||||
} | |||||
query_params[key].push(value); | |||||
} else { | |||||
query_params[key] = value; | |||||
} | |||||
} | |||||
return query_params; | |||||
} | |||||
function make_query_string(obj) { | function make_query_string(obj) { | ||||
var query_params = []; | var query_params = []; | ||||
$.each(obj, function(k, v) { query_params.push(encodeURIComponent(k) + "=" + encodeURIComponent(v)); }); | $.each(obj, function(k, v) { query_params.push(encodeURIComponent(k) + "=" + encodeURIComponent(v)); }); | ||||