Skip to content

Commit 508bc8a

Browse files
committed
fix: HTML-escape plot titles and axis labels (close #82)
1 parent 852895e commit 508bc8a

File tree

3 files changed

+33
-27
lines changed

3 files changed

+33
-27
lines changed

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
2.6.4
2+
- fix: HTML-escape plot titles and axis labels (#82)
13
2.6.3
24
- build: pin rpy2 to 3.4.2 on Windows (#84)
35
2.6.2

shapeout2/gui/pipeline_plot.py

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import copy
2+
import html
23
import pkg_resources
34
import warnings
45

@@ -114,7 +115,9 @@ def update_content(self):
114115

115116
# font size for plot title (default size + 2)
116117
size = "{}pt".format(QtGui.QFont().pointSize() + 2)
117-
self.plot_layout.addLabel(lay["name"], colspan=3, size=size)
118+
self.plot_layout.addLabel(html.escape(lay["name"]),
119+
colspan=3,
120+
size=size)
118121
self.plot_layout.nextRow()
119122

120123
self.plot_layout.addLabel(labely, angle=-90)
@@ -328,7 +331,7 @@ def redraw(self, dslist, slot_states, plot_state):
328331
# only one scatter plot
329332
ss = slot_states[0]
330333
self.setTitle("") # fake title
331-
add_label(text=ss["name"],
334+
add_label(text=html.escape(ss["name"]),
332335
anchor_parent=self.titleLabel.item,
333336
color=ss["color"],
334337
text_halign="center",
@@ -586,23 +589,31 @@ def add_scatter(plot_item, plot_state, rtdc_ds, slot_state):
586589

587590
def get_axes_labels(plot_state, slot_states):
588591
gen = plot_state["general"]
589-
labelx = dclab.dfn.get_feature_label(gen["axis x"])
590-
labely = dclab.dfn.get_feature_label(gen["axis y"])
591-
# replace FL-? with user-defined names
592-
fl_names = slot_states[0]["fl names"]
593-
if labelx.count("FL"):
594-
for key in fl_names:
595-
if key in labelx:
596-
labelx = labelx.replace(key, fl_names[key])
597-
break
598-
if labely.count("FL"):
599-
for key in fl_names:
600-
if key in labely:
601-
labely = labely.replace(key, fl_names[key])
602-
break
592+
# Use slot_states[0] because we only have one x-axis label
593+
labelx = get_axis_label_from_feature(gen["axis x"], slot_states[0])
594+
labely = get_axis_label_from_feature(gen["axis y"], slot_states[0])
603595
return labelx, labely
604596

605597

598+
def get_axis_label_from_feature(feat, slot_state=None):
599+
"""Return the axis label for plotting given a feature name
600+
601+
- replace the fluorescence names with user-defined strings
602+
from `slot_state["fl names"]` if `slot_state` is given
603+
- html-escape all characters
604+
"""
605+
label = dclab.dfn.get_feature_label(feat)
606+
# replace FL-? with user-defined names
607+
if slot_state is not None and "fl names" in slot_state:
608+
fl_names = slot_state["fl names"]
609+
if label.count("FL") and feat.startswith("fl"):
610+
for key in fl_names:
611+
if key in label:
612+
label = label.replace(key, fl_names[key])
613+
break
614+
return html.escape(label)
615+
616+
606617
def set_viewbox(plot, range_x, range_y, scale_x="linear", scale_y="linear",
607618
padding=0):
608619
# Set Log scale

shapeout2/gui/quick_view/qv_scatter.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import dclab
21
import numpy as np
32
from PyQt5 import QtCore
43
import pyqtgraph as pg
@@ -116,16 +115,10 @@ def plot_data(self, rtdc_ds, slot, xax="area_um", yax="deform",
116115
# set data
117116
self.setData(x, y, brush=brush)
118117
# set axes labels (replace with user-defined flourescence names)
119-
left = dclab.dfn.get_feature_label(self.yax)
120-
bottom = dclab.dfn.get_feature_label(self.xax)
121-
for key in self.slot.fl_name_dict:
122-
if key in left:
123-
left = left.replace(key, self.slot.fl_name_dict[key])
124-
break
125-
for key in self.slot.fl_name_dict:
126-
if key in bottom:
127-
bottom = bottom.replace(key, self.slot.fl_name_dict[key])
128-
break
118+
left = pipeline_plot.get_axis_label_from_feature(
119+
self.yax, slot_state=self.slot.__getstate__())
120+
bottom = pipeline_plot.get_axis_label_from_feature(
121+
self.xax, slot_state=self.slot.__getstate__())
129122
self.plotItem.setLabels(left=left, bottom=bottom)
130123

131124
# Force updating the plot item size, otherwise axes labels

0 commit comments

Comments
 (0)