#* @vtlvariable name="avatarServiceHelper" type="com.atlassian.jira.avatar.AvatarServiceHelper" *# #macro (esc $text)$textutils.htmlEncode($text)#end #macro(minSelectSize $options $headerSize $defaultValue) #if ( !$headerSize ) #set ( $headerSize = 0) #end #set ($optionsSize = 0) #if($options && $options.size()) #set ($optionsSize = $options.size()) #end #set ( $totalSize = $optionsSize + $headerSize) #if ( !$totalSize )${defaultValue}#elseif( $totalSize < $defaultValue )${totalSize}#else${defaultValue}#end #end #macro(versionStatus $version $size) #if ($version.isReleased() == true && $version.isArchived() == false) ## Released & Unarchived #set ( $versionCssClass = "jira-icon-version-released") #set ( $text = $i18n.getText('common.filters.versionstatus.released')) #elseif ($version.isReleased() == true && $version.isArchived() == true) ## Released & Archived #set ( $versionCssClass = "jira-icon-version-archived-released") #set ( $text = $i18n.getText('common.filters.versionstatus.released.and.archived')) #elseif ($version.isReleased() == false && $version.isArchived() == false) ## Unreleased & Unarchived #set ( $versionCssClass = "jira-icon-version") #set ( $text = $i18n.getText('common.filters.versionstatus.unreleased')) #elseif ($version.isReleased() == false && $version.isArchived() == true) ## Unreleased & Archived #set ( $versionCssClass = "jira-icon-version-archived") #set ( $text = $i18n.getText('common.filters.versionstatus.unreleased.and.archived')) #end #if ($versionCssClass) ${text} #end #end #macro(localHelp $aboutTextKey $anchorName) $soyRenderer.render("jira.webresources:soy-templates","JIRA.Templates.Links.helpLink", { "isLocal": true, "url": "${req.contextPath}/secure/ShowConstantsHelp.jspa?decorator=popup#${anchorName}", "title": $i18n.getText($aboutTextKey) }) #end #macro(localTimeTrackingHelp $aboutTextKey $anchorName) $soyRenderer.render("jira.webresources:soy-templates","JIRA.Templates.Links.helpLink", { "isLocal": true, "url": "${req.contextPath}/secure/ShowTimeTrackingHelp.jspa?decorator=popup#${anchorName}", "title": $i18n.getText($aboutTextKey) }) #end #macro(jiraHelpLink $helpURL $helpURLFragment) #set ($helpPath = $helpUtil.getHelpPath($helpURL)) #if ($helpPath.local) #set($helpUrl = "${baseurl}${helpPath.url}") #else #set($helpUrl = "${helpPath.url}") #end $soyRenderer.render("jira.webresources:soy-templates","JIRA.Templates.Links.helpLink", { "isLocal": $helpPath.local, "url": $helpUrl, "fragmentIdentifier": $!{helpURLFragment}, "title": ${i18n.getText($helpPath.title)} }) #end #macro(spacer)     #end #macro (versionName $version) #if ($version.isArchived()) $textutils.htmlEncode($version.name) #else $textutils.htmlEncode($version.name) #end #end #macro (selectMap $selectName $map) #end #macro (selectMapI18N $selectName $map) #end ## $map is a Map of i18n keys to Maps. The i18n key is the label for the option group. The Map is the key-value pairs ## of options for that group. #macro (selectMapGrouped $selectName $map) #end #macro (selectMapGroupedSelected $selectName $map $selectedKey) #end #macro (selectMapSelected $selectName $map $selectedKey) #end #macro (selectMapSelectedI18N $selectName $map $selectedKey) #end ## ---------------------------------------- ## Form field headers and footers ## ---------------------------------------- #macro(normalHeader $action $id $name $required) #if ($action.getErrors().get($id))   $textutils.htmlEncode($action.getErrors().get($id)) #end ## Sending this in so fields still get the class on the in the old jiraforms. This allows us to hook up behaviour for the jira-fields js #if ($!auiparams.controlHeaderClass) #set ($controlHeaderClass = " ${auiparams.controlHeaderClass}") #else #set ($controlHeaderClass = "") #end #if ($textutils && !$textutils.stringSet($name))   #else #end #if ($action.getErrors().get($id)) #else #end #end #macro(singleFooter $action $description) #if ($description && $description != '')
$description
#end #end #macro(normalFooter $action $description) #singleFooter ($action $description) #end ## ---------------------------------------- ## #AUImessage("warning" "" "woot" "" "" "" "true") ## #AUImessage($messageType $titleText $messageHtml $id $cssClass $iconText $hideIcon) ## Since AUI 8.0, "hideIcon" argument is ignored; the icon is always visible #macro(AUImessage $messageType $titleText $messageHtml $id $cssClass $iconText $hideIcon) #set($q = '"') #if ($messageType != '') #set ($typeClass = " aui-message-$messageType") #end #if ($id != '') #set ($varId = " id=${q}${id}${q}") #else #set ($varId = "") #end #if ($cssClass != '') #set ($varCssClass = " $cssClass") #else #set ($varCssClass = "") #end #if ($titleText != '') #set ($varTitleText = "

