Send diff settings in uri

This commit is contained in:
Jesse van den Kieboom 2013-07-03 16:37:58 +02:00
parent 851ebd76d8
commit 5c1b7f9f0a
2 changed files with 37 additions and 21 deletions

View file

@ -60,6 +60,11 @@ namespace Gitg
}
}
public bool wrap { get; set; default = true; }
public bool staged { get; set; default = false; }
public bool unstaged { get; set; default = false; }
public int tab_width { get; set; default = 4; }
static construct
{
s_diffmap = new Gee.HashMap<string, DiffView>();
@ -68,6 +73,28 @@ namespace Gitg
context.register_uri_scheme("gitg-diff", gitg_diff_request);
}
private string json_settings()
{
var o = new Json.Object();
o.set_boolean_member("wrap", wrap);
o.set_int_member("tab_width", tab_width);
o.set_boolean_member("staged", staged);
o.set_boolean_member("unstaged", unstaged);
o.set_boolean_member("debug", Environment.get_variable("GITG_GTK_DIFF_VIEW_DEBUG") != null);
var gen = new Json.Generator();
var node = new Json.Node(Json.NodeType.OBJECT);
node.set_object(o);
gen.set_root(node);
size_t l;
var ret = gen.to_data(out l);
return ret[0:(long)l];
}
private static DiffViewRequest? parse_request(WebKit.URISchemeRequest request)
{
var uri = new Soup.URI(request.get_uri());
@ -238,31 +265,16 @@ namespace Gitg
// Load the diff base html
var uri = "gitg-diff:///resource/org/gnome/gitg/gtk/diff-view/diff-view.html?viewid=" + s_diff_id.to_string();
// Add custom js as a query parameter
if (custom_js != null)
{
uri += "&js=" + Soup.URI.encode(custom_js.get_uri(), null);
}
// Add custom css as a query parameter
if (custom_css != null)
{
uri += "&css=" + Soup.URI.encode(custom_css.get_uri(), null);
}
if (dbg)
{
uri += "&debug=true";
}
uri += "&settings=" + Soup.URI.encode(json_settings(), null);
d_loaded = false;
load_uri(uri);
}
public DiffView(File? custom_js)
public DiffView()
{
Object(custom_js: custom_js);
Object();
}
private void update()
@ -285,7 +297,7 @@ namespace Gitg
if (d_diff != null)
{
run_javascript.begin("update_diff(%lu);".printf(d_diffid), d_cancellable, (obj, res) => {
run_javascript.begin("update_diff(%lu, %s);".printf(d_diffid, json_settings()), d_cancellable, (obj, res) => {
try
{
run_javascript.end(res);

View file

@ -19,11 +19,13 @@ var settings = {
wrap: true,
tab_width: 4,
debug: false,
staged: false,
unstaged: false,
};
if ('settings' in params)
{
settings = $.merge(settings, JSON.parse(params.setttings));
$.extend(settings, JSON.parse(params.settings));
}
var templates = {};
@ -116,8 +118,10 @@ function write_commit(commit)
var html_builder_worker = 0;
var html_builder_tick = 0;
function update_diff(id)
function update_diff(id, lsettings)
{
$.extend(settings, lsettings);
if (html_builder_worker)
{
html_builder_worker.terminate();