Change all foreach loops in Soy templates to use the for loop syntax

This also updates to a newer version of Closure Rules and fixes a protobuf dep
compile issue.

Full description of the change:

Soy supports 2 kinds of loops:
* foreach- for iterating over items in a collection, e.g.
  {foreach $item in $list}...{/foreach}
* for - for indexed iteration, e.g. {for $i in range(0, 10)}...{/for}

The reason Soy has two different loops is an accident of history; Soy didn’t use
to have a proper grammar for expressions and so the alternate ‘for...range’
syntax was added to make it possible to write indexed loops.  As the grammar has
improved having the two syntaxes is no longer necessary and so we are
eliminating one of them.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=182843207
This commit is contained in:
mcilwain 2018-01-22 15:07:04 -08:00 committed by jianglai
parent 81dc2bbbc3
commit b5fb62c984
23 changed files with 105 additions and 106 deletions

View file

@ -3,11 +3,11 @@ workspace(name = "domain_registry")
# https://github.com/bazelbuild/rules_closure/releases/tag/0.4.2
http_archive(
name = "io_bazel_rules_closure",
strip_prefix = "rules_closure-0.4.2",
sha256 = "25f5399f18d8bf9ce435f85c6bbf671ec4820bc4396b3022cc5dc4bc66303609",
strip_prefix = "rules_closure-08039ba8ca59f64248bb3b6ae016460fe9c9914f",
sha256 = "6691c58a2cd30a86776dd9bb34898b041e37136f2dc7e24cadaeaf599c95c657",
urls = [
"http://mirror.bazel.build/github.com/bazelbuild/rules_closure/archive/0.4.2.tar.gz",
"https://github.com/bazelbuild/rules_closure/archive/0.4.2.tar.gz",
"https://mirror.bazel.build/github.com/bazelbuild/rules_closure/archive/08039ba8ca59f64248bb3b6ae016460fe9c9914f.tar.gz",
"https://github.com/bazelbuild/rules_closure/archive/08039ba8ca59f64248bb3b6ae016460fe9c9914f.tar.gz", # 2018-01-16
],
)
@ -19,7 +19,6 @@ closure_repositories(
omit_com_ibm_icu_icu4j = True,
omit_javax_inject = True,
omit_org_json = True,
omit_com_google_template_soy = True,
)
load("//java/google/registry:repositories.bzl", "domain_registry_repositories")

View file

@ -866,7 +866,7 @@ def com_google_appengine_tools_appengine_mapreduce():
"@com_google_appengine_tools_appengine_pipeline",
"@com_googlecode_charts4j",
"@org_json",
"@com_google_protobuf_java",
"@com_google_protobuf_java//:protobuf_java",
"@com_google_guava",
"@joda_time",
"@it_unimi_dsi_fastutil",

View file

@ -48,9 +48,9 @@
{/if}
<contact:addr>
{if $street}
{foreach $s in $street}
{for $s in $street}
<contact:street>{$s}</contact:street>
{/foreach}
{/for}
{/if}
{if $city}
<contact:city>{$city}</contact:city>

View file

@ -39,15 +39,15 @@
<domain:period unit="y">{$period}</domain:period>
{if isNonnull($nameservers) and length($nameservers) > 0}
<domain:ns>
{foreach $nameserver in $nameservers}
{for $nameserver in $nameservers}
<domain:hostObj>{$nameserver}</domain:hostObj>
{/foreach}
{/for}
</domain:ns>
{/if}
<domain:registrant>{$registrant}</domain:registrant>
{foreach $type in keys($contacts)}
{for $type in keys($contacts)}
<domain:contact type="{$type}">{$contacts[$type]}</domain:contact>
{/foreach}
{/for}
<domain:authInfo>
<domain:pw>{$authInfo}</domain:pw>
</domain:authInfo>
@ -70,14 +70,14 @@
</allocate:create>
{if isNonnull($dsRecords) and length($dsRecords) > 0}
<secDNS:create xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
{foreach $dsRecord in $dsRecords}
{for $dsRecord in $dsRecords}
<secDNS:dsData>
<secDNS:keyTag>{$dsRecord['keyTag']}</secDNS:keyTag>
<secDNS:alg>{$dsRecord['algorithm']}</secDNS:alg>
<secDNS:digestType>{$dsRecord['digestType']}</secDNS:digestType>
<secDNS:digest>{$dsRecord['digest']}</secDNS:digest>
</secDNS:dsData>
{/foreach}
{/for}
</secDNS:create>
{/if}
</extension>