${titleText}

") #else #set ($varTitleText = "") #end $!{varTitleText}$!{messageHtml} #end #macro(displayFieldWarning $displayParams $text) #if ($displayParameters.get("showBulkEditWarning"))
Warning $text
#end #end #macro(customControlHeader $action $id $name $required $displayParameters $auiparams) #if ($!auiparams.controlHeaderType) #set ($AUIfieldgroupType = ${auiparams.controlHeaderType}) #else #set ($AUIfieldgroupType = "field-group") #end #if ($!auiparams.controlHeaderClass) #set ($AUIfieldgroupClass = " ${auiparams.controlHeaderClass}") #else #set ($AUIfieldgroupClass = "") #end #if ($!displayParameters.get('theme') && $!displayParameters.get('theme') == 'aui')
## if the noLabel param is not set or it's set to false, we should show the label. #set ($isDPShowLabel = (!$!displayParameters.noLabel || $!displayParameters.noLabel == "false")) #set ($isAPShowLabel = (!$!auiparams.noLabel || $!auiparams.noLabel == "false")) ## if both the displayParams and AUI params specify the label should be shown then show it! If either says ## it should be hidden then hide it! #if ($isDPShowLabel && $isAPShowLabel) ## Need the following all on one line as IE7 doesn't ignore the white space. #if ($name != "")$textutils.htmlEncode($name)#if ($!auiparams.dateFormatStr) (${auiparams.dateFormatStr})#end#if ($required) $soyRenderer.render("jira.webresources:icon-required","JIRA.Templates.Form.IconRequired.render", {}) #end#end #end #else #if ($!displayParameters.get("noHeader")) #set ($error = false) #if ($action.getErrors().get($id)) #set ($error = $action.getErrors().get($id)) #end #if ($error)$textutils.htmlEncode($error)
#end #else #normalHeader ($action $id $name $required) #end #end #end #macro(controlHeader $action $id $name $required $noHeader $auiparams) #if ($!displayParameters.get('theme') && $!displayParameters.get('theme') == 'aui') ## hack to ensure all fields can use the new aui stuff if required. #customControlHeader($action $id $name $required $!displayParameters $auiparams) #else #if ($!auiparams.controlHeaderClass) #set ($AUIfieldgroupClass = " ${auiparams.controlHeaderClass}") #else #set ($AUIfieldgroupClass = "") #end #if ($noHeader) #if ($action.getErrors().get($id)) #set ($error= $action.getErrors().get($id)) #end #if ($error) $textutils.htmlEncode($error)
#else #end #else #normalHeader ($action $id $name $required) #end #end #end #macro(customControlFooterDescription $description) #if ($description && $description != '')
$description
#end #end #macro(customControlFooter $action $id $description $displayParameters $auiparams) #if ($!displayParameters.get('theme') && $!displayParameters.get('theme') == 'aui') #if ($!displayParameters.iconText) #if ($!displayParameters.iconURI) $!{displayParameters.iconText} #else $!{displayParameters.iconText} #end #end #if ($action.getErrors().get($id))
$textutils.htmlEncode($action.getErrors().get($id))
#end #if ($description && $description != '')
$description
#end
#else #if ($!displayParameters.get('noHeader')) #singleFooter ($action $description) #else #normalFooter ($action $description) #end #end #end #macro(controlFooter $action $description $noHeader) #if ($!field && $!field.id) #customControlFooter($action $field.id $description $!displayParameters $auiparams) #elseif($!customField && $!customField.id) #customControlFooter($action $customField.id $description $!displayParameters $auiparams) #else #customControlFooter($action '' $description $!displayParameters $auiparams) #end #end ## ---------------------------------------- #macro(AUIformFieldsetHeader $name $required $displayParameters $auiparams) #if ($!name && $!name != '') $textutils.htmlEncode($name)#if($required) $soyRenderer.render("jira.webresources:icon-required","JIRA.Templates.Form.IconRequired.render", {}) #end #end #end #macro(AUIformFieldsetFooter $action $id $description $displayParameters $auiparams) #if ($action.getErrors().get($id)) #set ($error = $action.getErrors().get($id)) #end #if ($error)
$textutils.htmlEncode($error)
#end #if ($description && $description != '')
$description
#end #if ($!auiparams.fieldsetId) #set ($fieldsetId = "#${auiparams.fieldsetId}") #else #set($fieldsetId = '') #end #if ($!auiparams.fieldsetClass) #set ($fieldsetClass = " .${auiparams.fieldsetClass}") #else #set($fieldsetClass = '') #end #set ($fieldsetHtmlComment = "") #if ($!auiparams.fieldsetClass || $!auiparams.fieldsetId) $!{fieldsetHtmlComment}#end #end ## ---------------------------------------- #macro(hiddenControlHeader $id) #end #macro(hiddenControlFooter) #end ## ---------------------------------------- #macro(inlineControlHeader $action $id) #if ($action.getErrors().get($id)) #set ($formError= $action.getErrors().get($id)) #end #if ($formError)
$formError
#else
#end #end #macro(inlineControlFooter)
#end ## ---------------------------------------- ## Complex controls ## ---------------------------------------- #macro(userPicker $action $fieldName $fieldValue $multiselect $imageName $style $canPerformAjaxSearch $ajaxLimit $useFrotherControl $fieldLabel) #userPickerWithFieldConfig($action $fieldName $fieldValue $null $null $multiselect $imageName $style $canPerformAjaxSearch $ajaxLimit $useFrotherControl $fieldLabel) #end #macro(userPickerWithFieldConfig $action $fieldId $fieldValue $fieldConfigId $projectIdList $multiselect $imageName $style $canPerformAjaxSearch $ajaxLimit $useFrotherControl $fieldLabel)
#if ($multiselect) #if ($useFrotherControl) #else #set ($userString = "") #if ($fieldValue) #foreach ($selectedValue in $fieldValue) #if ($userString == "") #set ($userString=$selectedValue) #else #set ($userString="${userString}, $selectedValue") #end #end #end #end #else #if ($useFrotherControl) #else #end #end #if ($multiselect) #set ($imgTitle = $action.getText("user.picker.select.users")) #else #set ($imgTitle = $action.getText("user.picker.select.user")) #end #if($fieldLabel) #set ($imgTitle = $action.getText("user.picker.select.user.aria.label", $imgTitle, $fieldLabel)) #end $soyRenderer.render('jira.webresources:field-templates', 'JIRA.Templates.Fields.Pickers.User.popupTrigger', { "hasPermission": $action.hasGlobalPermission("USER_PICKER"), "imgTitle": "$imgTitle", "noPermissionTitle": "$i18n.getText('user.picker.no.permission')" }) #if ($canPerformAjaxSearch)
${i18n.getText('user.picker.ajax.desc')}
#end
#end #macro(newGroupPicker $action $fieldId $fieldName $fieldValue $multiselect $imageName $style) #if ($multiselect) #else #end #if ($multiselect) #set($imgTitle = $action.getText('grouppicker.select.groups')) #else #set($imgTitle = $action.getText('grouppicker.select.group')) #end $soyRenderer.render('jira.webresources:field-templates', 'JIRA.Templates.Fields.Pickers.User.popupTrigger', { "class": "grouppicker-trigger", "href": "$req.contextPath/secure/popups/GroupPickerBrowser.jspa?multiSelect=${multiselect}&element=${fieldId}", "fieldId": "${fieldId}-trigger", "hasPermission": $action.hasGlobalPermission("USER_PICKER"), "imgTitle": "$imgTitle", "noPermissionTitle": "$action.getText('grouppicker.nopermissions')" }) #end #macro(groupPicker $action $fieldName $fieldValue $multiselect $imageName $style) #newGroupPicker($action $fieldName $fieldName $fieldValue $multiselect $imageName $style) #end #macro (genericMultiPicker $canPick $name $formname $value $cols $rows $id $actionToOpen $iconTooltip $multiselect $windowName $canPerformAjaxSearch $ajaxLimit)
#if ($multiselect) #else #end #if ($canPick) #else #end #if ($canPerformAjaxSearch)
${i18n.getText('user.picker.ajax.desc')}
#end
#end #macro(displayConstantIcon $constant) #if ($constant.getIconUrl()) #if ($constant.getIconUrl().startsWith("http://") || $constant.getIconUrl().startsWith("https://")) $textutils.htmlEncode($constant.getNameTranslation(), false) #else $textutils.htmlEncode($constant.getNameTranslation(), false) #end #end #end #macro(getNormalizedUrl $iconurl) #if ($iconurl.startsWith('http://') || $iconurl.startsWith('https://'))$iconurl#else${baseurl}${iconurl}#end #end #macro(getNormalizedUrlXmlEscaped $iconurl) #if ($iconurl.startsWith('http://') || $iconurl.startsWith('https://'))$xmlutils.escape($iconurl)#else$xmlutils.escape($baseurl)$xmlutils.escape($iconurl)#end #end #macro(displayIssueKey $issue) $issue.getKey() #end #macro(displayIssueSummary $issue) $textutils.htmlEncode($issue.getSummary()) #end #macro(displayTypeNoLink $issue) #displayConstantIcon($issue.getIssueTypeObject()) #end ## $issue is an object of type Issue #macro(displayType $issue) #displayTypeNoLink($issue) #end ## $issue is an object of type Issue #macro(displayPriorityNoLink $issue) #displayConstantIcon($issue.getPriorityObject()) #end ## $issue is an object of type Issue #macro(issueLineItem $issue) #displayType($issue) $issue.getKey() #if ($fieldVisibility && $fieldVisibility.isFieldHidden("resolution", $issue) == false) #if ($issue.getResolutionObject()) $textutils.htmlEncode($!issue.getResolutionObject().getNameTranslation().toUpperCase(), false) #else $i18n.getText("common.status.unresolved") #end #end #if ($issue.isSubTask()) #set ($parentIssue = $issue.getParentObject()) #if ($permissionCheck && $permissionCheck.isIssueVisible($parentIssue) == true) $parentIssue.getKey()
#else $parentIssue.getKey()
#end #end $textutils.htmlEncode($issue.getSummary()) #if ($fieldVisibility && $fieldVisibility.isFieldHidden("priority", $issue) == false) #if ($issue.getPriorityObject()) #displayConstantIcon($issue.getPriorityObject()) #end #end #set ($simpleStatus = $issue.getStatusObject().getSimpleStatus()) #if ("$!isIssueStatusCompact" == "") #set ($isIssueStatusCompact = true) #end #parse("/static/util/issue/status.vm") #end #macro(versionReleaseDate $versionManager $version) #if ($version.releaseDate) #if ($version.isArchived() == true) $dateTimes.formatDMY($version.releaseDate) #elseif ($versionManager.isVersionOverDue($version) == true && $version.isReleased() == false) $dateTimes.formatDMY($version.releaseDate) #else $dateTimes.formatDMY($version.releaseDate) #end #end #end #macro(percentageGraph $graphModel) #if (!$graphModel || $graphModel.rows.size() == 0) $i18n.getText("common.concepts.noissues"). #else #foreach ($row in $graphModel.rows) #if ($graphModel.getPercentage($row) != 0) #if ($row.statuses) #else #end #end #end #end #end #macro(percentageGraphDiv $graphModel) #if (!$graphModel || $graphModel.rows.size() == 0) $i18n.getText('common.concepts.noissues') #else
#foreach ($row in $graphModel.rows) #if ($graphModel.getPercentage($row) != 0) #if ($row.statuses) $row.description - $graphModel.getPercentage($row)% #else
$row.description - $graphModel.getPercentage($row)%
#end #end #end
#end #end #macro (histogram $percentage)
#if ($percentage.intValue() != 0) #set ($newPercentage = 5) #if ($percentage.intValue() > 5) #set ($newPercentage = $percentage.intValue()) #end
$percentage% #else
  #end
