mirror of
https://github.com/google/nomulus.git
synced 2025-05-01 04:27:51 +02:00
Soy has historically tolerated map accesses on weakly-typed variables. That is, if a template declared a param $p and then did $p['some_key'] in the template body, Soy would treat $p as a map even if it wasn't statically declared as one. This situation is changing with [] There are now two map types, `map` and `legacy_object_map`. We are trying to migrate every template in [] from `legacy_object_map` to `map`, leaving Soy with one (improved) map type. Because the two map types generate different JS code, Soy can no longer allow map accesses on weakly-typed variables. (If $p['some_key'] occurs in a template and the type of $p is unknown, Soy would not know what code to generate.) Every parameter whose static type is unknown (`?`) but which is inferred to be a `legacy_object_map` needs to be migrated to a `map`. We are developing tools for this in [] However, as a first step, we need to migrate the subset of these params that use the legacy SoyDoc syntax to use header param syntax with a static type of `?`. (All params declared in SoyDoc are typed as unknown, and it is a compilation error to mix SoyDoc and header param syntax in the same template, so any template that declares a SoyDoc param that is inferred to be a map needs to migrate to header param syntax.) This CL was prepared by using the tools in [] to create a list of templates declaring SoyDoc params inferred to be legacy_object_maps. This list was then fed to the existing //third_party/java_src/soy/java/com/google/template/soy/tools:ParamMigrator tool. Since this tool migrates whole files instead of individual templates, the resulting CL is a superset of the migration that is actually required. However, since the SoyDoc param syntax has been deprecated for years, and since there is little risk in migrating from one param style to another, I decided to land the superset. This migration falls under the LSC described at https://docs.google.com/document/d/1dAl-rDMp3oL0Zh_iSTaiHICwtcbLbVIy1FQ0wXSAaHs. Tested: TAP --sample for global presubmit queue [] passed FOSS tests ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=188879980
319 lines
8.9 KiB
Text
319 lines
8.9 KiB
Text
// Copyright 2017 The Nomulus Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
{namespace registry.soy.forms}
|
|
|
|
|
|
/**
|
|
* Input field.
|
|
*/
|
|
{template .inputField}
|
|
{@param name: ?} /** Input field name. */
|
|
{@param? item: ?} /** This will be used to set default value with $item[$name]. */
|
|
{@param? label: ?} /** Input field label. */
|
|
{@param? placeholder: ?} /** Placeholder text. */
|
|
<label for="{$name}">
|
|
{if isNonnull($label)}
|
|
{$label}
|
|
{else}
|
|
{$name}
|
|
{/if}
|
|
</label>
|
|
<input id="{$name}"
|
|
name="{$name}"
|
|
{if isNonnull($item) and isNonnull($item[$name])}
|
|
value="{$item[$name]}"
|
|
{/if}
|
|
{if isNonnull($placeholder)}
|
|
placeholder="{$placeholder}"
|
|
{/if}>
|
|
{/template}
|
|
|
|
|
|
/**
|
|
* Input field in a table row.
|
|
*/
|
|
{template .inputFieldRow}
|
|
{@param name: ?} /** Input field name. */
|
|
{@param? item: ?} /** This will be used to set default value with $item[$name]. */
|
|
{@param? itemPrefix: ?}
|
|
{@param? namePrefix: ?}
|
|
{@param? label: ?} /** Input field label. */
|
|
{@param? description: ?} /** Input field description. */
|
|
{@param? placeholder: ?} /** Placeholder text. */
|
|
{@param? readonly: ?}
|
|
<tr class="{css('kd-settings-pane-section')}">
|
|
<td>
|
|
<label for="{if isNonnull($namePrefix)}{$namePrefix + $name}{else}{$name}{/if}"
|
|
class="{css('setting-label')}">
|
|
{if isNonnull($label)}
|
|
{$label}
|
|
{else}
|
|
{$name}
|
|
{/if}
|
|
</label>
|
|
{if isNonnull($description)}
|
|
<span class="{css('description')}">{$description}</span>
|
|
{/if}
|
|
</td>
|
|
<td class="{css('setting')}">
|
|
<input id="{if isNonnull($namePrefix)}{$namePrefix + $name}{else}{$name}{/if}"
|
|
name="{if isNonnull($namePrefix)}{$namePrefix + $name}{else}{$name}{/if}"
|
|
{if isNonnull($item)}
|
|
{if isNonnull($itemPrefix) and isNonnull($item[$itemPrefix + $name])}
|
|
value="{$item[$itemPrefix + $name]['keyValue'] ?: $item[$itemPrefix + $name]}"
|
|
{elseif isNonnull($item[$name])}
|
|
value="{$item[$name]['keyValue'] ?: $item[$name]}"
|
|
{/if}
|
|
{/if}
|
|
{if isNonnull($placeholder) and not $readonly}
|
|
placeholder="{$placeholder}"
|
|
{/if}
|
|
{if $readonly}
|
|
readonly
|
|
{/if}>
|
|
</td>
|
|
</tr>
|
|
{/template}
|
|
|
|
|
|
/* XXX: Should move other impls in this file to use this. */
|
|
/** Input field label. */
|
|
{template .inputFieldLabel}
|
|
{@param label: string}
|
|
{@param? forId: string}
|
|
{@param? description: string}
|
|
<label {if isNonnull($forId)}for="{$forId}"{/if} class="{css('setting-label')}">
|
|
{$label}
|
|
</label>
|
|
{if isNonnull($description)}
|
|
<span class="{css('description')}">{$description}</span>
|
|
{/if}
|
|
{/template}
|
|
|
|
|
|
/** Input field value. */
|
|
{template .inputFieldValue}
|
|
{@param name: string}
|
|
{@param? readonly: bool}
|
|
{@param? value: ?}
|
|
{@param? namePrefix: string}
|
|
{@param? placeholder: string}
|
|
{@param? clazz: string}
|
|
{let $forId: isNonnull($namePrefix) ? $namePrefix + $name : $name /}
|
|
<input name="{$forId}"
|
|
id="{$forId}"
|
|
value="{if isNonnull($value)}{$value['keyValue'] ?: $value}{/if}"
|
|
{if isNonnull($clazz)}class="{$clazz}"{/if}
|
|
{if isNonnull($placeholder) and not $readonly}
|
|
placeholder="{$placeholder}"
|
|
{/if}
|
|
{if $readonly}readonly{/if}>
|
|
{/template}
|
|
|
|
|
|
/** Input field in a table row. */
|
|
{template .inputFieldRowWithValue}
|
|
{@param label: string}
|
|
{@param name: string}
|
|
{@param? readonly: bool}
|
|
{@param? namePrefix: string}
|
|
{@param? value: ?}
|
|
{@param? description: string}
|
|
{@param? placeholder: string}
|
|
{@param? clazz: string}
|
|
{let $forId: isNonnull($namePrefix) ? $namePrefix + $name : $name /}
|
|
<tr class="{css('kd-settings-pane-section')}">
|
|
<td>
|
|
{call .inputFieldLabel data="all"}
|
|
{param forId: $forId /}
|
|
{/call}
|
|
</td>
|
|
<td class="{css('setting')}">
|
|
{call .inputFieldValue data="all" /}
|
|
</td>
|
|
</tr>
|
|
{/template}
|
|
|
|
|
|
/**
|
|
* Form input row for a table.
|
|
*/
|
|
{template .textareaFieldRow}
|
|
{@param name: ?} /** Input field name. */
|
|
{@param? item: ?} /** This will be used to set default value with $item[$name]. */
|
|
{@param? itemPrefix: ?}
|
|
{@param? namePrefix: ?}
|
|
{@param? label: ?} /** Input field label. */
|
|
{@param? readonly: ?}
|
|
<tr>
|
|
<td>
|
|
<label for="{if isNonnull($namePrefix)}{$namePrefix + $name}{else}{$name}{/if}">
|
|
{if isNonnull($label)}
|
|
{$label}
|
|
{else}
|
|
{$name}
|
|
{/if}
|
|
</label>
|
|
</td>
|
|
<td>
|
|
<textarea id="{$name}"
|
|
name="{if isNonnull($namePrefix)}{$namePrefix + $name}{else}{$name}{/if}"
|
|
{if $readonly}
|
|
readonly
|
|
{/if}
|
|
>{if isNonnull($item)}
|
|
{if isNonnull($itemPrefix) and isNonnull($item[$itemPrefix + $name])}
|
|
{$item[$itemPrefix + $name]}
|
|
{elseif isNonnull($item[$name])}
|
|
{$item[$name]}
|
|
{/if}
|
|
{/if}</textarea>
|
|
</td>
|
|
</tr>
|
|
{/template}
|
|
|
|
|
|
/**
|
|
* Form input row for a table.
|
|
*/
|
|
{template .textareaFieldRowWithValue}
|
|
{@param name: ?} /** Input field name. */
|
|
{@param value: ?}
|
|
{@param? namePrefix: ?}
|
|
{@param? label: ?} /** Input field label. */
|
|
{@param? readonly: ?}
|
|
<tr>
|
|
<td>
|
|
<label for="{if isNonnull($namePrefix)}{$namePrefix + $name}{else}{$name}{/if}">
|
|
{if isNonnull($label)}
|
|
{$label}
|
|
{else}
|
|
{$name}
|
|
{/if}
|
|
</label>
|
|
</td>
|
|
<td>
|
|
<textarea id="{$name}"
|
|
name="{if isNonnull($namePrefix)}{$namePrefix + $name}{else}{$name}{/if}"
|
|
{if $readonly}
|
|
readonly
|
|
{/if}
|
|
>{if isNonnull($value) and isNonnull($value['keyValue'])}
|
|
{$value['keyValue']}
|
|
{/if}</textarea>
|
|
</td>
|
|
</tr>
|
|
{/template}
|
|
|
|
|
|
/**
|
|
* Select control.
|
|
*/
|
|
{template .selectRow}
|
|
{@param name: ?} /** Input field name. */
|
|
{@param options: ?} /** Items listed in the selector. */
|
|
{@param selected: ?} /** Name of the selected option. */
|
|
{@param? namePrefix: ?}
|
|
{@param? label: ?} /** Input field label. */
|
|
{@param? readonly: ?}
|
|
{let $forId: isNonnull($namePrefix) ? $namePrefix + $name : $name /}
|
|
<tr>
|
|
<td>
|
|
<label for="{$forId}">
|
|
{if isNonnull($label)}
|
|
{$label}
|
|
{else}
|
|
{$name}
|
|
{/if}
|
|
</label>
|
|
</td>
|
|
<td>
|
|
<select id="{$name}"
|
|
name="{$name}"
|
|
class="{css('kd-button')} {css('reg-select')}"
|
|
{if $readonly}disabled{/if}>
|
|
{for $option in $options}
|
|
<option value="{$option}" {if $selected == $option}selected{/if}>
|
|
{$option}
|
|
</option>
|
|
{/for}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
{/template}
|
|
|
|
|
|
{template .inputRadioWithValue}
|
|
{@param name: ?}
|
|
{@param values: ?}
|
|
{@param? checkedValue: ?} /** the default checked value. */
|
|
<tr>
|
|
<td colspan="2">
|
|
{for $value in $values}
|
|
<input type="radio"
|
|
name="{$name}"
|
|
value="{$value}"
|
|
{if $checkedValue == $value}checked{/if}>
|
|
{/for}
|
|
</td>
|
|
</tr>
|
|
{/template}
|
|
|
|
|
|
/** Checkbox with label. */
|
|
{template .inputCheckboxRow}
|
|
{@param name: string}
|
|
{@param? checked: bool}
|
|
{@param? label: string}
|
|
{@param? description: string}
|
|
<tr>
|
|
<td>
|
|
{call .inputFieldLabel data="all"}
|
|
{param label: $label ? $label : $name /}
|
|
{param forId: $name /}
|
|
{/call}
|
|
</td>
|
|
<td>
|
|
<input id="{$name}"
|
|
type="checkbox"
|
|
name="{$name}"
|
|
value="{$name}"
|
|
{if isNonnull($checked) and $checked}checked{/if}>
|
|
</td>
|
|
</tr>
|
|
{/template}
|
|
|
|
|
|
/** Drop-down select button widget. */
|
|
{template .menuButton}
|
|
{@param id: string} /** ID for button. */
|
|
{@param selected: string} /** Selected item. */
|
|
{@param items: list<string>} /** Selectable items. */
|
|
<div id="{$id}" class="{css('kd-button')} {css('kd-menubutton')} {css('kd-select')}">
|
|
<span class="{css('label')}">
|
|
{$selected}
|
|
</span>
|
|
<span class="{css('kd-disclosureindicator')}"></span>
|
|
<ul class="{css('kd-menulist')}">
|
|
{for $item in $items}
|
|
<li class="{css('kd-menulistitem')}
|
|
{if $item == $selected}
|
|
{sp}{css('selected')}
|
|
{/if}">
|
|
{$item}
|
|
{/for}
|
|
</ul>
|
|
</div>
|
|
{/template}
|