. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Elements; use Fisharebest\Webtrees\Gedcom; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Tree; use function e; use function preg_match; /** * NOTE can be text or an XREF. */ class NoteStructure extends AbstractElement { /** * Convert a value to a canonical form. * * @param string $value * * @return string */ public function canonical(string $value): string { // Browsers use MS-DOS line endings in multi-line data. return strtr($value, ["\t" => ' ', "\r\n" => "\n", "\r" => "\n"]); } /** * An edit control for this data. * * @param string $id * @param string $name * @param string $value * @param Tree $tree * * @return string */ public function edit(string $id, string $name, string $value, Tree $tree): string { $submitter_text = new SubmitterText(''); $xref_note = new XrefNote(''); // Existing shared note. if (preg_match('/^@' . Gedcom::REGEX_XREF . '@$/', $value)) { return $xref_note->edit($id, $name, $value, $tree); } // Existing inline note. if ($value !== '') { return $submitter_text->edit($id, $name, $value, $tree); } $options = [ 'inline' => I18N::translate('inline note'), 'shared' => I18N::translate('shared note'), ]; // New note - either inline or shared return '
' . '
' . view('components/radios-inline', ['name' => $id . '-options', 'options' => $options, 'selected' => 'inline']) . '
' . '
' . $submitter_text->edit($id, $name, $value, $tree) . '
' . '
' . $xref_note->edit($id, $name, $value, $tree) . '
' . '
' . ''; } }