Merge lp:~zeutschel/goobi-production/bug-1031240 into lp:goobi-production/1.8

Proposed by Matthias Ronge
Status: Merged
Approved by: Ralf Claussnitzer
Approved revision: 90
Merged at revision: 105
Proposed branch: lp:~zeutschel/goobi-production/bug-1031240
Merge into: lp:goobi-production/1.8
Diff against target: 339 lines (+241/-57)
2 files modified
newpages/inc_AktuelleSchritte/schritt_box_Eigenschaften.jsp (+180/-36)
newpages/inc_Prozessverwaltung/schritt_box_Eigenschaften.jsp (+61/-21)
To merge this branch: bzr merge lp:~zeutschel/goobi-production/bug-1031240
Reviewer Review Type Date Requested Status
Ralf Claussnitzer (community) Approve
Matthias Ronge Pending
Review via email: mp+123244@code.launchpad.net

This proposal supersedes a proposal from 2012-09-06.

Description of the change

The code is removed now

To post a comment you must log in.
Revision history for this message
Ralf Claussnitzer (ralf-claussnitzer-deactivatedaccount) wrote : Posted in a previous version of this proposal

Doesn' work for me.

I merged the provided branch and the default propertyTemplates.xml from /config but the behavior did not change.
Is there something missing?

review: Needs Information
Revision history for this message
Matthias Ronge (matthias-ronge) wrote : Posted in a previous version of this proposal

You’re right. It’s strange anyhow…

review: Needs Fixing
Revision history for this message
Ralf Claussnitzer (ralf-claussnitzer-deactivatedaccount) wrote : Posted in a previous version of this proposal

Works for me now. As a last request, please remove unneeded code from newpages/inc_AktuelleSchritte/schritt_box_Eigenschaften.jsp instead of commenting out (see first hunk of diff):

=== modified file 'newpages/inc_AktuelleSchritte/schritt_box_Eigenschaften.jsp'
--- newpages/inc_AktuelleSchritte/schritt_box_Eigenschaften.jsp 2011-12-22 13:29:56 +0000
+++ newpages/inc_AktuelleSchritte/schritt_box_Eigenschaften.jsp 2012-09-06 10:28:14 +0000
@@ -3,6 +3,8 @@
 <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
 <%@ taglib uri="http://jsftutorials.net/htmLib" prefix="htm"%>
 <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="x"%>
+<%@ taglib uri="http://sourceforge.net/projects/jsf-comp/easysi" prefix="si"%>
+<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

 <%--
   ~ This file is part of the Goobi Application - a Workflow tool for the support of
@@ -78,15 +80,15 @@
    </h:column>
   </x:dataTable>

- <%-- Neu-Schaltknopf --%>
+ <%-- Neu-Schaltknopf --%><%--
   <h:commandLink action="#{AktuelleSchritteForm.SchrittEigenschaftNeu}" id="new"
    value="#{msgs.eigenschaftHinzufuegen}"
    title="#{msgs.eigenschaftHinzufuegen}"
- rendered="#{AktuelleSchritteForm.modusBearbeiten!='schritteeigenschaft' && 0==1}">
+ rendered="#{AktuelleSchritteForm.modusBearbeiten!='schritteeigenschaft'}">
    <x:updateActionListener
     property="#{AktuelleSchritteForm.modusBearbeiten}"
     value="schritteeigenschaft" />
- </h:commandLink>
+ </h:commandLink> --%>

