diff --git a/scripts/celerity/generate_sprites.php b/scripts/celerity/generate_sprites.php index 47ff59f8e6..3b41bc2da0 100755 --- a/scripts/celerity/generate_sprites.php +++ b/scripts/celerity/generate_sprites.php @@ -1,266 +1,247 @@ #!/usr/bin/env php setTagline('regenerate CSS sprite sheets'); $args->setSynopsis(<<parseStandardArguments(); $args->parse( array( array( 'name' => 'source', 'param' => 'directory', 'help' => 'Directory with sprite sources.', ) )); $srcroot = $args->getArg('source'); if (!$srcroot) { throw new Exception( "You must specify a source directory with '--source'."); } $webroot = dirname(phutil_get_library_root('phabricator')).'/webroot/rsrc'; $webroot = Filesystem::readablePath($webroot); function glx($x) { return (60 + (48 * $x)); } function gly($y) { return (110 + (48 * $y)); } $sheet = new PhutilSpriteSheet(); $at = '@'; $sheet->setCSSHeader(<<setSourceFile($srcroot.'/menu_normal_1x.png') ->setSourceSize(26, 26); $menu_hover_template = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_hover_1x.png') ->setSourceSize(26, 26); $menu_selected_template = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_selected_1x.png') ->setSourceSize(26, 26); $menu_map = array( '' => $menu_normal_template, '-selected' => $menu_selected_template, ':hover' => $menu_hover_template, ); $icon_map = array( 'help' => array(4, 19), 'settings' => array(0, 28), 'logout' => array(3, 6), 'notifications' => array(5, 20), 'task' => array(1, 15), ); foreach ($icon_map as $icon => $coords) { list($x, $y) = $coords; foreach ($menu_map as $suffix => $template) { $sheet->addSprite( id(clone $template) ->setSourcePosition(glx($x), gly($y)) ->setTargetCSS('.main-menu-item-icon-'.$icon.$suffix)); } } $app_template_large = id(new PhutilSprite()) ->setSourceFile($srcroot.'/application_large_1x.png') ->setSourceSize(60, 60); $app_template_large_hover = id(new PhutilSprite()) ->setSourceFile($srcroot.'/application_large_hover_1x.png') ->setSourceSize(60, 60); $app_template_small = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_normal_1x.png') ->setSourceSize(30, 30); $app_template_small_hover = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_hover_1x.png') ->setSourceSize(30, 30); $app_template_small_selected = id(new PhutilSprite()) ->setSourceFile($srcroot.'/menu_selected_1x.png') ->setSourceSize(30, 30); $app_source_map = array( '-large' => array($app_template_large, 2), // For the application launch view, we only show hover state on the desktop // because it looks glitchy on touch devices. We show the hover state when // the surrounding is hovered, not the icon itself. '-large /* hover */' => array( $app_template_large_hover, 2, '.device-desktop .phabricator-application-launch-container:hover '), '' => array($app_template_small, 1), // Show hover state only for the desktop. ':hover' => array( $app_template_small_hover, 1, '.device-desktop ', ), '-selected' => array($app_template_small_selected, 1), ); $app_map = array( 'differential' => array(9, 1), 'fact' => array(2, 4), 'mail' => array(0, 1), 'diffusion' => array(7, 13), 'slowvote' => array(1, 4), 'phriction' => array(1, 7), 'maniphest' => array(3, 24), 'flags' => array(6, 26), 'settings' => array(9, 11), 'applications' => array(0, 34), 'default' => array(9, 9), 'people' => array(3, 0), 'ponder' => array(4, 35), 'calendar' => array(5, 4), 'files' => array(6, 3), 'projects' => array(7, 35), 'daemons' => array(7, 6), 'herald' => array(1, 5), 'countdown' => array(7, 5), 'conduit' => array(7, 30), 'feed' => array(3, 11), 'paste' => array(9, 2), 'audit' => array(8, 19), 'uiexample' => array(7, 28), 'phpast' => array(6, 31), 'owners' => array(5, 32), 'phid' => array(9, 25), 'diviner' => array(1, 35), 'repositories' => array(8, 13), 'phame' => array(8, 4), 'macro' => array(0, 31), 'releeph' => array(5, 18), ); $xadj = -1; foreach ($app_map as $icon => $coords) { list($x, $y) = $coords; foreach ($app_source_map as $suffix => $spec) { list($template, $scale) = $spec; if (isset($spec[2])) { $prefix = $spec[2]; } else { $prefix = ''; } $sheet->addSprite( id(clone $template) ->setSourcePosition(($xadj + glx($x)) * $scale, gly($y) * $scale) ->setTargetCSS($prefix.'.app-'.$icon.$suffix)); } } $action_template = id(new PhutilSprite()) ->setSourcePosition(0, 0) ->setSourceSize(16, 16); -$action_map = array( - 'file' => 'icon/page_white_text.png', - 'fork' => 'icon/arrow_branch.png', - 'edit' => 'icon/page_white_edit.png', - 'flag-0' => 'icon/flag-0.png', - 'flag-1' => 'icon/flag-1.png', - 'flag-2' => 'icon/flag-2.png', - 'flag-3' => 'icon/flag-3.png', - 'flag-4' => 'icon/flag-4.png', - 'flag-5' => 'icon/flag-5.png', - 'flag-6' => 'icon/flag-6.png', - 'flag-7' => 'icon/flag-7.png', - 'flag-ghost' => 'icon/flag-ghost.png', - 'subscribe-auto' => 'icon/unsubscribe.png', - 'subscribe-add' => 'icon/subscribe.png', - 'subscribe-delete' => 'icon/unsubscribe.png', - 'new' => 'icon/page_white_put.png', - 'world' => 'icon/world.png', - 'delete' => 'icon/page_delete.png', - 'move' => 'icon/page_go.png', - 'preview' => 'icon/page_world.png', - 'unpublish' => 'icon/page_error.png', -); +$action_icons = PhabricatorActionView::getAvailableIcons(); +foreach ($action_icons as $icon) { + $action_map[$icon] = 'icon/'.$icon.'.png'; +} foreach ($action_map as $icon => $source) { $sheet->addSprite( id(clone $action_template) ->setSourceFile($srcroot.$source) ->setTargetCSS('.action-'.$icon)); } $remarkup_template = id(new PhutilSprite()) ->setSourcePosition(0, 0) ->setSourceSize(14, 14); $remarkup_icons = array( 'b', 'code', 'i', 'image', 'ol', 'tag', 'tt', 'ul', 'help', 'table', ); foreach ($remarkup_icons as $icon) { $sheet->addSprite( id(clone $remarkup_template) ->setSourceFile($srcroot.'remarkup/text_'.$icon.'.png') ->setTargetCSS('.remarkup-assist-'.$icon)); } $sheet->generateImage($webroot.'/image/autosprite.png'); $sheet->generateCSS($webroot.'/css/autosprite.css'); echo "Done.\n"; diff --git a/src/applications/uiexample/examples/PhabricatorActionListExample.php b/src/applications/uiexample/examples/PhabricatorActionListExample.php index 824ef935da..6dd65b88e6 100644 --- a/src/applications/uiexample/examples/PhabricatorActionListExample.php +++ b/src/applications/uiexample/examples/PhabricatorActionListExample.php @@ -1,117 +1,127 @@ PhabricatorActionListView to render object actions.'; } public function renderExample() { $request = $this->getRequest(); $user = $request->getUser(); $notices = array(); if ($request->isFormPost()) { $notices[] = 'You just submitted a valid form POST.'; } if ($request->isJavelinWorkflow()) { $notices[] = 'You just submitted a Workflow request.'; } if ($notices) { $notices = id(new AphrontErrorView()) ->setSeverity(AphrontErrorView::SEVERITY_NOTICE) ->setErrors($notices); } else { $notices = null; } if ($request->isJavelinWorkflow()) { $dialog = new AphrontDialogView(); $dialog->setUser($user); $dialog->setTitle('Request Information'); $dialog->appendChild($notices); $dialog->addCancelButton($request->getRequestURI(), 'Close'); return id(new AphrontDialogResponse())->setDialog($dialog); } $view = new PhabricatorActionListView(); $view->setUser($user); $view->addAction( id(new PhabricatorActionView()) ->setUser($user) ->setHref($request->getRequestURI()) ->setName('Normal Action') ->setIcon('file')); $view->addAction( id(new PhabricatorActionView()) ->setUser($user) ->setHref($request->getRequestURI()) ->setDisabled(true) ->setName('Disabled Action') ->setIcon('file')); $view->addAction( id(new PhabricatorActionView()) ->setUser($user) ->setHref($request->getRequestURI()) ->setRenderAsForm(true) ->setName('Form Action') ->setIcon('file')); $view->addAction( id(new PhabricatorActionView()) ->setUser($user) ->setHref($request->getRequestURI()) ->setRenderAsForm(true) ->setDisabled(true) ->setName('Disabled Form Action') ->setIcon('file')); $view->addAction( id(new PhabricatorActionView()) ->setUser($user) ->setHref($request->getRequestURI()) ->setWorkflow(true) ->setName('Workflow Action') ->setIcon('file')); $view->addAction( id(new PhabricatorActionView()) ->setUser($user) ->setHref($request->getRequestURI()) ->setRenderAsForm(true) ->setWorkflow(true) ->setName('Form + Workflow Action') ->setIcon('file')); + foreach (PhabricatorActionView::getAvailableIcons() as $icon) { + $view->addAction( + id(new PhabricatorActionView()) + ->setUser($user) + ->setHref('#') + ->setDisabled(true) + ->setName('Icon "'.$icon.'"') + ->setIcon($icon)); + } + return array( $view, '
', $notices, ); } } diff --git a/src/view/layout/PhabricatorActionView.php b/src/view/layout/PhabricatorActionView.php index f6b2a0c66b..351434cc6b 100644 --- a/src/view/layout/PhabricatorActionView.php +++ b/src/view/layout/PhabricatorActionView.php @@ -1,133 +1,158 @@ href = $href; return $this; } public function setIcon($icon) { $this->icon = $icon; return $this; } public function setName($name) { $this->name = $name; return $this; } public function setDisabled($disabled) { $this->disabled = $disabled; return $this; } public function setWorkflow($workflow) { $this->workflow = $workflow; return $this; } public function setRenderAsForm($form) { $this->renderAsForm = $form; return $this; } public function setUser(PhabricatorUser $user) { $this->user = $user; return $this; } public function render() { $icon = null; if ($this->icon) { $icon = phutil_render_tag( 'span', array( 'class' => 'phabricator-action-view-icon autosprite '. 'action-'.$this->icon, ), ''); } if ($this->href) { if ($this->renderAsForm) { if (!$this->user) { throw new Exception( 'Call setUser() when rendering an action as a form.'); } $item = javelin_render_tag( 'button', array( 'class' => 'phabricator-action-view-item', ), phutil_escape_html($this->name)); $item = phabricator_render_form( $this->user, array( 'action' => $this->href, 'method' => 'POST', 'sigil' => $this->workflow ? 'workflow' : null, ), $item); } else { $item = javelin_render_tag( 'a', array( 'href' => $this->href, 'class' => 'phabricator-action-view-item', 'sigil' => $this->workflow ? 'workflow' : null, ), phutil_escape_html($this->name)); } } else { $item = phutil_render_tag( 'span', array( 'class' => 'phabricator-action-view-item', ), phutil_escape_html($this->name)); } $classes = array(); $classes[] = 'phabricator-action-view'; if ($this->disabled) { $classes[] = 'phabricator-action-view-disabled'; } return phutil_render_tag( 'li', array( 'class' => implode(' ', $classes), ), $icon.$item); } + public static function getAvailableIcons() { + return array( + 'delete', + 'edit', + 'file', + 'flag-0', + 'flag-1', + 'flag-2', + 'flag-3', + 'flag-4', + 'flag-5', + 'flag-6', + 'flag-7', + 'flag-ghost', + 'fork', + 'move', + 'new', + 'preview', + 'subscribe-add', + 'subscribe-auto', + 'subscribe-delete', + 'unpublish', + 'world', + ); + } } diff --git a/webroot/rsrc/css/autosprite.css b/webroot/rsrc/css/autosprite.css index 7b1245dddb..267e535168 100644 --- a/webroot/rsrc/css/autosprite.css +++ b/webroot/rsrc/css/autosprite.css @@ -1,833 +1,833 @@ /** * @provides autosprite-css * @generated */ .autosprite { background-image: url(/rsrc/image/autosprite.png); background-repeat: no-repeat; } .main-menu-item-icon-help { background-position: 0px 0px; } .main-menu-item-icon-help-selected { background-position: 0px -27px; } .main-menu-item-icon-help:hover { background-position: 0px -54px; } .main-menu-item-icon-settings { background-position: 0px -81px; } .main-menu-item-icon-settings-selected { background-position: 0px -108px; } .main-menu-item-icon-settings:hover { background-position: 0px -135px; } .main-menu-item-icon-logout { background-position: 0px -162px; } .main-menu-item-icon-logout-selected { background-position: 0px -189px; } .main-menu-item-icon-logout:hover { background-position: 0px -216px; } .main-menu-item-icon-notifications { background-position: 0px -243px; } .main-menu-item-icon-notifications-selected { background-position: 0px -270px; } .main-menu-item-icon-notifications:hover { background-position: 0px -297px; } .main-menu-item-icon-task { background-position: 0px -324px; } .main-menu-item-icon-task-selected { background-position: 0px -351px; } .main-menu-item-icon-task:hover { background-position: 0px -378px; } .app-differential-large { background-position: 0px -405px; } .device-desktop .phabricator-application-launch-container:hover .app-differential-large /* hover */ { background-position: 0px -466px; } .app-differential { background-position: 0px -527px; } .device-desktop .app-differential:hover { background-position: 0px -558px; } .app-differential-selected { background-position: 0px -589px; } .app-fact-large { background-position: 0px -620px; } .device-desktop .phabricator-application-launch-container:hover .app-fact-large /* hover */ { background-position: 0px -681px; } .app-fact { background-position: 0px -742px; } .device-desktop .app-fact:hover { background-position: 0px -773px; } .app-fact-selected { background-position: 0px -804px; } .app-mail-large { background-position: 0px -835px; } .device-desktop .phabricator-application-launch-container:hover .app-mail-large /* hover */ { background-position: 0px -896px; } .app-mail { background-position: 0px -957px; } .device-desktop .app-mail:hover { background-position: 0px -988px; } .app-mail-selected { background-position: 0px -1019px; } .app-diffusion-large { background-position: 0px -1050px; } .device-desktop .phabricator-application-launch-container:hover .app-diffusion-large /* hover */ { background-position: 0px -1111px; } .app-diffusion { background-position: 0px -1172px; } .device-desktop .app-diffusion:hover { background-position: 0px -1203px; } .app-diffusion-selected { background-position: 0px -1234px; } .app-slowvote-large { background-position: 0px -1265px; } .device-desktop .phabricator-application-launch-container:hover .app-slowvote-large /* hover */ { background-position: 0px -1326px; } .app-slowvote { background-position: 0px -1387px; } .device-desktop .app-slowvote:hover { background-position: 0px -1418px; } .app-slowvote-selected { background-position: 0px -1449px; } .app-phriction-large { background-position: 0px -1480px; } .device-desktop .phabricator-application-launch-container:hover .app-phriction-large /* hover */ { background-position: 0px -1541px; } .app-phriction { background-position: 0px -1602px; } .device-desktop .app-phriction:hover { background-position: 0px -1633px; } .app-phriction-selected { background-position: 0px -1664px; } .app-maniphest-large { background-position: 0px -1695px; } .device-desktop .phabricator-application-launch-container:hover .app-maniphest-large /* hover */ { background-position: 0px -1756px; } .app-maniphest { background-position: 0px -1817px; } .device-desktop .app-maniphest:hover { background-position: 0px -1848px; } .app-maniphest-selected { background-position: 0px -1879px; } .app-flags-large { background-position: 0px -1910px; } .device-desktop .phabricator-application-launch-container:hover .app-flags-large /* hover */ { background-position: 0px -1971px; } .app-flags { background-position: 0px -2032px; } .device-desktop .app-flags:hover { background-position: 0px -2063px; } .app-flags-selected { background-position: 0px -2094px; } .app-settings-large { background-position: 0px -2125px; } .device-desktop .phabricator-application-launch-container:hover .app-settings-large /* hover */ { background-position: 0px -2186px; } .app-settings { background-position: 0px -2247px; } .device-desktop .app-settings:hover { background-position: 0px -2278px; } .app-settings-selected { background-position: 0px -2309px; } .app-applications-large { background-position: 0px -2340px; } .device-desktop .phabricator-application-launch-container:hover .app-applications-large /* hover */ { background-position: 0px -2401px; } .app-applications { background-position: 0px -2462px; } .device-desktop .app-applications:hover { background-position: 0px -2493px; } .app-applications-selected { background-position: 0px -2524px; } .app-default-large { background-position: 0px -2555px; } .device-desktop .phabricator-application-launch-container:hover .app-default-large /* hover */ { background-position: 0px -2616px; } .app-default { background-position: 0px -2677px; } .device-desktop .app-default:hover { background-position: 0px -2708px; } .app-default-selected { background-position: 0px -2739px; } .app-people-large { background-position: 0px -2770px; } .device-desktop .phabricator-application-launch-container:hover .app-people-large /* hover */ { background-position: 0px -2831px; } .app-people { background-position: 0px -2892px; } .device-desktop .app-people:hover { background-position: 0px -2923px; } .app-people-selected { background-position: 0px -2954px; } .app-ponder-large { background-position: 0px -2985px; } .device-desktop .phabricator-application-launch-container:hover .app-ponder-large /* hover */ { background-position: 0px -3046px; } .app-ponder { background-position: 0px -3107px; } .device-desktop .app-ponder:hover { background-position: 0px -3138px; } .app-ponder-selected { background-position: 0px -3169px; } .app-calendar-large { background-position: 0px -3200px; } .device-desktop .phabricator-application-launch-container:hover .app-calendar-large /* hover */ { background-position: 0px -3261px; } .app-calendar { background-position: 0px -3322px; } .device-desktop .app-calendar:hover { background-position: 0px -3353px; } .app-calendar-selected { background-position: 0px -3384px; } .app-files-large { background-position: 0px -3415px; } .device-desktop .phabricator-application-launch-container:hover .app-files-large /* hover */ { background-position: 0px -3476px; } .app-files { background-position: 0px -3537px; } .device-desktop .app-files:hover { background-position: 0px -3568px; } .app-files-selected { background-position: 0px -3599px; } .app-projects-large { background-position: 0px -3630px; } .device-desktop .phabricator-application-launch-container:hover .app-projects-large /* hover */ { background-position: 0px -3691px; } .app-projects { background-position: 0px -3752px; } .device-desktop .app-projects:hover { background-position: 0px -3783px; } .app-projects-selected { background-position: 0px -3814px; } .app-daemons-large { background-position: 0px -3845px; } .device-desktop .phabricator-application-launch-container:hover .app-daemons-large /* hover */ { background-position: 0px -3906px; } .app-daemons { background-position: 0px -3967px; } .device-desktop .app-daemons:hover { background-position: 0px -3998px; } .app-daemons-selected { background-position: 0px -4029px; } .app-herald-large { background-position: 0px -4060px; } .device-desktop .phabricator-application-launch-container:hover .app-herald-large /* hover */ { background-position: 0px -4121px; } .app-herald { background-position: 0px -4182px; } .device-desktop .app-herald:hover { background-position: 0px -4213px; } .app-herald-selected { background-position: 0px -4244px; } .app-countdown-large { background-position: 0px -4275px; } .device-desktop .phabricator-application-launch-container:hover .app-countdown-large /* hover */ { background-position: 0px -4336px; } .app-countdown { background-position: 0px -4397px; } .device-desktop .app-countdown:hover { background-position: 0px -4428px; } .app-countdown-selected { background-position: 0px -4459px; } .app-conduit-large { background-position: 0px -4490px; } .device-desktop .phabricator-application-launch-container:hover .app-conduit-large /* hover */ { background-position: 0px -4551px; } .app-conduit { background-position: 0px -4612px; } .device-desktop .app-conduit:hover { background-position: 0px -4643px; } .app-conduit-selected { background-position: 0px -4674px; } .app-feed-large { background-position: 0px -4705px; } .device-desktop .phabricator-application-launch-container:hover .app-feed-large /* hover */ { background-position: 0px -4766px; } .app-feed { background-position: 0px -4827px; } .device-desktop .app-feed:hover { background-position: 0px -4858px; } .app-feed-selected { background-position: 0px -4889px; } .app-paste-large { background-position: 0px -4920px; } .device-desktop .phabricator-application-launch-container:hover .app-paste-large /* hover */ { background-position: 0px -4981px; } .app-paste { background-position: 0px -5042px; } .device-desktop .app-paste:hover { background-position: 0px -5073px; } .app-paste-selected { background-position: 0px -5104px; } .app-audit-large { background-position: 0px -5135px; } .device-desktop .phabricator-application-launch-container:hover .app-audit-large /* hover */ { background-position: 0px -5196px; } .app-audit { background-position: 0px -5257px; } .device-desktop .app-audit:hover { background-position: 0px -5288px; } .app-audit-selected { background-position: 0px -5319px; } .app-uiexample-large { background-position: 0px -5350px; } .device-desktop .phabricator-application-launch-container:hover .app-uiexample-large /* hover */ { background-position: 0px -5411px; } .app-uiexample { background-position: 0px -5472px; } .device-desktop .app-uiexample:hover { background-position: 0px -5503px; } .app-uiexample-selected { background-position: 0px -5534px; } .app-phpast-large { background-position: 0px -5565px; } .device-desktop .phabricator-application-launch-container:hover .app-phpast-large /* hover */ { background-position: 0px -5626px; } .app-phpast { background-position: 0px -5687px; } .device-desktop .app-phpast:hover { background-position: 0px -5718px; } .app-phpast-selected { background-position: 0px -5749px; } .app-owners-large { background-position: 0px -5780px; } .device-desktop .phabricator-application-launch-container:hover .app-owners-large /* hover */ { background-position: 0px -5841px; } .app-owners { background-position: 0px -5902px; } .device-desktop .app-owners:hover { background-position: 0px -5933px; } .app-owners-selected { background-position: 0px -5964px; } .app-phid-large { background-position: 0px -5995px; } .device-desktop .phabricator-application-launch-container:hover .app-phid-large /* hover */ { background-position: 0px -6056px; } .app-phid { background-position: 0px -6117px; } .device-desktop .app-phid:hover { background-position: 0px -6148px; } .app-phid-selected { background-position: 0px -6179px; } .app-diviner-large { background-position: 0px -6210px; } .device-desktop .phabricator-application-launch-container:hover .app-diviner-large /* hover */ { background-position: 0px -6271px; } .app-diviner { background-position: 0px -6332px; } .device-desktop .app-diviner:hover { background-position: 0px -6363px; } .app-diviner-selected { background-position: 0px -6394px; } .app-repositories-large { background-position: 0px -6425px; } .device-desktop .phabricator-application-launch-container:hover .app-repositories-large /* hover */ { background-position: 0px -6486px; } .app-repositories { background-position: 0px -6547px; } .device-desktop .app-repositories:hover { background-position: 0px -6578px; } .app-repositories-selected { background-position: 0px -6609px; } .app-phame-large { background-position: 0px -6640px; } .device-desktop .phabricator-application-launch-container:hover .app-phame-large /* hover */ { background-position: 0px -6701px; } .app-phame { background-position: 0px -6762px; } .device-desktop .app-phame:hover { background-position: 0px -6793px; } .app-phame-selected { background-position: 0px -6824px; } .app-macro-large { background-position: 0px -6855px; } .device-desktop .phabricator-application-launch-container:hover .app-macro-large /* hover */ { background-position: 0px -6916px; } .app-macro { background-position: 0px -6977px; } .device-desktop .app-macro:hover { background-position: 0px -7008px; } .app-macro-selected { background-position: 0px -7039px; } .app-releeph-large { background-position: 0px -7070px; } .device-desktop .phabricator-application-launch-container:hover .app-releeph-large /* hover */ { background-position: 0px -7131px; } .app-releeph { background-position: 0px -7192px; } .device-desktop .app-releeph:hover { background-position: 0px -7223px; } .app-releeph-selected { background-position: 0px -7254px; } -.action-file { +.action-delete { background-position: 0px -7285px; } -.action-fork { +.action-edit { background-position: 0px -7302px; } -.action-edit { +.action-file { background-position: 0px -7319px; } .action-flag-0 { background-position: 0px -7336px; } .action-flag-1 { background-position: 0px -7353px; } .action-flag-2 { background-position: 0px -7370px; } .action-flag-3 { background-position: 0px -7387px; } .action-flag-4 { background-position: 0px -7404px; } .action-flag-5 { background-position: 0px -7421px; } .action-flag-6 { background-position: 0px -7438px; } .action-flag-7 { background-position: 0px -7455px; } .action-flag-ghost { background-position: 0px -7472px; } -.action-subscribe-auto { +.action-fork { background-position: 0px -7489px; } -.action-subscribe-add { +.action-move { background-position: 0px -7506px; } -.action-subscribe-delete { +.action-new { background-position: 0px -7523px; } -.action-new { +.action-preview { background-position: 0px -7540px; } -.action-world { +.action-subscribe-add { background-position: 0px -7557px; } -.action-delete { +.action-subscribe-auto { background-position: 0px -7574px; } -.action-move { +.action-subscribe-delete { background-position: 0px -7591px; } -.action-preview { +.action-unpublish { background-position: 0px -7608px; } -.action-unpublish { +.action-world { background-position: 0px -7625px; } .remarkup-assist-b { background-position: 0px -7642px; } .remarkup-assist-code { background-position: 0px -7657px; } .remarkup-assist-i { background-position: 0px -7672px; } .remarkup-assist-image { background-position: 0px -7687px; } .remarkup-assist-ol { background-position: 0px -7702px; } .remarkup-assist-tag { background-position: 0px -7717px; } .remarkup-assist-tt { background-position: 0px -7732px; } .remarkup-assist-ul { background-position: 0px -7747px; } .remarkup-assist-help { background-position: 0px -7762px; } .remarkup-assist-table { background-position: 0px -7777px; } diff --git a/webroot/rsrc/image/autosprite.png b/webroot/rsrc/image/autosprite.png index 42e7cb7b42..73aa1129b9 100644 Binary files a/webroot/rsrc/image/autosprite.png and b/webroot/rsrc/image/autosprite.png differ