View file

@ -24,9 +24,9 @@
<command>
<check>
<domain:check xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
{foreach $d in $domainNames}
{for $d in $domainNames}
<domain:name>{$d}</domain:name>
{/foreach}
{/for}
</domain:check>
</check>
<clTRID>RegistryTool</clTRID>

View file

@ -24,9 +24,9 @@
<command>
<check>
<domain:check xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
{foreach $d in $domainNames}
{for $d in $domainNames}
<domain:name>{$d}</domain:name>
{/foreach}
{/for}
</domain:check>
</check>
<extension>

View file

@ -24,20 +24,20 @@
<command>
<check>
<domain:check xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
{foreach $d in $domainNames}
{for $d in $domainNames}
<domain:name>{$d}</domain:name>
{/foreach}
{/for}
</domain:check>
</check>
<extension>
<fee:check xmlns:fee="urn:ietf:params:xml:ns:fee-0.6">
{foreach $d in $domainNames}
{for $d in $domainNames}
<fee:domain>
<fee:name>{$d}</fee:name>
<fee:command>create</fee:command>
<fee:period unit="y">1</fee:period>
</fee:domain>
{/foreach}
{/for}
</fee:check>
</extension>
<clTRID>RegistryTool</clTRID>

View file

@ -36,18 +36,18 @@
{/if}
{if length($nameservers) > 0}
<domain:ns>
{foreach $s in $nameservers}
{for $s in $nameservers}
<domain:hostObj>{$s}</domain:hostObj>
{/foreach}
{/for}
</domain:ns>
{/if}
<domain:registrant>{$registrant}</domain:registrant>
{foreach $admin in $admins}
{for $admin in $admins}
<domain:contact type="admin">{$admin}</domain:contact>
{/foreach}
{foreach $tech in $techs}
{/for}
{for $tech in $techs}
<domain:contact type="tech">{$tech}</domain:contact>
{/foreach}
{/for}
<domain:authInfo>
<domain:pw>{$password}</domain:pw>
</domain:authInfo>

View file

@ -42,40 +42,40 @@
<domain:add>
{if length($addNameservers) > 0}
<domain:ns>
{foreach $s in $addNameservers}
{for $s in $addNameservers}
<domain:hostObj>{$s}</domain:hostObj>
{/foreach}
{/for}
</domain:ns>
{/if}
{foreach $admin in $addAdmins}
{for $admin in $addAdmins}
<domain:contact type="admin">{$admin}</domain:contact>
{/foreach}
{foreach $tech in $addTechs}
{/for}
{for $tech in $addTechs}
<domain:contact type="tech">{$tech}</domain:contact>
{/foreach}
{foreach $status in $addStatuses}
{/for}
{for $status in $addStatuses}
<domain:status s="{$status}"/>
{/foreach}
{/for}
</domain:add>
{/if}
{if $remove}
<domain:rem>
{if length($removeNameservers) > 0}
<domain:ns>
{foreach $s in $removeNameservers}
{for $s in $removeNameservers}
<domain:hostObj>{$s}</domain:hostObj>
{/foreach}
{/for}
</domain:ns>
{/if}
{foreach $admin in $removeAdmins}
{for $admin in $removeAdmins}
<domain:contact type="admin">{$admin}</domain:contact>
{/foreach}
{foreach $tech in $removeTechs}
{/for}
{for $tech in $removeTechs}
<domain:contact type="tech">{$tech}</domain:contact>
{/foreach}
{foreach $status in $removeStatuses}
{/for}
{for $status in $removeStatuses}
<domain:status s="{$status}"/>
{/foreach}
{/for}
</domain:rem>
{/if}
{if $change}

View file

@ -28,14 +28,14 @@
<host:create xmlns:host="urn:ietf:params:xml:ns:host-1.0">
<host:name>{$hostname}</host:name>
{if $ipv4addresses}
{foreach $ipv4 in $ipv4addresses}
{for $ipv4 in $ipv4addresses}
<host:addr ip="v4">{$ipv4}</host:addr>
{/foreach}
{/for}
{/if}
{if $ipv6addresses}
{foreach $ipv6 in $ipv6addresses}
{for $ipv6 in $ipv6addresses}
<host:addr ip="v6">{$ipv6}</host:addr>
{/foreach}
{/for}
{/if}
</host:create>
</create>

View file