#end ## renders statistic value links based on the given url #macro (statHeading $type $value $customFieldManager $urlPrefix) #if ($type == 'project') $textutils.htmlEncode($value.getString('name')) #elseif ($type == 'assignees') #if ($value) $textutils.htmlEncode($value.displayName) #else $i18n.getText("gadget.filterstats.assignee.unassigned") #end #elseif ($type == 'reporter') #if ($value) $textutils.htmlEncode($value.displayName) #else $i18n.getText("gadget.filterstats.reporter.unknown") #end #elseif ($type == 'resolution') #if ($value) $textutils.htmlEncode($value.getNameTranslation(), false) #else $i18n.getText("common.resolution.unresolved") #end #elseif ($type == 'statuses') #set ($simpleStatus = $value.getSimpleStatus()) #set ($isIssueStatusCompact = false) #set ($isIssueStatusSubtle = true) #parse("/static/util/issue/status.vm") #elseif ($type == 'issuetype') #if ($value) #displayConstantIcon($value) $textutils.htmlEncode($value.getNameTranslation(), false) #else $i18n.getText("common.words.none") #end #elseif ($type == 'priorities') #if ($value) #displayConstantIcon($value) $textutils.htmlEncode($value.getNameTranslation(), false) #else $i18n.getText("gadget.filterstats.priority.nopriority") #end #elseif ($type == 'components') #if ($value) $textutils.htmlEncode($value.getString('name')) #else $i18n.getText("gadget.filterstats.component.nocomponent") #end #elseif ($type == 'version' || $type == 'allVersion') #if ($value) #versionStatus ($value 16) #versionName ($value) #else $i18n.getText("gadget.filterstats.raisedin.unscheduled") #end #elseif ($type == 'fixfor' || $type == 'allFixfor') #if ($value) #versionStatus ($value 16) #versionName ($value) #else $i18n.getText("gadget.filterstats.fixfor.unscheduled") #end #elseif ($type == 'labels') #if ($value) $i18n.getText("common.concepts.label"): $value #end #else ## must be a custom field #if ($value) #if ($customFieldManager.getCustomFieldObject($type)) $customFieldManager.getCustomFieldObject($type).getCustomFieldSearcher().getDescriptor().getStatHtml($customFieldManager.getCustomFieldObject($type), $value, $urlPrefix) #else $type: $value #end #else $i18n.getText("common.words.none") #end #end #end ## A macro to display searcher headers #macro (searcherHeaderNoField $fieldId $fieldName $spanClass) ## @todo This doesn't quite work for all fields. Screws up for multiple valued fields such as dates & users. Need to delegate to the IssueSearcher object #if ($fieldValuesHolder && $displayParameters.currentFieldValuesHolder && !$displayParameters.currentFieldValuesHolder.containsKey($fieldId) && $fieldValuesHolder.containsKey($fieldId))
#elseif ($fieldValuesHolder && $displayParameters.dbFieldValuesHolder && !$displayParameters.dbFieldValuesHolder.containsKey($fieldId) && $fieldValuesHolder.containsKey($fieldId))
#elseif ($fieldValuesHolder && $displayParameters.dbFieldValuesHolder && $displayParameters.dbFieldValuesHolder.containsKey($fieldId) && $displayParameters.dbFieldValuesHolder.get($fieldId) != $fieldValuesHolder.get($fieldId))
#else
#end #if($spanClass) #else #end #end #macro (searcherHeader $field) #searcherHeaderNoField ($field.id $field.name) #end #macro (searcherFooter $field)
#end #macro(searcherEditHeader $id $name) #customControlHeader ($action "searcher-$id" $name false $!displayParameters $!auiparams) #end #macro(searcherEditFooter $id $description) #customControlFooter($action $id $description $!displayParameters $!auiparams) #end #macro(searchContextDescriptionTitle $searcherNameKey $value $contextProjectNames $contextIssueTypeNames) title="$i18n.getText("jira.search.context.invalid.generic", $i18n.getText($searcherNameKey), $textutils.htmlEncode($value))" #end #macro (searchContextDescriptionTitleGeneral $searcherNameKey $value $contextProjectNames $contextIssueTypeNames) #if ($contextProjectNames.length() == 0 && $contextIssueTypeNames.length() == 0) title="$i18n.getText("jira.search.context.general", $i18n.getText($searcherNameKey), $textutils.htmlEncode($value))" #else #searchContextDescriptionTitle($searcherNameKey $value $contextProjectNames $contextIssueTypeNames) #end #end #macro(searchContextDescriptionTitleProjectOnly $searcherNameKey $value $contextProjectNames) #if ($contextProjectNames.length() > 0) title="$i18n.getText("jira.search.context.invalid.project.only", $i18n.getText($searcherNameKey), $textutils.htmlEncode($value))" #end #end #macro (searchContextDescriptionTitleProjectOrGeneral $searcherNameKey $value $contextProjectNames) #if ($contextProjectNames.length() > 0) #searchContextDescriptionTitleProjectOnly($searcherNameKey $value $contextProjectNames) #else title="$i18n.getText("jira.search.context.general", $i18n.getText($searcherNameKey), $textutils.htmlEncode($value))" #end #end #macro (configureIndexing $ctxPath) $i18n.getText("gadget.common.indexing")
 
