getRequest(); $user = $request->getUser(); $keys = $request->getStr('keys'); $keys = json_decode($keys, true); if (!is_array($keys)) { return new Aphront400Response(); } // There have been at least two users asking for a keyboard shortcut to // close the dialog, so be explicit that escape works since it isn't // terribly discoverable. $keys[] = array( 'keys' => array('esc'), 'description' => 'Close any dialog, including this one.', ); $rows = array(); foreach ($keys as $shortcut) { $keystrokes = array(); foreach ($shortcut['keys'] as $stroke) { $keystrokes[] = ''.phutil_escape_html($stroke).''; } $keystrokes = implode(' or ', $keystrokes); $rows[] = ''. ''.$keystrokes.''. ''.phutil_escape_html($shortcut['description']).''. ''; } $table = ''. implode('', $rows). '
'; $dialog = id(new AphrontDialogView()) ->setUser($user) ->setTitle('Keyboard Shortcuts') ->appendChild($table) ->addCancelButton('#', 'Close'); return id(new AphrontDialogResponse()) ->setDialog($dialog); } }