@ -28,11 +28,11 @@
<host:update
xmlns:host="urn:ietf:params:xml:ns:host-1.0">
<host:name>{$name}</host:name>
{foreach $ip in $ipAddresses}
{for $ip in $ipAddresses}
<host:rem>
<host:addr ip="{$ip['type']}">{$ip['address']}</host:addr>
</host:rem>
{/foreach}
{/for}
</host:update>
</update>
<extension>

View file

@ -34,26 +34,26 @@
<domain:add>
{if length($hostsToAdd) > 0}
<domain:ns>
{foreach $ha in $hostsToAdd}
{for $ha in $hostsToAdd}
<domain:hostObj>{$ha}</domain:hostObj>
{/foreach}
{/for}
</domain:ns>
{/if}
{foreach $la in $locksToApply}
{for $la in $locksToApply}
<domain:status s="{$la}" />
{/foreach}
{/for}
</domain:add>
<domain:rem>
{if length($hostsToRemove) > 0}
<domain:ns>
{foreach $hr in $hostsToRemove}
{for $hr in $hostsToRemove}
<domain:hostObj>{$hr}</domain:hostObj>
{/foreach}
{/for}
</domain:ns>
{/if}
{foreach $lr in $locksToRemove}
{for $lr in $locksToRemove}
<domain:status s="{$lr}" />
{/foreach}
{/for}
</domain:rem>
</domain:update>
</update>
@ -64,14 +64,14 @@
</secDNS:rem>
{if length($newDsData) > 0}
<secDNS:add>
{foreach $ds in $newDsData}
{for $ds in $newDsData}
<secDNS:dsData>
<secDNS:keyTag>{$ds.keyTag}</secDNS:keyTag>
<secDNS:alg>{$ds.alg}</secDNS:alg>
<secDNS:digestType>{$ds.digestType}</secDNS:digestType>
<secDNS:digest>{$ds.digest}</secDNS:digest>
</secDNS:dsData>
{/foreach}
{/for}
</secDNS:add>
{/if}
</secDNS:update>

View file

@ -31,14 +31,14 @@
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>{$domainName}</domain:name>
<domain:add>
{foreach $a in $locksToApply}
{for $a in $locksToApply}
<domain:status s="{$a}" lang="en"></domain:status>
{/foreach}
{/for}
</domain:add>
<domain:rem>
{foreach $r in $locksToRemove}
{for $r in $locksToRemove}
<domain:status s="{$r}" lang="en"></domain:status>
{/foreach}
{/for}
</domain:rem>
</domain:update>
</update>

View file

@ -244,11 +244,11 @@
name="{$name}"
class="{css('kd-button')} {css('reg-select')}"
{if $readonly}disabled{/if}>
{foreach $option in $options}
{for $option in $options}
<option value="{$option}" {if $selected == $option}selected{/if}>
{$option}
</option>
{/foreach}
{/for}
</select>
</td>
</tr>
@ -263,12 +263,12 @@
{template .inputRadioWithValue}
<tr>
<td colspan="2">
{foreach $value in $values}
{for $value in $values}
<input type="radio"
name="{$name}"
value="{$value}"
{if $checkedValue == $value}checked{/if}>
{/foreach}
{/for}
</td>
</tr>
{/template}
@ -309,13 +309,13 @@
</span>
<span class="{css('kd-disclosureindicator')}"></span>
<ul class="{css('kd-menulist')}">
{foreach $item in $items}
{for $item in $items}
<li class="{css('kd-menulistitem')}
{if $item == $selected}
{sp}{css('selected')}
{/if}">
{$item}
{/foreach}
{/for}
</ul>
</div>
{/template}

View file

@ -89,13 +89,13 @@
<td colspan="2">
<div id="contact-postalInfo">
{if isNonnull($item['contact:postalInfo'])}
{foreach $pi in $item['contact:postalInfo']}
{for $pi in $item['contact:postalInfo']}
{call .postalInfo data="all"}
{param localized: index($pi) == 1 /}
{param item: $pi/}
{param namePrefix: 'contact:postalInfo[' + index($pi) + '].contact:' /}
{/call}
{/foreach}
{/for}
{else}
{call .postalInfo data="all"}
{param namePrefix: 'contact:postalInfo[0].contact:' /}

View file

