diff --git a/project/forms/event_date.py b/project/forms/event_date.py index 57ce4c1..c47a3ac 100644 --- a/project/forms/event_date.py +++ b/project/forms/event_date.py @@ -29,6 +29,10 @@ class FindEventDateForm(FlaskForm): choices=distance_choices, ) event_list_id = HiddenField(validators=[Optional()]) + s_ft = HiddenField(validators=[Optional()]) + s_bg = HiddenField(validators=[Optional()]) + s_pr = HiddenField(validators=[Optional()]) + s_li = HiddenField(validators=[Optional()]) submit = SubmitField(lazy_gettext("Find")) diff --git a/project/static/widget-loader.js b/project/static/widget-loader.js index 62bfb6e..bb882e2 100644 --- a/project/static/widget-loader.js +++ b/project/static/widget-loader.js @@ -33,9 +33,16 @@ style += "min-width:100%;max-width:100%;"; } + var src = baseUrl + "/" + shortName + "/widget/eventdates?"; + src = addParamToQuery(element, src, 'event-list', 'event_list_id'); + src = addParamToQuery(element, src, 'font', 's_ft'); + src = addParamToQuery(element, src, 'background', 's_bg'); + src = addParamToQuery(element, src, 'primary', 's_pr'); + src = addParamToQuery(element, src, 'link', 's_li'); + var iFrame = d.createElement("iframe"); iFrame.class = "oveda-widget-iframe"; - iFrame.src = baseUrl + "/" + shortName + "/widget/eventdates"; + iFrame.src = src; iFrame.style = style; iFrame.frameborder = "0"; iFrame.allowtransparency = "true"; @@ -48,6 +55,17 @@ iFrameElements.push(element); } + function addParamToQuery(element, url, attr, param) + { + var value = getWidgetData(element, attr); + + if (value != null) { + url += param + "=" + encodeURIComponent(value) + "&"; + } + + return url; + } + function getWidgetData(element, name, defaultValue = null) { var attribute = 'data-widget-' + name; diff --git a/project/views/widget.py b/project/views/widget.py index 0ab225f..e7e1b1f 100644 --- a/project/views/widget.py +++ b/project/views/widget.py @@ -52,7 +52,8 @@ def widget_event_dates(au_short_name): if form.validate(): form.populate_obj(params) - params.admin_unit_id = admin_unit.id + if not params.event_list_id: + params.admin_unit_id = admin_unit.id dates = get_event_dates_query(params).paginate() return render_template( @@ -188,16 +189,24 @@ def event_suggestion_create_for_admin_unit(au_short_name): def get_styles(admin_unit): styles = dict() - if admin_unit.widget_font: + if request.args.get("s_ft", None): + styles["font"] = request.args["s_ft"] + elif admin_unit.widget_font: styles["font"] = admin_unit.widget_font - if admin_unit.widget_background_color: + if request.args.get("s_bg", None): + styles["background"] = request.args["s_bg"] + elif admin_unit.widget_background_color: styles["background"] = admin_unit.widget_background_color.hex - if admin_unit.widget_primary_color: + if request.args.get("s_pr", None): + styles["primary"] = request.args["s_pr"] + elif admin_unit.widget_primary_color: styles["primary"] = admin_unit.widget_primary_color.hex - if admin_unit.widget_link_color: + if request.args.get("s_li", None): + styles["link"] = request.args["s_li"] + elif admin_unit.widget_link_color: styles["link"] = admin_unit.widget_link_color.hex return styles diff --git a/tests/views/test_widget.py b/tests/views/test_widget.py index ca524f3..ce085b0 100644 --- a/tests/views/test_widget.py +++ b/tests/views/test_widget.py @@ -43,6 +43,16 @@ def test_event_dates(client, seeder, utils): ) utils.get_ok(url) + url = utils.get_url( + "widget_event_dates", + au_short_name=au_short_name, + s_ft="Verdana", + s_bg="#eceef0", + s_pr="#b09641", + s_li="#7b2424", + ) + utils.get_ok(url) + # Unverified au_short_name = "unverifiedcrew" _, _, unverified_id = seeder.create_event_unverified() @@ -88,10 +98,10 @@ def test_event_date(client, seeder, utils, app, db): from project.models import AdminUnit admin_unit = AdminUnit.query.get(admin_unit_id) - admin_unit.widget_font = "Arial" - admin_unit.widget_background_color = Color("#F5F5F5") - admin_unit.widget_primary_color = Color("#000000") - admin_unit.widget_link_color = Color("#FF0000") + admin_unit.widget_font = "Verdana" + admin_unit.widget_background_color = Color("#eceef0") + admin_unit.widget_primary_color = Color("#b09641") + admin_unit.widget_link_color = Color("#7b2424") db.session.commit() url = utils.get_url("widget_event_date", au_short_name=au_short_name, id=1)