#if ($admin) $i18n.getText("gadget.common.indexing.configure", "", "") #else $i18n.getText("gadget.common.indexing.admin") #end #end ## This displays a list of issues #macro (displayRelatedIssues $issues) #if ($issues) #set ($size = $issues.size()) #foreach ($issue in $issues) #set ($showComma = ($velocityCount != $size)) #if ($displayParams && $displayParams.get('nolink') && !${displayParams.excel_view}) #if ($issue.getResolution()) $issue.getKey()#if($showComma),#end #else $issue.getKey()#if($showComma),#end #end #elseif($displayParams && ${displayParams.excel_view}) $issue.getKey()#if($showComma),#end #else #if ($issue.isRemote()) #if ($issue.getResolution()) $textutils.htmlEncode($issue.getKey())#if($showComma),#end #else $textutils.htmlEncode($issue.getKey())#if($showComma),#end #end #else #if ($issue.getResolution()) $textutils.htmlEncode($issue.getKey())#if($showComma),#end #else $textutils.htmlEncode($issue.getKey())#if($showComma),#end #end #end #end #end #else   #end #end #macro (comma $list) #if ($velocityCount == ($list.size() - 1)) $i18n.getText('common.words.and') #elseif ($velocityCount < $list.size()), #end #end #macro (commaor $list) #if ($velocityCount == ($list.size() - 1)) $i18n.getText('common.words.or') #elseif ($velocityCount < $list.size()), #end #end #macro (commaonly $list) #if ($velocityCount < $list.size()), #end #end #macro (datePopupOptions $dateTimeFormat $dateFormat $timeFormat $dateTimePicker $currentMillis $currentCalendar) #datePopup ($null, $null, $dateTimeFormat $dateFormat $timeFormat $dateTimePicker $currentMillis $currentCalendar) #end #macro (datePopup $inputField $inputButton $dateTimeFormat $dateFormat $timeFormat $dateTimePicker $currentMillis $currentCalendar) $calendarIncluder.includeForLocale($i18n.getLocale()) #set ($firstDay = $currentCalendar.firstDayOfWeek - 1) #end #macro (jiraform $title $description $cancelLinkURL $cancelLinkText) #if($cancelLinkURL) #end #if ($action.hasAnyErrors()) #end