@ -28,7 +28,7 @@
<create>
<contact:create xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>{$item['contact:id']}</contact:id>
{foreach $pi in $item['contact:postalInfo']}
{for $pi in $item['contact:postalInfo']}
<contact:postalInfo type="{if index($pi) == 0}int{else}loc{/if}">
<contact:name>{$pi['contact:name']}</contact:name>
<contact:org>{$pi['contact:org']}</contact:org>
@ -41,7 +41,7 @@
<contact:cc>{$addr['contact:cc']}</contact:cc>
</contact:addr>
</contact:postalInfo>
{/foreach}
{/for}
<contact:voice>{$item['contact:voice']}</contact:voice>
<contact:fax>{$item['contact:fax']}</contact:fax>
<contact:email>{$item['contact:email']}</contact:email>
@ -70,7 +70,7 @@
<contact:update xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>{$item['contact:id']}</contact:id>
<contact:chg>
{foreach $pi in $item['contact:postalInfo']}
{for $pi in $item['contact:postalInfo']}
<contact:postalInfo type="{if index($pi) == 0}int{else}loc{/if}">
<contact:name>{$pi['contact:name']}</contact:name>
<contact:org>{$pi['contact:org']}</contact:org>
@ -83,7 +83,7 @@
<contact:cc>{$addr['contact:cc']}</contact:cc>
</contact:addr>
</contact:postalInfo>
{/foreach}
{/for}
<contact:voice>{$item['contact:voice']}</contact:voice>
<contact:fax>{$item['contact:fax']}</contact:fax>
<contact:email>{$item['contact:email']}</contact:email>

View file

@ -30,7 +30,7 @@
<div class="{css('set')}">
<h1>Contact settings</h1>
<table>
{foreach $type in $possibleTypesLookup}
{for $type in $possibleTypesLookup}
{if isNonnull($contactsByType[$type[0]])}
<tr class="{css('kd-settings-pane-section')}">
<td>
@ -40,7 +40,7 @@
</td>
<td id="{$type[0]}-contacts"
class="{css('info')} {css('summary')} {css('domain-registrar-contacts')}">
{foreach $c in $contactsByType[$type[0]]}
{for $c in $contactsByType[$type[0]]}
{call .contactInfoCompact}
{param namePrefix: 'contacts[' + index($c) + '].' /}
{param name: $c['name'] /}
@ -53,10 +53,10 @@
{param faxNumber: $c['faxNumber'] /}
{/call}
{if (index($c) + 1) % 3 == 0}<br>{/if}
{/foreach}
{/for}
</td>
{/if}
{/foreach}
{/for}
</table>
</div>
{/template}
@ -185,11 +185,11 @@
<label class="{css('setting-label')}">Contact type</label>
<td class="{css('setting')}">
<div class="{css('setting-item-list')}">
{foreach $type in $possibleTypesLookup}
{for $type in $possibleTypesLookup}
{if $actualTypesLookup[$type[0]]}
<div>{$type[1]} contact</div>
{/if}
{/foreach}
{/for}
</div>
</td>
<tr><td colspan="2"><hr></tr>
@ -301,7 +301,7 @@
{@param namePrefix: string}
{@param actualTypesLookup: map<string, bool>}
{@param possibleTypesLookup: list<list<string>>}
{foreach $type in $possibleTypesLookup}
{for $type in $possibleTypesLookup}
{let $name: $namePrefix + 'type.' + $type[0] /}
{let $checked: $actualTypesLookup[$type[0]] /}
<div class="{css('checkbox-with-label')}">
@ -314,7 +314,7 @@
<span class="{css('description')}">{$type[2]}</span>
</label>
</div>
{/foreach}
{/for}
{/template}

View file

@ -113,7 +113,7 @@
</th>
</tr>
{if isNonnull($item['domain:ns'] and isNonnull($item['domain:ns']['domain:hostObj']))}
{foreach $hostObj in $item['domain:ns']['domain:hostObj']}
{for $hostObj in $item['domain:ns']['domain:hostObj']}
{let $hostIdx: index($hostObj) /}
{call registry.soy.forms.inputFieldRowWithValue data="all"}
{param label: 'Host ' + $hostIdx /}
@ -121,7 +121,7 @@
{param value: $hostObj /}
{param clazz kind="text"}{css('domain-hostObj')}{/param}
{/call}
{/foreach}
{/for}
{/if}
<tr id="domain-hosts-footer"></tr>
@ -165,7 +165,7 @@
{template .showContact_ visibility="private"}
{@param contacts: list<map<string, ?>>} /** List of EPP domain:contacts. */
{@param type: string} /** Type of contact (e.g. admin, tech) */
{foreach $contact in $contacts}
{for $contact in $contacts}
{if $type == $contact['@type']}
{call registry.soy.forms.inputFieldRowWithValue data="all"}
{param label: $contact['@type'] + ' contact' /}
@ -177,7 +177,7 @@
type="hidden"
value="{$contact['@type']}">
{/if}
{/foreach}
{/for}
{/template}