review: Needs Fixing
Revision history for this message
Ralf Claussnitzer (ralf-claussnitzer-deactivatedaccount) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'newpages/inc_AktuelleSchritte/schritt_box_Eigenschaften.jsp'
2--- newpages/inc_AktuelleSchritte/schritt_box_Eigenschaften.jsp 2011-12-22 13:29:56 +0000
3+++ newpages/inc_AktuelleSchritte/schritt_box_Eigenschaften.jsp 2012-09-07 10:13:23 +0000
4@@ -3,6 +3,8 @@
5 <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
6 <%@ taglib uri="http://jsftutorials.net/htmLib" prefix="htm"%>
7 <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="x"%>
8+<%@ taglib uri="http://sourceforge.net/projects/jsf-comp/easysi" prefix="si"%>
9+<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
10
11 <%--
12 ~ This file is part of the Goobi Application - a Workflow tool for the support of
13@@ -78,16 +80,6 @@
14 </h:column>
15 </x:dataTable>
16
17- <%-- Neu-Schaltknopf --%>
18- <h:commandLink action="#{AktuelleSchritteForm.SchrittEigenschaftNeu}" id="new"
19- value="#{msgs.eigenschaftHinzufuegen}"
20- title="#{msgs.eigenschaftHinzufuegen}"
21- rendered="#{AktuelleSchritteForm.modusBearbeiten!='schritteeigenschaft' && 0==1}">
22- <x:updateActionListener
23- property="#{AktuelleSchritteForm.modusBearbeiten}"
24- value="schritteeigenschaft" />
25- </h:commandLink>
26-
27
28 <%-- ++++++++++++++++++++++++++++++++++++++++++++++++++++ --%>
29 <%-- +++++++++++++++ Eigenschaft bearbeiten ++++++++++++++++ --%>
30@@ -112,32 +104,184 @@
31 <htm:tr>
32 <htm:td styleClass="eingabeBoxen_row2" colspan="2">
33
34- <x:dataTable cellspacing="1px" cellpadding="1px" id="subtable"
35- columnClasses="standardTable_Column,standardTable_Column,standardTable_ColumnCentered"
36- var="item" value="#{AktuelleSchritteForm.mySchritt.eigenschaftenList}">
37-
38- <h:column>
39- <h:outputText value="#{item.titel}" />
40- </h:column>
41-
42- <h:column>
43- <h:inputText value="#{item.wert}" style="width:500px" id="myvalue"/>
44- </h:column>
45- </x:dataTable>
46-
47- <h:panelGrid columns="2" rendered="false">
48- <%-- Felder --%>
49- <h:outputLabel for="eigenschafttitel" value="#{msgs.titel}" />
50- <h:outputText id="eigenschafttitel"
51- value="#{AktuelleSchritteForm.mySchrittEigenschaft.titel}" />
52-
53- <h:outputLabel for="eigenschaftwert" value="#{msgs.wert}" />
54- <h:panelGroup>
55- <h:inputText id="eigenschaftwert"
56- style="width: 300px;margin-right:15px"
57- value="#{AktuelleSchritteForm.mySchrittEigenschaft.wert}" />
58- </h:panelGroup>
59- </h:panelGrid>
60+ <x:dataTable id="container" var="container" value="#{AktuelleSchritteForm.mySchritt.displayProperties.containers}">
61+ <h:column>
62+ <x:dataTable id="eigenschaften" var="mystep_item" value="#{AktuelleSchritteForm.mySchritt.displayProperties.sortedProperties}" style="border-bottom: 1px solid #F4BBA5;">
63+
64+ <h:column rendered="#{mystep_item.container==0 && mystep_item.container==container}">
65+ <h:outputText value="#{mystep_item.titel}" />
66+
67+ </h:column>
68+
69+ <h:column rendered="#{mystep_item.container==0 && mystep_item.container==container}">
70+
71+ <%-- textarea --%>
72+ <h:panelGroup id="prpvw15_1"
73+ rendered="#{((mystep_item.type.name == 'string') || (mystep_item.type.name == 'unknown') || (mystep_item.type.name == 'null') || (mystep_item.type.name == 'messagenormal'))}">
74+
75+ <h:inputText id="file" style="width: 500px;margin-right:15px" value="#{mystep_item.selectedValue}" required="#{mystep_item.required}" />
76+ <x:message id="prpvw15_1_1" for="file" style="color: red" replaceIdWithLabel="true" />
77+ </h:panelGroup>
78+
79+ <%-- only text --%>
80+ <h:panelGroup id="prpvw15_1e" rendered="#{((mystep_item.type.name == 'messageimportant') || (mystep_item.type.name == 'messageerror'))}">
81+ <htm:div id="test" style="width: 500px;margin-right:15px">
82+ <h:outputText id="filee" value="#{mystep_item.selectedValue}" />
83+ </htm:div>
84+ </h:panelGroup>
85+
86+ <%-- numbers only --%>
87+ <h:panelGroup id="prpvw15_1m" rendered="#{mystep_item.type.name == 'integer' || mystep_item.type.name == 'number'}">
88+ <h:outputLabel for="Number" value="#{mystep_item.titel}" style="display:none" />
89+ <h:inputText id="Number" style="width: 500px;margin-right:15px" value="#{mystep_item.selectedValue}" required="#{mystep_item.required}">
90+ <f:validateLongRange minimum="0" />
91+ </h:inputText>
92+ <x:message id="prpvw15_1_12" for="Number" style="color: red" showSummary="true" />
93+ </h:panelGroup>
94+
95+ <%-- SelectOneMenu --%>
96+ <h:panelGroup id="prpvw15_2" rendered="#{(mystep_item.type.name == 'list')}">
97+ <h:selectOneMenu value="#{mystep_item.selectedValue}" id="prpvw15_2_1" style="width: 500px;margin-right:15px">
98+ <si:selectItems id="prpvw15_2_2" value="#{mystep_item.valuesList}" var="mystep_items" itemLabel="#{mystep_items}" itemValue="#{mystep_items}" />
99+ </h:selectOneMenu>
100+ </h:panelGroup>
101+
102+ <%-- SelectManyMenu --%>
103+ <h:panelGroup id="prpvw15_3" rendered="#{(mystep_item.type.name == 'listmultiselect')}">
104+ <h:selectManyListbox id="prpvw15_3_1" style="width: 500px;margin-right:15px" value="#{mystep_item.selectedValuesList}"
105+ required="#{mystep_item.required}" size="5">
106+ <si:selectItems id="prpvw15_3_2" value="#{mystep_item.valuesList}" var="mystep_items" itemLabel="#{mystep_items}" itemValue="#{mystep_items}" />
107+ </h:selectManyListbox>
108+ </h:panelGroup>
109+
110+ <%-- Boolean --%>
111+ <h:panelGroup id="prpvw15_4" rendered="#{(mystep_item.type.name == 'boolean')}">
112+ <h:selectOneMenu value="#{mystep_item.selectedValue}" id="prpvw15_4_1" required="#{mystep_item.required}" style="width: 500px;margin-right:15px">
113+ <f:selectItem id="prpvw15_4_2" itemValue="true" itemLabel="#{msgs.yes}" />
114+ <f:selectItem id="prpvw15_4_3" itemValue="false" itemLabel="#{msgs.no}" />
115+ </h:selectOneMenu>
116+ </h:panelGroup>
117+
118+ <%-- Date --%>
119+ <h:panelGroup id="prpvw15_5" rendered="#{(mystep_item.type.name == 'date')}">
120+ <rich:calendar id="prpvw15_5_1" datePattern="dd.MM.yyyy" value="#{mystep_item.date}" enableManualInput="true">
121+ </rich:calendar>
122+ </h:panelGroup>
123+ </h:column>
124+ <%-- delete --%>
125+ <h:column rendered="#{mystep_item.container==0 && mystep_item.container==container}">
126+ <h:panelGroup>
127+ <h:commandLink action="#{AktuelleSchritteForm.mySchritt.displayProperties.deleteProperty}"
128+ rendered="#{mystep_item.type.name != 'messageerror' && mystep_item.type.name != 'messageimportant' && mystep_item.type.name != 'messagenormal'}">
129+ <h:graphicImage value="images/buttons/waste1a_20px.gif" />
130+ <x:updateActionListener value="#{mystep_item}" property="#{AktuelleSchritteForm.mySchritt.displayProperties.currentProperty}" />
131+ </h:commandLink>
132+
133+ </h:panelGroup>
134+ <%-- duplicate --%>
135+ <h:panelGroup>
136+ <h:commandLink action="#{AktuelleSchritteForm.mySchritt.displayProperties.duplicateProperty}"
137+ rendered="#{mystep_item.type.name != 'messageerror' && mystep_item.type.name != 'messageimportant' && mystep_item.type.name != 'messagenormal'}">
138+ <h:graphicImage value="/newpages/images/buttons/copy.gif" />
139+ <x:updateActionListener value="#{mystep_item}" property="#{AktuelleSchritteForm.mySchritt.displayProperties.currentProperty}" />
140+ </h:commandLink>
141+ </h:panelGroup>
142+ </h:column>
143+
144+
145+<%-- container with properties --%>
146+ <h:column rendered="#{mystep_item.container!=0 && mystep_item.container==container}">
147+ <h:outputText value="#{mystep_item.titel}" />
148+
149+ </h:column>
150+
151+ <h:column rendered="#{mystep_item.container!=0 && mystep_item.container==container}">
152+
153+ <%-- textarea --%>
154+ <h:panelGroup id="prpvw15_12"
155+ rendered="#{((mystep_item.type.name == 'string') || (mystep_item.type.name == 'unknown') || (mystep_item.type.name == 'null') || (mystep_item.type.name == 'messagenormal'))}">
156+
157+ <h:inputText id="file2" style="width: 500px;margin-right:15px" value="#{mystep_item.selectedValue}" required="#{mystep_item.required}" />
158+ <x:message id="prpvw15_1_122246" for="file2" style="color: red" replaceIdWithLabel="true" />
159+ </h:panelGroup>
160+
161+ <%-- only text --%>
162+ <h:panelGroup id="prpvw15_12e" rendered="#{((mystep_item.type.name == 'messageimportant') || (mystep_item.type.name == 'messageerror'))}">
163+ <htm:div id="test2" style="width: 500px;margin-right:15px">
164+ <h:outputText id="filee2" value="#{mystep_item.selectedValue}" />
165+ </htm:div>
166+ </h:panelGroup>
167+
168+ <%-- numbers only --%>
169+ <h:panelGroup id="prpvw15_12m" rendered="#{mystep_item.type.name == 'integer' || mystep_item.type.name == 'number'}">
170+ <h:outputLabel for="Number2" value="#{mystep_item.titel}" style="display:none" />
171+ <h:inputText id="Number2" style="width: 500px;margin-right:15px" value="#{mystep_item.selectedValue}" required="#{mystep_item.required}">
172+ <f:validateLongRange minimum="0" />
173+ </h:inputText>
174+ <x:message id="prpvw15_1_122" for="Number2" style="color: red" showSummary="true" />
175+ </h:panelGroup>
176+
177+ <%-- SelectOneMenu --%>
178+ <h:panelGroup id="prpvw15_22" rendered="#{(mystep_item.type.name == 'list')}">
179+ <h:selectOneMenu value="#{mystep_item.selectedValue}" id="prpvw15_2_12" style="width: 500px;margin-right:15px">
180+ <si:selectItems id="prpvw15_2_22" value="#{mystep_item.valuesList}" var="mystep_items" itemLabel="#{mystep_items}" itemValue="#{mystep_items}" />
181+ </h:selectOneMenu>
182+ </h:panelGroup>
183+
184+ <%-- SelectManyMenu --%>
185+ <h:panelGroup id="prpvw15_32" rendered="#{(mystep_item.type.name == 'listmultiselect')}">
186+ <h:selectManyListbox id="prpvw15_3_12" style="width: 500px;margin-right:15px" value="#{mystep_item.selectedValuesList}"
187+ required="#{mystep_item.required}" size="5">
188+ <si:selectItems id="prpvw15_3_22" value="#{mystep_item.valuesList}" var="mystep_items" itemLabel="#{mystep_items}" itemValue="#{mystep_items}" />
189+ </h:selectManyListbox>
190+ </h:panelGroup>
191+
192+ <%-- Boolean --%>
193+ <h:panelGroup id="prpvw15_42" rendered="#{(mystep_item.type.name == 'boolean')}">
194+ <h:selectOneMenu value="#{mystep_item.selectedValue}" id="prpvw15_4_145" required="#{mystep_item.required}" style="width: 500px;margin-right:15px">
195+ <f:selectItem id="prpvw15_4_22" itemValue="true" itemLabel="#{msgs.yes}" />
196+ <f:selectItem id="prpvw15_4_32" itemValue="false" itemLabel="#{msgs.no}" />
197+ </h:selectOneMenu>
198+ </h:panelGroup>
199+
200+ <%-- Date --%>
201+ <h:panelGroup id="prpvw15_52" rendered="#{(mystep_item.type.name == 'date')}">
202+ <rich:calendar id="prpvw15_5_12" datePattern="dd.MM.yyyy" value="#{mystep_item.date}" enableManualInput="true">
203+ </rich:calendar>
204+ </h:panelGroup>
205+
206+
207+ </h:column>
208+ <%-- delete --%>
209+ <h:column rendered="#{mystep_item.container!=0 && mystep_item.container==container}">
210+ <h:panelGroup>
211+ <h:commandLink action="#{AktuelleSchritteForm.mySchritt.displayProperties.deleteProperty}"
212+ rendered="#{mystep_item.type.name != 'messageerror' && mystep_item.type.name != 'messageimportant' && mystep_item.type.name != 'messagenormal'}">
213+ <h:graphicImage value="images/buttons/waste1a_20px.gif" />
214+ <x:updateActionListener value="#{mystep_item}" property="#{AktuelleSchritteForm.mySchritt.displayProperties.currentProperty}" />
215+ </h:commandLink>
216+
217+ </h:panelGroup>
218+ <%-- duplicate --%>
219+ <h:panelGroup>
220+ <h:commandLink action="#{AktuelleSchritteForm.mySchritt.displayProperties.duplicateContainer}"
221+ rendered="#{mystep_item.type.name != 'messageerror' && mystep_item.type.name != 'messageimportant' && mystep_item.type.name != 'messagenormal'}">
222+ <h:graphicImage value="/newpages/images/buttons/copy.gif" />
223+ <x:updateActionListener value="#{mystep_item}" property="#{AktuelleSchritteForm.mySchritt.displayProperties.currentProperty}" />
224+ </h:commandLink>
225+
226+ </h:panelGroup>
227+
228+ </h:column>
229+ <htm:br rendered="#{mystep_item.container!=0 && mystep_item.container==container}" />
230+ <htm:br rendered="#{mystep_item.container!=0 && mystep_item.container==container}" />
231+
232+ <htm:hr rendered="#{mystep_item.container!=0 && mystep_item.container==container}" />
233+ <htm:br rendered="#{mystep_item.container!=0 && mystep_item.container==container}" />
234+ </x:dataTable>
235+ </h:column>
236+
237+ </x:dataTable>
238
239 </htm:td>
240 </htm:tr>
241
242=== modified file 'newpages/inc_Prozessverwaltung/schritt_box_Eigenschaften.jsp'
243--- newpages/inc_Prozessverwaltung/schritt_box_Eigenschaften.jsp 2012-03-06 12:13:51 +0000
244+++ newpages/inc_Prozessverwaltung/schritt_box_Eigenschaften.jsp 2012-09-07 10:13:23 +0000
245@@ -3,6 +3,8 @@
246 <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
247 <%@ taglib uri="http://jsftutorials.net/htmLib" prefix="htm"%>
248 <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="x"%>
249+<%@ taglib uri="http://sourceforge.net/projects/jsf-comp/easysi" prefix="si"%>
250+<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
251
252 <%--
253 ~ This file is part of the Goobi Application - a Workflow tool for the support of
254@@ -107,27 +109,65 @@
255 <%-- Formular für die Bearbeitung der Eigenschaft --%>
256 <htm:tr>
257 <htm:td styleClass="eingabeBoxen_row2" colspan="2">
258- <h:panelGrid columns="2">
259-
260- <%-- Felder --%>
261- <h:outputLabel for="eigenschafttitel" value="#{msgs.titel}" />
262- <h:panelGroup>
263- <h:inputText id="eigenschafttitel"
264- style="width: 300px;margin-right:15px"
265- value="#{ProzessverwaltungForm.mySchritt.displayProperties.currentProperty.titel}"
266- required="true" />
267- <x:message for="eigenschafttitel" style="color: red"
268- detailFormat="#{msgs.keinTitelAngegeben}" />
269- </h:panelGroup>
270-
271- <h:outputLabel for="eigenschaftwert" value="#{msgs.wert}" />
272- <h:panelGroup>
273- <h:inputText id="eigenschaftwert"
274- style="width: 300px;margin-right:15px"
275- value="#{ProzessverwaltungForm.mySchritt.displayProperties.currentProperty.wert}" />
276- </h:panelGroup>
277- </h:panelGrid>
278-
279+ <x:aliasBean alias="#{myitem}" value="#{ProzessverwaltungForm.mySchritt.displayProperties.currentProperty}">
280+ <h:panelGrid columns="2">
281+
282+
283+ <%-- Felder --%>
284+ <h:outputLabel for="eigenschafttitel" value="#{msgs.titel}" />
285+ <h:panelGroup>
286+ <h:inputText id="eigenschafttitel" style="width: 500px;margin-right:15px"
287+ value="#{ProzessverwaltungForm.mySchritt.displayProperties.currentProperty.titel}" required="true" />
288+ <x:message for="eigenschafttitel" style="color: red" detailFormat="#{msgs.keinTitelAngegeben}" />
289+ </h:panelGroup>
290+
291+
292+
293+ <h:outputText value="#{msgs.wert}" />
294+ <%-- textarea --%>
295+ <h:panelGroup id="prpvw15_1" rendered="#{((myitem.type.name == 'string') || (myitem.type.name == 'null'))}">
296+ <h:inputText id="file" style="width: 500px;margin-right:15px" value="#{myitem.selectedValue}" required="#{myitem.required}" />
297+ </h:panelGroup>
298+
299+ <%-- numbers only --%>
300+ <h:panelGroup id="prpvw15_1mnk" rendered="#{myitem.type.name == 'integer' || myitem.type.name == 'number'}">
301+
302+ <h:inputText id="numberstuff122334mnktodo" style="width: 500px;margin-right:15px" value="#{myitem.selectedValue}" required="#{myitem.required}">
303+ <f:validateLongRange minimum="0" />
304+ </h:inputText>
305+ </h:panelGroup>
306+
307+ <%-- SelectOneMenu --%>
308+ <h:panelGroup id="prpvw15_2" rendered="#{(myitem.type.name == 'list')}">
309+ <h:selectOneMenu value="#{myitem.selectedValue}" style="width: 500px;margin-right:15px" id="prpvw15_2_1">
310+ <si:selectItems id="prpvw15_2_2" value="#{myitem.valuesList}" var="myitems" itemLabel="#{myitems}" itemValue="#{myitems}" />
311+ </h:selectOneMenu>
312+ </h:panelGroup>
313+
314+ <%-- SelectManyMenu --%>
315+ <h:panelGroup id="prpvw15_3" rendered="#{(myitem.type.name == 'listmultiselect')}">
316+ <h:selectManyListbox id="prpvw15_3_1" style="width: 500px;margin-right:15px" value="#{myitem.selectedValuesList}" required="#{myitem.required}"
317+ size="10">
318+ <si:selectItems id="prpvw15_3_2" value="#{myitem.valuesList}" var="myitems" itemLabel="#{myitems}" itemValue="#{myitems}" />
319+ </h:selectManyListbox>
320+ </h:panelGroup>
321+
322+ <%-- Boolean --%>
323+ <h:panelGroup id="prpvw15_4" rendered="#{(myitem.type.name == 'boolean')}">
324+ <h:selectOneMenu value="#{myitem.selectedValue}" style="width: 500px;margin-right:15px" id="prpvw15_4_1" required="#{myitem.required}">
325+ <f:selectItem id="prpvw15_4_2" itemValue="true" itemLabel="#{msgs.yes}" />
326+ <f:selectItem id="prpvw15_4_3" itemValue="false" itemLabel="#{msgs.no}" />
327+ </h:selectOneMenu>
328+ </h:panelGroup>
329+
330+ <%-- Date --%>
331+ <h:panelGroup id="prpvw15_5" style="width: 500px;margin-right:15px" rendered="#{(myitem.type.name == 'date')}">
332+ <rich:calendar id="prpvw15_5_1" datePattern="dd.MM.yyyy" value="#{myitem.date}" enableManualInput="true">
333+ </rich:calendar>
334+ </h:panelGroup>
335+
336+ </h:panelGrid>
337+ </x:aliasBean>
338 </htm:td>
339 </htm:tr>
340

Subscribers

People subscribed via source and target branches