$title

$description

$i18n.getText('common.words.errors')

    #foreach ($error in $action.getErrorMessages())
  • $textutils.htmlEncode(${error})
  • #end #foreach ($error in $action.errors)
  • $textutils.htmlEncode(${error})
  • #end
#end #* @vtlvariable name="comment" type="com.atlassian.jira.issue.comments.Comment" *# #* @vtlvariable name="commentAction" type="com.atlassian.jira.issue.tabpanels.CommentAction" *# ## This does not belong here but is here to fix JRA-12066 till we move to velocity 1.5 #macro (actionDetailsBody $collapse $commentAction $i18n $suffix $shouldReturnPlainText $commentUrl) #set ($comment = $commentAction.comment) #if ($comment.authorApplicationUser) #set($authorKey = $comment.authorApplicationUser.key ) #end #set ($author = $comment.authorApplicationUser) #set ($updateAuthor = $comment.updateAuthorApplicationUser) #if ($comment.groupLevel) #set ($level = $textutils.htmlEncode($comment.groupLevel)) #elseif ($comment.roleLevel) #set ($level = $textutils.htmlEncode($comment.roleLevel.name)) #end #if(!$comment.created.equals($comment.updated)) #set ($formattedUpdateDate = "$action.formatDisplayHtml($comment.updated)") #if ($updateAuthor) #set ($quote = '"') #if ($comment.updateAuthorFullName) #set ($updateInfo = "$textutils.htmlEncode($comment.updateAuthorFullName) - $formattedUpdateDate") #else #set ($updateInfo = "$comment.updateAuthorApplicationUser.name - $formattedUpdateDate") #end #else #set ($updateInfo = "$i18n.getText('common.words.anonymous') - $formattedUpdateDate") #end #end #set ($prettyCreateDate = "$action.formatDisplayHtml(${comment.created})") #set ($iso8601CreateDate = "$action.formatIso8601Html(${comment.created})") #set ($createdDate = " - ") #if ($level) #set ($visibilityLevel ="$i18n.getText('viewissue.comment.visibleby') $level") #end #if (!$shouldReturnPlainText) #if ($commentAction.pinned) #set ($prettyPinnedDate = "$action.formatDisplayHtml(${commentAction.pinnedAt})") #set ($iso8601PinnedDate = "$action.formatIso8601Html(${commentAction.pinnedAt})") #set ($tooltipText = $i18n.getText('issue.tabpanels.commment.pinned.tooltip', $prettyPinnedDate)) #set ($pinicon = "") #if ($collapse) $pinicon #else #set ($pinnedDate ="") #if (!$shouldReturnPlainText)
#set ($pinnedBy = $i18n.getText( 'issue.tabpanels.comment.pinnedby',$userformat.formatUserkey($commentAction.pinnedBy, 'profileLinkActionHeader', 'commentauthor_${commentAction.comment.id}_pinnedby')))