View file

@ -32,18 +32,18 @@
{/if}
{if isNonnull($item['domain:ns'])}
<domain:ns>
{foreach $hostObj in $item['domain:ns']['domain:hostObj']}
{for $hostObj in $item['domain:ns']['domain:hostObj']}
<domain:hostObj>{$hostObj.value}</domain:hostObj>
{/foreach}
{/for}
</domain:ns>
{/if}
{if isNonnull($item['domain:registrant'])}
<domain:registrant>{$item['domain:registrant']}</domain:registrant>
{/if}
{if isNonnull($item['domain:contact'])}
{foreach $contact in $item['domain:contact']}
{for $contact in $item['domain:contact']}
<domain:contact type="{$contact['@type']}">{$contact.value}</domain:contact>
{/foreach}
{/for}
{/if}
<domain:authInfo>
<domain:pw>{$item['domain:authInfo']['domain:pw']}</domain:pw>
@ -128,15 +128,15 @@
<{$tagName}>
{if isNonnull($hosts)}
<domain:ns>
{foreach $host in $hosts}
{for $host in $hosts}
<domain:hostObj>{$host.value}</domain:hostObj>
{/foreach}
{/for}
</domain:ns>
{/if}
{if isNonnull($contacts)}
{foreach $contact in $contacts}
{for $contact in $contacts}
<domain:contact type="{$contact['@type']}">{$contact.value}</domain:contact>
{/foreach}
{/for}
{/if}
</{$tagName}>
{/template}

View file

@ -59,7 +59,7 @@
</th>
</tr>
{if isNonnull($item['host:addr'])}
{foreach $addr in $item['host:addr']}
{for $addr in $item['host:addr']}
{if not $readonly}
<input type="hidden"
name="host:oldAddr[{index($addr)}].value"
@ -70,7 +70,7 @@
{param name: 'host:addr[' + index($addr) + '].value' /}
{param value: $item['host:addr'][index($addr)] /}
{/call}
{/foreach}
{/for}
{/if}
<tr id="domain-host-addrs-footer"></tr>
</table>

View file

@ -27,10 +27,10 @@
<host:create xmlns:host="urn:ietf:params:xml:ns:host-1.0">
<host:name>{$item['host:name']}</host:name>
{if isNonnull($item['host:addr'])}
{foreach $addr in $item['host:addr']}
{for $addr in $item['host:addr']}
{let $type: strContains($addr['value'], ':') ? 'v6' : 'v4' /}
<host:addr ip="{$type}">{$addr['value']}</host:addr>
{/foreach}
{/for}
{/if}
</host:create>
</create>
@ -101,10 +101,10 @@
{let $tagName: $isAdd ? 'host:add' : 'host:rem' /}
{if length($addrs) > 0}
<{$tagName}>
{foreach $addr in $addrs}
{for $addr in $addrs}
{let $type: strContains($addr, ':') ? 'v6' : 'v4' /}
<host:addr ip="{$type}">{$addr}</host:addr>
{/foreach}
{/for}
</{$tagName}>
{/if}
{/template}

View file

@ -47,12 +47,12 @@
<td class="{css('setting')}">
<div class="{css('info')} {css('summary')}">
<div id="ips">
{foreach $ip in $ipAddressWhitelist}
{for $ip in $ipAddressWhitelist}
{call .ip}
{param name: 'ipAddressWhitelist[' + index($ip) + ']' /}
{param ip: $ip /}
{/call}
{/foreach}
{/for}
</div>
<div class="{css('hidden')}">
<input id="newIp" value="" placeholder="Enter IP address..."/>

View file

@ -149,13 +149,13 @@
{@param? state: string}
{@param? zip: string}
{@param countryCode: string}
{foreach $line in $street}
{for $line in $street}
<input type="hidden"
name="{$id}.street[{index($line)}]"
id="{$id}.street[{index($line)}]"
value="{$street[index($line)]}">
<div class="{css('contact-address-street')}">{$street[index($line)]}</div>
{/foreach}
{/for}
<input type="hidden" name="{$id}.city" id="{$id}.city" value="{$city}">
<input type="hidden" name="{$id}.state" id="{$id}.state" value="{$state}">
<input type="hidden" name="{$id}.zip" id="{$id}.zip" value="{$zip}">