$pinicon $pinnedBy

#else #set ($pinnedBy = $i18n.getText( 'issue.tabpanels.comment.pinnedby',$userformat.formatUserkey($commentAction.pinnedBy, 'profileNameActionHeader', 'commentauthor_${commentAction.comment.id}_pinnedby'))) $pinnedBy #end #end #end $i18n.getText( 'issue.tabpanels.comment.action.header', $userformat.formatUserkey($authorKey, 'profileLinkActionHeader', "commentauthor_${comment.id}_$!{suffix}"), $createdDate) #if($visibilityLevel) - $visibilityLevel #end #if($updateInfo) - $i18n.getText( 'common.concepts.edited') #end #if($pinpart) $pinpart #end #else #if ($commentAction.pinned) #set ($prettyPinnedDate = "$action.formatDisplayHtml(${commentAction.pinnedAt})") #set ($iso8601PinnedDate = "$action.formatIso8601Html(${commentAction.pinnedAt})") #set ($tooltipText = $i18n.getText('issue.tabpanels.commment.pinned.tooltip', $prettyPinnedDate)) #set ($pinicon = "") #if ($collapse) $pinicon #else #set ($pinnedDate ="") #if (!$shouldReturnPlainText)
#set ($pinnedBy = $i18n.getText( 'issue.tabpanels.comment.pinnedby',$userformat.formatUserkey($commentAction.pinnedBy, 'profileLinkActionHeader', 'commentauthor_${commentAction.comment.id}_pinnedby')))

$pinicon $pinnedBy

#else #set ($pinnedBy = $i18n.getText( 'issue.tabpanels.comment.pinnedby',$userformat.formatUserkey($commentAction.pinnedBy, 'profileNameActionHeader', 'commentauthor_${commentAction.comment.id}_pinnedby'))) $pinnedBy #end #end #end $i18n.getText( 'issue.tabpanels.comment.action.header', $userformat.formatUserkey($authorKey, 'profileNameActionHeader', "commentinfoauthor_${comment.id}_$!{suffix}"), "- $prettyCreateDate")#if($visibilityLevel) - $i18n.getText( 'viewissue.comment.visibleby') $level#end#if($updateInfo), $i18n.getText( 'viewissue.comments.edited.by', $updateInfo)#end #if($pinpart) $pinpart #end #end #end ## Displays header #macro(pagerHeader $i18n $issueCount $totalCount $navigatorURL) #if($totalIssuesCount > 0) #if($totalCount > $issueCount) $i18n.getText("browseproject.unresolvedissues.more", "$issueCount", "", "$totalCount", "") #else $i18n.getText("browseproject.unresolvedissues", "", "$totalCount", "") #end #end #end ## Helper to print the More issues footer. #macro(pagerFooterIfNeeded $i18n $issueCount $totalCount $navigatorURL) #if($totalCount > $issueCount)   $i18n.getText('browseproject.openissues.more.footer', "$issueCount", "$totalCount", "", '') #end #end #macro(userProfileLinks $category $webInterfaceManager $location $helper) #set ($displayableLinks = $webInterfaceManager.getDisplayableItems("$location/$category", $user, $helper)) #if (!$displayableLinks.isEmpty())
    #foreach ($item in $displayableLinks)
  • #if ($item.params.get("actionName")) #set ($linkActionName = $item.params.get("actionName")) #else #set ($linkActionName = $item.link.getDisplayableUrl($user, $helper)) #end #if ($item.params.get("showLinkWhenNotMe")) #set ($showLinkNormal = $user.equals($layout.profileUser)) #else #set ($showLinkNormal = true) #end #if ($layout.getActionName() && $linkActionName.indexOf($layout.getActionName()) != -1 && $showLinkNormal) $item.label.getDisplayableLabel($user, $helper) #else $item.label.getDisplayableLabel($user, $helper) #end
  • #end
#end #end #macro(safeMenuAccessKey $i18n $accessKeyHelper $accessKeyI18nKey $layoutModifierKey) #set ($i18nKey = "menu.accesskey.$accessKeyI18nKey") #if ($i18n.isKeyDefined($i18nKey) && $accessKeyHelper.isAccessKeySafe($i18n.getText($i18nKey))) (${layoutModifierKey}+${i18n.getText($i18nKey)})#end #end #** * The #if ($issue && $issue.id) #end
${i18n.getText('label.edit.start.typing')}
#end #** * The lozenges for the labels system and custom fields (with an optional edit link). Also see labelsLozenges.jsp * which returns the same HTML for the in-line updating of labels fields. * * @param i18n i18n helper * @param loggedInUser the user issuing the server request * @param labelUtil labels helper * @param issueId the ID of the issue; may be null for bulk edit preview * @param fieldId the labels field name (e.g., 'labels' or 'customfield_10000') * @param customFieldIdAsLong custom field (numeric) ID or false if it is the labels system field * @param labels the labels to render * @param canEdit true if the edit labels link should be rendered, false otherwise; note that the issue navigator * currently doesn't allow editing, so if this changes, then the DOM IDs rendered here need to be modified. * @param readOnly true if the labels are read only, false otherwise * @param baseurl the JIRA instance's base URL *# #macro(labelsLozenges $i18n $loggedInUser $labelUtil $issueId $fieldId $customFieldIdAsLong $labels $canEdit $noLink $readOnly $baseUrl $prefix)
#if ($labels && $labels.size() > 0) #else ${i18n.getText('common.words.none')} #if ($canEdit && $readOnly == false && $applicationProperties.getOption('jira.issue.inline.edit.disabled')) ## Edit links don't appear in issue tables, so id's of the form edit-labels-(labels|customfield_10000) are good enough. ${i18n.getText('label.edit.title')} #end #end
#end #macro(avatarPicker $defaultId $avatarOwnerId $avatarOwnerKey $title $id $src $width $height) #if ($avatarOwnerKey)#end $title #end #** * gets avatar url for given user *# #macro (getAvatarURL $displayUser)$avatarServiceHelper.renderURL($authcontext.getLoggedInUser(), $displayUser, $avatarSize)#end #** * Renders a group #end #** * Renders a user #end #** * These hidden inputs sumbit back to the server all the previously selected values, so we know what changed *# #macro(prevValues $userField $values) #if ($values && !$values.empty) #foreach ($value in $values) #if ($value.isGroup()) #elseif ($value.isUser()) #end #end #end #end #** * Renders user suggestions. This optgroup represents what user are displayed when the control is initialized. *# #macro(userSuggestionsGroup $hasPermissionToPickUsers $suggestedUsers $hasEmpty $emptyValueKey $usePrefix $allowCurrentUser $hasCurrentUser) #if ($emptyValueKey || $hasCurrentUser) #if ($allowCurrentUser && $authcontext.isLoggedInUser()) #set ($user = $authcontext.getLoggedInUser()) #end #if ($emptyValueKey) #end #end #if ($hasPermissionToPickUsers && $suggestedUsers && !$suggestedUsers.empty) #foreach ($user in $suggestedUsers) #renderUser($user false, false, $usePrefix) #end #end #end #** * Renders group suggestions. This optgroup represents what groups are displayed when the control is initialized. *# #macro (groupSuggestionsGroup $hasPermissionToPickUsers $suggestedGroups $usePrefix) #if ($hasPermissionToPickUsers && $suggestedGroups && !$suggestedGroups.empty) #foreach ($group in $suggestedGroups) #renderGroup($group false, false $usePrefix) #end #end #end #** * Renders selected suggestions. This optgroup represents what suggestions are currently selected. *# #macro(selectedGroup $values $usePrefix) #if ($values && !$values.empty) #foreach ($value in $values) #if ($value.isGroup()) #renderGroup($value.getObject() true false $usePrefix) #elseif ($value.isUser()) #renderUser($value.getObject() true false $usePrefix) #end #end #end #end #** * Renders users ONLY searcher *# #macro(userSearcher $id $name $values $hasPermissionToPickUsers $suggestedUsers $placeholderText $hasEmpty $emptyValueKey $description) $!{auiparams.put("controlHeaderClass", "aui-field-userlist")} #searcherEditHeader (${id} ${name}) #prevValues($id $values) #searcherEditFooter (${id} ${description}) $!{auiparams.clear()} #end #** * Renders group ONLY searcher *# #macro(groupSearcher $id $name $values $hasPermissionToPickUsers $suggestedGroups $placeholderText $hasEmpty $emptyValueKey $description) $!{auiparams.put("controlHeaderClass", "aui-field-userlist")} #searcherEditHeader (${id} ${name}) #prevValues($id $values) #searcherEditFooter (${id} ${description}) $!{auiparams.clear()} #end #** * Renders users and groups searcher *# #macro(userGroupSearcher $id $name $fieldName $values $hasPermissionToPickUsers $suggestedUsers $suggestedGroups $hasEmpty $emptyValueKey $hasCurrentUser $description) #userGroupSearcherWithFieldValues (${id} ${name} ${fieldName} ${values} $null ${hasPermissionToPickUsers} ${suggestedUsers} ${suggestedGroups} ${hasEmpty} ${emptyValueKey} ${hasCurrentUser} ${description}) #end #macro(userGroupSearcherWithFieldValues $id $name $fieldName $fieldValuesMap $values $hasPermissionToPickUsers $suggestedUsers $suggestedGroups $hasEmpty $emptyValueKey $hasCurrentUser $description) $!{auiparams.put("controlHeaderClass", "aui-field-userlist")} #searcherEditHeader (${id} ${name}) #prevValues($userField $values) #searcherEditFooter (${userSelect} ${description}) $!{auiparams.clear()} #end