is 1000 characters."
- */
- function testVeryLongLineWrap() {
- $input = 'Drupal' . str_repeat('x', 2100) . '> Drupal';
- $output = drupal_html_to_text($input);
- // This awkward construct comes from includes/mail.inc lines 8-13.
- $eol = variable_get('mail_line_endings', MAIL_LINE_ENDINGS);
- // We must use strlen() rather than drupal_strlen() in order to count
- // octets rather than characters.
- $line_length_limit = 1000 - drupal_strlen($eol);
- $maximum_line_length = 0;
- foreach (explode($eol, $output) as $line) {
- // We must use strlen() rather than drupal_strlen() in order to count
- // octets rather than characters.
- $maximum_line_length = max($maximum_line_length, strlen($line . $eol));
- }
- $verbose = 'Maximum line length found was ' . $maximum_line_length . ' octets.';
- // @todo This should assert that $maximum_line_length <= 1000.
- $this->pass($verbose);
- }
-}
diff --git a/modules/simpletest/tests/menu.test b/modules/simpletest/tests/menu.test
deleted file mode 100644
index f5d7d29..0000000
--- a/modules/simpletest/tests/menu.test
+++ /dev/null
@@ -1,1740 +0,0 @@
-drupalGet($goto);
- }
- // Compare paths with actual breadcrumb.
- $parts = $this->getParts();
- $pass = TRUE;
- foreach ($trail as $path => $title) {
- $url = url($path);
- $part = array_shift($parts);
- $pass = ($pass && $part['href'] === $url && $part['text'] === check_plain($title));
- }
- // No parts must be left, or an expected "Home" will always pass.
- $pass = ($pass && empty($parts));
-
- $this->assertTrue($pass, format_string('Breadcrumb %parts found on @path.', array(
- '%parts' => implode(' » ', $trail),
- '@path' => $this->getUrl(),
- )));
-
- // Additionally assert page title, if given.
- if (isset($page_title)) {
- $this->assertTitle(strtr('@title | Drupal', array('@title' => $page_title)));
- }
-
- // Additionally assert active trail in a menu tree output, if given.
- if ($tree) {
- end($tree);
- $active_link_path = key($tree);
- $active_link_title = array_pop($tree);
- $xpath = '';
- if ($tree) {
- $i = 0;
- foreach ($tree as $link_path => $link_title) {
- $part_xpath = (!$i ? '//' : '/following-sibling::ul/descendant::');
- $part_xpath .= 'li[contains(@class, :class)]/a[contains(@href, :href) and contains(text(), :title)]';
- $part_args = array(
- ':class' => 'active-trail',
- ':href' => url($link_path),
- ':title' => $link_title,
- );
- $xpath .= $this->buildXPathQuery($part_xpath, $part_args);
- $i++;
- }
- $elements = $this->xpath($xpath);
- $this->assertTrue(!empty($elements), 'Active trail to current page was found in menu tree.');
-
- // Append prefix for active link asserted below.
- $xpath .= '/following-sibling::ul/descendant::';
- }
- else {
- $xpath .= '//';
- }
- $xpath_last_active = ($last_active ? 'and contains(@class, :class-active)' : '');
- $xpath .= 'li[contains(@class, :class-trail)]/a[contains(@href, :href) ' . $xpath_last_active . 'and contains(text(), :title)]';
- $args = array(
- ':class-trail' => 'active-trail',
- ':class-active' => 'active',
- ':href' => url($active_link_path),
- ':title' => $active_link_title,
- );
- $elements = $this->xpath($xpath, $args);
- $this->assertTrue(!empty($elements), format_string('Active link %title was found in menu tree, including active trail links %tree.', array(
- '%title' => $active_link_title,
- '%tree' => implode(' » ', $tree),
- )));
- }
- }
-
- /**
- * Returns the breadcrumb contents of the current page in the internal browser.
- */
- protected function getParts() {
- $parts = array();
- $elements = $this->xpath('//div[@class="breadcrumb"]/a');
- if (!empty($elements)) {
- foreach ($elements as $element) {
- $parts[] = array(
- 'text' => (string) $element,
- 'href' => (string) $element['href'],
- 'title' => (string) $element['title'],
- );
- }
- }
- return $parts;
- }
-}
-
-class MenuRouterTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Menu router',
- 'description' => 'Tests menu router and hook_menu() functionality.',
- 'group' => 'Menu',
- );
- }
-
- function setUp() {
- // Enable dummy module that implements hook_menu.
- parent::setUp('menu_test');
- // Make the tests below more robust by explicitly setting the default theme
- // and administrative theme that they expect.
- theme_enable(array('bartik'));
- variable_set('theme_default', 'bartik');
- variable_set('admin_theme', 'seven');
- }
-
- /**
- * Test title callback set to FALSE.
- */
- function testTitleCallbackFalse() {
- $this->drupalGet('node');
- $this->assertText('A title with @placeholder', 'Raw text found on the page');
- $this->assertNoText(t('A title with @placeholder', array('@placeholder' => 'some other text')), 'Text with placeholder substitutions not found.');
- }
-
- /**
- * Tests page title of MENU_CALLBACKs.
- */
- function testTitleMenuCallback() {
- // Verify that the menu router item title is not visible.
- $this->drupalGet('');
- $this->assertNoText(t('Menu Callback Title'));
- // Verify that the menu router item title is output as page title.
- $this->drupalGet('menu_callback_title');
- $this->assertText(t('Menu Callback Title'));
- }
-
- /**
- * Test the theme callback when it is set to use an administrative theme.
- */
- function testThemeCallbackAdministrative() {
- $this->drupalGet('menu-test/theme-callback/use-admin-theme');
- $this->assertText('Custom theme: seven. Actual theme: seven.', 'The administrative theme can be correctly set in a theme callback.');
- $this->assertRaw('seven/style.css', "The administrative theme's CSS appears on the page.");
- }
-
- /**
- * Test that the theme callback is properly inherited.
- */
- function testThemeCallbackInheritance() {
- $this->drupalGet('menu-test/theme-callback/use-admin-theme/inheritance');
- $this->assertText('Custom theme: seven. Actual theme: seven. Theme callback inheritance is being tested.', 'Theme callback inheritance correctly uses the administrative theme.');
- $this->assertRaw('seven/style.css', "The administrative theme's CSS appears on the page.");
- }
-
- /**
- * Test that 'page callback', 'file' and 'file path' keys are properly
- * inherited from parent menu paths.
- */
- function testFileInheritance() {
- $this->drupalGet('admin/config/development/file-inheritance');
- $this->assertText('File inheritance test description', 'File inheritance works.');
- }
-
- /**
- * Test path containing "exotic" characters.
- */
- function testExoticPath() {
- $path = "menu-test/ -._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters.
- "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
- "éøïвβä¸åœ‹æ›¸Ûž"; // Characters from various non-ASCII alphabets.
- $this->drupalGet($path);
- $this->assertRaw('This is menu_test_callback().');
- }
-
- /**
- * Test the theme callback when the site is in maintenance mode.
- */
- function testThemeCallbackMaintenanceMode() {
- variable_set('maintenance_mode', TRUE);
-
- // For a regular user, the fact that the site is in maintenance mode means
- // we expect the theme callback system to be bypassed entirely.
- $this->drupalGet('menu-test/theme-callback/use-admin-theme');
- $this->assertRaw('bartik/css/style.css', "The maintenance theme's CSS appears on the page.");
-
- // An administrator, however, should continue to see the requested theme.
- $admin_user = $this->drupalCreateUser(array('access site in maintenance mode'));
- $this->drupalLogin($admin_user);
- $this->drupalGet('menu-test/theme-callback/use-admin-theme');
- $this->assertText('Custom theme: seven. Actual theme: seven.', 'The theme callback system is correctly triggered for an administrator when the site is in maintenance mode.');
- $this->assertRaw('seven/style.css', "The administrative theme's CSS appears on the page.");
- }
-
- /**
- * Make sure the maintenance mode can be bypassed using hook_menu_site_status_alter().
- *
- * @see hook_menu_site_status_alter().
- */
- function testMaintenanceModeLoginPaths() {
- variable_set('maintenance_mode', TRUE);
-
- $offline_message = t('@site is currently under maintenance. We should be back shortly. Thank you for your patience.', array('@site' => variable_get('site_name', 'Drupal')));
- $this->drupalLogout();
- $this->drupalGet('node');
- $this->assertText($offline_message);
- $this->drupalGet('menu_login_callback');
- $this->assertText('This is menu_login_callback().', t('Maintenance mode can be bypassed through hook_login_paths().'));
- }
-
- /**
- * Test that an authenticated user hitting 'user/login' gets redirected to
- * 'user' and 'user/register' gets redirected to the user edit page.
- */
- function testAuthUserUserLogin() {
- $loggedInUser = $this->drupalCreateUser(array());
- $this->drupalLogin($loggedInUser);
-
- $this->drupalGet('user/login');
- // Check that we got to 'user'.
- $this->assertTrue($this->url == url('user', array('absolute' => TRUE)), "Logged-in user redirected to q=user on accessing q=user/login");
-
- // user/register should redirect to user/UID/edit.
- $this->drupalGet('user/register');
- $this->assertTrue($this->url == url('user/' . $this->loggedInUser->uid . '/edit', array('absolute' => TRUE)), "Logged-in user redirected to q=user/UID/edit on accessing q=user/register");
- }
-
- /**
- * Test the theme callback when it is set to use an optional theme.
- */
- function testThemeCallbackOptionalTheme() {
- // Request a theme that is not enabled.
- $this->drupalGet('menu-test/theme-callback/use-stark-theme');
- $this->assertText('Custom theme: NONE. Actual theme: bartik.', 'The theme callback system falls back on the default theme when a theme that is not enabled is requested.');
- $this->assertRaw('bartik/css/style.css', "The default theme's CSS appears on the page.");
-
- // Now enable the theme and request it again.
- theme_enable(array('stark'));
- $this->drupalGet('menu-test/theme-callback/use-stark-theme');
- $this->assertText('Custom theme: stark. Actual theme: stark.', 'The theme callback system uses an optional theme once it has been enabled.');
- $this->assertRaw('stark/layout.css', "The optional theme's CSS appears on the page.");
- }
-
- /**
- * Test the theme callback when it is set to use a theme that does not exist.
- */
- function testThemeCallbackFakeTheme() {
- $this->drupalGet('menu-test/theme-callback/use-fake-theme');
- $this->assertText('Custom theme: NONE. Actual theme: bartik.', 'The theme callback system falls back on the default theme when a theme that does not exist is requested.');
- $this->assertRaw('bartik/css/style.css', "The default theme's CSS appears on the page.");
- }
-
- /**
- * Test the theme callback when no theme is requested.
- */
- function testThemeCallbackNoThemeRequested() {
- $this->drupalGet('menu-test/theme-callback/no-theme-requested');
- $this->assertText('Custom theme: NONE. Actual theme: bartik.', 'The theme callback system falls back on the default theme when no theme is requested.');
- $this->assertRaw('bartik/css/style.css', "The default theme's CSS appears on the page.");
- }
-
- /**
- * Test that hook_custom_theme() can control the theme of a page.
- */
- function testHookCustomTheme() {
- // Trigger hook_custom_theme() to dynamically request the Stark theme for
- // the requested page.
- variable_set('menu_test_hook_custom_theme_name', 'stark');
- theme_enable(array('stark'));
-
- // Visit a page that does not implement a theme callback. The above request
- // should be honored.
- $this->drupalGet('menu-test/no-theme-callback');
- $this->assertText('Custom theme: stark. Actual theme: stark.', 'The result of hook_custom_theme() is used as the theme for the current page.');
- $this->assertRaw('stark/layout.css', "The Stark theme's CSS appears on the page.");
- }
-
- /**
- * Test that the theme callback wins out over hook_custom_theme().
- */
- function testThemeCallbackHookCustomTheme() {
- // Trigger hook_custom_theme() to dynamically request the Stark theme for
- // the requested page.
- variable_set('menu_test_hook_custom_theme_name', 'stark');
- theme_enable(array('stark'));
-
- // The menu "theme callback" should take precedence over a value set in
- // hook_custom_theme().
- $this->drupalGet('menu-test/theme-callback/use-admin-theme');
- $this->assertText('Custom theme: seven. Actual theme: seven.', 'The result of hook_custom_theme() does not override what was set in a theme callback.');
- $this->assertRaw('seven/style.css', "The Seven theme's CSS appears on the page.");
- }
-
- /**
- * Tests for menu_link_maintain().
- */
- function testMenuLinkMaintain() {
- $admin_user = $this->drupalCreateUser(array('administer site configuration'));
- $this->drupalLogin($admin_user);
-
- // Create three menu items.
- menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/1', 'Menu link #1');
- menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/1', 'Menu link #1-1');
- menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/2', 'Menu link #2');
-
- // Move second link to the main-menu, to test caching later on.
- db_update('menu_links')
- ->fields(array('menu_name' => 'main-menu'))
- ->condition('link_title', 'Menu link #1-1')
- ->condition('customized', 0)
- ->condition('module', 'menu_test')
- ->execute();
- menu_cache_clear('main-menu');
-
- // Load front page.
- $this->drupalGet('node');
- $this->assertLink(t('Menu link #1'), 0, 'Found menu link #1');
- $this->assertLink(t('Menu link #1-1'), 0, 'Found menu link #1-1');
- $this->assertLink(t('Menu link #2'), 0, 'Found menu link #2');
-
- // Rename all links for the given path.
- menu_link_maintain('menu_test', 'update', 'menu_test_maintain/1', 'Menu link updated');
- // Load a different page to be sure that we have up to date information.
- $this->drupalGet('menu_test_maintain/1');
- $this->assertLink(t('Menu link updated'), 0, 'Found updated menu link');
- $this->assertNoLink(t('Menu link #1'), 0, 'Not found menu link #1');
- $this->assertNoLink(t('Menu link #1'), 0, 'Not found menu link #1-1');
- $this->assertLink(t('Menu link #2'), 0, 'Found menu link #2');
-
- // Delete all links for the given path.
- menu_link_maintain('menu_test', 'delete', 'menu_test_maintain/1', '');
- // Load a different page to be sure that we have up to date information.
- $this->drupalGet('menu_test_maintain/2');
- $this->assertNoLink(t('Menu link updated'), 0, 'Not found deleted menu link');
- $this->assertNoLink(t('Menu link #1'), 0, 'Not found menu link #1');
- $this->assertNoLink(t('Menu link #1'), 0, 'Not found menu link #1-1');
- $this->assertLink(t('Menu link #2'), 0, 'Found menu link #2');
- }
-
- /**
- * Test menu_get_names().
- */
- function testMenuGetNames() {
- // Create three menu items.
- for ($i = 0; $i < 3; $i++) {
- $menu_link = array(
- 'link_title' => 'Menu link #' . $i,
- 'link_path' => 'menu_test/' . $i,
- 'module' => 'menu_test',
- 'menu_name' => 'menu_test_' . $i,
- );
- menu_link_save($menu_link);
- }
-
- drupal_static_reset('menu_get_names');
-
- // Verify that the menu names are correctly reported by menu_get_names().
- $menu_names = menu_get_names();
- $this->pass(implode(' | ', $menu_names));
- for ($i = 0; $i < 3; $i++) {
- $this->assertTrue(in_array('menu_test_' . $i, $menu_names), t('Expected menu name %expected is returned.', array('%expected' => 'menu_test_' . $i)));
- }
- }
-
- /**
- * Tests for menu_name parameter for hook_menu().
- */
- function testMenuName() {
- $admin_user = $this->drupalCreateUser(array('administer site configuration'));
- $this->drupalLogin($admin_user);
-
- $sql = "SELECT menu_name FROM {menu_links} WHERE router_path = 'menu_name_test'";
- $name = db_query($sql)->fetchField();
- $this->assertEqual($name, 'original', 'Menu name is "original".');
-
- // Change the menu_name parameter in menu_test.module, then force a menu
- // rebuild.
- menu_test_menu_name('changed');
- menu_rebuild();
-
- $sql = "SELECT menu_name FROM {menu_links} WHERE router_path = 'menu_name_test'";
- $name = db_query($sql)->fetchField();
- $this->assertEqual($name, 'changed', 'Menu name was successfully changed after rebuild.');
- }
-
- /**
- * Tests for menu hierarchy.
- */
- function testMenuHierarchy() {
- $parent_link = db_query('SELECT * FROM {menu_links} WHERE link_path = :link_path', array(':link_path' => 'menu-test/hierarchy/parent'))->fetchAssoc();
- $child_link = db_query('SELECT * FROM {menu_links} WHERE link_path = :link_path', array(':link_path' => 'menu-test/hierarchy/parent/child'))->fetchAssoc();
- $unattached_child_link = db_query('SELECT * FROM {menu_links} WHERE link_path = :link_path', array(':link_path' => 'menu-test/hierarchy/parent/child2/child'))->fetchAssoc();
-
- $this->assertEqual($child_link['plid'], $parent_link['mlid'], 'The parent of a directly attached child is correct.');
- $this->assertEqual($unattached_child_link['plid'], $parent_link['mlid'], 'The parent of a non-directly attached child is correct.');
- }
-
- /**
- * Tests menu link depth and parents of local tasks and menu callbacks.
- */
- function testMenuHidden() {
- // Verify links for one dynamic argument.
- $links = db_select('menu_links', 'ml')
- ->fields('ml')
- ->condition('ml.router_path', 'menu-test/hidden/menu%', 'LIKE')
- ->orderBy('ml.router_path')
- ->execute()
- ->fetchAllAssoc('router_path', PDO::FETCH_ASSOC);
-
- $parent = $links['menu-test/hidden/menu'];
- $depth = $parent['depth'] + 1;
- $plid = $parent['mlid'];
-
- $link = $links['menu-test/hidden/menu/list'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/menu/add'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/menu/settings'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/menu/manage/%'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $parent = $links['menu-test/hidden/menu/manage/%'];
- $depth = $parent['depth'] + 1;
- $plid = $parent['mlid'];
-
- $link = $links['menu-test/hidden/menu/manage/%/list'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/menu/manage/%/add'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/menu/manage/%/edit'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/menu/manage/%/delete'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- // Verify links for two dynamic arguments.
- $links = db_select('menu_links', 'ml')
- ->fields('ml')
- ->condition('ml.router_path', 'menu-test/hidden/block%', 'LIKE')
- ->orderBy('ml.router_path')
- ->execute()
- ->fetchAllAssoc('router_path', PDO::FETCH_ASSOC);
-
- $parent = $links['menu-test/hidden/block'];
- $depth = $parent['depth'] + 1;
- $plid = $parent['mlid'];
-
- $link = $links['menu-test/hidden/block/list'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/block/add'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/block/manage/%/%'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $parent = $links['menu-test/hidden/block/manage/%/%'];
- $depth = $parent['depth'] + 1;
- $plid = $parent['mlid'];
-
- $link = $links['menu-test/hidden/block/manage/%/%/configure'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
-
- $link = $links['menu-test/hidden/block/manage/%/%/delete'];
- $this->assertEqual($link['depth'], $depth, format_string('%path depth @link_depth is equal to @depth.', array('%path' => $link['router_path'], '@link_depth' => $link['depth'], '@depth' => $depth)));
- $this->assertEqual($link['plid'], $plid, format_string('%path plid @link_plid is equal to @plid.', array('%path' => $link['router_path'], '@link_plid' => $link['plid'], '@plid' => $plid)));
- }
-
- /**
- * Test menu_get_item() with empty ancestors.
- */
- function testMenuGetItemNoAncestors() {
- variable_set('menu_masks', array());
- $this->drupalGet('');
- }
-
- /**
- * Test menu_set_item().
- */
- function testMenuSetItem() {
- $item = menu_get_item('node');
-
- $this->assertEqual($item['path'], 'node', "Path from menu_get_item('node') is equal to 'node'", 'menu');
-
- // Modify the path for the item then save it.
- $item['path'] = 'node_test';
- $item['href'] = 'node_test';
-
- menu_set_item('node', $item);
- $compare_item = menu_get_item('node');
- $this->assertEqual($compare_item, $item, 'Modified menu item is equal to newly retrieved menu item.', 'menu');
- }
-
- /**
- * Test menu maintenance hooks.
- */
- function testMenuItemHooks() {
- // Create an item.
- menu_link_maintain('menu_test', 'insert', 'menu_test_maintain/4', 'Menu link #4');
- $this->assertEqual(menu_test_static_variable(), 'insert', 'hook_menu_link_insert() fired correctly');
- // Update the item.
- menu_link_maintain('menu_test', 'update', 'menu_test_maintain/4', 'Menu link updated');
- $this->assertEqual(menu_test_static_variable(), 'update', 'hook_menu_link_update() fired correctly');
- // Delete the item.
- menu_link_maintain('menu_test', 'delete', 'menu_test_maintain/4', '');
- $this->assertEqual(menu_test_static_variable(), 'delete', 'hook_menu_link_delete() fired correctly');
- }
-
- /**
- * Test menu link 'options' storage and rendering.
- */
- function testMenuLinkOptions() {
- // Create a menu link with options.
- $menu_link = array(
- 'link_title' => 'Menu link options test',
- 'link_path' => 'node',
- 'module' => 'menu_test',
- 'options' => array(
- 'attributes' => array(
- 'title' => 'Test title attribute',
- ),
- 'query' => array(
- 'testparam' => 'testvalue',
- ),
- ),
- );
- menu_link_save($menu_link);
-
- // Load front page.
- $this->drupalGet('node');
- $this->assertRaw('title="Test title attribute"', 'Title attribute of a menu link renders.');
- $this->assertRaw('testparam=testvalue', 'Query parameter added to menu link.');
- }
-
- /**
- * Tests the possible ways to set the title for menu items.
- * Also tests that menu item titles work with string overrides.
- */
- function testMenuItemTitlesCases() {
-
- // Build array with string overrides.
- $test_data = array(
- 1 => array('Example title - Case 1' => 'Alternative example title - Case 1'),
- 2 => array('Example @sub1 - Case @op2' => 'Alternative example @sub1 - Case @op2'),
- 3 => array('Example title' => 'Alternative example title'),
- 4 => array('Example title' => 'Alternative example title'),
- );
-
- foreach ($test_data as $case_no => $override) {
- $this->menuItemTitlesCasesHelper($case_no);
- variable_set('locale_custom_strings_en', array('' => $override));
- $this->menuItemTitlesCasesHelper($case_no, TRUE);
- variable_set('locale_custom_strings_en', array());
- }
- }
-
- /**
- * Get a URL and assert the title given a case number. If override is true,
- * the title is asserted to begin with "Alternative".
- */
- private function menuItemTitlesCasesHelper($case_no, $override = FALSE) {
- $this->drupalGet('menu-title-test/case' . $case_no);
- $this->assertResponse(200);
- $asserted_title = $override ? 'Alternative example title - Case ' . $case_no : 'Example title - Case ' . $case_no;
- $this->assertTitle($asserted_title . ' | Drupal', format_string('Menu title is: %title.', array('%title' => $asserted_title)), 'Menu');
- }
-
- /**
- * Load the router for a given path.
- */
- protected function menuLoadRouter($router_path) {
- return db_query('SELECT * FROM {menu_router} WHERE path = :path', array(':path' => $router_path))->fetchAssoc();
- }
-
- /**
- * Tests inheritance of 'load arguments'.
- */
- function testMenuLoadArgumentsInheritance() {
- $expected = array(
- 'menu-test/arguments/%/%' => array(
- 2 => array('menu_test_argument_load' => array(3)),
- 3 => NULL,
- ),
- // Arguments are inherited to normal children.
- 'menu-test/arguments/%/%/default' => array(
- 2 => array('menu_test_argument_load' => array(3)),
- 3 => NULL,
- ),
- // Arguments are inherited to tab children.
- 'menu-test/arguments/%/%/task' => array(
- 2 => array('menu_test_argument_load' => array(3)),
- 3 => NULL,
- ),
- // Arguments are only inherited to the same loader functions.
- 'menu-test/arguments/%/%/common-loader' => array(
- 2 => array('menu_test_argument_load' => array(3)),
- 3 => 'menu_test_other_argument_load',
- ),
- // Arguments are not inherited to children not using the same loader
- // function.
- 'menu-test/arguments/%/%/different-loaders-1' => array(
- 2 => NULL,
- 3 => 'menu_test_argument_load',
- ),
- 'menu-test/arguments/%/%/different-loaders-2' => array(
- 2 => 'menu_test_other_argument_load',
- 3 => NULL,
- ),
- 'menu-test/arguments/%/%/different-loaders-3' => array(
- 2 => NULL,
- 3 => NULL,
- ),
- // Explicit loader arguments should not be overriden by parent.
- 'menu-test/arguments/%/%/explicit-arguments' => array(
- 2 => array('menu_test_argument_load' => array()),
- 3 => NULL,
- ),
- );
-
- foreach ($expected as $router_path => $load_functions) {
- $router_item = $this->menuLoadRouter($router_path);
- $this->assertIdentical(unserialize($router_item['load_functions']), $load_functions, format_string('Expected load functions for router %router_path' , array('%router_path' => $router_path)));
- }
- }
-}
-
-/**
- * Tests for menu links.
- */
-class MenuLinksUnitTestCase extends DrupalWebTestCase {
- // Use the lightweight testing profile for this test.
- protected $profile = 'testing';
-
- public static function getInfo() {
- return array(
- 'name' => 'Menu links',
- 'description' => 'Test handling of menu links hierarchies.',
- 'group' => 'Menu',
- );
- }
-
- /**
- * Create a simple hierarchy of links.
- */
- function createLinkHierarchy($module = 'menu_test') {
- // First remove all the menu links.
- db_truncate('menu_links')->execute();
-
- // Then create a simple link hierarchy:
- // - $parent
- // - $child-1
- // - $child-1-1
- // - $child-1-2
- // - $child-2
- $base_options = array(
- 'link_title' => 'Menu link test',
- 'module' => $module,
- 'menu_name' => 'menu_test',
- );
-
- $links['parent'] = $base_options + array(
- 'link_path' => 'menu-test/parent',
- );
- menu_link_save($links['parent']);
-
- $links['child-1'] = $base_options + array(
- 'link_path' => 'menu-test/parent/child-1',
- 'plid' => $links['parent']['mlid'],
- );
- menu_link_save($links['child-1']);
-
- $links['child-1-1'] = $base_options + array(
- 'link_path' => 'menu-test/parent/child-1/child-1-1',
- 'plid' => $links['child-1']['mlid'],
- );
- menu_link_save($links['child-1-1']);
-
- $links['child-1-2'] = $base_options + array(
- 'link_path' => 'menu-test/parent/child-1/child-1-2',
- 'plid' => $links['child-1']['mlid'],
- );
- menu_link_save($links['child-1-2']);
-
- $links['child-2'] = $base_options + array(
- 'link_path' => 'menu-test/parent/child-2',
- 'plid' => $links['parent']['mlid'],
- );
- menu_link_save($links['child-2']);
-
- return $links;
- }
-
- /**
- * Assert that at set of links is properly parented.
- */
- function assertMenuLinkParents($links, $expected_hierarchy) {
- foreach ($expected_hierarchy as $child => $parent) {
- $mlid = $links[$child]['mlid'];
- $plid = $parent ? $links[$parent]['mlid'] : 0;
-
- $menu_link = menu_link_load($mlid);
- menu_link_save($menu_link);
- $this->assertEqual($menu_link['plid'], $plid, format_string('Menu link %mlid has parent of %plid, expected %expected_plid.', array('%mlid' => $mlid, '%plid' => $menu_link['plid'], '%expected_plid' => $plid)));
- }
- }
-
- /**
- * Test automatic reparenting of menu links.
- */
- function testMenuLinkReparenting($module = 'menu_test') {
- // Check the initial hierarchy.
- $links = $this->createLinkHierarchy($module);
-
- $expected_hierarchy = array(
- 'parent' => FALSE,
- 'child-1' => 'parent',
- 'child-1-1' => 'child-1',
- 'child-1-2' => 'child-1',
- 'child-2' => 'parent',
- );
- $this->assertMenuLinkParents($links, $expected_hierarchy);
-
- // Start over, and move child-1 under child-2, and check that all the
- // childs of child-1 have been moved too.
- $links = $this->createLinkHierarchy($module);
- $links['child-1']['plid'] = $links['child-2']['mlid'];
- menu_link_save($links['child-1']);
-
- $expected_hierarchy = array(
- 'parent' => FALSE,
- 'child-1' => 'child-2',
- 'child-1-1' => 'child-1',
- 'child-1-2' => 'child-1',
- 'child-2' => 'parent',
- );
- $this->assertMenuLinkParents($links, $expected_hierarchy);
-
- // Start over, and delete child-1, and check that the children of child-1
- // have been reassigned to the parent. menu_link_delete() will cowardly
- // refuse to delete a menu link defined by the system module, so skip the
- // test in that case.
- if ($module != 'system') {
- $links = $this->createLinkHierarchy($module);
- menu_link_delete($links['child-1']['mlid']);
-
- $expected_hierarchy = array(
- 'parent' => FALSE,
- 'child-1-1' => 'parent',
- 'child-1-2' => 'parent',
- 'child-2' => 'parent',
- );
- $this->assertMenuLinkParents($links, $expected_hierarchy);
- }
-
- // Start over, forcefully delete child-1 from the database, simulating a
- // database crash. Check that the children of child-1 have been reassigned
- // to the parent, going up on the old path hierarchy stored in each of the
- // links.
- $links = $this->createLinkHierarchy($module);
- // Don't do that at home.
- db_delete('menu_links')
- ->condition('mlid', $links['child-1']['mlid'])
- ->execute();
-
- $expected_hierarchy = array(
- 'parent' => FALSE,
- 'child-1-1' => 'parent',
- 'child-1-2' => 'parent',
- 'child-2' => 'parent',
- );
- $this->assertMenuLinkParents($links, $expected_hierarchy);
-
- // Start over, forcefully delete the parent from the database, simulating a
- // database crash. Check that the children of parent are now top-level.
- $links = $this->createLinkHierarchy($module);
- // Don't do that at home.
- db_delete('menu_links')
- ->condition('mlid', $links['parent']['mlid'])
- ->execute();
-
- $expected_hierarchy = array(
- 'child-1-1' => 'child-1',
- 'child-1-2' => 'child-1',
- 'child-2' => FALSE,
- );
- $this->assertMenuLinkParents($links, $expected_hierarchy);
- }
-
- /**
- * Test automatic reparenting of menu links derived from menu routers.
- */
- function testMenuLinkRouterReparenting() {
- // Run all the standard parenting tests on menu links derived from
- // menu routers.
- $this->testMenuLinkReparenting('system');
-
- // Additionnaly, test reparenting based on path.
- $links = $this->createLinkHierarchy('system');
-
- // Move child-1-2 has a child of child-2, making the link hierarchy
- // inconsistent with the path hierarchy.
- $links['child-1-2']['plid'] = $links['child-2']['mlid'];
- menu_link_save($links['child-1-2']);
-
- // Check the new hierarchy.
- $expected_hierarchy = array(
- 'parent' => FALSE,
- 'child-1' => 'parent',
- 'child-1-1' => 'child-1',
- 'child-2' => 'parent',
- 'child-1-2' => 'child-2',
- );
- $this->assertMenuLinkParents($links, $expected_hierarchy);
-
- // Now delete 'parent' directly from the database, simulating a database
- // crash. 'child-1' and 'child-2' should get moved to the
- // top-level.
- // Don't do that at home.
- db_delete('menu_links')
- ->condition('mlid', $links['parent']['mlid'])
- ->execute();
- $expected_hierarchy = array(
- 'child-1' => FALSE,
- 'child-1-1' => 'child-1',
- 'child-2' => FALSE,
- 'child-1-2' => 'child-2',
- );
- $this->assertMenuLinkParents($links, $expected_hierarchy);
-
- // Now delete 'child-2' directly from the database, simulating a database
- // crash. 'child-1-2' will get reparented under 'child-1' based on its
- // path.
- // Don't do that at home.
- db_delete('menu_links')
- ->condition('mlid', $links['child-2']['mlid'])
- ->execute();
- $expected_hierarchy = array(
- 'child-1' => FALSE,
- 'child-1-1' => 'child-1',
- 'child-1-2' => 'child-1',
- );
- $this->assertMenuLinkParents($links, $expected_hierarchy);
- }
-}
-
-/**
- * Tests rebuilding the menu by setting 'menu_rebuild_needed.'
- */
-class MenuRebuildTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Menu rebuild test',
- 'description' => 'Test rebuilding of menu.',
- 'group' => 'Menu',
- );
- }
-
- /**
- * Test if the 'menu_rebuild_needed' variable triggers a menu_rebuild() call.
- */
- function testMenuRebuildByVariable() {
- // Check if 'admin' path exists.
- $admin_exists = db_query('SELECT path from {menu_router} WHERE path = :path', array(':path' => 'admin'))->fetchField();
- $this->assertEqual($admin_exists, 'admin', "The path 'admin/' exists prior to deleting.");
-
- // Delete the path item 'admin', and test that the path doesn't exist in the database.
- $delete = db_delete('menu_router')
- ->condition('path', 'admin')
- ->execute();
- $admin_exists = db_query('SELECT path from {menu_router} WHERE path = :path', array(':path' => 'admin'))->fetchField();
- $this->assertFalse($admin_exists, "The path 'admin/' has been deleted and doesn't exist in the database.");
-
- // Now we enable the rebuild variable and trigger menu_execute_active_handler()
- // to rebuild the menu item. Now 'admin' should exist.
- variable_set('menu_rebuild_needed', TRUE);
- // menu_execute_active_handler() should trigger the rebuild.
- $this->drupalGet('');
- $admin_exists = db_query('SELECT path from {menu_router} WHERE path = :path', array(':path' => 'admin'))->fetchField();
- $this->assertEqual($admin_exists, 'admin', "The menu has been rebuilt, the path 'admin' now exists again.");
- }
-
-}
-
-/**
- * Menu tree data related tests.
- */
-class MenuTreeDataTestCase extends DrupalUnitTestCase {
- /**
- * Dummy link structure acceptable for menu_tree_data().
- */
- var $links = array(
- 1 => array('mlid' => 1, 'depth' => 1),
- 2 => array('mlid' => 2, 'depth' => 1),
- 3 => array('mlid' => 3, 'depth' => 2),
- 4 => array('mlid' => 4, 'depth' => 3),
- 5 => array('mlid' => 5, 'depth' => 1),
- );
-
- public static function getInfo() {
- return array(
- 'name' => 'Menu tree generation',
- 'description' => 'Tests recursive menu tree generation functions.',
- 'group' => 'Menu',
- );
- }
-
- /**
- * Validate the generation of a proper menu tree hierarchy.
- */
- function testMenuTreeData() {
- $tree = menu_tree_data($this->links);
-
- // Validate that parent items #1, #2, and #5 exist on the root level.
- $this->assertSameLink($this->links[1], $tree[1]['link'], 'Parent item #1 exists.');
- $this->assertSameLink($this->links[2], $tree[2]['link'], 'Parent item #2 exists.');
- $this->assertSameLink($this->links[5], $tree[5]['link'], 'Parent item #5 exists.');
-
- // Validate that child item #4 exists at the correct location in the hierarchy.
- $this->assertSameLink($this->links[4], $tree[2]['below'][3]['below'][4]['link'], 'Child item #4 exists in the hierarchy.');
- }
-
- /**
- * Check that two menu links are the same by comparing the mlid.
- *
- * @param $link1
- * A menu link item.
- * @param $link2
- * A menu link item.
- * @param $message
- * The message to display along with the assertion.
- * @return
- * TRUE if the assertion succeeded, FALSE otherwise.
- */
- protected function assertSameLink($link1, $link2, $message = '') {
- return $this->assert($link1['mlid'] == $link2['mlid'], $message ? $message : 'First link is identical to second link');
- }
-}
-
-/**
- * Menu tree output related tests.
- */
-class MenuTreeOutputTestCase extends DrupalWebTestCase {
- /**
- * Dummy link structure acceptable for menu_tree_output().
- */
- var $tree_data = array(
- '1'=> array(
- 'link' => array( 'menu_name' => 'main-menu', 'mlid' => 1, 'hidden'=>0, 'has_children' => 1, 'title' => 'Item 1', 'in_active_trail' => 1, 'access'=>1, 'href' => 'a', 'localized_options' => array('attributes' => array('title' =>'')) ),
- 'below' => array(
- '2' => array('link' => array( 'menu_name' => 'main-menu', 'mlid' => 2, 'hidden'=>0, 'has_children' => 1, 'title' => 'Item 2', 'in_active_trail' => 1, 'access'=>1, 'href' => 'a/b', 'localized_options' => array('attributes' => array('title' =>'')) ),
- 'below' => array(
- '3' => array('link' => array( 'menu_name' => 'main-menu', 'mlid' => 3, 'hidden'=>0, 'has_children' => 0, 'title' => 'Item 3', 'in_active_trail' => 0, 'access'=>1, 'href' => 'a/b/c', 'localized_options' => array('attributes' => array('title' =>'')) ),
- 'below' => array() ),
- '4' => array('link' => array( 'menu_name' => 'main-menu', 'mlid' => 4, 'hidden'=>0, 'has_children' => 0, 'title' => 'Item 4', 'in_active_trail' => 0, 'access'=>1, 'href' => 'a/b/d', 'localized_options' => array('attributes' => array('title' =>'')) ),
- 'below' => array() )
- )
- )
- )
- ),
- '5' => array('link' => array( 'menu_name' => 'main-menu', 'mlid' => 5, 'hidden'=>1, 'has_children' => 0, 'title' => 'Item 5', 'in_active_trail' => 0, 'access'=>1, 'href' => 'e', 'localized_options' => array('attributes' => array('title' =>'')) ), 'below' => array( ) ),
- '6' => array('link' => array( 'menu_name' => 'main-menu', 'mlid' => 6, 'hidden'=>0, 'has_children' => 0, 'title' => 'Item 6', 'in_active_trail' => 0, 'access'=>0, 'href' => 'f', 'localized_options' => array('attributes' => array('title' =>'')) ), 'below' => array( ) ),
- '7' => array('link' => array( 'menu_name' => 'main-menu', 'mlid' => 7, 'hidden'=>0, 'has_children' => 0, 'title' => 'Item 7', 'in_active_trail' => 0, 'access'=>1, 'href' => 'g', 'localized_options' => array('attributes' => array('title' =>'')) ), 'below' => array( ) )
- );
-
- public static function getInfo() {
- return array(
- 'name' => 'Menu tree output',
- 'description' => 'Tests menu tree output functions.',
- 'group' => 'Menu',
- );
- }
-
- function setUp() {
- parent::setUp();
- }
-
- /**
- * Validate the generation of a proper menu tree output.
- */
- function testMenuTreeData() {
- $output = menu_tree_output($this->tree_data);
-
- // Validate that the - in main-menu is changed into an underscore
- $this->assertEqual($output['1']['#theme'], 'menu_link__main_menu', 'Hyphen is changed to an underscore on menu_link');
- $this->assertEqual($output['#theme_wrappers'][0], 'menu_tree__main_menu', 'Hyphen is changed to an underscore on menu_tree wrapper');
- // Looking for child items in the data
- $this->assertEqual( $output['1']['#below']['2']['#href'], 'a/b', 'Checking the href on a child item');
- $this->assertTrue( in_array('active-trail',$output['1']['#below']['2']['#attributes']['class']) , 'Checking the active trail class');
- // Validate that the hidden and no access items are missing
- $this->assertFalse( isset($output['5']), 'Hidden item should be missing');
- $this->assertFalse( isset($output['6']), 'False access should be missing');
- // Item 7 is after a couple hidden items. Just to make sure that 5 and 6 are skipped and 7 still included
- $this->assertTrue( isset($output['7']), 'Item after hidden items is present');
- }
-}
-
-/**
- * Menu breadcrumbs related tests.
- */
-class MenuBreadcrumbTestCase extends MenuWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Breadcrumbs',
- 'description' => 'Tests breadcrumbs functionality.',
- 'group' => 'Menu',
- );
- }
-
- function setUp() {
- $modules = func_get_args();
- if (isset($modules[0]) && is_array($modules[0])) {
- $modules = $modules[0];
- }
- $modules[] = 'menu_test';
- parent::setUp($modules);
- $perms = array_keys(module_invoke_all('permission'));
- $this->admin_user = $this->drupalCreateUser($perms);
- $this->drupalLogin($this->admin_user);
-
- // This test puts menu links in the Navigation menu and then tests for
- // their presence on the page, so we need to ensure that the Navigation
- // block will be displayed in all active themes.
- db_update('block')
- ->fields(array(
- // Use a region that is valid for all themes.
- 'region' => 'content',
- 'status' => 1,
- ))
- ->condition('module', 'system')
- ->condition('delta', 'navigation')
- ->execute();
- }
-
- /**
- * Tests breadcrumbs on node and administrative paths.
- */
- function testBreadCrumbs() {
- // Prepare common base breadcrumb elements.
- $home = array('' => 'Home');
- $admin = $home + array('admin' => t('Administration'));
- $config = $admin + array('admin/config' => t('Configuration'));
- $type = 'article';
- $langcode = LANGUAGE_NONE;
-
- // Verify breadcrumbs for default local tasks.
- $expected = array(
- 'menu-test' => t('Menu test root'),
- );
- $title = t('Breadcrumbs test: Local tasks');
- $trail = $home + $expected;
- $tree = $expected + array(
- 'menu-test/breadcrumb/tasks' => $title,
- );
- $this->assertBreadcrumb('menu-test/breadcrumb/tasks', $trail, $title, $tree);
- $this->assertBreadcrumb('menu-test/breadcrumb/tasks/first', $trail, $title, $tree);
- $this->assertBreadcrumb('menu-test/breadcrumb/tasks/first/first', $trail, $title, $tree);
- $trail += array(
- 'menu-test/breadcrumb/tasks' => t('Breadcrumbs test: Local tasks'),
- );
- $this->assertBreadcrumb('menu-test/breadcrumb/tasks/first/second', $trail, $title, $tree);
- $this->assertBreadcrumb('menu-test/breadcrumb/tasks/second', $trail, $title, $tree);
- $this->assertBreadcrumb('menu-test/breadcrumb/tasks/second/first', $trail, $title, $tree);
- $trail += array(
- 'menu-test/breadcrumb/tasks/second' => t('Second'),
- );
- $this->assertBreadcrumb('menu-test/breadcrumb/tasks/second/second', $trail, $title, $tree);
-
- // Verify Taxonomy administration breadcrumbs.
- $trail = $admin + array(
- 'admin/structure' => t('Structure'),
- );
- $this->assertBreadcrumb('admin/structure/taxonomy', $trail);
-
- $trail += array(
- 'admin/structure/taxonomy' => t('Taxonomy'),
- );
- $this->assertBreadcrumb('admin/structure/taxonomy/tags', $trail);
- $trail += array(
- 'admin/structure/taxonomy/tags' => t('Tags'),
- );
- $this->assertBreadcrumb('admin/structure/taxonomy/tags/edit', $trail);
- $this->assertBreadcrumb('admin/structure/taxonomy/tags/fields', $trail);
- $this->assertBreadcrumb('admin/structure/taxonomy/tags/add', $trail);
-
- // Verify Menu administration breadcrumbs.
- $trail = $admin + array(
- 'admin/structure' => t('Structure'),
- );
- $this->assertBreadcrumb('admin/structure/menu', $trail);
-
- $trail += array(
- 'admin/structure/menu' => t('Menus'),
- );
- $this->assertBreadcrumb('admin/structure/menu/manage/navigation', $trail);
- $trail += array(
- 'admin/structure/menu/manage/navigation' => t('Navigation'),
- );
- $this->assertBreadcrumb("admin/structure/menu/item/6/edit", $trail);
- $this->assertBreadcrumb('admin/structure/menu/manage/navigation/edit', $trail);
- $this->assertBreadcrumb('admin/structure/menu/manage/navigation/add', $trail);
-
- // Verify Node administration breadcrumbs.
- $trail = $admin + array(
- 'admin/structure' => t('Structure'),
- 'admin/structure/types' => t('Content types'),
- );
- $this->assertBreadcrumb('admin/structure/types/add', $trail);
- $this->assertBreadcrumb("admin/structure/types/manage/$type", $trail);
- $trail += array(
- "admin/structure/types/manage/$type" => t('Article'),
- );
- $this->assertBreadcrumb("admin/structure/types/manage/$type/fields", $trail);
- $this->assertBreadcrumb("admin/structure/types/manage/$type/display", $trail);
- $trail_teaser = $trail + array(
- "admin/structure/types/manage/$type/display" => t('Manage display'),
- );
- $this->assertBreadcrumb("admin/structure/types/manage/$type/display/teaser", $trail_teaser);
- $this->assertBreadcrumb("admin/structure/types/manage/$type/comment/fields", $trail);
- $this->assertBreadcrumb("admin/structure/types/manage/$type/comment/display", $trail);
- $this->assertBreadcrumb("admin/structure/types/manage/$type/delete", $trail);
- $trail += array(
- "admin/structure/types/manage/$type/fields" => t('Manage fields'),
- );
- $this->assertBreadcrumb("admin/structure/types/manage/$type/fields/body", $trail);
- $trail += array(
- "admin/structure/types/manage/$type/fields/body" => t('Body'),
- );
- $this->assertBreadcrumb("admin/structure/types/manage/$type/fields/body/widget-type", $trail);
-
- // Verify Filter text format administration breadcrumbs.
- $format = db_query_range("SELECT format, name FROM {filter_format}", 1, 1)->fetch();
- $format_id = $format->format;
- $trail = $config + array(
- 'admin/config/content' => t('Content authoring'),
- );
- $this->assertBreadcrumb('admin/config/content/formats', $trail);
-
- $trail += array(
- 'admin/config/content/formats' => t('Text formats'),
- );
- $this->assertBreadcrumb('admin/config/content/formats/add', $trail);
- $this->assertBreadcrumb("admin/config/content/formats/$format_id", $trail);
- $trail += array(
- "admin/config/content/formats/$format_id" => $format->name,
- );
- $this->assertBreadcrumb("admin/config/content/formats/$format_id/disable", $trail);
-
- // Verify node breadcrumbs (without menu link).
- $node1 = $this->drupalCreateNode();
- $nid1 = $node1->nid;
- $trail = $home;
- $this->assertBreadcrumb("node/$nid1", $trail);
- // Also verify that the node does not appear elsewhere (e.g., menu trees).
- $this->assertNoLink($node1->title);
- // The node itself should not be contained in the breadcrumb on the default
- // local task, since there is no difference between both pages.
- $this->assertBreadcrumb("node/$nid1/view", $trail);
- // Also verify that the node does not appear elsewhere (e.g., menu trees).
- $this->assertNoLink($node1->title);
-
- $trail += array(
- "node/$nid1" => $node1->title,
- );
- $this->assertBreadcrumb("node/$nid1/edit", $trail);
-
- // Verify that breadcrumb on node listing page contains "Home" only.
- $trail = array();
- $this->assertBreadcrumb('node', $trail);
-
- // Verify node breadcrumbs (in menu).
- // Do this separately for Main menu and Navigation menu, since only the
- // latter is a preferred menu by default.
- // @todo Also test all themes? Manually testing led to the suspicion that
- // breadcrumbs may differ, possibly due to template.php overrides.
- $menus = array('main-menu', 'navigation');
- // Alter node type menu settings.
- variable_set("menu_options_$type", $menus);
- variable_set("menu_parent_$type", 'navigation:0');
-
- foreach ($menus as $menu) {
- // Create a parent node in the current menu.
- $title = $this->randomName();
- $node2 = $this->drupalCreateNode(array(
- 'type' => $type,
- 'title' => $title,
- 'menu' => array(
- 'enabled' => 1,
- 'link_title' => 'Parent ' . $title,
- 'description' => '',
- 'menu_name' => $menu,
- 'plid' => 0,
- ),
- ));
- $nid2 = $node2->nid;
-
- $trail = $home;
- $tree = array(
- "node/$nid2" => $node2->menu['link_title'],
- );
- $this->assertBreadcrumb("node/$nid2", $trail, $node2->title, $tree);
- // The node itself should not be contained in the breadcrumb on the
- // default local task, since there is no difference between both pages.
- $this->assertBreadcrumb("node/$nid2/view", $trail, $node2->title, $tree);
- $trail += array(
- "node/$nid2" => $node2->menu['link_title'],
- );
- $this->assertBreadcrumb("node/$nid2/edit", $trail);
-
- // Create a child node in the current menu.
- $title = $this->randomName();
- $node3 = $this->drupalCreateNode(array(
- 'type' => $type,
- 'title' => $title,
- 'menu' => array(
- 'enabled' => 1,
- 'link_title' => 'Child ' . $title,
- 'description' => '',
- 'menu_name' => $menu,
- 'plid' => $node2->menu['mlid'],
- ),
- ));
- $nid3 = $node3->nid;
-
- $this->assertBreadcrumb("node/$nid3", $trail, $node3->title, $tree, FALSE);
- // The node itself should not be contained in the breadcrumb on the
- // default local task, since there is no difference between both pages.
- $this->assertBreadcrumb("node/$nid3/view", $trail, $node3->title, $tree, FALSE);
- $trail += array(
- "node/$nid3" => $node3->menu['link_title'],
- );
- $tree += array(
- "node/$nid3" => $node3->menu['link_title'],
- );
- $this->assertBreadcrumb("node/$nid3/edit", $trail);
-
- // Verify that node listing page still contains "Home" only.
- $trail = array();
- $this->assertBreadcrumb('node', $trail);
-
- if ($menu == 'navigation') {
- $parent = $node2;
- $child = $node3;
- }
- }
-
- // Create a Navigation menu link for 'node', move the last parent node menu
- // link below it, and verify a full breadcrumb for the last child node.
- $menu = 'navigation';
- $edit = array(
- 'link_title' => 'Root',
- 'link_path' => 'node',
- );
- $this->drupalPost("admin/structure/menu/manage/$menu/add", $edit, t('Save'));
- $link = db_query('SELECT * FROM {menu_links} WHERE link_title = :title', array(':title' => 'Root'))->fetchAssoc();
-
- $edit = array(
- 'menu[parent]' => $link['menu_name'] . ':' . $link['mlid'],
- );
- $this->drupalPost("node/{$parent->nid}/edit", $edit, t('Save'));
- $expected = array(
- "node" => $link['link_title'],
- );
- $trail = $home + $expected;
- $tree = $expected + array(
- "node/{$parent->nid}" => $parent->menu['link_title'],
- );
- $this->assertBreadcrumb(NULL, $trail, $parent->title, $tree);
- $trail += array(
- "node/{$parent->nid}" => $parent->menu['link_title'],
- );
- $tree += array(
- "node/{$child->nid}" => $child->menu['link_title'],
- );
- $this->assertBreadcrumb("node/{$child->nid}", $trail, $child->title, $tree);
-
- // Add a taxonomy term/tag to last node, and add a link for that term to the
- // Navigation menu.
- $tags = array(
- 'Drupal' => array(),
- 'Breadcrumbs' => array(),
- );
- $edit = array(
- "field_tags[$langcode]" => implode(',', array_keys($tags)),
- );
- $this->drupalPost("node/{$parent->nid}/edit", $edit, t('Save'));
-
- // Put both terms into a hierarchy Drupal » Breadcrumbs. Required for both
- // the menu links and the terms itself, since taxonomy_term_page() resets
- // the breadcrumb based on taxonomy term hierarchy.
- $parent_tid = 0;
- foreach ($tags as $name => $null) {
- $terms = taxonomy_term_load_multiple(NULL, array('name' => $name));
- $term = reset($terms);
- $tags[$name]['term'] = $term;
- if ($parent_tid) {
- $edit = array(
- 'parent[]' => array($parent_tid),
- );
- $this->drupalPost("taxonomy/term/{$term->tid}/edit", $edit, t('Save'));
- }
- $parent_tid = $term->tid;
- }
- $parent_mlid = 0;
- foreach ($tags as $name => $data) {
- $term = $data['term'];
- $edit = array(
- 'link_title' => "$name link",
- 'link_path' => "taxonomy/term/{$term->tid}",
- 'parent' => "$menu:{$parent_mlid}",
- );
- $this->drupalPost("admin/structure/menu/manage/$menu/add", $edit, t('Save'));
- $tags[$name]['link'] = db_query('SELECT * FROM {menu_links} WHERE link_title = :title AND link_path = :href', array(
- ':title' => $edit['link_title'],
- ':href' => $edit['link_path'],
- ))->fetchAssoc();
- $tags[$name]['link']['link_path'] = $edit['link_path'];
- $parent_mlid = $tags[$name]['link']['mlid'];
- }
-
- // Verify expected breadcrumbs for menu links.
- $trail = $home;
- $tree = array();
- foreach ($tags as $name => $data) {
- $term = $data['term'];
- $link = $data['link'];
-
- $tree += array(
- $link['link_path'] => $link['link_title'],
- );
- $this->assertBreadcrumb($link['link_path'], $trail, $term->name, $tree);
- $this->assertRaw(check_plain($parent->title), 'Tagged node found.');
-
- // Additionally make sure that this link appears only once; i.e., the
- // untranslated menu links automatically generated from menu router items
- // ('taxonomy/term/%') should never be translated and appear in any menu
- // other than the breadcrumb trail.
- $elements = $this->xpath('//div[@id=:menu]/descendant::a[@href=:href]', array(
- ':menu' => 'block-system-navigation',
- ':href' => url($link['link_path']),
- ));
- $this->assertTrue(count($elements) == 1, "Link to {$link['link_path']} appears only once.");
-
- // Next iteration should expect this tag as parent link.
- // Note: Term name, not link name, due to taxonomy_term_page().
- $trail += array(
- $link['link_path'] => $term->name,
- );
- }
-
- // Verify breadcrumbs on user and user/%.
- // We need to log back in and out below, and cannot simply grant the
- // 'administer users' permission, since user_page() makes your head explode.
- user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array(
- 'access user profiles',
- ));
- $this->drupalLogout();
-
- // Verify breadcrumb on front page.
- $this->assertBreadcrumb('', array());
-
- // Verify breadcrumb on user pages (without menu link) for anonymous user.
- $trail = $home;
- $this->assertBreadcrumb('user', $trail, t('User account'));
- $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $this->admin_user->name);
-
- // Verify breadcrumb on user pages (without menu link) for registered users.
- $this->drupalLogin($this->admin_user);
- $trail = $home;
- $this->assertBreadcrumb('user', $trail, $this->admin_user->name);
- $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $this->admin_user->name);
- $trail += array(
- 'user/' . $this->admin_user->uid => $this->admin_user->name,
- );
- $this->assertBreadcrumb('user/' . $this->admin_user->uid . '/edit', $trail, $this->admin_user->name);
-
- // Create a second user to verify breadcrumb on user pages again.
- $this->web_user = $this->drupalCreateUser(array(
- 'administer users',
- 'access user profiles',
- ));
- $this->drupalLogin($this->web_user);
-
- // Verify correct breadcrumb and page title on another user's account pages
- // (without menu link).
- $trail = $home;
- $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $this->admin_user->name);
- $trail += array(
- 'user/' . $this->admin_user->uid => $this->admin_user->name,
- );
- $this->assertBreadcrumb('user/' . $this->admin_user->uid . '/edit', $trail, $this->admin_user->name);
-
- // Verify correct breadcrumb and page title when viewing own user account
- // pages (without menu link).
- $trail = $home;
- $this->assertBreadcrumb('user/' . $this->web_user->uid, $trail, $this->web_user->name);
- $trail += array(
- 'user/' . $this->web_user->uid => $this->web_user->name,
- );
- $this->assertBreadcrumb('user/' . $this->web_user->uid . '/edit', $trail, $this->web_user->name);
-
- // Add a Navigation menu links for 'user' and $this->admin_user.
- // Although it may be faster to manage these links via low-level API
- // functions, there's a lot that can go wrong in doing so.
- $this->drupalLogin($this->admin_user);
- $edit = array(
- 'link_title' => 'User',
- 'link_path' => 'user',
- );
- $this->drupalPost("admin/structure/menu/manage/$menu/add", $edit, t('Save'));
- $link_user = db_query('SELECT * FROM {menu_links} WHERE link_title = :title AND link_path = :href', array(
- ':title' => $edit['link_title'],
- ':href' => $edit['link_path'],
- ))->fetchAssoc();
-
- $edit = array(
- 'link_title' => $this->admin_user->name . ' link',
- 'link_path' => 'user/' . $this->admin_user->uid,
- );
- $this->drupalPost("admin/structure/menu/manage/$menu/add", $edit, t('Save'));
- $link_admin_user = db_query('SELECT * FROM {menu_links} WHERE link_title = :title AND link_path = :href', array(
- ':title' => $edit['link_title'],
- ':href' => $edit['link_path'],
- ))->fetchAssoc();
-
- // Verify expected breadcrumbs for the two separate links.
- $this->drupalLogout();
- $trail = $home;
- $tree = array(
- $link_user['link_path'] => $link_user['link_title'],
- );
- $this->assertBreadcrumb('user', $trail, $link_user['link_title'], $tree);
- $tree = array(
- $link_admin_user['link_path'] => $link_admin_user['link_title'],
- );
- $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $link_admin_user['link_title'], $tree);
-
- $this->drupalLogin($this->admin_user);
- $trail += array(
- $link_admin_user['link_path'] => $link_admin_user['link_title'],
- );
- $this->assertBreadcrumb('user/' . $this->admin_user->uid . '/edit', $trail, $link_admin_user['link_title'], $tree, FALSE);
-
- // Move 'user/%' below 'user' and verify again.
- $edit = array(
- 'parent' => "$menu:{$link_user['mlid']}",
- );
- $this->drupalPost("admin/structure/menu/item/{$link_admin_user['mlid']}/edit", $edit, t('Save'));
-
- $this->drupalLogout();
- $trail = $home;
- $tree = array(
- $link_user['link_path'] => $link_user['link_title'],
- );
- $this->assertBreadcrumb('user', $trail, $link_user['link_title'], $tree);
- $trail += array(
- $link_user['link_path'] => $link_user['link_title'],
- );
- $tree += array(
- $link_admin_user['link_path'] => $link_admin_user['link_title'],
- );
- $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $link_admin_user['link_title'], $tree);
-
- $this->drupalLogin($this->admin_user);
- $trail += array(
- $link_admin_user['link_path'] => $link_admin_user['link_title'],
- );
- $this->assertBreadcrumb('user/' . $this->admin_user->uid . '/edit', $trail, $link_admin_user['link_title'], $tree, FALSE);
-
- // Create an only slightly privileged user being able to access site reports
- // but not administration pages.
- $this->web_user = $this->drupalCreateUser(array(
- 'access site reports',
- ));
- $this->drupalLogin($this->web_user);
-
- // Verify that we can access recent log entries, there is a corresponding
- // page title, and that the breadcrumb is empty (because the user is not
- // able to access "Administer", so the trail cannot recurse into it).
- $trail = array();
- $this->assertBreadcrumb('admin', $trail, t('Access denied'));
- $this->assertResponse(403);
-
- $trail = $home;
- $this->assertBreadcrumb('admin/reports', $trail, t('Reports'));
- $this->assertNoResponse(403);
-
- $this->assertBreadcrumb('admin/reports/dblog', $trail, t('Recent log messages'));
- $this->assertNoResponse(403);
- }
-}
-
-/**
- * Tests active menu trails.
- */
-class MenuTrailTestCase extends MenuWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Active trail',
- 'description' => 'Tests active menu trails and alteration functionality.',
- 'group' => 'Menu',
- );
- }
-
- function setUp() {
- $modules = func_get_args();
- if (isset($modules[0]) && is_array($modules[0])) {
- $modules = $modules[0];
- }
- $modules[] = 'menu_test';
- parent::setUp($modules);
- $this->admin_user = $this->drupalCreateUser(array('administer site configuration', 'access administration pages'));
- $this->drupalLogin($this->admin_user);
-
- // This test puts menu links in the Navigation menu and then tests for
- // their presence on the page, so we need to ensure that the Navigation
- // block will be displayed in all active themes.
- db_update('block')
- ->fields(array(
- // Use a region that is valid for all themes.
- 'region' => 'content',
- 'status' => 1,
- ))
- ->condition('module', 'system')
- ->condition('delta', 'navigation')
- ->execute();
-
- // This test puts menu links in the Management menu and then tests for
- // their presence on the page, so we need to ensure that the Management
- // block will be displayed in all active themes.
- db_update('block')
- ->fields(array(
- // Use a region that is valid for all themes.
- 'region' => 'content',
- 'status' => 1,
- ))
- ->condition('module', 'system')
- ->condition('delta', 'management')
- ->execute();
- }
-
- /**
- * Tests active trails are properly affected by menu_tree_set_path().
- */
- function testMenuTreeSetPath() {
- $home = array('' => 'Home');
- $config_tree = array(
- 'admin' => t('Administration'),
- 'admin/config' => t('Configuration'),
- );
- $config = $home + $config_tree;
-
- // The menu_test_menu_tree_set_path system variable controls whether or not
- // the menu_test_menu_trail_callback() callback (used by all paths in these
- // tests) issues an overriding call to menu_trail_set_path().
- $test_menu_path = array(
- 'menu_name' => 'management',
- 'path' => 'admin/config/system/site-information',
- );
-
- $breadcrumb = $home + array(
- 'menu-test' => t('Menu test root'),
- );
- $tree = array(
- 'menu-test' => t('Menu test root'),
- 'menu-test/menu-trail' => t('Menu trail - Case 1'),
- );
-
- // Test the tree generation for the Navigation menu.
- variable_del('menu_test_menu_tree_set_path');
- $this->assertBreadcrumb('menu-test/menu-trail', $breadcrumb, t('Menu trail - Case 1'), $tree);
-
- // Override the active trail for the Management tree; it should not affect
- // the Navigation tree.
- variable_set('menu_test_menu_tree_set_path', $test_menu_path);
- $this->assertBreadcrumb('menu-test/menu-trail', $breadcrumb, t('Menu trail - Case 1'), $tree);
-
- $breadcrumb = $config + array(
- 'admin/config/development' => t('Development'),
- );
- $tree = $config_tree + array(
- 'admin/config/development' => t('Development'),
- 'admin/config/development/menu-trail' => t('Menu trail - Case 2'),
- );
-
- $override_breadcrumb = $config + array(
- 'admin/config/system' => t('System'),
- 'admin/config/system/site-information' => t('Site information'),
- );
- $override_tree = $config_tree + array(
- 'admin/config/system' => t('System'),
- 'admin/config/system/site-information' => t('Site information'),
- );
-
- // Test the tree generation for the Management menu.
- variable_del('menu_test_menu_tree_set_path');
- $this->assertBreadcrumb('admin/config/development/menu-trail', $breadcrumb, t('Menu trail - Case 2'), $tree);
-
- // Override the active trail for the Management tree; it should affect the
- // breadcrumbs and Management tree.
- variable_set('menu_test_menu_tree_set_path', $test_menu_path);
- $this->assertBreadcrumb('admin/config/development/menu-trail', $override_breadcrumb, t('Menu trail - Case 2'), $override_tree);
- }
-
- /**
- * Tests that the active trail works correctly on custom 403 and 404 pages.
- */
- function testCustom403And404Pages() {
- // Set the custom 403 and 404 pages we will use.
- variable_set('site_403', 'menu-test/custom-403-page');
- variable_set('site_404', 'menu-test/custom-404-page');
-
- // Define the paths we'll visit to trigger 403 and 404 responses during
- // this test, and the expected active trail for each case.
- $paths = array(
- 403 => 'admin/config',
- 404 => $this->randomName(),
- );
- // For the 403 page, the initial trail during the Drupal bootstrap should
- // include the page that the user is trying to visit, while the final trail
- // should reflect the custom 403 page that the user was redirected to.
- $expected_trail[403]['initial'] = array(
- '' => 'Home',
- 'admin/config' => 'Configuration',
- );
- $expected_trail[403]['final'] = array(
- '' => 'Home',
- 'menu-test' => 'Menu test root',
- 'menu-test/custom-403-page' => 'Custom 403 page',
- );
- // For the 404 page, the initial trail during the Drupal bootstrap should
- // only contain the link back to "Home" (since the page the user is trying
- // to visit doesn't have any menu items associated with it), while the
- // final trail should reflect the custom 404 page that the user was
- // redirected to.
- $expected_trail[404]['initial'] = array(
- '' => 'Home',
- );
- $expected_trail[404]['final'] = array(
- '' => 'Home',
- 'menu-test' => 'Menu test root',
- 'menu-test/custom-404-page' => 'Custom 404 page',
- );
-
- // Visit each path as an anonymous user so that we will actually get a 403
- // on admin/config.
- $this->drupalLogout();
- foreach (array(403, 404) as $status_code) {
- // Before visiting the page, trigger the code in the menu_test module
- // that will record the active trail (so we can check it in this test).
- variable_set('menu_test_record_active_trail', TRUE);
- $this->drupalGet($paths[$status_code]);
- $this->assertResponse($status_code);
-
- // Check that the initial trail (during the Drupal bootstrap) matches
- // what we expect.
- $initial_trail = variable_get('menu_test_active_trail_initial', array());
- $this->assertEqual(count($initial_trail), count($expected_trail[$status_code]['initial']), format_string('The initial active trail for a @status_code page contains the expected number of items (expected: @expected, found: @found).', array(
- '@status_code' => $status_code,
- '@expected' => count($expected_trail[$status_code]['initial']),
- '@found' => count($initial_trail),
- )));
- foreach (array_keys($expected_trail[$status_code]['initial']) as $index => $path) {
- $this->assertEqual($initial_trail[$index]['href'], $path, format_string('Element number @number of the initial active trail for a @status_code page contains the correct path (expected: @expected, found: @found)', array(
- '@number' => $index + 1,
- '@status_code' => $status_code,
- '@expected' => $path,
- '@found' => $initial_trail[$index]['href'],
- )));
- }
-
- // Check that the final trail (after the user has been redirected to the
- // custom 403/404 page) matches what we expect.
- $final_trail = variable_get('menu_test_active_trail_final', array());
- $this->assertEqual(count($final_trail), count($expected_trail[$status_code]['final']), format_string('The final active trail for a @status_code page contains the expected number of items (expected: @expected, found: @found).', array(
- '@status_code' => $status_code,
- '@expected' => count($expected_trail[$status_code]['final']),
- '@found' => count($final_trail),
- )));
- foreach (array_keys($expected_trail[$status_code]['final']) as $index => $path) {
- $this->assertEqual($final_trail[$index]['href'], $path, format_string('Element number @number of the final active trail for a @status_code page contains the correct path (expected: @expected, found: @found)', array(
- '@number' => $index + 1,
- '@status_code' => $status_code,
- '@expected' => $path,
- '@found' => $final_trail[$index]['href'],
- )));
- }
-
- // Check that the breadcrumb displayed on the final custom 403/404 page
- // matches what we expect. (The last item of the active trail represents
- // the current page, which is not supposed to appear in the breadcrumb,
- // so we need to remove it from the array before checking.)
- array_pop($expected_trail[$status_code]['final']);
- $this->assertBreadcrumb(NULL, $expected_trail[$status_code]['final']);
- }
- }
-}
diff --git a/modules/simpletest/tests/menu_test.info b/modules/simpletest/tests/menu_test.info
deleted file mode 100644
index c1c39c1..0000000
--- a/modules/simpletest/tests/menu_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Hook menu tests"
-description = "Support module for menu hook testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/menu_test.module b/modules/simpletest/tests/menu_test.module
deleted file mode 100644
index 0b954ae..0000000
--- a/modules/simpletest/tests/menu_test.module
+++ /dev/null
@@ -1,563 +0,0 @@
- 'Test menu_name router item',
- 'page callback' => 'node_save',
- 'menu_name' => menu_test_menu_name(),
- );
- // This item is of type MENU_CALLBACK with no parents to test title.
- $items['menu_callback_title'] = array(
- 'title' => 'Menu Callback Title',
- 'page callback' => 'menu_test_callback',
- 'type' => MENU_CALLBACK,
- 'access arguments' => array('access content'),
- );
- // Use FALSE as 'title callback' to bypass t().
- $items['menu_no_title_callback'] = array(
- 'title' => 'A title with @placeholder',
- 'title callback' => FALSE,
- 'title arguments' => array('@placeholder' => 'some other text'),
- 'page callback' => 'menu_test_callback',
- 'access arguments' => array('access content'),
- );
-
- // Hidden link for menu_link_maintain tests
- $items['menu_test_maintain/%'] = array(
- 'title' => 'Menu maintain test',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- );
- // Hierarchical tests.
- $items['menu-test/hierarchy/parent'] = array(
- 'title' => 'Parent menu router',
- 'page callback' => 'node_page_default',
- );
- $items['menu-test/hierarchy/parent/child'] = array(
- 'title' => 'Child menu router',
- 'page callback' => 'node_page_default',
- );
- $items['menu-test/hierarchy/parent/child2/child'] = array(
- 'title' => 'Unattached subchild router',
- 'page callback' => 'node_page_default',
- );
- // Theme callback tests.
- $items['menu-test/theme-callback/%'] = array(
- 'title' => 'Page that displays different themes',
- 'page callback' => 'menu_test_theme_page_callback',
- 'access arguments' => array('access content'),
- 'theme callback' => 'menu_test_theme_callback',
- 'theme arguments' => array(2),
- );
- $items['menu-test/theme-callback/%/inheritance'] = array(
- 'title' => 'Page that tests theme callback inheritance.',
- 'page callback' => 'menu_test_theme_page_callback',
- 'page arguments' => array(TRUE),
- 'access arguments' => array('access content'),
- );
- $items['menu-test/no-theme-callback'] = array(
- 'title' => 'Page that displays different themes without using a theme callback.',
- 'page callback' => 'menu_test_theme_page_callback',
- 'access arguments' => array('access content'),
- );
- // Path containing "exotic" characters.
- $path = "menu-test/ -._~!$'\"()*@[]?&+%#,;=:" . // "Special" ASCII characters.
- "%23%25%26%2B%2F%3F" . // Characters that look like a percent-escaped string.
- "éøïвβä¸åœ‹æ›¸Ûž"; // Characters from various non-ASCII alphabets.
- $items[$path] = array(
- 'title' => '"Exotic" path',
- 'page callback' => 'menu_test_callback',
- 'access arguments' => array('access content'),
- );
-
- // Hidden tests; base parents.
- // Same structure as in Menu and Block modules. Since those structures can
- // change, we need to simulate our own in here.
- $items['menu-test'] = array(
- 'title' => 'Menu test root',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- );
- $items['menu-test/hidden'] = array(
- 'title' => 'Hidden test root',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- );
-
- // Hidden tests; one dynamic argument.
- $items['menu-test/hidden/menu'] = array(
- 'title' => 'Menus',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- );
- $items['menu-test/hidden/menu/list'] = array(
- 'title' => 'List menus',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10,
- );
- $items['menu-test/hidden/menu/add'] = array(
- 'title' => 'Add menu',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- 'type' => MENU_LOCAL_ACTION,
- );
- $items['menu-test/hidden/menu/settings'] = array(
- 'title' => 'Settings',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 5,
- );
- $items['menu-test/hidden/menu/manage/%menu'] = array(
- 'title' => 'Customize menu',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- );
- $items['menu-test/hidden/menu/manage/%menu/list'] = array(
- 'title' => 'List links',
- 'weight' => -10,
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
- );
- $items['menu-test/hidden/menu/manage/%menu/add'] = array(
- 'title' => 'Add link',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- 'type' => MENU_LOCAL_ACTION,
- );
- $items['menu-test/hidden/menu/manage/%menu/edit'] = array(
- 'title' => 'Edit menu',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- 'type' => MENU_LOCAL_TASK,
- 'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
- );
- $items['menu-test/hidden/menu/manage/%menu/delete'] = array(
- 'title' => 'Delete menu',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- );
-
- // Hidden tests; two dynamic arguments.
- $items['menu-test/hidden/block'] = array(
- 'title' => 'Blocks',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- );
- $items['menu-test/hidden/block/list'] = array(
- 'title' => 'List',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10,
- );
- $items['menu-test/hidden/block/add'] = array(
- 'title' => 'Add block',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- 'type' => MENU_LOCAL_ACTION,
- );
- $items['menu-test/hidden/block/manage/%/%'] = array(
- 'title' => 'Configure block',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- );
- $items['menu-test/hidden/block/manage/%/%/configure'] = array(
- 'title' => 'Configure block',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'context' => MENU_CONTEXT_INLINE,
- );
- $items['menu-test/hidden/block/manage/%/%/delete'] = array(
- 'title' => 'Delete block',
- 'page callback' => 'node_page_default',
- 'access arguments' => array('access content'),
- 'type' => MENU_LOCAL_TASK,
- 'context' => MENU_CONTEXT_NONE,
- );
-
- // Breadcrumbs tests.
- // @see MenuBreadcrumbTestCase
- $base = array(
- 'page callback' => 'menu_test_callback',
- 'access callback' => TRUE,
- );
- // Local tasks: Second level below default local task.
- $items['menu-test/breadcrumb/tasks'] = array(
- 'title' => 'Breadcrumbs test: Local tasks',
- ) + $base;
- $items['menu-test/breadcrumb/tasks/first'] = array(
- 'title' => 'First',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- ) + $base;
- $items['menu-test/breadcrumb/tasks/second'] = array(
- 'title' => 'Second',
- 'type' => MENU_LOCAL_TASK,
- ) + $base;
- $items['menu-test/breadcrumb/tasks/first/first'] = array(
- 'title' => 'First first',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- ) + $base;
- $items['menu-test/breadcrumb/tasks/first/second'] = array(
- 'title' => 'First second',
- 'type' => MENU_LOCAL_TASK,
- ) + $base;
- $items['menu-test/breadcrumb/tasks/second/first'] = array(
- 'title' => 'Second first',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- ) + $base;
- $items['menu-test/breadcrumb/tasks/second/second'] = array(
- 'title' => 'Second second',
- 'type' => MENU_LOCAL_TASK,
- ) + $base;
-
- // Menu trail tests.
- // @see MenuTrailTestCase
- $items['menu-test/menu-trail'] = array(
- 'title' => 'Menu trail - Case 1',
- 'page callback' => 'menu_test_menu_trail_callback',
- 'access arguments' => array('access content'),
- );
- $items['admin/config/development/menu-trail'] = array(
- 'title' => 'Menu trail - Case 2',
- 'description' => 'Tests menu_tree_set_path()',
- 'page callback' => 'menu_test_menu_trail_callback',
- 'access arguments' => array('access administration pages'),
- );
- $items['menu-test/custom-403-page'] = array(
- 'title' => 'Custom 403 page',
- 'page callback' => 'menu_test_custom_403_404_callback',
- 'access arguments' => array('access content'),
- );
- $items['menu-test/custom-404-page'] = array(
- 'title' => 'Custom 404 page',
- 'page callback' => 'menu_test_custom_403_404_callback',
- 'access arguments' => array('access content'),
- );
-
- // File inheritance tests. This menu item should inherit the page callback
- // system_admin_menu_block_page() and therefore render its children as links
- // on the page.
- $items['admin/config/development/file-inheritance'] = array(
- 'title' => 'File inheritance',
- 'description' => 'Test file inheritance',
- 'access arguments' => array('access content'),
- );
- $items['admin/config/development/file-inheritance/inherit'] = array(
- 'title' => 'Inherit',
- 'description' => 'File inheritance test description',
- 'page callback' => 'menu_test_callback',
- 'access arguments' => array('access content'),
- );
-
- $items['menu_login_callback'] = array(
- 'title' => 'Used as a login path',
- 'page callback' => 'menu_login_callback',
- 'access callback' => TRUE,
- );
-
- $items['menu-title-test/case1'] = array(
- 'title' => 'Example title - Case 1',
- 'access callback' => TRUE,
- 'page callback' => 'menu_test_callback',
- );
- $items['menu-title-test/case2'] = array(
- 'title' => 'Example @sub1 - Case @op2',
- // If '2' is not in quotes, the argument becomes arg(2).
- 'title arguments' => array('@sub1' => 'title', '@op2' => '2'),
- 'access callback' => TRUE,
- 'page callback' => 'menu_test_callback',
- );
- $items['menu-title-test/case3'] = array(
- 'title' => 'Example title',
- 'title callback' => 'menu_test_title_callback',
- 'access callback' => TRUE,
- 'page callback' => 'menu_test_callback',
- );
- $items['menu-title-test/case4'] = array(
- // Title gets completely ignored. Good thing, too.
- 'title' => 'Bike sheds full of blue smurfs',
- 'title callback' => 'menu_test_title_callback',
- // If '4' is not in quotes, the argument becomes arg(4).
- 'title arguments' => array('Example title', '4'),
- 'access callback' => TRUE,
- 'page callback' => 'menu_test_callback',
- );
-
- // Load arguments inheritance test.
- $items['menu-test/arguments/%menu_test_argument/%'] = array(
- 'title' => 'Load arguments inheritance test',
- 'load arguments' => array(3),
- 'page callback' => 'menu_test_callback',
- 'access callback' => TRUE,
- );
- $items['menu-test/arguments/%menu_test_argument/%/default'] = array(
- 'title' => 'Default local task',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- );
- $items['menu-test/arguments/%menu_test_argument/%/task'] = array(
- 'title' => 'Local task',
- 'page callback' => 'menu_test_callback',
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- );
- // For this path, load arguments should be inherited for the first loader only.
- $items['menu-test/arguments/%menu_test_argument/%menu_test_other_argument/common-loader'] = array(
- 'title' => 'Local task',
- 'page callback' => 'menu_test_callback',
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- );
- // For these paths, no load arguments should be inherited.
- // Not on the same position.
- $items['menu-test/arguments/%/%menu_test_argument/different-loaders-1'] = array(
- 'title' => 'An item not sharing the same loader',
- 'page callback' => 'menu_test_callback',
- 'access callback' => TRUE,
- );
- // Not the same loader.
- $items['menu-test/arguments/%menu_test_other_argument/%/different-loaders-2'] = array(
- 'title' => 'An item not sharing the same loader',
- 'page callback' => 'menu_test_callback',
- 'access callback' => TRUE,
- );
- // Not the same loader.
- $items['menu-test/arguments/%/%/different-loaders-3'] = array(
- 'title' => 'An item not sharing the same loader',
- 'page callback' => 'menu_test_callback',
- 'access callback' => TRUE,
- );
- // Explict load arguments should not be overriden (even if empty).
- $items['menu-test/arguments/%menu_test_argument/%/explicit-arguments'] = array(
- 'title' => 'An item defining explicit load arguments',
- 'load arguments' => array(),
- 'page callback' => 'menu_test_callback',
- 'access callback' => TRUE,
- );
-
- return $items;
-}
-
-/**
- * Dummy argument loader for hook_menu() to point to.
- */
-function menu_test_argument_load($arg1) {
- return FALSE;
-}
-
-/**
- * Dummy argument loader for hook_menu() to point to.
- */
-function menu_test_other_argument_load($arg1) {
- return FALSE;
-}
-
-/**
- * Dummy callback for hook_menu() to point to.
- *
- * @return
- * A random string.
- */
-function menu_test_callback() {
- return 'This is menu_test_callback().';
-}
-
-/**
- * Callback that test menu_test_menu_tree_set_path().
- */
-function menu_test_menu_trail_callback() {
- $menu_path = variable_get('menu_test_menu_tree_set_path', array());
- if (!empty($menu_path)) {
- menu_tree_set_path($menu_path['menu_name'], $menu_path['path']);
- }
- return 'This is menu_test_menu_trail_callback().';
-}
-
-/**
- * Implements hook_init().
- */
-function menu_test_init() {
- // When requested by one of the MenuTrailTestCase tests, record the initial
- // active trail during Drupal's bootstrap (before the user is redirected to a
- // custom 403 or 404 page). See menu_test_custom_403_404_callback().
- if (variable_get('menu_test_record_active_trail', FALSE)) {
- variable_set('menu_test_active_trail_initial', menu_get_active_trail());
- }
-}
-
-/**
- * Callback for our custom 403 and 404 pages.
- */
-function menu_test_custom_403_404_callback() {
- // When requested by one of the MenuTrailTestCase tests, record the final
- // active trail now that the user has been redirected to the custom 403 or
- // 404 page. See menu_test_init().
- if (variable_get('menu_test_record_active_trail', FALSE)) {
- variable_set('menu_test_active_trail_final', menu_get_active_trail());
- }
-
- return 'This is menu_test_custom_403_404_callback().';
-}
-
-/**
- * Page callback to use when testing the theme callback functionality.
- *
- * @param $inherited
- * An optional boolean to set to TRUE when the requested page is intended to
- * inherit the theme of its parent.
- * @return
- * A string describing the requested custom theme and actual theme being used
- * for the current page request.
- */
-function menu_test_theme_page_callback($inherited = FALSE) {
- global $theme_key;
- // Initialize the theme system so that $theme_key will be populated.
- drupal_theme_initialize();
- // Now check both the requested custom theme and the actual theme being used.
- $custom_theme = menu_get_custom_theme();
- $requested_theme = empty($custom_theme) ? 'NONE' : $custom_theme;
- $output = "Custom theme: $requested_theme. Actual theme: $theme_key.";
- if ($inherited) {
- $output .= ' Theme callback inheritance is being tested.';
- }
- return $output;
-}
-
-/**
- * Theme callback to use when testing the theme callback functionality.
- *
- * @param $argument
- * The argument passed in from the URL.
- * @return
- * The name of the custom theme to request for the current page.
- */
-function menu_test_theme_callback($argument) {
- // Test using the variable administrative theme.
- if ($argument == 'use-admin-theme') {
- return variable_get('admin_theme');
- }
- // Test using a theme that exists, but may or may not be enabled.
- elseif ($argument == 'use-stark-theme') {
- return 'stark';
- }
- // Test using a theme that does not exist.
- elseif ($argument == 'use-fake-theme') {
- return 'fake_theme';
- }
- // For any other value of the URL argument, do not return anything. This
- // allows us to test that returning nothing from a theme callback function
- // causes the page to correctly fall back on using the main site theme.
-}
-
-/**
- * Implement hook_custom_theme().
- *
- * @return
- * The name of the custom theme to use for the current page.
- */
-function menu_test_custom_theme() {
- // If an appropriate variable has been set in the database, request the theme
- // that is stored there. Otherwise, do not attempt to dynamically set the
- // theme.
- if ($theme = variable_get('menu_test_hook_custom_theme_name', FALSE)) {
- return $theme;
- }
-}
-
-/**
- * Helper function for the testMenuName() test. Used to change the menu_name
- * parameter of a menu.
- *
- * @param $new_name
- * If set, will change the menu_name value.
- * @return
- * The menu_name value to use.
- */
-function menu_test_menu_name($new_name = '') {
- static $name = 'original';
- if ($new_name) {
- $name = $new_name;
- }
- return $name;
-}
-
-/**
- * Implements hook_menu_link_insert().
- *
- * @return
- * A random string.
- */
-function menu_test_menu_link_insert($item) {
- menu_test_static_variable('insert');
-}
-
-/**
- * Implements hook_menu_link_update().
- *
- * @return
- * A random string.
- */
-function menu_test_menu_link_update($item) {
- menu_test_static_variable('update');
-}
-
-/**
- * Implements hook_menu_link_delete().
- *
- * @return
- * A random string.
- */
-function menu_test_menu_link_delete($item) {
- menu_test_static_variable('delete');
-}
-
-/**
- * Static function for testing hook results.
- *
- * @param $value
- * The value to set or NULL to return the current value.
- * @return
- * A text string for comparison to test assertions.
- */
-function menu_test_static_variable($value = NULL) {
- static $variable;
- if (!empty($value)) {
- $variable = $value;
- }
- return $variable;
-}
-
-/**
- * Implements hook_menu_site_status_alter().
- */
-function menu_test_menu_site_status_alter(&$menu_site_status, $path) {
- // Allow access to ?q=menu_login_callback even if in maintenance mode.
- if ($menu_site_status == MENU_SITE_OFFLINE && $path == 'menu_login_callback') {
- $menu_site_status = MENU_SITE_ONLINE;
- }
-}
-
-/**
- * Menu callback to be used as a login path.
- */
-function menu_login_callback() {
- return 'This is menu_login_callback().';
-}
-
-/**
- * Concatenates a string, by using the t() function and a case number.
- *
- * @param $title
- * Title string.
- * @param $case_number
- * The current case number which is tests (defaults to 3).
- */
-function menu_test_title_callback($title, $case_no = 3) {
- return t($title) . ' - Case ' . $case_no;
-}
diff --git a/modules/simpletest/tests/module.test b/modules/simpletest/tests/module.test
deleted file mode 100644
index 371339f..0000000
--- a/modules/simpletest/tests/module.test
+++ /dev/null
@@ -1,304 +0,0 @@
- 'Module API',
- 'description' => 'Test low-level module functions.',
- 'group' => 'Module',
- );
- }
-
- /**
- * The basic functionality of module_list().
- */
- function testModuleList() {
- // Build a list of modules, sorted alphabetically.
- $profile_info = install_profile_info('standard', 'en');
- $module_list = $profile_info['dependencies'];
-
- // Installation profile is a module that is expected to be loaded.
- $module_list[] = 'standard';
-
- sort($module_list);
- // Compare this list to the one returned by module_list(). We expect them
- // to match, since all default profile modules have a weight equal to 0
- // (except for block.module, which has a lower weight but comes first in
- // the alphabet anyway).
- $this->assertModuleList($module_list, t('Standard profile'));
-
- // Try to install a new module.
- module_enable(array('contact'));
- $module_list[] = 'contact';
- sort($module_list);
- $this->assertModuleList($module_list, t('After adding a module'));
-
- // Try to mess with the module weights.
- db_update('system')
- ->fields(array('weight' => 20))
- ->condition('name', 'contact')
- ->condition('type', 'module')
- ->execute();
- // Reset the module list.
- module_list(TRUE);
- // Move contact to the end of the array.
- unset($module_list[array_search('contact', $module_list)]);
- $module_list[] = 'contact';
- $this->assertModuleList($module_list, t('After changing weights'));
-
- // Test the fixed list feature.
- $fixed_list = array(
- 'system' => array('filename' => drupal_get_path('module', 'system')),
- 'menu' => array('filename' => drupal_get_path('module', 'menu')),
- );
- module_list(FALSE, FALSE, FALSE, $fixed_list);
- $new_module_list = array_combine(array_keys($fixed_list), array_keys($fixed_list));
- $this->assertModuleList($new_module_list, t('When using a fixed list'));
-
- // Reset the module list.
- module_list(TRUE);
- $this->assertModuleList($module_list, t('After reset'));
- }
-
- /**
- * Assert that module_list() return the expected values.
- *
- * @param $expected_values
- * The expected values, sorted by weight and module name.
- */
- protected function assertModuleList(Array $expected_values, $condition) {
- $expected_values = array_combine($expected_values, $expected_values);
- $this->assertEqual($expected_values, module_list(), format_string('@condition: module_list() returns correct results', array('@condition' => $condition)));
- ksort($expected_values);
- $this->assertIdentical($expected_values, module_list(FALSE, FALSE, TRUE), format_string('@condition: module_list() returns correctly sorted results', array('@condition' => $condition)));
- }
-
- /**
- * Test module_implements() caching.
- */
- function testModuleImplements() {
- // Clear the cache.
- cache_clear_all('module_implements', 'cache_bootstrap');
- $this->assertFalse(cache_get('module_implements', 'cache_bootstrap'), 'The module implements cache is empty.');
- $this->drupalGet('');
- $this->assertTrue(cache_get('module_implements', 'cache_bootstrap'), 'The module implements cache is populated after requesting a page.');
-
- // Test again with an authenticated user.
- $this->user = $this->drupalCreateUser();
- $this->drupalLogin($this->user);
- cache_clear_all('module_implements', 'cache_bootstrap');
- $this->drupalGet('');
- $this->assertTrue(cache_get('module_implements', 'cache_bootstrap'), 'The module implements cache is populated after requesting a page.');
-
- // Make sure group include files are detected properly even when the file is
- // already loaded when the cache is rebuilt.
- // For that activate the module_test which provides the file to load.
- module_enable(array('module_test'));
-
- module_load_include('inc', 'module_test', 'module_test.file');
- $modules = module_implements('test_hook');
- $static = drupal_static('module_implements');
- $this->assertTrue(in_array('module_test', $modules), 'Hook found.');
- $this->assertEqual($static['test_hook']['module_test'], 'file', 'Include file detected.');
- }
-
- /**
- * Test that module_invoke() can load a hook defined in hook_hook_info().
- */
- function testModuleInvoke() {
- module_enable(array('module_test'), FALSE);
- $this->resetAll();
- $this->drupalGet('module-test/hook-dynamic-loading-invoke');
- $this->assertText('success!', 'module_invoke() dynamically loads a hook defined in hook_hook_info().');
- }
-
- /**
- * Test that module_invoke_all() can load a hook defined in hook_hook_info().
- */
- function testModuleInvokeAll() {
- module_enable(array('module_test'), FALSE);
- $this->resetAll();
- $this->drupalGet('module-test/hook-dynamic-loading-invoke-all');
- $this->assertText('success!', 'module_invoke_all() dynamically loads a hook defined in hook_hook_info().');
- }
-
- /**
- * Test dependency resolution.
- */
- function testDependencyResolution() {
- // Enable the test module, and make sure that other modules we are testing
- // are not already enabled. (If they were, the tests below would not work
- // correctly.)
- module_enable(array('module_test'), FALSE);
- $this->assertTrue(module_exists('module_test'), 'Test module is enabled.');
- $this->assertFalse(module_exists('forum'), 'Forum module is disabled.');
- $this->assertFalse(module_exists('poll'), 'Poll module is disabled.');
- $this->assertFalse(module_exists('php'), 'PHP module is disabled.');
-
- // First, create a fake missing dependency. Forum depends on poll, which
- // depends on a made-up module, foo. Nothing should be installed.
- variable_set('dependency_test', 'missing dependency');
- drupal_static_reset('system_rebuild_module_data');
- $result = module_enable(array('forum'));
- $this->assertFalse($result, 'module_enable() returns FALSE if dependencies are missing.');
- $this->assertFalse(module_exists('forum'), 'module_enable() aborts if dependencies are missing.');
-
- // Now, fix the missing dependency. Forum module depends on poll, but poll
- // depends on the PHP module. module_enable() should work.
- variable_set('dependency_test', 'dependency');
- drupal_static_reset('system_rebuild_module_data');
- $result = module_enable(array('forum'));
- $this->assertTrue($result, 'module_enable() returns the correct value.');
- // Verify that the fake dependency chain was installed.
- $this->assertTrue(module_exists('poll') && module_exists('php'), 'Dependency chain was installed by module_enable().');
- // Verify that the original module was installed.
- $this->assertTrue(module_exists('forum'), 'Module installation with unlisted dependencies succeeded.');
- // Finally, verify that the modules were enabled in the correct order.
- $this->assertEqual(variable_get('test_module_enable_order', array()), array('php', 'poll', 'forum'), 'Modules were enabled in the correct order by module_enable().');
-
- // Now, disable the PHP module. Both forum and poll should be disabled as
- // well, in the correct order.
- module_disable(array('php'));
- $this->assertTrue(!module_exists('forum') && !module_exists('poll'), 'Depedency chain was disabled by module_disable().');
- $this->assertFalse(module_exists('php'), 'Disabling a module with unlisted dependents succeeded.');
- $this->assertEqual(variable_get('test_module_disable_order', array()), array('forum', 'poll', 'php'), 'Modules were disabled in the correct order by module_disable().');
-
- // Disable a module that is listed as a dependency by the installation
- // profile. Make sure that the profile itself is not on the list of
- // dependent modules to be disabled.
- $profile = drupal_get_profile();
- $info = install_profile_info($profile);
- $this->assertTrue(in_array('comment', $info['dependencies']), 'Comment module is listed as a dependency of the installation profile.');
- $this->assertTrue(module_exists('comment'), 'Comment module is enabled.');
- module_disable(array('comment'));
- $this->assertFalse(module_exists('comment'), 'Comment module was disabled.');
- $disabled_modules = variable_get('test_module_disable_order', array());
- $this->assertTrue(in_array('comment', $disabled_modules), 'Comment module is in the list of disabled modules.');
- $this->assertFalse(in_array($profile, $disabled_modules), 'The installation profile is not in the list of disabled modules.');
-
- // Try to uninstall the PHP module by itself. This should be rejected,
- // since the modules which it depends on need to be uninstalled first, and
- // that is too destructive to perform automatically.
- $result = drupal_uninstall_modules(array('php'));
- $this->assertFalse($result, 'Calling drupal_uninstall_modules() on a module whose dependents are not uninstalled fails.');
- foreach (array('forum', 'poll', 'php') as $module) {
- $this->assertNotEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, format_string('The @module module was not uninstalled.', array('@module' => $module)));
- }
-
- // Now uninstall all three modules explicitly, but in the incorrect order,
- // and make sure that drupal_uninstal_modules() uninstalled them in the
- // correct sequence.
- $result = drupal_uninstall_modules(array('poll', 'php', 'forum'));
- $this->assertTrue($result, 'drupal_uninstall_modules() returns the correct value.');
- foreach (array('forum', 'poll', 'php') as $module) {
- $this->assertEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, format_string('The @module module was uninstalled.', array('@module' => $module)));
- }
- $this->assertEqual(variable_get('test_module_uninstall_order', array()), array('forum', 'poll', 'php'), 'Modules were uninstalled in the correct order by drupal_uninstall_modules().');
-
- // Uninstall the profile module from above, and make sure that the profile
- // itself is not on the list of dependent modules to be uninstalled.
- $result = drupal_uninstall_modules(array('comment'));
- $this->assertTrue($result, 'drupal_uninstall_modules() returns the correct value.');
- $this->assertEqual(drupal_get_installed_schema_version('comment'), SCHEMA_UNINSTALLED, 'Comment module was uninstalled.');
- $uninstalled_modules = variable_get('test_module_uninstall_order', array());
- $this->assertTrue(in_array('comment', $uninstalled_modules), 'Comment module is in the list of uninstalled modules.');
- $this->assertFalse(in_array($profile, $uninstalled_modules), 'The installation profile is not in the list of uninstalled modules.');
-
- // Enable forum module again, which should enable both the poll module and
- // php module. But, this time do it with poll module declaring a dependency
- // on a specific version of php module in its info file. Make sure that
- // module_enable() still works.
- variable_set('dependency_test', 'version dependency');
- drupal_static_reset('system_rebuild_module_data');
- $result = module_enable(array('forum'));
- $this->assertTrue($result, 'module_enable() returns the correct value.');
- // Verify that the fake dependency chain was installed.
- $this->assertTrue(module_exists('poll') && module_exists('php'), 'Dependency chain was installed by module_enable().');
- // Verify that the original module was installed.
- $this->assertTrue(module_exists('forum'), 'Module installation with version dependencies succeeded.');
- // Finally, verify that the modules were enabled in the correct order.
- $enable_order = variable_get('test_module_enable_order', array());
- $php_position = array_search('php', $enable_order);
- $poll_position = array_search('poll', $enable_order);
- $forum_position = array_search('forum', $enable_order);
- $php_before_poll = $php_position !== FALSE && $poll_position !== FALSE && $php_position < $poll_position;
- $poll_before_forum = $poll_position !== FALSE && $forum_position !== FALSE && $poll_position < $forum_position;
- $this->assertTrue($php_before_poll && $poll_before_forum, 'Modules were enabled in the correct order by module_enable().');
- }
-}
-
-/**
- * Unit tests for module installation.
- */
-class ModuleInstallTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Module installation',
- 'description' => 'Tests the installation of modules.',
- 'group' => 'Module',
- );
- }
-
- function setUp() {
- parent::setUp('module_test');
- }
-
- /**
- * Test that calls to drupal_write_record() work during module installation.
- *
- * This is a useful function to test because modules often use it to insert
- * initial data in their database tables when they are being installed or
- * enabled. Furthermore, drupal_write_record() relies on the module schema
- * information being available, so this also checks that the data from one of
- * the module's hook implementations, in particular hook_schema(), is
- * properly available during this time. Therefore, this test helps ensure
- * that modules are fully functional while Drupal is installing and enabling
- * them.
- */
- function testDrupalWriteRecord() {
- // Check for data that was inserted using drupal_write_record() while the
- // 'module_test' module was being installed and enabled.
- $data = db_query("SELECT data FROM {module_test}")->fetchCol();
- $this->assertTrue(in_array('Data inserted in hook_install()', $data), 'Data inserted using drupal_write_record() in hook_install() is correctly saved.');
- $this->assertTrue(in_array('Data inserted in hook_enable()', $data), 'Data inserted using drupal_write_record() in hook_enable() is correctly saved.');
- }
-}
-
-/**
- * Unit tests for module uninstallation and related hooks.
- */
-class ModuleUninstallTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Module uninstallation',
- 'description' => 'Tests the uninstallation of modules.',
- 'group' => 'Module',
- );
- }
-
- function setUp() {
- parent::setUp('module_test', 'user');
- }
-
- /**
- * Tests the hook_modules_uninstalled() of the user module.
- */
- function testUserPermsUninstalled() {
- // Uninstalls the module_test module, so hook_modules_uninstalled()
- // is executed.
- module_disable(array('module_test'));
- drupal_uninstall_modules(array('module_test'));
-
- // Are the perms defined by module_test removed from {role_permission}.
- $count = db_query("SELECT COUNT(rid) FROM {role_permission} WHERE permission = :perm", array(':perm' => 'module_test perm'))->fetchField();
- $this->assertEqual(0, $count, 'Permissions were all removed.');
- }
-}
diff --git a/modules/simpletest/tests/module_test.file.inc b/modules/simpletest/tests/module_test.file.inc
deleted file mode 100644
index c0d3ec4..0000000
--- a/modules/simpletest/tests/module_test.file.inc
+++ /dev/null
@@ -1,13 +0,0 @@
- 'success!');
-}
diff --git a/modules/simpletest/tests/module_test.info b/modules/simpletest/tests/module_test.info
deleted file mode 100644
index 0a0f3c0..0000000
--- a/modules/simpletest/tests/module_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Module test"
-description = "Support module for module system testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/module_test.install b/modules/simpletest/tests/module_test.install
deleted file mode 100644
index 4cc09df..0000000
--- a/modules/simpletest/tests/module_test.install
+++ /dev/null
@@ -1,42 +0,0 @@
- 'Dummy table to test the behavior of hook_schema() during module installation.',
- 'fields' => array(
- 'data' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'An example data column for the module.',
- ),
- ),
- );
- return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function module_test_install() {
- $record = array('data' => 'Data inserted in hook_install()');
- drupal_write_record('module_test', $record);
-}
-
-/**
- * Implements hook_enable().
- */
-function module_test_enable() {
- $record = array('data' => 'Data inserted in hook_enable()');
- drupal_write_record('module_test', $record);
-}
-
diff --git a/modules/simpletest/tests/module_test.module b/modules/simpletest/tests/module_test.module
deleted file mode 100644
index d781350..0000000
--- a/modules/simpletest/tests/module_test.module
+++ /dev/null
@@ -1,131 +0,0 @@
- t('example perm for module_test module'),
- );
-}
-
-/**
- * Implements hook_system_info_alter().
- *
- * Manipulate module dependencies to test dependency chains.
- */
-function module_test_system_info_alter(&$info, $file, $type) {
- if (variable_get('dependency_test', FALSE) == 'missing dependency') {
- if ($file->name == 'forum') {
- // Make forum module depend on poll.
- $info['dependencies'][] = 'poll';
- }
- elseif ($file->name == 'poll') {
- // Make poll depend on a made-up module.
- $info['dependencies'][] = 'foo';
- }
- }
- elseif (variable_get('dependency_test', FALSE) == 'dependency') {
- if ($file->name == 'forum') {
- // Make the forum module depend on poll.
- $info['dependencies'][] = 'poll';
- }
- elseif ($file->name == 'poll') {
- // Make poll depend on php module.
- $info['dependencies'][] = 'php';
- }
- }
- elseif (variable_get('dependency_test', FALSE) == 'version dependency') {
- if ($file->name == 'forum') {
- // Make the forum module depend on poll.
- $info['dependencies'][] = 'poll';
- }
- elseif ($file->name == 'poll') {
- // Make poll depend on a specific version of php module.
- $info['dependencies'][] = 'php (1.x)';
- }
- elseif ($file->name == 'php') {
- // Set php module to a version compatible with the above.
- $info['version'] = '7.x-1.0';
- }
- }
- if ($file->name == 'seven' && $type == 'theme') {
- $info['regions']['test_region'] = t('Test region');
- }
-}
-
-/**
- * Implements hook_hook_info().
- */
-function module_test_hook_info() {
- $hooks['test_hook'] = array(
- 'group' => 'file',
- );
- return $hooks;
-}
-
-/**
- * Implements hook_menu().
- */
-function module_test_menu() {
- $items['module-test/hook-dynamic-loading-invoke'] = array(
- 'title' => 'Test hook dynamic loading (invoke)',
- 'page callback' => 'module_test_hook_dynamic_loading_invoke',
- 'access arguments' => array('access content'),
- );
- $items['module-test/hook-dynamic-loading-invoke-all'] = array(
- 'title' => 'Test hook dynamic loading (invoke_all)',
- 'page callback' => 'module_test_hook_dynamic_loading_invoke_all',
- 'access arguments' => array('access content'),
- );
- return $items;
-}
-
-/**
- * Page callback for 'hook dynamic loading' test.
- *
- * If the hook is dynamically loaded correctly, the menu callback should
- * return 'success!'.
- */
-function module_test_hook_dynamic_loading_invoke() {
- $result = module_invoke('module_test', 'test_hook');
- return $result['module_test'];
-}
-
-/**
- * Page callback for 'hook dynamic loading' test.
- *
- * If the hook is dynamically loaded correctly, the menu callback should
- * return 'success!'.
- */
-function module_test_hook_dynamic_loading_invoke_all() {
- $result = module_invoke_all('test_hook');
- return $result['module_test'];
-}
-
-/**
- * Implements hook_modules_enabled().
- */
-function module_test_modules_enabled($modules) {
- // Record the ordered list of modules that were passed in to this hook so we
- // can check that the modules were enabled in the correct sequence.
- variable_set('test_module_enable_order', $modules);
-}
-
-/**
- * Implements hook_modules_disabled().
- */
-function module_test_modules_disabled($modules) {
- // Record the ordered list of modules that were passed in to this hook so we
- // can check that the modules were disabled in the correct sequence.
- variable_set('test_module_disable_order', $modules);
-}
-
-/**
- * Implements hook_modules_uninstalled().
- */
-function module_test_modules_uninstalled($modules) {
- // Record the ordered list of modules that were passed in to this hook so we
- // can check that the modules were uninstalled in the correct sequence.
- variable_set('test_module_uninstall_order', $modules);
-}
diff --git a/modules/simpletest/tests/pager.test b/modules/simpletest/tests/pager.test
deleted file mode 100644
index 6e8ce8e..0000000
--- a/modules/simpletest/tests/pager.test
+++ /dev/null
@@ -1,159 +0,0 @@
- 'Pager functionality',
- 'description' => 'Tests pager functionality.',
- 'group' => 'Pager',
- );
- }
-
- function setUp() {
- parent::setUp(array('dblog'));
-
- // Insert 300 log messages.
- for ($i = 0; $i < 300; $i++) {
- watchdog('pager_test', $this->randomString(), NULL, WATCHDOG_DEBUG);
- }
-
- $this->admin_user = $this->drupalCreateUser(array(
- 'access site reports',
- ));
- $this->drupalLogin($this->admin_user);
- }
-
- /**
- * Tests markup and CSS classes of pager links.
- */
- function testActiveClass() {
- // Verify first page.
- $this->drupalGet('admin/reports/dblog');
- $current_page = 0;
- $this->assertPagerItems($current_page);
-
- // Verify any page but first/last.
- $current_page++;
- $this->drupalGet('admin/reports/dblog', array('query' => array('page' => $current_page)));
- $this->assertPagerItems($current_page);
-
- // Verify last page.
- $elements = $this->xpath('//li[contains(@class, :class)]/a', array(':class' => 'pager-last'));
- preg_match('@page=(\d+)@', $elements[0]['href'], $matches);
- $current_page = (int) $matches[1];
- $this->drupalGet($GLOBALS['base_root'] . $elements[0]['href'], array('external' => TRUE));
- $this->assertPagerItems($current_page);
- }
-
- /**
- * Asserts pager items and links.
- *
- * @param int $current_page
- * The current pager page the internal browser is on.
- */
- protected function assertPagerItems($current_page) {
- $elements = $this->xpath('//ul[@class=:class]/li', array(':class' => 'pager'));
- $this->assertTrue(!empty($elements), 'Pager found.');
-
- // Make current page 1-based.
- $current_page++;
-
- // Extract first/previous and next/last items.
- // first/previous only exist, if the current page is not the first.
- if ($current_page > 1) {
- $first = array_shift($elements);
- $previous = array_shift($elements);
- }
- // next/last always exist, unless the current page is the last.
- if ($current_page != count($elements)) {
- $last = array_pop($elements);
- $next = array_pop($elements);
- }
-
- // Verify items and links to pages.
- foreach ($elements as $page => $element) {
- // Make item/page index 1-based.
- $page++;
- if ($current_page == $page) {
- $this->assertClass($element, 'pager-current', 'Item for current page has .pager-current class.');
- $this->assertFalse(isset($element->a), 'Item for current page has no link.');
- }
- else {
- $this->assertNoClass($element, 'pager-current', "Item for page $page has no .pager-current class.");
- $this->assertClass($element, 'pager-item', "Item for page $page has .pager-item class.");
- $this->assertTrue($element->a, "Link to page $page found.");
- $this->assertNoClass($element->a, 'active', "Link to page $page is not active.");
- }
- unset($elements[--$page]);
- }
- // Verify that no other items remain untested.
- $this->assertTrue(empty($elements), 'All expected items found.');
-
- // Verify first/previous and next/last items and links.
- if (isset($first)) {
- $this->assertClass($first, 'pager-first', 'Item for first page has .pager-first class.');
- $this->assertTrue($first->a, 'Link to first page found.');
- $this->assertNoClass($first->a, 'active', 'Link to first page is not active.');
- }
- if (isset($previous)) {
- $this->assertClass($previous, 'pager-previous', 'Item for first page has .pager-previous class.');
- $this->assertTrue($previous->a, 'Link to previous page found.');
- $this->assertNoClass($previous->a, 'active', 'Link to previous page is not active.');
- }
- if (isset($next)) {
- $this->assertClass($next, 'pager-next', 'Item for next page has .pager-next class.');
- $this->assertTrue($next->a, 'Link to next page found.');
- $this->assertNoClass($next->a, 'active', 'Link to next page is not active.');
- }
- if (isset($last)) {
- $this->assertClass($last, 'pager-last', 'Item for last page has .pager-last class.');
- $this->assertTrue($last->a, 'Link to last page found.');
- $this->assertNoClass($last->a, 'active', 'Link to last page is not active.');
- }
- }
-
- /**
- * Asserts that an element has a given class.
- *
- * @param SimpleXMLElement $element
- * The element to test.
- * @param string $class
- * The class to assert.
- * @param string $message
- * (optional) A verbose message to output.
- */
- protected function assertClass(SimpleXMLElement $element, $class, $message = NULL) {
- if (!isset($message)) {
- $message = "Class .$class found.";
- }
- $this->assertTrue(strpos($element['class'], $class) !== FALSE, $message);
- }
-
- /**
- * Asserts that an element does not have a given class.
- *
- * @param SimpleXMLElement $element
- * The element to test.
- * @param string $class
- * The class to assert.
- * @param string $message
- * (optional) A verbose message to output.
- */
- protected function assertNoClass(SimpleXMLElement $element, $class, $message = NULL) {
- if (!isset($message)) {
- $message = "Class .$class not found.";
- }
- $this->assertTrue(strpos($element['class'], $class) === FALSE, $message);
- }
-}
-
diff --git a/modules/simpletest/tests/password.test b/modules/simpletest/tests/password.test
deleted file mode 100644
index 7105f3b..0000000
--- a/modules/simpletest/tests/password.test
+++ /dev/null
@@ -1,81 +0,0 @@
- 'Password hashing',
- 'description' => 'Password hashing unit tests.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
- parent::setUp();
- }
-
- /**
- * Test password hashing.
- */
- function testPasswordHashing() {
- // Set a log2 iteration count that is deliberately out of bounds to test
- // that it is corrected to be within bounds.
- variable_set('password_count_log2', 1);
- // Set up a fake $account with a password 'baz', hashed with md5.
- $password = 'baz';
- $account = (object) array('name' => 'foo', 'pass' => md5($password));
- // The md5 password should be flagged as needing an update.
- $this->assertTrue(user_needs_new_hash($account), 'User with md5 password needs a new hash.');
- // Re-hash the password.
- $old_hash = $account->pass;
- $account->pass = user_hash_password($password);
- $this->assertIdentical(_password_get_count_log2($account->pass), DRUPAL_MIN_HASH_COUNT, 'Re-hashed password has the minimum number of log2 iterations.');
- $this->assertTrue($account->pass != $old_hash, 'Password hash changed.');
- $this->assertTrue(user_check_password($password, $account), 'Password check succeeds.');
- // Since the log2 setting hasn't changed and the user has a valid password,
- // user_needs_new_hash() should return FALSE.
- $this->assertFalse(user_needs_new_hash($account), 'User does not need a new hash.');
- // Increment the log2 iteration to MIN + 1.
- variable_set('password_count_log2', DRUPAL_MIN_HASH_COUNT + 1);
- $this->assertTrue(user_needs_new_hash($account), 'User needs a new hash after incrementing the log2 count.');
- // Re-hash the password.
- $old_hash = $account->pass;
- $account->pass = user_hash_password($password);
- $this->assertIdentical(_password_get_count_log2($account->pass), DRUPAL_MIN_HASH_COUNT + 1, 'Re-hashed password has the correct number of log2 iterations.');
- $this->assertTrue($account->pass != $old_hash, 'Password hash changed again.');
- // Now the hash should be OK.
- $this->assertFalse(user_needs_new_hash($account), 'Re-hashed password does not need a new hash.');
- $this->assertTrue(user_check_password($password, $account), 'Password check succeeds with re-hashed password.');
- }
-
- /**
- * Verifies that passwords longer than 512 bytes are not hashed.
- */
- public function testLongPassword() {
- $password = str_repeat('x', 512);
- $result = user_hash_password($password);
- $this->assertFalse(empty($result), '512 byte long password is allowed.');
- $password = str_repeat('x', 513);
- $result = user_hash_password($password);
- $this->assertFalse($result, '513 byte long password is not allowed.');
- // Check a string of 3-byte UTF-8 characters.
- $password = str_repeat('€', 170);
- $result = user_hash_password($password);
- $this->assertFalse(empty($result), '510 byte long password is allowed.');
- $password .= 'xx';
- $this->assertFalse(empty($result), '512 byte long password is allowed.');
- $password = str_repeat('€', 171);
- $result = user_hash_password($password);
- $this->assertFalse($result, '513 byte long password is not allowed.');
- }
-}
diff --git a/modules/simpletest/tests/path.test b/modules/simpletest/tests/path.test
deleted file mode 100644
index b8b3c93..0000000
--- a/modules/simpletest/tests/path.test
+++ /dev/null
@@ -1,381 +0,0 @@
- 'Drupal match path',
- 'description' => 'Tests the drupal_match_path() function to make sure it works properly.',
- 'group' => 'Path API',
- );
- }
-
- function setUp() {
- // Set up the database and testing environment.
- parent::setUp();
-
- // Set up a random site front page to test the '' placeholder.
- $this->front = $this->randomName();
- variable_set('site_frontpage', $this->front);
- // Refresh our static variables from the database.
- $this->refreshVariables();
- }
-
- /**
- * Run through our test cases, making sure each one works as expected.
- */
- function testDrupalMatchPath() {
- // Set up our test cases.
- $tests = $this->drupalMatchPathTests();
- foreach ($tests as $patterns => $cases) {
- foreach ($cases as $path => $expected_result) {
- $actual_result = drupal_match_path($path, $patterns);
- $this->assertIdentical($actual_result, $expected_result, format_string('Tried matching the path @path
to the pattern @patterns - expected @expected, got @actual.', array('@path' => $path, '@patterns' => $patterns, '@expected' => var_export($expected_result, TRUE), '@actual' => var_export($actual_result, TRUE))));
- }
- }
- }
-
- /**
- * Helper function for testDrupalMatchPath(): set up an array of test cases.
- *
- * @return
- * An array of test cases to cycle through.
- */
- private function drupalMatchPathTests() {
- return array(
- // Single absolute paths.
- 'blog/1' => array(
- 'blog/1' => TRUE,
- 'blog/2' => FALSE,
- 'test' => FALSE,
- ),
- // Single paths with wildcards.
- 'blog/*' => array(
- 'blog/1' => TRUE,
- 'blog/2' => TRUE,
- 'blog/3/edit' => TRUE,
- 'blog/' => TRUE,
- 'blog' => FALSE,
- 'test' => FALSE,
- ),
- // Single paths with multiple wildcards.
- 'node/*/revisions/*' => array(
- 'node/1/revisions/3' => TRUE,
- 'node/345/revisions/test' => TRUE,
- 'node/23/edit' => FALSE,
- 'test' => FALSE,
- ),
- // Single paths with ''.
- '' => array(
- $this->front => TRUE,
- "$this->front/" => FALSE,
- "$this->front/edit" => FALSE,
- 'node' => FALSE,
- '' => FALSE,
- ),
- // Paths with both '' and wildcards (should not work).
- '/*' => array(
- $this->front => FALSE,
- "$this->front/" => FALSE,
- "$this->front/edit" => FALSE,
- 'node/12' => FALSE,
- '' => FALSE,
- ),
- // Multiple paths with the \n delimiter.
- "node/*\nnode/*/edit" => array(
- 'node/1' => TRUE,
- 'node/view' => TRUE,
- 'node/32/edit' => TRUE,
- 'node/delete/edit' => TRUE,
- 'node/50/delete' => TRUE,
- 'test/example' => FALSE,
- ),
- // Multiple paths with the \r delimiter.
- "user/*\rblog/*" => array(
- 'user/1' => TRUE,
- 'blog/1' => TRUE,
- 'user/1/blog/1' => TRUE,
- 'user/blog' => TRUE,
- 'test/example' => FALSE,
- 'user' => FALSE,
- 'blog' => FALSE,
- ),
- // Multiple paths with the \r\n delimiter.
- "test\r\n" => array(
- 'test' => TRUE,
- $this->front => TRUE,
- 'example' => FALSE,
- ),
- // Test existing regular expressions (should be escaped).
- '[^/]+?/[0-9]' => array(
- 'test/1' => FALSE,
- '[^/]+?/[0-9]' => TRUE,
- ),
- );
- }
-}
-
-/**
- * Tests hook_url_alter functions.
- */
-class UrlAlterFunctionalTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => t('URL altering'),
- 'description' => t('Tests hook_url_inbound_alter() and hook_url_outbound_alter().'),
- 'group' => t('Path API'),
- );
- }
-
- function setUp() {
- parent::setUp('path', 'forum', 'url_alter_test');
- }
-
- /**
- * Test that URL altering works and that it occurs in the correct order.
- */
- function testUrlAlter() {
- $account = $this->drupalCreateUser(array('administer url aliases'));
- $this->drupalLogin($account);
-
- $uid = $account->uid;
- $name = $account->name;
-
- // Test a single altered path.
- $this->assertUrlInboundAlter("user/$name", "user/$uid");
- $this->assertUrlOutboundAlter("user/$uid", "user/$name");
-
- // Test that a path always uses its alias.
- $path = array('source' => "user/$uid/test1", 'alias' => 'alias/test1');
- path_save($path);
- $this->assertUrlInboundAlter('alias/test1', "user/$uid/test1");
- $this->assertUrlOutboundAlter("user/$uid/test1", 'alias/test1');
-
- // Test that alias source paths are normalized in the interface.
- $edit = array('source' => "user/$name/edit", 'alias' => 'alias/test2');
- $this->drupalPost('admin/config/search/path/add', $edit, t('Save'));
- $this->assertText(t('The alias has been saved.'));
-
- // Test that a path always uses its alias.
- $this->assertUrlInboundAlter('alias/test2', "user/$uid/edit");
- $this->assertUrlOutboundAlter("user/$uid/edit", 'alias/test2');
-
- // Test a non-existent user is not altered.
- $uid++;
- $this->assertUrlInboundAlter("user/$uid", "user/$uid");
- $this->assertUrlOutboundAlter("user/$uid", "user/$uid");
-
- // Test that 'forum' is altered to 'community' correctly, both at the root
- // level and for a specific existing forum.
- $this->assertUrlInboundAlter('community', 'forum');
- $this->assertUrlOutboundAlter('forum', 'community');
- $forum_vid = db_query("SELECT vid FROM {taxonomy_vocabulary} WHERE module = 'forum'")->fetchField();
- $tid = db_insert('taxonomy_term_data')
- ->fields(array(
- 'name' => $this->randomName(),
- 'vid' => $forum_vid,
- ))
- ->execute();
- $this->assertUrlInboundAlter("community/$tid", "forum/$tid");
- $this->assertUrlOutboundAlter("forum/$tid", "community/$tid");
- }
-
- /**
- * Test current_path() and request_path().
- */
- function testCurrentUrlRequestedPath() {
- $this->drupalGet('url-alter-test/bar');
- $this->assertRaw('request_path=url-alter-test/bar', 'request_path() returns the requested path.');
- $this->assertRaw('current_path=url-alter-test/foo', 'current_path() returns the internal path.');
- }
-
- /**
- * Tests that $_GET['q'] is initialized when the request path is empty.
- */
- function testGetQInitialized() {
- $this->drupalGet('');
- $this->assertText("\$_GET['q'] is non-empty with an empty request path.", "\$_GET['q'] is initialized with an empty request path.");
- }
-
- /**
- * Assert that an outbound path is altered to an expected value.
- *
- * @param $original
- * A string with the original path that is run through url().
- * @param $final
- * A string with the expected result after url().
- * @return
- * TRUE if $original was correctly altered to $final, FALSE otherwise.
- */
- protected function assertUrlOutboundAlter($original, $final) {
- // Test outbound altering.
- $result = url($original);
- $base_path = base_path() . (variable_get('clean_url', '0') ? '' : '?q=');
- $result = substr($result, strlen($base_path));
- $this->assertIdentical($result, $final, format_string('Altered outbound URL %original, expected %final, and got %result.', array('%original' => $original, '%final' => $final, '%result' => $result)));
- }
-
- /**
- * Assert that a inbound path is altered to an expected value.
- *
- * @param $original
- * A string with the aliased or un-normal path that is run through
- * drupal_get_normal_path().
- * @param $final
- * A string with the expected result after url().
- * @return
- * TRUE if $original was correctly altered to $final, FALSE otherwise.
- */
- protected function assertUrlInboundAlter($original, $final) {
- // Test inbound altering.
- $result = drupal_get_normal_path($original);
- $this->assertIdentical($result, $final, format_string('Altered inbound URL %original, expected %final, and got %result.', array('%original' => $original, '%final' => $final, '%result' => $result)));
- }
-}
-
-/**
- * Unit test for drupal_lookup_path().
- */
-class PathLookupTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => t('Path lookup'),
- 'description' => t('Tests that drupal_lookup_path() returns correct paths.'),
- 'group' => t('Path API'),
- );
- }
-
- /**
- * Test that drupal_lookup_path() returns the correct path.
- */
- function testDrupalLookupPath() {
- $account = $this->drupalCreateUser();
- $uid = $account->uid;
- $name = $account->name;
-
- // Test the situation where the source is the same for multiple aliases.
- // Start with a language-neutral alias, which we will override.
- $path = array(
- 'source' => "user/$uid",
- 'alias' => 'foo',
- );
- path_save($path);
- $this->assertEqual(drupal_lookup_path('alias', $path['source']), $path['alias'], 'Basic alias lookup works.');
- $this->assertEqual(drupal_lookup_path('source', $path['alias']), $path['source'], 'Basic source lookup works.');
-
- // Create a language specific alias for the default language (English).
- $path = array(
- 'source' => "user/$uid",
- 'alias' => "users/$name",
- 'language' => 'en',
- );
- path_save($path);
- $this->assertEqual(drupal_lookup_path('alias', $path['source']), $path['alias'], 'English alias overrides language-neutral alias.');
- $this->assertEqual(drupal_lookup_path('source', $path['alias']), $path['source'], 'English source overrides language-neutral source.');
-
- // Create a language-neutral alias for the same path, again.
- $path = array(
- 'source' => "user/$uid",
- 'alias' => 'bar',
- );
- path_save($path);
- $this->assertEqual(drupal_lookup_path('alias', $path['source']), "users/$name", 'English alias still returned after entering a language-neutral alias.');
-
- // Create a language-specific (xx-lolspeak) alias for the same path.
- $path = array(
- 'source' => "user/$uid",
- 'alias' => 'LOL',
- 'language' => 'xx-lolspeak',
- );
- path_save($path);
- $this->assertEqual(drupal_lookup_path('alias', $path['source']), "users/$name", 'English alias still returned after entering a LOLspeak alias.');
- // The LOLspeak alias should be returned if we really want LOLspeak.
- $this->assertEqual(drupal_lookup_path('alias', $path['source'], 'xx-lolspeak'), 'LOL', 'LOLspeak alias returned if we specify xx-lolspeak to drupal_lookup_path().');
-
- // Create a new alias for this path in English, which should override the
- // previous alias for "user/$uid".
- $path = array(
- 'source' => "user/$uid",
- 'alias' => 'users/my-new-path',
- 'language' => 'en',
- );
- path_save($path);
- $this->assertEqual(drupal_lookup_path('alias', $path['source']), $path['alias'], 'Recently created English alias returned.');
- $this->assertEqual(drupal_lookup_path('source', $path['alias']), $path['source'], 'Recently created English source returned.');
-
- // Remove the English aliases, which should cause a fallback to the most
- // recently created language-neutral alias, 'bar'.
- db_delete('url_alias')
- ->condition('language', 'en')
- ->execute();
- drupal_clear_path_cache();
- $this->assertEqual(drupal_lookup_path('alias', $path['source']), 'bar', 'Path lookup falls back to recently created language-neutral alias.');
-
- // Test the situation where the alias and language are the same, but
- // the source differs. The newer alias record should be returned.
- $account2 = $this->drupalCreateUser();
- $path = array(
- 'source' => 'user/' . $account2->uid,
- 'alias' => 'bar',
- );
- path_save($path);
- $this->assertEqual(drupal_lookup_path('source', $path['alias']), $path['source'], 'Newer alias record is returned when comparing two LANGUAGE_NONE paths with the same alias.');
- }
-}
-
-/**
- * Tests the path_save() function.
- */
-class PathSaveTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => t('Path save'),
- 'description' => t('Tests that path_save() exposes the previous alias value.'),
- 'group' => t('Path API'),
- );
- }
-
- function setUp() {
- // Enable a helper module that implements hook_path_update().
- parent::setUp('path_test');
- path_test_reset();
- }
-
- /**
- * Tests that path_save() makes the original path available to modules.
- */
- function testDrupalSaveOriginalPath() {
- $account = $this->drupalCreateUser();
- $uid = $account->uid;
- $name = $account->name;
-
- // Create a language-neutral alias.
- $path = array(
- 'source' => "user/$uid",
- 'alias' => 'foo',
- );
- $path_original = $path;
- path_save($path);
-
- // Alter the path.
- $path['alias'] = 'bar';
- path_save($path);
-
- // Test to see if the original alias is available to modules during
- // hook_path_update().
- $results = variable_get('path_test_results', array());
- $this->assertIdentical($results['hook_path_update']['original']['alias'], $path_original['alias'], 'Old path alias available to modules during hook_path_update.');
- $this->assertIdentical($results['hook_path_update']['original']['source'], $path_original['source'], 'Old path alias available to modules during hook_path_update.');
- }
-}
diff --git a/modules/simpletest/tests/path_test.info b/modules/simpletest/tests/path_test.info
deleted file mode 100644
index ea993ae..0000000
--- a/modules/simpletest/tests/path_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Hook path tests"
-description = "Support module for path hook testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/path_test.module b/modules/simpletest/tests/path_test.module
deleted file mode 100644
index d3dc80e..0000000
--- a/modules/simpletest/tests/path_test.module
+++ /dev/null
@@ -1,23 +0,0 @@
- 'PSR0 example test: PSR-0 in disabled modules.',
- 'description' => 'We want to assert that this test case is being discovered.',
- 'group' => 'SimpleTest',
- );
- }
-
- function testArithmetics() {
- $this->assert(1 + 1 == 2, '1 + 1 == 2');
- }
-}
diff --git a/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/Nested/NestedExampleTest.php b/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/Nested/NestedExampleTest.php
deleted file mode 100644
index 324ed43..0000000
--- a/modules/simpletest/tests/psr_0_test/lib/Drupal/psr_0_test/Tests/Nested/NestedExampleTest.php
+++ /dev/null
@@ -1,18 +0,0 @@
- 'PSR0 example test: PSR-0 in nested subfolders.',
- 'description' => 'We want to assert that this PSR-0 test case is being discovered.',
- 'group' => 'SimpleTest',
- );
- }
-
- function testArithmetics() {
- $this->assert(1 + 1 == 2, '1 + 1 == 2');
- }
-}
diff --git a/modules/simpletest/tests/psr_0_test/psr_0_test.info b/modules/simpletest/tests/psr_0_test/psr_0_test.info
deleted file mode 100644
index 48ca8d8..0000000
--- a/modules/simpletest/tests/psr_0_test/psr_0_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = PSR-0 Test cases
-description = Test classes to be discovered by simpletest.
-core = 7.x
-
-hidden = TRUE
-package = Testing
diff --git a/modules/simpletest/tests/psr_0_test/psr_0_test.module b/modules/simpletest/tests/psr_0_test/psr_0_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/psr_0_test/psr_0_test.module
+++ /dev/null
@@ -1 +0,0 @@
- 'PSR4 example test: PSR-4 in disabled modules.',
- 'description' => 'We want to assert that this test case is being discovered.',
- 'group' => 'SimpleTest',
- );
- }
-
- function testArithmetics() {
- $this->assert(1 + 1 == 2, '1 + 1 == 2');
- }
-}
diff --git a/modules/simpletest/tests/psr_4_test/src/Tests/Nested/NestedExampleTest.php b/modules/simpletest/tests/psr_4_test/src/Tests/Nested/NestedExampleTest.php
deleted file mode 100644
index ff3ac29..0000000
--- a/modules/simpletest/tests/psr_4_test/src/Tests/Nested/NestedExampleTest.php
+++ /dev/null
@@ -1,18 +0,0 @@
- 'PSR4 example test: PSR-4 in nested subfolders.',
- 'description' => 'We want to assert that this PSR-4 test case is being discovered.',
- 'group' => 'SimpleTest',
- );
- }
-
- function testArithmetics() {
- $this->assert(1 + 1 == 2, '1 + 1 == 2');
- }
-}
diff --git a/modules/simpletest/tests/registry.test b/modules/simpletest/tests/registry.test
deleted file mode 100644
index bcd8d4e..0000000
--- a/modules/simpletest/tests/registry.test
+++ /dev/null
@@ -1,142 +0,0 @@
- 'Registry parse file test',
- 'description' => 'Parse a simple file and check that its resources are saved to the database.',
- 'group' => 'System'
- );
- }
-
- function setUp() {
- $chrs = hash('sha256', microtime() . mt_rand());
- $this->fileName = 'registry_test_' . substr($chrs, 0, 16);
- $this->className = 'registry_test_class' . substr($chrs, 16, 16);
- $this->interfaceName = 'registry_test_interface' . substr($chrs, 32, 16);
- parent::setUp();
- }
-
- /**
- * testRegistryParseFile
- */
- function testRegistryParseFile() {
- _registry_parse_file($this->fileName, $this->getFileContents());
- foreach (array('className', 'interfaceName') as $resource) {
- $foundName = db_query('SELECT name FROM {registry} WHERE name = :name', array(':name' => $this->$resource))->fetchField();
- $this->assertTrue($this->$resource == $foundName, t('Resource "@resource" found.', array('@resource' => $this->$resource)));
- }
- }
-
- /**
- * getFileContents
- */
- function getFileContents() {
- $file_contents = <<className} {}
-
-interface {$this->interfaceName} {}
-
-CONTENTS;
- return $file_contents;
- }
-
-}
-
-class RegistryParseFilesTestCase extends DrupalWebTestCase {
- protected $fileTypes = array('new', 'existing_changed');
-
- public static function getInfo() {
- return array(
- 'name' => 'Registry parse files test',
- 'description' => 'Read two a simple files from disc, and check that their resources are saved to the database.',
- 'group' => 'System'
- );
- }
-
- function setUp() {
- parent::setUp();
- // Create files with some php to parse - one 'new', one 'existing' so
- // we test all the important code paths in _registry_parse_files.
- foreach ($this->fileTypes as $fileType) {
- $chrs = hash('sha256', microtime() . mt_rand());
- $this->$fileType = new stdClass();
- $this->$fileType->fileName = 'public://registry_test_' . substr($chrs, 0, 16);
- $this->$fileType->className = 'registry_test_class' . substr($chrs, 16, 16);
- $this->$fileType->interfaceName = 'registry_test_interface' . substr($chrs, 32, 16);
- $this->$fileType->contents = $this->getFileContents($fileType);
- file_save_data($this->$fileType->contents, $this->$fileType->fileName);
-
- if ($fileType == 'existing_changed') {
- // Add a record with an incorrect hash.
- $this->$fileType->fakeHash = hash('sha256', mt_rand());
- db_insert('registry_file')
- ->fields(array(
- 'hash' => $this->$fileType->fakeHash,
- 'filename' => $this->$fileType->fileName,
- ))
- ->execute();
-
- // Insert some fake resource records.
- foreach (array('class', 'interface') as $type) {
- db_insert('registry')
- ->fields(array(
- 'name' => $type . hash('sha256', microtime() . mt_rand()),
- 'type' => $type,
- 'filename' => $this->$fileType->fileName,
- ))
- ->execute();
- }
- }
- }
- }
-
- /**
- * testRegistryParseFiles
- */
- function testRegistryParseFiles() {
- _registry_parse_files($this->getFiles());
- foreach ($this->fileTypes as $fileType) {
- // Test that we have all the right resources.
- foreach (array('className', 'interfaceName') as $resource) {
- $foundName = db_query('SELECT name FROM {registry} WHERE name = :name', array(':name' => $this->$fileType->$resource))->fetchField();
- $this->assertTrue($this->$fileType->$resource == $foundName, t('Resource "@resource" found.', array('@resource' => $this->$fileType->$resource)));
- }
- // Test that we have the right hash.
- $hash = db_query('SELECT hash FROM {registry_file} WHERE filename = :filename', array(':filename' => $this->$fileType->fileName))->fetchField();
- $this->assertTrue(hash('sha256', $this->$fileType->contents) == $hash, t('sha-256 for "@filename" matched.' . $fileType . $hash, array('@filename' => $this->$fileType->fileName)));
- }
- }
-
- /**
- * getFiles
- */
- function getFiles() {
- $files = array();
- foreach ($this->fileTypes as $fileType) {
- $files[$this->$fileType->fileName] = array('module' => '', 'weight' => 0);
- if ($fileType == 'existing_changed') {
- $files[$this->$fileType->fileName]['hash'] = $this->$fileType->fakeHash;
- }
- }
- return $files;
- }
-
- /**
- * getFileContents
- */
- function getFileContents($fileType) {
- $file_contents = <<$fileType->className} {}
-
-interface {$this->$fileType->interfaceName} {}
-
-CONTENTS;
- return $file_contents;
- }
-
-}
diff --git a/modules/simpletest/tests/requirements1_test.info b/modules/simpletest/tests/requirements1_test.info
deleted file mode 100644
index b659b21..0000000
--- a/modules/simpletest/tests/requirements1_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Requirements 1 Test
-description = "Tests that a module is not installed when it fails hook_requirements('install')."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/requirements1_test.install b/modules/simpletest/tests/requirements1_test.install
deleted file mode 100644
index 91caca3..0000000
--- a/modules/simpletest/tests/requirements1_test.install
+++ /dev/null
@@ -1,21 +0,0 @@
- $t('Requirements 1 Test'),
- 'severity' => REQUIREMENT_ERROR,
- 'description' => $t('Requirements 1 Test failed requirements.'),
- );
- }
-
- return $requirements;
-}
diff --git a/modules/simpletest/tests/requirements1_test.module b/modules/simpletest/tests/requirements1_test.module
deleted file mode 100644
index e52266b..0000000
--- a/modules/simpletest/tests/requirements1_test.module
+++ /dev/null
@@ -1,7 +0,0 @@
- 'Schema API',
- 'description' => 'Tests table creation and modification via the schema API.',
- 'group' => 'Database',
- );
- }
-
- /**
- *
- */
- function testSchema() {
- // Try creating a table.
- $table_specification = array(
- 'description' => 'Schema table description.',
- 'fields' => array(
- 'id' => array(
- 'type' => 'int',
- 'default' => NULL,
- ),
- 'test_field' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'description' => 'Schema column description.',
- ),
- ),
- );
- db_create_table('test_table', $table_specification);
-
- // Assert that the table exists.
- $this->assertTrue(db_table_exists('test_table'), 'The table exists.');
-
- // Assert that the table comment has been set.
- $this->checkSchemaComment($table_specification['description'], 'test_table');
-
- // Assert that the column comment has been set.
- $this->checkSchemaComment($table_specification['fields']['test_field']['description'], 'test_table', 'test_field');
-
- // An insert without a value for the column 'test_table' should fail.
- $this->assertFalse($this->tryInsert(), 'Insert without a default failed.');
-
- // Add a default value to the column.
- db_field_set_default('test_table', 'test_field', 0);
- // The insert should now succeed.
- $this->assertTrue($this->tryInsert(), 'Insert with a default succeeded.');
-
- // Remove the default.
- db_field_set_no_default('test_table', 'test_field');
- // The insert should fail again.
- $this->assertFalse($this->tryInsert(), 'Insert without a default failed.');
-
- // Test for fake index and test for the boolean result of indexExists().
- $index_exists = Database::getConnection()->schema()->indexExists('test_table', 'test_field');
- $this->assertIdentical($index_exists, FALSE, 'Fake index does not exists');
- // Add index.
- db_add_index('test_table', 'test_field', array('test_field'));
- // Test for created index and test for the boolean result of indexExists().
- $index_exists = Database::getConnection()->schema()->indexExists('test_table', 'test_field');
- $this->assertIdentical($index_exists, TRUE, 'Index created.');
-
- // Rename the table.
- db_rename_table('test_table', 'test_table2');
-
- // Index should be renamed.
- $index_exists = Database::getConnection()->schema()->indexExists('test_table2', 'test_field');
- $this->assertTrue($index_exists, 'Index was renamed.');
-
- // We need the default so that we can insert after the rename.
- db_field_set_default('test_table2', 'test_field', 0);
- $this->assertFalse($this->tryInsert(), 'Insert into the old table failed.');
- $this->assertTrue($this->tryInsert('test_table2'), 'Insert into the new table succeeded.');
-
- // We should have successfully inserted exactly two rows.
- $count = db_query('SELECT COUNT(*) FROM {test_table2}')->fetchField();
- $this->assertEqual($count, 2, 'Two fields were successfully inserted.');
-
- // Try to drop the table.
- db_drop_table('test_table2');
- $this->assertFalse(db_table_exists('test_table2'), 'The dropped table does not exist.');
-
- // Recreate the table.
- db_create_table('test_table', $table_specification);
- db_field_set_default('test_table', 'test_field', 0);
- db_add_field('test_table', 'test_serial', array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'description' => 'Added column description.'));
-
- // Assert that the column comment has been set.
- $this->checkSchemaComment('Added column description.', 'test_table', 'test_serial');
-
- // Change the new field to a serial column.
- db_change_field('test_table', 'test_serial', 'test_serial', array('type' => 'serial', 'not null' => TRUE, 'description' => 'Changed column description.'), array('primary key' => array('test_serial')));
-
- // Assert that the column comment has been set.
- $this->checkSchemaComment('Changed column description.', 'test_table', 'test_serial');
-
- $this->assertTrue($this->tryInsert(), 'Insert with a serial succeeded.');
- $max1 = db_query('SELECT MAX(test_serial) FROM {test_table}')->fetchField();
- $this->assertTrue($this->tryInsert(), 'Insert with a serial succeeded.');
- $max2 = db_query('SELECT MAX(test_serial) FROM {test_table}')->fetchField();
- $this->assertTrue($max2 > $max1, 'The serial is monotone.');
-
- $count = db_query('SELECT COUNT(*) FROM {test_table}')->fetchField();
- $this->assertEqual($count, 2, 'There were two rows.');
-
- // Use database specific data type and ensure that table is created.
- $table_specification = array(
- 'description' => 'Schema table description.',
- 'fields' => array(
- 'timestamp' => array(
- 'mysql_type' => 'timestamp',
- 'pgsql_type' => 'timestamp',
- 'sqlite_type' => 'datetime',
- 'not null' => FALSE,
- 'default' => NULL,
- ),
- ),
- );
- try {
- db_create_table('test_timestamp', $table_specification);
- }
- catch (Exception $e) {}
- $this->assertTrue(db_table_exists('test_timestamp'), 'Table with database specific datatype was created.');
- }
-
- function tryInsert($table = 'test_table') {
- try {
- db_insert($table)
- ->fields(array('id' => mt_rand(10, 20)))
- ->execute();
- return TRUE;
- }
- catch (Exception $e) {
- return FALSE;
- }
- }
-
- /**
- * Checks that a table or column comment matches a given description.
- *
- * @param $description
- * The asserted description.
- * @param $table
- * The table to test.
- * @param $column
- * Optional column to test.
- */
- function checkSchemaComment($description, $table, $column = NULL) {
- if (method_exists(Database::getConnection()->schema(), 'getComment')) {
- $comment = Database::getConnection()->schema()->getComment($table, $column);
- $this->assertEqual($comment, $description, 'The comment matches the schema description.');
- }
- }
-
- /**
- * Tests creating unsigned columns and data integrity thereof.
- */
- function testUnsignedColumns() {
- // First create the table with just a serial column.
- $table_name = 'unsigned_table';
- $table_spec = array(
- 'fields' => array('serial_column' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE)),
- 'primary key' => array('serial_column'),
- );
- $ret = array();
- db_create_table($table_name, $table_spec);
-
- // Now set up columns for the other types.
- $types = array('int', 'float', 'numeric');
- foreach ($types as $type) {
- $column_spec = array('type' => $type, 'unsigned'=> TRUE);
- if ($type == 'numeric') {
- $column_spec += array('precision' => 10, 'scale' => 0);
- }
- $column_name = $type . '_column';
- $table_spec['fields'][$column_name] = $column_spec;
- db_add_field($table_name, $column_name, $column_spec);
- }
-
- // Finally, check each column and try to insert invalid values into them.
- foreach ($table_spec['fields'] as $column_name => $column_spec) {
- $this->assertTrue(db_field_exists($table_name, $column_name), format_string('Unsigned @type column was created.', array('@type' => $column_spec['type'])));
- $this->assertFalse($this->tryUnsignedInsert($table_name, $column_name), format_string('Unsigned @type column rejected a negative value.', array('@type' => $column_spec['type'])));
- }
- }
-
- /**
- * Tries to insert a negative value into columns defined as unsigned.
- *
- * @param $table_name
- * The table to insert
- * @param $column_name
- * The column to insert
- * @return
- * TRUE if the insert succeeded, FALSE otherwise
- */
- function tryUnsignedInsert($table_name, $column_name) {
- try {
- db_insert($table_name)
- ->fields(array($column_name => -1))
- ->execute();
- return TRUE;
- }
- catch (Exception $e) {
- return FALSE;
- }
- }
-
- /**
- * Test adding columns to an existing table.
- */
- function testSchemaAddField() {
- // Test varchar types.
- foreach (array(1, 32, 128, 256, 512) as $length) {
- $base_field_spec = array(
- 'type' => 'varchar',
- 'length' => $length,
- );
- $variations = array(
- array('not null' => FALSE),
- array('not null' => FALSE, 'default' => '7'),
- array('not null' => TRUE, 'initial' => 'd'),
- array('not null' => TRUE, 'initial' => 'd', 'default' => '7'),
- );
-
- foreach ($variations as $variation) {
- $field_spec = $variation + $base_field_spec;
- $this->assertFieldAdditionRemoval($field_spec);
- }
- }
-
- // Test int and float types.
- foreach (array('int', 'float') as $type) {
- foreach (array('tiny', 'small', 'medium', 'normal', 'big') as $size) {
- $base_field_spec = array(
- 'type' => $type,
- 'size' => $size,
- );
- $variations = array(
- array('not null' => FALSE),
- array('not null' => FALSE, 'default' => 7),
- array('not null' => TRUE, 'initial' => 1),
- array('not null' => TRUE, 'initial' => 1, 'default' => 7),
- );
-
- foreach ($variations as $variation) {
- $field_spec = $variation + $base_field_spec;
- $this->assertFieldAdditionRemoval($field_spec);
- }
- }
- }
-
- // Test numeric types.
- foreach (array(1, 5, 10, 40, 65) as $precision) {
- foreach (array(0, 2, 10, 30) as $scale) {
- if ($precision <= $scale) {
- // Precision must be smaller then scale.
- continue;
- }
-
- $base_field_spec = array(
- 'type' => 'numeric',
- 'scale' => $scale,
- 'precision' => $precision,
- );
- $variations = array(
- array('not null' => FALSE),
- array('not null' => FALSE, 'default' => 7),
- array('not null' => TRUE, 'initial' => 1),
- array('not null' => TRUE, 'initial' => 1, 'default' => 7),
- );
-
- foreach ($variations as $variation) {
- $field_spec = $variation + $base_field_spec;
- $this->assertFieldAdditionRemoval($field_spec);
- }
- }
- }
- }
-
- /**
- * Assert that a given field can be added and removed from a table.
- *
- * The addition test covers both defining a field of a given specification
- * when initially creating at table and extending an existing table.
- *
- * @param $field_spec
- * The schema specification of the field.
- */
- protected function assertFieldAdditionRemoval($field_spec) {
- // Try creating the field on a new table.
- $table_name = 'test_table_' . ($this->counter++);
- $table_spec = array(
- 'fields' => array(
- 'serial_column' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE),
- 'test_field' => $field_spec,
- ),
- 'primary key' => array('serial_column'),
- );
- db_create_table($table_name, $table_spec);
- $this->pass(format_string('Table %table created.', array('%table' => $table_name)));
-
- // Check the characteristics of the field.
- $this->assertFieldCharacteristics($table_name, 'test_field', $field_spec);
-
- // Clean-up.
- db_drop_table($table_name);
-
- // Try adding a field to an existing table.
- $table_name = 'test_table_' . ($this->counter++);
- $table_spec = array(
- 'fields' => array(
- 'serial_column' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE),
- ),
- 'primary key' => array('serial_column'),
- );
- db_create_table($table_name, $table_spec);
- $this->pass(format_string('Table %table created.', array('%table' => $table_name)));
-
- // Insert some rows to the table to test the handling of initial values.
- for ($i = 0; $i < 3; $i++) {
- db_insert($table_name)
- ->useDefaults(array('serial_column'))
- ->execute();
- }
-
- db_add_field($table_name, 'test_field', $field_spec);
- $this->pass(format_string('Column %column created.', array('%column' => 'test_field')));
-
- // Check the characteristics of the field.
- $this->assertFieldCharacteristics($table_name, 'test_field', $field_spec);
-
- // Clean-up.
- db_drop_field($table_name, 'test_field');
- db_drop_table($table_name);
- }
-
- /**
- * Assert that a newly added field has the correct characteristics.
- */
- protected function assertFieldCharacteristics($table_name, $field_name, $field_spec) {
- // Check that the initial value has been registered.
- if (isset($field_spec['initial'])) {
- // There should be no row with a value different then $field_spec['initial'].
- $count = db_select($table_name)
- ->fields($table_name, array('serial_column'))
- ->condition($field_name, $field_spec['initial'], '<>')
- ->countQuery()
- ->execute()
- ->fetchField();
- $this->assertEqual($count, 0, 'Initial values filled out.');
- }
-
- // Check that the default value has been registered.
- if (isset($field_spec['default'])) {
- // Try inserting a row, and check the resulting value of the new column.
- $id = db_insert($table_name)
- ->useDefaults(array('serial_column'))
- ->execute();
- $field_value = db_select($table_name)
- ->fields($table_name, array($field_name))
- ->condition('serial_column', $id)
- ->execute()
- ->fetchField();
- $this->assertEqual($field_value, $field_spec['default'], 'Default value registered.');
- }
-
- db_drop_field($table_name, $field_name);
- }
-}
diff --git a/modules/simpletest/tests/session.test b/modules/simpletest/tests/session.test
deleted file mode 100644
index 097503b..0000000
--- a/modules/simpletest/tests/session.test
+++ /dev/null
@@ -1,530 +0,0 @@
- 'Session tests',
- 'description' => 'Drupal session handling tests.',
- 'group' => 'Session'
- );
- }
-
- function setUp() {
- parent::setUp('session_test');
- }
-
- /**
- * Tests for drupal_save_session() and drupal_session_regenerate().
- */
- function testSessionSaveRegenerate() {
- $this->assertFalse(drupal_save_session(), 'drupal_save_session() correctly returns FALSE (inside of testing framework) when initially called with no arguments.', 'Session');
- $this->assertFalse(drupal_save_session(FALSE), 'drupal_save_session() correctly returns FALSE when called with FALSE.', 'Session');
- $this->assertFalse(drupal_save_session(), 'drupal_save_session() correctly returns FALSE when saving has been disabled.', 'Session');
- $this->assertTrue(drupal_save_session(TRUE), 'drupal_save_session() correctly returns TRUE when called with TRUE.', 'Session');
- $this->assertTrue(drupal_save_session(), 'drupal_save_session() correctly returns TRUE when saving has been enabled.', 'Session');
-
- // Test session hardening code from SA-2008-044.
- $user = $this->drupalCreateUser(array('access content'));
-
- // Enable sessions.
- $this->sessionReset($user->uid);
-
- // Make sure the session cookie is set as HttpOnly.
- $this->drupalLogin($user);
- $this->assertTrue(preg_match('/HttpOnly/i', $this->drupalGetHeader('Set-Cookie', TRUE)), 'Session cookie is set as HttpOnly.');
- $this->drupalLogout();
-
- // Verify that the session is regenerated if a module calls exit
- // in hook_user_login().
- user_save($user, array('name' => 'session_test_user'));
- $user->name = 'session_test_user';
- $this->drupalGet('session-test/id');
- $matches = array();
- preg_match('/\s*session_id:(.*)\n/', $this->drupalGetContent(), $matches);
- $this->assertTrue(!empty($matches[1]) , 'Found session ID before logging in.');
- $original_session = $matches[1];
-
- // We cannot use $this->drupalLogin($user); because we exit in
- // session_test_user_login() which breaks a normal assertion.
- $edit = array(
- 'name' => $user->name,
- 'pass' => $user->pass_raw
- );
- $this->drupalPost('user', $edit, t('Log in'));
- $this->drupalGet('user');
- $pass = $this->assertText($user->name, format_string('Found name: %name', array('%name' => $user->name)), 'User login');
- $this->_logged_in = $pass;
-
- $this->drupalGet('session-test/id');
- $matches = array();
- preg_match('/\s*session_id:(.*)\n/', $this->drupalGetContent(), $matches);
- $this->assertTrue(!empty($matches[1]) , 'Found session ID after logging in.');
- $this->assertTrue($matches[1] != $original_session, 'Session ID changed after login.');
- }
-
- /**
- * Test data persistence via the session_test module callbacks.
- */
- function testDataPersistence() {
- $user = $this->drupalCreateUser(array('access content'));
- // Enable sessions.
- $this->sessionReset($user->uid);
-
- $this->drupalLogin($user);
-
- $value_1 = $this->randomName();
- $this->drupalGet('session-test/set/' . $value_1);
- $this->assertText($value_1, 'The session value was stored.', 'Session');
- $this->drupalGet('session-test/get');
- $this->assertText($value_1, 'Session correctly returned the stored data for an authenticated user.', 'Session');
-
- // Attempt to write over val_1. If drupal_save_session(FALSE) is working.
- // properly, val_1 will still be set.
- $value_2 = $this->randomName();
- $this->drupalGet('session-test/no-set/' . $value_2);
- $this->assertText($value_2, 'The session value was correctly passed to session-test/no-set.', 'Session');
- $this->drupalGet('session-test/get');
- $this->assertText($value_1, 'Session data is not saved for drupal_save_session(FALSE).', 'Session');
-
- // Switch browser cookie to anonymous user, then back to user 1.
- $this->sessionReset();
- $this->sessionReset($user->uid);
- $this->assertText($value_1, 'Session data persists through browser close.', 'Session');
-
- // Logout the user and make sure the stored value no longer persists.
- $this->drupalLogout();
- $this->sessionReset();
- $this->drupalGet('session-test/get');
- $this->assertNoText($value_1, "After logout, previous user's session data is not available.", 'Session');
-
- // Now try to store some data as an anonymous user.
- $value_3 = $this->randomName();
- $this->drupalGet('session-test/set/' . $value_3);
- $this->assertText($value_3, 'Session data stored for anonymous user.', 'Session');
- $this->drupalGet('session-test/get');
- $this->assertText($value_3, 'Session correctly returned the stored data for an anonymous user.', 'Session');
-
- // Try to store data when drupal_save_session(FALSE).
- $value_4 = $this->randomName();
- $this->drupalGet('session-test/no-set/' . $value_4);
- $this->assertText($value_4, 'The session value was correctly passed to session-test/no-set.', 'Session');
- $this->drupalGet('session-test/get');
- $this->assertText($value_3, 'Session data is not saved for drupal_save_session(FALSE).', 'Session');
-
- // Login, the data should persist.
- $this->drupalLogin($user);
- $this->sessionReset($user->uid);
- $this->drupalGet('session-test/get');
- $this->assertNoText($value_1, 'Session has persisted for an authenticated user after logging out and then back in.', 'Session');
-
- // Change session and create another user.
- $user2 = $this->drupalCreateUser(array('access content'));
- $this->sessionReset($user2->uid);
- $this->drupalLogin($user2);
- }
-
- /**
- * Test that empty anonymous sessions are destroyed.
- */
- function testEmptyAnonymousSession() {
- // Verify that no session is automatically created for anonymous user.
- $this->drupalGet('');
- $this->assertSessionCookie(FALSE);
- $this->assertSessionEmpty(TRUE);
-
- // The same behavior is expected when caching is enabled.
- variable_set('cache', 1);
- $this->drupalGet('');
- $this->assertSessionCookie(FALSE);
- $this->assertSessionEmpty(TRUE);
- $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'MISS', 'Page was not cached.');
-
- // Start a new session by setting a message.
- $this->drupalGet('session-test/set-message');
- $this->assertSessionCookie(TRUE);
- $this->assertTrue($this->drupalGetHeader('Set-Cookie'), 'New session was started.');
-
- // Display the message, during the same request the session is destroyed
- // and the session cookie is unset.
- $this->drupalGet('');
- $this->assertSessionCookie(FALSE);
- $this->assertSessionEmpty(FALSE);
- $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'), 'Caching was bypassed.');
- $this->assertText(t('This is a dummy message.'), 'Message was displayed.');
- $this->assertTrue(preg_match('/SESS\w+=deleted/', $this->drupalGetHeader('Set-Cookie')), 'Session cookie was deleted.');
-
- // Verify that session was destroyed.
- $this->drupalGet('');
- $this->assertSessionCookie(FALSE);
- $this->assertSessionEmpty(TRUE);
- $this->assertNoText(t('This is a dummy message.'), 'Message was not cached.');
- $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Page was cached.');
- $this->assertFalse($this->drupalGetHeader('Set-Cookie'), 'New session was not started.');
-
- // Verify that no session is created if drupal_save_session(FALSE) is called.
- $this->drupalGet('session-test/set-message-but-dont-save');
- $this->assertSessionCookie(FALSE);
- $this->assertSessionEmpty(TRUE);
-
- // Verify that no message is displayed.
- $this->drupalGet('');
- $this->assertSessionCookie(FALSE);
- $this->assertSessionEmpty(TRUE);
- $this->assertNoText(t('This is a dummy message.'), 'The message was not saved.');
- }
-
- /**
- * Test that sessions are only saved when necessary.
- */
- function testSessionWrite() {
- $user = $this->drupalCreateUser(array('access content'));
- $this->drupalLogin($user);
-
- $sql = 'SELECT u.access, s.timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE u.uid = :uid';
- $times1 = db_query($sql, array(':uid' => $user->uid))->fetchObject();
-
- // Before every request we sleep one second to make sure that if the session
- // is saved, its timestamp will change.
-
- // Modify the session.
- sleep(1);
- $this->drupalGet('session-test/set/foo');
- $times2 = db_query($sql, array(':uid' => $user->uid))->fetchObject();
- $this->assertEqual($times2->access, $times1->access, 'Users table was not updated.');
- $this->assertNotEqual($times2->timestamp, $times1->timestamp, 'Sessions table was updated.');
-
- // Write the same value again, i.e. do not modify the session.
- sleep(1);
- $this->drupalGet('session-test/set/foo');
- $times3 = db_query($sql, array(':uid' => $user->uid))->fetchObject();
- $this->assertEqual($times3->access, $times1->access, 'Users table was not updated.');
- $this->assertEqual($times3->timestamp, $times2->timestamp, 'Sessions table was not updated.');
-
- // Do not change the session.
- sleep(1);
- $this->drupalGet('');
- $times4 = db_query($sql, array(':uid' => $user->uid))->fetchObject();
- $this->assertEqual($times4->access, $times3->access, 'Users table was not updated.');
- $this->assertEqual($times4->timestamp, $times3->timestamp, 'Sessions table was not updated.');
-
- // Force updating of users and sessions table once per second.
- variable_set('session_write_interval', 0);
- $this->drupalGet('');
- $times5 = db_query($sql, array(':uid' => $user->uid))->fetchObject();
- $this->assertNotEqual($times5->access, $times4->access, 'Users table was updated.');
- $this->assertNotEqual($times5->timestamp, $times4->timestamp, 'Sessions table was updated.');
- }
-
- /**
- * Test that empty session IDs are not allowed.
- */
- function testEmptySessionID() {
- $user = $this->drupalCreateUser(array('access content'));
- $this->drupalLogin($user);
- $this->drupalGet('session-test/is-logged-in');
- $this->assertResponse(200, 'User is logged in.');
-
- // Reset the sid in {sessions} to a blank string. This may exist in the
- // wild in some cases, although we normally prevent it from happening.
- db_query("UPDATE {sessions} SET sid = '' WHERE uid = :uid", array(':uid' => $user->uid));
- // Send a blank sid in the session cookie, and the session should no longer
- // be valid. Closing the curl handler will stop the previous session ID
- // from persisting.
- $this->curlClose();
- $this->additionalCurlOptions[CURLOPT_COOKIE] = rawurlencode($this->session_name) . '=;';
- $this->drupalGet('session-test/id-from-cookie');
- $this->assertRaw("session_id:\n", 'Session ID is blank as sent from cookie header.');
- // Assert that we have an anonymous session now.
- $this->drupalGet('session-test/is-logged-in');
- $this->assertResponse(403, 'An empty session ID is not allowed.');
- }
-
- /**
- * Reset the cookie file so that it refers to the specified user.
- *
- * @param $uid User id to set as the active session.
- */
- function sessionReset($uid = 0) {
- // Close the internal browser.
- $this->curlClose();
- $this->loggedInUser = FALSE;
-
- // Change cookie file for user.
- $this->cookieFile = file_stream_wrapper_get_instance_by_scheme('temporary')->getDirectoryPath() . '/cookie.' . $uid . '.txt';
- $this->additionalCurlOptions[CURLOPT_COOKIEFILE] = $this->cookieFile;
- $this->additionalCurlOptions[CURLOPT_COOKIESESSION] = TRUE;
- $this->drupalGet('session-test/get');
- $this->assertResponse(200, 'Session test module is correctly enabled.', 'Session');
- }
-
- /**
- * Assert whether the SimpleTest browser sent a session cookie.
- */
- function assertSessionCookie($sent) {
- if ($sent) {
- $this->assertNotNull($this->session_id, 'Session cookie was sent.');
- }
- else {
- $this->assertNull($this->session_id, 'Session cookie was not sent.');
- }
- }
-
- /**
- * Assert whether $_SESSION is empty at the beginning of the request.
- */
- function assertSessionEmpty($empty) {
- if ($empty) {
- $this->assertIdentical($this->drupalGetHeader('X-Session-Empty'), '1', 'Session was empty.');
- }
- else {
- $this->assertIdentical($this->drupalGetHeader('X-Session-Empty'), '0', 'Session was not empty.');
- }
- }
-}
-
-/**
- * Ensure that when running under HTTPS two session cookies are generated.
- */
-class SessionHttpsTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Session HTTPS handling',
- 'description' => 'Ensure that when running under HTTPS two session cookies are generated.',
- 'group' => 'Session'
- );
- }
-
- public function setUp() {
- parent::setUp('session_test');
- }
-
- protected function testHttpsSession() {
- global $is_https;
-
- if ($is_https) {
- $secure_session_name = session_name();
- $insecure_session_name = substr(session_name(), 1);
- }
- else {
- $secure_session_name = 'S' . session_name();
- $insecure_session_name = session_name();
- }
-
- $user = $this->drupalCreateUser(array('access administration pages'));
-
- // Test HTTPS session handling by altering the form action to submit the
- // login form through https.php, which creates a mock HTTPS request.
- $this->drupalGet('user');
- $form = $this->xpath('//form[@id="user-login"]');
- $form[0]['action'] = $this->httpsUrl('user');
- $edit = array('name' => $user->name, 'pass' => $user->pass_raw);
- $this->drupalPost(NULL, $edit, t('Log in'));
-
- // Test a second concurrent session.
- $this->curlClose();
- $this->drupalGet('user');
- $form = $this->xpath('//form[@id="user-login"]');
- $form[0]['action'] = $this->httpsUrl('user');
- $this->drupalPost(NULL, $edit, t('Log in'));
-
- // Check secure cookie on secure page.
- $this->assertTrue($this->cookies[$secure_session_name]['secure'], 'The secure cookie has the secure attribute');
- // Check insecure cookie is not set.
- $this->assertFalse(isset($this->cookies[$insecure_session_name]));
- $ssid = $this->cookies[$secure_session_name]['value'];
- $this->assertSessionIds($ssid, $ssid, 'Session has a non-empty SID and a correct secure SID.');
- $cookie = $secure_session_name . '=' . $ssid;
-
- // Verify that user is logged in on secure URL.
- $this->curlClose();
- $this->drupalGet($this->httpsUrl('admin/config'), array(), array('Cookie: ' . $cookie));
- $this->assertText(t('Configuration'));
- $this->assertResponse(200);
-
- // Verify that user is not logged in on non-secure URL.
- $this->curlClose();
- $this->drupalGet($this->httpUrl('admin/config'), array(), array('Cookie: ' . $cookie));
- $this->assertNoText(t('Configuration'));
- $this->assertResponse(403);
-
- // Verify that empty SID cannot be used on the non-secure site.
- $this->curlClose();
- $cookie = $insecure_session_name . '=';
- $this->drupalGet($this->httpUrl('admin/config'), array(), array('Cookie: ' . $cookie));
- $this->assertResponse(403);
-
- // Test HTTP session handling by altering the form action to submit the
- // login form through http.php, which creates a mock HTTP request on HTTPS
- // test environments.
- $this->curlClose();
- $this->drupalGet('user');
- $form = $this->xpath('//form[@id="user-login"]');
- $form[0]['action'] = $this->httpUrl('user');
- $edit = array('name' => $user->name, 'pass' => $user->pass_raw);
- $this->drupalPost(NULL, $edit, t('Log in'));
- $this->drupalGet($this->httpUrl('admin/config'));
- $this->assertResponse(200);
- $sid = $this->cookies[$insecure_session_name]['value'];
- $this->assertSessionIds($sid, '', 'Session has the correct SID and an empty secure SID.');
-
- // Verify that empty secure SID cannot be used on the secure site.
- $this->curlClose();
- $cookie = $secure_session_name . '=';
- $this->drupalGet($this->httpsUrl('admin/config'), array(), array('Cookie: ' . $cookie));
- $this->assertResponse(403);
-
- // Clear browser cookie jar.
- $this->cookies = array();
-
- if ($is_https) {
- // The functionality does not make sense when running on HTTPS.
- return;
- }
-
- // Enable secure pages.
- variable_set('https', TRUE);
-
- $this->curlClose();
- // Start an anonymous session on the insecure site.
- $session_data = $this->randomName();
- $this->drupalGet('session-test/set/' . $session_data);
- // Check secure cookie on insecure page.
- $this->assertFalse(isset($this->cookies[$secure_session_name]), 'The secure cookie is not sent on insecure pages.');
- // Check insecure cookie on insecure page.
- $this->assertFalse($this->cookies[$insecure_session_name]['secure'], 'The insecure cookie does not have the secure attribute');
-
- // Store the anonymous cookie so we can validate that its session is killed
- // after login.
- $anonymous_cookie = $insecure_session_name . '=' . $this->cookies[$insecure_session_name]['value'];
-
- // Check that password request form action is not secure.
- $this->drupalGet('user/password');
- $form = $this->xpath('//form[@id="user-pass"]');
- $this->assertNotEqual(substr($form[0]['action'], 0, 6), 'https:', 'Password request form action is not secure');
- $form[0]['action'] = $this->httpsUrl('user');
-
- // Check that user login form action is secure.
- $this->drupalGet('user');
- $form = $this->xpath('//form[@id="user-login"]');
- $this->assertEqual(substr($form[0]['action'], 0, 6), 'https:', 'Login form action is secure');
- $form[0]['action'] = $this->httpsUrl('user');
-
- $edit = array(
- 'name' => $user->name,
- 'pass' => $user->pass_raw,
- );
- $this->drupalPost(NULL, $edit, t('Log in'));
- // Check secure cookie on secure page.
- $this->assertTrue($this->cookies[$secure_session_name]['secure'], 'The secure cookie has the secure attribute');
- // Check insecure cookie on secure page.
- $this->assertFalse($this->cookies[$insecure_session_name]['secure'], 'The insecure cookie does not have the secure attribute');
-
- $sid = $this->cookies[$insecure_session_name]['value'];
- $ssid = $this->cookies[$secure_session_name]['value'];
- $this->assertSessionIds($sid, $ssid, 'Session has both secure and insecure SIDs');
- $cookies = array(
- $insecure_session_name . '=' . $sid,
- $secure_session_name . '=' . $ssid,
- );
-
- // Test that session data saved before login is still available on the
- // authenticated session.
- $this->drupalGet('session-test/get');
- $this->assertText($session_data, 'Session correctly returned the stored data set by the anonymous session.');
-
- foreach ($cookies as $cookie_key => $cookie) {
- foreach (array('admin/config', $this->httpsUrl('admin/config')) as $url_key => $url) {
- $this->curlClose();
-
- $this->drupalGet($url, array(), array('Cookie: ' . $cookie));
- if ($cookie_key == $url_key) {
- $this->assertText(t('Configuration'));
- $this->assertResponse(200);
- }
- else {
- $this->assertNoText(t('Configuration'));
- $this->assertResponse(403);
- }
- }
- }
-
- // Test that session data saved before login is not available using the
- // pre-login anonymous cookie.
- $this->cookies = array();
- $this->drupalGet('session-test/get', array('Cookie: ' . $anonymous_cookie));
- $this->assertNoText($session_data, 'Initial anonymous session is inactive after login.');
-
- // Clear browser cookie jar.
- $this->cookies = array();
-
- // Start an anonymous session on the secure site.
- $this->drupalGet($this->httpsUrl('session-test/set/1'));
-
- // Mock a login to the secure site using the secure session cookie.
- $this->drupalGet('user');
- $form = $this->xpath('//form[@id="user-login"]');
- $form[0]['action'] = $this->httpsUrl('user');
- $this->drupalPost(NULL, $edit, t('Log in'));
-
- // Test that the user is also authenticated on the insecure site.
- $this->drupalGet("user/{$user->uid}/edit");
- $this->assertResponse(200);
- }
-
- /**
- * Test that there exists a session with two specific session IDs.
- *
- * @param $sid
- * The insecure session ID to search for.
- * @param $ssid
- * The secure session ID to search for.
- * @param $assertion_text
- * The text to display when we perform the assertion.
- *
- * @return
- * The result of assertTrue() that there's a session in the system that
- * has the given insecure and secure session IDs.
- */
- protected function assertSessionIds($sid, $ssid, $assertion_text) {
- $args = array(
- ':sid' => $sid,
- ':ssid' => $ssid,
- );
- return $this->assertTrue(db_query('SELECT timestamp FROM {sessions} WHERE sid = :sid AND ssid = :ssid', $args)->fetchField(), $assertion_text);
- }
-
- /**
- * Builds a URL for submitting a mock HTTPS request to HTTP test environments.
- *
- * @param $url
- * A Drupal path such as 'user'.
- *
- * @return
- * An absolute URL.
- */
- protected function httpsUrl($url) {
- global $base_url;
- return $base_url . '/modules/simpletest/tests/https.php?q=' . $url;
- }
-
- /**
- * Builds a URL for submitting a mock HTTP request to HTTPS test environments.
- *
- * @param $url
- * A Drupal path such as 'user'.
- *
- * @return
- * An absolute URL.
- */
- protected function httpUrl($url) {
- global $base_url;
- return $base_url . '/modules/simpletest/tests/http.php?q=' . $url;
- }
-}
-
diff --git a/modules/simpletest/tests/session_test.info b/modules/simpletest/tests/session_test.info
deleted file mode 100644
index 3272156..0000000
--- a/modules/simpletest/tests/session_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Session test"
-description = "Support module for session data testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/simpletest/tests/session_test.module b/modules/simpletest/tests/session_test.module
deleted file mode 100644
index 689ff09..0000000
--- a/modules/simpletest/tests/session_test.module
+++ /dev/null
@@ -1,192 +0,0 @@
- 'Session value',
- 'page callback' => '_session_test_get',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['session-test/id'] = array(
- 'title' => 'Session ID',
- 'page callback' => '_session_test_id',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['session-test/id-from-cookie'] = array(
- 'title' => 'Session ID from cookie',
- 'page callback' => '_session_test_id_from_cookie',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['session-test/set/%'] = array(
- 'title' => 'Set session value',
- 'page callback' => '_session_test_set',
- 'page arguments' => array(2),
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['session-test/no-set/%'] = array(
- 'title' => 'Set session value but do not save session',
- 'page callback' => '_session_test_no_set',
- 'page arguments' => array(2),
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['session-test/set-message'] = array(
- 'title' => 'Set message',
- 'page callback' => '_session_test_set_message',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['session-test/set-message-but-dont-save'] = array(
- 'title' => 'Set message but do not save session',
- 'page callback' => '_session_test_set_message_but_dont_save',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['session-test/set-not-started'] = array(
- 'title' => 'Set message when session is not started',
- 'page callback' => '_session_test_set_not_started',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['session-test/is-logged-in'] = array(
- 'title' => 'Check if user is logged in',
- 'page callback' => '_session_test_is_logged_in',
- 'access callback' => 'user_is_logged_in',
- 'type' => MENU_CALLBACK,
- );
-
- return $items;
-}
-
-/**
- * Implements hook_boot().
- */
-function session_test_boot() {
- header('X-Session-Empty: ' . intval(empty($_SESSION)));
-}
-
-/**
- * Page callback, prints the stored session value to the screen.
- */
-function _session_test_get() {
- if (!empty($_SESSION['session_test_value'])) {
- return t('The current value of the stored session variable is: %val', array('%val' => $_SESSION['session_test_value']));
- }
- else {
- return "";
- }
-}
-
-/**
- * Page callback, stores a value in $_SESSION['session_test_value'].
- */
-function _session_test_set($value) {
- $_SESSION['session_test_value'] = $value;
- return t('The current value of the stored session variable has been set to %val', array('%val' => $value));
-}
-
-/**
- * Menu callback: turns off session saving and then tries to save a value
- * anyway.
- */
-function _session_test_no_set($value) {
- drupal_save_session(FALSE);
- _session_test_set($value);
- return t('session saving was disabled, and then %val was set', array('%val' => $value));
-}
-
-/**
- * Menu callback: print the current session ID.
- */
-function _session_test_id() {
- // Set a value in $_SESSION, so that drupal_session_commit() will start
- // a session.
- $_SESSION['test'] = 'test';
-
- drupal_session_commit();
-
- return 'session_id:' . session_id() . "\n";
-}
-
-/**
- * Menu callback: print the current session ID as read from the cookie.
- */
-function _session_test_id_from_cookie() {
- return 'session_id:' . $_COOKIE[session_name()] . "\n";
-}
-
-/**
- * Menu callback, sets a message to me displayed on the following page.
- */
-function _session_test_set_message() {
- drupal_set_message(t('This is a dummy message.'));
- print t('A message was set.');
- // Do not return anything, so the current request does not result in a themed
- // page with messages. The message will be displayed in the following request
- // instead.
-}
-
-/**
- * Menu callback, sets a message but call drupal_save_session(FALSE).
- */
-function _session_test_set_message_but_dont_save() {
- drupal_save_session(FALSE);
- _session_test_set_message();
-}
-
-/**
- * Menu callback, stores a value in $_SESSION['session_test_value'] without
- * having started the session in advance.
- */
-function _session_test_set_not_started() {
- if (!drupal_session_will_start()) {
- $_SESSION['session_test_value'] = t('Session was not started');
- }
-}
-
-/**
- * Implements hook_user().
- */
-function session_test_user_login($edit = array(), $user = NULL) {
- if ($user->name == 'session_test_user') {
- // Exit so we can verify that the session was regenerated
- // before hook_user() was called.
- exit;
- }
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- */
-function session_test_form_user_login_alter(&$form) {
- $form['#https'] = TRUE;
-}
-
-/**
- * Implements hook_drupal_goto_alter().
- *
- * Force the redirection to go to a non-secure page after being on a secure
- * page through https.php.
- */
-function session_test_drupal_goto_alter(&$path, &$options, &$http_response_code) {
- global $base_insecure_url, $is_https_mock;
- // Alter the redirect to use HTTP when using a mock HTTPS request through
- // https.php because form submissions would otherwise redirect to a
- // non-existent HTTPS site.
- if (!empty($is_https_mock)) {
- $path = $base_insecure_url . '/' . $path;
- }
-}
-
-/**
- * Menu callback, only available if current user is logged in.
- */
-function _session_test_is_logged_in() {
- return t('User is logged in.');
-}
diff --git a/modules/simpletest/tests/system.base.css b/modules/simpletest/tests/system.base.css
deleted file mode 100644
index c14ae9b..0000000
--- a/modules/simpletest/tests/system.base.css
+++ /dev/null
@@ -1,6 +0,0 @@
-
-/**
- * This file is for testing CSS file override in
- * CascadingStylesheetsTestCase::testRenderOverride().
- * No contents are necessary.
- */
diff --git a/modules/simpletest/tests/system_dependencies_test.info b/modules/simpletest/tests/system_dependencies_test.info
deleted file mode 100644
index 5b4bd10..0000000
--- a/modules/simpletest/tests/system_dependencies_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = "System dependency test"
-description = "Support module for testing system dependencies."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
-dependencies[] = _missing_dependency
diff --git a/modules/simpletest/tests/system_dependencies_test.module b/modules/simpletest/tests/system_dependencies_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/system_dependencies_test.module
+++ /dev/null
@@ -1 +0,0 @@
-2.0)
diff --git a/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.module b/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.module
+++ /dev/null
@@ -1 +0,0 @@
- 'system_test_sleep',
- 'page arguments' => array(2),
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
- $items['system-test/auth'] = array(
- 'page callback' => 'system_test_basic_auth_page',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
- $items['system-test/authorize-init/%'] = array(
- 'page callback' => 'system_test_authorize_init_page',
- 'page arguments' => array(2),
- 'access arguments' => array('administer software updates'),
- 'type' => MENU_CALLBACK,
- );
- $items['system-test/redirect/%'] = array(
- 'title' => 'Redirect',
- 'page callback' => 'system_test_redirect',
- 'page arguments' => array(2),
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['system-test/multiple-redirects/%'] = array(
- 'title' => 'Redirect',
- 'page callback' => 'system_test_multiple_redirects',
- 'page arguments' => array(2),
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['system-test/set-header'] = array(
- 'page callback' => 'system_test_set_header',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['system-test/redirect-noscheme'] = array(
- 'page callback' => 'system_test_redirect_noscheme',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['system-test/redirect-noparse'] = array(
- 'page callback' => 'system_test_redirect_noparse',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
- $items['system-test/redirect-invalid-scheme'] = array(
- 'page callback' => 'system_test_redirect_invalid_scheme',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/variable-get'] = array(
- 'title' => 'Variable Get',
- 'page callback' => 'variable_get',
- 'page arguments' => array('simpletest_bootstrap_variable_test', NULL),
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/lock-acquire'] = array(
- 'title' => 'Lock acquire',
- 'page callback' => 'system_test_lock_acquire',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/lock-exit'] = array(
- 'title' => 'Lock acquire then exit',
- 'page callback' => 'system_test_lock_exit',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/drupal-set-message'] = array(
- 'title' => 'Set messages with drupal_set_message()',
- 'page callback' => 'system_test_drupal_set_message',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/main-content-handling'] = array(
- 'title' => 'Test main content handling',
- 'page callback' => 'system_test_main_content_fallback',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/main-content-fallback'] = array(
- 'title' => 'Test main content fallback',
- 'page callback' => 'system_test_main_content_fallback',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/main-content-duplication'] = array(
- 'title' => 'Test main content duplication',
- 'page callback' => 'system_test_main_content_fallback',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/shutdown-functions'] = array(
- 'title' => 'Test main content duplication',
- 'page callback' => 'system_test_page_shutdown_functions',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/get-destination'] = array(
- 'title' => 'Test $_GET[\'destination\']',
- 'page callback' => 'system_test_get_destination',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- $items['system-test/request-destination'] = array(
- 'title' => 'Test $_REQUEST[\'destination\']',
- 'page callback' => 'system_test_request_destination',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- return $items;
-}
-
-function system_test_sleep($seconds) {
- sleep($seconds);
-}
-
-function system_test_basic_auth_page() {
- // The Authorization HTTP header is forwarded via Drupal's .htaccess file even
- // for PHP CGI SAPIs.
- if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
- $authorization_header = $_SERVER['HTTP_AUTHORIZATION'];
- }
- // If using CGI on Apache with mod_rewrite, the forwarded HTTP header appears
- // in the redirected HTTP headers. See
- // https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/ServerBag.php#L61
- elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
- $authorization_header = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
- }
- // Resemble PHP_AUTH_USER and PHP_AUTH_PW for a Basic authentication from
- // the HTTP_AUTHORIZATION header. See
- // http://www.php.net/manual/features.http-auth.php
- list($user, $pw) = explode(':', base64_decode(substr($authorization_header, 6)));
- $output = t('Username is @username.', array('@username' => $user));
- $output .= t('Password is @password.', array('@password' => $pw));
- return $output;
-}
-
-function system_test_redirect($code) {
- $code = (int) $code;
- if ($code != 200) {
- // Header names are case-insensitive.
- header("locaTION: " . url('system-test/redirect/200', array('absolute' => TRUE)), TRUE, $code);
- exit;
- }
- return '';
-}
-
-/**
- * Menu callback; sends a redirect header to itself until $count argument is 0.
- *
- * Emulates the variable number of redirects (given by initial $count argument)
- * to the final destination URL by continuous sending of 301 HTTP redirect
- * headers to itself together with decrementing the $count parameter until the
- * $count parameter reaches 0. After that it returns an empty string to render
- * the final destination page.
- *
- * @param $count
- * The count of redirects left until the final destination page.
- *
- * @returns
- * The location redirect if the $count > 0, otherwise an empty string.
- */
-function system_test_multiple_redirects($count) {
- $count = (int) $count;
- if ($count > 0) {
- header("location: " . url('system-test/multiple-redirects/' . --$count, array('absolute' => TRUE)), TRUE, 301);
- exit;
- }
- return '';
-}
-
-function system_test_set_header() {
- drupal_add_http_header($_GET['name'], $_GET['value']);
- return t('The following header was set: %name: %value', array('%name' => $_GET['name'], '%value' => $_GET['value']));
-}
-
-function system_test_redirect_noscheme() {
- header("Location: localhost/path", TRUE, 301);
- exit;
-}
-
-function system_test_redirect_noparse() {
- header("Location: http:///path", TRUE, 301);
- exit;
-}
-
-function system_test_redirect_invalid_scheme() {
- header("Location: ftp://localhost/path", TRUE, 301);
- exit;
-}
-
-/**
- * Implements hook_modules_installed().
- */
-function system_test_modules_installed($modules) {
- if (variable_get('test_verbose_module_hooks')) {
- foreach ($modules as $module) {
- drupal_set_message(t('hook_modules_installed fired for @module', array('@module' => $module)));
- }
- }
-}
-
-/**
- * Implements hook_modules_enabled().
- */
-function system_test_modules_enabled($modules) {
- if (variable_get('test_verbose_module_hooks')) {
- foreach ($modules as $module) {
- drupal_set_message(t('hook_modules_enabled fired for @module', array('@module' => $module)));
- }
- }
-}
-
-/**
- * Implements hook_modules_disabled().
- */
-function system_test_modules_disabled($modules) {
- if (variable_get('test_verbose_module_hooks')) {
- foreach ($modules as $module) {
- drupal_set_message(t('hook_modules_disabled fired for @module', array('@module' => $module)));
- }
- }
-}
-
-/**
- * Implements hook_modules_uninstalled().
- */
-function system_test_modules_uninstalled($modules) {
- if (variable_get('test_verbose_module_hooks')) {
- foreach ($modules as $module) {
- drupal_set_message(t('hook_modules_uninstalled fired for @module', array('@module' => $module)));
- }
- }
-}
-
-/**
- * Implements hook_boot().
- */
-function system_test_boot() {
- watchdog('system_test', 'hook_boot');
-}
-
-/**
- * Implements hook_init().
- */
-function system_test_init() {
- // Used by FrontPageTestCase to get the results of drupal_is_front_page().
- if (variable_get('front_page_output', 0) && drupal_is_front_page()) {
- drupal_set_message(t('On front page.'));
- }
-}
-
-/**
- * Implements hook_exit().
- */
-function system_test_exit() {
- watchdog('system_test', 'hook_exit');
-}
-
-/**
- * Implements hook_system_info_alter().
- */
-function system_test_system_info_alter(&$info, $file, $type) {
- // We need a static otherwise the last test will fail to alter common_test.
- static $test;
- if (($dependencies = variable_get('dependencies', array())) || $test) {
- if ($file->name == 'module_test') {
- $info['hidden'] = FALSE;
- $info['dependencies'][] = array_shift($dependencies);
- variable_set('dependencies', $dependencies);
- $test = TRUE;
- }
- if ($file->name == 'common_test') {
- $info['hidden'] = FALSE;
- $info['version'] = '7.x-2.4-beta3';
- }
- }
-
- // Make the system_dependencies_test visible by default.
- if ($file->name == 'system_dependencies_test') {
- $info['hidden'] = FALSE;
- }
- if (in_array($file->name, array(
- 'system_incompatible_module_version_dependencies_test',
- 'system_incompatible_core_version_dependencies_test',
- 'system_incompatible_module_version_test',
- 'system_incompatible_core_version_test',
- ))) {
- $info['hidden'] = FALSE;
- }
- if ($file->name == 'requirements1_test' || $file->name == 'requirements2_test') {
- $info['hidden'] = FALSE;
- }
-}
-
-/**
- * Try to acquire a named lock and report the outcome.
- */
-function system_test_lock_acquire() {
- if (lock_acquire('system_test_lock_acquire')) {
- lock_release('system_test_lock_acquire');
- return 'TRUE: Lock successfully acquired in system_test_lock_acquire()';
- }
- else {
- return 'FALSE: Lock not acquired in system_test_lock_acquire()';
- }
-}
-
-/**
- * Try to acquire a specific lock, and then exit.
- */
-function system_test_lock_exit() {
- if (lock_acquire('system_test_lock_exit', 900)) {
- echo 'TRUE: Lock successfully acquired in system_test_lock_exit()';
- // The shut-down function should release the lock.
- exit();
- }
- else {
- return 'FALSE: Lock not acquired in system_test_lock_exit()';
- }
-}
-
-/**
- * Implements hook_page_build().
- */
-function system_test_page_build(&$page) {
- $menu_item = menu_get_item();
- $main_content_display = &drupal_static('system_main_content_added', FALSE);
-
- if ($menu_item['path'] == 'system-test/main-content-handling') {
- $page['footer'] = drupal_set_page_content();
- $page['footer']['main']['#markup'] = '' . $page['footer']['main']['#markup'] . '
';
- }
- elseif ($menu_item['path'] == 'system-test/main-content-fallback') {
- drupal_set_page_content();
- $main_content_display = FALSE;
- }
- elseif ($menu_item['path'] == 'system-test/main-content-duplication') {
- drupal_set_page_content();
- }
-}
-
-/**
- * Menu callback to test main content fallback().
- */
-function system_test_main_content_fallback() {
- return t('Content to test main content fallback');
-}
-
-/**
- * A simple page callback which adds a register shutdown function.
- */
-function system_test_page_shutdown_functions($arg1, $arg2) {
- drupal_register_shutdown_function('_system_test_first_shutdown_function', $arg1, $arg2);
-}
-
-/**
- * Dummy shutdown function which registers another shutdown function.
- */
-function _system_test_first_shutdown_function($arg1, $arg2) {
- // Output something, page has already been printed and the session stored
- // so we can't use drupal_set_message.
- print t('First shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2));
- drupal_register_shutdown_function('_system_test_second_shutdown_function', $arg1, $arg2);
-}
-
-/**
- * Dummy shutdown function.
- */
-function _system_test_second_shutdown_function($arg1, $arg2) {
- // Output something, page has already been printed and the session stored
- // so we can't use drupal_set_message.
- print t('Second shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2));
-
- // Throw an exception with an HTML tag. Since this is called in a shutdown
- // function, it will not bubble up to the default exception handler but will
- // be caught in _drupal_shutdown_function() and be displayed through
- // _drupal_render_exception_safe().
- throw new Exception('Drupal is awesome .');
-}
-
-/**
- * Implements hook_filetransfer_info().
- */
-function system_test_filetransfer_info() {
- return array(
- 'system_test' => array(
- 'title' => t('System Test FileTransfer'),
- 'file' => 'system_test.module', // Should be a .inc, but for test, ok.
- 'class' => 'SystemTestFileTransfer',
- 'weight' => -10,
- ),
- );
-}
-
-/**
- * Mock FileTransfer object to test the settings form functionality.
- */
-class SystemTestFileTransfer {
- public static function factory() {
- return new SystemTestFileTransfer;
- }
-
- public function getSettingsForm() {
- $form = array();
- $form['system_test_username'] = array(
- '#type' => 'textfield',
- '#title' => t('System Test Username'),
- );
- return $form;
- }
-}
-
-/**
- * Page callback to initialize authorize.php during testing.
- *
- * @see system_authorized_init().
- */
-function system_test_authorize_init_page($page_title) {
- $authorize_url = $GLOBALS['base_url'] . '/authorize.php';
- system_authorized_init('system_test_authorize_run', drupal_get_path('module', 'system_test') . '/system_test.module', array(), $page_title);
- drupal_goto($authorize_url);
-}
-
-/**
- * Sets two messages and removes the first one before the messages are displayed.
- */
-function system_test_drupal_set_message() {
- // Set two messages.
- drupal_set_message('First message (removed).');
- drupal_set_message('Second message (not removed).');
-
- // Remove the first.
- unset($_SESSION['messages']['status'][0]);
-
- return '';
-}
-
-/**
- * Page callback to print out $_GET['destination'] for testing.
- */
-function system_test_get_destination() {
- if (isset($_GET['destination'])) {
- print $_GET['destination'];
- }
- // No need to render the whole page, we are just interested in this bit of
- // information.
- exit;
-}
-
-/**
- * Page callback to print out $_REQUEST['destination'] for testing.
- */
-function system_test_request_destination() {
- if (isset($_REQUEST['destination'])) {
- print $_REQUEST['destination'];
- }
- // No need to render the whole page, we are just interested in this bit of
- // information.
- exit;
-}
diff --git a/modules/simpletest/tests/tablesort.test b/modules/simpletest/tests/tablesort.test
deleted file mode 100644
index ffc9535..0000000
--- a/modules/simpletest/tests/tablesort.test
+++ /dev/null
@@ -1,166 +0,0 @@
- 'Tablesort',
- 'description' => 'Tests table sorting.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- // Save the original $_GET to be restored later.
- $this->GET = $_GET;
-
- parent::setUp();
- }
-
- function tearDown() {
- // Revert $_GET.
- $_GET = $this->GET;
-
- parent::tearDown();
- }
-
- /**
- * Test tablesort_init().
- */
- function testTableSortInit() {
-
- // Test simple table headers.
-
- $headers = array('foo', 'bar', 'baz');
- // Reset $_GET to prevent parameters from Simpletest and Batch API ending
- // up in $ts['query'].
- $_GET = array('q' => 'jahwohl');
- $expected_ts = array(
- 'name' => 'foo',
- 'sql' => '',
- 'sort' => 'asc',
- 'query' => array(),
- );
- $ts = tablesort_init($headers);
- $this->verbose(strtr('$ts: !ts ', array('!ts' => check_plain(var_export($ts, TRUE)))));
- $this->assertEqual($ts, $expected_ts, 'Simple table headers sorted correctly.');
-
- // Test with simple table headers plus $_GET parameters that should _not_
- // override the default.
-
- $_GET = array(
- 'q' => 'jahwohl',
- // This should not override the table order because only complex
- // headers are overridable.
- 'order' => 'bar',
- );
- $ts = tablesort_init($headers);
- $this->verbose(strtr('$ts: !ts ', array('!ts' => check_plain(var_export($ts, TRUE)))));
- $this->assertEqual($ts, $expected_ts, 'Simple table headers plus non-overriding $_GET parameters sorted correctly.');
-
- // Test with simple table headers plus $_GET parameters that _should_
- // override the default.
-
- $_GET = array(
- 'q' => 'jahwohl',
- 'sort' => 'DESC',
- // Add an unrelated parameter to ensure that tablesort will include
- // it in the links that it creates.
- 'alpha' => 'beta',
- );
- $expected_ts['sort'] = 'desc';
- $expected_ts['query'] = array('alpha' => 'beta');
- $ts = tablesort_init($headers);
- $this->verbose(strtr('$ts: !ts ', array('!ts' => check_plain(var_export($ts, TRUE)))));
- $this->assertEqual($ts, $expected_ts, 'Simple table headers plus $_GET parameters sorted correctly.');
-
- // Test complex table headers.
-
- $headers = array(
- 'foo',
- array(
- 'data' => '1',
- 'field' => 'one',
- 'sort' => 'asc',
- 'colspan' => 1,
- ),
- array(
- 'data' => '2',
- 'field' => 'two',
- 'sort' => 'desc',
- ),
- );
- // Reset $_GET from previous assertion.
- $_GET = array(
- 'q' => 'jahwohl',
- 'order' => '2',
- );
- $ts = tablesort_init($headers);
- $expected_ts = array(
- 'name' => '2',
- 'sql' => 'two',
- 'sort' => 'desc',
- 'query' => array(),
- );
- $this->verbose(strtr('$ts: !ts ', array('!ts' => check_plain(var_export($ts, TRUE)))));
- $this->assertEqual($ts, $expected_ts, 'Complex table headers sorted correctly.');
-
- // Test complex table headers plus $_GET parameters that should _not_
- // override the default.
-
- $_GET = array(
- 'q' => 'jahwohl',
- // This should not override the table order because this header does not
- // exist.
- 'order' => 'bar',
- );
- $ts = tablesort_init($headers);
- $expected_ts = array(
- 'name' => '1',
- 'sql' => 'one',
- 'sort' => 'asc',
- 'query' => array(),
- );
- $this->verbose(strtr('$ts: !ts ', array('!ts' => check_plain(var_export($ts, TRUE)))));
- $this->assertEqual($ts, $expected_ts, 'Complex table headers plus non-overriding $_GET parameters sorted correctly.');
- unset($_GET['sort'], $_GET['order'], $_GET['alpha']);
-
- // Test complex table headers plus $_GET parameters that _should_
- // override the default.
-
- $_GET = array(
- 'q' => 'jahwohl',
- 'order' => '1',
- 'sort' => 'ASC',
- // Add an unrelated parameter to ensure that tablesort will include
- // it in the links that it creates.
- 'alpha' => 'beta',
- );
- $expected_ts = array(
- 'name' => '1',
- 'sql' => 'one',
- 'sort' => 'asc',
- 'query' => array('alpha' => 'beta'),
- );
- $ts = tablesort_init($headers);
- $this->verbose(strtr('$ts: !ts ', array('!ts' => check_plain(var_export($ts, TRUE)))));
- $this->assertEqual($ts, $expected_ts, 'Complex table headers plus $_GET parameters sorted correctly.');
- unset($_GET['sort'], $_GET['order'], $_GET['alpha']);
-
- }
-}
diff --git a/modules/simpletest/tests/taxonomy_test.info b/modules/simpletest/tests/taxonomy_test.info
deleted file mode 100644
index e5bb4f1..0000000
--- a/modules/simpletest/tests/taxonomy_test.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = "Taxonomy test module"
-description = "Tests functions and hooks not used in core".
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
-dependencies[] = taxonomy
diff --git a/modules/simpletest/tests/taxonomy_test.install b/modules/simpletest/tests/taxonomy_test.install
deleted file mode 100644
index d5c94da..0000000
--- a/modules/simpletest/tests/taxonomy_test.install
+++ /dev/null
@@ -1,34 +0,0 @@
- 'Stores term antonym.',
- 'fields' => array(
- 'tid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'The {taxonomy_term_data}.tid of the term.',
- ),
- 'name' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The name of the antonym.',
- ),
- ),
- 'primary key' => array('tid'),
- );
-
- return $schema;
-}
diff --git a/modules/simpletest/tests/taxonomy_test.module b/modules/simpletest/tests/taxonomy_test.module
deleted file mode 100644
index f82950c..0000000
--- a/modules/simpletest/tests/taxonomy_test.module
+++ /dev/null
@@ -1,111 +0,0 @@
-tid);
- if ($antonym) {
- $term->antonym = $antonym;
- }
- }
-}
-
-/**
- * Implements hook_taxonomy_term_insert().
- */
-function taxonomy_test_taxonomy_term_insert($term) {
- if (!empty($term->antonym)) {
- db_insert('taxonomy_term_antonym')
- ->fields(array(
- 'tid' => $term->tid,
- 'name' => trim($term->antonym)
- ))
- ->execute();
- }
-}
-
-/**
- * Implements hook_taxonomy_term_update().
- */
-function taxonomy_test_taxonomy_term_update($term) {
- if (!empty($term->antonym)) {
- db_merge('taxonomy_term_antonym')
- ->key(array('tid' => $term->tid))
- ->fields(array(
- 'name' => trim($term->antonym)
- ))
- ->execute();
- }
-}
-
-/**
- * Implements hook_taxonomy_term_delete().
- */
-function taxonomy_test_taxonomy_term_delete($term) {
- db_delete('taxonomy_term_antonym')
- ->condition('tid', $term->tid)
- ->execute();
-}
-
-/**
- * Implements hook_taxonomy_term_view().
- */
-function taxonomy_test_taxonomy_term_view($term, $view_mode, $langcode) {
- if ($view_mode == 'full') {
- $term->content['taxonomy_test_term_view_check'] = array(
- '#prefix' => '',
- '#markup' => t('The antonym is %antonym', array('%antonym' => $term->antonym)),
- '#suffix' => '
',
- '#weight' => 10,
- );
- }
-}
-
-/**
- * Implements hook_entity_view().
- */
-function taxonomy_test_entity_view($entity, $type, $view_mode, $langcode) {
- if ($type == 'taxonomy_term' && $view_mode == 'full') {
- $entity->content['taxonomy_test_entity_view_check'] = array(
- '#prefix' => '',
- '#markup' => t('The antonym is %antonym', array('%antonym' => $entity->antonym)),
- '#suffix' => '
',
- '#weight' => 20,
- );
- }
-}
-
-/**
- * Implements hook_form_alter().
- */
-function taxonomy_test_form_alter(&$form, $form_state, $form_id) {
- if ($form_id == 'taxonomy_form_term') {
- $antonym = taxonomy_test_get_antonym($form['#term']['tid']);
- $form['advanced']['antonym'] = array(
- '#type' => 'textfield',
- '#title' => t('Antonym'),
- '#default_value' => !empty($antonym) ? $antonym : '',
- '#description' => t('Antonym of this term.')
- );
- }
-}
-
-/**
- * Return the antonym of the given term ID.
- */
-function taxonomy_test_get_antonym($tid) {
- return db_select('taxonomy_term_antonym', 'ta')
- ->fields('ta', array('name'))
- ->condition('tid', $tid)
- ->execute()
- ->fetchField();
-}
diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test
deleted file mode 100644
index f5ddfa9..0000000
--- a/modules/simpletest/tests/theme.test
+++ /dev/null
@@ -1,648 +0,0 @@
- 'Theme API',
- 'description' => 'Test low-level theme functions.',
- 'group' => 'Theme',
- );
- }
-
- function setUp() {
- parent::setUp('theme_test');
- theme_enable(array('test_theme'));
- }
-
- /**
- * Test function theme_get_suggestions() for SA-CORE-2009-003.
- */
- function testThemeSuggestions() {
- // Set the front page as something random otherwise the CLI
- // test runner fails.
- variable_set('site_frontpage', 'nobody-home');
- $args = array('node', '1', 'edit');
- $suggestions = theme_get_suggestions($args, 'page');
- $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1', 'page__node__edit'), 'Found expected node edit page suggestions');
- // Check attack vectors.
- $args = array('node', '\\1');
- $suggestions = theme_get_suggestions($args, 'page');
- $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1'), 'Removed invalid \\ from suggestions');
- $args = array('node', '1/');
- $suggestions = theme_get_suggestions($args, 'page');
- $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1'), 'Removed invalid / from suggestions');
- $args = array('node', "1\0");
- $suggestions = theme_get_suggestions($args, 'page');
- $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1'), 'Removed invalid \\0 from suggestions');
- // Define path with hyphens to be used to generate suggestions.
- $args = array('node', '1', 'hyphen-path');
- $result = array('page__node', 'page__node__%', 'page__node__1', 'page__node__hyphen_path');
- $suggestions = theme_get_suggestions($args, 'page');
- $this->assertEqual($suggestions, $result, 'Found expected page suggestions for paths containing hyphens.');
- }
-
- /**
- * Ensures preprocess functions run even for suggestion implementations.
- *
- * The theme hook used by this test has its base preprocess function in a
- * separate file, so this test also ensures that that file is correctly loaded
- * when needed.
- */
- function testPreprocessForSuggestions() {
- // Test with both an unprimed and primed theme registry.
- drupal_theme_rebuild();
- for ($i = 0; $i < 2; $i++) {
- $this->drupalGet('theme-test/suggestion');
- $this->assertText('Theme hook implementor=test_theme_theme_test__suggestion(). Foo=template_preprocess_theme_test', 'Theme hook suggestion ran with data available from a preprocess function for the base hook.');
- }
- }
-
- /**
- * Ensure page-front template suggestion is added when on front page.
- */
- function testFrontPageThemeSuggestion() {
- $q = $_GET['q'];
- // Set $_GET['q'] to node because theme_get_suggestions() will query it to
- // see if we are on the front page.
- $_GET['q'] = variable_get('site_frontpage', 'node');
- $suggestions = theme_get_suggestions(explode('/', $_GET['q']), 'page');
- // Set it back to not annoy the batch runner.
- $_GET['q'] = $q;
- $this->assertTrue(in_array('page__front', $suggestions), 'Front page template was suggested.');
- }
-
- /**
- * Ensures theme hook_*_alter() implementations can run before anything is rendered.
- */
- function testAlter() {
- $this->drupalGet('theme-test/alter');
- $this->assertText('The altered data is test_theme_theme_test_alter_alter was invoked.', 'The theme was able to implement an alter hook during page building before anything was rendered.');
- }
-
- /**
- * Ensures a theme's .info file is able to override a module CSS file from being added to the page.
- *
- * @see test_theme.info
- */
- function testCSSOverride() {
- // Reuse the same page as in testPreprocessForSuggestions(). We're testing
- // what is output to the HTML HEAD based on what is in a theme's .info file,
- // so it doesn't matter what page we get, as long as it is themed with the
- // test theme. First we test with CSS aggregation disabled.
- variable_set('preprocess_css', 0);
- $this->drupalGet('theme-test/suggestion');
- $this->assertNoText('system.base.css', 'The theme\'s .info file is able to override a module CSS file from being added to the page.');
-
- // Also test with aggregation enabled, simply ensuring no PHP errors are
- // triggered during drupal_build_css_cache() when a source file doesn't
- // exist. Then allow remaining tests to continue with aggregation disabled
- // by default.
- variable_set('preprocess_css', 1);
- $this->drupalGet('theme-test/suggestion');
- variable_set('preprocess_css', 0);
- }
-
- /**
- * Ensures the theme registry is rebuilt when modules are disabled/enabled.
- */
- function testRegistryRebuild() {
- $this->assertIdentical(theme('theme_test_foo', array('foo' => 'a')), 'a', 'The theme registry contains theme_test_foo.');
-
- module_disable(array('theme_test'), FALSE);
- $this->assertIdentical(theme('theme_test_foo', array('foo' => 'b')), '', 'The theme registry does not contain theme_test_foo, because the module is disabled.');
-
- module_enable(array('theme_test'), FALSE);
- $this->assertIdentical(theme('theme_test_foo', array('foo' => 'c')), 'c', 'The theme registry contains theme_test_foo again after re-enabling the module.');
- }
-
- /**
- * Test the list_themes() function.
- */
- function testListThemes() {
- $themes = list_themes();
- // Check if drupal_theme_access() retrieves enabled themes properly from list_themes().
- $this->assertTrue(drupal_theme_access('test_theme'), 'Enabled theme detected');
- // Check if list_themes() returns disabled themes.
- $this->assertTrue(array_key_exists('test_basetheme', $themes), 'Disabled theme detected');
- // Check for base theme and subtheme lists.
- $base_theme_list = array('test_basetheme' => 'Theme test base theme');
- $sub_theme_list = array('test_subtheme' => 'Theme test subtheme');
- $this->assertIdentical($themes['test_basetheme']->sub_themes, $sub_theme_list, 'Base theme\'s object includes list of subthemes.');
- $this->assertIdentical($themes['test_subtheme']->base_themes, $base_theme_list, 'Subtheme\'s object includes list of base themes.');
- // Check for theme engine in subtheme.
- $this->assertIdentical($themes['test_subtheme']->engine, 'phptemplate', 'Subtheme\'s object includes the theme engine.');
- // Check for theme engine prefix.
- $this->assertIdentical($themes['test_basetheme']->prefix, 'phptemplate', 'Base theme\'s object includes the theme engine prefix.');
- $this->assertIdentical($themes['test_subtheme']->prefix, 'phptemplate', 'Subtheme\'s object includes the theme engine prefix.');
- }
-
- /**
- * Test the theme_get_setting() function.
- */
- function testThemeGetSetting() {
- $GLOBALS['theme_key'] = 'test_theme';
- $this->assertIdentical(theme_get_setting('theme_test_setting'), 'default value', 'theme_get_setting() uses the default theme automatically.');
- $this->assertNotEqual(theme_get_setting('subtheme_override', 'test_basetheme'), theme_get_setting('subtheme_override', 'test_subtheme'), 'Base theme\'s default settings values can be overridden by subtheme.');
- $this->assertIdentical(theme_get_setting('basetheme_only', 'test_subtheme'), 'base theme value', 'Base theme\'s default settings values are inherited by subtheme.');
- }
-
- /**
- * Test the drupal_add_region_content() function.
- */
- function testDrupalAddRegionContent() {
- $this->drupalGet('theme-test/drupal-add-region-content');
- $this->assertText('Hello');
- $this->assertText('World');
- }
-}
-
-/**
- * Unit tests for theme_table().
- */
-class ThemeTableTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Theme Table',
- 'description' => 'Tests built-in theme functions.',
- 'group' => 'Theme',
- );
- }
-
- /**
- * Tableheader.js provides 'sticky' table headers, and is included by default.
- */
- function testThemeTableStickyHeaders() {
- $header = array('one', 'two', 'three');
- $rows = array(array(1,2,3), array(4,5,6), array(7,8,9));
- $this->content = theme('table', array('header' => $header, 'rows' => $rows));
- $js = drupal_add_js();
- $this->assertTrue(isset($js['misc/tableheader.js']), 'tableheader.js was included when $sticky = TRUE.');
- $this->assertRaw('sticky-enabled', 'Table has a class of sticky-enabled when $sticky = TRUE.');
- drupal_static_reset('drupal_add_js');
- }
-
- /**
- * If $sticky is FALSE, no tableheader.js should be included.
- */
- function testThemeTableNoStickyHeaders() {
- $header = array('one', 'two', 'three');
- $rows = array(array(1,2,3), array(4,5,6), array(7,8,9));
- $attributes = array();
- $caption = NULL;
- $colgroups = array();
- $this->content = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => $attributes, 'caption' => $caption, 'colgroups' => $colgroups, 'sticky' => FALSE));
- $js = drupal_add_js();
- $this->assertFalse(isset($js['misc/tableheader.js']), 'tableheader.js was not included because $sticky = FALSE.');
- $this->assertNoRaw('sticky-enabled', 'Table does not have a class of sticky-enabled because $sticky = FALSE.');
- drupal_static_reset('drupal_add_js');
- }
-
- /**
- * Tests that the table header is printed correctly even if there are no rows,
- * and that the empty text is displayed correctly.
- */
- function testThemeTableWithEmptyMessage() {
- $header = array(
- t('Header 1'),
- array(
- 'data' => t('Header 2'),
- 'colspan' => 2,
- ),
- );
- $this->content = theme('table', array('header' => $header, 'rows' => array(), 'empty' => t('No strings available.')));
- $this->assertRaw('No strings available. ', 'Correct colspan was set on empty message.');
- $this->assertRaw('Header 1 ', 'Table header was printed.');
- }
-
- /**
- * Tests that the 'no_striping' option works correctly.
- */
- function testThemeTableWithNoStriping() {
- $rows = array(
- array(
- 'data' => array(1),
- 'no_striping' => TRUE,
- ),
- );
- $this->content = theme('table', array('rows' => $rows));
- $this->assertNoRaw('class="odd"', 'Odd/even classes were not added because $no_striping = TRUE.');
- $this->assertNoRaw('no_striping', 'No invalid no_striping HTML attribute was printed.');
- }
-}
-
-/**
- * Unit tests for theme_item_list().
- */
-class ThemeItemListUnitTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Theme item list',
- 'description' => 'Test the theme_item_list() function.',
- 'group' => 'Theme',
- );
- }
-
- /**
- * Test item list rendering.
- */
- function testItemList() {
- $items = array('a', array('data' => 'b', 'children' => array('c' => 'c', 'd' => 'd', 'e' => 'e')), 'f');
- $expected = '';
- $output = theme('item_list', array('items' => $items));
- $this->assertIdentical($expected, $output, 'Item list is rendered correctly.');
- }
-}
-
-/**
- * Unit tests for theme_links().
- */
-class ThemeLinksTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Links',
- 'description' => 'Test the theme_links() function and rendering groups of links.',
- 'group' => 'Theme',
- );
- }
-
- /**
- * Test the use of drupal_pre_render_links() on a nested array of links.
- */
- function testDrupalPreRenderLinks() {
- // Define the base array to be rendered, containing a variety of different
- // kinds of links.
- $base_array = array(
- '#theme' => 'links',
- '#pre_render' => array('drupal_pre_render_links'),
- '#links' => array(
- 'parent_link' => array(
- 'title' => 'Parent link original',
- 'href' => 'parent-link-original',
- ),
- ),
- 'first_child' => array(
- '#theme' => 'links',
- '#links' => array(
- // This should be rendered if 'first_child' is rendered separately,
- // but ignored if the parent is being rendered (since it duplicates
- // one of the parent's links).
- 'parent_link' => array(
- 'title' => 'Parent link copy',
- 'href' => 'parent-link-copy',
- ),
- // This should always be rendered.
- 'first_child_link' => array(
- 'title' => 'First child link',
- 'href' => 'first-child-link',
- ),
- ),
- ),
- // This should always be rendered as part of the parent.
- 'second_child' => array(
- '#theme' => 'links',
- '#links' => array(
- 'second_child_link' => array(
- 'title' => 'Second child link',
- 'href' => 'second-child-link',
- ),
- ),
- ),
- // This should never be rendered, since the user does not have access to
- // it.
- 'third_child' => array(
- '#theme' => 'links',
- '#links' => array(
- 'third_child_link' => array(
- 'title' => 'Third child link',
- 'href' => 'third-child-link',
- ),
- ),
- '#access' => FALSE,
- ),
- );
-
- // Start with a fresh copy of the base array, and try rendering the entire
- // thing. We expect a single with appropriate links contained within
- // it.
- $render_array = $base_array;
- $html = drupal_render($render_array);
- $dom = new DOMDocument();
- $dom->loadHTML($html);
- $this->assertEqual($dom->getElementsByTagName('ul')->length, 1, 'One "ul" tag found in the rendered HTML.');
- $list_elements = $dom->getElementsByTagName('li');
- $this->assertEqual($list_elements->length, 3, 'Three "li" tags found in the rendered HTML.');
- $this->assertEqual($list_elements->item(0)->nodeValue, 'Parent link original', 'First expected link found.');
- $this->assertEqual($list_elements->item(1)->nodeValue, 'First child link', 'Second expected link found.');
- $this->assertEqual($list_elements->item(2)->nodeValue, 'Second child link', 'Third expected link found.');
- $this->assertIdentical(strpos($html, 'Parent link copy'), FALSE, '"Parent link copy" link not found.');
- $this->assertIdentical(strpos($html, 'Third child link'), FALSE, '"Third child link" link not found.');
-
- // Now render 'first_child', followed by the rest of the links, and make
- // sure we get two separate 's with the appropriate links contained
- // within each.
- $render_array = $base_array;
- $child_html = drupal_render($render_array['first_child']);
- $parent_html = drupal_render($render_array);
- // First check the child HTML.
- $dom = new DOMDocument();
- $dom->loadHTML($child_html);
- $this->assertEqual($dom->getElementsByTagName('ul')->length, 1, 'One "ul" tag found in the rendered child HTML.');
- $list_elements = $dom->getElementsByTagName('li');
- $this->assertEqual($list_elements->length, 2, 'Two "li" tags found in the rendered child HTML.');
- $this->assertEqual($list_elements->item(0)->nodeValue, 'Parent link copy', 'First expected link found.');
- $this->assertEqual($list_elements->item(1)->nodeValue, 'First child link', 'Second expected link found.');
- // Then check the parent HTML.
- $dom = new DOMDocument();
- $dom->loadHTML($parent_html);
- $this->assertEqual($dom->getElementsByTagName('ul')->length, 1, 'One "ul" tag found in the rendered parent HTML.');
- $list_elements = $dom->getElementsByTagName('li');
- $this->assertEqual($list_elements->length, 2, 'Two "li" tags found in the rendered parent HTML.');
- $this->assertEqual($list_elements->item(0)->nodeValue, 'Parent link original', 'First expected link found.');
- $this->assertEqual($list_elements->item(1)->nodeValue, 'Second child link', 'Second expected link found.');
- $this->assertIdentical(strpos($parent_html, 'First child link'), FALSE, '"First child link" link not found.');
- $this->assertIdentical(strpos($parent_html, 'Third child link'), FALSE, '"Third child link" link not found.');
- }
-}
-
-/**
- * Functional test for initialization of the theme system in hook_init().
- */
-class ThemeHookInitTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Theme initialization in hook_init()',
- 'description' => 'Tests that the theme system can be correctly initialized in hook_init().',
- 'group' => 'Theme',
- );
- }
-
- function setUp() {
- parent::setUp('theme_test');
- }
-
- /**
- * Test that the theme system can generate output when called by hook_init().
- */
- function testThemeInitializationHookInit() {
- $this->drupalGet('theme-test/hook-init');
- $this->assertRaw('Themed output generated in hook_init()', 'Themed output generated in hook_init() correctly appears on the page.');
- $this->assertRaw('bartik/css/style.css', "The default theme's CSS appears on the page when the theme system is initialized in hook_init().");
- }
-}
-
-/**
- * Tests autocompletion not loading registry.
- */
-class ThemeFastTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Theme fast initialization',
- 'description' => 'Test that autocompletion does not load the registry.',
- 'group' => 'Theme'
- );
- }
-
- function setUp() {
- parent::setUp('theme_test');
- $this->account = $this->drupalCreateUser(array('access user profiles'));
- }
-
- /**
- * Tests access to user autocompletion and verify the correct results.
- */
- function testUserAutocomplete() {
- $this->drupalLogin($this->account);
- $this->drupalGet('user/autocomplete/' . $this->account->name);
- $this->assertText('registry not initialized', 'The registry was not initialized');
- }
-}
-
-/**
- * Tests the markup of core render element types passed to drupal_render().
- */
-class RenderElementTypesTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Render element types',
- 'description' => 'Tests the markup of core render element types passed to drupal_render().',
- 'group' => 'Theme',
- );
- }
-
- /**
- * Asserts that an array of elements is rendered properly.
- *
- * @param array $elements
- * An array of associative arrays describing render elements and their
- * expected markup. Each item in $elements must contain the following:
- * - 'name': This human readable description will be displayed on the test
- * results page.
- * - 'value': This is the render element to test.
- * - 'expected': This is the expected markup for the element in 'value'.
- */
- function assertElements($elements) {
- foreach($elements as $element) {
- $this->assertIdentical(drupal_render($element['value']), $element['expected'], '"' . $element['name'] . '" input rendered correctly by drupal_render().');
- }
- }
-
- /**
- * Tests system #type 'container'.
- */
- function testContainer() {
- $elements = array(
- // Basic container with no attributes.
- array(
- 'name' => "#type 'container' with no HTML attributes",
- 'value' => array(
- '#type' => 'container',
- 'child' => array(
- '#markup' => 'foo',
- ),
- ),
- 'expected' => 'foo
',
- ),
- // Container with a class.
- array(
- 'name' => "#type 'container' with a class HTML attribute",
- 'value' => array(
- '#type' => 'container',
- 'child' => array(
- '#markup' => 'foo',
- ),
- '#attributes' => array(
- 'class' => 'bar',
- ),
- ),
- 'expected' => 'foo
',
- ),
- );
-
- $this->assertElements($elements);
- }
-
- /**
- * Tests system #type 'html_tag'.
- */
- function testHtmlTag() {
- $elements = array(
- // Test auto-closure meta tag generation.
- array(
- 'name' => "#type 'html_tag' auto-closure meta tag generation",
- 'value' => array(
- '#type' => 'html_tag',
- '#tag' => 'meta',
- '#attributes' => array(
- 'name' => 'description',
- 'content' => 'Drupal test',
- ),
- ),
- 'expected' => ' ' . "\n",
- ),
- // Test title tag generation.
- array(
- 'name' => "#type 'html_tag' title tag generation",
- 'value' => array(
- '#type' => 'html_tag',
- '#tag' => 'title',
- '#value' => 'title test',
- ),
- 'expected' => 'title test ' . "\n",
- ),
- );
-
- $this->assertElements($elements);
- }
-}
-
-/**
- * Tests for the ThemeRegistry class.
- */
-class ThemeRegistryTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'ThemeRegistry',
- 'description' => 'Tests the behavior of the ThemeRegistry class',
- 'group' => 'Theme',
- );
- }
- function setUp() {
- parent::setUp('theme_test');
- }
-
- /**
- * Tests the behavior of the theme registry class.
- */
- function testRaceCondition() {
- $_SERVER['REQUEST_METHOD'] = 'GET';
- $cid = 'test_theme_registry';
-
- // Directly instantiate the theme registry, this will cause a base cache
- // entry to be written in __construct().
- $registry = new ThemeRegistry($cid, 'cache');
-
- $this->assertTrue(cache_get($cid), 'Cache entry was created.');
-
- // Trigger a cache miss for an offset.
- $this->assertTrue($registry['theme_test_template_test'], 'Offset was returned correctly from the theme registry.');
- // This will cause the ThemeRegistry class to write an updated version of
- // the cache entry when it is destroyed, usually at the end of the request.
- // Before that happens, manually delete the cache entry we created earlier
- // so that the new entry is written from scratch.
- cache_clear_all($cid, 'cache');
-
- // Destroy the class so that it triggers a cache write for the offset.
- unset($registry);
-
- $this->assertTrue(cache_get($cid), 'Cache entry was created.');
-
- // Create a new instance of the class. Confirm that both the offset
- // requested previously, and one that has not yet been requested are both
- // available.
- $registry = new ThemeRegistry($cid, 'cache');
-
- $this->assertTrue($registry['theme_test_template_test'], 'Offset was returned correctly from the theme registry');
- $this->assertTrue($registry['theme_test_template_test_2'], 'Offset was returned correctly from the theme registry');
- }
-}
-
-/**
- * Tests for theme debug markup.
- */
-class ThemeDebugMarkupTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Theme debug markup',
- 'description' => 'Tests theme debug markup output.',
- 'group' => 'Theme',
- );
- }
-
- function setUp() {
- parent::setUp('theme_test', 'node');
- theme_enable(array('test_theme'));
- }
-
- /**
- * Tests debug markup added to template output.
- */
- function testDebugOutput() {
- variable_set('theme_default', 'test_theme');
- // Enable the debug output.
- variable_set('theme_debug', TRUE);
-
- $registry = theme_get_registry();
- $extension = '.tpl.php';
- // Populate array of templates.
- $templates = drupal_find_theme_templates($registry, $extension, drupal_get_path('theme', 'test_theme'));
- $templates += drupal_find_theme_templates($registry, $extension, drupal_get_path('module', 'node'));
-
- // Create a node and test different features of the debug markup.
- $node = $this->drupalCreateNode();
- $this->drupalGet('node/' . $node->nid);
- $this->assertRaw('', 'Theme debug markup found in theme output when debug is enabled.');
- $this->assertRaw("CALL: theme('node')", 'Theme call information found.');
- $this->assertRaw('x node--1' . $extension . PHP_EOL . ' * node--page' . $extension . PHP_EOL . ' * node' . $extension, 'Suggested template files found in order and node ID specific template shown as current template.');
- $template_filename = $templates['node__1']['path'] . '/' . $templates['node__1']['template'] . $extension;
- $this->assertRaw("BEGIN OUTPUT from '$template_filename'", 'Full path to current template file found.');
-
- // Create another node and make sure the template suggestions shown in the
- // debug markup are correct.
- $node2 = $this->drupalCreateNode();
- $this->drupalGet('node/' . $node2->nid);
- $this->assertRaw('* node--2' . $extension . PHP_EOL . ' * node--page' . $extension . PHP_EOL . ' x node' . $extension, 'Suggested template files found in order and base template shown as current template.');
-
- // Create another node and make sure the template suggestions shown in the
- // debug markup are correct.
- $node3 = $this->drupalCreateNode();
- $build = array('#theme' => 'node__foo__bar');
- $build += node_view($node3);
- $output = drupal_render($build);
- $this->assertTrue(strpos($output, "CALL: theme('node__foo__bar')") !== FALSE, 'Theme call information found.');
- $this->assertTrue(strpos($output, '* node--foo--bar' . $extension . PHP_EOL . ' * node--foo' . $extension . PHP_EOL . ' * node--3' . $extension . PHP_EOL . ' * node--page' . $extension . PHP_EOL . ' x node' . $extension) !== FALSE, 'Suggested template files found in order and base template shown as current template.');
-
- // Disable theme debug.
- variable_set('theme_debug', FALSE);
-
- $this->drupalGet('node/' . $node->nid);
- $this->assertNoRaw('', 'Theme debug markup not found in theme output when debug is disabled.');
- }
-
-}
diff --git a/modules/simpletest/tests/theme_test.inc b/modules/simpletest/tests/theme_test.inc
deleted file mode 100644
index 6cde683..0000000
--- a/modules/simpletest/tests/theme_test.inc
+++ /dev/null
@@ -1,15 +0,0 @@
- 'theme_test.inc',
- 'variables' => array('foo' => ''),
- );
- $items['theme_test_template_test'] = array(
- 'template' => 'theme_test.template_test',
- );
- $items['theme_test_template_test_2'] = array(
- 'template' => 'theme_test.template_test',
- );
- $items['theme_test_foo'] = array(
- 'variables' => array('foo' => NULL),
- );
- return $items;
-}
-
-/**
- * Implements hook_system_theme_info().
- */
-function theme_test_system_theme_info() {
- $themes['test_theme'] = drupal_get_path('module', 'theme_test') . '/themes/test_theme/test_theme.info';
- $themes['test_basetheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_basetheme/test_basetheme.info';
- $themes['test_subtheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_subtheme/test_subtheme.info';
- return $themes;
-}
-
-/**
- * Implements hook_menu().
- */
-function theme_test_menu() {
- $items['theme-test/suggestion'] = array(
- 'title' => 'Suggestion',
- 'page callback' => '_theme_test_suggestion',
- 'access arguments' => array('access content'),
- 'theme callback' => '_theme_custom_theme',
- 'type' => MENU_CALLBACK,
- );
- $items['theme-test/alter'] = array(
- 'title' => 'Suggestion',
- 'page callback' => '_theme_test_alter',
- 'access arguments' => array('access content'),
- 'theme callback' => '_theme_custom_theme',
- 'type' => MENU_CALLBACK,
- );
- $items['theme-test/hook-init'] = array(
- 'page callback' => 'theme_test_hook_init_page_callback',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
- $items['theme-test/drupal-add-region-content'] = array(
- 'page callback' => '_theme_test_drupal_add_region_content',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
- return $items;
-}
-
-/**
- * Implements hook_init().
- */
-function theme_test_init() {
- if (arg(0) == 'theme-test' && arg(1) == 'hook-init') {
- // First, force the theme registry to be rebuilt on this page request. This
- // allows us to test a full initialization of the theme system in the code
- // below.
- drupal_theme_rebuild();
- // Next, initialize the theme system by storing themed text in a global
- // variable. We will use this later in theme_test_hook_init_page_callback()
- // to test that even when the theme system is initialized this early, it is
- // still capable of returning output and theming the page as a whole.
- $GLOBALS['theme_test_output'] = theme('more_link', array('url' => 'user', 'title' => 'Themed output generated in hook_init()'));
- }
-}
-
-/**
- * Implements hook_exit().
- */
-function theme_test_exit() {
- if (arg(0) == 'user') {
- // Register a fake registry loading callback. If it gets called by
- // theme_get_registry(), the registry has not been initialized yet.
- _theme_registry_callback('_theme_test_load_registry', array());
- print theme_get_registry() ? 'registry initialized' : 'registry not initialized';
- }
-}
-
-/**
- * Fake registry loading callback.
- */
-function _theme_test_load_registry() {
- return array();
-}
-
-/**
- * Menu callback for testing themed output generated in hook_init().
- */
-function theme_test_hook_init_page_callback() {
- return $GLOBALS['theme_test_output'];
-}
-
-/**
- * Custom theme callback.
- */
-function _theme_custom_theme() {
- return 'test_theme';
-}
-
-/**
- * Page callback, calls drupal_alter().
- *
- * This is for testing that the theme can have hook_*_alter() implementations
- * that run during page callback execution, even before theme() is called for
- * the first time.
- */
-function _theme_test_alter() {
- $data = 'foo';
- drupal_alter('theme_test_alter', $data);
- return "The altered data is $data.";
-}
-
-/**
- * Page callback, calls a theme hook suggestion.
- */
-function _theme_test_suggestion() {
- return theme(array('theme_test__suggestion', 'theme_test'), array());
-}
-
-/**
- * Page callback, calls drupal_add_region_content.
- */
-function _theme_test_drupal_add_region_content() {
- drupal_add_region_content('content', 'World');
- return 'Hello';
-}
-
-/**
- * Theme function for testing theme('theme_test_foo').
- */
-function theme_theme_test_foo($variables) {
- return $variables['foo'];
-}
diff --git a/modules/simpletest/tests/theme_test.template_test.tpl.php b/modules/simpletest/tests/theme_test.template_test.tpl.php
deleted file mode 100644
index cde8faa..0000000
--- a/modules/simpletest/tests/theme_test.template_test.tpl.php
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Fail: Template not overridden.
diff --git a/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info b/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info
deleted file mode 100644
index c39e8a2..0000000
--- a/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Theme test base theme
-description = Test theme which acts as a base theme for other test subthemes.
-core = 7.x
-hidden = TRUE
-
-settings[basetheme_only] = base theme value
-settings[subtheme_override] = base theme value
diff --git a/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info b/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info
deleted file mode 100644
index 7da71e0..0000000
--- a/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Theme test subtheme
-description = Test theme which uses test_basetheme as the base theme.
-core = 7.x
-base theme = test_basetheme
-hidden = TRUE
-
-settings[subtheme_override] = subtheme value
diff --git a/modules/simpletest/tests/themes/test_theme/template.php b/modules/simpletest/tests/themes/test_theme/template.php
deleted file mode 100644
index 8275818..0000000
--- a/modules/simpletest/tests/themes/test_theme/template.php
+++ /dev/null
@@ -1,19 +0,0 @@
-
-Node Content Dummy
diff --git a/modules/simpletest/tests/themes/test_theme/test_theme.info b/modules/simpletest/tests/themes/test_theme/test_theme.info
deleted file mode 100644
index 4bbbe7a..0000000
--- a/modules/simpletest/tests/themes/test_theme/test_theme.info
+++ /dev/null
@@ -1,18 +0,0 @@
-name = Test theme
-description = Theme for testing the theme system
-core = 7.x
-hidden = TRUE
-
-; Normally, themes may list CSS files like this, and if they exist in the theme
-; folder, then they get added to the page. If they have the same file name as a
-; module CSS file, then the theme's version overrides the module's version, so
-; that the module's version is not added to the page. Additionally, a theme may
-; have an entry like this one, without having the corresponding CSS file in the
-; theme's folder, and in this case, it just stops the module's version from
-; being loaded, and does not replace it with an alternate version. We have this
-; here in order for a test to ensure that this correctly prevents the module
-; version from being loaded, and that errors aren't caused by the lack of this
-; file within the theme folder.
-stylesheets[all][] = system.base.css
-
-settings[theme_test_setting] = default value
diff --git a/modules/simpletest/tests/unicode.test b/modules/simpletest/tests/unicode.test
deleted file mode 100644
index 4aaf26d..0000000
--- a/modules/simpletest/tests/unicode.test
+++ /dev/null
@@ -1,305 +0,0 @@
- 'Unicode handling',
- 'description' => 'Tests Drupal Unicode handling.',
- 'group' => 'System',
- );
- }
-
- /**
- * Test full unicode features implemented using the mbstring extension.
- */
- function testMbStringUnicode() {
- global $multibyte;
-
- // mbstring was not detected on this installation, there is no way to test
- // multibyte features. Treat that as an exception.
- if ($multibyte == UNICODE_SINGLEBYTE) {
- $this->error(t('Unable to test Multibyte features: mbstring extension was not detected.'));
- }
-
- $multibyte = UNICODE_MULTIBYTE;
-
- $this->extendedMode = TRUE;
- $this->pass(t('Testing in mbstring mode'));
-
- $this->helperTestStrToLower();
- $this->helperTestStrToUpper();
- $this->helperTestUcFirst();
- $this->helperTestStrLen();
- $this->helperTestSubStr();
- $this->helperTestTruncate();
- }
-
- /**
- * Test emulated unicode features.
- */
- function testEmulatedUnicode() {
- global $multibyte;
-
- $multibyte = UNICODE_SINGLEBYTE;
-
- $this->extendedMode = FALSE;
-
- $this->pass(t('Testing in emulated (best-effort) mode'));
-
- $this->helperTestStrToLower();
- $this->helperTestStrToUpper();
- $this->helperTestUcFirst();
- $this->helperTestStrLen();
- $this->helperTestSubStr();
- $this->helperTestTruncate();
- }
-
- function helperTestStrToLower() {
- $testcase = array(
- 'tHe QUIcK bRoWn' => 'the quick brown',
- 'FrançAIS is ÜBER-åwesome' => 'français is über-åwesome',
- );
- if ($this->extendedMode) {
- $testcase['ΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΣὨ'] = 'αβγδεζηθικλμνξοσὠ';
- }
-
- foreach ($testcase as $input => $output) {
- $this->assertEqual(drupal_strtolower($input), $output, format_string('%input is lowercased as %output', array('%input' => $input, '%output' => $output)));
- }
- }
-
- function helperTestStrToUpper() {
- $testcase = array(
- 'tHe QUIcK bRoWn' => 'THE QUICK BROWN',
- 'FrançAIS is ÜBER-åwesome' => 'FRANÇAIS IS ÜBER-ÅWESOME',
- );
- if ($this->extendedMode) {
- $testcase['αβγδεζηθικλμνξοσὠ'] = 'ΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΣὨ';
- }
-
- foreach ($testcase as $input => $output) {
- $this->assertEqual(drupal_strtoupper($input), $output, format_string('%input is uppercased as %output', array('%input' => $input, '%output' => $output)));
- }
- }
-
- function helperTestUcFirst() {
- $testcase = array(
- 'tHe QUIcK bRoWn' => 'THe QUIcK bRoWn',
- 'françAIS' => 'FrançAIS',
- 'über' => 'Über',
- 'Ã¥wesome' => 'Ã…wesome'
- );
- if ($this->extendedMode) {
- $testcase['σion'] = 'Σion';
- }
-
- foreach ($testcase as $input => $output) {
- $this->assertEqual(drupal_ucfirst($input), $output, format_string('%input is ucfirst-ed as %output', array('%input' => $input, '%output' => $output)));
- }
- }
-
- function helperTestStrLen() {
- $testcase = array(
- 'tHe QUIcK bRoWn' => 15,
- 'ÃœBER-Ã¥wesome' => 12,
- );
-
- foreach ($testcase as $input => $output) {
- $this->assertEqual(drupal_strlen($input), $output, format_string('%input length is %output', array('%input' => $input, '%output' => $output)));
- }
- }
-
- function helperTestSubStr() {
- $testcase = array(
- // 012345678901234567890123
- array('frà nçAIS is über-åwesome', 0, 0,
- ''),
- array('frà nçAIS is über-åwesome', 0, 1,
- 'f'),
- array('frà nçAIS is über-åwesome', 0, 8,
- 'frà nçAIS'),
- array('frà nçAIS is über-åwesome', 0, 23,
- 'frà nçAIS is über-åwesom'),
- array('frà nçAIS is über-åwesome', 0, 24,
- 'frà nçAIS is über-åwesome'),
- array('frà nçAIS is über-åwesome', 0, 25,
- 'frà nçAIS is über-åwesome'),
- array('frà nçAIS is über-åwesome', 0, 100,
- 'frà nçAIS is über-åwesome'),
- array('frà nçAIS is über-åwesome', 4, 4,
- 'çAIS'),
- array('frà nçAIS is über-åwesome', 1, 0,
- ''),
- array('frà nçAIS is über-åwesome', 100, 0,
- ''),
- array('frà nçAIS is über-åwesome', -4, 2,
- 'so'),
- array('frà nçAIS is über-åwesome', -4, 3,
- 'som'),
- array('frà nçAIS is über-åwesome', -4, 4,
- 'some'),
- array('frà nçAIS is über-åwesome', -4, 5,
- 'some'),
- array('frà nçAIS is über-åwesome', -7, 10,
- 'Ã¥wesome'),
- array('frà nçAIS is über-åwesome', 5, -10,
- 'AIS is üb'),
- array('frà nçAIS is über-åwesome', 0, -10,
- 'frà nçAIS is üb'),
- array('frà nçAIS is über-åwesome', 0, -1,
- 'frà nçAIS is über-åwesom'),
- array('frà nçAIS is über-åwesome', -7, -2,
- 'Ã¥weso'),
- array('frà nçAIS is über-åwesome', -7, -6,
- 'Ã¥'),
- array('frà nçAIS is über-åwesome', -7, -7,
- ''),
- array('frà nçAIS is über-åwesome', -7, -8,
- ''),
- array('...', 0, 2, '..'),
- array('以呂波耳・ã»ã¸ã¨ã¡ã€‚リヌルヲ。', 1, 3,
- '呂波耳'),
-
- );
-
- foreach ($testcase as $test) {
- list($input, $start, $length, $output) = $test;
- $result = drupal_substr($input, $start, $length);
- $this->assertEqual($result, $output, format_string('%input substring at offset %offset for %length characters is %output (got %result)', array('%input' => $input, '%offset' => $start, '%length' => $length, '%output' => $output, '%result' => $result)));
- }
- }
-
- /**
- * Test decode_entities().
- */
- function testDecodeEntities() {
- $testcase = array(
- 'Drupal' => 'Drupal',
- ' & < > " \' ';
- $title_filtered = check_plain($title);
-
- $slogan = '';
- $slogan_filtered = filter_xss_admin($slogan);
-
- // Activate needed appearance settings.
- $edit = array(
- 'toggle_name' => TRUE,
- 'toggle_slogan' => TRUE,
- 'toggle_main_menu' => TRUE,
- 'toggle_secondary_menu' => TRUE,
- );
- $this->drupalPost('admin/appearance/settings', $edit, t('Save configuration'));
-
- // Set title and slogan.
- $edit = array(
- 'site_name' => $title,
- 'site_slogan' => $slogan,
- );
- $this->drupalPost('admin/config/system/site-information', $edit, t('Save configuration'));
-
- // Load frontpage.
- $this->drupalGet('');
-
- // Test the title.
- $this->assertNoRaw($title, 'Check for the unfiltered version of the title.');
- // Adding so we do not test the escaped version from drupal_set_title().
- $this->assertRaw($title_filtered . '', 'Check for the filtered version of the title.');
-
- // Test the slogan.
- $this->assertNoRaw($slogan, 'Check for the unfiltered version of the slogan.');
- $this->assertRaw($slogan_filtered, 'Check for the filtered version of the slogan.');
- }
-}
-
-/**
- * Test front page functionality and administration.
- */
-class FrontPageTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Front page',
- 'description' => 'Tests front page functionality and administration.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp('system_test');
-
- // Create admin user, log in admin user, and create one node.
- $this->admin_user = $this->drupalCreateUser(array('access content', 'administer site configuration'));
- $this->drupalLogin($this->admin_user);
- $this->node_path = "node/" . $this->drupalCreateNode(array('promote' => 1))->nid;
-
- // Enable front page logging in system_test.module.
- variable_set('front_page_output', 1);
- }
-
- /**
- * Test front page functionality.
- */
- function testDrupalIsFrontPage() {
- $this->drupalGet('');
- $this->assertText(t('On front page.'), 'Path is the front page.');
- $this->drupalGet('node');
- $this->assertText(t('On front page.'), 'Path is the front page.');
- $this->drupalGet($this->node_path);
- $this->assertNoText(t('On front page.'), 'Path is not the front page.');
-
- // Change the front page to an invalid path.
- $edit = array('site_frontpage' => 'kittens');
- $this->drupalPost('admin/config/system/site-information', $edit, t('Save configuration'));
- $this->assertText(t("The path '@path' is either invalid or you do not have access to it.", array('@path' => $edit['site_frontpage'])));
-
- // Change the front page to a valid path.
- $edit['site_frontpage'] = $this->node_path;
- $this->drupalPost('admin/config/system/site-information', $edit, t('Save configuration'));
- $this->assertText(t('The configuration options have been saved.'), 'The front page path has been saved.');
-
- $this->drupalGet('');
- $this->assertText(t('On front page.'), 'Path is the front page.');
- $this->drupalGet('node');
- $this->assertNoText(t('On front page.'), 'Path is not the front page.');
- $this->drupalGet($this->node_path);
- $this->assertText(t('On front page.'), 'Path is the front page.');
- }
-}
-
-class SystemBlockTestCase extends DrupalWebTestCase {
- protected $profile = 'testing';
-
- public static function getInfo() {
- return array(
- 'name' => 'Block functionality',
- 'description' => 'Configure and move powered-by block.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp('block');
-
- // Create and login user
- $admin_user = $this->drupalCreateUser(array('administer blocks', 'access administration pages'));
- $this->drupalLogin($admin_user);
- }
-
- /**
- * Test displaying and hiding the powered-by and help blocks.
- */
- function testSystemBlocks() {
- // Set block title and some settings to confirm that the interface is available.
- $this->drupalPost('admin/structure/block/manage/system/powered-by/configure', array('title' => $this->randomName(8)), t('Save block'));
- $this->assertText(t('The block configuration has been saved.'), t('Block configuration set.'));
-
- // Set the powered-by block to the footer region.
- $edit = array();
- $edit['blocks[system_powered-by][region]'] = 'footer';
- $edit['blocks[system_main][region]'] = 'content';
- $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
- $this->assertText(t('The block settings have been updated.'), t('Block successfully moved to footer region.'));
-
- // Confirm that the block is being displayed.
- $this->drupalGet('node');
- $this->assertRaw('id="block-system-powered-by"', t('Block successfully being displayed on the page.'));
-
- // Set the block to the disabled region.
- $edit = array();
- $edit['blocks[system_powered-by][region]'] = '-1';
- $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-
- // Confirm that the block is hidden.
- $this->assertNoRaw('id="block-system-powered-by"', t('Block no longer appears on page.'));
-
- // For convenience of developers, set the block to its default settings.
- $edit = array();
- $edit['blocks[system_powered-by][region]'] = 'footer';
- $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
- $this->drupalPost('admin/structure/block/manage/system/powered-by/configure', array('title' => ''), t('Save block'));
-
- // Set the help block to the help region.
- $edit = array();
- $edit['blocks[system_help][region]'] = 'help';
- $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-
- // Test displaying the help block with block caching enabled.
- variable_set('block_cache', TRUE);
- $this->drupalGet('admin/structure/block/add');
- $this->assertRaw(t('Use this page to create a new custom block.'));
- $this->drupalGet('admin/index');
- $this->assertRaw(t('This page shows you all available administration tasks for each module.'));
- }
-}
-
-/**
- * Test main content rendering fallback provided by system module.
- */
-class SystemMainContentFallback extends DrupalWebTestCase {
- protected $admin_user;
- protected $web_user;
-
- public static function getInfo() {
- return array(
- 'name' => 'Main content rendering fallback',
- 'description' => ' Test system module main content rendering fallback.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp('system_test');
-
- // Create and login admin user.
- $this->admin_user = $this->drupalCreateUser(array(
- 'access administration pages',
- 'administer site configuration',
- 'administer modules',
- 'administer blocks',
- 'administer nodes',
- ));
- $this->drupalLogin($this->admin_user);
-
- // Create a web user.
- $this->web_user = $this->drupalCreateUser(array('access user profiles', 'access content'));
- }
-
- /**
- * Test availability of main content.
- */
- function testMainContentFallback() {
- $edit = array();
- // Disable the dashboard module, which depends on the block module.
- $edit['modules[Core][dashboard][enable]'] = FALSE;
- $this->drupalPost('admin/modules', $edit, t('Save configuration'));
- $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
- // Disable the block module.
- $edit['modules[Core][block][enable]'] = FALSE;
- $this->drupalPost('admin/modules', $edit, t('Save configuration'));
- $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
- module_list(TRUE);
- $this->assertFalse(module_exists('block'), 'Block module disabled.');
-
- // At this point, no region is filled and fallback should be triggered.
- $this->drupalGet('admin/config/system/site-information');
- $this->assertField('site_name', 'Admin interface still available.');
-
- // Fallback should not trigger when another module is handling content.
- $this->drupalGet('system-test/main-content-handling');
- $this->assertRaw('id="system-test-content"', 'Content handled by another module');
- $this->assertText(t('Content to test main content fallback'), 'Main content still displayed.');
-
- // Fallback should trigger when another module
- // indicates that it is not handling the content.
- $this->drupalGet('system-test/main-content-fallback');
- $this->assertText(t('Content to test main content fallback'), 'Main content fallback properly triggers.');
-
- // Fallback should not trigger when another module is handling content.
- // Note that this test ensures that no duplicate
- // content gets created by the fallback.
- $this->drupalGet('system-test/main-content-duplication');
- $this->assertNoText(t('Content to test main content fallback'), 'Main content not duplicated.');
-
- // Request a user* page and see if it is displayed.
- $this->drupalLogin($this->web_user);
- $this->drupalGet('user/' . $this->web_user->uid . '/edit');
- $this->assertField('mail', 'User interface still available.');
-
- // Enable the block module again.
- $this->drupalLogin($this->admin_user);
- $edit = array();
- $edit['modules[Core][block][enable]'] = 'block';
- $this->drupalPost('admin/modules', $edit, t('Save configuration'));
- $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
- module_list(TRUE);
- $this->assertTrue(module_exists('block'), 'Block module re-enabled.');
- }
-}
-
-/**
- * Tests for the theme interface functionality.
- */
-class SystemThemeFunctionalTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Theme interface functionality',
- 'description' => 'Tests the theme interface functionality by enabling and switching themes, and using an administration theme.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp();
-
- $this->admin_user = $this->drupalCreateUser(array('access administration pages', 'view the administration theme', 'administer themes', 'bypass node access', 'administer blocks'));
- $this->drupalLogin($this->admin_user);
- $this->node = $this->drupalCreateNode();
- }
-
- /**
- * Test the theme settings form.
- */
- function testThemeSettings() {
- // Specify a filesystem path to be used for the logo.
- $file = current($this->drupalGetTestFiles('image'));
- $file_relative = strtr($file->uri, array('public:/' => variable_get('file_public_path', conf_path() . '/files')));
- $default_theme_path = 'themes/stark';
-
- $supported_paths = array(
- // Raw stream wrapper URI.
- $file->uri => array(
- 'form' => file_uri_target($file->uri),
- 'src' => file_create_url($file->uri),
- ),
- // Relative path within the public filesystem.
- file_uri_target($file->uri) => array(
- 'form' => file_uri_target($file->uri),
- 'src' => file_create_url($file->uri),
- ),
- // Relative path to a public file.
- $file_relative => array(
- 'form' => $file_relative,
- 'src' => file_create_url($file->uri),
- ),
- // Relative path to an arbitrary file.
- 'misc/druplicon.png' => array(
- 'form' => 'misc/druplicon.png',
- 'src' => $GLOBALS['base_url'] . '/' . 'misc/druplicon.png',
- ),
- // Relative path to a file in a theme.
- $default_theme_path . '/logo.png' => array(
- 'form' => $default_theme_path . '/logo.png',
- 'src' => $GLOBALS['base_url'] . '/' . $default_theme_path . '/logo.png',
- ),
- );
- foreach ($supported_paths as $input => $expected) {
- $edit = array(
- 'default_logo' => FALSE,
- 'logo_path' => $input,
- );
- $this->drupalPost('admin/appearance/settings', $edit, t('Save configuration'));
- $this->assertNoText('The custom logo path is invalid.');
- $this->assertFieldByName('logo_path', $expected['form']);
-
- // Verify the actual 'src' attribute of the logo being output.
- $this->drupalGet('');
- $elements = $this->xpath('//*[@id=:id]/img', array(':id' => 'logo'));
- $this->assertEqual((string) $elements[0]['src'], $expected['src']);
- }
-
- $unsupported_paths = array(
- // Stream wrapper URI to non-existing file.
- 'public://whatever.png',
- 'private://whatever.png',
- 'temporary://whatever.png',
- // Bogus stream wrapper URIs.
- 'public:/whatever.png',
- '://whatever.png',
- ':whatever.png',
- 'public://',
- // Relative path within the public filesystem to non-existing file.
- 'whatever.png',
- // Relative path to non-existing file in public filesystem.
- variable_get('file_public_path', conf_path() . '/files') . '/whatever.png',
- // Semi-absolute path to non-existing file in public filesystem.
- '/' . variable_get('file_public_path', conf_path() . '/files') . '/whatever.png',
- // Relative path to arbitrary non-existing file.
- 'misc/whatever.png',
- // Semi-absolute path to arbitrary non-existing file.
- '/misc/whatever.png',
- // Absolute paths to any local file (even if it exists).
- drupal_realpath($file->uri),
- );
- $this->drupalGet('admin/appearance/settings');
- foreach ($unsupported_paths as $path) {
- $edit = array(
- 'default_logo' => FALSE,
- 'logo_path' => $path,
- );
- $this->drupalPost(NULL, $edit, t('Save configuration'));
- $this->assertText('The custom logo path is invalid.');
- }
-
- // Upload a file to use for the logo.
- $edit = array(
- 'default_logo' => FALSE,
- 'logo_path' => '',
- 'files[logo_upload]' => drupal_realpath($file->uri),
- );
- $this->drupalPost('admin/appearance/settings', $edit, t('Save configuration'));
-
- $fields = $this->xpath($this->constructFieldXpath('name', 'logo_path'));
- $uploaded_filename = 'public://' . $fields[0]['value'];
-
- $this->drupalGet('');
- $elements = $this->xpath('//*[@id=:id]/img', array(':id' => 'logo'));
- $this->assertEqual($elements[0]['src'], file_create_url($uploaded_filename));
- }
-
- /**
- * Test the administration theme functionality.
- */
- function testAdministrationTheme() {
- theme_enable(array('stark'));
- variable_set('theme_default', 'stark');
- // Enable an administration theme and show it on the node admin pages.
- $edit = array(
- 'admin_theme' => 'seven',
- 'node_admin_theme' => TRUE,
- );
- $this->drupalPost('admin/appearance', $edit, t('Save configuration'));
-
- $this->drupalGet('admin/config');
- $this->assertRaw('themes/seven', 'Administration theme used on an administration page.');
-
- $this->drupalGet('node/' . $this->node->nid);
- $this->assertRaw('themes/stark', 'Site default theme used on node page.');
-
- $this->drupalGet('node/add');
- $this->assertRaw('themes/seven', 'Administration theme used on the add content page.');
-
- $this->drupalGet('node/' . $this->node->nid . '/edit');
- $this->assertRaw('themes/seven', 'Administration theme used on the edit content page.');
-
- // Disable the admin theme on the node admin pages.
- $edit = array(
- 'node_admin_theme' => FALSE,
- );
- $this->drupalPost('admin/appearance', $edit, t('Save configuration'));
-
- $this->drupalGet('admin/config');
- $this->assertRaw('themes/seven', 'Administration theme used on an administration page.');
-
- $this->drupalGet('node/add');
- $this->assertRaw('themes/stark', 'Site default theme used on the add content page.');
-
- // Reset to the default theme settings.
- variable_set('theme_default', 'bartik');
- $edit = array(
- 'admin_theme' => '0',
- 'node_admin_theme' => FALSE,
- );
- $this->drupalPost('admin/appearance', $edit, t('Save configuration'));
-
- $this->drupalGet('admin');
- $this->assertRaw('themes/bartik', 'Site default theme used on administration page.');
-
- $this->drupalGet('node/add');
- $this->assertRaw('themes/bartik', 'Site default theme used on the add content page.');
- }
-
- /**
- * Test switching the default theme.
- */
- function testSwitchDefaultTheme() {
- // Enable "stark" and set it as the default theme.
- theme_enable(array('stark'));
- $this->drupalGet('admin/appearance');
- $this->clickLink(t('Set default'), 1);
- $this->assertTrue(variable_get('theme_default', '') == 'stark', 'Site default theme switched successfully.');
-
- // Test the default theme on the secondary links (blocks admin page).
- $this->drupalGet('admin/structure/block');
- $this->assertText('Stark(' . t('active tab') . ')', 'Default local task on blocks admin page is the default theme.');
- // Switch back to Bartik and test again to test that the menu cache is cleared.
- $this->drupalGet('admin/appearance');
- $this->clickLink(t('Set default'), 0);
- $this->drupalGet('admin/structure/block');
- $this->assertText('Bartik(' . t('active tab') . ')', 'Default local task on blocks admin page has changed.');
- }
-}
-
-
-/**
- * Test the basic queue functionality.
- */
-class QueueTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Queue functionality',
- 'description' => 'Queues and dequeues a set of items to check the basic queue functionality.',
- 'group' => 'System',
- );
- }
-
- /**
- * Queues and dequeues a set of items to check the basic queue functionality.
- */
- function testQueue() {
- // Create two queues.
- $queue1 = DrupalQueue::get($this->randomName());
- $queue1->createQueue();
- $queue2 = DrupalQueue::get($this->randomName());
- $queue2->createQueue();
-
- // Create four items.
- $data = array();
- for ($i = 0; $i < 4; $i++) {
- $data[] = array($this->randomName() => $this->randomName());
- }
-
- // Queue items 1 and 2 in the queue1.
- $queue1->createItem($data[0]);
- $queue1->createItem($data[1]);
-
- // Retrieve two items from queue1.
- $items = array();
- $new_items = array();
-
- $items[] = $item = $queue1->claimItem();
- $new_items[] = $item->data;
-
- $items[] = $item = $queue1->claimItem();
- $new_items[] = $item->data;
-
- // First two dequeued items should match the first two items we queued.
- $this->assertEqual($this->queueScore($data, $new_items), 2, 'Two items matched');
-
- // Add two more items.
- $queue1->createItem($data[2]);
- $queue1->createItem($data[3]);
-
- $this->assertTrue($queue1->numberOfItems(), 'Queue 1 is not empty after adding items.');
- $this->assertFalse($queue2->numberOfItems(), 'Queue 2 is empty while Queue 1 has items');
-
- $items[] = $item = $queue1->claimItem();
- $new_items[] = $item->data;
-
- $items[] = $item = $queue1->claimItem();
- $new_items[] = $item->data;
-
- // All dequeued items should match the items we queued exactly once,
- // therefore the score must be exactly 4.
- $this->assertEqual($this->queueScore($data, $new_items), 4, 'Four items matched');
-
- // There should be no duplicate items.
- $this->assertEqual($this->queueScore($new_items, $new_items), 4, 'Four items matched');
-
- // Delete all items from queue1.
- foreach ($items as $item) {
- $queue1->deleteItem($item);
- }
-
- // Check that both queues are empty.
- $this->assertFalse($queue1->numberOfItems(), 'Queue 1 is empty');
- $this->assertFalse($queue2->numberOfItems(), 'Queue 2 is empty');
- }
-
- /**
- * This function returns the number of equal items in two arrays.
- */
- function queueScore($items, $new_items) {
- $score = 0;
- foreach ($items as $item) {
- foreach ($new_items as $new_item) {
- if ($item === $new_item) {
- $score++;
- }
- }
- }
- return $score;
- }
-}
-
-/**
- * Test token replacement in strings.
- */
-class TokenReplaceTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Token replacement',
- 'description' => 'Generates text using placeholders for dummy content to check token replacement.',
- 'group' => 'System',
- );
- }
-
- /**
- * Creates a user and a node, then tests the tokens generated from them.
- */
- function testTokenReplacement() {
- // Create the initial objects.
- $account = $this->drupalCreateUser();
- $node = $this->drupalCreateNode(array('uid' => $account->uid));
- $node->title = 'Blinking Text ';
- global $user, $language;
-
- $source = '[node:title]'; // Title of the node we passed in
- $source .= '[node:author:name]'; // Node author's name
- $source .= '[node:created:since]'; // Time since the node was created
- $source .= '[current-user:name]'; // Current user's name
- $source .= '[date:short]'; // Short date format of REQUEST_TIME
- $source .= '[user:name]'; // No user passed in, should be untouched
- $source .= '[bogus:token]'; // Non-existent token
-
- $target = check_plain($node->title);
- $target .= check_plain($account->name);
- $target .= format_interval(REQUEST_TIME - $node->created, 2, $language->language);
- $target .= check_plain($user->name);
- $target .= format_date(REQUEST_TIME, 'short', '', NULL, $language->language);
-
- // Test that the clear parameter cleans out non-existent tokens.
- $result = token_replace($source, array('node' => $node), array('language' => $language, 'clear' => TRUE));
- $result = $this->assertEqual($target, $result, 'Valid tokens replaced while invalid tokens cleared out.');
-
- // Test without using the clear parameter (non-existent token untouched).
- $target .= '[user:name]';
- $target .= '[bogus:token]';
- $result = token_replace($source, array('node' => $node), array('language' => $language));
- $this->assertEqual($target, $result, 'Valid tokens replaced while invalid tokens ignored.');
-
- // Check that the results of token_generate are sanitized properly. This does NOT
- // test the cleanliness of every token -- just that the $sanitize flag is being
- // passed properly through the call stack and being handled correctly by a 'known'
- // token, [node:title].
- $raw_tokens = array('title' => '[node:title]');
- $generated = token_generate('node', $raw_tokens, array('node' => $node));
- $this->assertEqual($generated['[node:title]'], check_plain($node->title), 'Token sanitized.');
-
- $generated = token_generate('node', $raw_tokens, array('node' => $node), array('sanitize' => FALSE));
- $this->assertEqual($generated['[node:title]'], $node->title, 'Unsanitized token generated properly.');
-
- // Test token replacement when the string contains no tokens.
- $this->assertEqual(token_replace('No tokens here.'), 'No tokens here.');
- }
-
- /**
- * Test whether token-replacement works in various contexts.
- */
- function testSystemTokenRecognition() {
- global $language;
-
- // Generate prefixes and suffixes for the token context.
- $tests = array(
- array('prefix' => 'this is the ', 'suffix' => ' site'),
- array('prefix' => 'this is the', 'suffix' => 'site'),
- array('prefix' => '[', 'suffix' => ']'),
- array('prefix' => '', 'suffix' => ']]]'),
- array('prefix' => '[[[', 'suffix' => ''),
- array('prefix' => ':[:', 'suffix' => '--]'),
- array('prefix' => '-[-', 'suffix' => ':]:'),
- array('prefix' => '[:', 'suffix' => ']'),
- array('prefix' => '[site:', 'suffix' => ':name]'),
- array('prefix' => '[site:', 'suffix' => ']'),
- );
-
- // Check if the token is recognized in each of the contexts.
- foreach ($tests as $test) {
- $input = $test['prefix'] . '[site:name]' . $test['suffix'];
- $expected = $test['prefix'] . 'Drupal' . $test['suffix'];
- $output = token_replace($input, array(), array('language' => $language));
- $this->assertTrue($output == $expected, format_string('Token recognized in string %string', array('%string' => $input)));
- }
- }
-
- /**
- * Tests the generation of all system site information tokens.
- */
- function testSystemSiteTokenReplacement() {
- global $language;
- $url_options = array(
- 'absolute' => TRUE,
- 'language' => $language,
- );
-
- // Set a few site variables.
- variable_set('site_name', 'Drupal');
- variable_set('site_slogan', 'Slogan ');
-
- // Generate and test sanitized tokens.
- $tests = array();
- $tests['[site:name]'] = check_plain(variable_get('site_name', 'Drupal'));
- $tests['[site:slogan]'] = check_plain(variable_get('site_slogan', ''));
- $tests['[site:mail]'] = 'simpletest@example.com';
- $tests['[site:url]'] = url('', $url_options);
- $tests['[site:url-brief]'] = preg_replace(array('!^https?://!', '!/$!'), '', url('', $url_options));
- $tests['[site:login-url]'] = url('user', $url_options);
-
- // Test to make sure that we generated something for each token.
- $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array(), array('language' => $language));
- $this->assertEqual($output, $expected, format_string('Sanitized system site information token %token replaced.', array('%token' => $input)));
- }
-
- // Generate and test unsanitized tokens.
- $tests['[site:name]'] = variable_get('site_name', 'Drupal');
- $tests['[site:slogan]'] = variable_get('site_slogan', '');
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array(), array('language' => $language, 'sanitize' => FALSE));
- $this->assertEqual($output, $expected, format_string('Unsanitized system site information token %token replaced.', array('%token' => $input)));
- }
- }
-
- /**
- * Tests the generation of all system date tokens.
- */
- function testSystemDateTokenReplacement() {
- global $language;
-
- // Set time to one hour before request.
- $date = REQUEST_TIME - 3600;
-
- // Generate and test tokens.
- $tests = array();
- $tests['[date:short]'] = format_date($date, 'short', '', NULL, $language->language);
- $tests['[date:medium]'] = format_date($date, 'medium', '', NULL, $language->language);
- $tests['[date:long]'] = format_date($date, 'long', '', NULL, $language->language);
- $tests['[date:custom:m/j/Y]'] = format_date($date, 'custom', 'm/j/Y', NULL, $language->language);
- $tests['[date:since]'] = format_interval((REQUEST_TIME - $date), 2, $language->language);
- $tests['[date:raw]'] = filter_xss($date);
-
- // Test to make sure that we generated something for each token.
- $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array('date' => $date), array('language' => $language));
- $this->assertEqual($output, $expected, format_string('Date token %token replaced.', array('%token' => $input)));
- }
- }
-}
-
-class InfoFileParserTestCase extends DrupalUnitTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Info file format parser',
- 'description' => 'Tests proper parsing of a .info file formatted string.',
- 'group' => 'System',
- );
- }
-
- /**
- * Test drupal_parse_info_format().
- */
- function testDrupalParseInfoFormat() {
- $config = '
-simple = Value
-quoted = " Value"
-multiline = "Value
- Value"
-array[] = Value1
-array[] = Value2
-array_assoc[a] = Value1
-array_assoc[b] = Value2
-array_deep[][][] = Value
-array_deep_assoc[a][b][c] = Value
-array_space[a b] = Value';
-
- $expected = array(
- 'simple' => 'Value',
- 'quoted' => ' Value',
- 'multiline' => "Value\n Value",
- 'array' => array(
- 0 => 'Value1',
- 1 => 'Value2',
- ),
- 'array_assoc' => array(
- 'a' => 'Value1',
- 'b' => 'Value2',
- ),
- 'array_deep' => array(
- 0 => array(
- 0 => array(
- 0 => 'Value',
- ),
- ),
- ),
- 'array_deep_assoc' => array(
- 'a' => array(
- 'b' => array(
- 'c' => 'Value',
- ),
- ),
- ),
- 'array_space' => array(
- 'a b' => 'Value',
- ),
- );
-
- $parsed = drupal_parse_info_format($config);
-
- $this->assertEqual($parsed['simple'], $expected['simple'], 'Set a simple value.');
- $this->assertEqual($parsed['quoted'], $expected['quoted'], 'Set a simple value in quotes.');
- $this->assertEqual($parsed['multiline'], $expected['multiline'], 'Set a multiline value.');
- $this->assertEqual($parsed['array'], $expected['array'], 'Set a simple array.');
- $this->assertEqual($parsed['array_assoc'], $expected['array_assoc'], 'Set an associative array.');
- $this->assertEqual($parsed['array_deep'], $expected['array_deep'], 'Set a nested array.');
- $this->assertEqual($parsed['array_deep_assoc'], $expected['array_deep_assoc'], 'Set a nested associative array.');
- $this->assertEqual($parsed['array_space'], $expected['array_space'], 'Set an array with a whitespace in the key.');
- $this->assertEqual($parsed, $expected, 'Entire parsed .info string and expected array are identical.');
- }
-}
-
-/**
- * Tests the effectiveness of hook_system_info_alter().
- */
-class SystemInfoAlterTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'System info alter',
- 'description' => 'Tests the effectiveness of hook_system_info_alter().',
- 'group' => 'System',
- );
- }
-
- /**
- * Tests that {system}.info is rebuilt after a module that implements
- * hook_system_info_alter() is enabled. Also tests if core *_list() functions
- * return freshly altered info.
- */
- function testSystemInfoAlter() {
- // Enable our test module. Flush all caches, which we assert is the only
- // thing necessary to use the rebuilt {system}.info.
- module_enable(array('module_test'), FALSE);
- drupal_flush_all_caches();
- $this->assertTrue(module_exists('module_test'), 'Test module is enabled.');
-
- $info = $this->getSystemInfo('seven', 'theme');
- $this->assertTrue(isset($info['regions']['test_region']), 'Altered theme info was added to {system}.info.');
- $seven_regions = system_region_list('seven');
- $this->assertTrue(isset($seven_regions['test_region']), 'Altered theme info was returned by system_region_list().');
- $system_list_themes = system_list('theme');
- $info = $system_list_themes['seven']->info;
- $this->assertTrue(isset($info['regions']['test_region']), 'Altered theme info was returned by system_list().');
- $list_themes = list_themes();
- $this->assertTrue(isset($list_themes['seven']->info['regions']['test_region']), 'Altered theme info was returned by list_themes().');
-
- // Disable the module and verify that {system}.info is rebuilt without it.
- module_disable(array('module_test'), FALSE);
- drupal_flush_all_caches();
- $this->assertFalse(module_exists('module_test'), 'Test module is disabled.');
-
- $info = $this->getSystemInfo('seven', 'theme');
- $this->assertFalse(isset($info['regions']['test_region']), 'Altered theme info was removed from {system}.info.');
- $seven_regions = system_region_list('seven');
- $this->assertFalse(isset($seven_regions['test_region']), 'Altered theme info was not returned by system_region_list().');
- $system_list_themes = system_list('theme');
- $info = $system_list_themes['seven']->info;
- $this->assertFalse(isset($info['regions']['test_region']), 'Altered theme info was not returned by system_list().');
- $list_themes = list_themes();
- $this->assertFalse(isset($list_themes['seven']->info['regions']['test_region']), 'Altered theme info was not returned by list_themes().');
- }
-
- /**
- * Returns the info array as it is stored in {system}.
- *
- * @param $name
- * The name of the record in {system}.
- * @param $type
- * The type of record in {system}.
- *
- * @return
- * Array of info, or FALSE if the record is not found.
- */
- function getSystemInfo($name, $type) {
- $raw_info = db_query("SELECT info FROM {system} WHERE name = :name AND type = :type", array(':name' => $name, ':type' => $type))->fetchField();
- return $raw_info ? unserialize($raw_info) : FALSE;
- }
-}
-
-/**
- * Tests for the update system functionality.
- */
-class UpdateScriptFunctionalTest extends DrupalWebTestCase {
- private $update_url;
- private $update_user;
-
- public static function getInfo() {
- return array(
- 'name' => 'Update functionality',
- 'description' => 'Tests the update script access and functionality.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp('update_script_test');
- $this->update_url = $GLOBALS['base_url'] . '/update.php';
- $this->update_user = $this->drupalCreateUser(array('administer software updates'));
- }
-
- /**
- * Tests access to the update script.
- */
- function testUpdateAccess() {
- // Try accessing update.php without the proper permission.
- $regular_user = $this->drupalCreateUser();
- $this->drupalLogin($regular_user);
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $this->assertResponse(403);
-
- // Try accessing update.php as an anonymous user.
- $this->drupalLogout();
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $this->assertResponse(403);
-
- // Access the update page with the proper permission.
- $this->drupalLogin($this->update_user);
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $this->assertResponse(200);
-
- // Access the update page as user 1.
- $user1 = user_load(1);
- $user1->pass_raw = user_password();
- require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
- $user1->pass = user_hash_password(trim($user1->pass_raw));
- db_query("UPDATE {users} SET pass = :pass WHERE uid = :uid", array(':pass' => $user1->pass, ':uid' => $user1->uid));
- $this->drupalLogin($user1);
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $this->assertResponse(200);
- }
-
- /**
- * Tests that requirements warnings and errors are correctly displayed.
- */
- function testRequirements() {
- $this->drupalLogin($this->update_user);
-
- // If there are no requirements warnings or errors, we expect to be able to
- // go through the update process uninterrupted.
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $this->drupalPost(NULL, array(), t('Continue'));
- $this->assertText(t('No pending updates.'), 'End of update process was reached.');
- // Confirm that all caches were cleared.
- $this->assertText(t('hook_flush_caches() invoked for update_script_test.module.'), 'Caches were cleared when there were no requirements warnings or errors.');
-
- // If there is a requirements warning, we expect it to be initially
- // displayed, but clicking the link to proceed should allow us to go
- // through the rest of the update process uninterrupted.
-
- // First, run this test with pending updates to make sure they can be run
- // successfully.
- variable_set('update_script_test_requirement_type', REQUIREMENT_WARNING);
- drupal_set_installed_schema_version('update_script_test', drupal_get_installed_schema_version('update_script_test') - 1);
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $this->assertText('This is a requirements warning provided by the update_script_test module.');
- $this->clickLink('try again');
- $this->assertNoText('This is a requirements warning provided by the update_script_test module.');
- $this->drupalPost(NULL, array(), t('Continue'));
- $this->drupalPost(NULL, array(), t('Apply pending updates'));
- $this->assertText(t('The update_script_test_update_7000() update was executed successfully.'), 'End of update process was reached.');
- // Confirm that all caches were cleared.
- $this->assertText(t('hook_flush_caches() invoked for update_script_test.module.'), 'Caches were cleared after resolving a requirements warning and applying updates.');
-
- // Now try again without pending updates to make sure that works too.
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $this->assertText('This is a requirements warning provided by the update_script_test module.');
- $this->clickLink('try again');
- $this->assertNoText('This is a requirements warning provided by the update_script_test module.');
- $this->drupalPost(NULL, array(), t('Continue'));
- $this->assertText(t('No pending updates.'), 'End of update process was reached.');
- // Confirm that all caches were cleared.
- $this->assertText(t('hook_flush_caches() invoked for update_script_test.module.'), 'Caches were cleared after applying updates and re-running the script.');
-
- // If there is a requirements error, it should be displayed even after
- // clicking the link to proceed (since the problem that triggered the error
- // has not been fixed).
- variable_set('update_script_test_requirement_type', REQUIREMENT_ERROR);
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $this->assertText('This is a requirements error provided by the update_script_test module.');
- $this->clickLink('try again');
- $this->assertText('This is a requirements error provided by the update_script_test module.');
- }
-
- /**
- * Tests the effect of using the update script on the theme system.
- */
- function testThemeSystem() {
- // Since visiting update.php triggers a rebuild of the theme system from an
- // unusual maintenance mode environment, we check that this rebuild did not
- // put any incorrect information about the themes into the database.
- $original_theme_data = db_query("SELECT * FROM {system} WHERE type = 'theme' ORDER BY name")->fetchAll();
- $this->drupalLogin($this->update_user);
- $this->drupalGet($this->update_url, array('external' => TRUE));
- $final_theme_data = db_query("SELECT * FROM {system} WHERE type = 'theme' ORDER BY name")->fetchAll();
- $this->assertEqual($original_theme_data, $final_theme_data, 'Visiting update.php does not alter the information about themes stored in the database.');
- }
-
- /**
- * Tests update.php when there are no updates to apply.
- */
- function testNoUpdateFunctionality() {
- // Click through update.php with 'administer software updates' permission.
- $this->drupalLogin($this->update_user);
- $this->drupalPost($this->update_url, array(), t('Continue'), array('external' => TRUE));
- $this->assertText(t('No pending updates.'));
- $this->assertNoLink('Administration pages');
- $this->clickLink('Front page');
- $this->assertResponse(200);
-
- // Click through update.php with 'access administration pages' permission.
- $admin_user = $this->drupalCreateUser(array('administer software updates', 'access administration pages'));
- $this->drupalLogin($admin_user);
- $this->drupalPost($this->update_url, array(), t('Continue'), array('external' => TRUE));
- $this->assertText(t('No pending updates.'));
- $this->clickLink('Administration pages');
- $this->assertResponse(200);
- }
-
- /**
- * Tests update.php after performing a successful update.
- */
- function testSuccessfulUpdateFunctionality() {
- drupal_set_installed_schema_version('update_script_test', drupal_get_installed_schema_version('update_script_test') - 1);
- // Click through update.php with 'administer software updates' permission.
- $this->drupalLogin($this->update_user);
- $this->drupalPost($this->update_url, array(), t('Continue'), array('external' => TRUE));
- $this->drupalPost(NULL, array(), t('Apply pending updates'));
- $this->assertText('Updates were attempted.');
- $this->assertLink('site');
- $this->assertNoLink('Administration pages');
- $this->assertNoLink('logged');
- $this->clickLink('Front page');
- $this->assertResponse(200);
-
- drupal_set_installed_schema_version('update_script_test', drupal_get_installed_schema_version('update_script_test') - 1);
- // Click through update.php with 'access administration pages' and
- // 'access site reports' permissions.
- $admin_user = $this->drupalCreateUser(array('administer software updates', 'access administration pages', 'access site reports'));
- $this->drupalLogin($admin_user);
- $this->drupalPost($this->update_url, array(), t('Continue'), array('external' => TRUE));
- $this->drupalPost(NULL, array(), t('Apply pending updates'));
- $this->assertText('Updates were attempted.');
- $this->assertLink('logged');
- $this->clickLink('Administration pages');
- $this->assertResponse(200);
- }
-}
-
-/**
- * Functional tests for the flood control mechanism.
- */
-class FloodFunctionalTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Flood control mechanism',
- 'description' => 'Functional tests for the flood control mechanism.',
- 'group' => 'System',
- );
- }
-
- /**
- * Test flood control mechanism clean-up.
- */
- function testCleanUp() {
- $threshold = 1;
- $window_expired = -1;
- $name = 'flood_test_cleanup';
-
- // Register expired event.
- flood_register_event($name, $window_expired);
- // Verify event is not allowed.
- $this->assertFalse(flood_is_allowed($name, $threshold));
- // Run cron and verify event is now allowed.
- $this->cronRun();
- $this->assertTrue(flood_is_allowed($name, $threshold));
-
- // Register unexpired event.
- flood_register_event($name);
- // Verify event is not allowed.
- $this->assertFalse(flood_is_allowed($name, $threshold));
- // Run cron and verify event is still not allowed.
- $this->cronRun();
- $this->assertFalse(flood_is_allowed($name, $threshold));
- }
-}
-
-/**
- * Test HTTP file downloading capability.
- */
-class RetrieveFileTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'HTTP file retrieval',
- 'description' => 'Checks HTTP file fetching and error handling.',
- 'group' => 'System',
- );
- }
-
- /**
- * Invokes system_retrieve_file() in several scenarios.
- */
- function testFileRetrieving() {
- // Test 404 handling by trying to fetch a randomly named file.
- drupal_mkdir($sourcedir = 'public://' . $this->randomName());
- $filename = 'Файл Ð´Ð»Ñ Ñ‚ÐµÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ' . $this->randomName();
- $url = file_create_url($sourcedir . '/' . $filename);
- $retrieved_file = system_retrieve_file($url);
- $this->assertFalse($retrieved_file, 'Non-existent file not fetched.');
-
- // Actually create that file, download it via HTTP and test the returned path.
- file_put_contents($sourcedir . '/' . $filename, 'testing');
- $retrieved_file = system_retrieve_file($url);
-
- // URLs could not contains characters outside the ASCII set so $filename
- // has to be encoded.
- $encoded_filename = rawurlencode($filename);
-
- $this->assertEqual($retrieved_file, 'public://' . $encoded_filename, 'Sane path for downloaded file returned (public:// scheme).');
- $this->assertTrue(is_file($retrieved_file), 'Downloaded file does exist (public:// scheme).');
- $this->assertEqual(filesize($retrieved_file), 7, 'File size of downloaded file is correct (public:// scheme).');
- file_unmanaged_delete($retrieved_file);
-
- // Test downloading file to a different location.
- drupal_mkdir($targetdir = 'temporary://' . $this->randomName());
- $retrieved_file = system_retrieve_file($url, $targetdir);
- $this->assertEqual($retrieved_file, "$targetdir/$encoded_filename", 'Sane path for downloaded file returned (temporary:// scheme).');
- $this->assertTrue(is_file($retrieved_file), 'Downloaded file does exist (temporary:// scheme).');
- $this->assertEqual(filesize($retrieved_file), 7, 'File size of downloaded file is correct (temporary:// scheme).');
- file_unmanaged_delete($retrieved_file);
-
- file_unmanaged_delete_recursive($sourcedir);
- file_unmanaged_delete_recursive($targetdir);
- }
-}
-
-/**
- * Functional tests shutdown functions.
- */
-class ShutdownFunctionsTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Shutdown functions',
- 'description' => 'Functional tests for shutdown functions',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp('system_test');
- }
-
- /**
- * Test shutdown functions.
- */
- function testShutdownFunctions() {
- $arg1 = $this->randomName();
- $arg2 = $this->randomName();
- $this->drupalGet('system-test/shutdown-functions/' . $arg1 . '/' . $arg2);
- $this->assertText(t('First shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2)));
- $this->assertText(t('Second shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2)));
-
- // Make sure exceptions displayed through _drupal_render_exception_safe()
- // are correctly escaped.
- $this->assertRaw('Drupal is <blink>awesome</blink>.');
- }
-}
-
-/**
- * Tests administrative overview pages.
- */
-class SystemAdminTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Administrative pages',
- 'description' => 'Tests output on administrative pages and compact mode functionality.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- // testAdminPages() requires Locale module.
- parent::setUp(array('locale'));
-
- // Create an administrator with all permissions, as well as a regular user
- // who can only access administration pages and perform some Locale module
- // administrative tasks, but not all of them.
- $this->admin_user = $this->drupalCreateUser(array_keys(module_invoke_all('permission')));
- $this->web_user = $this->drupalCreateUser(array(
- 'access administration pages',
- 'translate interface',
- ));
- $this->drupalLogin($this->admin_user);
- }
-
- /**
- * Tests output on administrative listing pages.
- */
- function testAdminPages() {
- // Go to Administration.
- $this->drupalGet('admin');
-
- // Verify that all visible, top-level administration links are listed on
- // the main administration page.
- foreach (menu_get_router() as $path => $item) {
- if (strpos($path, 'admin/') === 0 && ($item['type'] & MENU_VISIBLE_IN_TREE) && $item['_number_parts'] == 2) {
- $this->assertLink($item['title']);
- $this->assertLinkByHref($path);
- $this->assertText($item['description']);
- }
- }
-
- // For each administrative listing page on which the Locale module appears,
- // verify that there are links to the module's primary configuration pages,
- // but no links to its individual sub-configuration pages. Also verify that
- // a user with access to only some Locale module administration pages only
- // sees links to the pages they have access to.
- $admin_list_pages = array(
- 'admin/index',
- 'admin/config',
- 'admin/config/regional',
- );
-
- foreach ($admin_list_pages as $page) {
- // For the administrator, verify that there are links to Locale's primary
- // configuration pages, but no links to individual sub-configuration
- // pages.
- $this->drupalLogin($this->admin_user);
- $this->drupalGet($page);
- $this->assertLinkByHref('admin/config');
- $this->assertLinkByHref('admin/config/regional/settings');
- $this->assertLinkByHref('admin/config/regional/date-time');
- $this->assertLinkByHref('admin/config/regional/language');
- $this->assertNoLinkByHref('admin/config/regional/language/configure/session');
- $this->assertNoLinkByHref('admin/config/regional/language/configure/url');
- $this->assertLinkByHref('admin/config/regional/translate');
- // On admin/index only, the administrator should also see a "Configure
- // permissions" link for the Locale module.
- if ($page == 'admin/index') {
- $this->assertLinkByHref("admin/people/permissions#module-locale");
- }
-
- // For a less privileged user, verify that there are no links to Locale's
- // primary configuration pages, but a link to the translate page exists.
- $this->drupalLogin($this->web_user);
- $this->drupalGet($page);
- $this->assertLinkByHref('admin/config');
- $this->assertNoLinkByHref('admin/config/regional/settings');
- $this->assertNoLinkByHref('admin/config/regional/date-time');
- $this->assertNoLinkByHref('admin/config/regional/language');
- $this->assertNoLinkByHref('admin/config/regional/language/configure/session');
- $this->assertNoLinkByHref('admin/config/regional/language/configure/url');
- $this->assertLinkByHref('admin/config/regional/translate');
- // This user cannot configure permissions, so even on admin/index should
- // not see a "Configure permissions" link for the Locale module.
- if ($page == 'admin/index') {
- $this->assertNoLinkByHref("admin/people/permissions#module-locale");
- }
- }
- }
-
- /**
- * Test compact mode.
- */
- function testCompactMode() {
- $this->drupalGet('admin/compact/on');
- $this->assertTrue($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'Compact mode turns on.');
- $this->drupalGet('admin/compact/on');
- $this->assertTrue($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'Compact mode remains on after a repeat call.');
- $this->drupalGet('');
- $this->assertTrue($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'Compact mode persists on new requests.');
-
- $this->drupalGet('admin/compact/off');
- $this->assertEqual($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'deleted', 'Compact mode turns off.');
- $this->drupalGet('admin/compact/off');
- $this->assertEqual($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'deleted', 'Compact mode remains off after a repeat call.');
- $this->drupalGet('');
- $this->assertTrue($this->cookies['Drupal.visitor.admin_compact_mode']['value'], 'Compact mode persists on new requests.');
- }
-}
-
-/**
- * Tests authorize.php and related hooks.
- */
-class SystemAuthorizeCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Authorize API',
- 'description' => 'Tests the authorize.php script and related API.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp(array('system_test'));
-
- variable_set('allow_authorize_operations', TRUE);
-
- // Create an administrator user.
- $this->admin_user = $this->drupalCreateUser(array('administer software updates'));
- $this->drupalLogin($this->admin_user);
- }
-
- /**
- * Helper function to initialize authorize.php and load it via drupalGet().
- *
- * Initializing authorize.php needs to happen in the child Drupal
- * installation, not the parent. So, we visit a menu callback provided by
- * system_test.module which calls system_authorized_init() to initialize the
- * $_SESSION inside the test site, not the framework site. This callback
- * redirects to authorize.php when it's done initializing.
- *
- * @see system_authorized_init().
- */
- function drupalGetAuthorizePHP($page_title = 'system-test-auth') {
- $this->drupalGet('system-test/authorize-init/' . $page_title);
- }
-
- /**
- * Tests the FileTransfer hooks
- */
- function testFileTransferHooks() {
- $page_title = $this->randomName(16);
- $this->drupalGetAuthorizePHP($page_title);
- $this->assertTitle(strtr('@title | Drupal', array('@title' => $page_title)), 'authorize.php page title is correct.');
- $this->assertNoText('It appears you have reached this page in error.');
- $this->assertText('To continue, provide your server connection details');
- // Make sure we see the new connection method added by system_test.
- $this->assertRaw('System Test FileTransfer');
- // Make sure the settings form callback works.
- $this->assertText('System Test Username');
- }
-}
-
-/**
- * Test the handling of requests containing 'index.php'.
- */
-class SystemIndexPhpTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Index.php handling',
- 'description' => "Test the handling of requests containing 'index.php'.",
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp();
- }
-
- /**
- * Test index.php handling.
- */
- function testIndexPhpHandling() {
- $index_php = $GLOBALS['base_url'] . '/index.php';
-
- $this->drupalGet($index_php, array('external' => TRUE));
- $this->assertResponse(200, 'Make sure index.php returns a valid page.');
-
- $this->drupalGet($index_php, array('external' => TRUE, 'query' => array('q' => 'user')));
- $this->assertResponse(200, 'Make sure index.php?q=user returns a valid page.');
-
- $this->drupalGet($index_php .'/user', array('external' => TRUE));
- $this->assertResponse(404, "Make sure index.php/user returns a 'page not found'.");
- }
-}
-
-/**
- * Test token replacement in strings.
- */
-class TokenScanTest extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Token scanning',
- 'description' => 'Scan token-like patterns in a dummy text to check token scanning.',
- 'group' => 'System',
- );
- }
-
- /**
- * Scans dummy text, then tests the output.
- */
- function testTokenScan() {
- // Define text with valid and not valid, fake and existing token-like
- // strings.
- $text = 'First a [valid:simple], but dummy token, and a dummy [valid:token with: spaces].';
- $text .= 'Then a [not valid:token].';
- $text .= 'Last an existing token: [node:author:name].';
- $token_wannabes = token_scan($text);
-
- $this->assertTrue(isset($token_wannabes['valid']['simple']), 'A simple valid token has been matched.');
- $this->assertTrue(isset($token_wannabes['valid']['token with: spaces']), 'A valid token with space characters in the token name has been matched.');
- $this->assertFalse(isset($token_wannabes['not valid']), 'An invalid token with spaces in the token type has not been matched.');
- $this->assertTrue(isset($token_wannabes['node']), 'An existing valid token has been matched.');
- }
-}
-
-/**
- * Test case for drupal_valid_token().
- */
-class SystemValidTokenTest extends DrupalUnitTestCase {
-
- /**
- * Flag to indicate whether PHP error reportings should be asserted.
- *
- * @var bool
- */
- protected $assertErrors = TRUE;
-
- public static function getInfo() {
- return array(
- 'name' => 'Token validation',
- 'description' => 'Test the security token validation.',
- 'group' => 'System',
- );
- }
-
- /**
- * Tests invalid invocations of drupal_valid_token() that must return FALSE.
- */
- public function testTokenValidation() {
- // The following checks will throw PHP notices, so we disable error
- // assertions.
- $this->assertErrors = FALSE;
- $this->assertFalse(drupal_valid_token(NULL, new stdClass()), 'Token NULL, value object returns FALSE.');
- $this->assertFalse(drupal_valid_token(0, array()), 'Token 0, value array returns FALSE.');
- $this->assertFalse(drupal_valid_token('', array()), "Token '', value array returns FALSE.");
- $this->assertFalse('' === drupal_get_token(array()), 'Token generation does not return an empty string on invalid parameters.');
- $this->assertErrors = TRUE;
-
- $this->assertFalse(drupal_valid_token(TRUE, 'foo'), 'Token TRUE, value foo returns FALSE.');
- $this->assertFalse(drupal_valid_token(0, 'foo'), 'Token 0, value foo returns FALSE.');
- }
-
- /**
- * Overrides DrupalTestCase::errorHandler().
- */
- public function errorHandler($severity, $message, $file = NULL, $line = NULL) {
- if ($this->assertErrors) {
- return parent::errorHandler($severity, $message, $file, $line);
- }
- return TRUE;
- }
-}
-
-/**
- * Tests drupal_set_message() and related functions.
- */
-class DrupalSetMessageTest extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Messages',
- 'description' => 'Tests that messages can be displayed using drupal_set_message().',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp('system_test');
- }
-
- /**
- * Tests setting messages and removing one before it is displayed.
- */
- function testSetRemoveMessages() {
- // The page at system-test/drupal-set-message sets two messages and then
- // removes the first before it is displayed.
- $this->drupalGet('system-test/drupal-set-message');
- $this->assertNoText('First message (removed).');
- $this->assertText('Second message (not removed).');
- }
-}
-
-/**
- * Tests confirm form destinations.
- */
-class ConfirmFormTest extends DrupalWebTestCase {
- protected $admin_user;
-
- public static function getInfo() {
- return array(
- 'name' => 'Confirm form',
- 'description' => 'Tests that the confirm form does not use external destinations.',
- 'group' => 'System',
- );
- }
-
- function setUp() {
- parent::setUp();
-
- $this->admin_user = $this->drupalCreateUser(array('administer users'));
- $this->drupalLogin($this->admin_user);
- }
-
- /**
- * Tests that the confirm form does not use external destinations.
- */
- function testConfirmForm() {
- $this->drupalGet('user/1/cancel');
- $this->assertCancelLinkUrl(url('user/1'));
- $this->drupalGet('user/1/cancel', array('query' => array('destination' => 'node')));
- $this->assertCancelLinkUrl(url('node'));
- $this->drupalGet('user/1/cancel', array('query' => array('destination' => 'http://example.com')));
- $this->assertCancelLinkUrl(url('user/1'));
- }
-
- /**
- * Asserts that a cancel link is present pointing to the provided URL.
- */
- function assertCancelLinkUrl($url, $message = '', $group = 'Other') {
- $links = $this->xpath('//a[normalize-space(text())=:label and @href=:url]', array(':label' => t('Cancel'), ':url' => $url));
- $message = ($message ? $message : format_string('Cancel link with url %url found.', array('%url' => $url)));
- return $this->assertTrue(isset($links[0]), $message, $group);
- }
-}
diff --git a/modules/system/system.theme-rtl.css b/modules/system/system.theme-rtl.css
deleted file mode 100644
index 0cd7fa6..0000000
--- a/modules/system/system.theme-rtl.css
+++ /dev/null
@@ -1,53 +0,0 @@
-
-/**
- * @file
- * RTL styles for common markup.
- */
-
-/**
- * HTML elements.
- */
-th {
- text-align: right;
- padding-left: 1em;
- padding-right: 0;
-}
-
-/**
- * Markup generated by theme_item_list().
- */
-.item-list ul li {
- margin: 0 1.5em 0.25em 0;
-}
-
-/**
- * Markup generated by theme_more_link().
- */
-.more-link {
- text-align: left;
-}
-
-/**
- * Markup generated by theme_more_help_link().
- */
-.more-help-link {
- text-align: left;
-}
-.more-help-link a {
- background-position: 100% 50%;
- padding: 1px 20px 1px 0;
-}
-
-/**
- * Collapsible fieldsets.
- */
-html.js fieldset.collapsible .fieldset-legend {
- background-position: 98% 75%;
- padding-left: 0;
- padding-right: 15px;
-}
-html.js fieldset.collapsed .fieldset-legend {
- background-image: url(../../misc/menu-collapsed-rtl.png);
- background-position: 98% 50%;
-}
-
diff --git a/modules/system/system.theme.css b/modules/system/system.theme.css
deleted file mode 100644
index 73cebee..0000000
--- a/modules/system/system.theme.css
+++ /dev/null
@@ -1,239 +0,0 @@
-
-/**
- * @file
- * Basic styling for common markup.
- */
-
-/**
- * HTML elements.
- */
-fieldset {
- margin-bottom: 1em;
- padding: 0.5em;
-}
-form {
- margin: 0;
- padding: 0;
-}
-hr {
- border: 1px solid gray;
- height: 1px;
-}
-img {
- border: 0;
-}
-table {
- border-collapse: collapse;
-}
-th {
- border-bottom: 3px solid #ccc;
- padding-right: 1em; /* LTR */
- text-align: left; /* LTR */
-}
-tbody {
- border-top: 1px solid #ccc;
-}
-tr.even,
-tr.odd {
- background-color: #eee;
- border-bottom: 1px solid #ccc;
- padding: 0.1em 0.6em;
-}
-
-/**
- * Markup generated by theme_tablesort_indicator().
- */
-th.active img {
- display: inline;
-}
-td.active {
- background-color: #ddd;
-}
-
-/**
- * Markup generated by theme_item_list().
- */
-.item-list .title {
- font-weight: bold;
-}
-.item-list ul {
- margin: 0 0 0.75em 0;
- padding: 0;
-}
-.item-list ul li {
- margin: 0 0 0.25em 1.5em; /* LTR */
- padding: 0;
-}
-
-/**
- * Markup generated by Form API.
- */
-.form-item,
-.form-actions {
- margin-top: 1em;
- margin-bottom: 1em;
-}
-tr.odd .form-item,
-tr.even .form-item {
- margin-top: 0;
- margin-bottom: 0;
- white-space: nowrap;
-}
-.form-item .description {
- font-size: 0.85em;
-}
-label {
- display: block;
- font-weight: bold;
-}
-label.option {
- display: inline;
- font-weight: normal;
-}
-.form-checkboxes .form-item,
-.form-radios .form-item {
- margin-top: 0.4em;
- margin-bottom: 0.4em;
-}
-.form-type-radio .description,
-.form-type-checkbox .description {
- margin-left: 2.4em;
-}
-input.form-checkbox,
-input.form-radio {
- vertical-align: middle;
-}
-.marker,
-.form-required {
- color: #f00;
-}
-.form-item input.error,
-.form-item textarea.error,
-.form-item select.error {
- border: 2px solid red;
-}
-
-/**
- * Inline items.
- */
-.container-inline .form-actions,
-.container-inline.form-actions {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-/**
- * Markup generated by theme_more_link().
- */
-.more-link {
- text-align: right; /* LTR */
-}
-
-/**
- * Markup generated by theme_more_help_link().
- */
-.more-help-link {
- text-align: right; /* LTR */
-}
-.more-help-link a {
- background: url(../../misc/help.png) 0 50% no-repeat; /* LTR */
- padding: 1px 0 1px 20px; /* LTR */
-}
-
-/**
- * Markup generated by theme_pager().
- */
-.item-list .pager {
- clear: both;
- text-align: center;
-}
-.item-list .pager li {
- background-image: none;
- display: inline;
- list-style-type: none;
- padding: 0.5em;
-}
-.pager-current {
- font-weight: bold;
-}
-
-/**
- * Autocomplete.
- *
- * @see autocomplete.js
- */
-/* Suggestion list */
-#autocomplete li.selected {
- background: #0072b9;
- color: #fff;
-}
-
-/**
- * Collapsible fieldsets.
- *
- * @see collapse.js
- */
-html.js fieldset.collapsible .fieldset-legend {
- background: url(../../misc/menu-expanded.png) 5px 65% no-repeat; /* LTR */
- padding-left: 15px; /* LTR */
-}
-html.js fieldset.collapsed .fieldset-legend {
- background-image: url(../../misc/menu-collapsed.png); /* LTR */
- background-position: 5px 50%; /* LTR */
-}
-.fieldset-legend span.summary {
- color: #999;
- font-size: 0.9em;
- margin-left: 0.5em;
-}
-
-/**
- * TableDrag behavior.
- *
- * @see tabledrag.js
- */
-tr.drag {
- background-color: #fffff0;
-}
-tr.drag-previous {
- background-color: #ffd;
-}
-.tabledrag-toggle-weight {
- font-size: 0.9em;
-}
-body div.tabledrag-changed-warning {
- margin-bottom: 0.5em;
-}
-
-/**
- * TableSelect behavior.
- *
- * @see tableselect.js
-*/
-tr.selected td {
- background: #ffc;
-}
-td.checkbox,
-th.checkbox {
- text-align: center;
-}
-
-/**
- * Progress bar.
- *
- * @see progress.js
- */
-.progress {
- font-weight: bold;
-}
-.progress .bar {
- background: #ccc;
- border-color: #666;
- margin: 0 0.2em;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-.progress .filled {
- background: #0072b9 url(../../misc/progress.gif);
-}
diff --git a/modules/system/system.tokens.inc b/modules/system/system.tokens.inc
deleted file mode 100644
index b612d10..0000000
--- a/modules/system/system.tokens.inc
+++ /dev/null
@@ -1,269 +0,0 @@
- t("Site information"),
- 'description' => t("Tokens for site-wide settings and other global information."),
- );
- $types['date'] = array(
- 'name' => t("Dates"),
- 'description' => t("Tokens related to times and dates."),
- );
- $types['file'] = array(
- 'name' => t("Files"),
- 'description' => t("Tokens related to uploaded files."),
- 'needs-data' => 'file',
- );
-
- // Site-wide global tokens.
- $site['name'] = array(
- 'name' => t("Name"),
- 'description' => t("The name of the site."),
- );
- $site['slogan'] = array(
- 'name' => t("Slogan"),
- 'description' => t("The slogan of the site."),
- );
- $site['mail'] = array(
- 'name' => t("Email"),
- 'description' => t("The administrative email address for the site."),
- );
- $site['url'] = array(
- 'name' => t("URL"),
- 'description' => t("The URL of the site's front page."),
- );
- $site['url-brief'] = array(
- 'name' => t("URL (brief)"),
- 'description' => t("The URL of the site's front page without the protocol."),
- );
- $site['login-url'] = array(
- 'name' => t("Login page"),
- 'description' => t("The URL of the site's login page."),
- );
-
- // Date related tokens.
- $date['short'] = array(
- 'name' => t("Short format"),
- 'description' => t("A date in 'short' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'short'))),
- );
- $date['medium'] = array(
- 'name' => t("Medium format"),
- 'description' => t("A date in 'medium' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'medium'))),
- );
- $date['long'] = array(
- 'name' => t("Long format"),
- 'description' => t("A date in 'long' format. (%date)", array('%date' => format_date(REQUEST_TIME, 'long'))),
- );
- $date['custom'] = array(
- 'name' => t("Custom format"),
- 'description' => t("A date in a custom format. See !php-date for details.", array('!php-date' => l(t('the PHP documentation'), 'http://php.net/manual/en/function.date.php'))),
- );
- $date['since'] = array(
- 'name' => t("Time-since"),
- 'description' => t("A date in 'time-since' format. (%date)", array('%date' => format_interval(REQUEST_TIME - 360, 2))),
- );
- $date['raw'] = array(
- 'name' => t("Raw timestamp"),
- 'description' => t("A date in UNIX timestamp format (%date)", array('%date' => REQUEST_TIME)),
- );
-
-
- // File related tokens.
- $file['fid'] = array(
- 'name' => t("File ID"),
- 'description' => t("The unique ID of the uploaded file."),
- );
- $file['name'] = array(
- 'name' => t("File name"),
- 'description' => t("The name of the file on disk."),
- );
- $file['path'] = array(
- 'name' => t("Path"),
- 'description' => t("The location of the file relative to Drupal root."),
- );
- $file['mime'] = array(
- 'name' => t("MIME type"),
- 'description' => t("The MIME type of the file."),
- );
- $file['size'] = array(
- 'name' => t("File size"),
- 'description' => t("The size of the file."),
- );
- $file['url'] = array(
- 'name' => t("URL"),
- 'description' => t("The web-accessible URL for the file."),
- );
- $file['timestamp'] = array(
- 'name' => t("Timestamp"),
- 'description' => t("The date the file was most recently changed."),
- 'type' => 'date',
- );
- $file['owner'] = array(
- 'name' => t("Owner"),
- 'description' => t("The user who originally uploaded the file."),
- 'type' => 'user',
- );
-
- return array(
- 'types' => $types,
- 'tokens' => array(
- 'site' => $site,
- 'date' => $date,
- 'file' => $file,
- ),
- );
-}
-
-/**
- * Implements hook_tokens().
- */
-function system_tokens($type, $tokens, array $data = array(), array $options = array()) {
- $url_options = array('absolute' => TRUE);
- if (isset($options['language'])) {
- $url_options['language'] = $options['language'];
- $language_code = $options['language']->language;
- }
- else {
- $language_code = NULL;
- }
- $sanitize = !empty($options['sanitize']);
-
- $replacements = array();
-
- if ($type == 'site') {
- foreach ($tokens as $name => $original) {
- switch ($name) {
- case 'name':
- $site_name = variable_get('site_name', 'Drupal');
- $replacements[$original] = $sanitize ? check_plain($site_name) : $site_name;
- break;
-
- case 'slogan':
- $slogan = variable_get('site_slogan', '');
- $replacements[$original] = $sanitize ? check_plain($slogan) : $slogan;
- break;
-
- case 'mail':
- $replacements[$original] = variable_get('site_mail', '');
- break;
-
- case 'url':
- $replacements[$original] = url('', $url_options);
- break;
-
- case 'url-brief':
- $replacements[$original] = preg_replace(array('!^https?://!', '!/$!'), '', url('', $url_options));
- break;
-
- case 'login-url':
- $replacements[$original] = url('user', $url_options);
- break;
- }
- }
- }
-
- elseif ($type == 'date') {
- if (empty($data['date'])) {
- $date = REQUEST_TIME;
- }
- else {
- $date = $data['date'];
- }
-
- foreach ($tokens as $name => $original) {
- switch ($name) {
- case 'short':
- $replacements[$original] = format_date($date, 'short', '', NULL, $language_code);
- break;
-
- case 'medium':
- $replacements[$original] = format_date($date, 'medium', '', NULL, $language_code);
- break;
-
- case 'long':
- $replacements[$original] = format_date($date, 'long', '', NULL, $language_code);
- break;
-
- case 'since':
- $replacements[$original] = format_interval((REQUEST_TIME - $date), 2, $language_code);
- break;
-
- case 'raw':
- $replacements[$original] = $sanitize ? check_plain($date) : $date;
- break;
- }
- }
-
- if ($created_tokens = token_find_with_prefix($tokens, 'custom')) {
- foreach ($created_tokens as $name => $original) {
- $replacements[$original] = format_date($date, 'custom', $name, NULL, $language_code);
- }
- }
- }
-
- elseif ($type == 'file' && !empty($data['file'])) {
- $file = $data['file'];
-
- foreach ($tokens as $name => $original) {
- switch ($name) {
- // Basic keys and values.
- case 'fid':
- $replacements[$original] = $file->fid;
- break;
-
- // Essential file data
- case 'name':
- $replacements[$original] = $sanitize ? check_plain($file->filename) : $file->filename;
- break;
-
- case 'path':
- $replacements[$original] = $sanitize ? check_plain($file->uri) : $file->uri;
- break;
-
- case 'mime':
- $replacements[$original] = $sanitize ? check_plain($file->filemime) : $file->filemime;
- break;
-
- case 'size':
- $replacements[$original] = format_size($file->filesize);
- break;
-
- case 'url':
- $replacements[$original] = $sanitize ? check_plain(file_create_url($file->uri)) : file_create_url($file->uri);
- break;
-
- // These tokens are default variations on the chained tokens handled below.
- case 'timestamp':
- $replacements[$original] = format_date($file->timestamp, 'medium', '', NULL, $language_code);
- break;
-
- case 'owner':
- $account = user_load($file->uid);
- $name = format_username($account);
- $replacements[$original] = $sanitize ? check_plain($name) : $name;
- break;
- }
- }
-
- if ($date_tokens = token_find_with_prefix($tokens, 'timestamp')) {
- $replacements += token_generate('date', $date_tokens, array('date' => $file->timestamp), $options);
- }
-
- if (($owner_tokens = token_find_with_prefix($tokens, 'owner')) && $account = user_load($file->uid)) {
- $replacements += token_generate('user', $owner_tokens, array('user' => $account), $options);
- }
- }
-
- return $replacements;
-}
diff --git a/modules/system/system.updater.inc b/modules/system/system.updater.inc
deleted file mode 100644
index a14d788..0000000
--- a/modules/system/system.updater.inc
+++ /dev/null
@@ -1,150 +0,0 @@
-name)) {
- $relative_path = dirname($relative_path);
- }
- else {
- $relative_path = 'sites/all/modules';
- }
- return DRUPAL_ROOT . '/' . $relative_path;
- }
-
- public function isInstalled() {
- return (bool) drupal_get_path('module', $this->name);
- }
-
- public static function canUpdateDirectory($directory) {
- if (file_scan_directory($directory, '/.*\.module$/')) {
- return TRUE;
- }
- return FALSE;
- }
-
- public static function canUpdate($project_name) {
- return (bool) drupal_get_path('module', $project_name);
- }
-
- /**
- * Return available database schema updates one a new version is installed.
- */
- public function getSchemaUpdates() {
- require_once DRUPAL_ROOT . '/includes/install.inc';
- require_once DRUPAL_ROOT . '/includes/update.inc';
-
- if (_update_get_project_type($project) != 'module') {
- return array();
- }
- module_load_include('install', $project);
-
- if (!$updates = drupal_get_schema_versions($project)) {
- return array();
- }
- $updates_to_run = array();
- $modules_with_updates = update_get_update_list();
- if ($updates = $modules_with_updates[$project]) {
- if ($updates['start']) {
- return $updates['pending'];
- }
- }
- return array();
- }
-
- /**
- * Returns a list of post install actions.
- */
- public function postInstallTasks() {
- return array(
- l(t('Install another module'), 'admin/modules/install'),
- l(t('Enable newly added modules'), 'admin/modules'),
- l(t('Administration pages'), 'admin'),
- );
- }
-
- public function postUpdateTasks() {
- // We don't want to check for DB updates here, we do that once for all
- // updated modules on the landing page.
- }
-
-}
-
-/**
- * Class for updating themes using FileTransfer classes via authorize.php.
- */
-class ThemeUpdater extends Updater implements DrupalUpdaterInterface {
-
- /**
- * Return the directory where a theme should be installed.
- *
- * If the theme is already installed, drupal_get_path() will return
- * a valid path and we should install it there (although we need to use an
- * absolute path, so we prepend DRUPAL_ROOT). If we're installing a new
- * theme, we always want it to go into sites/all/themes, since that's
- * where all the documentation recommends users install their themes, and
- * there's no way that can conflict on a multi-site installation, since
- * the Update manager won't let you install a new theme if it's already
- * found on your system, and if there was a copy in sites/all, we'd see it.
- */
- public function getInstallDirectory() {
- if ($relative_path = drupal_get_path('theme', $this->name)) {
- $relative_path = dirname($relative_path);
- }
- else {
- $relative_path = 'sites/all/themes';
- }
- return DRUPAL_ROOT . '/' . $relative_path;
- }
-
- public function isInstalled() {
- return (bool) drupal_get_path('theme', $this->name);
- }
-
- static function canUpdateDirectory($directory) {
- // This is a lousy test, but don't know how else to confirm it is a theme.
- if (file_scan_directory($directory, '/.*\.module$/')) {
- return FALSE;
- }
- return TRUE;
- }
-
- public static function canUpdate($project_name) {
- return (bool) drupal_get_path('theme', $project_name);
- }
-
- public function postInstall() {
- // Update the system table.
- clearstatcache();
- system_rebuild_theme_data();
-
- }
-
- public function postInstallTasks() {
- return array(
- l(t('Enable newly added themes'), 'admin/appearance'),
- l(t('Administration pages'), 'admin'),
- );
- }
-}
diff --git a/modules/system/tests/cron_queue_test.info b/modules/system/tests/cron_queue_test.info
deleted file mode 100644
index 718cb10..0000000
--- a/modules/system/tests/cron_queue_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Cron Queue test
-description = 'Support module for the cron queue runner.'
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/system/tests/cron_queue_test.module b/modules/system/tests/cron_queue_test.module
deleted file mode 100644
index e95c6b6..0000000
--- a/modules/system/tests/cron_queue_test.module
+++ /dev/null
@@ -1,15 +0,0 @@
- 'cron_queue_test_exception',
- );
- return $queues;
-}
-
-function cron_queue_test_exception($item) {
- throw new Exception('That is not supposed to happen.');
-}
diff --git a/modules/system/theme.api.php b/modules/system/theme.api.php
deleted file mode 100644
index 56e9ba1..0000000
--- a/modules/system/theme.api.php
+++ /dev/null
@@ -1,240 +0,0 @@
- $header, 'rows' => $rows));
- * Additionally, the theme() function can take an array of theme
- * hooks, which can be used to provide 'fallback' implementations to
- * allow for more specific control of output. For example, the function:
- * theme(array('table__foo', 'table'), $variables) would look to see if
- * 'table__foo' is registered anywhere; if it is not, it would 'fall back'
- * to the generic 'table' implementation. This can be used to attach specific
- * theme functions to named objects, allowing the themer more control over
- * specific types of output.
- *
- * As of Drupal 6, every theme hook is required to be registered by the
- * module that owns it, so that Drupal can tell what to do with it and
- * to make it simple for themes to identify and override the behavior
- * for these calls.
- *
- * The theme hooks are registered via hook_theme(), which returns an
- * array of arrays with information about the hook. It describes the
- * arguments the function or template will need, and provides
- * defaults for the template in case they are not filled in. If the default
- * implementation is a function, by convention it is named theme_HOOK().
- *
- * Each module should provide a default implementation for theme_hooks that
- * it registers. This implementation may be either a function or a template;
- * if it is a function it must be specified via hook_theme(). By convention,
- * default implementations of theme hooks are named theme_HOOK. Default
- * template implementations are stored in the module directory.
- *
- * Drupal's default template renderer is a simple PHP parsing engine that
- * includes the template and stores the output. Drupal's theme engines
- * can provide alternate template engines, such as XTemplate, Smarty and
- * PHPTal. The most common template engine is PHPTemplate (included with
- * Drupal and implemented in phptemplate.engine, which uses Drupal's default
- * template renderer.
- *
- * In order to create theme-specific implementations of these hooks, themes can
- * implement their own version of theme hooks, either as functions or templates.
- * These implementations will be used instead of the default implementation. If
- * using a pure .theme without an engine, the .theme is required to implement
- * its own version of hook_theme() to tell Drupal what it is implementing;
- * themes utilizing an engine will have their well-named theming functions
- * automatically registered for them. While this can vary based upon the theme
- * engine, the standard set by phptemplate is that theme functions should be
- * named THEMENAME_HOOK. For example, for Drupal's default theme (Bartik) to
- * implement the 'table' hook, the phptemplate.engine would find
- * bartik_table().
- *
- * The theme system is described and defined in theme.inc.
- *
- * @see theme()
- * @see hook_theme()
- * @see hooks
- * @see callbacks
- *
- * @} End of "defgroup themeable".
- */
-
-/**
- * Allow themes to alter the theme-specific settings form.
- *
- * With this hook, themes can alter the theme-specific settings form in any way
- * allowable by Drupal's Form API, such as adding form elements, changing
- * default values and removing form elements. See the Form API documentation on
- * api.drupal.org for detailed information.
- *
- * Note that the base theme's form alterations will be run before any sub-theme
- * alterations.
- *
- * @param $form
- * Nested array of form elements that comprise the form.
- * @param $form_state
- * A keyed array containing the current state of the form.
- */
-function hook_form_system_theme_settings_alter(&$form, &$form_state) {
- // Add a checkbox to toggle the breadcrumb trail.
- $form['toggle_breadcrumb'] = array(
- '#type' => 'checkbox',
- '#title' => t('Display the breadcrumb'),
- '#default_value' => theme_get_setting('toggle_breadcrumb'),
- '#description' => t('Show a trail of links from the homepage to the current page.'),
- );
-}
-
-/**
- * Preprocess theme variables for templates.
- *
- * This hook allows modules to preprocess theme variables for theme templates.
- * It is called for all theme hooks implemented as templates, but not for theme
- * hooks implemented as functions. hook_preprocess_HOOK() can be used to
- * preprocess variables for a specific theme hook, whether implemented as a
- * template or function.
- *
- * For more detailed information, see theme().
- *
- * @param $variables
- * The variables array (modify in place).
- * @param $hook
- * The name of the theme hook.
- */
-function hook_preprocess(&$variables, $hook) {
- static $hooks;
-
- // Add contextual links to the variables, if the user has permission.
-
- if (!user_access('access contextual links')) {
- return;
- }
-
- if (!isset($hooks)) {
- $hooks = theme_get_registry();
- }
-
- // Determine the primary theme function argument.
- if (isset($hooks[$hook]['variables'])) {
- $keys = array_keys($hooks[$hook]['variables']);
- $key = $keys[0];
- }
- else {
- $key = $hooks[$hook]['render element'];
- }
-
- if (isset($variables[$key])) {
- $element = $variables[$key];
- }
-
- if (isset($element) && is_array($element) && !empty($element['#contextual_links'])) {
- $variables['title_suffix']['contextual_links'] = contextual_links_view($element);
- if (!empty($variables['title_suffix']['contextual_links'])) {
- $variables['classes_array'][] = 'contextual-links-region';
- }
- }
-}
-
-/**
- * Preprocess theme variables for a specific theme hook.
- *
- * This hook allows modules to preprocess theme variables for a specific theme
- * hook. It should only be used if a module needs to override or add to the
- * theme preprocessing for a theme hook it didn't define.
- *
- * For more detailed information, see theme().
- *
- * @param $variables
- * The variables array (modify in place).
- */
-function hook_preprocess_HOOK(&$variables) {
- // This example is from rdf_preprocess_image(). It adds an RDF attribute
- // to the image hook's variables.
- $variables['attributes']['typeof'] = array('foaf:Image');
-}
-
-/**
- * Process theme variables for templates.
- *
- * This hook allows modules to process theme variables for theme templates. It
- * is called for all theme hooks implemented as templates, but not for theme
- * hooks implemented as functions. hook_process_HOOK() can be used to process
- * variables for a specific theme hook, whether implemented as a template or
- * function.
- *
- * For more detailed information, see theme().
- *
- * @param $variables
- * The variables array (modify in place).
- * @param $hook
- * The name of the theme hook.
- */
-function hook_process(&$variables, $hook) {
- // Wraps variables in RDF wrappers.
- if (!empty($variables['rdf_template_variable_attributes_array'])) {
- foreach ($variables['rdf_template_variable_attributes_array'] as $variable_name => $attributes) {
- $context = array(
- 'hook' => $hook,
- 'variable_name' => $variable_name,
- 'variables' => $variables,
- );
- $variables[$variable_name] = theme('rdf_template_variable_wrapper', array('content' => $variables[$variable_name], 'attributes' => $attributes, 'context' => $context));
- }
- }
-}
-
-/**
- * Process theme variables for a specific theme hook.
- *
- * This hook allows modules to process theme variables for a specific theme
- * hook. It should only be used if a module needs to override or add to the
- * theme processing for a theme hook it didn't define.
- *
- * For more detailed information, see theme().
- *
- * @param $variables
- * The variables array (modify in place).
- */
-function hook_process_HOOK(&$variables) {
- // @todo There are no use-cases in Drupal core for this hook. Find one from a
- // contributed module, or come up with a good example. Coming up with a good
- // example might be tough, since the intent is for nearly everything to be
- // achievable via preprocess functions, and for process functions to only be
- // used when requiring the later execution time.
-}
-
-/**
- * Respond to themes being enabled.
- *
- * @param array $theme_list
- * Array containing the names of the themes being enabled.
- *
- * @see theme_enable()
- */
-function hook_themes_enabled($theme_list) {
- foreach ($theme_list as $theme) {
- block_theme_initialize($theme);
- }
-}
-
-/**
- * Respond to themes being disabled.
- *
- * @param array $theme_list
- * Array containing the names of the themes being disabled.
- *
- * @see theme_disable()
- */
-function hook_themes_disabled($theme_list) {
- // Clear all update module caches.
- _update_cache_clear();
-}
diff --git a/modules/taxonomy/taxonomy-term.tpl.php b/modules/taxonomy/taxonomy-term.tpl.php
deleted file mode 100644
index a225c3a..0000000
--- a/modules/taxonomy/taxonomy-term.tpl.php
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
diff --git a/modules/taxonomy/taxonomy.admin.inc b/modules/taxonomy/taxonomy.admin.inc
deleted file mode 100644
index 828fde0..0000000
--- a/modules/taxonomy/taxonomy.admin.inc
+++ /dev/null
@@ -1,984 +0,0 @@
-vid]['#vocabulary'] = $vocabulary;
- $form[$vocabulary->vid]['name'] = array('#markup' => check_plain($vocabulary->name));
- $form[$vocabulary->vid]['weight'] = array(
- '#type' => 'weight',
- '#title' => t('Weight for @title', array('@title' => $vocabulary->name)),
- '#title_display' => 'invisible',
- '#delta' => 10,
- '#default_value' => $vocabulary->weight,
- );
- $form[$vocabulary->vid]['edit'] = array('#type' => 'link', '#title' => t('edit vocabulary'), '#href' => "admin/structure/taxonomy/$vocabulary->machine_name/edit");
- $form[$vocabulary->vid]['list'] = array('#type' => 'link', '#title' => t('list terms'), '#href' => "admin/structure/taxonomy/$vocabulary->machine_name");
- $form[$vocabulary->vid]['add'] = array('#type' => 'link', '#title' => t('add terms'), '#href' => "admin/structure/taxonomy/$vocabulary->machine_name/add");
- }
-
- // Only make this form include a submit button and weight if more than one
- // vocabulary exists.
- if (count($vocabularies) > 1) {
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
- }
- elseif (isset($vocabulary)) {
- unset($form[$vocabulary->vid]['weight']);
- }
- return $form;
-}
-
-/**
- * Submit handler for vocabularies overview. Updates changed vocabulary weights.
- *
- * @see taxonomy_overview_vocabularies()
- */
-function taxonomy_overview_vocabularies_submit($form, &$form_state) {
- foreach ($form_state['values'] as $vid => $vocabulary) {
- if (is_numeric($vid) && $form[$vid]['#vocabulary']->weight != $form_state['values'][$vid]['weight']) {
- $form[$vid]['#vocabulary']->weight = $form_state['values'][$vid]['weight'];
- taxonomy_vocabulary_save($form[$vid]['#vocabulary']);
- }
- }
- drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
- * Returns HTML for the vocabulary overview form as a sortable list of vocabularies.
- *
- * @param $variables
- * An associative array containing:
- * - form: A render element representing the form.
- *
- * @see taxonomy_overview_vocabularies()
- * @ingroup themeable
- */
-function theme_taxonomy_overview_vocabularies($variables) {
- $form = $variables['form'];
-
- $rows = array();
-
- foreach (element_children($form) as $key) {
- if (isset($form[$key]['name'])) {
- $vocabulary = &$form[$key];
-
- $row = array();
- $row[] = drupal_render($vocabulary['name']);
- if (isset($vocabulary['weight'])) {
- $vocabulary['weight']['#attributes']['class'] = array('vocabulary-weight');
- $row[] = drupal_render($vocabulary['weight']);
- }
- $row[] = drupal_render($vocabulary['edit']);
- $row[] = drupal_render($vocabulary['list']);
- $row[] = drupal_render($vocabulary['add']);
- $rows[] = array('data' => $row, 'class' => array('draggable'));
- }
- }
-
- $header = array(t('Vocabulary name'));
- if (isset($form['actions'])) {
- $header[] = t('Weight');
- drupal_add_tabledrag('taxonomy', 'order', 'sibling', 'vocabulary-weight');
- }
- $header[] = array('data' => t('Operations'), 'colspan' => '3');
- return theme('table', array('header' => $header, 'rows' => $rows, 'empty' => t('No vocabularies available. Add vocabulary .', array('@link' => url('admin/structure/taxonomy/add'))), 'attributes' => array('id' => 'taxonomy'))) . drupal_render_children($form);
-}
-
-/**
- * Form builder for the vocabulary editing form.
- *
- * @ingroup forms
- * @see taxonomy_form_vocabulary_submit()
- * @see taxonomy_form_vocabulary_validate()
- */
-function taxonomy_form_vocabulary($form, &$form_state, $edit = array()) {
- // During initial form build, add the entity to the form state for use
- // during form building and processing. During a rebuild, use what is in the
- // form state.
- if (!isset($form_state['vocabulary'])) {
- $vocabulary = is_object($edit) ? $edit : (object) $edit;
- $defaults = array(
- 'name' => '',
- 'machine_name' => '',
- 'description' => '',
- 'hierarchy' => 0,
- 'weight' => 0,
- );
- foreach ($defaults as $key => $value) {
- if (!isset($vocabulary->$key)) {
- $vocabulary->$key = $value;
- }
- }
- $form_state['vocabulary'] = $vocabulary;
- }
- else {
- $vocabulary = $form_state['vocabulary'];
- }
-
- // @todo Legacy support. Modules are encouraged to access the entity using
- // $form_state. Remove in Drupal 8.
- $form['#vocabulary'] = $form_state['vocabulary'];
-
- // Check whether we need a deletion confirmation form.
- if (isset($form_state['confirm_delete']) && isset($form_state['values']['vid'])) {
- return taxonomy_vocabulary_confirm_delete($form, $form_state, $form_state['values']['vid']);
- }
- $form['name'] = array(
- '#type' => 'textfield',
- '#title' => t('Name'),
- '#default_value' => $vocabulary->name,
- '#maxlength' => 255,
- '#required' => TRUE,
- );
- $form['machine_name'] = array(
- '#type' => 'machine_name',
- '#default_value' => $vocabulary->machine_name,
- '#maxlength' => 255,
- '#machine_name' => array(
- 'exists' => 'taxonomy_vocabulary_machine_name_load',
- ),
- );
- $form['old_machine_name'] = array(
- '#type' => 'value',
- '#value' => $vocabulary->machine_name,
- );
- $form['description'] = array(
- '#type' => 'textfield',
- '#title' => t('Description'),
- '#default_value' => $vocabulary->description,
- );
- // Set the hierarchy to "multiple parents" by default. This simplifies the
- // vocabulary form and standardizes the term form.
- $form['hierarchy'] = array(
- '#type' => 'value',
- '#value' => '0',
- );
-
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
- if (isset($vocabulary->vid)) {
- $form['actions']['delete'] = array('#type' => 'submit', '#value' => t('Delete'));
- $form['vid'] = array('#type' => 'value', '#value' => $vocabulary->vid);
- $form['module'] = array('#type' => 'value', '#value' => $vocabulary->module);
- }
- $form['#validate'][] = 'taxonomy_form_vocabulary_validate';
-
- return $form;
-}
-
-/**
- * Form validation handler for taxonomy_form_vocabulary().
- *
- * Makes sure that the machine name of the vocabulary is not in the
- * disallowed list (names that conflict with menu items, such as 'list'
- * and 'add').
- *
- * @see taxonomy_form_vocabulary()
- * @see taxonomy_form_vocabulary_submit()
- */
-function taxonomy_form_vocabulary_validate($form, &$form_state) {
- // During the deletion there is no 'machine_name' key
- if (isset($form_state['values']['machine_name'])) {
- // Do not allow machine names to conflict with taxonomy path arguments.
- $machine_name = $form_state['values']['machine_name'];
- $disallowed = array('add', 'list');
- if (in_array($machine_name, $disallowed)) {
- form_set_error('machine_name', t('The machine-readable name cannot be "add" or "list".'));
- }
- }
-}
-
-/**
- * Form submission handler for taxonomy_form_vocabulary().
- *
- * @see taxonomy_form_vocabulary()
- * @see taxonomy_form_vocabulary_validate()
- */
-function taxonomy_form_vocabulary_submit($form, &$form_state) {
- if ($form_state['triggering_element']['#value'] == t('Delete')) {
- // Rebuild the form to confirm vocabulary deletion.
- $form_state['rebuild'] = TRUE;
- $form_state['confirm_delete'] = TRUE;
- return;
- }
-
- $vocabulary = $form_state['vocabulary'];
- entity_form_submit_build_entity('taxonomy_vocabulary', $vocabulary, $form, $form_state);
-
- switch (taxonomy_vocabulary_save($vocabulary)) {
- case SAVED_NEW:
- drupal_set_message(t('Created new vocabulary %name.', array('%name' => $vocabulary->name)));
- watchdog('taxonomy', 'Created new vocabulary %name.', array('%name' => $vocabulary->name), WATCHDOG_NOTICE, l(t('edit'), 'admin/structure/taxonomy/' . $vocabulary->machine_name . '/edit'));
- break;
-
- case SAVED_UPDATED:
- drupal_set_message(t('Updated vocabulary %name.', array('%name' => $vocabulary->name)));
- watchdog('taxonomy', 'Updated vocabulary %name.', array('%name' => $vocabulary->name), WATCHDOG_NOTICE, l(t('edit'), 'admin/structure/taxonomy/' . $vocabulary->machine_name . '/edit'));
- break;
- }
-
- $form_state['values']['vid'] = $vocabulary->vid;
- $form_state['vid'] = $vocabulary->vid;
- $form_state['redirect'] = 'admin/structure/taxonomy';
-}
-
-/**
- * Form builder for the taxonomy terms overview.
- *
- * Display a tree of all the terms in a vocabulary, with options to edit
- * each one. The form is made drag and drop by the theme function.
- *
- * @ingroup forms
- * @see taxonomy_overview_terms_submit()
- * @see theme_taxonomy_overview_terms()
- */
-function taxonomy_overview_terms($form, &$form_state, $vocabulary) {
- global $pager_page_array, $pager_total, $pager_total_items;
-
- // Check for confirmation forms.
- if (isset($form_state['confirm_reset_alphabetical'])) {
- return taxonomy_vocabulary_confirm_reset_alphabetical($form, $form_state, $vocabulary->vid);
- }
-
- $form['#vocabulary'] = $vocabulary;
- $form['#tree'] = TRUE;
- $form['#parent_fields'] = FALSE;
-
- $page = isset($_GET['page']) ? $_GET['page'] : 0;
- $page_increment = variable_get('taxonomy_terms_per_page_admin', 100); // Number of terms per page.
- $page_entries = 0; // Elements shown on this page.
- $before_entries = 0; // Elements at the root level before this page.
- $after_entries = 0; // Elements at the root level after this page.
- $root_entries = 0; // Elements at the root level on this page.
-
- // Terms from previous and next pages are shown if the term tree would have
- // been cut in the middle. Keep track of how many extra terms we show on each
- // page of terms.
- $back_step = NULL;
- $forward_step = 0;
-
- // An array of the terms to be displayed on this page.
- $current_page = array();
-
- $delta = 0;
- $term_deltas = array();
- $tree = taxonomy_get_tree($vocabulary->vid);
- $term = current($tree);
- do {
- // In case this tree is completely empty.
- if (empty($term)) {
- break;
- }
- $delta++;
- // Count entries before the current page.
- if ($page && ($page * $page_increment) > $before_entries && !isset($back_step)) {
- $before_entries++;
- continue;
- }
- // Count entries after the current page.
- elseif ($page_entries > $page_increment && isset($complete_tree)) {
- $after_entries++;
- continue;
- }
-
- // Do not let a term start the page that is not at the root.
- if (isset($term->depth) && ($term->depth > 0) && !isset($back_step)) {
- $back_step = 0;
- while ($pterm = prev($tree)) {
- $before_entries--;
- $back_step++;
- if ($pterm->depth == 0) {
- prev($tree);
- continue 2; // Jump back to the start of the root level parent.
- }
- }
- }
- $back_step = isset($back_step) ? $back_step : 0;
-
- // Continue rendering the tree until we reach the a new root item.
- if ($page_entries >= $page_increment + $back_step + 1 && $term->depth == 0 && $root_entries > 1) {
- $complete_tree = TRUE;
- // This new item at the root level is the first item on the next page.
- $after_entries++;
- continue;
- }
- if ($page_entries >= $page_increment + $back_step) {
- $forward_step++;
- }
-
- // Finally, if we've gotten down this far, we're rendering a term on this page.
- $page_entries++;
- $term_deltas[$term->tid] = isset($term_deltas[$term->tid]) ? $term_deltas[$term->tid] + 1 : 0;
- $key = 'tid:' . $term->tid . ':' . $term_deltas[$term->tid];
-
- // Keep track of the first term displayed on this page.
- if ($page_entries == 1) {
- $form['#first_tid'] = $term->tid;
- }
- // Keep a variable to make sure at least 2 root elements are displayed.
- if ($term->parents[0] == 0) {
- $root_entries++;
- }
- $current_page[$key] = $term;
- } while ($term = next($tree));
-
- // Because we didn't use a pager query, set the necessary pager variables.
- $total_entries = $before_entries + $page_entries + $after_entries;
- $pager_total_items[0] = $total_entries;
- $pager_page_array[0] = $page;
- $pager_total[0] = ceil($total_entries / $page_increment);
-
- // If this form was already submitted once, it's probably hit a validation
- // error. Ensure the form is rebuilt in the same order as the user submitted.
- if (!empty($form_state['input'])) {
- $order = array_flip(array_keys($form_state['input'])); // Get the $_POST order.
- $current_page = array_merge($order, $current_page); // Update our form with the new order.
- foreach ($current_page as $key => $term) {
- // Verify this is a term for the current page and set at the current depth.
- if (is_array($form_state['input'][$key]) && is_numeric($form_state['input'][$key]['tid'])) {
- $current_page[$key]->depth = $form_state['input'][$key]['depth'];
- }
- else {
- unset($current_page[$key]);
- }
- }
- }
-
- // Build the actual form.
- foreach ($current_page as $key => $term) {
- // Save the term for the current page so we don't have to load it a second time.
- $form[$key]['#term'] = (array) $term;
- if (isset($term->parents)) {
- $form[$key]['#term']['parent'] = $term->parent = $term->parents[0];
- unset($form[$key]['#term']['parents'], $term->parents);
- }
-
- $form[$key]['view'] = array('#type' => 'link', '#title' => $term->name, '#href' => "taxonomy/term/$term->tid");
- if ($vocabulary->hierarchy < 2 && count($tree) > 1) {
- $form['#parent_fields'] = TRUE;
- $form[$key]['tid'] = array(
- '#type' => 'hidden',
- '#value' => $term->tid
- );
- $form[$key]['parent'] = array(
- '#type' => 'hidden',
- // Yes, default_value on a hidden. It needs to be changeable by the javascript.
- '#default_value' => $term->parent,
- );
- $form[$key]['depth'] = array(
- '#type' => 'hidden',
- // Same as above, the depth is modified by javascript, so it's a default_value.
- '#default_value' => $term->depth,
- );
- $form[$key]['weight'] = array(
- '#type' => 'weight',
- '#delta' => $delta,
- '#title_display' => 'invisible',
- '#title' => t('Weight for added term'),
- '#default_value' => $term->weight,
- );
- }
- $form[$key]['edit'] = array('#type' => 'link', '#title' => t('edit'), '#href' => 'taxonomy/term/' . $term->tid . '/edit', '#options' => array('query' => drupal_get_destination()));
- }
-
- $form['#total_entries'] = $total_entries;
- $form['#page_increment'] = $page_increment;
- $form['#page_entries'] = $page_entries;
- $form['#back_step'] = $back_step;
- $form['#forward_step'] = $forward_step;
- $form['#empty_text'] = t('No terms available. Add term .', array('@link' => url('admin/structure/taxonomy/' . $vocabulary->machine_name . '/add')));
-
- if ($vocabulary->hierarchy < 2 && count($tree) > 1) {
- $form['actions'] = array('#type' => 'actions', '#tree' => FALSE);
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save')
- );
- $form['actions']['reset_alphabetical'] = array(
- '#type' => 'submit',
- '#value' => t('Reset to alphabetical')
- );
- $form_state['redirect'] = array($_GET['q'], (isset($_GET['page']) ? array('query' => array('page' => $_GET['page'])) : array()));
- }
-
- return $form;
-}
-
-/**
- * Submit handler for terms overview form.
- *
- * Rather than using a textfield or weight field, this form depends entirely
- * upon the order of form elements on the page to determine new weights.
- *
- * Because there might be hundreds or thousands of taxonomy terms that need to
- * be ordered, terms are weighted from 0 to the number of terms in the
- * vocabulary, rather than the standard -10 to 10 scale. Numbers are sorted
- * lowest to highest, but are not necessarily sequential. Numbers may be skipped
- * when a term has children so that reordering is minimal when a child is
- * added or removed from a term.
- *
- * @see taxonomy_overview_terms()
- */
-function taxonomy_overview_terms_submit($form, &$form_state) {
- if ($form_state['triggering_element']['#value'] == t('Reset to alphabetical')) {
- // Execute the reset action.
- if ($form_state['values']['reset_alphabetical'] === TRUE) {
- return taxonomy_vocabulary_confirm_reset_alphabetical_submit($form, $form_state);
- }
- // Rebuild the form to confirm the reset action.
- $form_state['rebuild'] = TRUE;
- $form_state['confirm_reset_alphabetical'] = TRUE;
- return;
- }
-
- // Sort term order based on weight.
- uasort($form_state['values'], 'drupal_sort_weight');
-
- $vocabulary = $form['#vocabulary'];
- $hierarchy = 0; // Update the current hierarchy type as we go.
-
- $changed_terms = array();
- $tree = taxonomy_get_tree($vocabulary->vid);
-
- if (empty($tree)) {
- return;
- }
-
- // Build a list of all terms that need to be updated on previous pages.
- $weight = 0;
- $term = (array) $tree[0];
- while ($term['tid'] != $form['#first_tid']) {
- if ($term['parents'][0] == 0 && $term['weight'] != $weight) {
- $term['parent'] = $term['parents'][0];
- $term['weight'] = $weight;
- $changed_terms[$term['tid']] = $term;
- }
- $weight++;
- $hierarchy = $term['parents'][0] != 0 ? 1 : $hierarchy;
- $term = (array) $tree[$weight];
- }
-
- // Renumber the current page weights and assign any new parents.
- $level_weights = array();
- foreach ($form_state['values'] as $tid => $values) {
- if (isset($form[$tid]['#term'])) {
- $term = $form[$tid]['#term'];
- // Give terms at the root level a weight in sequence with terms on previous pages.
- if ($values['parent'] == 0 && $term['weight'] != $weight) {
- $term['weight'] = $weight;
- $changed_terms[$term['tid']] = $term;
- }
- // Terms not at the root level can safely start from 0 because they're all on this page.
- elseif ($values['parent'] > 0) {
- $level_weights[$values['parent']] = isset($level_weights[$values['parent']]) ? $level_weights[$values['parent']] + 1 : 0;
- if ($level_weights[$values['parent']] != $term['weight']) {
- $term['weight'] = $level_weights[$values['parent']];
- $changed_terms[$term['tid']] = $term;
- }
- }
- // Update any changed parents.
- if ($values['parent'] != $term['parent']) {
- $term['parent'] = $values['parent'];
- $changed_terms[$term['tid']] = $term;
- }
- $hierarchy = $term['parent'] != 0 ? 1 : $hierarchy;
- $weight++;
- }
- }
-
- // Build a list of all terms that need to be updated on following pages.
- for ($weight; $weight < count($tree); $weight++) {
- $term = (array) $tree[$weight];
- if ($term['parents'][0] == 0 && $term['weight'] != $weight) {
- $term['parent'] = $term['parents'][0];
- $term['weight'] = $weight;
- $changed_terms[$term['tid']] = $term;
- }
- $hierarchy = $term['parents'][0] != 0 ? 1 : $hierarchy;
- }
-
- // Save all updated terms.
- foreach ($changed_terms as $changed) {
- $term = (object) $changed;
- // Update term_hierachy and term_data directly since we don't have a
- // fully populated term object to save.
- db_update('taxonomy_term_hierarchy')
- ->fields(array('parent' => $term->parent))
- ->condition('tid', $term->tid, '=')
- ->execute();
-
- db_update('taxonomy_term_data')
- ->fields(array('weight' => $term->weight))
- ->condition('tid', $term->tid, '=')
- ->execute();
- }
-
- // Update the vocabulary hierarchy to flat or single hierarchy.
- if ($vocabulary->hierarchy != $hierarchy) {
- $vocabulary->hierarchy = $hierarchy;
- taxonomy_vocabulary_save($vocabulary);
- }
- drupal_set_message(t('The configuration options have been saved.'));
-}
-
-/**
- * Returns HTML for a terms overview form as a sortable list of terms.
- *
- * @param $variables
- * An associative array containing:
- * - form: A render element representing the form.
- *
- * @see taxonomy_overview_terms()
- * @ingroup themeable
- */
-function theme_taxonomy_overview_terms($variables) {
- $form = $variables['form'];
-
- $page_increment = $form['#page_increment'];
- $page_entries = $form['#page_entries'];
- $back_step = $form['#back_step'];
- $forward_step = $form['#forward_step'];
-
- // Add drag and drop if parent fields are present in the form.
- if ($form['#parent_fields']) {
- drupal_add_tabledrag('taxonomy', 'match', 'parent', 'term-parent', 'term-parent', 'term-id', FALSE);
- drupal_add_tabledrag('taxonomy', 'depth', 'group', 'term-depth', NULL, NULL, FALSE);
- drupal_add_js(drupal_get_path('module', 'taxonomy') . '/taxonomy.js');
- drupal_add_js(array('taxonomy' => array('backStep' => $back_step, 'forwardStep' => $forward_step)), 'setting');
- drupal_add_css(drupal_get_path('module', 'taxonomy') . '/taxonomy.css');
- }
- drupal_add_tabledrag('taxonomy', 'order', 'sibling', 'term-weight');
-
- $errors = form_get_errors() != FALSE ? form_get_errors() : array();
- $rows = array();
- foreach (element_children($form) as $key) {
- if (isset($form[$key]['#term'])) {
- $term = &$form[$key];
-
- $row = array();
- $row[] = (isset($term['#term']['depth']) && $term['#term']['depth'] > 0 ? theme('indentation', array('size' => $term['#term']['depth'])) : ''). drupal_render($term['view']);
- if ($form['#parent_fields']) {
- $term['tid']['#attributes']['class'] = array('term-id');
- $term['parent']['#attributes']['class'] = array('term-parent');
- $term['depth']['#attributes']['class'] = array('term-depth');
- $row[0] .= drupal_render($term['parent']) . drupal_render($term['tid']) . drupal_render($term['depth']);
- }
- $term['weight']['#attributes']['class'] = array('term-weight');
- $row[] = drupal_render($term['weight']);
- $row[] = drupal_render($term['edit']);
- $row = array('data' => $row);
- $rows[$key] = $row;
- }
- }
-
- // Add necessary classes to rows.
- $row_position = 0;
- foreach ($rows as $key => $row) {
- $rows[$key]['class'] = array();
- if (isset($form['#parent_fields'])) {
- $rows[$key]['class'][] = 'draggable';
- }
-
- // Add classes that mark which terms belong to previous and next pages.
- if ($row_position < $back_step || $row_position >= $page_entries - $forward_step) {
- $rows[$key]['class'][] = 'taxonomy-term-preview';
- }
-
- if ($row_position !== 0 && $row_position !== count($rows) - 1) {
- if ($row_position == $back_step - 1 || $row_position == $page_entries - $forward_step - 1) {
- $rows[$key]['class'][] = 'taxonomy-term-divider-top';
- }
- elseif ($row_position == $back_step || $row_position == $page_entries - $forward_step) {
- $rows[$key]['class'][] = 'taxonomy-term-divider-bottom';
- }
- }
-
- // Add an error class if this row contains a form error.
- foreach ($errors as $error_key => $error) {
- if (strpos($error_key, $key) === 0) {
- $rows[$key]['class'][] = 'error';
- }
- }
- $row_position++;
- }
-
- if (empty($rows)) {
- $rows[] = array(array('data' => $form['#empty_text'], 'colspan' => '3'));
- }
-
- $header = array(t('Name'), t('Weight'), t('Operations'));
- $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'taxonomy')));
- $output .= drupal_render_children($form);
- $output .= theme('pager');
-
- return $output;
-}
-
-/**
- * Form function for the term edit form.
- *
- * @ingroup forms
- * @see taxonomy_form_term_submit()
- */
-function taxonomy_form_term($form, &$form_state, $edit = array(), $vocabulary = NULL) {
- // During initial form build, add the term entity to the form state for use
- // during form building and processing. During a rebuild, use what is in the
- // form state.
- if (!isset($form_state['term'])) {
- $term = is_object($edit) ? $edit : (object) $edit;
- if (!isset($vocabulary) && isset($term->vid)) {
- $vocabulary = taxonomy_vocabulary_load($term->vid);
- }
- $defaults = array(
- 'name' => '',
- 'description' => '',
- 'format' => NULL,
- 'vocabulary_machine_name' => isset($vocabulary) ? $vocabulary->machine_name : NULL,
- 'tid' => NULL,
- 'weight' => 0,
- );
- foreach ($defaults as $key => $value) {
- if (!isset($term->$key)) {
- $term->$key = $value;
- }
- }
- $form_state['term'] = $term;
- }
- else {
- $term = $form_state['term'];
- if (!isset($vocabulary) && isset($term->vid)) {
- $vocabulary = taxonomy_vocabulary_load($term->vid);
- }
- }
-
- $parent = array_keys(taxonomy_get_parents($term->tid));
- $form['#term'] = (array) $term;
- $form['#term']['parent'] = $parent;
- $form['#vocabulary'] = $vocabulary;
-
- // Check for confirmation forms.
- if (isset($form_state['confirm_delete'])) {
- return array_merge($form, taxonomy_term_confirm_delete($form, $form_state, $term->tid));
- }
-
- $form['name'] = array(
- '#type' => 'textfield',
- '#title' => t('Name'),
- '#default_value' => $term->name,
- '#maxlength' => 255,
- '#required' => TRUE,
- '#weight' => -5,
- );
- $form['description'] = array(
- '#type' => 'text_format',
- '#title' => t('Description'),
- '#default_value' => $term->description,
- '#format' => $term->format,
- '#weight' => 0,
- );
-
- $form['vocabulary_machine_name'] = array(
- '#type' => 'value',
- '#value' => isset($term->vocabulary_machine_name) ? $term->vocabulary_machine_name : $vocabulary->name,
- );
-
- $langcode = entity_language('taxonomy_term', $term);
- field_attach_form('taxonomy_term', $term, $form, $form_state, $langcode);
-
- $form['relations'] = array(
- '#type' => 'fieldset',
- '#title' => t('Relations'),
- '#collapsible' => TRUE,
- '#collapsed' => $vocabulary->hierarchy < 2,
- '#weight' => 10,
- );
-
- // taxonomy_get_tree and taxonomy_get_parents may contain large numbers of
- // items so we check for taxonomy_override_selector before loading the
- // full vocabulary. Contrib modules can then intercept before
- // hook_form_alter to provide scalable alternatives.
- if (!variable_get('taxonomy_override_selector', FALSE)) {
- $parent = array_keys(taxonomy_get_parents($term->tid));
- $children = taxonomy_get_tree($vocabulary->vid, $term->tid);
-
- // A term can't be the child of itself, nor of its children.
- foreach ($children as $child) {
- $exclude[] = $child->tid;
- }
- $exclude[] = $term->tid;
-
- $tree = taxonomy_get_tree($vocabulary->vid);
- $options = array('<' . t('root') . '>');
- if (empty($parent)) {
- $parent = array(0);
- }
- foreach ($tree as $item) {
- if (!in_array($item->tid, $exclude)) {
- $options[$item->tid] = str_repeat('-', $item->depth) . $item->name;
- }
- }
- $form['relations']['parent'] = array(
- '#type' => 'select',
- '#title' => t('Parent terms'),
- '#options' => $options,
- '#default_value' => $parent,
- '#multiple' => TRUE,
- );
-
- }
- $form['relations']['weight'] = array(
- '#type' => 'textfield',
- '#title' => t('Weight'),
- '#size' => 6,
- '#default_value' => $term->weight,
- '#description' => t('Terms are displayed in ascending order by weight.'),
- '#required' => TRUE,
- );
- $form['vid'] = array(
- '#type' => 'value',
- '#value' => $vocabulary->vid,
- );
- $form['tid'] = array(
- '#type' => 'value',
- '#value' => $term->tid,
- );
-
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save'),
- '#weight' => 5,
- );
-
- if ($term->tid) {
- $form['actions']['delete'] = array(
- '#type' => 'submit',
- '#value' => t('Delete'),
- '#access' => user_access("delete terms in $vocabulary->vid") || user_access('administer taxonomy'),
- '#weight' => 10,
- );
- }
- else {
- $form_state['redirect'] = $_GET['q'];
- }
-
- return $form;
-}
-
-/**
- * Validation handler for the term form.
- *
- * @see taxonomy_form_term()
- */
-function taxonomy_form_term_validate($form, &$form_state) {
- entity_form_field_validate('taxonomy_term', $form, $form_state);
-
- // Ensure numeric values.
- if (isset($form_state['values']['weight']) && !is_numeric($form_state['values']['weight'])) {
- form_set_error('weight', t('Weight value must be numeric.'));
- }
-}
-
-/**
- * Submit handler to insert or update a term.
- *
- * @see taxonomy_form_term()
- */
-function taxonomy_form_term_submit($form, &$form_state) {
- if ($form_state['triggering_element']['#value'] == t('Delete')) {
- // Execute the term deletion.
- if ($form_state['values']['delete'] === TRUE) {
- return taxonomy_term_confirm_delete_submit($form, $form_state);
- }
- // Rebuild the form to confirm term deletion.
- $form_state['rebuild'] = TRUE;
- $form_state['confirm_delete'] = TRUE;
- return;
- }
-
- $term = taxonomy_form_term_submit_build_taxonomy_term($form, $form_state);
-
- $status = taxonomy_term_save($term);
- switch ($status) {
- case SAVED_NEW:
- drupal_set_message(t('Created new term %term.', array('%term' => $term->name)));
- watchdog('taxonomy', 'Created new term %term.', array('%term' => $term->name), WATCHDOG_NOTICE, l(t('edit'), 'taxonomy/term/' . $term->tid . '/edit'));
- break;
- case SAVED_UPDATED:
- drupal_set_message(t('Updated term %term.', array('%term' => $term->name)));
- watchdog('taxonomy', 'Updated term %term.', array('%term' => $term->name), WATCHDOG_NOTICE, l(t('edit'), 'taxonomy/term/' . $term->tid . '/edit'));
- // Clear the page and block caches to avoid stale data.
- cache_clear_all();
- break;
- }
-
- $current_parent_count = count($form_state['values']['parent']);
- $previous_parent_count = count($form['#term']['parent']);
- // Root doesn't count if it's the only parent.
- if ($current_parent_count == 1 && isset($form_state['values']['parent'][0])) {
- $current_parent_count = 0;
- $form_state['values']['parent'] = array();
- }
-
- // If the number of parents has been reduced to one or none, do a check on the
- // parents of every term in the vocabulary value.
- if ($current_parent_count < $previous_parent_count && $current_parent_count < 2) {
- taxonomy_check_vocabulary_hierarchy($form['#vocabulary'], $form_state['values']);
- }
- // If we've increased the number of parents and this is a single or flat
- // hierarchy, update the vocabulary immediately.
- elseif ($current_parent_count > $previous_parent_count && $form['#vocabulary']->hierarchy < 2) {
- $form['#vocabulary']->hierarchy = $current_parent_count == 1 ? 1 : 2;
- taxonomy_vocabulary_save($form['#vocabulary']);
- }
-
- $form_state['values']['tid'] = $term->tid;
- $form_state['tid'] = $term->tid;
-}
-
-/**
- * Updates the form state's term entity by processing this submission's values.
- */
-function taxonomy_form_term_submit_build_taxonomy_term($form, &$form_state) {
- $term = $form_state['term'];
- entity_form_submit_build_entity('taxonomy_term', $term, $form, $form_state);
-
- // Convert text_format field into values expected by taxonomy_term_save().
- $description = $form_state['values']['description'];
- $term->description = $description['value'];
- $term->format = $description['format'];
- return $term;
-}
-
-/**
- * Form builder for the term delete form.
- *
- * @ingroup forms
- * @see taxonomy_term_confirm_delete_submit()
- */
-function taxonomy_term_confirm_delete($form, &$form_state, $tid) {
- $term = taxonomy_term_load($tid);
-
- // Always provide entity id in the same form key as in the entity edit form.
- $form['tid'] = array('#type' => 'value', '#value' => $tid);
-
- $form['#term'] = $term;
- $form['type'] = array('#type' => 'value', '#value' => 'term');
- $form['name'] = array('#type' => 'value', '#value' => $term->name);
- $form['vocabulary_machine_name'] = array('#type' => 'value', '#value' => $term->vocabulary_machine_name);
- $form['delete'] = array('#type' => 'value', '#value' => TRUE);
- return confirm_form($form,
- t('Are you sure you want to delete the term %title?',
- array('%title' => $term->name)),
- 'admin/structure/taxonomy',
- t('Deleting a term will delete all its children if there are any. This action cannot be undone.'),
- t('Delete'),
- t('Cancel'));
-}
-
-/**
- * Submit handler to delete a term after confirmation.
- *
- * @see taxonomy_term_confirm_delete()
- */
-function taxonomy_term_confirm_delete_submit($form, &$form_state) {
- taxonomy_term_delete($form_state['values']['tid']);
- taxonomy_check_vocabulary_hierarchy($form['#vocabulary'], $form_state['values']);
- drupal_set_message(t('Deleted term %name.', array('%name' => $form_state['values']['name'])));
- watchdog('taxonomy', 'Deleted term %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
- $form_state['redirect'] = 'admin/structure/taxonomy';
- cache_clear_all();
- return;
-}
-
-/**
- * Form builder for the vocabulary delete confirmation form.
- *
- * @ingroup forms
- * @see taxonomy_vocabulary_confirm_delete_submit()
- */
-function taxonomy_vocabulary_confirm_delete($form, &$form_state, $vid) {
- $vocabulary = taxonomy_vocabulary_load($vid);
-
- // Always provide entity id in the same form key as in the entity edit form.
- $form['vid'] = array('#type' => 'value', '#value' => $vid);
-
- $form['#vocabulary'] = $vocabulary;
- $form['#id'] = 'taxonomy_vocabulary_confirm_delete';
- $form['type'] = array('#type' => 'value', '#value' => 'vocabulary');
- $form['name'] = array('#type' => 'value', '#value' => $vocabulary->name);
- $form['#submit'] = array('taxonomy_vocabulary_confirm_delete_submit');
- return confirm_form($form,
- t('Are you sure you want to delete the vocabulary %title?',
- array('%title' => $vocabulary->name)),
- 'admin/structure/taxonomy',
- t('Deleting a vocabulary will delete all the terms in it. This action cannot be undone.'),
- t('Delete'),
- t('Cancel'));
-}
-
-/**
- * Submit handler to delete a vocabulary after confirmation.
- *
- * @see taxonomy_vocabulary_confirm_delete()
- */
-function taxonomy_vocabulary_confirm_delete_submit($form, &$form_state) {
- $status = taxonomy_vocabulary_delete($form_state['values']['vid']);
- drupal_set_message(t('Deleted vocabulary %name.', array('%name' => $form_state['values']['name'])));
- watchdog('taxonomy', 'Deleted vocabulary %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
- $form_state['redirect'] = 'admin/structure/taxonomy';
- cache_clear_all();
- return;
-}
-
-/**
- * Form builder to confirm resetting a vocabulary to alphabetical order.
- *
- * @ingroup forms
- * @see taxonomy_vocabulary_confirm_reset_alphabetical_submit()
- */
-function taxonomy_vocabulary_confirm_reset_alphabetical($form, &$form_state, $vid) {
- $vocabulary = taxonomy_vocabulary_load($vid);
-
- $form['type'] = array('#type' => 'value', '#value' => 'vocabulary');
- $form['vid'] = array('#type' => 'value', '#value' => $vid);
- $form['machine_name'] = array('#type' => 'value', '#value' => $vocabulary->machine_name);
- $form['name'] = array('#type' => 'value', '#value' => $vocabulary->name);
- $form['reset_alphabetical'] = array('#type' => 'value', '#value' => TRUE);
- return confirm_form($form,
- t('Are you sure you want to reset the vocabulary %title to alphabetical order?',
- array('%title' => $vocabulary->name)),
- 'admin/structure/taxonomy/' . $vocabulary->machine_name,
- t('Resetting a vocabulary will discard all custom ordering and sort items alphabetically.'),
- t('Reset to alphabetical'),
- t('Cancel'));
-}
-
-/**
- * Submit handler to reset a vocabulary to alphabetical order after confirmation.
- *
- * @see taxonomy_vocabulary_confirm_reset_alphabetical()
- */
-function taxonomy_vocabulary_confirm_reset_alphabetical_submit($form, &$form_state) {
- db_update('taxonomy_term_data')
- ->fields(array('weight' => 0))
- ->condition('vid', $form_state['values']['vid'])
- ->execute();
- drupal_set_message(t('Reset vocabulary %name to alphabetical order.', array('%name' => $form_state['values']['name'])));
- watchdog('taxonomy', 'Reset vocabulary %name to alphabetical order.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
- $form_state['redirect'] = 'admin/structure/taxonomy/' . $form_state['values']['machine_name'];
-}
diff --git a/modules/taxonomy/taxonomy.api.php b/modules/taxonomy/taxonomy.api.php
deleted file mode 100644
index f3c5022..0000000
--- a/modules/taxonomy/taxonomy.api.php
+++ /dev/null
@@ -1,231 +0,0 @@
-fields('m', array('vid', 'foo'))
- ->condition('m.vid', array_keys($vocabularies), 'IN')
- ->execute();
- foreach ($result as $record) {
- $vocabularies[$record->vid]->foo = $record->foo;
- }
-}
-
-/**
- * Act on taxonomy vocabularies before they are saved.
- *
- * Modules implementing this hook can act on the vocabulary object before it is
- * inserted or updated.
- *
- * @param $vocabulary
- * A taxonomy vocabulary object.
- */
-function hook_taxonomy_vocabulary_presave($vocabulary) {
- $vocabulary->foo = 'bar';
-}
-
-/**
- * Act on taxonomy vocabularies when inserted.
- *
- * Modules implementing this hook can act on the vocabulary object when saved
- * to the database.
- *
- * @param $vocabulary
- * A taxonomy vocabulary object.
- */
-function hook_taxonomy_vocabulary_insert($vocabulary) {
- if ($vocabulary->machine_name == 'my_vocabulary') {
- $vocabulary->weight = 100;
- }
-}
-
-/**
- * Act on taxonomy vocabularies when updated.
- *
- * Modules implementing this hook can act on the vocabulary object when updated.
- *
- * @param $vocabulary
- * A taxonomy vocabulary object.
- */
-function hook_taxonomy_vocabulary_update($vocabulary) {
- db_update('mytable')
- ->fields(array('foo' => $vocabulary->foo))
- ->condition('vid', $vocabulary->vid)
- ->execute();
-}
-
-/**
- * Respond to the deletion of taxonomy vocabularies.
- *
- * Modules implementing this hook can respond to the deletion of taxonomy
- * vocabularies from the database.
- *
- * @param $vocabulary
- * A taxonomy vocabulary object.
- */
-function hook_taxonomy_vocabulary_delete($vocabulary) {
- db_delete('mytable')
- ->condition('vid', $vocabulary->vid)
- ->execute();
-}
-
-/**
- * Act on taxonomy terms when loaded.
- *
- * Modules implementing this hook can act on the term objects returned by
- * taxonomy_term_load_multiple().
- *
- * For performance reasons, information to be added to term objects should be
- * loaded in a single query for all terms where possible.
- *
- * Since terms are stored and retrieved from cache during a page request, avoid
- * altering properties provided by the {taxonomy_term_data} table, since this
- * may affect the way results are loaded from cache in subsequent calls.
- *
- * @param $terms
- * An array of term objects, indexed by tid.
- */
-function hook_taxonomy_term_load($terms) {
- $result = db_select('mytable', 'm')
- ->fields('m', array('tid', 'foo'))
- ->condition('m.tid', array_keys($terms), 'IN')
- ->execute();
- foreach ($result as $record) {
- $terms[$record->tid]->foo = $record->foo;
- }
-}
-
-/**
- * Act on taxonomy terms before they are saved.
- *
- * Modules implementing this hook can act on the term object before it is
- * inserted or updated.
- *
- * @param $term
- * A term object.
- */
-function hook_taxonomy_term_presave($term) {
- $term->foo = 'bar';
-}
-
-/**
- * Act on taxonomy terms when inserted.
- *
- * Modules implementing this hook can act on the term object when saved to
- * the database.
- *
- * @param $term
- * A taxonomy term object.
- */
-function hook_taxonomy_term_insert($term) {
- db_insert('mytable')
- ->fields(array(
- 'tid' => $term->tid,
- 'foo' => $term->foo,
- ))
- ->execute();
-}
-
-/**
- * Act on taxonomy terms when updated.
- *
- * Modules implementing this hook can act on the term object when updated.
- *
- * @param $term
- * A taxonomy term object.
- */
-function hook_taxonomy_term_update($term) {
- db_update('mytable')
- ->fields(array('foo' => $term->foo))
- ->condition('tid', $term->tid)
- ->execute();
-}
-
-/**
- * Respond to the deletion of taxonomy terms.
- *
- * Modules implementing this hook can respond to the deletion of taxonomy
- * terms from the database.
- *
- * @param $term
- * A taxonomy term object.
- */
-function hook_taxonomy_term_delete($term) {
- db_delete('mytable')
- ->condition('tid', $term->tid)
- ->execute();
-}
-
-/**
- * Act on a taxonomy term that is being assembled before rendering.
- *
- * The module may add elements to $term->content prior to rendering. The
- * structure of $term->content is a renderable array as expected by
- * drupal_render().
- *
- * @param $term
- * The term that is being assembled for rendering.
- * @param $view_mode
- * The $view_mode parameter from taxonomy_term_view().
- * @param $langcode
- * The language code used for rendering.
- *
- * @see hook_entity_view()
- */
-function hook_taxonomy_term_view($term, $view_mode, $langcode) {
- $term->content['my_additional_field'] = array(
- '#markup' => $additional_field,
- '#weight' => 10,
- '#theme' => 'mymodule_my_additional_field',
- );
-}
-
-/**
- * Alter the results of taxonomy_term_view().
- *
- * This hook is called after the content has been assembled in a structured
- * array and may be used for doing processing which requires that the complete
- * taxonomy term content structure has been built.
- *
- * If the module wishes to act on the rendered HTML of the term rather than the
- * structured content array, it may use this hook to add a #post_render
- * callback. Alternatively, it could also implement
- * hook_preprocess_taxonomy_term(). See drupal_render() and theme()
- * documentation respectively for details.
- *
- * @param $build
- * A renderable array representing the term.
- *
- * @see hook_entity_view_alter()
- */
-function hook_taxonomy_term_view_alter(&$build) {
- if ($build['#view_mode'] == 'full' && isset($build['an_additional_field'])) {
- // Change its weight.
- $build['an_additional_field']['#weight'] = -10;
- }
-
- // Add a #post_render callback to act on the rendered HTML of the term.
- $build['#post_render'][] = 'my_module_node_post_render';
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/taxonomy/taxonomy.css b/modules/taxonomy/taxonomy.css
deleted file mode 100644
index 36cd641..0000000
--- a/modules/taxonomy/taxonomy.css
+++ /dev/null
@@ -1,13 +0,0 @@
-
-tr.taxonomy-term-preview {
- background-color: #EEE;
-}
-tr.taxonomy-term-divider-top {
- border-bottom: none;
-}
-tr.taxonomy-term-divider-bottom {
- border-top: 1px dotted #CCC;
-}
-.taxonomy-term-description {
- margin: 5px 0 20px;
-}
diff --git a/modules/taxonomy/taxonomy.info b/modules/taxonomy/taxonomy.info
deleted file mode 100644
index 44d4ebc..0000000
--- a/modules/taxonomy/taxonomy.info
+++ /dev/null
@@ -1,9 +0,0 @@
-name = Taxonomy
-description = Enables the categorization of content.
-package = Core
-version = VERSION
-core = 7.x
-dependencies[] = options
-files[] = taxonomy.module
-files[] = taxonomy.test
-configure = admin/structure/taxonomy
diff --git a/modules/taxonomy/taxonomy.install b/modules/taxonomy/taxonomy.install
deleted file mode 100644
index ebd0084..0000000
--- a/modules/taxonomy/taxonomy.install
+++ /dev/null
@@ -1,938 +0,0 @@
-fetchCol();
- foreach ($vocabularies as $vocabulary) {
- field_attach_delete_bundle('taxonomy_term', $vocabulary);
- }
-}
-
-/**
- * Implements hook_schema().
- */
-function taxonomy_schema() {
- $schema['taxonomy_term_data'] = array(
- 'description' => 'Stores term information.',
- 'fields' => array(
- 'tid' => array(
- 'type' => 'serial',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Primary Key: Unique term ID.',
- ),
- 'vid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'The {taxonomy_vocabulary}.vid of the vocabulary to which the term is assigned.',
- ),
- 'name' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The term name.',
- 'translatable' => TRUE,
- ),
- 'description' => array(
- 'type' => 'text',
- 'not null' => FALSE,
- 'size' => 'big',
- 'description' => 'A description of the term.',
- 'translatable' => TRUE,
- ),
- 'format' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => FALSE,
- 'description' => 'The {filter_format}.format of the description.',
- ),
- 'weight' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'The weight of this term in relation to other terms.',
- ),
- ),
- 'primary key' => array('tid'),
- 'foreign keys' => array(
- 'vocabulary' => array(
- 'table' => 'taxonomy_vocabulary',
- 'columns' => array('vid' => 'vid'),
- ),
- ),
- 'indexes' => array(
- 'taxonomy_tree' => array('vid', 'weight', 'name'),
- 'vid_name' => array('vid', 'name'),
- 'name' => array('name'),
- ),
- );
-
- $schema['taxonomy_term_hierarchy'] = array(
- 'description' => 'Stores the hierarchical relationship between terms.',
- 'fields' => array(
- 'tid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Primary Key: The {taxonomy_term_data}.tid of the term.',
- ),
- 'parent' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => "Primary Key: The {taxonomy_term_data}.tid of the term's parent. 0 indicates no parent.",
- ),
- ),
- 'indexes' => array(
- 'parent' => array('parent'),
- ),
- 'foreign keys' => array(
- 'taxonomy_term_data' => array(
- 'table' => 'taxonomy_term_data',
- 'columns' => array('tid' => 'tid'),
- ),
- ),
- 'primary key' => array('tid', 'parent'),
- );
-
- $schema['taxonomy_vocabulary'] = array(
- 'description' => 'Stores vocabulary information.',
- 'fields' => array(
- 'vid' => array(
- 'type' => 'serial',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Primary Key: Unique vocabulary ID.',
- ),
- 'name' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Name of the vocabulary.',
- 'translatable' => TRUE,
- ),
- 'machine_name' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The vocabulary machine name.',
- ),
- 'description' => array(
- 'type' => 'text',
- 'not null' => FALSE,
- 'size' => 'big',
- 'description' => 'Description of the vocabulary.',
- 'translatable' => TRUE,
- ),
- 'hierarchy' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'size' => 'tiny',
- 'description' => 'The type of hierarchy allowed within the vocabulary. (0 = disabled, 1 = single, 2 = multiple)',
- ),
- 'module' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The module which created the vocabulary.',
- ),
- 'weight' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'The weight of this vocabulary in relation to other vocabularies.',
- ),
- ),
- 'primary key' => array('vid'),
- 'indexes' => array(
- 'list' => array('weight', 'name'),
- ),
- 'unique keys' => array(
- 'machine_name' => array('machine_name'),
- ),
- );
-
- $schema['taxonomy_index'] = array(
- 'description' => 'Maintains denormalized information about node/term relationships.',
- 'fields' => array(
- 'nid' => array(
- 'description' => 'The {node}.nid this record tracks.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'tid' => array(
- 'description' => 'The term ID.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'sticky' => array(
- 'description' => 'Boolean indicating whether the node is sticky.',
- 'type' => 'int',
- 'not null' => FALSE,
- 'default' => 0,
- 'size' => 'tiny',
- ),
- 'created' => array(
- 'description' => 'The Unix timestamp when the node was created.',
- 'type' => 'int',
- 'not null' => TRUE,
- 'default'=> 0,
- ),
- ),
- 'indexes' => array(
- 'term_node' => array('tid', 'sticky', 'created'),
- 'nid' => array('nid'),
- ),
- 'foreign keys' => array(
- 'tracked_node' => array(
- 'table' => 'node',
- 'columns' => array('nid' => 'nid'),
- ),
- 'term' => array(
- 'table' => 'taxonomy_term_data',
- 'columns' => array('tid' => 'tid'),
- ),
- ),
- );
-
- return $schema;
-}
-
-/**
- * Implements hook_field_schema().
- */
-function taxonomy_field_schema($field) {
- return array(
- 'columns' => array(
- 'tid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => FALSE,
- ),
- ),
- 'indexes' => array(
- 'tid' => array('tid'),
- ),
- 'foreign keys' => array(
- 'tid' => array(
- 'table' => 'taxonomy_term_data',
- 'columns' => array('tid' => 'tid'),
- ),
- ),
- );
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function taxonomy_update_dependencies() {
- // taxonomy_update_7004() migrates taxonomy term data to fields and therefore
- // must run after all Field modules have been enabled, which happens in
- // system_update_7027().
- $dependencies['taxonomy'][7004] = array(
- 'system' => 7027,
- );
-
- return $dependencies;
-}
-
-/**
- * Utility function: get the list of vocabularies directly from the database.
- *
- * This function is valid for a database schema version 7002.
- *
- * @ingroup update_api
- */
-function _update_7002_taxonomy_get_vocabularies() {
- return db_query('SELECT v.* FROM {taxonomy_vocabulary} v ORDER BY v.weight, v.name')->fetchAllAssoc('vid', PDO::FETCH_OBJ);
-}
-
-/**
- * Rename taxonomy tables.
- */
-function taxonomy_update_7001() {
- db_rename_table('term_data', 'taxonomy_term_data');
- db_rename_table('term_hierarchy', 'taxonomy_term_hierarchy');
- db_rename_table('term_node', 'taxonomy_term_node');
- db_rename_table('term_relation', 'taxonomy_term_relation');
- db_rename_table('term_synonym', 'taxonomy_term_synonym');
- db_rename_table('vocabulary', 'taxonomy_vocabulary');
- db_rename_table('vocabulary_node_types', 'taxonomy_vocabulary_node_type');
-}
-
-/**
- * Add {vocabulary}.machine_name column.
- */
-function taxonomy_update_7002() {
- $field = array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'The vocabulary machine name.',
- );
-
- db_add_field('taxonomy_vocabulary', 'machine_name', $field);
-
- // Do a direct query here, rather than calling taxonomy_get_vocabularies(),
- // in case Taxonomy module is disabled.
- $vids = db_query('SELECT vid FROM {taxonomy_vocabulary}')->fetchCol();
- foreach ($vids as $vid) {
- $machine_name = 'vocabulary_' . $vid;
- db_update('taxonomy_vocabulary')
- ->fields(array('machine_name' => $machine_name))
- ->condition('vid', $vid)
- ->execute();
- }
-
- // The machine_name unique key can only be added after we ensure the
- // machine_name column contains unique values.
- db_add_unique_key('taxonomy_vocabulary', 'machine_name', array('machine_name'));
-}
-
-/**
- * Remove the related terms setting from vocabularies.
- *
- * This setting has not been used since Drupal 6. The {taxonomy_relations} table
- * itself is retained to allow for data to be upgraded.
- */
-function taxonomy_update_7003() {
- db_drop_field('taxonomy_vocabulary', 'relations');
-}
-
-/**
- * Move taxonomy vocabulary associations for nodes to fields and field instances.
- */
-function taxonomy_update_7004() {
- $taxonomy_index = array(
- 'description' => 'Maintains denormalized information about node/term relationships.',
- 'fields' => array(
- 'nid' => array(
- 'description' => 'The {node}.nid this record tracks.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'tid' => array(
- 'description' => 'The term ID.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'sticky' => array(
- 'description' => 'Boolean indicating whether the node is sticky.',
- 'type' => 'int',
- 'not null' => FALSE,
- 'default' => 0,
- 'size' => 'tiny',
- ),
- 'created' => array(
- 'description' => 'The Unix timestamp when the node was created.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default'=> 0,
- ),
- ),
- 'indexes' => array(
- 'term_node' => array('tid', 'sticky', 'created'),
- 'nid' => array('nid'),
- ),
- 'foreign keys' => array(
- 'tracked_node' => array(
- 'table' => 'node',
- 'columns' => array('nid' => 'nid'),
- ),
- 'term' => array(
- 'table' => 'taxonomy_term_data',
- 'columns' => array('tid' => 'tid'),
- ),
- ),
- );
- db_create_table('taxonomy_index', $taxonomy_index);
-
- // Use an inline version of Drupal 6 taxonomy_get_vocabularies() here since
- // we can no longer rely on $vocabulary->nodes from the API function.
- $result = db_query('SELECT v.*, n.type FROM {taxonomy_vocabulary} v LEFT JOIN {taxonomy_vocabulary_node_type} n ON v.vid = n.vid ORDER BY v.weight, v.name');
- $vocabularies = array();
- foreach ($result as $record) {
- // If no node types are associated with a vocabulary, the LEFT JOIN will
- // return a NULL value for type.
- if (isset($record->type)) {
- $node_types[$record->vid][$record->type] = $record->type;
- unset($record->type);
- $record->nodes = $node_types[$record->vid];
- }
- elseif (!isset($record->nodes)) {
- $record->nodes = array();
- }
- $vocabularies[$record->vid] = $record;
- }
-
- foreach ($vocabularies as $vocabulary) {
- $field_name = 'taxonomy_' . $vocabulary->machine_name;
- $field = array(
- 'field_name' => $field_name,
- 'module' => 'taxonomy',
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => $vocabulary->multiple || $vocabulary->tags ? FIELD_CARDINALITY_UNLIMITED : 1,
- 'settings' => array(
- 'required' => $vocabulary->required ? TRUE : FALSE,
- 'allowed_values' => array(
- array(
- 'vocabulary' => $vocabulary->machine_name,
- 'parent' => 0,
- ),
- ),
- ),
- );
- _update_7000_field_create_field($field);
-
- foreach ($vocabulary->nodes as $bundle) {
- $instance = array(
- 'label' => $vocabulary->name,
- 'field_name' => $field_name,
- 'bundle' => $bundle,
- 'entity_type' => 'node',
- 'settings' => array(),
- 'description' => $vocabulary->help,
- 'required' => $vocabulary->required,
- 'widget' => array(),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- 'weight' => 10,
- ),
- 'teaser' => array(
- 'type' => 'taxonomy_term_reference_link',
- 'weight' => 10,
- ),
- ),
- );
- if ($vocabulary->tags) {
- $instance['widget'] = array(
- 'type' => 'taxonomy_autocomplete',
- 'module' => 'taxonomy',
- 'settings' => array(
- 'size' => 60,
- 'autocomplete_path' => 'taxonomy/autocomplete',
- ),
- );
- }
- else {
- $instance['widget'] = array(
- 'type' => 'select',
- 'module' => 'options',
- 'settings' => array(),
- );
- }
- _update_7000_field_create_instance($field, $instance);
- }
- }
-
- // Some contrib projects stored term node associations without regard for the
- // selections in the taxonomy_vocabulary_node_types table, or have more terms
- // for a single node than the vocabulary allowed. We construct the
- // taxonomyextra field to store all the extra stuff.
-
- // Allowed values for this extra vocabs field is every vocabulary.
- $allowed_values = array();
- foreach (_update_7002_taxonomy_get_vocabularies() as $vocabulary) {
- $allowed_values[] = array(
- 'vocabulary' => $vocabulary->machine_name,
- 'parent' => 0,
- );
- }
-
- $field_name = 'taxonomyextra';
- $field = array(
- 'field_name' => $field_name,
- 'module' => 'taxonomy',
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'settings' => array(
- 'required' => FALSE,
- 'allowed_values' => $allowed_values,
- ),
- );
- _update_7000_field_create_field($field);
-
- foreach (_update_7000_node_get_types() as $bundle) {
- $instance = array(
- 'label' => 'Taxonomy upgrade extras',
- 'field_name' => $field_name,
- 'entity_type' => 'node',
- 'bundle' => $bundle->type,
- 'settings' => array(),
- 'description' => 'Debris left over after upgrade from Drupal 6',
- 'widget' => array(
- 'type' => 'taxonomy_autocomplete',
- 'module' => 'taxonomy',
- 'settings' => array(),
- ),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- 'weight' => 10,
- ),
- 'teaser' => array(
- 'type' => 'taxonomy_term_reference_link',
- 'weight' => 10,
- ),
- ),
- );
- _update_7000_field_create_instance($field, $instance);
- }
-
- $fields = array('help', 'multiple', 'required', 'tags');
- foreach ($fields as $field) {
- db_drop_field('taxonomy_vocabulary', $field);
- }
-}
-
-/**
- * Migrate {taxonomy_term_node} table to field storage.
- *
- * @todo: This function can possibly be made much faster by wrapping a
- * transaction around all the inserts.
- */
-function taxonomy_update_7005(&$sandbox) {
- // $sandbox contents:
- // - total: The total number of term_node relationships to migrate.
- // - count: The number of term_node relationships that have been
- // migrated so far.
- // - last: The db_query_range() offset to use when querying
- // term_node; this field is incremented in quantities of $batch
- // (1000) but at the end of each call to this function, last and
- // count are the same.
- // - vocabularies: An associative array mapping vocabulary id and node
- // type to field name. If a voc id/node type pair does not appear
- // in this array but a term_node relationship exists mapping a
- // term in voc id to node of that type, the relationship is
- // assigned to the taxonomymyextra field which allows terms of all
- // vocabularies.
- // - cursor[values], cursor[deltas]: The contents of $values and
- // $deltas at the end of the previous call to this function. These
- // need to be preserved across calls because a single batch of
- // 1000 rows from term_node may end in the middle of the terms for
- // a single node revision.
- //
- // $values is the array of values about to be/most recently inserted
- // into the SQL data table for the taxonomy_term_reference
- // field. Before $values is constructed for each record, the
- // $values from the previous insert is checked to see if the two
- // records are for the same node revision id; this enables knowing
- // when to reset the delta counters which are incremented across all
- // terms for a single field on a single revision, but reset for each
- // new field and revision.
- //
- // $deltas is an associative array mapping field name to the number
- // of term references stored so far for the current revision, which
- // provides the delta value for each term reference data insert. The
- // deltas are reset for each new revision.
-
- $conditions = array(
- 'type' => 'taxonomy_term_reference',
- 'deleted' => 0,
- );
- $field_info = _update_7000_field_read_fields($conditions, 'field_name');
-
- // This is a multi-pass update. On the first call we need to initialize some
- // variables.
- if (!isset($sandbox['total'])) {
- $sandbox['last'] = 0;
- $sandbox['count'] = 0;
-
- // Run the same joins as the query that is used later to retrieve the
- // term_node data, this ensures that bad records in that table - for
- // tids which aren't in taxonomy_term_data or nids which aren't in {node}
- // are not included in the count.
- $sandbox['total'] = db_query('SELECT COUNT(*) FROM {taxonomy_term_data} td INNER JOIN {taxonomy_term_node} tn ON td.tid = tn.tid INNER JOIN {node} n ON tn.nid = n.nid LEFT JOIN {node} n2 ON tn.vid = n2.vid')->fetchField();
-
- // Use an inline version of Drupal 6 taxonomy_get_vocabularies() here since
- // we can no longer rely on $vocabulary->nodes from the API function.
- $result = db_query('SELECT v.vid, v.machine_name, n.type FROM {taxonomy_vocabulary} v INNER JOIN {taxonomy_vocabulary_node_type} n ON v.vid = n.vid');
- $vocabularies = array();
- foreach ($result as $record) {
-
- // If no node types are associated with a vocabulary, the LEFT JOIN will
- // return a NULL value for type.
- if (isset($record->type)) {
- $vocabularies[$record->vid][$record->type] = 'taxonomy_'. $record->machine_name;
- }
- }
-
- if (!empty($vocabularies)) {
- $sandbox['vocabularies'] = $vocabularies;
- }
-
- db_create_table('taxonomy_update_7005', array(
- 'description' => 'Stores temporary data for taxonomy_update_7005.',
- 'fields' => array(
- 'n' => array(
- 'description' => 'Preserve order.',
- 'type' => 'serial',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- ),
- 'vocab_id' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'tid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- ),
- 'nid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- ),
- 'vid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => FALSE,
- 'default' => NULL,
- ),
- 'type' => array(
- 'type' => 'varchar',
- 'length' => 32,
- 'not null' => TRUE,
- 'default' => '',
- ),
- 'created' => array(
- 'type' => 'int',
- 'not null' => FALSE,
- ),
- 'sticky' => array(
- 'type' => 'int',
- 'not null' => FALSE,
- ),
- 'status' => array(
- 'type' => 'int',
- 'not null' => FALSE,
- ),
- 'is_current' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => FALSE,
- ),
- ),
- 'primary key' => array('n'),
- ));
-
- // Query selects all revisions at once and processes them in revision and
- // term weight order.
- $query = db_select('taxonomy_term_data', 'td');
- // We are migrating term-node relationships. If there are none for a
- // term, we do not need the term_data row.
- $query->join('taxonomy_term_node', 'tn', 'td.tid = tn.tid');
- // If a term-node relationship exists for a nid that does not exist, we
- // cannot migrate it as we have no node to relate it to; thus we do not
- // need that row from term_node.
- $query->join('node', 'n', 'tn.nid = n.nid');
- // If the current term-node relationship is for the current revision of
- // the node, this left join will match and is_current will be non-NULL
- // (we also get the current sticky and created in this case). This
- // tells us whether to insert into the current data tables in addition
- // to the revision data tables.
- $query->leftJoin('node', 'n2', 'tn.vid = n2.vid');
- $query->addField('td', 'vid', 'vocab_id');
- $query->addField('td', 'tid');
- $query->addField('tn', 'nid');
- $query->addField('tn', 'vid');
- $query->addField('n', 'type');
- $query->addField('n2', 'created');
- $query->addField('n2', 'sticky');
- $query->addField('n2', 'status');
- $query->addField('n2', 'nid', 'is_current');
- // This query must return a consistent ordering across multiple calls.
- // We need them ordered by node vid (since we use that to decide when
- // to reset the delta counters) and by term weight so they appear
- // within each node in weight order. However, tn.vid,td.weight is not
- // guaranteed to be unique, so we add tn.tid as an additional sort key
- // because tn.tid,tn.vid is the primary key of the D6 term_node table
- // and so is guaranteed unique. Unfortunately it also happens to be in
- // the wrong order which is less efficient, but c'est la vie.
- $query->orderBy('tn.vid');
- $query->orderBy('td.weight');
- $query->orderBy('tn.tid');
-
- // Work around a bug in the PostgreSQL driver that would result in fatal
- // errors when this subquery is used in the insert query below. See
- // https://drupal.org/node/2057693.
- $fields = &$query->getFields();
- unset($fields['td.weight']);
- unset($fields['tn.tid']);
-
- db_insert('taxonomy_update_7005')
- ->from($query)
- ->execute();
- }
- else {
- // We do each pass in batches of 1000.
- $batch = 1000;
-
- $result = db_query_range('SELECT vocab_id, tid, nid, vid, type, created, sticky, status, is_current FROM {taxonomy_update_7005} ORDER BY n', $sandbox['last'], $batch);
- if (isset($sandbox['cursor'])) {
- $values = $sandbox['cursor']['values'];
- $deltas = $sandbox['cursor']['deltas'];
- }
- else {
- $deltas = array();
- }
- foreach ($result as $record) {
- $sandbox['count'] += 1;
-
- // Use the valid field for this vocabulary and node type or use the
- // overflow vocabulary if there is no valid field.
- $field_name = isset($sandbox['vocabularies'][$record->vocab_id][$record->type]) ? $sandbox['vocabularies'][$record->vocab_id][$record->type] : 'taxonomyextra';
- $field = $field_info[$field_name];
-
- // Start deltas from 0, and increment by one for each term attached to a
- // node.
- if (!isset($deltas[$field_name])) {
- $deltas[$field_name] = 0;
- }
-
- if (isset($values)) {
-
- // If the last inserted revision_id is the same as the current record,
- // use the previous deltas to calculate the next delta.
- if ($record->vid == $values[2]) {
-
- // For limited cardinality fields, the delta must not be allowed to
- // exceed the cardinality during the update. So ensure that the
- // delta about to be inserted is within this limit.
- // @see field_default_validate().
- if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED && ($deltas[$field_name] + 1) > $field['cardinality']) {
-
- // For excess values of a single-term vocabulary, switch over to
- // the overflow field.
- $field_name = 'taxonomyextra';
- $field = $field_info[$field_name];
- if (!isset($deltas[$field_name])) {
- $deltas[$field_name] = 0;
- }
- }
- }
- else {
-
- // When the record is a new revision, empty the deltas array.
- $deltas = array($field_name => 0);
- }
- }
-
- // Table and column found in the field's storage details. During upgrades,
- // it's always SQL.
- $table_name = "field_data_{$field_name}";
- $revision_name = "field_revision_{$field_name}";
- $value_column = $field_name . '_tid';
-
- // Column names and values in field storage are the same for current and
- // revision.
- $columns = array('entity_type', 'entity_id', 'revision_id', 'bundle', 'language', 'delta', $value_column);
- $values = array('node', $record->nid, $record->vid, $record->type, LANGUAGE_NONE, $deltas[$field_name]++, $record->tid);
-
- // Insert rows into the revision table.
- db_insert($revision_name)->fields($columns)->values($values)->execute();
-
- // is_current column is a node ID if this revision is also current.
- if ($record->is_current) {
- db_insert($table_name)->fields($columns)->values($values)->execute();
- // Only insert a record in the taxonomy index if the node is published.
- if ($record->status) {
- // Update the {taxonomy_index} table.
- db_insert('taxonomy_index')
- ->fields(array('nid', 'tid', 'sticky', 'created',))
- ->values(array($record->nid, $record->tid, $record->sticky, $record->created))
- ->execute();
- }
- }
- }
-
- // Store the set of inserted values and the current revision's deltas in the
- // sandbox.
- $sandbox['cursor'] = array(
- 'values' => $values,
- 'deltas' => $deltas,
- );
- $sandbox['last'] += $batch;
- }
-
- if ($sandbox['count'] < $sandbox['total']) {
- $sandbox['#finished'] = FALSE;
- }
- else {
- db_drop_table('taxonomy_vocabulary_node_type');
- db_drop_table('taxonomy_term_node');
-
- // If there are no vocabs, we're done.
- db_drop_table('taxonomy_update_7005');
- $sandbox['#finished'] = TRUE;
-
- // Determine necessity of taxonomyextras field.
- $field = $field_info['taxonomyextra'];
- $revision_name = 'field_revision_' . $field['field_name'];
- $node_types = db_select($revision_name)->distinct()->fields($revision_name, array('bundle'))
- ->execute()->fetchCol();
-
- if (empty($node_types)) {
- // Delete the overflow field if there are no rows in the revision table.
- _update_7000_field_delete_field('taxonomyextra');
- }
- else {
- // Remove instances which are not actually used.
- $bundles = db_query('SELECT bundle FROM {field_config_instance} WHERE field_name = :field_name', array(':field_name' => 'taxonomyextra'))->fetchCol();
- $bundles = array_diff($bundles, $node_types);
- foreach ($bundles as $bundle) {
- _update_7000_field_delete_instance('taxonomyextra', 'node', $bundle);
- }
- }
- }
-}
-
-/**
- * Add {taxonomy_term_data}.format column.
- */
-function taxonomy_update_7006() {
- db_add_field('taxonomy_term_data', 'format', array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => FALSE,
- 'description' => 'The {filter_format}.format of the description.',
- ));
-}
-
-/**
- * Add index on {taxonomy_term_data}.name column to speed up taxonomy_get_term_by_name().
- */
-function taxonomy_update_7007() {
- db_add_index('taxonomy_term_data', 'name', array('name'));
-}
-
-/**
- * Change the weight columns to normal int.
- */
-function taxonomy_update_7008() {
- db_drop_index('taxonomy_term_data', 'taxonomy_tree');
- db_change_field('taxonomy_term_data', 'weight', 'weight', array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'The weight of this term in relation to other terms.',
- ), array(
- 'indexes' => array(
- 'taxonomy_tree' => array('vid', 'weight', 'name'),
- ),
- ));
-
- db_drop_index('taxonomy_vocabulary', 'list');
- db_change_field('taxonomy_vocabulary', 'weight', 'weight', array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'The weight of this vocabulary in relation to other vocabularies.',
- ), array(
- 'indexes' => array(
- 'list' => array('weight', 'name'),
- ),
- ));
-}
-
-/**
- * Change {taxonomy_term_data}.format into varchar.
- */
-function taxonomy_update_7009() {
- db_change_field('taxonomy_term_data', 'format', 'format', array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => FALSE,
- 'description' => 'The {filter_format}.format of the description.',
- ));
-}
-
-/**
- * Change {taxonomy_index}.created to support signed int.
-*/
-function taxonomy_update_7010() {
- db_change_field('taxonomy_index', 'created', 'created', array(
- 'description' => 'The Unix timestamp when the node was created.',
- 'type' => 'int',
- 'unsigned' => FALSE,
- 'not null' => TRUE,
- 'default'=> 0,
- ));
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Drop unpublished nodes from the index.
- */
-function taxonomy_update_7011(&$sandbox) {
- // Initialize information needed by the batch update system.
- if (!isset($sandbox['progress'])) {
- $sandbox['progress'] = 0;
- $sandbox['max'] = db_query('SELECT COUNT(DISTINCT n.nid) FROM {node} n INNER JOIN {taxonomy_index} t ON n.nid = t.nid WHERE n.status = :status', array(':status' => NODE_NOT_PUBLISHED))->fetchField();
- // If there's no data, don't bother with the extra work.
- if (empty($sandbox['max'])) {
- return;
- }
- }
-
- // Process records in groups of 5000.
- $limit = 5000;
- $nids = db_query_range('SELECT DISTINCT n.nid FROM {node} n INNER JOIN {taxonomy_index} t ON n.nid = t.nid WHERE n.status = :status', 0, $limit, array(':status' => NODE_NOT_PUBLISHED))->fetchCol();
- if (!empty($nids)) {
- db_delete('taxonomy_index')
- ->condition('nid', $nids)
- ->execute();
- }
-
- // Update our progress information for the batch update.
- $sandbox['progress'] += $limit;
-
- // Indicate our current progress to the batch update system, if the update is
- // not yet complete.
- if ($sandbox['progress'] < $sandbox['max']) {
- $sandbox['#finished'] = $sandbox['progress'] / $sandbox['max'];
- }
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/taxonomy/taxonomy.js b/modules/taxonomy/taxonomy.js
deleted file mode 100644
index 1a0c790..0000000
--- a/modules/taxonomy/taxonomy.js
+++ /dev/null
@@ -1,40 +0,0 @@
-(function ($) {
-
-/**
- * Move a block in the blocks table from one region to another via select list.
- *
- * This behavior is dependent on the tableDrag behavior, since it uses the
- * objects initialized in that behavior to update the row.
- */
-Drupal.behaviors.termDrag = {
- attach: function (context, settings) {
- var table = $('#taxonomy', context);
- var tableDrag = Drupal.tableDrag.taxonomy; // Get the blocks tableDrag object.
- var rows = $('tr', table).length;
-
- // When a row is swapped, keep previous and next page classes set.
- tableDrag.row.prototype.onSwap = function (swappedRow) {
- $('tr.taxonomy-term-preview', table).removeClass('taxonomy-term-preview');
- $('tr.taxonomy-term-divider-top', table).removeClass('taxonomy-term-divider-top');
- $('tr.taxonomy-term-divider-bottom', table).removeClass('taxonomy-term-divider-bottom');
-
- if (settings.taxonomy.backStep) {
- for (var n = 0; n < settings.taxonomy.backStep; n++) {
- $(table[0].tBodies[0].rows[n]).addClass('taxonomy-term-preview');
- }
- $(table[0].tBodies[0].rows[settings.taxonomy.backStep - 1]).addClass('taxonomy-term-divider-top');
- $(table[0].tBodies[0].rows[settings.taxonomy.backStep]).addClass('taxonomy-term-divider-bottom');
- }
-
- if (settings.taxonomy.forwardStep) {
- for (var n = rows - settings.taxonomy.forwardStep - 1; n < rows - 1; n++) {
- $(table[0].tBodies[0].rows[n]).addClass('taxonomy-term-preview');
- }
- $(table[0].tBodies[0].rows[rows - settings.taxonomy.forwardStep - 2]).addClass('taxonomy-term-divider-top');
- $(table[0].tBodies[0].rows[rows - settings.taxonomy.forwardStep - 1]).addClass('taxonomy-term-divider-bottom');
- }
- };
- }
-};
-
-})(jQuery);
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
deleted file mode 100644
index e147c1c..0000000
--- a/modules/taxonomy/taxonomy.module
+++ /dev/null
@@ -1,2059 +0,0 @@
-' . t('About') . '';
- $output .= '' . t('The Taxonomy module allows you to classify the content of your website. To classify content, you define vocabularies that contain related terms , and then assign the vocabularies to content types. For more information, see the online handbook entry for the Taxonomy module .', array('@taxonomy' => 'http://drupal.org/documentation/modules/taxonomy/')) . '
';
- $output .= '' . t('Uses') . ' ';
- $output .= '';
- $output .= '' . t('Creating vocabularies') . ' ';
- $output .= '' . t('Users with sufficient permissions can create vocabularies and terms through the Taxonomy page . The page listing the terms provides a drag-and-drop interface for controlling the order of the terms and sub-terms within a vocabulary, in a hierarchical fashion. A controlled vocabulary classifying music by genre with terms and sub-terms could look as follows:', array('@taxo' => url('admin/structure/taxonomy'), '@perm' => url('admin/people/permissions', array('fragment'=>'module-taxonomy'))));
- $output .= '' . t('vocabulary : Music') . ' ';
- $output .= '' . t('term : Jazz') . ' ';
- $output .= '' . t('sub-term : Swing') . ' ';
- $output .= '' . t('sub-term : Fusion') . ' ';
- $output .= '' . t('term : Rock') . ' ';
- $output .= '' . t('sub-term : Country rock') . ' ';
- $output .= '' . t('sub-term : Hard rock') . ' ';
- $output .= t('You can assign a sub-term to multiple parent terms. For example, fusion can be assigned to both rock and jazz .') . ' ';
- $output .= '' . t('Terms in a free-tagging vocabulary can be built gradually as you create or edit content. This is often done used for blogs or photo management applications.') . ' ';
- $output .= '' . t('Assigning vocabularies to content types') . ' ';
- $output .= '' . t('Before you can use a new vocabulary to classify your content, a new Taxonomy term field must be added to a content type on its manage fields page. When adding a taxonomy field, you choose a widget to use to enter the taxonomy information on the content editing page: a select list, checkboxes, radio buttons, or an auto-complete field (to build a free-tagging vocabulary). After choosing the field type and widget, on the subsequent field settings page you can choose the desired vocabulary, whether one or multiple terms can be chosen from the vocabulary, and other settings. The same vocabulary can be added to multiple content types, by using the "Add existing field" section on the manage fields page.', array('@ctedit' => url('admin/structure/types'))) . ' ';
- $output .= '' . t('Classifying content') . ' ';
- $output .= '' . t('After the vocabulary is assigned to the content type, you can start classifying content. The field with terms will appear on the content editing screen when you edit or add new content .', array('@addnode' => url('node/add'))) . ' ';
- $output .= '' . t('Viewing listings and RSS feeds by term') . ' ';
- $output .= '' . t("Each taxonomy term automatically provides a page listing content that has its classification, and a corresponding RSS feed. For example, if the taxonomy term country rock has the ID 123 (you can see this by looking at the URL when hovering on the linked term, which you can click to navigate to the listing page), then you will find this list at the path taxonomy/term/123 . The RSS feed will use the path taxonomy/term/123/feed (the RSS icon for this term's listing will automatically display in your browser's address bar when viewing the listing page).") . ' ';
- $output .= '' . t('Extending Taxonomy module') . ' ';
- $output .= '' . t('There are many contributed modules that extend the behavior of the Taxonomy module for both display and organization of terms.', array('@taxcontrib' => 'http://drupal.org/project/modules?filters=tid:71&solrsort=sis_project_release_usage%20desc'));
- $output .= ' ';
- return $output;
- case 'admin/structure/taxonomy':
- $output = '' . t('Taxonomy is for categorizing content. Terms are grouped into vocabularies. For example, a vocabulary called "Fruit" would contain the terms "Apple" and "Banana".') . '
';
- return $output;
- case 'admin/structure/taxonomy/%':
- $vocabulary = taxonomy_vocabulary_machine_name_load($arg[3]);
- switch ($vocabulary->hierarchy) {
- case 0:
- return '' . t('You can reorganize the terms in %capital_name using their drag-and-drop handles, and group terms under a parent term by sliding them under and to the right of the parent.', array('%capital_name' => drupal_ucfirst($vocabulary->name), '%name' => $vocabulary->name)) . '
';
- case 1:
- return '' . t('%capital_name contains terms grouped under parent terms. You can reorganize the terms in %capital_name using their drag-and-drop handles.', array('%capital_name' => drupal_ucfirst($vocabulary->name), '%name' => $vocabulary->name)) . '
';
- case 2:
- return '' . t('%capital_name contains terms with multiple parents. Drag and drop of terms with multiple parents is not supported, but you can re-enable drag-and-drop support by editing each term to include only a single parent.', array('%capital_name' => drupal_ucfirst($vocabulary->name))) . '
';
- }
- }
-}
-
-/**
- * Implements hook_permission().
- */
-function taxonomy_permission() {
- $permissions = array(
- 'administer taxonomy' => array(
- 'title' => t('Administer vocabularies and terms'),
- ),
- );
- foreach (taxonomy_get_vocabularies() as $vocabulary) {
- $permissions += array(
- 'edit terms in ' . $vocabulary->vid => array(
- 'title' => t('Edit terms in %vocabulary', array('%vocabulary' => $vocabulary->name)),
- ),
- );
- $permissions += array(
- 'delete terms in ' . $vocabulary->vid => array(
- 'title' => t('Delete terms from %vocabulary', array('%vocabulary' => $vocabulary->name)),
- ),
- );
- }
- return $permissions;
-}
-
-/**
- * Implements hook_entity_info().
- */
-function taxonomy_entity_info() {
- $return = array(
- 'taxonomy_term' => array(
- 'label' => t('Taxonomy term'),
- 'controller class' => 'TaxonomyTermController',
- 'base table' => 'taxonomy_term_data',
- 'uri callback' => 'taxonomy_term_uri',
- 'fieldable' => TRUE,
- 'entity keys' => array(
- 'id' => 'tid',
- 'bundle' => 'vocabulary_machine_name',
- 'label' => 'name',
- ),
- 'bundle keys' => array(
- 'bundle' => 'machine_name',
- ),
- 'bundles' => array(),
- 'view modes' => array(
- // @todo View mode for display as a field (when attached to nodes etc).
- 'full' => array(
- 'label' => t('Taxonomy term page'),
- 'custom settings' => FALSE,
- ),
- ),
- ),
- );
- foreach (taxonomy_vocabulary_get_names() as $machine_name => $vocabulary) {
- $return['taxonomy_term']['bundles'][$machine_name] = array(
- 'label' => $vocabulary->name,
- 'admin' => array(
- 'path' => 'admin/structure/taxonomy/%taxonomy_vocabulary_machine_name',
- 'real path' => 'admin/structure/taxonomy/' . $machine_name,
- 'bundle argument' => 3,
- 'access arguments' => array('administer taxonomy'),
- ),
- );
- }
- $return['taxonomy_vocabulary'] = array(
- 'label' => t('Taxonomy vocabulary'),
- 'controller class' => 'TaxonomyVocabularyController',
- 'base table' => 'taxonomy_vocabulary',
- 'entity keys' => array(
- 'id' => 'vid',
- 'label' => 'name',
- ),
- 'fieldable' => FALSE,
- );
-
- return $return;
-}
-
-/**
- * Implements callback_entity_info_uri().
- */
-function taxonomy_term_uri($term) {
- return array(
- 'path' => 'taxonomy/term/' . $term->tid,
- );
-}
-
-/**
- * Implements hook_field_extra_fields().
- */
-function taxonomy_field_extra_fields() {
- $return = array();
- $info = entity_get_info('taxonomy_term');
- foreach (array_keys($info['bundles']) as $bundle) {
- $return['taxonomy_term'][$bundle] = array(
- 'form' => array(
- 'name' => array(
- 'label' => t('Name'),
- 'description' => t('Term name textfield'),
- 'weight' => -5,
- ),
- 'description' => array(
- 'label' => t('Description'),
- 'description' => t('Term description textarea'),
- 'weight' => 0,
- ),
- ),
- 'display' => array(
- 'description' => array(
- 'label' => t('Description'),
- 'description' => t('Term description'),
- 'weight' => 0,
- ),
- ),
- );
- }
-
- return $return;
-}
-
-/**
- * Return nodes attached to a term across all field instances.
- *
- * This function requires taxonomy module to be maintaining its own tables,
- * and will return an empty array if it is not. If using other field storage
- * methods alternatives methods for listing terms will need to be used.
- *
- * @param $tid
- * The term ID.
- * @param $pager
- * Boolean to indicate whether a pager should be used.
- * @param $limit
- * Integer. The maximum number of nodes to find.
- * Set to FALSE for no limit.
- * @param $order
- * An array of fields and directions.
- *
- * @return
- * An array of nids matching the query.
- */
-function taxonomy_select_nodes($tid, $pager = TRUE, $limit = FALSE, $order = array('t.sticky' => 'DESC', 't.created' => 'DESC')) {
- if (!variable_get('taxonomy_maintain_index_table', TRUE)) {
- return array();
- }
- $query = db_select('taxonomy_index', 't');
- $query->addTag('node_access');
- $query->condition('tid', $tid);
- if ($pager) {
- $count_query = clone $query;
- $count_query->addExpression('COUNT(t.nid)');
-
- $query = $query->extend('PagerDefault');
- if ($limit !== FALSE) {
- $query = $query->limit($limit);
- }
- $query->setCountQuery($count_query);
- }
- else {
- if ($limit !== FALSE) {
- $query->range(0, $limit);
- }
- }
- $query->addField('t', 'nid');
- $query->addField('t', 'tid');
- foreach ($order as $field => $direction) {
- $query->orderBy($field, $direction);
- // ORDER BY fields need to be loaded too, assume they are in the form
- // table_alias.name
- list($table_alias, $name) = explode('.', $field);
- $query->addField($table_alias, $name);
- }
- return $query->execute()->fetchCol();
-}
-
-/**
- * Implements hook_theme().
- */
-function taxonomy_theme() {
- return array(
- 'taxonomy_overview_vocabularies' => array(
- 'render element' => 'form',
- ),
- 'taxonomy_overview_terms' => array(
- 'render element' => 'form',
- ),
- 'taxonomy_term' => array(
- 'render element' => 'elements',
- 'template' => 'taxonomy-term',
- ),
- );
-}
-
-/**
- * Implements hook_menu().
- */
-function taxonomy_menu() {
- $items['admin/structure/taxonomy'] = array(
- 'title' => 'Taxonomy',
- 'description' => 'Manage tagging, categorization, and classification of your content.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('taxonomy_overview_vocabularies'),
- 'access arguments' => array('administer taxonomy'),
- 'file' => 'taxonomy.admin.inc',
- );
- $items['admin/structure/taxonomy/list'] = array(
- 'title' => 'List',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10,
- );
- $items['admin/structure/taxonomy/add'] = array(
- 'title' => 'Add vocabulary',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('taxonomy_form_vocabulary'),
- 'access arguments' => array('administer taxonomy'),
- 'type' => MENU_LOCAL_ACTION,
- 'file' => 'taxonomy.admin.inc',
- );
-
- $items['taxonomy/term/%taxonomy_term'] = array(
- 'title' => 'Taxonomy term',
- 'title callback' => 'taxonomy_term_title',
- 'title arguments' => array(2),
- 'page callback' => 'taxonomy_term_page',
- 'page arguments' => array(2),
- 'access arguments' => array('access content'),
- 'file' => 'taxonomy.pages.inc',
- );
- $items['taxonomy/term/%taxonomy_term/view'] = array(
- 'title' => 'View',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- );
- $items['taxonomy/term/%taxonomy_term/edit'] = array(
- 'title' => 'Edit',
- 'page callback' => 'drupal_get_form',
- // Pass a NULL argument to ensure that additional path components are not
- // passed to taxonomy_form_term() as the vocabulary machine name argument.
- 'page arguments' => array('taxonomy_form_term', 2, NULL),
- 'access callback' => 'taxonomy_term_edit_access',
- 'access arguments' => array(2),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 10,
- 'file' => 'taxonomy.admin.inc',
- );
- $items['taxonomy/term/%taxonomy_term/feed'] = array(
- 'title' => 'Taxonomy term',
- 'title callback' => 'taxonomy_term_title',
- 'title arguments' => array(2),
- 'page callback' => 'taxonomy_term_feed',
- 'page arguments' => array(2),
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- 'file' => 'taxonomy.pages.inc',
- );
- $items['taxonomy/autocomplete'] = array(
- 'title' => 'Autocomplete taxonomy',
- 'page callback' => 'taxonomy_autocomplete',
- 'access arguments' => array('access content'),
- 'type' => MENU_CALLBACK,
- 'file' => 'taxonomy.pages.inc',
- );
-
- $items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name'] = array(
- 'title callback' => 'entity_label',
- 'title arguments' => array('taxonomy_vocabulary', 3),
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('taxonomy_overview_terms', 3),
- 'access arguments' => array('administer taxonomy'),
- 'file' => 'taxonomy.admin.inc',
- );
- $items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name/list'] = array(
- 'title' => 'List',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -20,
- );
- $items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name/edit'] = array(
- 'title' => 'Edit',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('taxonomy_form_vocabulary', 3),
- 'access arguments' => array('administer taxonomy'),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => -10,
- 'file' => 'taxonomy.admin.inc',
- );
-
- $items['admin/structure/taxonomy/%taxonomy_vocabulary_machine_name/add'] = array(
- 'title' => 'Add term',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('taxonomy_form_term', array(), 3),
- 'access arguments' => array('administer taxonomy'),
- 'type' => MENU_LOCAL_ACTION,
- 'file' => 'taxonomy.admin.inc',
- );
-
- return $items;
-}
-
-/**
- * Implements hook_admin_paths().
- */
-function taxonomy_admin_paths() {
- $paths = array(
- 'taxonomy/term/*/edit' => TRUE,
- );
- return $paths;
-}
-
-/**
- * Return edit access for a given term.
- */
-function taxonomy_term_edit_access($term) {
- return user_access("edit terms in $term->vid") || user_access('administer taxonomy');
-}
-
-/**
- * Returns the sanitized name of a vocabulary.
- *
- * Deprecated. This function was previously used as a menu item title callback
- * but has been replaced by using entity_label() (which does not
- * sanitize the title, since the menu system does that automatically). In
- * Drupal 7, use that function for title callbacks, and call check_plain()
- * directly if you need a sanitized title.
- */
-function taxonomy_admin_vocabulary_title_callback($vocabulary) {
- return check_plain($vocabulary->name);
-}
-
-/**
- * Saves a vocabulary.
- *
- * @param $vocabulary
- * A vocabulary object with the following properties:
- * - vid: (optional) The ID of the vocabulary (omit if creating a new
- * vocabulary; only use to update an existing vocabulary).
- * - name: The human-readable name of the vocabulary.
- * - machine_name: The machine name of the vocabulary.
- * - description: (optional) The vocabulary's description.
- * - hierarchy: The hierarchy level of the vocabulary.
- * - module: (optional) The module altering the vocabulary.
- * - weight: (optional) The weight of this vocabulary in relation to other
- * vocabularies.
- * - original: (optional) The original vocabulary object before any changes
- * are applied.
- * - old_machine_name: (optional) The original machine name of the
- * vocabulary.
- *
- * @return
- * Status constant indicating whether the vocabulary was inserted (SAVED_NEW)
- * or updated (SAVED_UPDATED).
- */
-function taxonomy_vocabulary_save($vocabulary) {
- // Prevent leading and trailing spaces in vocabulary names.
- if (!empty($vocabulary->name)) {
- $vocabulary->name = trim($vocabulary->name);
- }
- // Load the stored entity, if any.
- if (!empty($vocabulary->vid)) {
- if (!isset($vocabulary->original)) {
- $vocabulary->original = entity_load_unchanged('taxonomy_vocabulary', $vocabulary->vid);
- }
- // Make sure machine name changes are easily detected.
- // @todo: Remove in Drupal 8, as it is deprecated by directly reading from
- // $vocabulary->original.
- $vocabulary->old_machine_name = $vocabulary->original->machine_name;
- }
-
- if (!isset($vocabulary->module)) {
- $vocabulary->module = 'taxonomy';
- }
-
- module_invoke_all('taxonomy_vocabulary_presave', $vocabulary);
- module_invoke_all('entity_presave', $vocabulary, 'taxonomy_vocabulary');
-
- if (!empty($vocabulary->vid) && !empty($vocabulary->name)) {
- $status = drupal_write_record('taxonomy_vocabulary', $vocabulary, 'vid');
- taxonomy_vocabulary_static_reset(array($vocabulary->vid));
- if ($vocabulary->old_machine_name != $vocabulary->machine_name) {
- field_attach_rename_bundle('taxonomy_term', $vocabulary->old_machine_name, $vocabulary->machine_name);
- }
- module_invoke_all('taxonomy_vocabulary_update', $vocabulary);
- module_invoke_all('entity_update', $vocabulary, 'taxonomy_vocabulary');
- }
- elseif (empty($vocabulary->vid)) {
- $status = drupal_write_record('taxonomy_vocabulary', $vocabulary);
- taxonomy_vocabulary_static_reset();
- field_attach_create_bundle('taxonomy_term', $vocabulary->machine_name);
- module_invoke_all('taxonomy_vocabulary_insert', $vocabulary);
- module_invoke_all('entity_insert', $vocabulary, 'taxonomy_vocabulary');
- }
-
- unset($vocabulary->original);
- cache_clear_all();
-
- return $status;
-}
-
-/**
- * Deletes a vocabulary.
- *
- * This will update all Taxonomy fields so that they don't reference the
- * deleted vocabulary. It also will delete fields that have no remaining
- * vocabulary references. All taxonomy terms of the deleted vocabulary
- * will be deleted as well.
- *
- * @param $vid
- * A vocabulary ID.
- * @return
- * Constant indicating items were deleted.
- */
-function taxonomy_vocabulary_delete($vid) {
- $vocabulary = taxonomy_vocabulary_load($vid);
-
- $transaction = db_transaction();
- try {
- // Only load terms without a parent, child terms will get deleted too.
- $result = db_query('SELECT t.tid FROM {taxonomy_term_data} t INNER JOIN {taxonomy_term_hierarchy} th ON th.tid = t.tid WHERE t.vid = :vid AND th.parent = 0', array(':vid' => $vid))->fetchCol();
- foreach ($result as $tid) {
- taxonomy_term_delete($tid);
- }
- db_delete('taxonomy_vocabulary')
- ->condition('vid', $vid)
- ->execute();
-
- field_attach_delete_bundle('taxonomy_term', $vocabulary->machine_name);
- module_invoke_all('taxonomy_vocabulary_delete', $vocabulary);
- module_invoke_all('entity_delete', $vocabulary, 'taxonomy_vocabulary');
-
- // Load all Taxonomy module fields and delete those which use only this
- // vocabulary.
- $taxonomy_fields = field_read_fields(array('module' => 'taxonomy'));
- foreach ($taxonomy_fields as $field_name => $taxonomy_field) {
- $modified_field = FALSE;
- // Term reference fields may reference terms from more than one
- // vocabulary.
- foreach ($taxonomy_field['settings']['allowed_values'] as $key => $allowed_value) {
- if ($allowed_value['vocabulary'] == $vocabulary->machine_name) {
- unset($taxonomy_field['settings']['allowed_values'][$key]);
- $modified_field = TRUE;
- }
- }
- if ($modified_field) {
- if (empty($taxonomy_field['settings']['allowed_values'])) {
- field_delete_field($field_name);
- }
- else {
- // Update the field definition with the new allowed values.
- field_update_field($taxonomy_field);
- }
- }
- }
-
- cache_clear_all();
- taxonomy_vocabulary_static_reset();
-
- return SAVED_DELETED;
- }
- catch (Exception $e) {
- $transaction->rollback();
- watchdog_exception('taxonomy', $e);
- throw $e;
- }
-}
-
-/**
- * Implements hook_taxonomy_vocabulary_update().
- */
-function taxonomy_taxonomy_vocabulary_update($vocabulary) {
- // Reflect machine name changes in the definitions of existing 'taxonomy'
- // fields.
- if (!empty($vocabulary->old_machine_name) && $vocabulary->old_machine_name != $vocabulary->machine_name) {
- $fields = field_read_fields();
- foreach ($fields as $field_name => $field) {
- $update = FALSE;
- if ($field['type'] == 'taxonomy_term_reference') {
- foreach ($field['settings']['allowed_values'] as $key => &$value) {
- if ($value['vocabulary'] == $vocabulary->old_machine_name) {
- $value['vocabulary'] = $vocabulary->machine_name;
- $update = TRUE;
- }
- }
- if ($update) {
- field_update_field($field);
- }
- }
- }
- }
-}
-
-/**
- * Checks and updates the hierarchy flag of a vocabulary.
- *
- * Checks the current parents of all terms in a vocabulary and updates the
- * vocabulary's hierarchy setting to the lowest possible level. If no term
- * has parent terms then the vocabulary will be given a hierarchy of 0.
- * If any term has a single parent then the vocabulary will be given a
- * hierarchy of 1. If any term has multiple parents then the vocabulary
- * will be given a hierarchy of 2.
- *
- * @param $vocabulary
- * A vocabulary object.
- * @param $changed_term
- * An array of the term structure that was updated.
- *
- * @return
- * An integer that represents the level of the vocabulary's hierarchy.
- */
-function taxonomy_check_vocabulary_hierarchy($vocabulary, $changed_term) {
- $tree = taxonomy_get_tree($vocabulary->vid);
- $hierarchy = 0;
- foreach ($tree as $term) {
- // Update the changed term with the new parent value before comparison.
- if ($term->tid == $changed_term['tid']) {
- $term = (object) $changed_term;
- $term->parents = $term->parent;
- }
- // Check this term's parent count.
- if (count($term->parents) > 1) {
- $hierarchy = 2;
- break;
- }
- elseif (count($term->parents) == 1 && !isset($term->parents[0])) {
- $hierarchy = 1;
- }
- }
- if ($hierarchy != $vocabulary->hierarchy) {
- $vocabulary->hierarchy = $hierarchy;
- taxonomy_vocabulary_save($vocabulary);
- }
-
- return $hierarchy;
-}
-
-/**
- * Saves a term object to the database.
- *
- * @param $term
- * The taxonomy term object with the following properties:
- * - vid: The ID of the vocabulary the term is assigned to.
- * - name: The name of the term.
- * - tid: (optional) The unique ID for the term being saved. If $term->tid is
- * empty or omitted, a new term will be inserted.
- * - description: (optional) The term's description.
- * - format: (optional) The text format for the term's description.
- * - weight: (optional) The weight of this term in relation to other terms
- * within the same vocabulary.
- * - parent: (optional) The parent term(s) for this term. This can be a single
- * term ID or an array of term IDs. A value of 0 means this term does not
- * have any parents. When omitting this variable during an update, the
- * existing hierarchy for the term remains unchanged.
- * - vocabulary_machine_name: (optional) The machine name of the vocabulary
- * the term is assigned to. If not given, this value will be set
- * automatically by loading the vocabulary based on $term->vid.
- * - original: (optional) The original taxonomy term object before any changes
- * were applied. When omitted, the unchanged taxonomy term object is
- * loaded from the database and stored in this property.
- * Since a taxonomy term is an entity, any fields contained in the term object
- * are saved alongside the term object.
- *
- * @return
- * Status constant indicating whether term was inserted (SAVED_NEW) or updated
- * (SAVED_UPDATED). When inserting a new term, $term->tid will contain the
- * term ID of the newly created term.
- */
-function taxonomy_term_save($term) {
- // Prevent leading and trailing spaces in term names.
- $term->name = trim($term->name);
- if (!isset($term->vocabulary_machine_name)) {
- $vocabulary = taxonomy_vocabulary_load($term->vid);
- $term->vocabulary_machine_name = $vocabulary->machine_name;
- }
-
- // Load the stored entity, if any.
- if (!empty($term->tid) && !isset($term->original)) {
- $term->original = entity_load_unchanged('taxonomy_term', $term->tid);
- }
-
- field_attach_presave('taxonomy_term', $term);
- module_invoke_all('taxonomy_term_presave', $term);
- module_invoke_all('entity_presave', $term, 'taxonomy_term');
-
- if (empty($term->tid)) {
- $op = 'insert';
- $status = drupal_write_record('taxonomy_term_data', $term);
- field_attach_insert('taxonomy_term', $term);
- if (!isset($term->parent)) {
- $term->parent = array(0);
- }
- }
- else {
- $op = 'update';
- $status = drupal_write_record('taxonomy_term_data', $term, 'tid');
- field_attach_update('taxonomy_term', $term);
- if (isset($term->parent)) {
- db_delete('taxonomy_term_hierarchy')
- ->condition('tid', $term->tid)
- ->execute();
- }
- }
-
- if (isset($term->parent)) {
- if (!is_array($term->parent)) {
- $term->parent = array($term->parent);
- }
- $query = db_insert('taxonomy_term_hierarchy')
- ->fields(array('tid', 'parent'));
- foreach ($term->parent as $parent) {
- if (is_array($parent)) {
- foreach ($parent as $tid) {
- $query->values(array(
- 'tid' => $term->tid,
- 'parent' => $tid
- ));
- }
- }
- else {
- $query->values(array(
- 'tid' => $term->tid,
- 'parent' => $parent
- ));
- }
- }
- $query->execute();
- }
-
- // Reset the taxonomy term static variables.
- taxonomy_terms_static_reset();
-
- // Invoke the taxonomy hooks.
- module_invoke_all("taxonomy_term_$op", $term);
- module_invoke_all("entity_$op", $term, 'taxonomy_term');
- unset($term->original);
-
- return $status;
-}
-
-/**
- * Delete a term.
- *
- * @param $tid
- * The term ID.
- * @return
- * Status constant indicating deletion.
- */
-function taxonomy_term_delete($tid) {
- $transaction = db_transaction();
- try {
- $tids = array($tid);
- while ($tids) {
- $children_tids = $orphans = array();
- foreach ($tids as $tid) {
- // See if any of the term's children are about to be become orphans:
- if ($children = taxonomy_get_children($tid)) {
- foreach ($children as $child) {
- // If the term has multiple parents, we don't delete it.
- $parents = taxonomy_get_parents($child->tid);
- if (count($parents) == 1) {
- $orphans[] = $child->tid;
- }
- }
- }
-
- if ($term = taxonomy_term_load($tid)) {
- db_delete('taxonomy_term_data')
- ->condition('tid', $tid)
- ->execute();
- db_delete('taxonomy_term_hierarchy')
- ->condition('tid', $tid)
- ->execute();
-
- field_attach_delete('taxonomy_term', $term);
- module_invoke_all('taxonomy_term_delete', $term);
- module_invoke_all('entity_delete', $term, 'taxonomy_term');
- taxonomy_terms_static_reset();
- }
- }
-
- $tids = $orphans;
- }
- return SAVED_DELETED;
- }
- catch (Exception $e) {
- $transaction->rollback();
- watchdog_exception('taxonomy', $e);
- throw $e;
- }
-}
-
-/**
- * Generates an array which displays a term detail page.
- *
- * @param term
- * A taxonomy term object.
- * @return
- * A $page element suitable for use by drupal_render().
- */
-function taxonomy_term_show($term) {
- return taxonomy_term_view_multiple(array($term->tid => $term), 'full');
-}
-
-/**
- * Constructs a drupal_render() style array from an array of loaded terms.
- *
- * @param $terms
- * An array of taxonomy terms as returned by taxonomy_term_load_multiple().
- * @param $view_mode
- * View mode, e.g. 'full', 'teaser'...
- * @param $weight
- * An integer representing the weight of the first taxonomy term in the list.
- * @param $langcode
- * (optional) A language code to use for rendering. Defaults to the global
- * content language of the current request.
- *
- * @return
- * An array in the format expected by drupal_render().
- */
-function taxonomy_term_view_multiple($terms, $view_mode = 'teaser', $weight = 0, $langcode = NULL) {
- $build = array();
- $entities_by_view_mode = entity_view_mode_prepare('taxonomy_term', $terms, $view_mode, $langcode);
- foreach ($entities_by_view_mode as $entity_view_mode => $entities) {
- field_attach_prepare_view('taxonomy_term', $entities, $entity_view_mode, $langcode);
- entity_prepare_view('taxonomy_term', $entities, $langcode);
-
- foreach ($entities as $entity) {
- $build['taxonomy_terms'][$entity->tid] = taxonomy_term_view($entity, $entity_view_mode, $langcode);
- }
- }
-
- foreach ($terms as $term) {
- $build['taxonomy_terms'][$term->tid]['#weight'] = $weight;
- $weight++;
- }
- // Sort here, to preserve the input order of the entities that were passed to
- // this function.
- uasort($build['taxonomy_terms'], 'element_sort');
- $build['taxonomy_terms']['#sorted'] = TRUE;
-
- return $build;
-}
-
-/**
- * Builds a structured array representing the term's content.
- *
- * The content built for the taxonomy term (field values, file attachments or
- * other term components) will vary depending on the $view_mode parameter.
- *
- * Drupal core defines the following view modes for terms, with the following
- * default use cases:
- * - full (default): term is displayed on its own page (taxonomy/term/123)
- * Contributed modules might define additional view modes, or use existing
- * view modes in additional contexts.
- *
- * @param $term
- * A taxonomy term object.
- * @param $view_mode
- * View mode, e.g. 'full', 'teaser'...
- * @param $langcode
- * (optional) A language code to use for rendering. Defaults to the global
- * content language of the current request.
- */
-function taxonomy_term_build_content($term, $view_mode = 'full', $langcode = NULL) {
- if (!isset($langcode)) {
- $langcode = $GLOBALS['language_content']->language;
- }
-
- // Remove previously built content, if exists.
- $term->content = array();
-
- // Allow modules to change the view mode.
- $view_mode = key(entity_view_mode_prepare('taxonomy_term', array($term->tid => $term), $view_mode, $langcode));
-
- // Add the term description if the term has one and it is visible.
- $type = 'taxonomy_term';
- $entity_ids = entity_extract_ids($type, $term);
- $settings = field_view_mode_settings($type, $entity_ids[2]);
- $fields = field_extra_fields_get_display($type, $entity_ids[2], $view_mode);
- if (!empty($term->description) && isset($fields['description']) && $fields['description']['visible']) {
- $term->content['description'] = array(
- '#markup' => check_markup($term->description, $term->format, '', TRUE),
- '#weight' => $fields['description']['weight'],
- '#prefix' => '',
- '#suffix' => '
',
- );
- }
-
- // Build fields content.
- // In case of a multiple view, taxonomy_term_view_multiple() already ran the
- // 'prepare_view' step. An internal flag prevents the operation from running
- // twice.
- field_attach_prepare_view('taxonomy_term', array($term->tid => $term), $view_mode, $langcode);
- entity_prepare_view('taxonomy_term', array($term->tid => $term), $langcode);
- $term->content += field_attach_view('taxonomy_term', $term, $view_mode, $langcode);
-
- // Allow modules to make their own additions to the taxonomy term.
- module_invoke_all('taxonomy_term_view', $term, $view_mode, $langcode);
- module_invoke_all('entity_view', $term, 'taxonomy_term', $view_mode, $langcode);
-
- // Make sure the current view mode is stored if no module has already
- // populated the related key.
- $term->content += array('#view_mode' => $view_mode);
-}
-
-/**
- * Generate an array for rendering the given term.
- *
- * @param $term
- * A term object.
- * @param $view_mode
- * View mode, e.g. 'full', 'teaser'...
- * @param $langcode
- * (optional) A language code to use for rendering. Defaults to the global
- * content language of the current request.
- *
- * @return
- * An array as expected by drupal_render().
- */
-function taxonomy_term_view($term, $view_mode = 'full', $langcode = NULL) {
- if (!isset($langcode)) {
- $langcode = $GLOBALS['language_content']->language;
- }
-
- // Populate $term->content with a render() array.
- taxonomy_term_build_content($term, $view_mode, $langcode);
- $build = $term->content;
-
- // We don't need duplicate rendering info in $term->content.
- unset($term->content);
-
- $build += array(
- '#theme' => 'taxonomy_term',
- '#term' => $term,
- '#view_mode' => $view_mode,
- '#language' => $langcode,
- );
-
- $build['#attached']['css'][] = drupal_get_path('module', 'taxonomy') . '/taxonomy.css';
-
- // Allow modules to modify the structured taxonomy term.
- $type = 'taxonomy_term';
- drupal_alter(array('taxonomy_term_view', 'entity_view'), $build, $type);
-
- return $build;
-}
-
-/**
- * Process variables for taxonomy-term.tpl.php.
- */
-function template_preprocess_taxonomy_term(&$variables) {
- $variables['view_mode'] = $variables['elements']['#view_mode'];
- $variables['term'] = $variables['elements']['#term'];
- $term = $variables['term'];
-
- $uri = entity_uri('taxonomy_term', $term);
- $variables['term_url'] = url($uri['path'], $uri['options']);
- $variables['term_name'] = check_plain($term->name);
- $variables['page'] = $variables['view_mode'] == 'full' && taxonomy_term_is_page($term);
-
- // Flatten the term object's member fields.
- $variables = array_merge((array) $term, $variables);
-
- // Helpful $content variable for templates.
- $variables['content'] = array();
- foreach (element_children($variables['elements']) as $key) {
- $variables['content'][$key] = $variables['elements'][$key];
- }
-
- // field_attach_preprocess() overwrites the $[field_name] variables with the
- // values of the field in the language that was selected for display, instead
- // of the raw values in $term->[field_name], which contain all values in all
- // languages.
- field_attach_preprocess('taxonomy_term', $term, $variables['content'], $variables);
-
- // Gather classes, and clean up name so there are no underscores.
- $vocabulary_name_css = str_replace('_', '-', $term->vocabulary_machine_name);
- $variables['classes_array'][] = 'vocabulary-' . $vocabulary_name_css;
-
- $variables['theme_hook_suggestions'][] = 'taxonomy_term__' . $term->vocabulary_machine_name;
- $variables['theme_hook_suggestions'][] = 'taxonomy_term__' . $term->tid;
-}
-
-/**
- * Returns whether the current page is the page of the passed-in term.
- *
- * @param $term
- * A term object.
- */
-function taxonomy_term_is_page($term) {
- $page_term = menu_get_object('taxonomy_term', 2);
- return (!empty($page_term) ? $page_term->tid == $term->tid : FALSE);
-}
-
-/**
- * Clear all static cache variables for terms.
- */
-function taxonomy_terms_static_reset() {
- drupal_static_reset('taxonomy_term_count_nodes');
- drupal_static_reset('taxonomy_get_tree');
- drupal_static_reset('taxonomy_get_tree:parents');
- drupal_static_reset('taxonomy_get_tree:terms');
- drupal_static_reset('taxonomy_get_parents');
- drupal_static_reset('taxonomy_get_parents_all');
- drupal_static_reset('taxonomy_get_children');
- entity_get_controller('taxonomy_term')->resetCache();
-}
-
-/**
- * Clear all static cache variables for vocabularies.
- *
- * @param $ids
- * An array of ids to reset in entity controller cache.
- */
-function taxonomy_vocabulary_static_reset($ids = NULL) {
- drupal_static_reset('taxonomy_vocabulary_get_names');
- entity_get_controller('taxonomy_vocabulary')->resetCache($ids);
-}
-
-/**
- * Return an array of all vocabulary objects.
- *
- * @return
- * An array of all vocabulary objects, indexed by vid.
- */
-function taxonomy_get_vocabularies() {
- return taxonomy_vocabulary_load_multiple(FALSE, array());
-}
-
-/**
- * Get names for all taxonomy vocabularies.
- *
- * @return
- * An associative array of objects keyed by vocabulary machine name with
- * information about taxonomy vocabularies. Each object has properties:
- * - name: The vocabulary name.
- * - machine_name: The machine name.
- * - vid: The vocabulary ID.
- */
-function taxonomy_vocabulary_get_names() {
- $names = &drupal_static(__FUNCTION__);
-
- if (!isset($names)) {
- $names = db_query('SELECT name, machine_name, vid FROM {taxonomy_vocabulary}')->fetchAllAssoc('machine_name');
- }
-
- return $names;
-}
-
-/**
- * Finds all parents of a given term ID.
- *
- * @param $tid
- * A taxonomy term ID.
- *
- * @return
- * An array of term objects which are the parents of the term $tid, or an
- * empty array if parents are not found.
- */
-function taxonomy_get_parents($tid) {
- $parents = &drupal_static(__FUNCTION__, array());
-
- if ($tid && !isset($parents[$tid])) {
- $query = db_select('taxonomy_term_data', 't');
- $query->join('taxonomy_term_hierarchy', 'h', 'h.parent = t.tid');
- $query->addField('t', 'tid');
- $query->condition('h.tid', $tid);
- $query->addTag('term_access');
- $query->orderBy('t.weight');
- $query->orderBy('t.name');
- $tids = $query->execute()->fetchCol();
- $parents[$tid] = taxonomy_term_load_multiple($tids);
- }
-
- return isset($parents[$tid]) ? $parents[$tid] : array();
-}
-
-/**
- * Find all ancestors of a given term ID.
- */
-function taxonomy_get_parents_all($tid) {
- $cache = &drupal_static(__FUNCTION__, array());
-
- if (isset($cache[$tid])) {
- return $cache[$tid];
- }
-
- $parents = array();
- if ($term = taxonomy_term_load($tid)) {
- $parents[] = $term;
- $n = 0;
- while ($parent = taxonomy_get_parents($parents[$n]->tid)) {
- $parents = array_merge($parents, $parent);
- $n++;
- }
- }
-
- $cache[$tid] = $parents;
-
- return $parents;
-}
-
-/**
- * Finds all children of a term ID.
- *
- * @param $tid
- * A taxonomy term ID.
- * @param $vid
- * An optional vocabulary ID to restrict the child search.
- *
- * @return
- * An array of term objects that are the children of the term $tid, or an
- * empty array when no children exist.
- */
-function taxonomy_get_children($tid, $vid = 0) {
- $children = &drupal_static(__FUNCTION__, array());
-
- if ($tid && !isset($children[$tid])) {
- $query = db_select('taxonomy_term_data', 't');
- $query->join('taxonomy_term_hierarchy', 'h', 'h.tid = t.tid');
- $query->addField('t', 'tid');
- $query->condition('h.parent', $tid);
- if ($vid) {
- $query->condition('t.vid', $vid);
- }
- $query->addTag('term_access');
- $query->orderBy('t.weight');
- $query->orderBy('t.name');
- $tids = $query->execute()->fetchCol();
- $children[$tid] = taxonomy_term_load_multiple($tids);
- }
-
- return isset($children[$tid]) ? $children[$tid] : array();
-}
-
-/**
- * Create a hierarchical representation of a vocabulary.
- *
- * @param $vid
- * Which vocabulary to generate the tree for.
- * @param $parent
- * The term ID under which to generate the tree. If 0, generate the tree
- * for the entire vocabulary.
- * @param $max_depth
- * The number of levels of the tree to return. Leave NULL to return all levels.
- * @param $load_entities
- * If TRUE, a full entity load will occur on the term objects. Otherwise they
- * are partial objects queried directly from the {taxonomy_term_data} table to
- * save execution time and memory consumption when listing large numbers of
- * terms. Defaults to FALSE.
- *
- * @return
- * An array of all term objects in the tree. Each term object is extended
- * to have "depth" and "parents" attributes in addition to its normal ones.
- * Results are statically cached. Term objects will be partial or complete
- * depending on the $load_entities parameter.
- */
-function taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities = FALSE) {
- $children = &drupal_static(__FUNCTION__, array());
- $parents = &drupal_static(__FUNCTION__ . ':parents', array());
- $terms = &drupal_static(__FUNCTION__ . ':terms', array());
-
- // We cache trees, so it's not CPU-intensive to call taxonomy_get_tree() on a
- // term and its children, too.
- if (!isset($children[$vid])) {
- $children[$vid] = array();
- $parents[$vid] = array();
- $terms[$vid] = array();
-
- $query = db_select('taxonomy_term_data', 't');
- $query->join('taxonomy_term_hierarchy', 'h', 'h.tid = t.tid');
- $result = $query
- ->addTag('translatable')
- ->addTag('term_access')
- ->fields('t')
- ->fields('h', array('parent'))
- ->condition('t.vid', $vid)
- ->orderBy('t.weight')
- ->orderBy('t.name')
- ->execute();
-
- foreach ($result as $term) {
- $children[$vid][$term->parent][] = $term->tid;
- $parents[$vid][$term->tid][] = $term->parent;
- $terms[$vid][$term->tid] = $term;
- }
- }
-
- // Load full entities, if necessary. The entity controller statically
- // caches the results.
- if ($load_entities) {
- $term_entities = taxonomy_term_load_multiple(array_keys($terms[$vid]));
- }
-
- $max_depth = (!isset($max_depth)) ? count($children[$vid]) : $max_depth;
- $tree = array();
-
- // Keeps track of the parents we have to process, the last entry is used
- // for the next processing step.
- $process_parents = array();
- $process_parents[] = $parent;
-
- // Loops over the parent terms and adds its children to the tree array.
- // Uses a loop instead of a recursion, because it's more efficient.
- while (count($process_parents)) {
- $parent = array_pop($process_parents);
- // The number of parents determines the current depth.
- $depth = count($process_parents);
- if ($max_depth > $depth && !empty($children[$vid][$parent])) {
- $has_children = FALSE;
- $child = current($children[$vid][$parent]);
- do {
- if (empty($child)) {
- break;
- }
- $term = $load_entities ? $term_entities[$child] : $terms[$vid][$child];
- if (isset($parents[$vid][$term->tid])) {
- // Clone the term so that the depth attribute remains correct
- // in the event of multiple parents.
- $term = clone $term;
- }
- $term->depth = $depth;
- unset($term->parent);
- $term->parents = $parents[$vid][$term->tid];
- $tree[] = $term;
- if (!empty($children[$vid][$term->tid])) {
- $has_children = TRUE;
-
- // We have to continue with this parent later.
- $process_parents[] = $parent;
- // Use the current term as parent for the next iteration.
- $process_parents[] = $term->tid;
-
- // Reset pointers for child lists because we step in there more often
- // with multi parents.
- reset($children[$vid][$term->tid]);
- // Move pointer so that we get the correct term the next time.
- next($children[$vid][$parent]);
- break;
- }
- } while ($child = next($children[$vid][$parent]));
-
- if (!$has_children) {
- // We processed all terms in this hierarchy-level, reset pointer
- // so that this function works the next time it gets called.
- reset($children[$vid][$parent]);
- }
- }
- }
-
- return $tree;
-}
-
-/**
- * Try to map a string to an existing term, as for glossary use.
- *
- * Provides a case-insensitive and trimmed mapping, to maximize the
- * likelihood of a successful match.
- *
- * @param $name
- * Name of the term to search for.
- * @param $vocabulary
- * (optional) Vocabulary machine name to limit the search. Defaults to NULL.
- *
- * @return
- * An array of matching term objects.
- */
-function taxonomy_get_term_by_name($name, $vocabulary = NULL) {
- $conditions = array('name' => trim($name));
- if (isset($vocabulary)) {
- $vocabularies = taxonomy_vocabulary_get_names();
- if (isset($vocabularies[$vocabulary])) {
- $conditions['vid'] = $vocabularies[$vocabulary]->vid;
- }
- else {
- // Return an empty array when filtering by a non-existing vocabulary.
- return array();
- }
- }
- return taxonomy_term_load_multiple(array(), $conditions);
-}
-
-/**
- * Controller class for taxonomy terms.
- *
- * This extends the DrupalDefaultEntityController class. Only alteration is
- * that we match the condition on term name case-independently.
- */
-class TaxonomyTermController extends DrupalDefaultEntityController {
-
- protected function buildQuery($ids, $conditions = array(), $revision_id = FALSE) {
- $query = parent::buildQuery($ids, $conditions, $revision_id);
- $query->addTag('translatable');
- $query->addTag('term_access');
- // When name is passed as a condition use LIKE.
- if (isset($conditions['name'])) {
- $query_conditions = &$query->conditions();
- foreach ($query_conditions as $key => $condition) {
- if (is_array($condition) && $condition['field'] == 'base.name') {
- $query_conditions[$key]['operator'] = 'LIKE';
- $query_conditions[$key]['value'] = db_like($query_conditions[$key]['value']);
- }
- }
- }
- // Add the machine name field from the {taxonomy_vocabulary} table.
- $query->innerJoin('taxonomy_vocabulary', 'v', 'base.vid = v.vid');
- $query->addField('v', 'machine_name', 'vocabulary_machine_name');
- return $query;
- }
-
- protected function cacheGet($ids, $conditions = array()) {
- $terms = parent::cacheGet($ids, $conditions);
- // Name matching is case insensitive, note that with some collations
- // LOWER() and drupal_strtolower() may return different results.
- foreach ($terms as $term) {
- $term_values = (array) $term;
- if (isset($conditions['name']) && drupal_strtolower($conditions['name'] != drupal_strtolower($term_values['name']))) {
- unset($terms[$term->tid]);
- }
- }
- return $terms;
- }
-}
-
-/**
- * Controller class for taxonomy vocabularies.
- *
- * This extends the DrupalDefaultEntityController class, adding required
- * special handling for taxonomy vocabulary objects.
- */
-class TaxonomyVocabularyController extends DrupalDefaultEntityController {
-
- protected function buildQuery($ids, $conditions = array(), $revision_id = FALSE) {
- $query = parent::buildQuery($ids, $conditions, $revision_id);
- $query->addTag('translatable');
- $query->orderBy('base.weight');
- $query->orderBy('base.name');
- return $query;
- }
-}
-
-/**
- * Load multiple taxonomy terms based on certain conditions.
- *
- * This function should be used whenever you need to load more than one term
- * from the database. Terms are loaded into memory and will not require
- * database access if loaded again during the same page request.
- *
- * @see entity_load()
- * @see EntityFieldQuery
- *
- * @param $tids
- * An array of taxonomy term IDs.
- * @param $conditions
- * (deprecated) An associative array of conditions on the {taxonomy_term}
- * table, where the keys are the database fields and the values are the
- * values those fields must have. Instead, it is preferable to use
- * EntityFieldQuery to retrieve a list of entity IDs loadable by
- * this function.
- *
- * @return
- * An array of term objects, indexed by tid. When no results are found, an
- * empty array is returned.
- *
- * @todo Remove $conditions in Drupal 8.
- */
-function taxonomy_term_load_multiple($tids = array(), $conditions = array()) {
- return entity_load('taxonomy_term', $tids, $conditions);
-}
-
-/**
- * Load multiple taxonomy vocabularies based on certain conditions.
- *
- * This function should be used whenever you need to load more than one
- * vocabulary from the database. Terms are loaded into memory and will not
- * require database access if loaded again during the same page request.
- *
- * @see entity_load()
- *
- * @param $vids
- * An array of taxonomy vocabulary IDs, or FALSE to load all vocabularies.
- * @param $conditions
- * An array of conditions to add to the query.
- *
- * @return
- * An array of vocabulary objects, indexed by vid.
- */
-function taxonomy_vocabulary_load_multiple($vids = array(), $conditions = array()) {
- return entity_load('taxonomy_vocabulary', $vids, $conditions);
-}
-
-/**
- * Return the vocabulary object matching a vocabulary ID.
- *
- * @param $vid
- * The vocabulary's ID.
- *
- * @return
- * The vocabulary object with all of its metadata, if exists, FALSE otherwise.
- * Results are statically cached.
- *
- * @see taxonomy_vocabulary_machine_name_load()
- */
-function taxonomy_vocabulary_load($vid) {
- $vocabularies = taxonomy_vocabulary_load_multiple(array($vid));
- return reset($vocabularies);
-}
-
-/**
- * Return the vocabulary object matching a vocabulary machine name.
- *
- * @param $name
- * The vocabulary's machine name.
- *
- * @return
- * The vocabulary object with all of its metadata, if exists, FALSE otherwise.
- * Results are statically cached.
- *
- * @see taxonomy_vocabulary_load()
- */
-function taxonomy_vocabulary_machine_name_load($name) {
- $vocabularies = taxonomy_vocabulary_load_multiple(NULL, array('machine_name' => $name));
- return reset($vocabularies);
-}
-
-/**
- * Return the term object matching a term ID.
- *
- * @param $tid
- * A term's ID
- *
- * @return
- * A taxonomy term object, or FALSE if the term was not found. Results are
- * statically cached.
- */
-function taxonomy_term_load($tid) {
- if (!is_numeric($tid)) {
- return FALSE;
- }
- $term = taxonomy_term_load_multiple(array($tid), array());
- return $term ? $term[$tid] : FALSE;
-}
-
-/**
- * Helper function for array_map purposes.
- */
-function _taxonomy_get_tid_from_term($term) {
- return $term->tid;
-}
-
-/**
- * Implodes a list of tags of a certain vocabulary into a string.
- *
- * @see drupal_explode_tags()
- */
-function taxonomy_implode_tags($tags, $vid = NULL) {
- $typed_tags = array();
- foreach ($tags as $tag) {
- // Extract terms belonging to the vocabulary in question.
- if (!isset($vid) || $tag->vid == $vid) {
- // Make sure we have a completed loaded taxonomy term.
- if (isset($tag->name)) {
- // Commas and quotes in tag names are special cases, so encode 'em.
- if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) {
- $typed_tags[] = '"' . str_replace('"', '""', $tag->name) . '"';
- }
- else {
- $typed_tags[] = $tag->name;
- }
- }
- }
- }
- return implode(', ', $typed_tags);
-}
-
-/**
- * Implements hook_field_info().
- *
- * Field settings:
- * - allowed_values: a list array of one or more vocabulary trees:
- * - vocabulary: a vocabulary machine name.
- * - parent: a term ID of a term whose children are allowed. This should be
- * '0' if all terms in a vocabulary are allowed. The allowed values do not
- * include the parent term.
- *
- */
-function taxonomy_field_info() {
- return array(
- 'taxonomy_term_reference' => array(
- 'label' => t('Term reference'),
- 'description' => t('This field stores a reference to a taxonomy term.'),
- 'default_widget' => 'options_select',
- 'default_formatter' => 'taxonomy_term_reference_link',
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => '',
- 'parent' => '0',
- ),
- ),
- ),
- ),
- );
-}
-
-/**
- * Implements hook_field_widget_info().
- */
-function taxonomy_field_widget_info() {
- return array(
- 'taxonomy_autocomplete' => array(
- 'label' => t('Autocomplete term widget (tagging)'),
- 'field types' => array('taxonomy_term_reference'),
- 'settings' => array(
- 'size' => 60,
- 'autocomplete_path' => 'taxonomy/autocomplete',
- ),
- 'behaviors' => array(
- 'multiple values' => FIELD_BEHAVIOR_CUSTOM,
- ),
- ),
- );
-}
-
-/**
- * Implements hook_field_widget_info_alter().
- */
-function taxonomy_field_widget_info_alter(&$info) {
- $info['options_select']['field types'][] = 'taxonomy_term_reference';
- $info['options_buttons']['field types'][] = 'taxonomy_term_reference';
-}
-
-/**
- * Implements hook_options_list().
- */
-function taxonomy_options_list($field, $instance, $entity_type, $entity) {
- $function = !empty($field['settings']['options_list_callback']) ? $field['settings']['options_list_callback'] : 'taxonomy_allowed_values';
- return $function($field);
-}
-
-/**
- * Implements hook_field_validate().
- *
- * Taxonomy field settings allow for either a single vocabulary ID, multiple
- * vocabulary IDs, or sub-trees of a vocabulary to be specified as allowed
- * values, although only the first of these is supported via the field UI.
- * Confirm that terms entered as values meet at least one of these conditions.
- *
- * Possible error codes:
- * - 'taxonomy_term_illegal_value': The value is not part of the list of allowed values.
- */
-function taxonomy_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
- // Build an array of existing term IDs so they can be loaded with
- // taxonomy_term_load_multiple();
- foreach ($items as $delta => $item) {
- if (!empty($item['tid']) && $item['tid'] != 'autocreate') {
- $tids[] = $item['tid'];
- }
- }
- if (!empty($tids)) {
- $terms = taxonomy_term_load_multiple($tids);
-
- // Check each existing item to ensure it can be found in the
- // allowed values for this field.
- foreach ($items as $delta => $item) {
- $validate = TRUE;
- if (!empty($item['tid']) && $item['tid'] != 'autocreate') {
- $validate = FALSE;
- foreach ($field['settings']['allowed_values'] as $settings) {
- // If no parent is specified, check if the term is in the vocabulary.
- if (isset($settings['vocabulary']) && empty($settings['parent'])) {
- if ($settings['vocabulary'] == $terms[$item['tid']]->vocabulary_machine_name) {
- $validate = TRUE;
- break;
- }
- }
- // If a parent is specified, then to validate it must appear in the
- // array returned by taxonomy_get_parents_all().
- elseif (!empty($settings['parent'])) {
- $ancestors = taxonomy_get_parents_all($item['tid']);
- foreach ($ancestors as $ancestor) {
- if ($ancestor->tid == $settings['parent']) {
- $validate = TRUE;
- break 2;
- }
- }
- }
- }
- }
- if (!$validate) {
- $errors[$field['field_name']][$langcode][$delta][] = array(
- 'error' => 'taxonomy_term_reference_illegal_value',
- 'message' => t('%name: illegal value.', array('%name' => $instance['label'])),
- );
- }
- }
- }
-}
-
-/**
- * Implements hook_field_is_empty().
- */
-function taxonomy_field_is_empty($item, $field) {
- if (!is_array($item) || (empty($item['tid']) && (string) $item['tid'] !== '0')) {
- return TRUE;
- }
- return FALSE;
-}
-
-/**
- * Implements hook_field_formatter_info().
- */
-function taxonomy_field_formatter_info() {
- return array(
- 'taxonomy_term_reference_link' => array(
- 'label' => t('Link'),
- 'field types' => array('taxonomy_term_reference'),
- ),
- 'taxonomy_term_reference_plain' => array(
- 'label' => t('Plain text'),
- 'field types' => array('taxonomy_term_reference'),
- ),
- 'taxonomy_term_reference_rss_category' => array(
- 'label' => t('RSS category'),
- 'field types' => array('taxonomy_term_reference'),
- ),
- );
-}
-
-/**
- * Implements hook_field_formatter_view().
- */
-function taxonomy_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
- $element = array();
-
- // Terms whose tid is 'autocreate' do not exist
- // yet and $item['taxonomy_term'] is not set. Theme such terms as
- // just their name.
-
- switch ($display['type']) {
- case 'taxonomy_term_reference_link':
- foreach ($items as $delta => $item) {
- if ($item['tid'] == 'autocreate') {
- $element[$delta] = array(
- '#markup' => check_plain($item['name']),
- );
- }
- else {
- $term = $item['taxonomy_term'];
- $uri = entity_uri('taxonomy_term', $term);
- $element[$delta] = array(
- '#type' => 'link',
- '#title' => $term->name,
- '#href' => $uri['path'],
- '#options' => $uri['options'],
- );
- }
- }
- break;
-
- case 'taxonomy_term_reference_plain':
- foreach ($items as $delta => $item) {
- $name = ($item['tid'] != 'autocreate' ? $item['taxonomy_term']->name : $item['name']);
- $element[$delta] = array(
- '#markup' => check_plain($name),
- );
- }
- break;
-
- case 'taxonomy_term_reference_rss_category':
- foreach ($items as $delta => $item) {
- $entity->rss_elements[] = array(
- 'key' => 'category',
- 'value' => $item['tid'] != 'autocreate' ? $item['taxonomy_term']->name : $item['name'],
- 'attributes' => array(
- 'domain' => $item['tid'] != 'autocreate' ? url('taxonomy/term/' . $item['tid'], array('absolute' => TRUE)) : '',
- ),
- );
- }
- break;
- }
-
- return $element;
-}
-
-/**
- * Returns the set of valid terms for a taxonomy field.
- *
- * @param $field
- * The field definition.
- * @return
- * The array of valid terms for this field, keyed by term id.
- */
-function taxonomy_allowed_values($field) {
- $options = array();
- foreach ($field['settings']['allowed_values'] as $tree) {
- if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary'])) {
- if ($terms = taxonomy_get_tree($vocabulary->vid, $tree['parent'])) {
- foreach ($terms as $term) {
- $options[$term->tid] = str_repeat('-', $term->depth) . $term->name;
- }
- }
- }
- }
- return $options;
-}
-
-/**
- * Implements hook_field_formatter_prepare_view().
- *
- * This preloads all taxonomy terms for multiple loaded objects at once and
- * unsets values for invalid terms that do not exist.
- */
-function taxonomy_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $displays) {
- $tids = array();
-
- // Collect every possible term attached to any of the fieldable entities.
- foreach ($entities as $id => $entity) {
- foreach ($items[$id] as $delta => $item) {
- // Force the array key to prevent duplicates.
- if ($item['tid'] != 'autocreate') {
- $tids[$item['tid']] = $item['tid'];
- }
- }
- }
- if ($tids) {
- $terms = taxonomy_term_load_multiple($tids);
-
- // Iterate through the fieldable entities again to attach the loaded term data.
- foreach ($entities as $id => $entity) {
- $rekey = FALSE;
-
- foreach ($items[$id] as $delta => $item) {
- // Check whether the taxonomy term field instance value could be loaded.
- if (isset($terms[$item['tid']])) {
- // Replace the instance value with the term data.
- $items[$id][$delta]['taxonomy_term'] = $terms[$item['tid']];
- }
- // Terms to be created are not in $terms, but are still legitimate.
- elseif ($item['tid'] == 'autocreate') {
- // Leave the item in place.
- }
- // Otherwise, unset the instance value, since the term does not exist.
- else {
- unset($items[$id][$delta]);
- $rekey = TRUE;
- }
- }
-
- if ($rekey) {
- // Rekey the items array.
- $items[$id] = array_values($items[$id]);
- }
- }
- }
-}
-
-/**
- * Title callback for term pages.
- *
- * @param $term
- * A term object.
- *
- * @return
- * The term name to be used as the page title.
- */
-function taxonomy_term_title($term) {
- return $term->name;
-}
-
-/**
- * Implements hook_field_widget_form().
- */
-function taxonomy_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
- $tags = array();
- foreach ($items as $item) {
- $tags[$item['tid']] = isset($item['taxonomy_term']) ? $item['taxonomy_term'] : taxonomy_term_load($item['tid']);
- }
-
- $element += array(
- '#type' => 'textfield',
- '#default_value' => taxonomy_implode_tags($tags),
- '#autocomplete_path' => $instance['widget']['settings']['autocomplete_path'] . '/' . $field['field_name'],
- '#size' => $instance['widget']['settings']['size'],
- '#maxlength' => 1024,
- '#element_validate' => array('taxonomy_autocomplete_validate'),
- );
-
- return $element;
-}
-
-/**
- * Form element validate handler for taxonomy term autocomplete element.
- */
-function taxonomy_autocomplete_validate($element, &$form_state) {
- // Autocomplete widgets do not send their tids in the form, so we must detect
- // them here and process them independently.
- $value = array();
- if ($tags = $element['#value']) {
- // Collect candidate vocabularies.
- $field = field_widget_field($element, $form_state);
- $vocabularies = array();
- foreach ($field['settings']['allowed_values'] as $tree) {
- if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary'])) {
- $vocabularies[$vocabulary->vid] = $vocabulary;
- }
- }
-
- // Translate term names into actual terms.
- $typed_terms = drupal_explode_tags($tags);
- foreach ($typed_terms as $typed_term) {
- // See if the term exists in the chosen vocabulary and return the tid;
- // otherwise, create a new 'autocreate' term for insert/update.
- if ($possibilities = taxonomy_term_load_multiple(array(), array('name' => trim($typed_term), 'vid' => array_keys($vocabularies)))) {
- $term = array_pop($possibilities);
- }
- else {
- $vocabulary = reset($vocabularies);
- $term = array(
- 'tid' => 'autocreate',
- 'vid' => $vocabulary->vid,
- 'name' => $typed_term,
- 'vocabulary_machine_name' => $vocabulary->machine_name,
- );
- }
- $value[] = (array)$term;
- }
- }
-
- form_set_value($element, $value, $form_state);
-}
-
-/**
- * Implements hook_field_widget_error().
- */
-function taxonomy_field_widget_error($element, $error, $form, &$form_state) {
- form_error($element, $error['message']);
-}
-/**
- * Implements hook_field_settings_form().
- */
-function taxonomy_field_settings_form($field, $instance, $has_data) {
- // Get proper values for 'allowed_values_function', which is a core setting.
- $vocabularies = taxonomy_get_vocabularies();
- $options = array();
- foreach ($vocabularies as $vocabulary) {
- $options[$vocabulary->machine_name] = $vocabulary->name;
- }
- $form['allowed_values'] = array(
- '#tree' => TRUE,
- );
-
- foreach ($field['settings']['allowed_values'] as $delta => $tree) {
- $form['allowed_values'][$delta]['vocabulary'] = array(
- '#type' => 'select',
- '#title' => t('Vocabulary'),
- '#default_value' => $tree['vocabulary'],
- '#options' => $options,
- '#required' => TRUE,
- '#description' => t('The vocabulary which supplies the options for this field.'),
- '#disabled' => $has_data,
- );
- $form['allowed_values'][$delta]['parent'] = array(
- '#type' => 'value',
- '#value' => $tree['parent'],
- );
- }
-
- return $form;
-}
-
-/**
- * Implements hook_rdf_mapping().
- *
- * @return array
- * The rdf mapping for vocabularies and terms.
- */
-function taxonomy_rdf_mapping() {
- return array(
- array(
- 'type' => 'taxonomy_term',
- 'bundle' => RDF_DEFAULT_BUNDLE,
- 'mapping' => array(
- 'rdftype' => array('skos:Concept'),
- 'name' => array(
- 'predicates' => array('rdfs:label', 'skos:prefLabel'),
- ),
- 'description' => array(
- 'predicates' => array('skos:definition'),
- ),
- 'vid' => array(
- 'predicates' => array('skos:inScheme'),
- 'type' => 'rel',
- ),
- 'parent' => array(
- 'predicates' => array('skos:broader'),
- 'type' => 'rel',
- ),
- ),
- ),
- array(
- 'type' => 'taxonomy_vocabulary',
- 'bundle' => RDF_DEFAULT_BUNDLE,
- 'mapping' => array(
- 'rdftype' => array('skos:ConceptScheme'),
- 'name' => array(
- 'predicates' => array('dc:title'),
- ),
- 'description' => array(
- 'predicates' => array('rdfs:comment'),
- ),
- ),
- ),
- );
-}
-
-/**
- * @defgroup taxonomy_index Taxonomy indexing
- * @{
- * Functions to maintain taxonomy indexing.
- *
- * Taxonomy uses default field storage to store canonical relationships
- * between terms and fieldable entities. However its most common use case
- * requires listing all content associated with a term or group of terms
- * sorted by creation date. To avoid slow queries due to joining across
- * multiple node and field tables with various conditions and order by criteria,
- * we maintain a denormalized table with all relationships between terms,
- * published nodes and common sort criteria such as sticky and created.
- * This is used as a lookup table by taxonomy_select_nodes(). When using other
- * field storage engines or alternative methods of denormalizing this data
- * you should set the variable 'taxonomy_maintain_index_table' to FALSE
- * to avoid unnecessary writes in SQL.
- */
-
-/**
- * Implements hook_field_presave().
- *
- * Create any new terms defined in a freetagging vocabulary.
- */
-function taxonomy_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) {
- foreach ($items as $delta => $item) {
- if ($item['tid'] == 'autocreate') {
- $term = (object) $item;
- unset($term->tid);
- taxonomy_term_save($term);
- $items[$delta]['tid'] = $term->tid;
- }
- }
-}
-
-/**
- * Implements hook_node_insert().
- */
-function taxonomy_node_insert($node) {
- // Add taxonomy index entries for the node.
- taxonomy_build_node_index($node);
-}
-
-/**
- * Builds and inserts taxonomy index entries for a given node.
- *
- * The index lists all terms that are related to a given node entity, and is
- * therefore maintained at the entity level.
- *
- * @param $node
- * The node object.
- */
-function taxonomy_build_node_index($node) {
- // We maintain a denormalized table of term/node relationships, containing
- // only data for current, published nodes.
- $status = NULL;
- if (variable_get('taxonomy_maintain_index_table', TRUE)) {
- // If a node property is not set in the node object when node_save() is
- // called, the old value from $node->original is used.
- if (!empty($node->original)) {
- $status = (int)(!empty($node->status) || (!isset($node->status) && !empty($node->original->status)));
- $sticky = (int)(!empty($node->sticky) || (!isset($node->sticky) && !empty($node->original->sticky)));
- }
- else {
- $status = (int)(!empty($node->status));
- $sticky = (int)(!empty($node->sticky));
- }
- }
- // We only maintain the taxonomy index for published nodes.
- if ($status) {
- // Collect a unique list of all the term IDs from all node fields.
- $tid_all = array();
- foreach (field_info_instances('node', $node->type) as $instance) {
- $field_name = $instance['field_name'];
- $field = field_info_field($field_name);
- if ($field['module'] == 'taxonomy' && $field['storage']['type'] == 'field_sql_storage') {
- // If a field value is not set in the node object when node_save() is
- // called, the old value from $node->original is used.
- if (isset($node->{$field_name})) {
- $items = $node->{$field_name};
- }
- elseif (isset($node->original->{$field_name})) {
- $items = $node->original->{$field_name};
- }
- else {
- continue;
- }
- foreach (field_available_languages('node', $field) as $langcode) {
- if (!empty($items[$langcode])) {
- foreach ($items[$langcode] as $item) {
- $tid_all[$item['tid']] = $item['tid'];
- }
- }
- }
- }
- }
- // Insert index entries for all the node's terms.
- if (!empty($tid_all)) {
- $query = db_insert('taxonomy_index')->fields(array('nid', 'tid', 'sticky', 'created'));
- foreach ($tid_all as $tid) {
- $query->values(array(
- 'nid' => $node->nid,
- 'tid' => $tid,
- 'sticky' => $sticky,
- 'created' => $node->created,
- ));
- }
- $query->execute();
- }
- }
-}
-
-/**
- * Implements hook_node_update().
- */
-function taxonomy_node_update($node) {
- // Always rebuild the node's taxonomy index entries on node save.
- taxonomy_delete_node_index($node);
- taxonomy_build_node_index($node);
-}
-
-/**
- * Implements hook_node_delete().
- */
-function taxonomy_node_delete($node) {
- // Clean up the {taxonomy_index} table when nodes are deleted.
- taxonomy_delete_node_index($node);
-}
-
-/**
- * Deletes taxonomy index entries for a given node.
- *
- * @param $node
- * The node object.
- */
-function taxonomy_delete_node_index($node) {
- if (variable_get('taxonomy_maintain_index_table', TRUE)) {
- db_delete('taxonomy_index')->condition('nid', $node->nid)->execute();
- }
-}
-
-/**
- * Implements hook_taxonomy_term_delete().
- */
-function taxonomy_taxonomy_term_delete($term) {
- if (variable_get('taxonomy_maintain_index_table', TRUE)) {
- // Clean up the {taxonomy_index} table when terms are deleted.
- db_delete('taxonomy_index')->condition('tid', $term->tid)->execute();
- }
-}
-
-/**
- * @} End of "defgroup taxonomy_index".
- */
-
-/**
- * Implements hook_entity_query_alter().
- *
- * Converts EntityFieldQuery instances on taxonomy terms that have an entity
- * condition on term bundles (vocabulary machine names). Since the vocabulary
- * machine name is not present in the {taxonomy_term_data} table itself, we have
- * to convert the bundle condition into a property condition of vocabulary IDs
- * to match against {taxonomy_term_data}.vid.
- */
-function taxonomy_entity_query_alter($query) {
- $conditions = &$query->entityConditions;
-
- // Alter only taxonomy term queries with bundle conditions.
- if (isset($conditions['entity_type']) && $conditions['entity_type']['value'] == 'taxonomy_term' && isset($conditions['bundle'])) {
- // Convert vocabulary machine names to vocabulary IDs.
- $vocabulary_data = taxonomy_vocabulary_get_names();
- $vids = array();
- if (is_array($conditions['bundle']['value'])) {
- foreach ($conditions['bundle']['value'] as $vocabulary_machine_name) {
- $vids[] = $vocabulary_data[$vocabulary_machine_name]->vid;
- }
- }
- else {
- $vocabulary_machine_name = $conditions['bundle']['value'];
- $vids = $vocabulary_data[$vocabulary_machine_name]->vid;
- }
-
- $query->propertyCondition('vid', $vids, $conditions['bundle']['operator']);
- unset($conditions['bundle']);
- }
-}
diff --git a/modules/taxonomy/taxonomy.pages.inc b/modules/taxonomy/taxonomy.pages.inc
deleted file mode 100644
index 975ff12..0000000
--- a/modules/taxonomy/taxonomy.pages.inc
+++ /dev/null
@@ -1,181 +0,0 @@
-name);
-
- // Build breadcrumb based on the hierarchy of the term.
- $current = (object) array(
- 'tid' => $term->tid,
- );
- // @todo This overrides any other possible breadcrumb and is a pure hard-coded
- // presumption. Make this behavior configurable per vocabulary or term.
- $breadcrumb = array();
- while ($parents = taxonomy_get_parents($current->tid)) {
- $current = array_shift($parents);
- $breadcrumb[] = l($current->name, 'taxonomy/term/' . $current->tid);
- }
- $breadcrumb[] = l(t('Home'), NULL);
- $breadcrumb = array_reverse($breadcrumb);
- drupal_set_breadcrumb($breadcrumb);
- drupal_add_feed('taxonomy/term/' . $term->tid . '/feed', 'RSS - ' . $term->name);
-
- // Set the term path as the canonical URL to prevent duplicate content.
- $uri = entity_uri('taxonomy_term', $term);
- drupal_add_html_head_link(array('rel' => 'canonical', 'href' => url($uri['path'], $uri['options'])), TRUE);
- // Set the non-aliased path as a default shortlink.
- drupal_add_html_head_link(array('rel' => 'shortlink', 'href' => url($uri['path'], array_merge($uri['options'], array('alias' => TRUE)))), TRUE);
-
- // Normally we would call taxonomy_term_show() here, but for backwards
- // compatibility in Drupal 7 we do not want to do that (it produces different
- // data structures and HTML markup than what Drupal 7 released with). Calling
- // taxonomy_term_view() directly provides essentially the same thing, but
- // allows us to wrap the rendered term in our desired array structure.
- $build['term_heading'] = array(
- '#prefix' => '',
- '#suffix' => '
',
- 'term' => taxonomy_term_view($term, 'full'),
- );
-
- if ($nids = taxonomy_select_nodes($term->tid, TRUE, variable_get('default_nodes_main', 10))) {
- $nodes = node_load_multiple($nids);
- $build += node_view_multiple($nodes);
- $build['pager'] = array(
- '#theme' => 'pager',
- '#weight' => 5,
- );
- }
- else {
- $build['no_content'] = array(
- '#prefix' => '',
- '#markup' => t('There is currently no content classified with this term.'),
- '#suffix' => '
',
- );
- }
- return $build;
-}
-
-/**
- * Generate the content feed for a taxonomy term.
- *
- * @param $term
- * The taxonomy term.
- */
-function taxonomy_term_feed($term) {
- $channel['link'] = url('taxonomy/term/' . $term->tid, array('absolute' => TRUE));
- $channel['title'] = variable_get('site_name', 'Drupal') . ' - ' . $term->name;
- // Only display the description if we have a single term, to avoid clutter and confusion.
- // HTML will be removed from feed description.
- $channel['description'] = check_markup($term->description, $term->format, '', TRUE);
- $nids = taxonomy_select_nodes($term->tid, FALSE, variable_get('feed_default_items', 10));
-
- node_feed($nids, $channel);
-}
-
-/**
- * Page callback: Outputs JSON for taxonomy autocomplete suggestions.
- *
- * Path: taxonomy/autocomplete
- *
- * This callback outputs term name suggestions in response to Ajax requests
- * made by the taxonomy autocomplete widget for taxonomy term reference
- * fields. The output is a JSON object of plain-text term suggestions, keyed by
- * the user-entered value with the completed term name appended. Term names
- * containing commas are wrapped in quotes.
- *
- * For example, suppose the user has entered the string 'red fish, blue' in the
- * field, and there are two taxonomy terms, 'blue fish' and 'blue moon'. The
- * JSON output would have the following structure:
- * @code
- * {
- * "red fish, blue fish": "blue fish",
- * "red fish, blue moon": "blue moon",
- * };
- * @endcode
- *
- * @param $field_name
- * The name of the term reference field.
- * @param $tags_typed
- * (optional) A comma-separated list of term names entered in the
- * autocomplete form element. Only the last term is used for autocompletion.
- * Defaults to '' (an empty string).
- *
- * @see taxonomy_menu()
- * @see taxonomy_field_widget_info()
- */
-function taxonomy_autocomplete($field_name = '', $tags_typed = '') {
- // If the request has a '/' in the search text, then the menu system will have
- // split it into multiple arguments, recover the intended $tags_typed.
- $args = func_get_args();
- // Shift off the $field_name argument.
- array_shift($args);
- $tags_typed = implode('/', $args);
-
- // Make sure the field exists and is a taxonomy field.
- if (!($field = field_info_field($field_name)) || $field['type'] !== 'taxonomy_term_reference') {
- // Error string. The JavaScript handler will realize this is not JSON and
- // will display it as debugging information.
- print t('Taxonomy field @field_name not found.', array('@field_name' => $field_name));
- exit;
- }
-
- // The user enters a comma-separated list of tags. We only autocomplete the last tag.
- $tags_typed = drupal_explode_tags($tags_typed);
- $tag_last = drupal_strtolower(array_pop($tags_typed));
-
- $term_matches = array();
- if ($tag_last != '') {
-
- // Part of the criteria for the query come from the field's own settings.
- $vids = array();
- $vocabularies = taxonomy_vocabulary_get_names();
- foreach ($field['settings']['allowed_values'] as $tree) {
- $vids[] = $vocabularies[$tree['vocabulary']]->vid;
- }
-
- $query = db_select('taxonomy_term_data', 't');
- $query->addTag('translatable');
- $query->addTag('term_access');
-
- // Do not select already entered terms.
- if (!empty($tags_typed)) {
- $query->condition('t.name', $tags_typed, 'NOT IN');
- }
- // Select rows that match by term name.
- $tags_return = $query
- ->fields('t', array('tid', 'name'))
- ->condition('t.vid', $vids)
- ->condition('t.name', '%' . db_like($tag_last) . '%', 'LIKE')
- ->range(0, 10)
- ->execute()
- ->fetchAllKeyed();
-
- $prefix = count($tags_typed) ? drupal_implode_tags($tags_typed) . ', ' : '';
-
- foreach ($tags_return as $tid => $name) {
- $n = $name;
- // Term names containing commas or quotes must be wrapped in quotes.
- if (strpos($name, ',') !== FALSE || strpos($name, '"') !== FALSE) {
- $n = '"' . str_replace('"', '""', $name) . '"';
- }
- $term_matches[$prefix . $n] = check_plain($name);
- }
- }
-
- drupal_json_output($term_matches);
-}
diff --git a/modules/taxonomy/taxonomy.test b/modules/taxonomy/taxonomy.test
deleted file mode 100644
index fdf354b..0000000
--- a/modules/taxonomy/taxonomy.test
+++ /dev/null
@@ -1,1985 +0,0 @@
-name = $this->randomName();
- $vocabulary->description = $this->randomName();
- $vocabulary->machine_name = drupal_strtolower($this->randomName());
- $vocabulary->help = '';
- $vocabulary->nodes = array('article' => 'article');
- $vocabulary->weight = mt_rand(0, 10);
- taxonomy_vocabulary_save($vocabulary);
- return $vocabulary;
- }
-
- /**
- * Returns a new term with random properties in vocabulary $vid.
- */
- function createTerm($vocabulary) {
- $term = new stdClass();
- $term->name = $this->randomName();
- $term->description = $this->randomName();
- // Use the first available text format.
- $term->format = db_query_range('SELECT format FROM {filter_format}', 0, 1)->fetchField();
- $term->vid = $vocabulary->vid;
- taxonomy_term_save($term);
- return $term;
- }
-
-}
-
-/**
- * Tests the taxonomy vocabulary interface.
- */
-class TaxonomyVocabularyFunctionalTest extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy vocabulary interface',
- 'description' => 'Test the taxonomy vocabulary interface.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp();
- $this->admin_user = $this->drupalCreateUser(array('administer taxonomy'));
- $this->drupalLogin($this->admin_user);
- $this->vocabulary = $this->createVocabulary();
- }
-
- /**
- * Create, edit and delete a vocabulary via the user interface.
- */
- function testVocabularyInterface() {
- // Visit the main taxonomy administration page.
- $this->drupalGet('admin/structure/taxonomy');
-
- // Create a new vocabulary.
- $this->clickLink(t('Add vocabulary'));
- $edit = array();
- $machine_name = drupal_strtolower($this->randomName());
- $edit['name'] = $this->randomName();
- $edit['description'] = $this->randomName();
- $edit['machine_name'] = $machine_name;
- $this->drupalPost(NULL, $edit, t('Save'));
- $this->assertRaw(t('Created new vocabulary %name.', array('%name' => $edit['name'])), 'Vocabulary created successfully.');
-
- // Edit the vocabulary.
- $this->drupalGet('admin/structure/taxonomy');
- $this->assertText($edit['name'], 'Vocabulary found in the vocabulary overview listing.');
- $this->clickLink(t('edit vocabulary'));
- $edit = array();
- $edit['name'] = $this->randomName();
- $this->drupalPost(NULL, $edit, t('Save'));
- $this->drupalGet('admin/structure/taxonomy');
- $this->assertText($edit['name'], 'Vocabulary found in the vocabulary overview listing.');
-
- // Try to submit a vocabulary with a duplicate machine name.
- $edit['machine_name'] = $machine_name;
- $this->drupalPost('admin/structure/taxonomy/add', $edit, t('Save'));
- $this->assertText(t('The machine-readable name is already in use. It must be unique.'));
-
- // Try to submit an invalid machine name.
- $edit['machine_name'] = '!&^%';
- $this->drupalPost('admin/structure/taxonomy/add', $edit, t('Save'));
- $this->assertText(t('The machine-readable name must contain only lowercase letters, numbers, and underscores.'));
-
- // Ensure that vocabulary titles are escaped properly.
- $edit = array();
- $edit['name'] = 'Don\'t Panic';
- $edit['description'] = $this->randomName();
- $edit['machine_name'] = 'don_t_panic';
- $this->drupalPost('admin/structure/taxonomy/add', $edit, t('Save'));
-
- $site_name = variable_get('site_name', 'Drupal');
- $this->drupalGet('admin/structure/taxonomy/don_t_panic');
- $this->assertTitle(t('Don\'t Panic | @site-name', array('@site-name' => $site_name)));
- $this->assertNoTitle(t('Don't Panic | @site-name', array('@site-name' => $site_name)));
- }
-
- /**
- * Changing weights on the vocabulary overview with two or more vocabularies.
- */
- function testTaxonomyAdminChangingWeights() {
- // Create some vocabularies.
- for ($i = 0; $i < 10; $i++) {
- $this->createVocabulary();
- }
- // Get all vocabularies and change their weights.
- $vocabularies = taxonomy_get_vocabularies();
- $edit = array();
- foreach ($vocabularies as $key => $vocabulary) {
- $vocabulary->weight = -$vocabulary->weight;
- $vocabularies[$key]->weight = $vocabulary->weight;
- $edit[$key . '[weight]'] = $vocabulary->weight;
- }
- // Saving the new weights via the interface.
- $this->drupalPost('admin/structure/taxonomy', $edit, t('Save'));
-
- // Load the vocabularies from the database.
- $new_vocabularies = taxonomy_get_vocabularies();
-
- // Check that the weights are saved in the database correctly.
- foreach ($vocabularies as $key => $vocabulary) {
- $this->assertEqual($new_vocabularies[$key]->weight, $vocabularies[$key]->weight, 'The vocabulary weight was changed.');
- }
- }
-
- /**
- * Test the vocabulary overview with no vocabularies.
- */
- function testTaxonomyAdminNoVocabularies() {
- // Delete all vocabularies.
- $vocabularies = taxonomy_get_vocabularies();
- foreach ($vocabularies as $key => $vocabulary) {
- taxonomy_vocabulary_delete($key);
- }
- // Confirm that no vocabularies are found in the database.
- $this->assertFalse(taxonomy_get_vocabularies(), 'No vocabularies found in the database.');
- $this->drupalGet('admin/structure/taxonomy');
- // Check the default message for no vocabularies.
- $this->assertText(t('No vocabularies available.'), 'No vocabularies were found.');
- }
-
- /**
- * Deleting a vocabulary.
- */
- function testTaxonomyAdminDeletingVocabulary() {
- // Create a vocabulary.
- $edit = array(
- 'name' => $this->randomName(),
- 'machine_name' => drupal_strtolower($this->randomName()),
- );
- $this->drupalPost('admin/structure/taxonomy/add', $edit, t('Save'));
- $this->assertText(t('Created new vocabulary'), 'New vocabulary was created.');
-
- // Check the created vocabulary.
- $vocabularies = taxonomy_get_vocabularies();
- $vocabularies_keys = array_keys($vocabularies);
- $vid = $vocabularies[end($vocabularies_keys)]->vid;
- entity_get_controller('taxonomy_vocabulary')->resetCache();
- $vocabulary = taxonomy_vocabulary_load($vid);
- $this->assertTrue($vocabulary, 'Vocabulary found in database.');
-
- // Delete the vocabulary.
- $edit = array();
- $this->drupalPost('admin/structure/taxonomy/' . $vocabulary->machine_name . '/edit', $edit, t('Delete'));
- $this->assertRaw(t('Are you sure you want to delete the vocabulary %name?', array('%name' => $vocabulary->name)), '[confirm deletion] Asks for confirmation.');
- $this->assertText(t('Deleting a vocabulary will delete all the terms in it. This action cannot be undone.'), '[confirm deletion] Inform that all terms will be deleted.');
-
- // Confirm deletion.
- $this->drupalPost(NULL, NULL, t('Delete'));
- $this->assertRaw(t('Deleted vocabulary %name.', array('%name' => $vocabulary->name)), 'Vocabulary deleted.');
- entity_get_controller('taxonomy_vocabulary')->resetCache();
- $this->assertFalse(taxonomy_vocabulary_load($vid), 'Vocabulary is not found in the database.');
- }
-
-}
-
-/**
- * Tests for taxonomy vocabulary functions.
- */
-class TaxonomyVocabularyTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy vocabularies',
- 'description' => 'Test loading, saving and deleting vocabularies.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp('taxonomy', 'field_test');
- $admin_user = $this->drupalCreateUser(array('create article content', 'administer taxonomy'));
- $this->drupalLogin($admin_user);
- $this->vocabulary = $this->createVocabulary();
- }
-
- /**
- * Ensure that when an invalid vocabulary vid is loaded, it is possible
- * to load the same vid successfully if it subsequently becomes valid.
- */
- function testTaxonomyVocabularyLoadReturnFalse() {
- // Load a vocabulary that doesn't exist.
- $vocabularies = taxonomy_get_vocabularies();
- $vid = count($vocabularies) + 1;
- $vocabulary = taxonomy_vocabulary_load($vid);
- // This should not return an object because no such vocabulary exists.
- $this->assertTrue(empty($vocabulary), 'No object loaded.');
-
- // Create a new vocabulary.
- $this->createVocabulary();
- // Load the vocabulary with the same $vid from earlier.
- // This should return a vocabulary object since it now matches a real vid.
- $vocabulary = taxonomy_vocabulary_load($vid);
- $this->assertTrue(!empty($vocabulary) && is_object($vocabulary), 'Vocabulary is an object.');
- $this->assertEqual($vocabulary->vid, $vid, 'Valid vocabulary vid is the same as our previously invalid one.');
- }
-
- /**
- * Test deleting a taxonomy that contains terms.
- */
- function testTaxonomyVocabularyDeleteWithTerms() {
- // Delete any existing vocabularies.
- foreach (taxonomy_get_vocabularies() as $vocabulary) {
- taxonomy_vocabulary_delete($vocabulary->vid);
- }
-
- // Assert that there are no terms left.
- $this->assertEqual(0, db_query('SELECT COUNT(*) FROM {taxonomy_term_data}')->fetchField());
-
- // Create a new vocabulary and add a few terms to it.
- $vocabulary = $this->createVocabulary();
- $terms = array();
- for ($i = 0; $i < 5; $i++) {
- $terms[$i] = $this->createTerm($vocabulary);
- }
-
- // Set up hierarchy. term 2 is a child of 1 and 4 a child of 1 and 2.
- $terms[2]->parent = array($terms[1]->tid);
- taxonomy_term_save($terms[2]);
- $terms[4]->parent = array($terms[1]->tid, $terms[2]->tid);
- taxonomy_term_save($terms[4]);
-
- // Assert that there are now 5 terms.
- $this->assertEqual(5, db_query('SELECT COUNT(*) FROM {taxonomy_term_data}')->fetchField());
-
- taxonomy_vocabulary_delete($vocabulary->vid);
-
- // Assert that there are no terms left.
- $this->assertEqual(0, db_query('SELECT COUNT(*) FROM {taxonomy_term_data}')->fetchField());
- }
-
- /**
- * Ensure that the vocabulary static reset works correctly.
- */
- function testTaxonomyVocabularyLoadStaticReset() {
- $original_vocabulary = taxonomy_vocabulary_load($this->vocabulary->vid);
- $this->assertTrue(is_object($original_vocabulary), 'Vocabulary loaded successfully.');
- $this->assertEqual($this->vocabulary->name, $original_vocabulary->name, 'Vocabulary loaded successfully.');
-
- // Change the name and description.
- $vocabulary = $original_vocabulary;
- $vocabulary->name = $this->randomName();
- $vocabulary->description = $this->randomName();
- taxonomy_vocabulary_save($vocabulary);
-
- // Load the vocabulary.
- $new_vocabulary = taxonomy_vocabulary_load($original_vocabulary->vid);
- $this->assertEqual($new_vocabulary->name, $vocabulary->name);
- $this->assertEqual($new_vocabulary->name, $vocabulary->name);
-
- // Delete the vocabulary.
- taxonomy_vocabulary_delete($this->vocabulary->vid);
- $vocabularies = taxonomy_get_vocabularies();
- $this->assertTrue(!isset($vocabularies[$this->vocabulary->vid]), 'The vocabulary was deleted.');
- }
-
- /**
- * Tests for loading multiple vocabularies.
- */
- function testTaxonomyVocabularyLoadMultiple() {
-
- // Delete any existing vocabularies.
- foreach (taxonomy_get_vocabularies() as $vocabulary) {
- taxonomy_vocabulary_delete($vocabulary->vid);
- }
-
- // Create some vocabularies and assign weights.
- $vocabulary1 = $this->createVocabulary();
- $vocabulary1->weight = 0;
- taxonomy_vocabulary_save($vocabulary1);
- $vocabulary2 = $this->createVocabulary();
- $vocabulary2->weight = 1;
- taxonomy_vocabulary_save($vocabulary2);
- $vocabulary3 = $this->createVocabulary();
- $vocabulary3->weight = 2;
- taxonomy_vocabulary_save($vocabulary3);
-
- // Fetch the names for all vocabularies, confirm that they are keyed by
- // machine name.
- $names = taxonomy_vocabulary_get_names();
- $this->assertEqual($names[$vocabulary1->machine_name]->name, $vocabulary1->name, 'Vocabulary 1 name found.');
-
- // Fetch all of the vocabularies using taxonomy_get_vocabularies().
- // Confirm that the vocabularies are ordered by weight.
- $vocabularies = taxonomy_get_vocabularies();
- $this->assertEqual(array_shift($vocabularies)->vid, $vocabulary1->vid, 'Vocabulary was found in the vocabularies array.');
- $this->assertEqual(array_shift($vocabularies)->vid, $vocabulary2->vid, 'Vocabulary was found in the vocabularies array.');
- $this->assertEqual(array_shift($vocabularies)->vid, $vocabulary3->vid, 'Vocabulary was found in the vocabularies array.');
-
- // Fetch the vocabularies with taxonomy_vocabulary_load_multiple(), specifying IDs.
- // Ensure they are returned in the same order as the original array.
- $vocabularies = taxonomy_vocabulary_load_multiple(array($vocabulary3->vid, $vocabulary2->vid, $vocabulary1->vid));
- $this->assertEqual(array_shift($vocabularies)->vid, $vocabulary3->vid, 'Vocabulary loaded successfully by ID.');
- $this->assertEqual(array_shift($vocabularies)->vid, $vocabulary2->vid, 'Vocabulary loaded successfully by ID.');
- $this->assertEqual(array_shift($vocabularies)->vid, $vocabulary1->vid, 'Vocabulary loaded successfully by ID.');
-
- // Fetch vocabulary 1 by name.
- $vocabulary = current(taxonomy_vocabulary_load_multiple(array(), array('name' => $vocabulary1->name)));
- $this->assertEqual($vocabulary->vid, $vocabulary1->vid, 'Vocabulary loaded successfully by name.');
-
- // Fetch vocabulary 1 by name and ID.
- $this->assertEqual(current(taxonomy_vocabulary_load_multiple(array($vocabulary1->vid), array('name' => $vocabulary1->name)))->vid, $vocabulary1->vid, 'Vocabulary loaded successfully by name and ID.');
- }
-
- /**
- * Tests that machine name changes are properly reflected.
- */
- function testTaxonomyVocabularyChangeMachineName() {
- // Add a field instance to the vocabulary.
- $field = array(
- 'field_name' => 'field_test',
- 'type' => 'test_field',
- );
- field_create_field($field);
- $instance = array(
- 'field_name' => 'field_test',
- 'entity_type' => 'taxonomy_term',
- 'bundle' => $this->vocabulary->machine_name,
- );
- field_create_instance($instance);
-
- // Change the machine name.
- $new_name = drupal_strtolower($this->randomName());
- $this->vocabulary->machine_name = $new_name;
- taxonomy_vocabulary_save($this->vocabulary);
-
- // Check that the field instance is still attached to the vocabulary.
- $this->assertTrue(field_info_instance('taxonomy_term', 'field_test', $new_name), 'The bundle name was updated correctly.');
- }
-
- /**
- * Test uninstall and reinstall of the taxonomy module.
- */
- function testUninstallReinstall() {
- // Fields and field instances attached to taxonomy term bundles should be
- // removed when the module is uninstalled.
- $this->field_name = drupal_strtolower($this->randomName() . '_field_name');
- $this->field = array('field_name' => $this->field_name, 'type' => 'text', 'cardinality' => 4);
- $this->field = field_create_field($this->field);
- $this->instance = array(
- 'field_name' => $this->field_name,
- 'entity_type' => 'taxonomy_term',
- 'bundle' => $this->vocabulary->machine_name,
- 'label' => $this->randomName() . '_label',
- );
- field_create_instance($this->instance);
-
- module_disable(array('taxonomy'));
- require_once DRUPAL_ROOT . '/includes/install.inc';
- drupal_uninstall_modules(array('taxonomy'));
- module_enable(array('taxonomy'));
-
- // Now create a vocabulary with the same name. All field instances
- // connected to this vocabulary name should have been removed when the
- // module was uninstalled. Creating a new field with the same name and
- // an instance of this field on the same bundle name should be successful.
- unset($this->vocabulary->vid);
- taxonomy_vocabulary_save($this->vocabulary);
- unset($this->field['id']);
- field_create_field($this->field);
- field_create_instance($this->instance);
- }
-
-}
-
-/**
- * Unit tests for taxonomy term functions.
- */
-class TaxonomyTermFunctionTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy term unit tests',
- 'description' => 'Unit tests for taxonomy term functions.',
- 'group' => 'Taxonomy',
- );
- }
-
- function testTermDelete() {
- $vocabulary = $this->createVocabulary();
- $valid_term = $this->createTerm($vocabulary);
- // Delete a valid term.
- taxonomy_term_delete($valid_term->tid);
- $terms = taxonomy_term_load_multiple(array(), array('vid' => $vocabulary->vid));
- $this->assertTrue(empty($terms), 'Vocabulary is empty after deletion.');
-
- // Delete an invalid term. Should not throw any notices.
- taxonomy_term_delete(42);
- }
-
- /**
- * Test a taxonomy with terms that have multiple parents of different depths.
- */
- function testTaxonomyVocabularyTree() {
- // Create a new vocabulary with 6 terms.
- $vocabulary = $this->createVocabulary();
- $term = array();
- for ($i = 0; $i < 6; $i++) {
- $term[$i] = $this->createTerm($vocabulary);
- }
-
- // $term[2] is a child of 1 and 5.
- $term[2]->parent = array($term[1]->tid, $term[5]->tid);
- taxonomy_term_save($term[2]);
- // $term[3] is a child of 2.
- $term[3]->parent = array($term[2]->tid);
- taxonomy_term_save($term[3]);
- // $term[5] is a child of 4.
- $term[5]->parent = array($term[4]->tid);
- taxonomy_term_save($term[5]);
-
- /**
- * Expected tree:
- * term[0] | depth: 0
- * term[1] | depth: 0
- * -- term[2] | depth: 1
- * ---- term[3] | depth: 2
- * term[4] | depth: 0
- * -- term[5] | depth: 1
- * ---- term[2] | depth: 2
- * ------ term[3] | depth: 3
- */
- // Count $term[1] parents with $max_depth = 1.
- $tree = taxonomy_get_tree($vocabulary->vid, $term[1]->tid, 1);
- $this->assertEqual(1, count($tree), 'We have one parent with depth 1.');
-
- // Count all vocabulary tree elements.
- $tree = taxonomy_get_tree($vocabulary->vid);
- $this->assertEqual(8, count($tree), 'We have all vocabulary tree elements.');
-
- // Count elements in every tree depth.
- foreach ($tree as $element) {
- if (!isset($depth_count[$element->depth])) {
- $depth_count[$element->depth] = 0;
- }
- $depth_count[$element->depth]++;
- }
- $this->assertEqual(3, $depth_count[0], 'Three elements in taxonomy tree depth 0.');
- $this->assertEqual(2, $depth_count[1], 'Two elements in taxonomy tree depth 1.');
- $this->assertEqual(2, $depth_count[2], 'Two elements in taxonomy tree depth 2.');
- $this->assertEqual(1, $depth_count[3], 'One element in taxonomy tree depth 3.');
- }
-
-}
-
-/**
- * Test for legacy node bug.
- */
-class TaxonomyLegacyTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Test for legacy node bug.',
- 'description' => 'Posts an article with a taxonomy term and a date prior to 1970.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp('taxonomy');
- $this->admin_user = $this->drupalCreateUser(array('administer taxonomy', 'administer nodes', 'bypass node access'));
- $this->drupalLogin($this->admin_user);
- }
-
- /**
- * Test taxonomy functionality with nodes prior to 1970.
- */
- function testTaxonomyLegacyNode() {
- // Posts an article with a taxonomy term and a date prior to 1970.
- $langcode = LANGUAGE_NONE;
- $edit = array();
- $edit['title'] = $this->randomName();
- $edit['date'] = '1969-01-01 00:00:00 -0500';
- $edit["body[$langcode][0][value]"] = $this->randomName();
- $edit["field_tags[$langcode]"] = $this->randomName();
- $this->drupalPost('node/add/article', $edit, t('Save'));
- // Checks that the node has been saved.
- $node = $this->drupalGetNodeByTitle($edit['title']);
- $this->assertEqual($node->created, strtotime($edit['date']), 'Legacy node was saved with the right date.');
- }
-
-}
-
-/**
- * Tests for taxonomy term functions.
- */
-class TaxonomyTermTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy term functions and forms.',
- 'description' => 'Test load, save and delete for taxonomy terms.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp('taxonomy');
- $this->admin_user = $this->drupalCreateUser(array('administer taxonomy', 'bypass node access'));
- $this->drupalLogin($this->admin_user);
- $this->vocabulary = $this->createVocabulary();
-
- $field = array(
- 'field_name' => 'taxonomy_' . $this->vocabulary->machine_name,
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => $this->vocabulary->machine_name,
- 'parent' => 0,
- ),
- ),
- ),
- );
- field_create_field($field);
-
- $this->instance = array(
- 'field_name' => 'taxonomy_' . $this->vocabulary->machine_name,
- 'bundle' => 'article',
- 'entity_type' => 'node',
- 'widget' => array(
- 'type' => 'options_select',
- ),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- ),
- ),
- );
- field_create_instance($this->instance);
- }
-
- /**
- * Test terms in a single and multiple hierarchy.
- */
- function testTaxonomyTermHierarchy() {
- // Create two taxonomy terms.
- $term1 = $this->createTerm($this->vocabulary);
- $term2 = $this->createTerm($this->vocabulary);
-
- // Check that hierarchy is flat.
- $vocabulary = taxonomy_vocabulary_load($this->vocabulary->vid);
- $this->assertEqual(0, $vocabulary->hierarchy, 'Vocabulary is flat.');
-
- // Edit $term2, setting $term1 as parent.
- $edit = array();
- $edit['parent[]'] = array($term1->tid);
- $this->drupalPost('taxonomy/term/' . $term2->tid . '/edit', $edit, t('Save'));
-
- // Check the hierarchy.
- $children = taxonomy_get_children($term1->tid);
- $parents = taxonomy_get_parents($term2->tid);
- $this->assertTrue(isset($children[$term2->tid]), 'Child found correctly.');
- $this->assertTrue(isset($parents[$term1->tid]), 'Parent found correctly.');
-
- // Load and save a term, confirming that parents are still set.
- $term = taxonomy_term_load($term2->tid);
- taxonomy_term_save($term);
- $parents = taxonomy_get_parents($term2->tid);
- $this->assertTrue(isset($parents[$term1->tid]), 'Parent found correctly.');
-
- // Create a third term and save this as a parent of term2.
- $term3 = $this->createTerm($this->vocabulary);
- $term2->parent = array($term1->tid, $term3->tid);
- taxonomy_term_save($term2);
- $parents = taxonomy_get_parents($term2->tid);
- $this->assertTrue(isset($parents[$term1->tid]) && isset($parents[$term3->tid]), 'Both parents found successfully.');
- }
-
- /**
- * Test that hook_node_$op implementations work correctly.
- *
- * Save & edit a node and assert that taxonomy terms are saved/loaded properly.
- */
- function testTaxonomyNode() {
- // Create two taxonomy terms.
- $term1 = $this->createTerm($this->vocabulary);
- $term2 = $this->createTerm($this->vocabulary);
-
- // Post an article.
- $edit = array();
- $langcode = LANGUAGE_NONE;
- $edit["title"] = $this->randomName();
- $edit["body[$langcode][0][value]"] = $this->randomName();
- $edit[$this->instance['field_name'] . '[' . $langcode . '][]'] = $term1->tid;
- $this->drupalPost('node/add/article', $edit, t('Save'));
-
- // Check that the term is displayed when the node is viewed.
- $node = $this->drupalGetNodeByTitle($edit["title"]);
- $this->drupalGet('node/' . $node->nid);
- $this->assertText($term1->name, 'Term is displayed when viewing the node.');
-
- // Edit the node with a different term.
- $edit[$this->instance['field_name'] . '[' . $langcode . '][]'] = $term2->tid;
- $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-
- $this->drupalGet('node/' . $node->nid);
- $this->assertText($term2->name, 'Term is displayed when viewing the node.');
-
- // Preview the node.
- $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Preview'));
- $this->assertNoUniqueText($term2->name, 'Term is displayed when previewing the node.');
- $this->drupalPost(NULL, NULL, t('Preview'));
- $this->assertNoUniqueText($term2->name, 'Term is displayed when previewing the node again.');
- }
-
- /**
- * Test term creation with a free-tagging vocabulary from the node form.
- */
- function testNodeTermCreationAndDeletion() {
- // Enable tags in the vocabulary.
- $instance = $this->instance;
- $instance['widget'] = array('type' => 'taxonomy_autocomplete');
- $instance['bundle'] = 'page';
- field_create_instance($instance);
- $terms = array(
- 'term1' => $this->randomName(),
- 'term2' => $this->randomName() . ', ' . $this->randomName(),
- 'term3' => $this->randomName(),
- );
-
- $edit = array();
- $langcode = LANGUAGE_NONE;
- $edit["title"] = $this->randomName();
- $edit["body[$langcode][0][value]"] = $this->randomName();
- // Insert the terms in a comma separated list. Vocabulary 1 is a
- // free-tagging field created by the default profile.
- $edit[$instance['field_name'] . "[$langcode]"] = drupal_implode_tags($terms);
-
- // Preview and verify the terms appear but are not created.
- $this->drupalPost('node/add/page', $edit, t('Preview'));
- foreach ($terms as $term) {
- $this->assertText($term, 'The term appears on the node preview.');
- }
- $tree = taxonomy_get_tree($this->vocabulary->vid);
- $this->assertTrue(empty($tree), 'The terms are not created on preview.');
-
- // taxonomy.module does not maintain its static caches.
- drupal_static_reset();
-
- // Save, creating the terms.
- $this->drupalPost('node/add/page', $edit, t('Save'));
- $this->assertRaw(t('@type %title has been created.', array('@type' => t('Basic page'), '%title' => $edit["title"])), 'The node was created successfully.');
- foreach ($terms as $term) {
- $this->assertText($term, 'The term was saved and appears on the node page.');
- }
-
- // Get the created terms.
- $term_objects = array();
- foreach ($terms as $key => $term) {
- $term_objects[$key] = taxonomy_get_term_by_name($term);
- $term_objects[$key] = reset($term_objects[$key]);
- }
-
- // Test editing the node.
- $node = $this->drupalGetNodeByTitle($edit["title"]);
- $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
- foreach ($terms as $term) {
- $this->assertText($term, 'The term was retained after edit and still appears on the node page.');
- }
-
- // Delete term 1.
- $this->drupalPost('taxonomy/term/' . $term_objects['term1']->tid . '/edit', array(), t('Delete'));
- $this->drupalPost(NULL, NULL, t('Delete'));
- $term_names = array($term_objects['term2']->name, $term_objects['term3']->name);
-
- // Get the node and verify that the terms that should be there still are.
- $this->drupalGet('node/' . $node->nid);
- foreach ($term_names as $term_name) {
- $this->assertText($term_name, format_string('The term %name appears on the node page after one term %deleted was deleted', array('%name' => $term_name, '%deleted' => $term_objects['term1']->name)));
- }
- $this->assertNoText($term_objects['term1']->name, format_string('The deleted term %name does not appear on the node page.', array('%name' => $term_objects['term1']->name)));
-
- // Test autocomplete on term 2, which contains a comma.
- // The term will be quoted, and the " will be encoded in unicode (\u0022).
- $input = substr($term_objects['term2']->name, 0, 3);
- $this->drupalGet('taxonomy/autocomplete/taxonomy_' . $this->vocabulary->machine_name . '/' . $input);
- $this->assertRaw('{"\u0022' . $term_objects['term2']->name . '\u0022":"' . $term_objects['term2']->name . '"}', format_string('Autocomplete returns term %term_name after typing the first 3 letters.', array('%term_name' => $term_objects['term2']->name)));
-
- // Test autocomplete on term 3 - it is alphanumeric only, so no extra
- // quoting.
- $input = substr($term_objects['term3']->name, 0, 3);
- $this->drupalGet('taxonomy/autocomplete/taxonomy_' . $this->vocabulary->machine_name . '/' . $input);
- $this->assertRaw('{"' . $term_objects['term3']->name . '":"' . $term_objects['term3']->name . '"}', format_string('Autocomplete returns term %term_name after typing the first 3 letters.', array('%term_name' => $term_objects['term3']->name)));
-
- // Test taxonomy autocomplete with a nonexistent field.
- $field_name = $this->randomName();
- $tag = $this->randomName();
- $message = t("Taxonomy field @field_name not found.", array('@field_name' => $field_name));
- $this->assertFalse(field_info_field($field_name), format_string('Field %field_name does not exist.', array('%field_name' => $field_name)));
- $this->drupalGet('taxonomy/autocomplete/' . $field_name . '/' . $tag);
- $this->assertRaw($message, 'Autocomplete returns correct error message when the taxonomy field does not exist.');
-
- // Test the autocomplete path without passing a field_name and terms.
- // This should not trigger a PHP notice.
- $field_name = '';
- $message = t("Taxonomy field @field_name not found.", array('@field_name' => $field_name));
- $this->drupalGet('taxonomy/autocomplete');
- $this->assertRaw($message, 'Autocomplete returns correct error message when no taxonomy field is given.');
- }
-
- /**
- * Tests term autocompletion edge cases with slashes in the names.
- */
- function testTermAutocompletion() {
- // Add a term with a slash in the name.
- $first_term = $this->createTerm($this->vocabulary);
- $first_term->name = '10/16/2011';
- taxonomy_term_save($first_term);
- // Add another term that differs after the slash character.
- $second_term = $this->createTerm($this->vocabulary);
- $second_term->name = '10/17/2011';
- taxonomy_term_save($second_term);
- // Add another term that has both a comma and a slash character.
- $third_term = $this->createTerm($this->vocabulary);
- $third_term->name = 'term with, a comma and / a slash';
- taxonomy_term_save($third_term);
-
- // Try to autocomplete a term name that matches both terms.
- // We should get both term in a json encoded string.
- $input = '10/';
- $path = 'taxonomy/autocomplete/taxonomy_';
- $path .= $this->vocabulary->machine_name . '/' . $input;
- // The result order is not guaranteed, so check each term separately.
- $url = url($path, array('absolute' => TRUE));
- $result = drupal_http_request($url);
- $data = drupal_json_decode($result->data);
- $this->assertEqual($data[$first_term->name], check_plain($first_term->name), 'Autocomplete returned the first matching term.');
- $this->assertEqual($data[$second_term->name], check_plain($second_term->name), 'Autocomplete returned the second matching term.');
-
- // Try to autocomplete a term name that matches first term.
- // We should only get the first term in a json encoded string.
- $input = '10/16';
- $url = 'taxonomy/autocomplete/taxonomy_';
- $url .= $this->vocabulary->machine_name . '/' . $input;
- $this->drupalGet($url);
- $target = array($first_term->name => check_plain($first_term->name));
- $this->assertRaw(drupal_json_encode($target), 'Autocomplete returns only the expected matching term.');
-
- // Try to autocomplete a term name with both a comma and a slash.
- $input = '"term with, comma and / a';
- $url = 'taxonomy/autocomplete/taxonomy_';
- $url .= $this->vocabulary->machine_name . '/' . $input;
- $this->drupalGet($url);
- $n = $third_term->name;
- // Term names containing commas or quotes must be wrapped in quotes.
- if (strpos($third_term->name, ',') !== FALSE || strpos($third_term->name, '"') !== FALSE) {
- $n = '"' . str_replace('"', '""', $third_term->name) . '"';
- }
- $target = array($n => check_plain($third_term->name));
- $this->assertRaw(drupal_json_encode($target), 'Autocomplete returns a term containing a comma and a slash.');
- }
-
- /**
- * Save, edit and delete a term using the user interface.
- */
- function testTermInterface() {
- $edit = array(
- 'name' => $this->randomName(12),
- 'description[value]' => $this->randomName(100),
- );
- // Explicitly set the parents field to 'root', to ensure that
- // taxonomy_form_term_submit() handles the invalid term ID correctly.
- $edit['parent[]'] = array(0);
-
- // Create the term to edit.
- $this->drupalPost('admin/structure/taxonomy/' . $this->vocabulary->machine_name . '/add', $edit, t('Save'));
-
- $terms = taxonomy_get_term_by_name($edit['name']);
- $term = reset($terms);
- $this->assertNotNull($term, 'Term found in database.');
-
- // Submitting a term takes us to the add page; we need the List page.
- $this->drupalGet('admin/structure/taxonomy/' . $this->vocabulary->machine_name);
-
- // Test edit link as accessed from Taxonomy administration pages.
- // Because Simpletest creates its own database when running tests, we know
- // the first edit link found on the listing page is to our term.
- $this->clickLink(t('edit'));
-
- $this->assertRaw($edit['name'], 'The randomly generated term name is present.');
- $this->assertText($edit['description[value]'], 'The randomly generated term description is present.');
-
- $edit = array(
- 'name' => $this->randomName(14),
- 'description[value]' => $this->randomName(102),
- );
-
- // Edit the term.
- $this->drupalPost('taxonomy/term/' . $term->tid . '/edit', $edit, t('Save'));
-
- // Check that the term is still present at admin UI after edit.
- $this->drupalGet('admin/structure/taxonomy/' . $this->vocabulary->machine_name);
- $this->assertText($edit['name'], 'The randomly generated term name is present.');
- $this->assertLink(t('edit'));
-
- // View the term and check that it is correct.
- $this->drupalGet('taxonomy/term/' . $term->tid);
- $this->assertText($edit['name'], 'The randomly generated term name is present.');
- $this->assertText($edit['description[value]'], 'The randomly generated term description is present.');
-
- // Did this page request display a 'term-listing-heading'?
- $this->assertPattern('|class="taxonomy-term-description"|', 'Term page displayed the term description element.');
- // Check that it does NOT show a description when description is blank.
- $term->description = '';
- taxonomy_term_save($term);
- $this->drupalGet('taxonomy/term/' . $term->tid);
- $this->assertNoPattern('|class="taxonomy-term-description"|', 'Term page did not display the term description when description was blank.');
-
- // Check that the term feed page is working.
- $this->drupalGet('taxonomy/term/' . $term->tid . '/feed');
-
- // Check that the term edit page does not try to interpret additional path
- // components as arguments for taxonomy_form_term().
- $this->drupalGet('taxonomy/term/' . $term->tid . '/edit/' . $this->randomName());
-
- // Delete the term.
- $this->drupalPost('taxonomy/term/' . $term->tid . '/edit', array(), t('Delete'));
- $this->drupalPost(NULL, NULL, t('Delete'));
-
- // Assert that the term no longer exists.
- $this->drupalGet('taxonomy/term/' . $term->tid);
- $this->assertResponse(404, 'The taxonomy term page was not found.');
- }
-
- /**
- * Save, edit and delete a term using the user interface.
- */
- function testTermReorder() {
- $this->createTerm($this->vocabulary);
- $this->createTerm($this->vocabulary);
- $this->createTerm($this->vocabulary);
-
- // Fetch the created terms in the default alphabetical order, i.e. term1
- // precedes term2 alphabetically, and term2 precedes term3.
- drupal_static_reset('taxonomy_get_tree');
- drupal_static_reset('taxonomy_get_treeparent');
- drupal_static_reset('taxonomy_get_treeterms');
- list($term1, $term2, $term3) = taxonomy_get_tree($this->vocabulary->vid);
-
- $this->drupalGet('admin/structure/taxonomy/' . $this->vocabulary->machine_name);
-
- // Each term has four hidden fields, "tid:1:0[tid]", "tid:1:0[parent]",
- // "tid:1:0[depth]", and "tid:1:0[weight]". Change the order to term2,
- // term3, term1 by setting weight property, make term3 a child of term2 by
- // setting the parent and depth properties, and update all hidden fields.
- $edit = array(
- 'tid:' . $term2->tid . ':0[tid]' => $term2->tid,
- 'tid:' . $term2->tid . ':0[parent]' => 0,
- 'tid:' . $term2->tid . ':0[depth]' => 0,
- 'tid:' . $term2->tid . ':0[weight]' => 0,
- 'tid:' . $term3->tid . ':0[tid]' => $term3->tid,
- 'tid:' . $term3->tid . ':0[parent]' => $term2->tid,
- 'tid:' . $term3->tid . ':0[depth]' => 1,
- 'tid:' . $term3->tid . ':0[weight]' => 1,
- 'tid:' . $term1->tid . ':0[tid]' => $term1->tid,
- 'tid:' . $term1->tid . ':0[parent]' => 0,
- 'tid:' . $term1->tid . ':0[depth]' => 0,
- 'tid:' . $term1->tid . ':0[weight]' => 2,
- );
- $this->drupalPost(NULL, $edit, t('Save'));
-
- drupal_static_reset('taxonomy_get_tree');
- drupal_static_reset('taxonomy_get_treeparent');
- drupal_static_reset('taxonomy_get_treeterms');
- $terms = taxonomy_get_tree($this->vocabulary->vid);
- $this->assertEqual($terms[0]->tid, $term2->tid, 'Term 2 was moved above term 1.');
- $this->assertEqual($terms[1]->parents, array($term2->tid), 'Term 3 was made a child of term 2.');
- $this->assertEqual($terms[2]->tid, $term1->tid, 'Term 1 was moved below term 2.');
-
- $this->drupalPost('admin/structure/taxonomy/' . $this->vocabulary->machine_name, array(), t('Reset to alphabetical'));
- // Submit confirmation form.
- $this->drupalPost(NULL, array(), t('Reset to alphabetical'));
-
- drupal_static_reset('taxonomy_get_tree');
- drupal_static_reset('taxonomy_get_treeparent');
- drupal_static_reset('taxonomy_get_treeterms');
- $terms = taxonomy_get_tree($this->vocabulary->vid);
- $this->assertEqual($terms[0]->tid, $term1->tid, 'Term 1 was moved to back above term 2.');
- $this->assertEqual($terms[1]->tid, $term2->tid, 'Term 2 was moved to back below term 1.');
- $this->assertEqual($terms[2]->tid, $term3->tid, 'Term 3 is still below term 2.');
- $this->assertEqual($terms[2]->parents, array($term2->tid), 'Term 3 is still a child of term 2.' . var_export($terms[1]->tid, 1));
- }
-
- /**
- * Test saving a term with multiple parents through the UI.
- */
- function testTermMultipleParentsInterface() {
- // Add a new term to the vocabulary so that we can have multiple parents.
- $parent = $this->createTerm($this->vocabulary);
-
- // Add a new term with multiple parents.
- $edit = array(
- 'name' => $this->randomName(12),
- 'description[value]' => $this->randomName(100),
- 'parent[]' => array(0, $parent->tid),
- );
- // Save the new term.
- $this->drupalPost('admin/structure/taxonomy/' . $this->vocabulary->machine_name . '/add', $edit, t('Save'));
-
- // Check that the term was successfully created.
- $terms = taxonomy_get_term_by_name($edit['name']);
- $term = reset($terms);
- $this->assertNotNull($term, 'Term found in database.');
- $this->assertEqual($edit['name'], $term->name, 'Term name was successfully saved.');
- $this->assertEqual($edit['description[value]'], $term->description, 'Term description was successfully saved.');
- // Check that the parent tid is still there. The other parent () is
- // not added by taxonomy_get_parents().
- $parents = taxonomy_get_parents($term->tid);
- $parent = reset($parents);
- $this->assertEqual($edit['parent[]'][1], $parent->tid, 'Term parents were successfully saved.');
- }
-
- /**
- * Test taxonomy_get_term_by_name().
- */
- function testTaxonomyGetTermByName() {
- $term = $this->createTerm($this->vocabulary);
-
- // Load the term with the exact name.
- $terms = taxonomy_get_term_by_name($term->name);
- $this->assertTrue(isset($terms[$term->tid]), 'Term loaded using exact name.');
-
- // Load the term with space concatenated.
- $terms = taxonomy_get_term_by_name(' ' . $term->name . ' ');
- $this->assertTrue(isset($terms[$term->tid]), 'Term loaded with extra whitespace.');
-
- // Load the term with name uppercased.
- $terms = taxonomy_get_term_by_name(strtoupper($term->name));
- $this->assertTrue(isset($terms[$term->tid]), 'Term loaded with uppercased name.');
-
- // Load the term with name lowercased.
- $terms = taxonomy_get_term_by_name(strtolower($term->name));
- $this->assertTrue(isset($terms[$term->tid]), 'Term loaded with lowercased name.');
-
- // Try to load an invalid term name.
- $terms = taxonomy_get_term_by_name('Banana');
- $this->assertFalse($terms);
-
- // Try to load the term using a substring of the name.
- $terms = taxonomy_get_term_by_name(drupal_substr($term->name, 2));
- $this->assertFalse($terms);
-
- // Create a new term in a different vocabulary with the same name.
- $new_vocabulary = $this->createVocabulary();
- $new_term = new stdClass();
- $new_term->name = $term->name;
- $new_term->vid = $new_vocabulary->vid;
- taxonomy_term_save($new_term);
-
- // Load multiple terms with the same name.
- $terms = taxonomy_get_term_by_name($term->name);
- $this->assertEqual(count($terms), 2, 'Two terms loaded with the same name.');
-
- // Load single term when restricted to one vocabulary.
- $terms = taxonomy_get_term_by_name($term->name, $this->vocabulary->machine_name);
- $this->assertEqual(count($terms), 1, 'One term loaded when restricted by vocabulary.');
- $this->assertTrue(isset($terms[$term->tid]), 'Term loaded using exact name and vocabulary machine name.');
-
- // Create a new term with another name.
- $term2 = $this->createTerm($this->vocabulary);
-
- // Try to load a term by name that doesn't exist in this vocabulary but
- // exists in another vocabulary.
- $terms = taxonomy_get_term_by_name($term2->name, $new_vocabulary->machine_name);
- $this->assertFalse($terms, 'Invalid term name restricted by vocabulary machine name not loaded.');
-
- // Try to load terms filtering by a non-existing vocabulary.
- $terms = taxonomy_get_term_by_name($term2->name, 'non_existing_vocabulary');
- $this->assertEqual(count($terms), 0, 'No terms loaded when restricted by a non-existing vocabulary.');
- }
-
-}
-
-/**
- * Tests the rendering of term reference fields in RSS feeds.
- */
-class TaxonomyRSSTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy RSS Content.',
- 'description' => 'Ensure that data added as terms appears in RSS feeds if "RSS Category" format is selected.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp('taxonomy');
- $this->admin_user = $this->drupalCreateUser(array('administer taxonomy', 'bypass node access', 'administer content types'));
- $this->drupalLogin($this->admin_user);
- $this->vocabulary = $this->createVocabulary();
-
- $field = array(
- 'field_name' => 'taxonomy_' . $this->vocabulary->machine_name,
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => $this->vocabulary->machine_name,
- 'parent' => 0,
- ),
- ),
- ),
- );
- field_create_field($field);
-
- $this->instance = array(
- 'field_name' => 'taxonomy_' . $this->vocabulary->machine_name,
- 'bundle' => 'article',
- 'entity_type' => 'node',
- 'widget' => array(
- 'type' => 'options_select',
- ),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- ),
- ),
- );
- field_create_instance($this->instance);
- }
-
- /**
- * Tests that terms added to nodes are displayed in core RSS feed.
- *
- * Create a node and assert that taxonomy terms appear in rss.xml.
- */
- function testTaxonomyRSS() {
- // Create two taxonomy terms.
- $term1 = $this->createTerm($this->vocabulary);
-
- // RSS display must be added manually.
- $this->drupalGet("admin/structure/types/manage/article/display");
- $edit = array(
- "view_modes_custom[rss]" => '1',
- );
- $this->drupalPost(NULL, $edit, t('Save'));
-
- // Change the format to 'RSS category'.
- $this->drupalGet("admin/structure/types/manage/article/display/rss");
- $edit = array(
- "fields[taxonomy_" . $this->vocabulary->machine_name . "][type]" => 'taxonomy_term_reference_rss_category',
- );
- $this->drupalPost(NULL, $edit, t('Save'));
-
- // Post an article.
- $edit = array();
- $langcode = LANGUAGE_NONE;
- $edit["title"] = $this->randomName();
- $edit[$this->instance['field_name'] . '[' . $langcode . '][]'] = $term1->tid;
- $this->drupalPost('node/add/article', $edit, t('Save'));
-
- // Check that the term is displayed when the RSS feed is viewed.
- $this->drupalGet('rss.xml');
- $test_element = array(
- 'key' => 'category',
- 'value' => $term1->name,
- 'attributes' => array(
- 'domain' => url('taxonomy/term/' . $term1->tid, array('absolute' => TRUE)),
- ),
- );
- $this->assertRaw(format_xml_elements(array($test_element)), 'Term is displayed when viewing the rss feed.');
- }
-
-}
-
-/**
- * Tests the hook implementations that maintain the taxonomy index.
- */
-class TaxonomyTermIndexTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy term index',
- 'description' => 'Tests the hook implementations that maintain the taxonomy index.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp('taxonomy');
-
- // Create an administrative user.
- $this->admin_user = $this->drupalCreateUser(array('administer taxonomy', 'bypass node access'));
- $this->drupalLogin($this->admin_user);
-
- // Create a vocabulary and add two term reference fields to article nodes.
- $this->vocabulary = $this->createVocabulary();
-
- $this->field_name_1 = drupal_strtolower($this->randomName());
- $this->field_1 = array(
- 'field_name' => $this->field_name_1,
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => $this->vocabulary->machine_name,
- 'parent' => 0,
- ),
- ),
- ),
- );
- field_create_field($this->field_1);
- $this->instance_1 = array(
- 'field_name' => $this->field_name_1,
- 'bundle' => 'article',
- 'entity_type' => 'node',
- 'widget' => array(
- 'type' => 'options_select',
- ),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- ),
- ),
- );
- field_create_instance($this->instance_1);
-
- $this->field_name_2 = drupal_strtolower($this->randomName());
- $this->field_2 = array(
- 'field_name' => $this->field_name_2,
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => $this->vocabulary->machine_name,
- 'parent' => 0,
- ),
- ),
- ),
- );
- field_create_field($this->field_2);
- $this->instance_2 = array(
- 'field_name' => $this->field_name_2,
- 'bundle' => 'article',
- 'entity_type' => 'node',
- 'widget' => array(
- 'type' => 'options_select',
- ),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- ),
- ),
- );
- field_create_instance($this->instance_2);
- }
-
- /**
- * Tests that the taxonomy index is maintained properly.
- */
- function testTaxonomyIndex() {
- // Create terms in the vocabulary.
- $term_1 = $this->createTerm($this->vocabulary);
- $term_2 = $this->createTerm($this->vocabulary);
-
- // Post an article.
- $edit = array();
- $langcode = LANGUAGE_NONE;
- $edit["title"] = $this->randomName();
- $edit["body[$langcode][0][value]"] = $this->randomName();
- $edit["{$this->field_name_1}[$langcode][]"] = $term_1->tid;
- $edit["{$this->field_name_2}[$langcode][]"] = $term_1->tid;
- $this->drupalPost('node/add/article', $edit, t('Save'));
-
- // Check that the term is indexed, and only once.
- $node = $this->drupalGetNodeByTitle($edit["title"]);
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_1->tid,
- ))->fetchField();
- $this->assertEqual(1, $index_count, 'Term 1 is indexed once.');
-
- // Update the article to change one term.
- $edit["{$this->field_name_1}[$langcode][]"] = $term_2->tid;
- $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-
- // Check that both terms are indexed.
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_1->tid,
- ))->fetchField();
- $this->assertEqual(1, $index_count, 'Term 1 is indexed.');
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_2->tid,
- ))->fetchField();
- $this->assertEqual(1, $index_count, 'Term 2 is indexed.');
-
- // Update the article to change another term.
- $edit["{$this->field_name_2}[$langcode][]"] = $term_2->tid;
- $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-
- // Check that only one term is indexed.
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_1->tid,
- ))->fetchField();
- $this->assertEqual(0, $index_count, 'Term 1 is not indexed.');
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_2->tid,
- ))->fetchField();
- $this->assertEqual(1, $index_count, 'Term 2 is indexed once.');
-
- // Redo the above tests without interface.
- $update_node = array(
- 'nid' => $node->nid,
- 'vid' => $node->vid,
- 'uid' => $node->uid,
- 'type' => $node->type,
- 'title' => $this->randomName(),
- );
-
- // Update the article with no term changed.
- $updated_node = (object) $update_node;
- node_save($updated_node);
-
- // Check that the index was not changed.
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_1->tid,
- ))->fetchField();
- $this->assertEqual(0, $index_count, 'Term 1 is not indexed.');
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_2->tid,
- ))->fetchField();
- $this->assertEqual(1, $index_count, 'Term 2 is indexed once.');
-
- // Update the article to change one term.
- $update_node[$this->field_name_1][$langcode] = array(array('tid' => $term_1->tid));
- $updated_node = (object) $update_node;
- node_save($updated_node);
-
- // Check that both terms are indexed.
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_1->tid,
- ))->fetchField();
- $this->assertEqual(1, $index_count, 'Term 1 is indexed.');
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_2->tid,
- ))->fetchField();
- $this->assertEqual(1, $index_count, 'Term 2 is indexed.');
-
- // Update the article to change another term.
- $update_node[$this->field_name_2][$langcode] = array(array('tid' => $term_1->tid));
- $updated_node = (object) $update_node;
- node_save($updated_node);
-
- // Check that only one term is indexed.
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_1->tid,
- ))->fetchField();
- $this->assertEqual(1, $index_count, 'Term 1 is indexed once.');
- $index_count = db_query('SELECT COUNT(*) FROM {taxonomy_index} WHERE nid = :nid AND tid = :tid', array(
- ':nid' => $node->nid,
- ':tid' => $term_2->tid,
- ))->fetchField();
- $this->assertEqual(0, $index_count, 'Term 2 is not indexed.');
- }
-
- /**
- * Tests that there is a link to the parent term on the child term page.
- */
- function testTaxonomyTermHierarchyBreadcrumbs() {
- // Create two taxonomy terms and set term2 as the parent of term1.
- $term1 = $this->createTerm($this->vocabulary);
- $term2 = $this->createTerm($this->vocabulary);
- $term1->parent = array($term2->tid);
- taxonomy_term_save($term1);
-
- // Verify that the page breadcrumbs include a link to the parent term.
- $this->drupalGet('taxonomy/term/' . $term1->tid);
- $this->assertRaw(l($term2->name, 'taxonomy/term/' . $term2->tid), 'Parent term link is displayed when viewing the node.');
- }
-
-}
-
-/**
- * Test the taxonomy_term_load_multiple() function.
- */
-class TaxonomyLoadMultipleTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy term multiple loading',
- 'description' => 'Test the loading of multiple taxonomy terms at once',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp();
- $this->taxonomy_admin = $this->drupalCreateUser(array('administer taxonomy'));
- $this->drupalLogin($this->taxonomy_admin);
- }
-
- /**
- * Create a vocabulary and some taxonomy terms, ensuring they're loaded
- * correctly using taxonomy_term_load_multiple().
- */
- function testTaxonomyTermMultipleLoad() {
- // Create a vocabulary.
- $vocabulary = $this->createVocabulary();
-
- // Create five terms in the vocabulary.
- $i = 0;
- while ($i < 5) {
- $i++;
- $this->createTerm($vocabulary);
- }
- // Load the terms from the vocabulary.
- $terms = taxonomy_term_load_multiple(NULL, array('vid' => $vocabulary->vid));
- $count = count($terms);
- $this->assertEqual($count, 5, format_string('Correct number of terms were loaded. !count terms.', array('!count' => $count)));
-
- // Load the same terms again by tid.
- $terms2 = taxonomy_term_load_multiple(array_keys($terms));
- $this->assertEqual($count, count($terms2), 'Five terms were loaded by tid.');
- $this->assertEqual($terms, $terms2, 'Both arrays contain the same terms.');
-
- // Load the terms by tid, with a condition on vid.
- $terms3 = taxonomy_term_load_multiple(array_keys($terms2), array('vid' => $vocabulary->vid));
- $this->assertEqual($terms2, $terms3);
-
- // Remove one term from the array, then delete it.
- $deleted = array_shift($terms3);
- taxonomy_term_delete($deleted->tid);
- $deleted_term = taxonomy_term_load($deleted->tid);
- $this->assertFalse($deleted_term);
-
- // Load terms from the vocabulary by vid.
- $terms4 = taxonomy_term_load_multiple(NULL, array('vid' => $vocabulary->vid));
- $this->assertEqual(count($terms4), 4, 'Correct number of terms were loaded.');
- $this->assertFalse(isset($terms4[$deleted->tid]));
-
- // Create a single term and load it by name.
- $term = $this->createTerm($vocabulary);
- $loaded_terms = taxonomy_term_load_multiple(array(), array('name' => $term->name));
- $this->assertEqual(count($loaded_terms), 1, 'One term was loaded.');
- $loaded_term = reset($loaded_terms);
- $this->assertEqual($term->tid, $loaded_term->tid, 'Term loaded by name successfully.');
- }
-}
-
-/**
- * Tests for taxonomy hook invocation.
- */
-class TaxonomyHooksTestCase extends TaxonomyWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy term hooks',
- 'description' => 'Hooks for taxonomy term load/save/delete.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp('taxonomy', 'taxonomy_test');
- module_load_include('inc', 'taxonomy', 'taxonomy.pages');
- $taxonomy_admin = $this->drupalCreateUser(array('administer taxonomy'));
- $this->drupalLogin($taxonomy_admin);
- }
-
- /**
- * Test that hooks are run correctly on creating, editing, viewing,
- * and deleting a term.
- *
- * @see taxonomy_test.module
- */
- function testTaxonomyTermHooks() {
- $vocabulary = $this->createVocabulary();
-
- // Create a term with one antonym.
- $edit = array(
- 'name' => $this->randomName(),
- 'antonym' => 'Long',
- );
- $this->drupalPost('admin/structure/taxonomy/' . $vocabulary->machine_name . '/add', $edit, t('Save'));
- $terms = taxonomy_get_term_by_name($edit['name']);
- $term = reset($terms);
- $this->assertEqual($term->antonym, $edit['antonym'], 'Antonym was loaded into the term object.');
-
- // Update the term with a different antonym.
- $edit = array(
- 'name' => $this->randomName(),
- 'antonym' => 'Short',
- );
- $this->drupalPost('taxonomy/term/' . $term->tid . '/edit', $edit, t('Save'));
- taxonomy_terms_static_reset();
- $term = taxonomy_term_load($term->tid);
- $this->assertEqual($edit['antonym'], $term->antonym, 'Antonym was successfully edited.');
-
- // View the term and ensure that hook_taxonomy_term_view() and
- // hook_entity_view() are invoked.
- $term = taxonomy_term_load($term->tid);
- $term_build = taxonomy_term_page($term);
- $this->assertFalse(empty($term_build['term_heading']['term']['taxonomy_test_term_view_check']), 'hook_taxonomy_term_view() was invoked when viewing the term.');
- $this->assertFalse(empty($term_build['term_heading']['term']['taxonomy_test_entity_view_check']), 'hook_entity_view() was invoked when viewing the term.');
-
- // Delete the term.
- taxonomy_term_delete($term->tid);
- $antonym = db_query('SELECT tid FROM {taxonomy_term_antonym} WHERE tid = :tid', array(':tid' => $term->tid))->fetchField();
- $this->assertFalse($antonym, 'The antonym were deleted from the database.');
- }
-
-}
-
-/**
- * Tests for taxonomy term field and formatter.
- */
-class TaxonomyTermFieldTestCase extends TaxonomyWebTestCase {
-
- protected $instance;
- protected $vocabulary;
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy term reference field',
- 'description' => 'Test the creation of term fields.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp('field_test');
-
- $web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content', 'administer taxonomy'));
- $this->drupalLogin($web_user);
- $this->vocabulary = $this->createVocabulary();
-
- // Setup a field and instance.
- $this->field_name = drupal_strtolower($this->randomName());
- $this->field = array(
- 'field_name' => $this->field_name,
- 'type' => 'taxonomy_term_reference',
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => $this->vocabulary->machine_name,
- 'parent' => '0',
- ),
- ),
- )
- );
- field_create_field($this->field);
- $this->instance = array(
- 'field_name' => $this->field_name,
- 'entity_type' => 'test_entity',
- 'bundle' => 'test_bundle',
- 'widget' => array(
- 'type' => 'options_select',
- ),
- 'display' => array(
- 'full' => array(
- 'type' => 'taxonomy_term_reference_link',
- ),
- ),
- );
- field_create_instance($this->instance);
- }
-
- /**
- * Test term field validation.
- */
- function testTaxonomyTermFieldValidation() {
- // Test valid and invalid values with field_attach_validate().
- $langcode = LANGUAGE_NONE;
- $entity = field_test_create_stub_entity();
- $term = $this->createTerm($this->vocabulary);
- $entity->{$this->field_name}[$langcode][0]['tid'] = $term->tid;
- try {
- field_attach_validate('test_entity', $entity);
- $this->pass('Correct term does not cause validation error.');
- }
- catch (FieldValidationException $e) {
- $this->fail('Correct term does not cause validation error.');
- }
-
- $entity = field_test_create_stub_entity();
- $bad_term = $this->createTerm($this->createVocabulary());
- $entity->{$this->field_name}[$langcode][0]['tid'] = $bad_term->tid;
- try {
- field_attach_validate('test_entity', $entity);
- $this->fail('Wrong term causes validation error.');
- }
- catch (FieldValidationException $e) {
- $this->pass('Wrong term causes validation error.');
- }
- }
-
- /**
- * Test widgets.
- */
- function testTaxonomyTermFieldWidgets() {
- // Create a term in the vocabulary.
- $term = $this->createTerm($this->vocabulary);
-
- // Display creation form.
- $langcode = LANGUAGE_NONE;
- $this->drupalGet('test-entity/add/test-bundle');
- $this->assertFieldByName("{$this->field_name}[$langcode]", '', 'Widget is displayed.');
-
- // Submit with some value.
- $edit = array(
- "{$this->field_name}[$langcode]" => array($term->tid),
- );
- $this->drupalPost(NULL, $edit, t('Save'));
- preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
- $id = $match[1];
- $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created.');
-
- // Display the object.
- $entity = field_test_entity_test_load($id);
- $entities = array($id => $entity);
- field_attach_prepare_view('test_entity', $entities, 'full');
- $entity->content = field_attach_view('test_entity', $entity, 'full');
- $this->content = drupal_render($entity->content);
- $this->assertText($term->name, 'Term name is displayed.');
-
- // Delete the vocabulary and verify that the widget is gone.
- taxonomy_vocabulary_delete($this->vocabulary->vid);
- $this->drupalGet('test-entity/add/test-bundle');
- $this->assertNoFieldByName("{$this->field_name}[$langcode]", '', 'Widget is not displayed.');
- }
-
- /**
- * Tests that vocabulary machine name changes are mirrored in field definitions.
- */
- function testTaxonomyTermFieldChangeMachineName() {
- // Add several entries in the 'allowed_values' setting, to make sure that
- // they all get updated.
- $this->field['settings']['allowed_values'] = array(
- array(
- 'vocabulary' => $this->vocabulary->machine_name,
- 'parent' => '0',
- ),
- array(
- 'vocabulary' => $this->vocabulary->machine_name,
- 'parent' => '0',
- ),
- array(
- 'vocabulary' => 'foo',
- 'parent' => '0',
- ),
- );
- field_update_field($this->field);
- // Change the machine name.
- $old_name = $this->vocabulary->machine_name;
- $new_name = drupal_strtolower($this->randomName());
- $this->vocabulary->machine_name = $new_name;
- taxonomy_vocabulary_save($this->vocabulary);
-
- // Check that entity bundles are properly updated.
- $info = entity_get_info('taxonomy_term');
- $this->assertFalse(isset($info['bundles'][$old_name]), 'The old bundle name does not appear in entity_get_info().');
- $this->assertTrue(isset($info['bundles'][$new_name]), 'The new bundle name appears in entity_get_info().');
-
- // Check that the field instance is still attached to the vocabulary.
- $field = field_info_field($this->field_name);
- $allowed_values = $field['settings']['allowed_values'];
- $this->assertEqual($allowed_values[0]['vocabulary'], $new_name, 'Index 0: Machine name was updated correctly.');
- $this->assertEqual($allowed_values[1]['vocabulary'], $new_name, 'Index 1: Machine name was updated correctly.');
- $this->assertEqual($allowed_values[2]['vocabulary'], 'foo', 'Index 2: Machine name was left untouched.');
- }
-
-}
-
-/**
- * Tests a taxonomy term reference field that allows multiple vocabularies.
- */
-class TaxonomyTermFieldMultipleVocabularyTestCase extends TaxonomyWebTestCase {
-
- protected $instance;
- protected $vocabulary1;
- protected $vocabulary2;
-
- public static function getInfo() {
- return array(
- 'name' => 'Multiple vocabulary term reference field',
- 'description' => 'Tests term reference fields that allow multiple vocabularies.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp('field_test');
-
- $web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content', 'administer taxonomy'));
- $this->drupalLogin($web_user);
- $this->vocabulary1 = $this->createVocabulary();
- $this->vocabulary2 = $this->createVocabulary();
-
- // Set up a field and instance.
- $this->field_name = drupal_strtolower($this->randomName());
- $this->field = array(
- 'field_name' => $this->field_name,
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => $this->vocabulary1->machine_name,
- 'parent' => '0',
- ),
- array(
- 'vocabulary' => $this->vocabulary2->machine_name,
- 'parent' => '0',
- ),
- ),
- )
- );
- field_create_field($this->field);
- $this->instance = array(
- 'field_name' => $this->field_name,
- 'entity_type' => 'test_entity',
- 'bundle' => 'test_bundle',
- 'widget' => array(
- 'type' => 'options_select',
- ),
- 'display' => array(
- 'full' => array(
- 'type' => 'taxonomy_term_reference_link',
- ),
- ),
- );
- field_create_instance($this->instance);
- }
-
- /**
- * Tests term reference field and widget with multiple vocabularies.
- */
- function testTaxonomyTermFieldMultipleVocabularies() {
- // Create a term in each vocabulary.
- $term1 = $this->createTerm($this->vocabulary1);
- $term2 = $this->createTerm($this->vocabulary2);
-
- // Submit an entity with both terms.
- $langcode = LANGUAGE_NONE;
- $this->drupalGet('test-entity/add/test-bundle');
- $this->assertFieldByName("{$this->field_name}[$langcode][]", '', 'Widget is displayed.');
- $edit = array(
- "{$this->field_name}[$langcode][]" => array($term1->tid, $term2->tid),
- );
- $this->drupalPost(NULL, $edit, t('Save'));
- preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
- $id = $match[1];
- $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created.');
-
- // Render the entity.
- $entity = field_test_entity_test_load($id);
- $entities = array($id => $entity);
- field_attach_prepare_view('test_entity', $entities, 'full');
- $entity->content = field_attach_view('test_entity', $entity, 'full');
- $this->content = drupal_render($entity->content);
- $this->assertText($term1->name, 'Term 1 name is displayed.');
- $this->assertText($term2->name, 'Term 2 name is displayed.');
-
- // Delete vocabulary 2.
- taxonomy_vocabulary_delete($this->vocabulary2->vid);
-
- // Re-render the content.
- $entity = field_test_entity_test_load($id);
- $entities = array($id => $entity);
- field_attach_prepare_view('test_entity', $entities, 'full');
- $entity->content = field_attach_view('test_entity', $entity, 'full');
- $this->plainTextContent = FALSE;
- $this->content = drupal_render($entity->content);
-
- // Term 1 should still be displayed; term 2 should not be.
- $this->assertText($term1->name, 'Term 1 name is displayed.');
- $this->assertNoText($term2->name, 'Term 2 name is not displayed.');
-
- // Verify that field and instance settings are correct.
- $field_info = field_info_field($this->field_name);
- $this->assertEqual(sizeof($field_info['settings']['allowed_values']), 1, 'Only one vocabulary is allowed for the field.');
-
- // The widget should still be displayed.
- $this->drupalGet('test-entity/add/test-bundle');
- $this->assertFieldByName("{$this->field_name}[$langcode][]", '', 'Widget is still displayed.');
-
- // Term 1 should still pass validation.
- $edit = array(
- "{$this->field_name}[$langcode][]" => array($term1->tid),
- );
- $this->drupalPost(NULL, $edit, t('Save'));
- }
-
-}
-
-/**
- * Test taxonomy token replacement in strings.
- */
-class TaxonomyTokenReplaceTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy token replacement',
- 'description' => 'Generates text using placeholders for dummy content to check taxonomy token replacement.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp();
- $this->admin_user = $this->drupalCreateUser(array('administer taxonomy', 'bypass node access'));
- $this->drupalLogin($this->admin_user);
- $this->vocabulary = $this->createVocabulary();
- $this->langcode = LANGUAGE_NONE;
-
- $field = array(
- 'field_name' => 'taxonomy_' . $this->vocabulary->machine_name,
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => $this->vocabulary->machine_name,
- 'parent' => 0,
- ),
- ),
- ),
- );
- field_create_field($field);
-
- $this->instance = array(
- 'field_name' => 'taxonomy_' . $this->vocabulary->machine_name,
- 'bundle' => 'article',
- 'entity_type' => 'node',
- 'widget' => array(
- 'type' => 'options_select',
- ),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- ),
- ),
- );
- field_create_instance($this->instance);
- }
-
- /**
- * Creates some terms and a node, then tests the tokens generated from them.
- */
- function testTaxonomyTokenReplacement() {
- global $language;
-
- // Create two taxonomy terms.
- $term1 = $this->createTerm($this->vocabulary);
- $term2 = $this->createTerm($this->vocabulary);
-
- // Edit $term2, setting $term1 as parent.
- $edit = array();
- $edit['name'] = 'Blinking Text ';
- $edit['parent[]'] = array($term1->tid);
- $this->drupalPost('taxonomy/term/' . $term2->tid . '/edit', $edit, t('Save'));
-
- // Create node with term2.
- $edit = array();
- $node = $this->drupalCreateNode(array('type' => 'article'));
- $edit[$this->instance['field_name'] . '[' . $this->langcode . '][]'] = $term2->tid;
- $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-
- // Generate and test sanitized tokens for term1.
- $tests = array();
- $tests['[term:tid]'] = $term1->tid;
- $tests['[term:name]'] = check_plain($term1->name);
- $tests['[term:description]'] = check_markup($term1->description, $term1->format);
- $tests['[term:url]'] = url('taxonomy/term/' . $term1->tid, array('absolute' => TRUE));
- $tests['[term:node-count]'] = 0;
- $tests['[term:parent:name]'] = '[term:parent:name]';
- $tests['[term:vocabulary:name]'] = check_plain($this->vocabulary->name);
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array('term' => $term1), array('language' => $language));
- $this->assertEqual($output, $expected, format_string('Sanitized taxonomy term token %token replaced.', array('%token' => $input)));
- }
-
- // Generate and test sanitized tokens for term2.
- $tests = array();
- $tests['[term:tid]'] = $term2->tid;
- $tests['[term:name]'] = check_plain($term2->name);
- $tests['[term:description]'] = check_markup($term2->description, $term2->format);
- $tests['[term:url]'] = url('taxonomy/term/' . $term2->tid, array('absolute' => TRUE));
- $tests['[term:node-count]'] = 1;
- $tests['[term:parent:name]'] = check_plain($term1->name);
- $tests['[term:parent:url]'] = url('taxonomy/term/' . $term1->tid, array('absolute' => TRUE));
- $tests['[term:parent:parent:name]'] = '[term:parent:parent:name]';
- $tests['[term:vocabulary:name]'] = check_plain($this->vocabulary->name);
-
- // Test to make sure that we generated something for each token.
- $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array('term' => $term2), array('language' => $language));
- $this->assertEqual($output, $expected, format_string('Sanitized taxonomy term token %token replaced.', array('%token' => $input)));
- }
-
- // Generate and test unsanitized tokens.
- $tests['[term:name]'] = $term2->name;
- $tests['[term:description]'] = $term2->description;
- $tests['[term:parent:name]'] = $term1->name;
- $tests['[term:vocabulary:name]'] = $this->vocabulary->name;
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array('term' => $term2), array('language' => $language, 'sanitize' => FALSE));
- $this->assertEqual($output, $expected, format_string('Unsanitized taxonomy term token %token replaced.', array('%token' => $input)));
- }
-
- // Generate and test sanitized tokens.
- $tests = array();
- $tests['[vocabulary:vid]'] = $this->vocabulary->vid;
- $tests['[vocabulary:name]'] = check_plain($this->vocabulary->name);
- $tests['[vocabulary:description]'] = filter_xss($this->vocabulary->description);
- $tests['[vocabulary:node-count]'] = 1;
- $tests['[vocabulary:term-count]'] = 2;
-
- // Test to make sure that we generated something for each token.
- $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array('vocabulary' => $this->vocabulary), array('language' => $language));
- $this->assertEqual($output, $expected, format_string('Sanitized taxonomy vocabulary token %token replaced.', array('%token' => $input)));
- }
-
- // Generate and test unsanitized tokens.
- $tests['[vocabulary:name]'] = $this->vocabulary->name;
- $tests['[vocabulary:description]'] = $this->vocabulary->description;
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array('vocabulary' => $this->vocabulary), array('language' => $language, 'sanitize' => FALSE));
- $this->assertEqual($output, $expected, format_string('Unsanitized taxonomy vocabulary token %token replaced.', array('%token' => $input)));
- }
- }
-
-}
-
-/**
- * Tests for verifying that taxonomy pages use the correct theme.
- */
-class TaxonomyThemeTestCase extends TaxonomyWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy theme switching',
- 'description' => 'Verifies that various taxonomy pages use the expected theme.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp();
-
- // Make sure we are using distinct default and administrative themes for
- // the duration of these tests.
- variable_set('theme_default', 'bartik');
- variable_set('admin_theme', 'seven');
-
- // Create and log in as a user who has permission to add and edit taxonomy
- // terms and view the administrative theme.
- $admin_user = $this->drupalCreateUser(array('administer taxonomy', 'view the administration theme'));
- $this->drupalLogin($admin_user);
- }
-
- /**
- * Test the theme used when adding, viewing and editing taxonomy terms.
- */
- function testTaxonomyTermThemes() {
- // Adding a term to a vocabulary is considered an administrative action and
- // should use the administrative theme.
- $vocabulary = $this->createVocabulary();
- $this->drupalGet('admin/structure/taxonomy/' . $vocabulary->machine_name . '/add');
- $this->assertRaw('seven/style.css', "The administrative theme's CSS appears on the page for adding a taxonomy term.");
-
- // Viewing a taxonomy term should use the default theme.
- $term = $this->createTerm($vocabulary);
- $this->drupalGet('taxonomy/term/' . $term->tid);
- $this->assertRaw('bartik/css/style.css', "The default theme's CSS appears on the page for viewing a taxonomy term.");
-
- // Editing a taxonomy term should use the same theme as adding one.
- $this->drupalGet('taxonomy/term/' . $term->tid . '/edit');
- $this->assertRaw('seven/style.css', "The administrative theme's CSS appears on the page for editing a taxonomy term.");
- }
-
-}
-
-/**
- * Tests the functionality of EntityFieldQuery for taxonomy entities.
- */
-class TaxonomyEFQTestCase extends TaxonomyWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Taxonomy EntityFieldQuery',
- 'description' => 'Verifies operation of a taxonomy-based EntityFieldQuery.',
- 'group' => 'Taxonomy',
- );
- }
-
- function setUp() {
- parent::setUp();
- $this->admin_user = $this->drupalCreateUser(array('administer taxonomy'));
- $this->drupalLogin($this->admin_user);
- $this->vocabulary = $this->createVocabulary();
- }
-
- /**
- * Tests that a basic taxonomy EntityFieldQuery works.
- */
- function testTaxonomyEFQ() {
- $terms = array();
- for ($i = 0; $i < 5; $i++) {
- $term = $this->createTerm($this->vocabulary);
- $terms[$term->tid] = $term;
- }
- $query = new EntityFieldQuery();
- $query->entityCondition('entity_type', 'taxonomy_term');
- $result = $query->execute();
- $result = $result['taxonomy_term'];
- asort($result);
- $this->assertEqual(array_keys($terms), array_keys($result), 'Taxonomy terms were retrieved by EntityFieldQuery.');
-
- // Create a second vocabulary and five more terms.
- $vocabulary2 = $this->createVocabulary();
- $terms2 = array();
- for ($i = 0; $i < 5; $i++) {
- $term = $this->createTerm($vocabulary2);
- $terms2[$term->tid] = $term;
- }
-
- $query = new EntityFieldQuery();
- $query->entityCondition('entity_type', 'taxonomy_term');
- $query->entityCondition('bundle', $vocabulary2->machine_name);
- $result = $query->execute();
- $result = $result['taxonomy_term'];
- asort($result);
- $this->assertEqual(array_keys($terms2), array_keys($result), format_string('Taxonomy terms from the %name vocabulary were retrieved by EntityFieldQuery.', array('%name' => $vocabulary2->name)));
- }
-
-}
diff --git a/modules/taxonomy/taxonomy.tokens.inc b/modules/taxonomy/taxonomy.tokens.inc
deleted file mode 100644
index f8ae457..0000000
--- a/modules/taxonomy/taxonomy.tokens.inc
+++ /dev/null
@@ -1,189 +0,0 @@
- t("Taxonomy terms"),
- 'description' => t("Tokens related to taxonomy terms."),
- 'needs-data' => 'term',
- );
- $types['vocabulary'] = array(
- 'name' => t("Vocabularies"),
- 'description' => t("Tokens related to taxonomy vocabularies."),
- 'needs-data' => 'vocabulary',
- );
-
- // Taxonomy term related variables.
- $term['tid'] = array(
- 'name' => t("Term ID"),
- 'description' => t("The unique ID of the taxonomy term."),
- );
- $term['name'] = array(
- 'name' => t("Name"),
- 'description' => t("The name of the taxonomy term."),
- );
- $term['description'] = array(
- 'name' => t("Description"),
- 'description' => t("The optional description of the taxonomy term."),
- );
- $term['node-count'] = array(
- 'name' => t("Node count"),
- 'description' => t("The number of nodes tagged with the taxonomy term."),
- );
- $term['url'] = array(
- 'name' => t("URL"),
- 'description' => t("The URL of the taxonomy term."),
- );
-
- // Taxonomy vocabulary related variables.
- $vocabulary['vid'] = array(
- 'name' => t("Vocabulary ID"),
- 'description' => t("The unique ID of the taxonomy vocabulary."),
- );
- $vocabulary['name'] = array(
- 'name' => t("Name"),
- 'description' => t("The name of the taxonomy vocabulary."),
- );
- $vocabulary['description'] = array(
- 'name' => t("Description"),
- 'description' => t("The optional description of the taxonomy vocabulary."),
- );
- $vocabulary['node-count'] = array(
- 'name' => t("Node count"),
- 'description' => t("The number of nodes tagged with terms belonging to the taxonomy vocabulary."),
- );
- $vocabulary['term-count'] = array(
- 'name' => t("Term count"),
- 'description' => t("The number of terms belonging to the taxonomy vocabulary."),
- );
-
- // Chained tokens for taxonomies
- $term['vocabulary'] = array(
- 'name' => t("Vocabulary"),
- 'description' => t("The vocabulary the taxonomy term belongs to."),
- 'type' => 'vocabulary',
- );
- $term['parent'] = array(
- 'name' => t("Parent term"),
- 'description' => t("The parent term of the taxonomy term, if one exists."),
- 'type' => 'term',
- );
-
- return array(
- 'types' => $types,
- 'tokens' => array(
- 'term' => $term,
- 'vocabulary' => $vocabulary,
- ),
- );
-}
-
-/**
- * Implements hook_tokens().
- */
-function taxonomy_tokens($type, $tokens, array $data = array(), array $options = array()) {
- $replacements = array();
- $sanitize = !empty($options['sanitize']);
-
- if ($type == 'term' && !empty($data['term'])) {
- $term = $data['term'];
-
- foreach ($tokens as $name => $original) {
- switch ($name) {
- case 'tid':
- $replacements[$original] = $term->tid;
- break;
-
- case 'name':
- $replacements[$original] = $sanitize ? check_plain($term->name) : $term->name;
- break;
-
- case 'description':
- $replacements[$original] = $sanitize ? check_markup($term->description, $term->format, '', TRUE) : $term->description;
- break;
-
- case 'url':
- $uri = entity_uri('taxonomy_term', $term);
- $replacements[$original] = url($uri['path'], array_merge($uri['options'], array('absolute' => TRUE)));
- break;
-
- case 'node-count':
- $query = db_select('taxonomy_index');
- $query->condition('tid', $term->tid);
- $query->addTag('term_node_count');
- $count = $query->countQuery()->execute()->fetchField();
- $replacements[$original] = $count;
- break;
-
- case 'vocabulary':
- $vocabulary = taxonomy_vocabulary_load($term->vid);
- $replacements[$original] = check_plain($vocabulary->name);
- break;
-
- case 'parent':
- if ($parents = taxonomy_get_parents($term->tid)) {
- $parent = array_pop($parents);
- $replacements[$original] = check_plain($parent->name);
- }
- break;
- }
- }
-
- if ($vocabulary_tokens = token_find_with_prefix($tokens, 'vocabulary')) {
- $vocabulary = taxonomy_vocabulary_load($term->vid);
- $replacements += token_generate('vocabulary', $vocabulary_tokens, array('vocabulary' => $vocabulary), $options);
- }
-
- if (($vocabulary_tokens = token_find_with_prefix($tokens, 'parent')) && $parents = taxonomy_get_parents($term->tid)) {
- $parent = array_pop($parents);
- $replacements += token_generate('term', $vocabulary_tokens, array('term' => $parent), $options);
- }
- }
-
- elseif ($type == 'vocabulary' && !empty($data['vocabulary'])) {
- $vocabulary = $data['vocabulary'];
-
- foreach ($tokens as $name => $original) {
- switch ($name) {
- case 'vid':
- $replacements[$original] = $vocabulary->vid;
- break;
-
- case 'name':
- $replacements[$original] = $sanitize ? check_plain($vocabulary->name) : $vocabulary->name;
- break;
-
- case 'description':
- $replacements[$original] = $sanitize ? filter_xss($vocabulary->description) : $vocabulary->description;
- break;
-
- case 'term-count':
- $query = db_select('taxonomy_term_data');
- $query->condition('vid', $vocabulary->vid);
- $query->addTag('vocabulary_term_count');
- $count = $query->countQuery()->execute()->fetchField();
- $replacements[$original] = $count;
- break;
-
- case 'node-count':
- $query = db_select('taxonomy_index', 'ti');
- $query->addExpression('COUNT(DISTINCT ti.nid)');
- $query->leftJoin('taxonomy_term_data', 'td', 'ti.tid = td.tid');
- $query->condition('td.vid', $vocabulary->vid);
- $query->addTag('vocabulary_node_count');
- $count = $query->execute()->fetchField();
- $replacements[$original] = $count;
- break;
- }
- }
- }
-
- return $replacements;
-}
diff --git a/modules/toolbar/toolbar-rtl.css b/modules/toolbar/toolbar-rtl.css
deleted file mode 100644
index acbc98f..0000000
--- a/modules/toolbar/toolbar-rtl.css
+++ /dev/null
@@ -1,41 +0,0 @@
-
-#toolbar,
-#toolbar * {
- text-align: right;
-}
-#toolbar ul li {
- float: right;
-}
-#toolbar ul li a {
- display: inline-block;
- float: none;
- zoom: 1;
-}
-#toolbar div.toolbar-menu {
- padding: 5px 50px 5px 50px;
-}
-#toolbar-user {
- float: left;
-}
-#toolbar ul#toolbar-user li {
- float: none;
- display: inline;
-}
-#toolbar-menu {
- float: none;
-}
-#toolbar-home {
- float: right;
-}
-#toolbar ul li.home a {
- position: absolute;
- right: 10px;
-}
-#toolbar div.toolbar-menu a.toggle {
- left: 10px;
- right: auto;
-}
-* html #toolbar {
- left: 0;
- padding-left: 0;
-}
diff --git a/modules/toolbar/toolbar.css b/modules/toolbar/toolbar.css
deleted file mode 100644
index cbf3c14..0000000
--- a/modules/toolbar/toolbar.css
+++ /dev/null
@@ -1,150 +0,0 @@
-
-body.toolbar {
- padding-top: 2.2em;
-}
-body.toolbar-drawer {
- padding-top: 5.3em;
-}
-
-/**
- * Aggressive resets so we can achieve a consistent look in hostile CSS
- * environments.
- */
-#toolbar,
-#toolbar * {
- border: 0;
- font-size: 100%;
- line-height: inherit;
- list-style: none;
- margin: 0;
- outline: 0;
- padding: 0;
- text-align: left; /* LTR */
- vertical-align: baseline;
-}
-
-/**
- * Base styles.
- *
- * We use a keyword for the toolbar font size to make it display consistently
- * across different themes, while still allowing browsers to resize the text.
- */
-#toolbar {
- background: #666;
- color: #ccc;
- font: normal small "Lucida Grande", Verdana, sans-serif;
- left: 0;
- margin: 0 -20px;
- padding: 0 20px;
- position: fixed;
- right: 0;
- top: 0;
- -moz-box-shadow: 0 3px 20px #000;
- -webkit-box-shadow: 0 3px 20px #000;
- box-shadow: 0 3px 20px #000;
- filter: progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10');
- -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(color=#000000, direction='180', strength='10')";
- z-index: 600;
-}
-#toolbar div.collapsed {
- display: none;
- visibility: hidden;
-}
-#toolbar a {
- color: #fff;
- font-size: .846em;
- text-decoration: none;
-}
-#toolbar ul li,
-#toolbar ul li a {
- float: left; /* LTR */
-}
-
-/**
- * Administration menu.
- */
-#toolbar div.toolbar-menu {
- background: #000;
- line-height: 20px;
- padding: 5px 50px 5px 10px; /* LTR */
- position: relative;
-}
-#toolbar-home a span {
- background: url(toolbar.png) no-repeat 0 -45px;
- display: block;
- height: 14px;
- margin: 3px 0px;
- text-indent: -9999px;
- vertical-align: text-bottom;
- width: 11px;
-}
-#toolbar-user {
- float: right; /* LTR */
-}
-#toolbar-menu {
- float: left; /* LTR */
-}
-#toolbar div.toolbar-menu a.toggle {
- background: url(toolbar.png) 0 -20px no-repeat;
- bottom: 0;
- cursor: pointer;
- height: 25px;
- overflow: hidden;
- position: absolute;
- right: 10px; /* LTR */
- text-indent: -9999px;
- width: 25px;
-}
-#toolbar div.toolbar-menu a.toggle:focus,
-#toolbar div.toolbar-menu a.toggle:hover {
- background-position: -50px -20px;
-}
-#toolbar div.toolbar-menu a.toggle-active {
- background-position: -25px -20px;
-}
-#toolbar div.toolbar-menu a.toggle-active.toggle:focus,
-#toolbar div.toolbar-menu a.toggle-active.toggle:hover {
- background-position: -75px -20px;
-}
-#toolbar div.toolbar-menu ul li a {
- padding: 0 10px;
- -moz-border-radius: 10px;
- -webkit-border-radius: 10px;
- border-radius: 10px;
-}
-#toolbar div.toolbar-menu ul li a:focus,
-#toolbar div.toolbar-menu ul li a:hover,
-#toolbar div.toolbar-menu ul li a:active,
-#toolbar div.toolbar-menu ul li a.active:focus {
- background: #444;
-}
-#toolbar div.toolbar-menu ul li a.active:hover,
-#toolbar div.toolbar-menu ul li a.active:active,
-#toolbar div.toolbar-menu ul li a.active,
-#toolbar div.toolbar-menu ul li.active-trail a {
- background: url(toolbar.png) 0 0 repeat-x;
- text-shadow: #333 0 1px 0;
-}
-
-/**
- * Collapsed drawer of additional toolbar content.
- */
-#toolbar div.toolbar-drawer {
- position: relative;
- padding: 0 10px;
-}
-
-/**
- * IE 6 Fix.
- *
- * IE 6 shows elements with position:fixed as position:static so we replace
- * it with position:absolute; toolbar needs its z-index to stay above overlay.
- */
-* html #toolbar {
- left: -20px;
- margin: 0;
- padding-right: 0;
- position: absolute;
- right: 0;
- width: 100%;
-}
diff --git a/modules/toolbar/toolbar.info b/modules/toolbar/toolbar.info
deleted file mode 100644
index 2c5abbb..0000000
--- a/modules/toolbar/toolbar.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = Toolbar
-description = Provides a toolbar that shows the top-level administration menu items and links from other modules.
-core = 7.x
-package = Core
-version = VERSION
diff --git a/modules/toolbar/toolbar.js b/modules/toolbar/toolbar.js
deleted file mode 100644
index d50f205..0000000
--- a/modules/toolbar/toolbar.js
+++ /dev/null
@@ -1,111 +0,0 @@
-(function ($) {
-
-Drupal.toolbar = Drupal.toolbar || {};
-
-/**
- * Attach toggling behavior and notify the overlay of the toolbar.
- */
-Drupal.behaviors.toolbar = {
- attach: function(context) {
-
- // Set the initial state of the toolbar.
- $('#toolbar', context).once('toolbar', Drupal.toolbar.init);
-
- // Toggling toolbar drawer.
- $('#toolbar a.toggle', context).once('toolbar-toggle').click(function(e) {
- Drupal.toolbar.toggle();
- // Allow resize event handlers to recalculate sizes/positions.
- $(window).triggerHandler('resize');
- return false;
- });
- }
-};
-
-/**
- * Retrieve last saved cookie settings and set up the initial toolbar state.
- */
-Drupal.toolbar.init = function() {
- // Retrieve the collapsed status from a stored cookie.
- var collapsed = $.cookie('Drupal.toolbar.collapsed');
-
- // Expand or collapse the toolbar based on the cookie value.
- if (collapsed == 1) {
- Drupal.toolbar.collapse();
- }
- else {
- Drupal.toolbar.expand();
- }
-};
-
-/**
- * Collapse the toolbar.
- */
-Drupal.toolbar.collapse = function() {
- var toggle_text = Drupal.t('Show shortcuts');
- $('#toolbar div.toolbar-drawer').addClass('collapsed');
- $('#toolbar a.toggle')
- .removeClass('toggle-active')
- .attr('title', toggle_text)
- .html(toggle_text);
- $('body').removeClass('toolbar-drawer').css('paddingTop', Drupal.toolbar.height());
- $.cookie(
- 'Drupal.toolbar.collapsed',
- 1,
- {
- path: Drupal.settings.basePath,
- // The cookie should "never" expire.
- expires: 36500
- }
- );
-};
-
-/**
- * Expand the toolbar.
- */
-Drupal.toolbar.expand = function() {
- var toggle_text = Drupal.t('Hide shortcuts');
- $('#toolbar div.toolbar-drawer').removeClass('collapsed');
- $('#toolbar a.toggle')
- .addClass('toggle-active')
- .attr('title', toggle_text)
- .html(toggle_text);
- $('body').addClass('toolbar-drawer').css('paddingTop', Drupal.toolbar.height());
- $.cookie(
- 'Drupal.toolbar.collapsed',
- 0,
- {
- path: Drupal.settings.basePath,
- // The cookie should "never" expire.
- expires: 36500
- }
- );
-};
-
-/**
- * Toggle the toolbar.
- */
-Drupal.toolbar.toggle = function() {
- if ($('#toolbar div.toolbar-drawer').hasClass('collapsed')) {
- Drupal.toolbar.expand();
- }
- else {
- Drupal.toolbar.collapse();
- }
-};
-
-Drupal.toolbar.height = function() {
- var $toolbar = $('#toolbar');
- var height = $toolbar.outerHeight();
- // In modern browsers (including IE9), when box-shadow is defined, use the
- // normal height.
- var cssBoxShadowValue = $toolbar.css('box-shadow');
- var boxShadow = (typeof cssBoxShadowValue !== 'undefined' && cssBoxShadowValue !== 'none');
- // In IE8 and below, we use the shadow filter to apply box-shadow styles to
- // the toolbar. It adds some extra height that we need to remove.
- if (!boxShadow && /DXImageTransform\.Microsoft\.Shadow/.test($toolbar.css('filter'))) {
- height -= $toolbar[0].filters.item("DXImageTransform.Microsoft.Shadow").strength;
- }
- return height;
-};
-
-})(jQuery);
diff --git a/modules/toolbar/toolbar.module b/modules/toolbar/toolbar.module
deleted file mode 100644
index 6d1b581..0000000
--- a/modules/toolbar/toolbar.module
+++ /dev/null
@@ -1,363 +0,0 @@
-' . t('About') . '';
- $output .= '' . t('The Toolbar module displays links to top-level administration menu items and links from other modules at the top of the screen. For more information, see the online handbook entry for Toolbar module .', array('@toolbar' => 'http://drupal.org/documentation/modules/toolbar/')) . '
';
- $output .= '' . t('Uses') . ' ';
- $output .= '';
- $output .= '' . t('Displaying administrative links') . ' ';
- $output .= '' . t('The Toolbar module displays a bar containing top-level administrative links across the top of the screen. Below that, the Toolbar module has a drawer section where it displays links provided by other modules, such as the core Shortcut module . The drawer can be hidden/shown by using the show/hide shortcuts link at the end of the toolbar.', array('@shortcuts-help' => url('admin/help/shortcut'))) . ' ';
- $output .= ' ';
- return $output;
- }
-}
-
-/**
- * Implements hook_permission().
- */
-function toolbar_permission() {
- return array(
- 'access toolbar' => array(
- 'title' => t('Use the administration toolbar'),
- ),
- );
-}
-
-/**
- * Implements hook_theme().
- */
-function toolbar_theme($existing, $type, $theme, $path) {
- $items['toolbar'] = array(
- 'render element' => 'toolbar',
- 'template' => 'toolbar',
- 'path' => drupal_get_path('module', 'toolbar'),
- );
- $items['toolbar_toggle'] = array(
- 'variables' => array(
- 'collapsed' => NULL,
- 'attributes' => array(),
- ),
- );
- return $items;
-}
-
-/**
- * Implements hook_menu().
- */
-function toolbar_menu() {
- $items['toolbar/toggle'] = array(
- 'title' => 'Toggle drawer visibility',
- 'type' => MENU_CALLBACK,
- 'page callback' => 'toolbar_toggle_page',
- 'access arguments' => array('access toolbar'),
- );
- return $items;
-}
-
-/**
- * Menu callback; toggles the visibility of the toolbar drawer.
- */
-function toolbar_toggle_page() {
- global $base_path;
- // Toggle the value in the cookie.
- setcookie('Drupal.toolbar.collapsed', !_toolbar_is_collapsed(), NULL, $base_path);
- // Redirect the user from where he used the toggle element.
- drupal_goto();
-}
-
-/**
- * Formats an element used to toggle the toolbar drawer's visibility.
- *
- * @param $variables
- * An associative array containing:
- * - collapsed: A boolean value representing the toolbar drawer's visibility.
- * - attributes: An associative array of HTML attributes.
- *
- * @return
- * An HTML string representing the element for toggling.
- *
- * @ingroup themable
- */
-function theme_toolbar_toggle($variables) {
- if ($variables['collapsed']) {
- $toggle_text = t('Show shortcuts');
- }
- else {
- $toggle_text = t('Hide shortcuts');
- $variables['attributes']['class'][] = 'toggle-active';
- }
- return l($toggle_text, 'toolbar/toggle', array('query' => drupal_get_destination(), 'attributes' => array('title' => $toggle_text) + $variables['attributes']));
-}
-
-/**
- * Determines the current state of the toolbar drawer's visibility.
- *
- * @return
- * TRUE when drawer is collapsed, FALSE when it is expanded.
- */
-function _toolbar_is_collapsed() {
- // PHP converts dots into underscores in cookie names to avoid problems with
- // its parser, so we use a converted cookie name.
- return isset($_COOKIE['Drupal_toolbar_collapsed']) ? $_COOKIE['Drupal_toolbar_collapsed'] : 0;
-}
-
-/**
- * Implements hook_page_build().
- *
- * Add admin toolbar to the page_top region automatically.
- */
-function toolbar_page_build(&$page) {
- $page['page_top']['toolbar'] = array(
- '#pre_render' => array('toolbar_pre_render'),
- '#access' => user_access('access toolbar'),
- 'toolbar_drawer' => array(),
- );
-}
-
-/**
- * Prerender function for the toolbar.
- *
- * Since building the toolbar takes some time, it is done just prior to
- * rendering to ensure that it is built only if it will be displayed.
- */
-function toolbar_pre_render($toolbar) {
- $toolbar = array_merge($toolbar, toolbar_view());
- return $toolbar;
-}
-
-/**
- * Implements hook_preprocess_html().
- *
- * Add some page classes, so global page theming can adjust to the toolbar.
- */
-function toolbar_preprocess_html(&$vars) {
- if (isset($vars['page']['page_top']['toolbar']) && user_access('access toolbar')) {
- $vars['classes_array'][] = 'toolbar';
- if (!_toolbar_is_collapsed()) {
- $vars['classes_array'][] = 'toolbar-drawer';
- }
- }
-}
-
-/**
- * Implements hook_preprocess_toolbar().
- *
- * Adding the 'overlay-displace-top' class to the toolbar pushes the overlay
- * down, so it appears below the toolbar.
- */
-function toolbar_preprocess_toolbar(&$variables) {
- $variables['classes_array'][] = "overlay-displace-top";
-}
-
-/**
- * Implements hook_system_info_alter().
- *
- * Indicate that the 'page_top' region (in which the toolbar will be displayed)
- * is an overlay supplemental region that should be refreshed whenever its
- * content is updated.
- *
- * This information is provided for any module that might need to use it, not
- * just the core Overlay module.
- */
-function toolbar_system_info_alter(&$info, $file, $type) {
- if ($type == 'theme') {
- $info['overlay_supplemental_regions'][] = 'page_top';
- }
-}
-
-/**
- * Builds the admin menu as a structured array ready for drupal_render().
- *
- * @return
- * Array of links and settings relating to the admin menu.
- */
-function toolbar_view() {
- global $user;
-
- $module_path = drupal_get_path('module', 'toolbar');
- $build = array(
- '#theme' => 'toolbar',
- '#attached'=> array(
- 'js' => array(
- $module_path . '/toolbar.js',
- array(
- 'data' => array('tableHeaderOffset' => 'Drupal.toolbar.height'),
- 'type' => 'setting'
- ),
- ),
- 'css' => array(
- $module_path . '/toolbar.css',
- ),
- 'library' => array(array('system', 'jquery.cookie')),
- ),
- );
-
- // Retrieve the admin menu from the database.
- $links = toolbar_menu_navigation_links(toolbar_get_menu_tree());
- $build['toolbar_menu'] = array(
- '#theme' => 'links__toolbar_menu',
- '#links' => $links,
- '#attributes' => array('id' => 'toolbar-menu'),
- '#heading' => array('text' => t('Administrative toolbar'), 'level' => 'h2', 'class' => 'element-invisible'),
- );
-
- // Add logout & user account links or login link.
- if ($user->uid) {
- $links = array(
- 'account' => array(
- 'title' => t('Hello @username ', array('@username' => format_username($user))),
- 'href' => 'user',
- 'html' => TRUE,
- 'attributes' => array('title' => t('User account')),
- ),
- 'logout' => array(
- 'title' => t('Log out'),
- 'href' => 'user/logout',
- ),
- );
- }
- else {
- $links = array(
- 'login' => array(
- 'title' => t('Log in'),
- 'href' => 'user',
- ),
- );
- }
- $build['toolbar_user'] = array(
- '#theme' => 'links__toolbar_user',
- '#links' => $links,
- '#attributes' => array('id' => 'toolbar-user'),
- );
-
- // Add a "home" link.
- $link = array(
- 'home' => array(
- 'title' => 'Home ',
- 'href' => '',
- 'html' => TRUE,
- 'attributes' => array('title' => t('Home')),
- ),
- );
- $build['toolbar_home'] = array(
- '#theme' => 'links',
- '#links' => $link,
- '#attributes' => array('id' => 'toolbar-home'),
- );
-
- // Add an anchor to be able to toggle the visibility of the drawer.
- $build['toolbar_toggle'] = array(
- '#theme' => 'toolbar_toggle',
- '#collapsed' => _toolbar_is_collapsed(),
- '#attributes' => array('class' => array('toggle')),
- );
-
- // Prepare the drawer links CSS classes.
- $toolbar_drawer_classes = array(
- 'toolbar-drawer',
- 'clearfix',
- );
- if(_toolbar_is_collapsed()) {
- $toolbar_drawer_classes[] = 'collapsed';
- }
- $build['toolbar_drawer_classes'] = implode(' ', $toolbar_drawer_classes);
-
- return $build;
-}
-
-/**
- * Gets only the top level items below the 'admin' path.
- *
- * @return
- * An array containing a menu tree of top level items below the 'admin' path.
- */
-function toolbar_get_menu_tree() {
- $tree = array();
- $admin_link = db_query('SELECT * FROM {menu_links} WHERE menu_name = :menu_name AND module = :module AND link_path = :path', array(':menu_name' => 'management', ':module' => 'system', ':path' => 'admin'))->fetchAssoc();
- if ($admin_link) {
- $tree = menu_build_tree('management', array(
- 'expanded' => array($admin_link['mlid']),
- 'min_depth' => $admin_link['depth'] + 1,
- 'max_depth' => $admin_link['depth'] + 1,
- ));
- }
-
- return $tree;
-}
-
-/**
- * Generates a links array from a menu tree array.
- *
- * Based on menu_navigation_links(). Adds path based IDs and icon placeholders
- * to the links.
- *
- * @return
- * An array of links as defined above.
- */
-function toolbar_menu_navigation_links($tree) {
- $links = array();
- foreach ($tree as $item) {
- if (!$item['link']['hidden'] && $item['link']['access']) {
- // Make sure we have a path specific ID in place, so we can attach icons
- // and behaviors to the items.
- $id = str_replace(array('/', '<', '>'), array('-', '', ''), $item['link']['href']);
-
- $link = $item['link']['localized_options'];
- $link['href'] = $item['link']['href'];
- // Add icon placeholder.
- $link['title'] = ' ' . check_plain($item['link']['title']);
- // Add admin link ID.
- $link['attributes'] = array('id' => 'toolbar-link-' . $id);
- if (!empty($item['link']['description'])) {
- $link['title'] .= ' (' . $item['link']['description'] . ') ';
- $link['attributes']['title'] = $item['link']['description'];
- }
- $link['html'] = TRUE;
-
- $class = ' path-' . $id;
- if (toolbar_in_active_trail($item['link']['href'])) {
- $class .= ' active-trail';
- }
- $links['menu-' . $item['link']['mlid'] . $class] = $link;
- }
- }
- return $links;
-}
-
-/**
- * Checks whether an item is in the active trail.
- *
- * Useful when using a menu generated by menu_tree_all_data() which does
- * not set the 'in_active_trail' flag on items.
- *
- * @return
- * TRUE when path is in the active trail, FALSE if not.
- *
- * @todo
- * Look at migrating to a menu system level function.
- */
-function toolbar_in_active_trail($path) {
- $active_paths = &drupal_static(__FUNCTION__);
-
- // Gather active paths.
- if (!isset($active_paths)) {
- $active_paths = array();
- $trail = menu_get_active_trail();
- foreach ($trail as $item) {
- if (!empty($item['href'])) {
- $active_paths[] = $item['href'];
- }
- }
- }
- return in_array($path, $active_paths);
-}
diff --git a/modules/toolbar/toolbar.png b/modules/toolbar/toolbar.png
deleted file mode 100644
index f2c7f35..0000000
Binary files a/modules/toolbar/toolbar.png and /dev/null differ
diff --git a/modules/toolbar/toolbar.tpl.php b/modules/toolbar/toolbar.tpl.php
deleted file mode 100644
index e852129..0000000
--- a/modules/toolbar/toolbar.tpl.php
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
diff --git a/modules/tracker/tracker.css b/modules/tracker/tracker.css
deleted file mode 100644
index d3531c4..0000000
--- a/modules/tracker/tracker.css
+++ /dev/null
@@ -1,7 +0,0 @@
-
-.page-tracker td.replies {
- text-align: center;
-}
-.page-tracker table {
- width: 100%;
-}
diff --git a/modules/tracker/tracker.info b/modules/tracker/tracker.info
deleted file mode 100644
index 1d7c65b..0000000
--- a/modules/tracker/tracker.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Tracker
-description = Enables tracking of recent content for users.
-dependencies[] = comment
-package = Core
-version = VERSION
-core = 7.x
-files[] = tracker.test
diff --git a/modules/tracker/tracker.install b/modules/tracker/tracker.install
deleted file mode 100644
index 9967b9d..0000000
--- a/modules/tracker/tracker.install
+++ /dev/null
@@ -1,225 +0,0 @@
-fetchField();
- if ($max_nid != 0) {
- variable_set('tracker_index_nid', $max_nid);
- // To avoid timing out while attempting to do a complete indexing, we
- // simply call our cron job to remove stale records and begin the process.
- tracker_cron();
- }
-}
-
-/**
- * Implements hook_schema().
- */
-function tracker_schema() {
- $schema['tracker_node'] = array(
- 'description' => 'Tracks when nodes were last changed or commented on.',
- 'fields' => array(
- 'nid' => array(
- 'description' => 'The {node}.nid this record tracks.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'published' => array(
- 'description' => 'Boolean indicating whether the node is published.',
- 'type' => 'int',
- 'not null' => FALSE,
- 'default' => 0,
- 'size' => 'tiny',
- ),
- 'changed' => array(
- 'description' => 'The Unix timestamp when the node was most recently saved or commented on.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- ),
- 'indexes' => array(
- 'tracker' => array('published', 'changed'),
- ),
- 'primary key' => array('nid'),
- 'foreign keys' => array(
- 'tracked_node' => array(
- 'table' => 'node',
- 'columns' => array('nid' => 'nid'),
- ),
- ),
- );
-
- $schema['tracker_user'] = array(
- 'description' => 'Tracks when nodes were last changed or commented on, for each user that authored the node or one of its comments.',
- 'fields' => array(
- 'nid' => array(
- 'description' => 'The {node}.nid this record tracks.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'uid' => array(
- 'description' => 'The {users}.uid of the node author or commenter.',
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'published' => array(
- 'description' => 'Boolean indicating whether the node is published.',
- 'type' => 'int',
- 'not null' => FALSE,
- 'default' => 0,
- 'size' => 'tiny',
- ),
- 'changed' => array(
- 'description' => 'The Unix timestamp when the node was most recently saved or commented on.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- ),
- 'indexes' => array(
- 'tracker' => array('uid', 'published', 'changed'),
- ),
- 'primary key' => array('nid', 'uid'),
- 'foreign keys' => array(
- 'tracked_node' => array(
- 'table' => 'node',
- 'columns' => array('nid' => 'nid'),
- ),
- 'tracked_user' => array(
- 'table' => 'users',
- 'columns' => array('uid' => 'uid'),
- ),
- ),
- );
-
- return $schema;
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Create new tracker_node and tracker_user tables.
- */
-function tracker_update_7000() {
- $schema['tracker_node'] = array(
- 'description' => 'Tracks when nodes were last changed or commented on',
- 'fields' => array(
- 'nid' => array(
- 'description' => 'The {node}.nid this record tracks.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'published' => array(
- 'description' => 'Boolean indicating whether the node is published.',
- 'type' => 'int',
- 'not null' => FALSE,
- 'default' => 0,
- 'size' => 'tiny',
- ),
- 'changed' => array(
- 'description' => 'The Unix timestamp when the node was most recently saved or commented on.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- ),
- 'indexes' => array(
- 'tracker' => array('published', 'changed'),
- ),
- 'primary key' => array('nid'),
- 'foreign keys' => array(
- 'tracked_node' => array(
- 'table' => 'node',
- 'columns' => array('nid' => 'nid'),
- ),
- ),
- );
-
- $schema['tracker_user'] = array(
- 'description' => 'Tracks when nodes were last changed or commented on, for each user that authored the node or one of its comments.',
- 'fields' => array(
- 'nid' => array(
- 'description' => 'The {node}.nid this record tracks.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'uid' => array(
- 'description' => 'The {users}.uid of the node author or commenter.',
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- ),
- 'published' => array(
- 'description' => 'Boolean indicating whether the node is published.',
- 'type' => 'int',
- 'not null' => FALSE,
- 'default' => 0,
- 'size' => 'tiny',
- ),
- 'changed' => array(
- 'description' => 'The Unix timestamp when the node was most recently saved or commented on.',
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ),
- ),
- 'indexes' => array(
- 'tracker' => array('uid', 'published', 'changed'),
- ),
- 'primary key' => array('nid', 'uid'),
- 'foreign keys' => array(
- 'tracked_node' => array(
- 'table' => 'node',
- 'columns' => array('nid' => 'nid'),
- ),
- 'tracked_user' => array(
- 'table' => 'users',
- 'columns' => array('uid' => 'uid'),
- ),
- ),
- );
-
- foreach ($schema as $name => $table) {
- db_create_table($name, $table);
- }
-
- $max_nid = db_query('SELECT MAX(nid) FROM {node}')->fetchField();
- if ($max_nid != 0) {
- variable_set('tracker_index_nid', $max_nid);
- }
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
diff --git a/modules/tracker/tracker.module b/modules/tracker/tracker.module
deleted file mode 100644
index ab3e748..0000000
--- a/modules/tracker/tracker.module
+++ /dev/null
@@ -1,388 +0,0 @@
-' . t('About') . '';
- $output .= '' . t('The Tracker module displays the most recently added and updated content on your site, and allows you to follow new content created by each user. This module has no configuration options. For more information, see the online handbook entry for Tracker module .', array('@tracker' => 'http://drupal.org/documentation/modules/tracker/')) . '
';
- $output .= '' . t('Uses') . ' ';
- $output .= '';
- $output .= '' . t('Navigation') . ' ';
- $output .= '' . t('The Tracker module adds a new menu item to the Navigation menu, called Recent content . You can configure menu items via the Menus administration page .', array('@menus' => url('admin/structure/menu'))) . ' ';
- $output .= '' . t('Tracking new and updated site content') . ' ';
- $output .= '' . t("The Recent content page shows new and updated content in reverse chronological order, listing the content type, title, author's name, number of comments, and time of last update. Content is considered updated when changes occur in the text, or when new comments are added. The My recent content tab limits the list to the currently logged-in user.", array('@recent' => url('tracker'))) . ' ';
- $output .= '' . t('Tracking user-specific content') . ' ';
- $output .= '' . t("To follow a specific user's new and updated content, select the Track tab from the user's profile page.") . ' ';
- $output .= ' ';
- return $output;
- }
-}
-
-/**
- * Implements hook_menu().
- */
-function tracker_menu() {
- $items['tracker'] = array(
- 'title' => 'Recent content',
- 'page callback' => 'tracker_page',
- 'access arguments' => array('access content'),
- 'weight' => 1,
- 'file' => 'tracker.pages.inc',
- );
- $items['tracker/all'] = array(
- 'title' => 'All recent content',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- );
- $items['tracker/%user_uid_optional'] = array(
- 'title' => 'My recent content',
- 'page callback' => 'tracker_page',
- 'access callback' => '_tracker_myrecent_access',
- 'access arguments' => array(1),
- 'page arguments' => array(1),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'tracker.pages.inc',
- );
-
- $items['user/%user/track'] = array(
- 'title' => 'Track',
- 'page callback' => 'tracker_page',
- 'page arguments' => array(1, TRUE),
- 'access callback' => '_tracker_user_access',
- 'access arguments' => array(1),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'tracker.pages.inc',
- );
- $items['user/%user/track/content'] = array(
- 'title' => 'Track content',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- );
-
- return $items;
-}
-
-/**
- * Implements hook_cron().
- *
- * Updates tracking information for any items still to be tracked. The variable
- * 'tracker_index_nid' is set to ((the last node ID that was indexed) - 1) and
- * used to select the nodes to be processed. If there are no remaining nodes to
- * process, 'tracker_index_nid' will be 0.
- */
-function tracker_cron() {
- $max_nid = variable_get('tracker_index_nid', 0);
- $batch_size = variable_get('tracker_batch_size', 1000);
- if ($max_nid > 0) {
- $last_nid = FALSE;
- $result = db_query_range('SELECT nid, uid, status FROM {node} WHERE nid <= :max_nid ORDER BY nid DESC', 0, $batch_size, array(':max_nid' => $max_nid), array('target' => 'slave'));
-
- $count = 0;
-
- foreach ($result as $row) {
- // Calculate the changed timestamp for this node.
- $changed = _tracker_calculate_changed($row->nid);
-
- // Remove existing data for this node.
- db_delete('tracker_node')
- ->condition('nid', $row->nid)
- ->execute();
- db_delete('tracker_user')
- ->condition('nid', $row->nid)
- ->execute();
-
- // Insert the node-level data.
- db_insert('tracker_node')
- ->fields(array(
- 'nid' => $row->nid,
- 'published' => $row->status,
- 'changed' => $changed,
- ))
- ->execute();
-
- // Insert the user-level data for the node's author.
- db_insert('tracker_user')
- ->fields(array(
- 'nid' => $row->nid,
- 'published' => $row->status,
- 'changed' => $changed,
- 'uid' => $row->uid,
- ))
- ->execute();
-
- $query = db_select('comment', 'c', array('target' => 'slave'));
- // Force PostgreSQL to do an implicit cast by adding 0.
- $query->addExpression('0 + :changed', 'changed', array(':changed' => $changed));
- $query->addField('c', 'status', 'published');
- $query
- ->distinct()
- ->fields('c', array('uid', 'nid'))
- ->condition('c.nid', $row->nid)
- ->condition('c.uid', $row->uid, '<>')
- ->condition('c.status', COMMENT_PUBLISHED);
-
- // Insert the user-level data for the commenters (except if a commenter
- // is the node's author).
- db_insert('tracker_user')
- ->from($query)
- ->execute();
-
- // Note that we have indexed at least one node.
- $last_nid = $row->nid;
-
- $count++;
- }
-
- if ($last_nid !== FALSE) {
- // Prepare a starting point for the next run.
- variable_set('tracker_index_nid', $last_nid - 1);
-
- watchdog('tracker', 'Indexed %count content items for tracking.', array('%count' => $count));
- }
- else {
- // If all nodes have been indexed, set to zero to skip future cron runs.
- variable_set('tracker_index_nid', 0);
- }
- }
-}
-
-/**
- * Access callback for tracker/%user_uid_optional.
- */
-function _tracker_myrecent_access($account) {
- // This path is only allowed for authenticated users looking at their own content.
- return $account->uid && ($GLOBALS['user']->uid == $account->uid) && user_access('access content');
-}
-
-/**
- * Access callback for user/%user/track.
- */
-function _tracker_user_access($account) {
- return user_view_access($account) && user_access('access content');
-}
-
-/**
- * Implements hook_node_insert().
- *
- * Adds new tracking information for this node since it's new.
- */
-function tracker_node_insert($node, $arg = 0) {
- _tracker_add($node->nid, $node->uid, $node->changed);
-}
-
-/**
- * Implements hook_node_update().
- *
- * Adds tracking information for this node since it's been updated.
- */
-function tracker_node_update($node, $arg = 0) {
- _tracker_add($node->nid, $node->uid, $node->changed);
-}
-
-/**
- * Implements hook_node_delete().
- *
- * Deletes tracking information for a node.
- */
-function tracker_node_delete($node, $arg = 0) {
- db_delete('tracker_node')
- ->condition('nid', $node->nid)
- ->execute();
- db_delete('tracker_user')
- ->condition('nid', $node->nid)
- ->execute();
-}
-
-/**
- * Implements hook_comment_update().
- *
- * Comment module doesn't call hook_comment_unpublish() when saving individual
- * comments so we need to check for those here.
- */
-function tracker_comment_update($comment) {
- // comment_save() calls hook_comment_publish() for all published comments
- // so we need to handle all other values here.
- if ($comment->status != COMMENT_PUBLISHED) {
- _tracker_remove($comment->nid, $comment->uid, $comment->changed);
- }
-}
-
-/**
- * Implements hook_comment_publish().
- *
- * This actually handles the insert and update of published nodes since
- * comment_save() calls hook_comment_publish() for all published comments.
- */
-function tracker_comment_publish($comment) {
- _tracker_add($comment->nid, $comment->uid, $comment->changed);
-}
-
-/**
- * Implements hook_comment_unpublish().
- */
-function tracker_comment_unpublish($comment) {
- _tracker_remove($comment->nid, $comment->uid, $comment->changed);
-}
-
-/**
- * Implements hook_comment_delete().
- */
-function tracker_comment_delete($comment) {
- _tracker_remove($comment->nid, $comment->uid, $comment->changed);
-}
-
-/**
- * Updates indexing tables when a node is added, updated, or commented on.
- *
- * @param $nid
- * A node ID.
- * @param $uid
- * The node or comment author.
- * @param $changed
- * The node updated timestamp or comment timestamp.
- */
-function _tracker_add($nid, $uid, $changed) {
- $node = db_query('SELECT nid, status, uid, changed FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
-
- // Adding a comment can only increase the changed timestamp, so our
- // calculation here is simple.
- $changed = max($node->changed, $changed);
-
- // Update the node-level data.
- db_merge('tracker_node')
- ->key(array('nid' => $nid))
- ->fields(array(
- 'changed' => $changed,
- 'published' => $node->status,
- ))
- ->execute();
-
- // Create or update the user-level data, first for the user posting.
- db_merge('tracker_user')
- ->key(array(
- 'nid' => $nid,
- 'uid' => $uid,
- ))
- ->fields(array(
- 'changed' => $changed,
- 'published' => $node->status,
- ))
- ->execute();
- // Update the times for all the other users tracking the post.
- db_update('tracker_user')
- ->condition('nid', $nid)
- ->fields(array(
- 'changed' => $changed,
- 'published' => $node->status,
- ))
- ->execute();
-}
-
-/**
- * Determines the max timestamp between $node->changed and the last comment.
- *
- * @param $nid
- * A node ID.
- *
- * @return
- * The $node->changed timestamp, or most recent comment timestamp, whichever
- * is the greatest.
- */
-function _tracker_calculate_changed($nid) {
- $changed = db_query('SELECT changed FROM {node} WHERE nid = :nid', array(':nid' => $nid), array('target' => 'slave'))->fetchField();
- $latest_comment = db_query_range('SELECT cid, changed FROM {comment} WHERE nid = :nid AND status = :status ORDER BY changed DESC', 0, 1, array(
- ':nid' => $nid,
- ':status' => COMMENT_PUBLISHED,
- ), array('target' => 'slave'))->fetchObject();
- if ($latest_comment && $latest_comment->changed > $changed) {
- $changed = $latest_comment->changed;
- }
- return $changed;
-}
-
-/**
- * Cleans up indexed data when nodes or comments are removed.
- *
- * @param $nid
- * The node ID.
- * @param $uid
- * The author of the node or comment.
- * @param $changed
- * The last changed timestamp of the node.
- */
-function _tracker_remove($nid, $uid = NULL, $changed = NULL) {
- $node = db_query('SELECT nid, status, uid, changed FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
-
- // The user only keeps his or her subscription if both of the following are true:
- // (1) The node exists.
- // (2) The user is either the node author or has commented on the node.
- $keep_subscription = FALSE;
-
- if ($node) {
- // Self-authorship is one reason to keep the user's subscription.
- $keep_subscription = ($node->uid == $uid);
-
- // Comments are a second reason to keep the user's subscription.
- if (!$keep_subscription) {
- // Check if the user has commented at least once on the given nid.
- $keep_subscription = db_query_range('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND uid = :uid AND status = :status', 0, 1, array(
- ':nid' => $nid,
- ':uid' => $uid,
- ':status' => COMMENT_PUBLISHED,
- ))->fetchField();
- }
-
- // If we haven't found a reason to keep the user's subscription, delete it.
- if (!$keep_subscription) {
- db_delete('tracker_user')
- ->condition('nid', $nid)
- ->condition('uid', $uid)
- ->execute();
- }
-
- // Now we need to update the (possibly) changed timestamps for other users
- // and the node itself.
- // We only need to do this if the removed item has a timestamp that equals
- // or exceeds the listed changed timestamp for the node.
- $tracker_node = db_query('SELECT nid, changed FROM {tracker_node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
- if ($tracker_node && $changed >= $tracker_node->changed) {
- // If we're here, the item being removed is *possibly* the item that
- // established the node's changed timestamp.
-
- // We just have to recalculate things from scratch.
- $changed = _tracker_calculate_changed($nid);
-
- // And then we push the out the new changed timestamp to our denormalized
- // tables.
- db_update('tracker_node')
- ->fields(array(
- 'changed' => $changed,
- 'published' => $node->status,
- ))
- ->condition('nid', $nid)
- ->execute();
- db_update('tracker_node')
- ->fields(array(
- 'changed' => $changed,
- 'published' => $node->status,
- ))
- ->condition('nid', $nid)
- ->execute();
- }
- }
- else {
- // If the node doesn't exist, remove everything.
- db_delete('tracker_node')
- ->condition('nid', $nid)
- ->execute();
- db_delete('tracker_user')
- ->condition('nid', $nid)
- ->execute();
- }
-}
diff --git a/modules/tracker/tracker.pages.inc b/modules/tracker/tracker.pages.inc
deleted file mode 100644
index fa16b65..0000000
--- a/modules/tracker/tracker.pages.inc
+++ /dev/null
@@ -1,128 +0,0 @@
-extend('PagerDefault');
- $query->condition('t.uid', $account->uid);
-
- if ($set_title) {
- // When viewed from user/%user/track, display the name of the user
- // as page title -- the tab title remains Track so this needs to be done
- // here and not in the menu definition.
- drupal_set_title(format_username($account));
- }
- }
- else {
- $query = db_select('tracker_node', 't', array('target' => 'slave'))->extend('PagerDefault');
- }
-
- // This array acts as a placeholder for the data selected later
- // while keeping the correct order.
- $nodes = $query
- ->addTag('node_access')
- ->fields('t', array('nid', 'changed'))
- ->condition('t.published', 1)
- ->orderBy('t.changed', 'DESC')
- ->limit(25)
- ->execute()
- ->fetchAllAssoc('nid');
-
- $rows = array();
- if (!empty($nodes)) {
- // Now, get the data and put into the placeholder array.
- $result = db_query('SELECT n.nid, n.title, n.type, n.changed, n.uid, u.name, l.comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {users} u ON n.uid = u.uid WHERE n.nid IN (:nids)', array(':nids' => array_keys($nodes)), array('target' => 'slave'));
- foreach ($result as $node) {
- $node->last_activity = $nodes[$node->nid]->changed;
- $nodes[$node->nid] = $node;
- }
-
- // Display the data.
- foreach ($nodes as $node) {
- // Determine the number of comments.
- $comments = 0;
- if ($node->comment_count) {
- $comments = $node->comment_count;
-
- if ($new = comment_num_new($node->nid)) {
- $comments .= ' ';
- $comments .= l(format_plural($new, '1 new', '@count new'), 'node/' . $node->nid, array('fragment' => 'new'));
- }
- }
-
- $row = array(
- 'type' => check_plain(node_type_get_name($node->type)),
- 'title' => array('data' => l($node->title, 'node/' . $node->nid) . ' ' . theme('mark', array('type' => node_mark($node->nid, $node->changed)))),
- 'author' => array('data' => theme('username', array('account' => $node))),
- 'replies' => array('class' => array('replies'), 'data' => $comments),
- 'last updated' => array('data' => t('!time ago', array('!time' => format_interval(REQUEST_TIME - $node->last_activity)))),
- );
-
- // Adds extra RDFa markup to the $row array if the RDF module is enabled.
- if (function_exists('rdf_mapping_load')) {
- // Each node is not loaded for performance reasons, as a result we need
- // to retrieve the RDF mapping for each node type.
- $mapping = rdf_mapping_load('node', $node->type);
- // Adds RDFa markup to the title of the node. Because the RDFa markup is
- // added to the td tag which might contain HTML code, we specify an
- // empty datatype to ensure the value of the title read by the RDFa
- // parsers is a plain literal.
- $row['title'] += rdf_rdfa_attributes($mapping['title']) + array('datatype' => '');
- // Annotates the td tag containing the author of the node.
- $row['author'] += rdf_rdfa_attributes($mapping['uid']);
- // Annotates the td tag containing the number of replies. We add the
- // content attribute to ensure that only the comment count is used as
- // the value for 'num_replies'. Otherwise, other text such as a link
- // to the number of new comments could be included in the 'num_replies'
- // value.
- $row['replies'] += rdf_rdfa_attributes($mapping['comment_count']);
- $row['replies'] += array('content' => $node->comment_count);
- // If the node has no comments, we assume the node itself was modified
- // and apply 'changed' in addition to 'last_activity'. If there are
- // comments present, we cannot infer whether the node itself was
- // modified or a comment was posted, so we use only 'last_activity'.
- $mapping_last_activity = rdf_rdfa_attributes($mapping['last_activity'], $node->last_activity);
- if ($node->comment_count == 0) {
- $mapping_changed = rdf_rdfa_attributes($mapping['changed'], $node->last_activity);
- $mapping_last_activity['property'] = array_merge($mapping_last_activity['property'], $mapping_changed['property']);
- }
- $row['last updated'] += $mapping_last_activity;
-
- // We need to add the about attribute on the tr tag to specify which
- // node the RDFa annotations above apply to. We move the content of
- // $row to a 'data' sub array so we can specify attributes for the row.
- $row = array('data' => $row);
- $row['about'] = url('node/' . $node->nid);
- }
- $rows[] = $row;
- }
- }
-
- $page['tracker'] = array(
- '#rows' => $rows,
- '#header' => array(t('Type'), t('Title'), t('Author'), t('Replies'), t('Last updated')),
- '#theme' => 'table',
- '#empty' => t('No content available.'),
- '#attached' => array(
- 'css' => array(drupal_get_path('module', 'tracker') . '/tracker.css' => array()),
- ),
- );
- $page['pager'] = array(
- '#theme' => 'pager',
- '#weight' => 10,
- );
- $page['#sorted'] = TRUE;
-
- return $page;
-}
diff --git a/modules/tracker/tracker.test b/modules/tracker/tracker.test
deleted file mode 100644
index 8a48ea8..0000000
--- a/modules/tracker/tracker.test
+++ /dev/null
@@ -1,334 +0,0 @@
- 'Tracker',
- 'description' => 'Create and delete nodes and check for their display in the tracker listings.',
- 'group' => 'Tracker'
- );
- }
-
- function setUp() {
- parent::setUp('comment', 'tracker');
-
- $permissions = array('access comments', 'create page content', 'post comments', 'skip comment approval');
- $this->user = $this->drupalCreateUser($permissions);
- $this->other_user = $this->drupalCreateUser($permissions);
-
- // Make node preview optional.
- variable_set('comment_preview_page', 0);
- }
-
- /**
- * Tests for the presence of nodes on the global tracker listing.
- */
- function testTrackerAll() {
- $this->drupalLogin($this->user);
-
- $unpublished = $this->drupalCreateNode(array(
- 'title' => $this->randomName(8),
- 'status' => 0,
- ));
- $published = $this->drupalCreateNode(array(
- 'title' => $this->randomName(8),
- 'status' => 1,
- ));
-
- $this->drupalGet('tracker');
- $this->assertNoText($unpublished->title, 'Unpublished node do not show up in the tracker listing.');
- $this->assertText($published->title, 'Published node show up in the tracker listing.');
- $this->assertLink(t('My recent content'), 0, 'User tab shows up on the global tracker page.');
-
- // Delete a node and ensure it no longer appears on the tracker.
- node_delete($published->nid);
- $this->drupalGet('tracker');
- $this->assertNoText($published->title, 'Deleted node do not show up in the tracker listing.');
- }
-
- /**
- * Tests for the presence of nodes on a user's tracker listing.
- */
- function testTrackerUser() {
- $this->drupalLogin($this->user);
-
- $unpublished = $this->drupalCreateNode(array(
- 'title' => $this->randomName(8),
- 'uid' => $this->user->uid,
- 'status' => 0,
- ));
- $my_published = $this->drupalCreateNode(array(
- 'title' => $this->randomName(8),
- 'uid' => $this->user->uid,
- 'status' => 1,
- ));
- $other_published_no_comment = $this->drupalCreateNode(array(
- 'title' => $this->randomName(8),
- 'uid' => $this->other_user->uid,
- 'status' => 1,
- ));
- $other_published_my_comment = $this->drupalCreateNode(array(
- 'title' => $this->randomName(8),
- 'uid' => $this->other_user->uid,
- 'status' => 1,
- ));
- $comment = array(
- 'subject' => $this->randomName(),
- 'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
- );
- $this->drupalPost('comment/reply/' . $other_published_my_comment->nid, $comment, t('Save'));
-
- $this->drupalGet('user/' . $this->user->uid . '/track');
- $this->assertNoText($unpublished->title, "Unpublished nodes do not show up in the users's tracker listing.");
- $this->assertText($my_published->title, "Published nodes show up in the user's tracker listing.");
- $this->assertNoText($other_published_no_comment->title, "Other user's nodes do not show up in the user's tracker listing.");
- $this->assertText($other_published_my_comment->title, "Nodes that the user has commented on appear in the user's tracker listing.");
-
- // Verify that unpublished comments are removed from the tracker.
- $admin_user = $this->drupalCreateUser(array('administer comments', 'access user profiles'));
- $this->drupalLogin($admin_user);
- $this->drupalPost('comment/1/edit', array('status' => COMMENT_NOT_PUBLISHED), t('Save'));
- $this->drupalGet('user/' . $this->user->uid . '/track');
- $this->assertNoText($other_published_my_comment->title, 'Unpublished comments are not counted on the tracker listing.');
- }
-
- /**
- * Tests for the presence of the "new" flag for nodes.
- */
- function testTrackerNewNodes() {
- $this->drupalLogin($this->user);
-
- $edit = array(
- 'title' => $this->randomName(8),
- );
-
- $node = $this->drupalCreateNode($edit);
- $title = $edit['title'];
- $this->drupalGet('tracker');
- $this->assertPattern('/' . $title . '.*new/', 'New nodes are flagged as such in the tracker listing.');
-
- $this->drupalGet('node/' . $node->nid);
- $this->drupalGet('tracker');
- $this->assertNoPattern('/' . $title . '.*new/', 'Visited nodes are not flagged as new.');
-
- $this->drupalLogin($this->other_user);
- $this->drupalGet('tracker');
- $this->assertPattern('/' . $title . '.*new/', 'For another user, new nodes are flagged as such in the tracker listing.');
-
- $this->drupalGet('node/' . $node->nid);
- $this->drupalGet('tracker');
- $this->assertNoPattern('/' . $title . '.*new/', 'For another user, visited nodes are not flagged as new.');
- }
-
- /**
- * Tests for comment counters on the tracker listing.
- */
- function testTrackerNewComments() {
- $this->drupalLogin($this->user);
-
- $node = $this->drupalCreateNode(array(
- 'comment' => 2,
- 'title' => array(LANGUAGE_NONE => array(array('value' => $this->randomName(8)))),
- ));
-
- // Add a comment to the page.
- $comment = array(
- 'subject' => $this->randomName(),
- 'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
- );
- // The new comment is automatically viewed by the current user.
- $this->drupalPost('comment/reply/' . $node->nid, $comment, t('Save'));
-
- $this->drupalLogin($this->other_user);
- $this->drupalGet('tracker');
- $this->assertText('1 new', 'New comments are counted on the tracker listing pages.');
- $this->drupalGet('node/' . $node->nid);
-
- // Add another comment as other_user.
- $comment = array(
- 'subject' => $this->randomName(),
- 'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
- );
- // If the comment is posted in the same second as the last one then Drupal
- // can't tell the difference, so we wait one second here.
- sleep(1);
- $this->drupalPost('comment/reply/' . $node->nid, $comment, t('Save'));
-
- $this->drupalLogin($this->user);
- $this->drupalGet('tracker');
- $this->assertText('1 new', 'New comments are counted on the tracker listing pages.');
- }
-
- /**
- * Tests for ordering on a users tracker listing when comments are posted.
- */
- function testTrackerOrderingNewComments() {
- $this->drupalLogin($this->user);
-
- $node_one = $this->drupalCreateNode(array(
- 'title' => $this->randomName(8),
- ));
-
- $node_two = $this->drupalCreateNode(array(
- 'title' => $this->randomName(8),
- ));
-
- // Now get other_user to track these pieces of content.
- $this->drupalLogin($this->other_user);
-
- // Add a comment to the first page.
- $comment = array(
- 'subject' => $this->randomName(),
- 'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
- );
- $this->drupalPost('comment/reply/' . $node_one->nid, $comment, t('Save'));
-
- // If the comment is posted in the same second as the last one then Drupal
- // can't tell the difference, so we wait one second here.
- sleep(1);
-
- // Add a comment to the second page.
- $comment = array(
- 'subject' => $this->randomName(),
- 'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
- );
- $this->drupalPost('comment/reply/' . $node_two->nid, $comment, t('Save'));
-
- // We should at this point have in our tracker for other_user:
- // 1. node_two
- // 2. node_one
- // Because that's the reverse order of the posted comments.
-
- // Now we're going to post a comment to node_one which should jump it to the
- // top of the list.
-
- $this->drupalLogin($this->user);
- // If the comment is posted in the same second as the last one then Drupal
- // can't tell the difference, so we wait one second here.
- sleep(1);
-
- // Add a comment to the second page.
- $comment = array(
- 'subject' => $this->randomName(),
- 'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
- );
- $this->drupalPost('comment/reply/' . $node_one->nid, $comment, t('Save'));
-
- // Switch back to the other_user and assert that the order has swapped.
- $this->drupalLogin($this->other_user);
- $this->drupalGet('user/' . $this->other_user->uid . '/track');
- // This is a cheeky way of asserting that the nodes are in the right order
- // on the tracker page.
- // It's almost certainly too brittle.
- $pattern = '/' . preg_quote($node_one->title) . '.+' . preg_quote($node_two->title) . '/s';
- $this->verbose($pattern);
- $this->assertPattern($pattern, 'Most recently commented on node appears at the top of tracker');
- }
-
- /**
- * Tests that existing nodes are indexed by cron.
- */
- function testTrackerCronIndexing() {
- $this->drupalLogin($this->user);
-
- // Create 3 nodes.
- $edits = array();
- $nodes = array();
- for ($i = 1; $i <= 3; $i++) {
- $edits[$i] = array(
- 'comment' => 2,
- 'title' => $this->randomName(),
- );
- $nodes[$i] = $this->drupalCreateNode($edits[$i]);
- }
-
- // Add a comment to the last node as other user.
- $this->drupalLogin($this->other_user);
- $comment = array(
- 'subject' => $this->randomName(),
- 'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
- );
- $this->drupalPost('comment/reply/' . $nodes[3]->nid, $comment, t('Save'));
-
- // Start indexing backwards from node 3.
- variable_set('tracker_index_nid', 3);
-
- // Clear the current tracker tables and rebuild them.
- db_delete('tracker_node')
- ->execute();
- db_delete('tracker_user')
- ->execute();
- tracker_cron();
-
- $this->drupalLogin($this->user);
-
- // Fetch the user's tracker.
- $this->drupalGet('tracker/' . $this->user->uid);
-
- // Assert that all node titles are displayed.
- foreach ($nodes as $i => $node) {
- $this->assertText($node->title, format_string('Node @i is displayed on the tracker listing pages.', array('@i' => $i)));
- }
- $this->assertText('1 new', 'New comment is counted on the tracker listing pages.');
- $this->assertText('updated', 'Node is listed as updated');
-
- // Fetch the site-wide tracker.
- $this->drupalGet('tracker');
-
- // Assert that all node titles are displayed.
- foreach ($nodes as $i => $node) {
- $this->assertText($node->title, format_string('Node @i is displayed on the tracker listing pages.', array('@i' => $i)));
- }
- $this->assertText('1 new', 'New comment is counted on the tracker listing pages.');
- }
-
- /**
- * Tests that publish/unpublish works at admin/content/node.
- */
- function testTrackerAdminUnpublish() {
- $admin_user = $this->drupalCreateUser(array('access content overview', 'administer nodes', 'bypass node access'));
- $this->drupalLogin($admin_user);
-
- $node = $this->drupalCreateNode(array(
- 'comment' => 2,
- 'title' => $this->randomName(),
- ));
-
- // Assert that the node is displayed.
- $this->drupalGet('tracker');
- $this->assertText($node->title, 'Node is displayed on the tracker listing pages.');
-
- // Unpublish the node and ensure that it's no longer displayed.
- $edit = array(
- 'operation' => 'unpublish',
- 'nodes[' . $node->nid . ']' => $node->nid,
- );
- $this->drupalPost('admin/content', $edit, t('Update'));
-
- $this->drupalGet('tracker');
- $this->assertText(t('No content available.'), 'Node is displayed on the tracker listing pages.');
- }
-}
diff --git a/modules/translation/tests/translation_test.info b/modules/translation/tests/translation_test.info
deleted file mode 100644
index ee1d7ec..0000000
--- a/modules/translation/tests/translation_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "Content Translation Test"
-description = "Support module for the content translation tests."
-core = 7.x
-package = Testing
-version = VERSION
-hidden = TRUE
diff --git a/modules/translation/tests/translation_test.module b/modules/translation/tests/translation_test.module
deleted file mode 100644
index e3bb4b5..0000000
--- a/modules/translation/tests/translation_test.module
+++ /dev/null
@@ -1,13 +0,0 @@
-' . t('About') . '';
- $output .= '' . t('The Content translation module allows content to be translated into different languages. Working with the Locale module (which manages enabled languages and provides translation for the site interface), the Content translation module is key to creating and maintaining translated site content. For more information, see the online handbook entry for Content translation module .', array('@locale' => url('admin/help/locale'), '@translation' => 'http://drupal.org/documentation/modules/translation/')) . '
';
- $output .= '' . t('Uses') . ' ';
- $output .= '';
- $output .= '' . t('Configuring content types for translation') . ' ';
- $output .= '' . t('To configure a particular content type for translation, visit the Content types page, and click the edit link for the content type. In the Publishing options section, select Enabled, with translation under Multilingual support .', array('@content-types' => url('admin/structure/types'))) . ' ';
- $output .= '' . t('Assigning a language to content') . ' ';
- $output .= '' . t('Use the Language drop down to select the appropriate language when creating or editing content.') . ' ';
- $output .= '' . t('Translating content') . ' ';
- $output .= '' . t('Users with the translate content permission can translate content, if the content type has been configured to allow translations. To translate content, select the Translation tab when viewing the content, select the language for which you wish to provide content, and then enter the content.') . ' ';
- $output .= '' . t('Maintaining translations') . ' ';
- $output .= '' . t('If editing content in one language requires that translated versions also be updated to reflect the change, use the Flag translations as outdated check box to mark the translations as outdated and in need of revision. Individual translations may also be marked for revision by selecting the This translation needs to be updated check box on the translation editing form.') . ' ';
- $output .= ' ';
- return $output;
- case 'node/%/translate':
- $output = '' . t('Translations of a piece of content are managed with translation sets. Each translation set has one source post and any number of translations in any of the enabled languages . All translations are tracked to be up to date or outdated based on whether the source post was modified significantly.', array('!languages' => url('admin/config/regional/language'))) . '
';
- return $output;
- }
-}
-
-/**
- * Implements hook_menu().
- */
-function translation_menu() {
- $items = array();
- $items['node/%node/translate'] = array(
- 'title' => 'Translate',
- 'page callback' => 'translation_node_overview',
- 'page arguments' => array(1),
- 'access callback' => '_translation_tab_access',
- 'access arguments' => array(1),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 2,
- 'file' => 'translation.pages.inc',
- );
- return $items;
-}
-
-/**
- * Access callback: Checks that the user has permission to 'translate content'.
- *
- * Only displays the translation tab for nodes that are not language-neutral
- * of types that have translation enabled.
- *
- * @param $node
- * A node object.
- *
- * @return
- * TRUE if the translation tab should be displayed, FALSE otherwise.
- *
- * @see translation_menu()
- */
-function _translation_tab_access($node) {
- if (entity_language('node', $node) != LANGUAGE_NONE && translation_supported_type($node->type) && node_access('view', $node)) {
- return user_access('translate content');
- }
- return FALSE;
-}
-
-/**
- * Implements hook_admin_paths().
- */
-function translation_admin_paths() {
- if (variable_get('node_admin_theme')) {
- $paths = array(
- 'node/*/translate' => TRUE,
- );
- return $paths;
- }
-}
-
-/**
- * Implements hook_permission().
- */
-function translation_permission() {
- return array(
- 'translate content' => array(
- 'title' => t('Translate content'),
- ),
- );
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for node_type_form().
- */
-function translation_form_node_type_form_alter(&$form, &$form_state) {
- // Add translation option to content type form.
- $form['workflow']['language_content_type']['#options'][TRANSLATION_ENABLED] = t('Enabled, with translation');
- // Description based on text from locale.module.
- $form['workflow']['language_content_type']['#description'] = t('Enable multilingual support for this content type. If enabled, a language selection field will be added to the editing form, allowing you to select from one of the enabled languages . You can also turn on translation for this content type, which lets you have content translated to any of the installed languages. If disabled, new posts are saved with the default language. Existing content will not be affected by changing this option.', array('!languages' => url('admin/config/regional/language')));
-}
-
-/**
- * Implements hook_form_BASE_FORM_ID_alter() for node_form().
- *
- * Alters language fields on node edit forms when a translation is about to be
- * created.
- *
- * @see node_form()
- */
-function translation_form_node_form_alter(&$form, &$form_state) {
- if (translation_supported_type($form['#node']->type)) {
- $node = $form['#node'];
- $languages = language_list('enabled');
- $disabled_languages = isset($languages[0]) ? $languages[0] : FALSE;
- $translator_widget = $disabled_languages && user_access('translate content');
- $groups = array(t('Disabled'), t('Enabled'));
- // Allow translators to enter content in disabled languages. Translators
- // might need to distinguish between enabled and disabled languages, hence
- // we divide them in two option groups.
- if ($translator_widget) {
- $options = array($groups[1] => array(LANGUAGE_NONE => t('Language neutral')));
- $language_list = locale_language_list('name', TRUE);
- foreach (array(1, 0) as $status) {
- $group = $groups[$status];
- foreach ($languages[$status] as $langcode => $language) {
- $options[$group][$langcode] = $language_list[$langcode];
- }
- }
- $form['language']['#options'] = $options;
- }
- if (!empty($node->translation_source)) {
- // We are creating a translation. Add values and lock language field.
- $form['translation_source'] = array('#type' => 'value', '#value' => $node->translation_source);
- $form['language']['#disabled'] = TRUE;
- }
- elseif (!empty($node->nid) && !empty($node->tnid)) {
- // Disable languages for existing translations, so it is not possible to switch this
- // node to some language which is already in the translation set. Also remove the
- // language neutral option.
- unset($form['language']['#options'][LANGUAGE_NONE]);
- foreach (translation_node_get_translations($node->tnid) as $langcode => $translation) {
- if ($translation->nid != $node->nid) {
- if ($translator_widget) {
- $group = $groups[(int)!isset($disabled_languages[$langcode])];
- unset($form['language']['#options'][$group][$langcode]);
- }
- else {
- unset($form['language']['#options'][$langcode]);
- }
- }
- }
- // Add translation values and workflow options.
- $form['tnid'] = array('#type' => 'value', '#value' => $node->tnid);
- $form['translation'] = array(
- '#type' => 'fieldset',
- '#title' => t('Translation settings'),
- '#access' => user_access('translate content'),
- '#collapsible' => TRUE,
- '#collapsed' => !$node->translate,
- '#tree' => TRUE,
- '#weight' => 30,
- );
- if ($node->tnid == $node->nid) {
- // This is the source node of the translation
- $form['translation']['retranslate'] = array(
- '#type' => 'checkbox',
- '#title' => t('Flag translations as outdated'),
- '#default_value' => 0,
- '#description' => t('If you made a significant change, which means translations should be updated, you can flag all translations of this post as outdated. This will not change any other property of those posts, like whether they are published or not.'),
- );
- $form['translation']['status'] = array('#type' => 'value', '#value' => 0);
- }
- else {
- $form['translation']['status'] = array(
- '#type' => 'checkbox',
- '#title' => t('This translation needs to be updated'),
- '#default_value' => $node->translate,
- '#description' => t('When this option is checked, this translation needs to be updated because the source post has changed. Uncheck when the translation is up to date again.'),
- );
- }
- }
- }
-}
-
-/**
- * Implements hook_node_view().
- *
- * Displays translation links with language names if this node is part of a
- * translation set. If no language provider is enabled, "fall back" to simple
- * links built through the result of translation_node_get_translations().
- */
-function translation_node_view($node, $view_mode) {
- // If the site has no translations or is not multilingual we have no content
- // translation links to display.
- if (isset($node->tnid) && drupal_multilingual() && $translations = translation_node_get_translations($node->tnid)) {
- $languages = language_list('enabled');
- $languages = $languages[1];
-
- // There might be a language provider enabled defining custom language
- // switch links which need to be taken into account while generating the
- // content translation links. As custom language switch links are available
- // only for configurable language types and interface language is the only
- // configurable language type in core, we use it as default. Contributed
- // modules can change this behavior by setting the system variable below.
- $type = variable_get('translation_language_type', LANGUAGE_TYPE_INTERFACE);
- $custom_links = language_negotiation_get_switch_links($type, "node/$node->nid");
- $links = array();
-
- foreach ($translations as $langcode => $translation) {
- // Do not show links to the same node, to unpublished translations or to
- // translations in disabled languages.
- if ($translation->status && isset($languages[$langcode]) && $langcode != entity_language('node', $node)) {
- $language = $languages[$langcode];
- $key = "translation_$langcode";
-
- if (isset($custom_links->links[$langcode])) {
- $links[$key] = $custom_links->links[$langcode];
- }
- else {
- $links[$key] = array(
- 'href' => "node/{$translation->nid}",
- 'title' => $language->native,
- 'language' => $language,
- );
- }
-
- // Custom switch links are more generic than content translation links,
- // hence we override existing attributes with the ones below.
- $links[$key] += array('attributes' => array());
- $attributes = array(
- 'title' => $translation->title,
- 'class' => array('translation-link'),
- );
- $links[$key]['attributes'] = $attributes + $links[$key]['attributes'];
- }
- }
-
- $node->content['links']['translation'] = array(
- '#theme' => 'links__node__translation',
- '#links' => $links,
- '#attributes' => array('class' => array('links', 'inline')),
- );
- }
-}
-
-/**
- * Implements hook_node_prepare().
- */
-function translation_node_prepare($node) {
- // Only act if we are dealing with a content type supporting translations.
- if (translation_supported_type($node->type) &&
- // And it's a new node.
- empty($node->nid) &&
- // And the user has permission to translate content.
- user_access('translate content') &&
- // And the $_GET variables are set properly.
- isset($_GET['translation']) &&
- isset($_GET['target']) &&
- is_numeric($_GET['translation'])) {
-
- $source_node = node_load($_GET['translation']);
- if (empty($source_node) || !node_access('view', $source_node)) {
- // Source node not found or no access to view. We should not check
- // for edit access, since the translator might not have permissions
- // to edit the source node but should still be able to translate.
- return;
- }
-
- $language_list = language_list();
- $langcode = $_GET['target'];
- if (!isset($language_list[$langcode]) || ($source_node->language == $langcode)) {
- // If not supported language, or same language as source node, break.
- return;
- }
-
- // Ensure we don't have an existing translation in this language.
- if (!empty($source_node->tnid)) {
- $translations = translation_node_get_translations($source_node->tnid);
- if (isset($translations[$langcode])) {
- drupal_set_message(t('A translation of %title in %language already exists, a new %type will be created instead of a translation.', array('%title' => $source_node->title, '%language' => $language_list[$langcode]->name, '%type' => $node->type)), 'error');
- return;
- }
- }
-
- // Populate fields based on source node.
- $node->language = $langcode;
- $node->translation_source = $source_node;
- $node->title = $source_node->title;
-
- // Add field translations and let other modules module add custom translated
- // fields.
- field_attach_prepare_translation('node', $node, $langcode, $source_node, $source_node->language);
- }
-}
-
-/**
- * Implements hook_node_insert().
- */
-function translation_node_insert($node) {
- // Only act if we are dealing with a content type supporting translations.
- if (translation_supported_type($node->type)) {
- if (!empty($node->translation_source)) {
- if ($node->translation_source->tnid) {
- // Add node to existing translation set.
- $tnid = $node->translation_source->tnid;
- }
- else {
- // Create new translation set, using nid from the source node.
- $tnid = $node->translation_source->nid;
- db_update('node')
- ->fields(array(
- 'tnid' => $tnid,
- 'translate' => 0,
- ))
- ->condition('nid', $tnid)
- ->execute();
-
- // Flush the (untranslated) source node from the load cache.
- entity_get_controller('node')->resetCache(array($tnid));
- }
-
- db_update('node')
- ->fields(array(
- 'tnid' => $tnid,
- 'translate' => 0,
- ))
- ->condition('nid', $node->nid)
- ->execute();
- // Save tnid to avoid loss in case of resave.
- $node->tnid = $tnid;
- }
- }
-}
-
-/**
- * Implements hook_node_update().
- */
-function translation_node_update($node) {
- // Only act if we are dealing with a content type supporting translations.
- if (translation_supported_type($node->type)) {
- $langcode = entity_language('node', $node);
- if (isset($node->translation) && $node->translation && !empty($langcode) && $node->tnid) {
- // Update translation information.
- db_update('node')
- ->fields(array(
- 'tnid' => $node->tnid,
- 'translate' => $node->translation['status'],
- ))
- ->condition('nid', $node->nid)
- ->execute();
-
- if (!empty($node->translation['retranslate'])) {
- // This is the source node, asking to mark all translations outdated.
- $translations = db_select('node', 'n')
- ->fields('n', array('nid'))
- ->condition('nid', $node->nid, '<>')
- ->condition('tnid', $node->tnid)
- ->execute()
- ->fetchCol();
-
- db_update('node')
- ->fields(array('translate' => 1))
- ->condition('nid', $translations, 'IN')
- ->execute();
-
- // Flush the modified translation nodes from the load cache.
- entity_get_controller('node')->resetCache($translations);
- }
- }
- }
-}
-
-/**
- * Implements hook_node_validate().
- *
- * Ensures that duplicate translations can't be created for the same source.
- */
-function translation_node_validate($node, $form) {
- // Only act on translatable nodes with a tnid or translation_source.
- if (translation_supported_type($node->type) && (!empty($node->tnid) || !empty($form['#node']->translation_source->nid))) {
- $tnid = !empty($node->tnid) ? $node->tnid : $form['#node']->translation_source->nid;
- $translations = translation_node_get_translations($tnid);
- $langcode = entity_language('node', $node);
- if (isset($translations[$langcode]) && $translations[$langcode]->nid != $node->nid ) {
- form_set_error('language', t('There is already a translation in this language.'));
- }
- }
-}
-
-/**
- * Implements hook_node_delete().
- */
-function translation_node_delete($node) {
- // Only act if we are dealing with a content type supporting translations.
- if (translation_supported_type($node->type)) {
- translation_remove_from_set($node);
- }
-}
-
-/**
- * Removes a node from its translation set and updates accordingly.
- *
- * @param $node
- * A node object.
- */
-function translation_remove_from_set($node) {
- if (isset($node->tnid)) {
- $query = db_update('node')
- ->fields(array(
- 'tnid' => 0,
- 'translate' => 0,
- ));
-
- // Determine which nodes to apply the update to.
- $set_nids = db_query('SELECT nid FROM {node} WHERE tnid = :tnid', array(':tnid' => $node->tnid))->fetchCol();
- if (count($set_nids) == 1) {
- // There is only one node left in the set: remove the set altogether.
- $query
- ->condition('tnid', $node->tnid)
- ->execute();
-
- $flush_set = TRUE;
- }
- else {
- $query
- ->condition('nid', $node->nid)
- ->execute();
-
- // If the node being removed was the source of the translation set,
- // we pick a new source - preferably one that is up to date.
- if ($node->tnid == $node->nid) {
- $new_tnid = db_query('SELECT nid FROM {node} WHERE tnid = :tnid ORDER BY translate ASC, nid ASC', array(':tnid' => $node->tnid))->fetchField();
- db_update('node')
- ->fields(array('tnid' => $new_tnid))
- ->condition('tnid', $node->tnid)
- ->execute();
-
- $flush_set = TRUE;
- }
- }
-
- // Flush the modified nodes from the load cache.
- $nids = !empty($flush_set) ? $set_nids : array($node->nid);
- entity_get_controller('node')->resetCache($nids);
- }
-}
-
-/**
- * Gets all nodes in a given translation set.
- *
- * @param $tnid
- * The translation source nid of the translation set, the identifier of the
- * node used to derive all translations in the set.
- *
- * @return
- * Array of partial node objects (nid, title, language) representing all
- * nodes in the translation set, in effect all translations of node $tnid,
- * including node $tnid itself. Because these are partial nodes, you need to
- * node_load() the full node, if you need more properties. The array is
- * indexed by language code.
- */
-function translation_node_get_translations($tnid) {
- if (is_numeric($tnid) && $tnid) {
- $translations = &drupal_static(__FUNCTION__, array());
-
- if (!isset($translations[$tnid])) {
- $translations[$tnid] = array();
- $result = db_select('node', 'n')
- ->fields('n', array('nid', 'type', 'uid', 'status', 'title', 'language'))
- ->condition('n.tnid', $tnid)
- ->addTag('node_access')
- ->execute();
-
- foreach ($result as $node) {
- $langcode = entity_language('node', $node);
- $translations[$tnid][$langcode] = $node;
- }
- }
- return $translations[$tnid];
- }
-}
-
-/**
- * Returns whether the given content type has support for translations.
- *
- * @return
- * TRUE if translation is supported, and FALSE if not.
- */
-function translation_supported_type($type) {
- return variable_get('language_content_type_' . $type, 0) == TRANSLATION_ENABLED;
-}
-
-/**
- * Returns the paths of all translations of a node, based on its Drupal path.
- *
- * @param $path
- * A Drupal path, for example node/432.
- *
- * @return
- * An array of paths of translations of the node accessible to the current
- * user, keyed with language codes.
- */
-function translation_path_get_translations($path) {
- $paths = array();
- // Check for a node related path, and for its translations.
- if ((preg_match("!^node/(\d+)(/.+|)$!", $path, $matches)) && ($node = node_load((int) $matches[1])) && !empty($node->tnid)) {
- foreach (translation_node_get_translations($node->tnid) as $language => $translation_node) {
- $paths[$language] = 'node/' . $translation_node->nid . $matches[2];
- }
- }
- return $paths;
-}
-
-/**
- * Implements hook_language_switch_links_alter().
- *
- * Replaces links with pointers to translated versions of the content.
- */
-function translation_language_switch_links_alter(array &$links, $type, $path) {
- $language_type = variable_get('translation_language_type', LANGUAGE_TYPE_INTERFACE);
-
- if ($type == $language_type && preg_match("!^node/(\d+)(/.+|)!", $path, $matches)) {
- $node = node_load((int) $matches[1]);
-
- if (empty($node->tnid)) {
- // If the node cannot be found nothing needs to be done. If it does not
- // have translations it might be a language neutral node, in which case we
- // must leave the language switch links unaltered. This is true also for
- // nodes not having translation support enabled.
- if (empty($node) || entity_language('node', $node) == LANGUAGE_NONE || !translation_supported_type($node->type)) {
- return;
- }
- $langcode = entity_language('node', $node);
- $translations = array($langcode => $node);
- }
- else {
- $translations = translation_node_get_translations($node->tnid);
- }
-
- foreach ($links as $langcode => $link) {
- if (isset($translations[$langcode]) && $translations[$langcode]->status) {
- // Translation in a different node.
- $links[$langcode]['href'] = 'node/' . $translations[$langcode]->nid . $matches[2];
- }
- else {
- // No translation in this language, or no permission to view.
- unset($links[$langcode]['href']);
- $links[$langcode]['attributes']['class'][] = 'locale-untranslated';
- }
- }
- }
-}
diff --git a/modules/translation/translation.pages.inc b/modules/translation/translation.pages.inc
deleted file mode 100644
index 110fea6..0000000
--- a/modules/translation/translation.pages.inc
+++ /dev/null
@@ -1,82 +0,0 @@
-tnid) {
- // Already part of a set, grab that set.
- $tnid = $node->tnid;
- $translations = translation_node_get_translations($node->tnid);
- }
- else {
- // We have no translation source nid, this could be a new set, emulate that.
- $tnid = $node->nid;
- $translations = array(entity_language('node', $node) => $node);
- }
-
- $type = variable_get('translation_language_type', LANGUAGE_TYPE_INTERFACE);
- $header = array(t('Language'), t('Title'), t('Status'), t('Operations'));
-
- foreach (language_list() as $langcode => $language) {
- $options = array();
- $language_name = $language->name;
- if (isset($translations[$langcode])) {
- // Existing translation in the translation set: display status.
- // We load the full node to check whether the user can edit it.
- $translation_node = node_load($translations[$langcode]->nid);
- $path = 'node/' . $translation_node->nid;
- $links = language_negotiation_get_switch_links($type, $path);
- $title = empty($links->links[$langcode]['href']) ? l($translation_node->title, $path) : l($translation_node->title, $links->links[$langcode]['href'], $links->links[$langcode]);
- if (node_access('update', $translation_node)) {
- $text = t('edit');
- $path = 'node/' . $translation_node->nid . '/edit';
- $links = language_negotiation_get_switch_links($type, $path);
- $options[] = empty($links->links[$langcode]['href']) ? l($text, $path) : l($text, $links->links[$langcode]['href'], $links->links[$langcode]);
- }
- $status = $translation_node->status ? t('Published') : t('Not published');
- $status .= $translation_node->translate ? ' - ' . t('outdated') . ' ' : '';
- if ($translation_node->nid == $tnid) {
- $language_name = t('@language_name (source)', array('@language_name' => $language_name));
- }
- }
- else {
- // No such translation in the set yet: help user to create it.
- $title = t('n/a');
- if (node_access('create', $node)) {
- $text = t('add translation');
- $path = 'node/add/' . str_replace('_', '-', $node->type);
- $links = language_negotiation_get_switch_links($type, $path);
- $query = array('query' => array('translation' => $node->nid, 'target' => $langcode));
- $options[] = empty($links->links[$langcode]['href']) ? l($text, $path, $query) : l($text, $links->links[$langcode]['href'], array_merge_recursive($links->links[$langcode], $query));
- }
- $status = t('Not translated');
- }
- $rows[] = array($language_name, $title, $status, implode(" | ", $options));
- }
-
- drupal_set_title(t('Translations of %title', array('%title' => $node->title)), PASS_THROUGH);
-
- $build['translation_node_overview'] = array(
- '#theme' => 'table',
- '#header' => $header,
- '#rows' => $rows,
- );
-
- return $build;
-}
diff --git a/modules/translation/translation.test b/modules/translation/translation.test
deleted file mode 100644
index 4d272f3..0000000
--- a/modules/translation/translation.test
+++ /dev/null
@@ -1,492 +0,0 @@
- 'Translation functionality',
- 'description' => 'Create a basic page with translation, modify the page outdating translation, and update translation.',
- 'group' => 'Translation'
- );
- }
-
- function setUp() {
- parent::setUp('locale', 'translation', 'translation_test');
-
- // Setup users.
- $this->admin_user = $this->drupalCreateUser(array('bypass node access', 'administer nodes', 'administer languages', 'administer content types', 'administer blocks', 'access administration pages', 'translate content'));
- $this->translator = $this->drupalCreateUser(array('create page content', 'edit own page content', 'translate content'));
-
- $this->drupalLogin($this->admin_user);
-
- // Add languages.
- $this->addLanguage('en');
- $this->addLanguage('es');
- $this->addLanguage('it');
-
- // Disable Italian to test the translation behavior with disabled languages.
- $edit = array('enabled[it]' => FALSE);
- $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
-
- // Set "Basic page" content type to use multilingual support with
- // translation.
- $this->drupalGet('admin/structure/types/manage/page');
- $edit = array();
- $edit['language_content_type'] = 2;
- $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
- $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Basic page')), 'Basic page content type has been updated.');
-
- // Enable the language switcher block.
- $language_type = LANGUAGE_TYPE_INTERFACE;
- $edit = array("blocks[locale_$language_type][region]" => 'sidebar_first');
- $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
-
- // Enable URL language detection and selection to make the language switcher
- // block appear.
- $edit = array('language[enabled][locale-url]' => TRUE);
- $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
- $this->assertRaw(t('Language negotiation configuration saved.'), 'URL language detection enabled.');
- $this->resetCaches();
-
- $this->drupalLogin($this->translator);
- }
-
- /**
- * Creates, modifies, and updates a basic page with a translation.
- */
- function testContentTranslation() {
- // Create Basic page in English.
- $node_title = $this->randomName();
- $node_body = $this->randomName();
- $node = $this->createPage($node_title, $node_body, 'en');
-
- // Unpublish the original node to check that this has no impact on the
- // translation overview page, publish it again afterwards.
- $this->drupalLogin($this->admin_user);
- $this->drupalPost('node/' . $node->nid . '/edit', array('status' => FALSE), t('Save'));
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->drupalPost('node/' . $node->nid . '/edit', array('status' => NODE_PUBLISHED), t('Save'));
- $this->drupalLogin($this->translator);
-
- // Check that the "add translation" link uses a localized path.
- $languages = language_list();
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->assertLinkByHref($languages['es']->prefix . '/node/add/' . str_replace('_', '-', $node->type), 0, format_string('The "add translation" link for %language points to the localized path of the target language.', array('%language' => $languages['es']->name)));
-
- // Submit translation in Spanish.
- $node_translation_title = $this->randomName();
- $node_translation_body = $this->randomName();
- $node_translation = $this->createTranslation($node, $node_translation_title, $node_translation_body, 'es');
-
- // Check that the "edit translation" and "view node" links use localized
- // paths.
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->assertLinkByHref($languages['es']->prefix . '/node/' . $node_translation->nid . '/edit', 0, format_string('The "edit" link for the translation in %language points to the localized path of the translation language.', array('%language' => $languages['es']->name)));
- $this->assertLinkByHref($languages['es']->prefix . '/node/' . $node_translation->nid, 0, format_string('The "view" link for the translation in %language points to the localized path of the translation language.', array('%language' => $languages['es']->name)));
-
- // Attempt to submit a duplicate translation by visiting the node/add page
- // with identical query string.
- $this->drupalGet('node/add/page', array('query' => array('translation' => $node->nid, 'target' => 'es')));
- $this->assertRaw(t('A translation of %title in %language already exists', array('%title' => $node_title, '%language' => $languages['es']->name)), 'Message regarding attempted duplicate translation is displayed.');
-
- // Attempt a resubmission of the form - this emulates using the back button
- // to return to the page then resubmitting the form without a refresh.
- $edit = array();
- $langcode = LANGUAGE_NONE;
- $edit["title"] = $this->randomName();
- $edit["body[$langcode][0][value]"] = $this->randomName();
- $this->drupalPost('node/add/page', $edit, t('Save'), array('query' => array('translation' => $node->nid, 'language' => 'es')));
- $duplicate = $this->drupalGetNodeByTitle($edit["title"]);
- $this->assertEqual($duplicate->tnid, 0, 'The node does not have a tnid.');
-
- // Update original and mark translation as outdated.
- $node_body = $this->randomName();
- $node->body[LANGUAGE_NONE][0]['value'] = $node_body;
- $edit = array();
- $edit["body[$langcode][0][value]"] = $node_body;
- $edit['translation[retranslate]'] = TRUE;
- $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
- $this->assertRaw(t('Basic page %title has been updated.', array('%title' => $node_title)), 'Original node updated.');
-
- // Check to make sure that interface shows translation as outdated.
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->assertRaw('' . t('outdated') . ' ', 'Translation marked as outdated.');
-
- // Update translation and mark as updated.
- $edit = array();
- $edit["body[$langcode][0][value]"] = $this->randomName();
- $edit['translation[status]'] = FALSE;
- $this->drupalPost('node/' . $node_translation->nid . '/edit', $edit, t('Save'));
- $this->assertRaw(t('Basic page %title has been updated.', array('%title' => $node_translation_title)), 'Translated node updated.');
-
- // Confirm that disabled languages are an option for translators when
- // creating nodes.
- $this->drupalGet('node/add/page');
- $this->assertFieldByXPath('//select[@name="language"]//option', 'it', 'Italian (disabled) is available in language selection.');
- $translation_it = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'it');
- $this->assertRaw($translation_it->body[LANGUAGE_NONE][0]['value'], 'Content created in Italian (disabled).');
-
- // Confirm that language neutral is an option for translators when there are
- // disabled languages.
- $this->drupalGet('node/add/page');
- $this->assertFieldByXPath('//select[@name="language"]//option', LANGUAGE_NONE, 'Language neutral is available in language selection with disabled languages.');
- $node2 = $this->createPage($this->randomName(), $this->randomName(), LANGUAGE_NONE);
- $this->assertRaw($node2->body[LANGUAGE_NONE][0]['value'], 'Language neutral content created with disabled languages available.');
-
- // Leave just one language enabled and check that the translation overview
- // page is still accessible.
- $this->drupalLogin($this->admin_user);
- $edit = array('enabled[es]' => FALSE);
- $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
- $this->drupalLogin($this->translator);
- $this->drupalGet('node/' . $node->nid . '/translate');
- $this->assertRaw(t('Translations of %title', array('%title' => $node->title)), 'Translation overview page available with only one language enabled.');
- }
-
- /**
- * Checks that the language switch links behave properly.
- */
- function testLanguageSwitchLinks() {
- // Create a Basic page in English and its translations in Spanish and
- // Italian.
- $node = $this->createPage($this->randomName(), $this->randomName(), 'en');
- $translation_es = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'es');
- $translation_it = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'it');
-
- // Check that language switch links are correctly shown only for enabled
- // languages.
- $this->assertLanguageSwitchLinks($node, $translation_es);
- $this->assertLanguageSwitchLinks($translation_es, $node);
- $this->assertLanguageSwitchLinks($node, $translation_it, FALSE);
-
- // Check that links to the displayed translation appear only in the language
- // switcher block.
- $this->assertLanguageSwitchLinks($node, $node, FALSE, 'node');
- $this->assertLanguageSwitchLinks($node, $node, TRUE, 'block-locale');
-
- // Unpublish the Spanish translation to check that the related language
- // switch link is not shown.
- $this->drupalLogin($this->admin_user);
- $edit = array('status' => FALSE);
- $this->drupalPost("node/$translation_es->nid/edit", $edit, t('Save'));
- $this->drupalLogin($this->translator);
- $this->assertLanguageSwitchLinks($node, $translation_es, FALSE);
-
- // Check that content translation links are shown even when no language
- // negotiation is configured.
- $this->drupalLogin($this->admin_user);
- $edit = array('language[enabled][locale-url]' => FALSE);
- $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
- $this->resetCaches();
- $edit = array('status' => TRUE);
- $this->drupalPost("node/$translation_es->nid/edit", $edit, t('Save'));
- $this->drupalLogin($this->translator);
- $this->assertLanguageSwitchLinks($node, $translation_es, TRUE, 'node');
- }
-
- /**
- * Tests that the language switcher block alterations work as intended.
- */
- function testLanguageSwitcherBlockIntegration() {
- // Enable Italian to have three items in the language switcher block.
- $this->drupalLogin($this->admin_user);
- $edit = array('enabled[it]' => TRUE);
- $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
- $this->drupalLogin($this->translator);
-
- // Create a Basic page in English.
- $type = 'block-locale';
- $node = $this->createPage($this->randomName(), $this->randomName(), 'en');
- $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $this->emptyNode('es'), TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $this->emptyNode('it'), TRUE, $type);
-
- // Create the Spanish translation.
- $translation_es = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'es');
- $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $translation_es, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $this->emptyNode('it'), TRUE, $type);
-
- // Create the Italian translation.
- $translation_it = $this->createTranslation($node, $this->randomName(), $this->randomName(), 'it');
- $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $translation_es, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $translation_it, TRUE, $type);
-
- // Create a language neutral node and check that the language switcher is
- // left untouched.
- $node2 = $this->createPage($this->randomName(), $this->randomName(), LANGUAGE_NONE);
- $node2_en = (object) array('nid' => $node2->nid, 'language' => 'en');
- $node2_es = (object) array('nid' => $node2->nid, 'language' => 'es');
- $node2_it = (object) array('nid' => $node2->nid, 'language' => 'it');
- $this->assertLanguageSwitchLinks($node2_en, $node2_en, TRUE, $type);
- $this->assertLanguageSwitchLinks($node2_en, $node2_es, TRUE, $type);
- $this->assertLanguageSwitchLinks($node2_en, $node2_it, TRUE, $type);
-
- // Disable translation support to check that the language switcher is left
- // untouched only for new nodes.
- $this->drupalLogin($this->admin_user);
- $edit = array('language_content_type' => 0);
- $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
- $this->drupalLogin($this->translator);
-
- // Existing translations trigger alterations even if translation support is
- // disabled.
- $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $translation_es, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $translation_it, TRUE, $type);
-
- // Check that new nodes with a language assigned do not trigger language
- // switcher alterations when translation support is disabled.
- $node = $this->createPage($this->randomName(), $this->randomName());
- $node_es = (object) array('nid' => $node->nid, 'language' => 'es');
- $node_it = (object) array('nid' => $node->nid, 'language' => 'it');
- $this->assertLanguageSwitchLinks($node, $node, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $node_es, TRUE, $type);
- $this->assertLanguageSwitchLinks($node, $node_it, TRUE, $type);
- }
-
- /**
- * Resets static caches to make the test code match the client-side behavior.
- */
- function resetCaches() {
- drupal_static_reset('locale_url_outbound_alter');
- }
-
- /**
- * Returns an empty node data structure.
- *
- * @param $langcode
- * The language code.
- *
- * @return
- * An empty node data structure.
- */
- function emptyNode($langcode) {
- return (object) array('nid' => NULL, 'language' => $langcode);
- }
-
- /**
- * Installs the specified language, or enables it if it is already installed.
- *
- * @param $language_code
- * The language code to check.
- */
- function addLanguage($language_code) {
- // Check to make sure that language has not already been installed.
- $this->drupalGet('admin/config/regional/language');
-
- if (strpos($this->drupalGetContent(), 'enabled[' . $language_code . ']') === FALSE) {
- // Doesn't have language installed so add it.
- $edit = array();
- $edit['langcode'] = $language_code;
- $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
-
- // Make sure we are not using a stale list.
- drupal_static_reset('language_list');
- $languages = language_list('language');
- $this->assertTrue(array_key_exists($language_code, $languages), 'Language was installed successfully.');
-
- if (array_key_exists($language_code, $languages)) {
- $this->assertRaw(t('The language %language has been created and can now be used. More information is available on the help screen .', array('%language' => $languages[$language_code]->name, '@locale-help' => url('admin/help/locale'))), 'Language has been created.');
- }
- }
- elseif ($this->xpath('//input[@type="checkbox" and @name=:name and @checked="checked"]', array(':name' => 'enabled[' . $language_code . ']'))) {
- // It's installed and enabled. No need to do anything.
- $this->assertTrue(true, 'Language [' . $language_code . '] already installed and enabled.');
- }
- else {
- // It's installed but not enabled. Enable it.
- $this->assertTrue(true, 'Language [' . $language_code . '] already installed.');
- $this->drupalPost(NULL, array('enabled[' . $language_code . ']' => TRUE), t('Save configuration'));
- $this->assertRaw(t('Configuration saved.'), 'Language successfully enabled.');
- }
- }
-
- /**
- * Creates a "Basic page" in the specified language.
- *
- * @param $title
- * The title of a basic page in the specified language.
- * @param $body
- * The body of a basic page in the specified language.
- * @param $language
- * (optional) Language code.
- *
- * @return
- * A node object.
- */
- function createPage($title, $body, $language = NULL) {
- $edit = array();
- $langcode = LANGUAGE_NONE;
- $edit["title"] = $title;
- $edit["body[$langcode][0][value]"] = $body;
- if (!empty($language)) {
- $edit['language'] = $language;
- }
- $this->drupalPost('node/add/page', $edit, t('Save'));
- $this->assertRaw(t('Basic page %title has been created.', array('%title' => $title)), 'Basic page created.');
-
- // Check to make sure the node was created.
- $node = $this->drupalGetNodeByTitle($title);
- $this->assertTrue($node, 'Node found in database.');
-
- return $node;
- }
-
- /**
- * Creates a translation for a basic page in the specified language.
- *
- * @param $node
- * The basic page to create the translation for.
- * @param $title
- * The title of a basic page in the specified language.
- * @param $body
- * The body of a basic page in the specified language.
- * @param $language
- * Language code.
- *
- * @return
- * Translation object.
- */
- function createTranslation($node, $title, $body, $language) {
- $this->drupalGet('node/add/page', array('query' => array('translation' => $node->nid, 'target' => $language)));
-
- $langcode = LANGUAGE_NONE;
- $body_key = "body[$langcode][0][value]";
- $this->assertFieldByXPath('//input[@id="edit-title"]', $node->title, "Original title value correctly populated.");
- $this->assertFieldByXPath("//textarea[@name='$body_key']", $node->body[LANGUAGE_NONE][0]['value'], "Original body value correctly populated.");
-
- $edit = array();
- $edit["title"] = $title;
- $edit[$body_key] = $body;
- $this->drupalPost(NULL, $edit, t('Save'));
- $this->assertRaw(t('Basic page %title has been created.', array('%title' => $title)), 'Translation created.');
-
- // Check to make sure that translation was successful.
- $translation = $this->drupalGetNodeByTitle($title);
- $this->assertTrue($translation, 'Node found in database.');
- $this->assertTrue($translation->tnid == $node->nid, 'Translation set id correctly stored.');
-
- return $translation;
- }
-
- /**
- * Asserts an element identified by the given XPath has the given content.
- *
- * @param $xpath
- * The XPath used to find the element.
- * @param array $arguments
- * An array of arguments with keys in the form ':name' matching the
- * placeholders in the query. The values may be either strings or numeric
- * values.
- * @param $value
- * The text content of the matched element to assert.
- * @param $message
- * The message to display.
- * @param $group
- * The group this message belongs to.
- *
- * @return
- * TRUE on pass, FALSE on fail.
- */
- function assertContentByXPath($xpath, array $arguments = array(), $value = NULL, $message = '', $group = 'Other') {
- $found = $this->findContentByXPath($xpath, $arguments, $value);
- return $this->assertTrue($found, $message, $group);
- }
-
- /**
- * Tests whether the specified language switch links are found.
- *
- * @param $node
- * The node to display.
- * @param $translation
- * The translation whose link has to be checked.
- * @param $find
- * TRUE if the link must be present in the node page.
- * @param $types
- * The page areas to be checked.
- *
- * @return
- * TRUE if the language switch links are found, FALSE if not.
- */
- function assertLanguageSwitchLinks($node, $translation, $find = TRUE, $types = NULL) {
- if (empty($types)) {
- $types = array('node', 'block-locale');
- }
- elseif (is_string($types)) {
- $types = array($types);
- }
-
- $result = TRUE;
- $languages = language_list();
- $page_language = $languages[entity_language('node', $node)];
- $translation_language = $languages[$translation->language];
- $url = url("node/$translation->nid", array('language' => $translation_language));
-
- $this->drupalGet("node/$node->nid", array('language' => $page_language));
-
- foreach ($types as $type) {
- $args = array('%translation_language' => $translation_language->native, '%page_language' => $page_language->native, '%type' => $type);
- if ($find) {
- $message = format_string('[%page_language] Language switch item found for %translation_language language in the %type page area.', $args);
- }
- else {
- $message = format_string('[%page_language] Language switch item not found for %translation_language language in the %type page area.', $args);
- }
-
- if (!empty($translation->nid)) {
- $xpath = '//div[contains(@class, :type)]//a[@href=:url]';
- }
- else {
- $xpath = '//div[contains(@class, :type)]//span[contains(@class, "locale-untranslated")]';
- }
-
- $found = $this->findContentByXPath($xpath, array(':type' => $type, ':url' => $url), $translation_language->native);
- $result = $this->assertTrue($found == $find, $message) && $result;
- }
-
- return $result;
- }
-
- /**
- * Searches for elements matching the given xpath and value.
- *
- * @param $xpath
- * The XPath used to find the element.
- * @param array $arguments
- * An array of arguments with keys in the form ':name' matching the
- * placeholders in the query. The values may be either strings or numeric
- * values.
- * @param $value
- * The text content of the matched element to assert.
- *
- * @return
- * TRUE if found, otherwise FALSE.
- */
- function findContentByXPath($xpath, array $arguments = array(), $value = NULL) {
- $elements = $this->xpath($xpath, $arguments);
-
- $found = TRUE;
- if ($value && $elements) {
- $found = FALSE;
- foreach ($elements as $element) {
- if ((string) $element == $value) {
- $found = TRUE;
- break;
- }
- }
- }
-
- return $elements && $found;
- }
-}
diff --git a/modules/trigger/tests/trigger_test.info b/modules/trigger/tests/trigger_test.info
deleted file mode 100644
index bd94331..0000000
--- a/modules/trigger/tests/trigger_test.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = "Trigger Test"
-description = "Support module for Trigger tests."
-package = Testing
-core = 7.x
-hidden = TRUE
diff --git a/modules/trigger/tests/trigger_test.module b/modules/trigger/tests/trigger_test.module
deleted file mode 100644
index 72fe352..0000000
--- a/modules/trigger/tests/trigger_test.module
+++ /dev/null
@@ -1,136 +0,0 @@
- array(
- 'type' => 'system',
- 'label' => t('Cron test action'),
- 'configurable' => FALSE,
- 'triggers' => array('cron'),
- ),
- 'trigger_test_system_cron_conf_action' => array(
- 'type' => 'system',
- 'label' => t('Cron test configurable action'),
- 'configurable' => TRUE,
- 'triggers' => array('cron'),
- ),
- 'trigger_test_generic_action' => array(
- 'type' => 'system',
- 'label' => t('Generic test action'),
- 'configurable' => FALSE,
- 'triggers' => array(
- 'taxonomy_term_insert',
- 'taxonomy_term_update',
- 'taxonomy_delete',
- 'comment_insert',
- 'comment_update',
- 'comment_delete',
- 'user_insert',
- 'user_update',
- 'user_delete',
- 'user_login',
- 'user_logout',
- 'user_view',
- ),
- ),
- 'trigger_test_generic_any_action' => array(
- 'type' => 'system',
- 'label' => t('Generic test action for any trigger'),
- 'configurable' => FALSE,
- 'triggers' => array('any'),
- ),
- );
-}
-
-/**
- * Implements hook_trigger_info().
- */
-function trigger_test_trigger_info() {
- // Register triggers that this module provides. The first is an additional
- // node trigger and the second is our own, which should create a new tab
- // on the trigger assignment page. The last tests long trigger names.
- return array(
- 'node' => array(
- 'node_triggertest' => array(
- 'label' => t('A test trigger is fired'),
- ),
- ),
- 'trigger_test' => array(
- 'trigger_test_triggertest' => array(
- 'label' => t('Another test trigger is fired'),
- ),
- 'trigger_test_we_sweat_it_out_in_the_streets_of_a_runaway_american_dream' => array(
- 'label' => t('A test trigger with a name over 64 characters'),
- ),
- ),
- );
-}
-
-/**
- * Action fired during the "cron run" trigger test.
- */
-function trigger_test_system_cron_action() {
- // Indicate successful execution by setting a persistent variable.
- variable_set('trigger_test_system_cron_action', TRUE);
-}
-
-/**
- * Implement a configurable Drupal action.
- */
-function trigger_test_system_cron_conf_action($object, $context) {
- // Indicate successful execution by incrementing a persistent variable.
- $value = variable_get('trigger_test_system_cron_conf_action', 0) + 1;
- variable_set('trigger_test_system_cron_conf_action', $value);
-}
-
-/**
- * Form for configurable test action.
- */
-function trigger_test_system_cron_conf_action_form($context) {
- if (!isset($context['subject'])) {
- $context['subject'] = '';
- }
- $form['subject'] = array(
- '#type' => 'textfield',
- '#default_value' => $context['subject'],
- );
- return $form;
-}
-
-/**
- * Form submission handler for configurable test action.
- */
-function trigger_test_system_cron_conf_action_submit($form, $form_state) {
- $form_values = $form_state['values'];
- // Process the HTML form to store configuration. The keyed array that
- // we return will be serialized to the database.
- $params = array(
- 'subject' => $form_values['subject'],
- );
- return $params;
-}
-
-/**
- * Action fired during the "taxonomy", "comment", and "user" trigger tests.
- */
-function trigger_test_generic_action($context) {
- // Indicate successful execution by setting a persistent variable.
- variable_set('trigger_test_generic_action', TRUE);
-}
-
-/**
- * Action fired during the additional trigger tests.
- */
-function trigger_test_generic_any_action($context) {
- // Indicate successful execution by setting a persistent variable.
- variable_set('trigger_test_generic_any_action', variable_get('trigger_test_generic_any_action', 0) + 1);
-}
diff --git a/modules/trigger/trigger.admin.inc b/modules/trigger/trigger.admin.inc
deleted file mode 100644
index 5b607c8..0000000
--- a/modules/trigger/trigger.admin.inc
+++ /dev/null
@@ -1,319 +0,0 @@
- $hooks) {
- if ($module == $module_to_display) {
- foreach ($hooks as $hook => $description) {
- $form_id = 'trigger_' . $hook . '_assign_form';
- $build[$form_id] = drupal_get_form($form_id, $module, $hook, $description['label']);
- }
- }
- }
- return $build;
-}
-
-/**
- * Form constructor for confirmation page for removal of an assigned action.
- *
- * @param $module
- * The tab of triggers the user will be directed to after successful
- * removal of the action, or if the confirmation form is cancelled.
- * @param $hook
- * The name of the trigger hook, e.g., 'node_insert'.
- * @param $aid
- * The action ID.
- *
- * @see trigger_unassign_submit()
- * @ingroup forms
- */
-function trigger_unassign($form, $form_state, $module, $hook = NULL, $aid = NULL) {
- if (!isset($hook, $aid)) {
- drupal_goto('admin/structure/trigger');
- }
-
- $form['hook'] = array(
- '#type' => 'value',
- '#value' => $hook,
- );
- $form['module'] = array(
- '#type' => 'value',
- '#value' => $module,
- );
- $form['aid'] = array(
- '#type' => 'value',
- '#value' => $aid,
- );
-
- $action = actions_function_lookup($aid);
- $actions = actions_get_all_actions();
-
- $destination = 'admin/structure/trigger/' . $module;
-
- return confirm_form($form,
- t('Are you sure you want to unassign the action %title?', array('%title' => $actions[$action]['label'])),
- $destination,
- t('You can assign it again later if you wish.'),
- t('Unassign'), t('Cancel')
- );
-}
-
-/**
- * Form submission handler for trigger_unassign().
- */
-function trigger_unassign_submit($form, &$form_state) {
- if ($form_state['values']['confirm'] == 1) {
- $aid = actions_function_lookup($form_state['values']['aid']);
- db_delete('trigger_assignments')
- ->condition('hook', $form_state['values']['hook'])
- ->condition('aid', $aid)
- ->execute();
- drupal_static_reset('trigger_get_assigned_actions');
- $actions = actions_get_all_actions();
- watchdog('actions', 'Action %action has been unassigned.', array('%action' => $actions[$aid]['label']));
- drupal_set_message(t('Action %action has been unassigned.', array('%action' => $actions[$aid]['label'])));
- $form_state['redirect'] = 'admin/structure/trigger/' . $form_state['values']['module'];
- }
- else {
- drupal_goto('admin/structure/trigger');
- }
-}
-
-/**
- * Returns the form for assigning an action to a trigger.
- *
- * @param $module
- * The name of the trigger group, e.g., 'node'.
- * @param $hook
- * The name of the trigger hook, e.g., 'node_insert'.
- * @param $label
- * A plain English description of what this trigger does.
- *
- * @see trigger_assign_form_validate()
- * @see trigger_assign_form_submit()
- * @ingroup forms
- */
-function trigger_assign_form($form, $form_state, $module, $hook, $label) {
- $form['module'] = array(
- '#type' => 'hidden',
- '#value' => $module,
- );
- $form['hook'] = array(
- '#type' => 'hidden',
- '#value' => $hook,
- );
- // All of these forms use the same validate and submit functions.
- $form['#validate'][] = 'trigger_assign_form_validate';
- $form['#submit'][] = 'trigger_assign_form_submit';
-
- $options = array();
- $functions = array();
- // Restrict the options list to actions that declare support for this hook.
- foreach (actions_list() as $func => $metadata) {
- if (isset($metadata['triggers']) && array_intersect(array($hook, 'any'), $metadata['triggers'])) {
- $functions[] = $func;
- }
- }
- foreach (actions_actions_map(actions_get_all_actions()) as $aid => $action) {
- if (in_array($action['callback'], $functions)) {
- $options[$action['type']][$aid] = $action['label'];
- }
- }
-
- $form[$hook] = array(
- '#type' => 'fieldset',
- // !description is correct, since these labels are passed through t() in
- // hook_trigger_info().
- '#title' => t('Trigger: !description', array('!description' => $label)),
- '#theme' => 'trigger_display',
- );
-
- // Retrieve actions that are already assigned to this hook combination.
- $actions = trigger_get_assigned_actions($hook);
- $form[$hook]['assigned']['#type'] = 'value';
- $form[$hook]['assigned']['#value'] = array();
- foreach ($actions as $aid => $info) {
- // If action is defined unassign it, otherwise offer to delete all orphaned
- // actions.
- $hash = drupal_hash_base64($aid, TRUE);
- if (actions_function_lookup($hash)) {
- $form[$hook]['assigned']['#value'][$aid] = array(
- 'label' => $info['label'],
- 'link' => l(t('unassign'), "admin/structure/trigger/unassign/$module/$hook/$hash"),
- );
- }
- else {
- // Link to system_actions_remove_orphans() to do the clean up.
- $form[$hook]['assigned']['#value'][$aid] = array(
- 'label' => $info['label'],
- 'link' => l(t('Remove orphaned actions'), "admin/config/system/actions/orphan"),
- );
- }
- }
-
- $form[$hook]['parent'] = array(
- '#type' => 'container',
- '#attributes' => array('class' => array('container-inline')),
- );
- // List possible actions that may be assigned.
- if (count($options) != 0) {
- $form[$hook]['parent']['aid'] = array(
- '#type' => 'select',
- '#title' => t('List of trigger actions when !description', array('!description' => $label)),
- '#title_display' => 'invisible',
- '#options' => $options,
- '#empty_option' => t('Choose an action'),
- );
- $form[$hook]['parent']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Assign')
- );
- }
- else {
- $form[$hook]['none'] = array(
- '#markup' => t('No actions available for this trigger. Add action .', array('@link' => url('admin/config/system/actions/manage')))
- );
- }
- return $form;
-}
-
-/**
- * Form validation handler for trigger_assign_form().
- *
- * Makes sure that the user is not re-assigning an action to an event.
- *
- * @see trigger_assign_form_submit()
- */
-function trigger_assign_form_validate($form, $form_state) {
- $form_values = $form_state['values'];
- if (!empty($form_values['aid'])) {
- $aid = actions_function_lookup($form_values['aid']);
- $aid_exists = db_query("SELECT aid FROM {trigger_assignments} WHERE hook = :hook AND aid = :aid", array(
- ':hook' => $form_values['hook'],
- ':aid' => $aid,
- ))->fetchField();
- if ($aid_exists) {
- form_set_error($form_values['hook'], t('The action you chose is already assigned to that trigger.'));
- }
- }
-}
-
-/**
- * Form submission handler for trigger_assign_form().
- *
- * @see trigger_assign_form_validate()
- */
-function trigger_assign_form_submit($form, &$form_state) {
- if (!empty($form_state['values']['aid'])) {
- $aid = actions_function_lookup($form_state['values']['aid']);
- $weight = db_query("SELECT MAX(weight) FROM {trigger_assignments} WHERE hook = :hook", array(':hook' => $form_state['values']['hook']))->fetchField();
-
- // Insert the new action.
- db_insert('trigger_assignments')
- ->fields(array(
- 'hook' => $form_state['values']['hook'],
- 'aid' => $aid,
- 'weight' => $weight + 1,
- ))
- ->execute();
-
- // If we are not configuring an action for a "presave" hook and this action
- // changes an object property, then we need to save the object, so the
- // property change will persist.
- $actions = actions_list();
- if (strpos($form_state['values']['hook'], 'presave') === FALSE && isset($actions[$aid]['behavior']) && in_array('changes_property', $actions[$aid]['behavior'])) {
- // Determine the corresponding save action name for this action.
- $save_action = strtok($aid, '_') . '_save_action';
- // If no corresponding save action exists, we need to bail out.
- if (!isset($actions[$save_action])) {
- throw new Exception(t('Missing/undefined save action (%save_aid) for %aid action.', array('%save_aid' => $aid, '%aid' => $aid)));
- }
- // Delete previous save action if it exists, and re-add it using a higher
- // weight.
- $save_action_assigned = db_query("SELECT aid FROM {trigger_assignments} WHERE hook = :hook AND aid = :aid", array(':hook' => $form_state['values']['hook'], ':aid' => $save_action))->fetchField();
-
- if ($save_action_assigned) {
- db_delete('trigger_assignments')
- ->condition('hook', $form_state['values']['hook'])
- ->condition('aid', $save_action)
- ->execute();
- }
- db_insert('trigger_assignments')
- ->fields(array(
- 'hook' => $form_state['values']['hook'],
- 'aid' => $save_action,
- 'weight' => $weight + 2,
- ))
- ->execute();
-
- // If no save action existed before, inform the user about it.
- if (!$save_action_assigned) {
- drupal_set_message(t('The %label action has been appended, which is required to save the property change.', array('%label' => $actions[$save_action]['label'])));
- }
- // Otherwise, just inform about the new weight.
- else {
- drupal_set_message(t('The %label action was moved to save the property change.', array('%label' => $actions[$save_action]['label'])));
- }
- }
- }
- drupal_static_reset('trigger_get_assigned_actions');
-}
-
-/**
- * Returns HTML for the form showing actions assigned to a trigger.
- *
- * @param $variables
- * An associative array containing:
- * - element: The fieldset including all assigned actions.
- *
- * @ingroup themeable
- */
-function theme_trigger_display($variables) {
- $element = $variables['element'];
-
- $header = array();
- $rows = array();
- if (isset($element['assigned']) && count($element['assigned']['#value'])) {
- $header = array(array('data' => t('Name')), array('data' => t('Operation')));
- $rows = array();
- foreach ($element['assigned']['#value'] as $aid => $info) {
- $rows[] = array(
- check_plain($info['label']),
- $info['link']
- );
- }
- }
-
- if (count($rows)) {
- $output = theme('table', array('header' => $header, 'rows' => $rows)) . drupal_render_children($element);
- }
- else {
- $output = drupal_render_children($element);
- }
- return $output;
-}
diff --git a/modules/trigger/trigger.api.php b/modules/trigger/trigger.api.php
deleted file mode 100644
index 839c1d4..0000000
--- a/modules/trigger/trigger.api.php
+++ /dev/null
@@ -1,78 +0,0 @@
- array(
- 'node_presave' => array(
- 'label' => t('When either saving new content or updating existing content'),
- ),
- 'node_insert' => array(
- 'label' => t('After saving new content'),
- ),
- 'node_update' => array(
- 'label' => t('After saving updated content'),
- ),
- 'node_delete' => array(
- 'label' => t('After deleting content'),
- ),
- 'node_view' => array(
- 'label' => t('When content is viewed by an authenticated user'),
- ),
- ),
- );
-}
-
-/**
- * Alter triggers declared by hook_trigger_info().
- *
- * @param $triggers
- * Array of trigger information returned by hook_trigger_info()
- * implementations. Modify this array in place. See hook_trigger_info()
- * for information on what this might contain.
- */
-function hook_trigger_info_alter(&$triggers) {
- $triggers['node']['node_insert']['label'] = t('When content is saved');
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/trigger/trigger.info b/modules/trigger/trigger.info
deleted file mode 100644
index 76102a2..0000000
--- a/modules/trigger/trigger.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Trigger
-description = Enables actions to be fired on certain system events, such as when new content is created.
-package = Core
-version = VERSION
-core = 7.x
-files[] = trigger.test
-configure = admin/structure/trigger
diff --git a/modules/trigger/trigger.install b/modules/trigger/trigger.install
deleted file mode 100644
index 779cd2a..0000000
--- a/modules/trigger/trigger.install
+++ /dev/null
@@ -1,116 +0,0 @@
- 'Maps trigger to hook and operation assignments from trigger.module.',
- 'fields' => array(
- 'hook' => array(
- 'type' => 'varchar',
- 'length' => 78,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Primary Key: The name of the internal Drupal hook; for example, node_insert.',
- ),
- 'aid' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => "Primary Key: Action's {actions}.aid.",
- ),
- 'weight' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'The weight of the trigger assignment in relation to other triggers.',
- ),
- ),
- 'primary key' => array('hook', 'aid'),
- 'foreign keys' => array(
- 'action' => array(
- 'table' => 'actions',
- 'columns' => array('aid' => 'aid'),
- ),
- ),
- );
- return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function trigger_install() {
- // Do initial synchronization of actions in code and the database.
- actions_synchronize();
-}
-
-/**
- * Alter the "hook" field and drop the "op field" of {trigger_assignments}.
- *
- * Increase the length of the "hook" field to 78 characters and adds operation
- * names to the hook names, and drops the "op" field.
- */
-function trigger_update_7000() {
- db_drop_primary_key('trigger_assignments');
- db_change_field('trigger_assignments', 'hook', 'hook', array('type' => 'varchar', 'length' => 78, 'not null' => TRUE, 'default' => '', 'description' => 'Primary Key: The name of the internal Drupal hook; for example, node_insert.'));
-
- $result = db_query("SELECT hook, op, aid FROM {trigger_assignments} WHERE op <> ''");
-
- foreach ($result as $record) {
- db_update('trigger_assignments')
- ->fields(array('hook' => $record->hook . '_' . $record->op))
- ->condition('hook', $record->hook)
- ->condition('op', $record->op)
- ->condition('aid', $record->aid)
- ->execute();
- }
- db_drop_field('trigger_assignments', 'op');
-
- db_add_primary_key('trigger_assignments', array('hook', 'aid'));
-}
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Increase the length of the "hook" field to 78 characters.
- *
- * This is a separate function for those who ran an older version of
- * trigger_update_7000() that did not do this.
- */
-function trigger_update_7001() {
- db_drop_primary_key('trigger_assignments');
- db_change_field('trigger_assignments', 'hook', 'hook', array('type' => 'varchar', 'length' => 78, 'not null' => TRUE, 'default' => '', 'description' => 'Primary Key: The name of the internal Drupal hook; for example, node_insert.', ), array('primary key' => array('hook', 'aid')));
-}
-
-/**
- * Renames nodeapi to node.
- */
-function trigger_update_7002() {
- $result = db_query("SELECT hook, aid FROM {trigger_assignments}");
-
- foreach($result as $record) {
- $new_hook = str_replace('nodeapi', 'node', $record->hook);
- db_update('trigger_assignments')
- ->fields(array('hook' => $new_hook))
- ->condition('hook', $record->hook)
- ->condition('aid', $record->aid)
- ->execute();
- }
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/trigger/trigger.module b/modules/trigger/trigger.module
deleted file mode 100644
index aeb1211..0000000
--- a/modules/trigger/trigger.module
+++ /dev/null
@@ -1,671 +0,0 @@
-' . t('Triggers are events on your site, such as new content being added or a user logging in. The Trigger module associates these triggers with actions (functional tasks), such as unpublishing content containing certain keywords or e-mailing an administrator. The Actions settings page contains a list of existing actions and provides the ability to create and configure advanced actions (actions requiring configuration, such as an e-mail address or a list of banned words).', array('@url' => url('admin/config/system/actions'))) . '';
-
- $module = $matches[1];
- $trigger_info = _trigger_tab_information();
- if (!empty($trigger_info[$module])) {
- $explanation .= '' . t('There is a tab on this page for each module that defines triggers. On this tab you can assign actions to run when triggers from the @module-name module happen.', array('@module-help' => url('admin/help/' . $module), '@module-name' => $trigger_info[$module])) . '
';
- }
-
- return $explanation;
- }
-
- if ($path == 'admin/help#trigger') {
- $output = '';
- $output .= '' . t('About') . ' ';
- $output .= '' . t('The Trigger module provides the ability to cause actions to run when certain triggers take place on your site. Triggers are events, such as new content being added to your site or a user logging in, and actions are tasks, such as unpublishing content or e-mailing an administrator. For more information, see the online handbook entry for Trigger module .', array('@trigger' => 'http://drupal.org/documentation/modules/trigger/')) . '
';
- $output .= '' . t('Uses') . ' ';
- $output .= '';
- $output .= '' . t('Configuring triggers and actions') . ' ';
- $output .= '' . t('The combination of actions and triggers can perform many useful tasks, such as e-mailing an administrator if a user account is deleted, or automatically unpublishing comments that contain certain words. To set up a trigger/action combination, first visit the Actions configuration page , where you can either verify that the action you want is already listed, or create a new advanced action. You will need to set up an advanced action if there are configuration options in your trigger/action combination, such as specifying an e-mail address or a list of banned words. After configuring or verifying your action, visit the Triggers configuration page and choose the appropriate tab (Comment, Taxonomy, etc.), where you can assign the action to run when the trigger event occurs.', array('@triggers-page' => url('admin/structure/trigger'), '@actions-page' => url('admin/config/system/actions'))) . ' ';
- $output .= ' ';
- return $output;
- }
-}
-
-/**
- * Implements hook_menu().
- */
-function trigger_menu() {
- $items['admin/structure/trigger'] = array(
- 'title' => 'Triggers',
- 'description' => 'Configure when to execute actions.',
- 'page callback' => 'trigger_assign',
- 'access arguments' => array('administer actions'),
- 'file' => 'trigger.admin.inc',
- );
-
- $trigger_info = _trigger_tab_information();
- foreach ($trigger_info as $module => $module_name) {
- $items["admin/structure/trigger/$module"] = array(
- 'title' => $module_name,
- 'page callback' => 'trigger_assign',
- 'page arguments' => array($module),
- 'access arguments' => array('administer actions'),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'trigger.admin.inc',
- );
- }
-
- $items['admin/structure/trigger/unassign'] = array(
- 'title' => 'Unassign',
- 'description' => 'Unassign an action from a trigger.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('trigger_unassign'),
- // Only accessible if there are any actions that can be unassigned.
- 'access callback' => 'trigger_menu_unassign_access',
- // Only output in the breadcrumb, not in menu trees.
- 'type' => MENU_VISIBLE_IN_BREADCRUMB,
- 'file' => 'trigger.admin.inc',
- );
-
- return $items;
-}
-
-/**
- * Access callback: Determines if triggers can be unassigned.
- *
- * @return bool
- * TRUE if there are triggers that the user can unassign, FALSE otherwise.
- *
- * @see trigger_menu()
- */
-function trigger_menu_unassign_access() {
- if (!user_access('administer actions')) {
- return FALSE;
- }
- $count = db_select('trigger_assignments')
- ->countQuery()
- ->execute()
- ->fetchField();
- return $count > 0;
-}
-
-/**
- * Implements hook_trigger_info().
- *
- * Defines all the triggers that this module implements triggers for.
- */
-function trigger_trigger_info() {
- return array(
- 'node' => array(
- 'node_presave' => array(
- 'label' => t('When either saving new content or updating existing content'),
- ),
- 'node_insert' => array(
- 'label' => t('After saving new content'),
- ),
- 'node_update' => array(
- 'label' => t('After saving updated content'),
- ),
- 'node_delete' => array(
- 'label' => t('After deleting content'),
- ),
- 'node_view' => array(
- 'label' => t('When content is viewed by an authenticated user'),
- ),
- ),
- 'comment' => array(
- 'comment_presave' => array(
- 'label' => t('When either saving a new comment or updating an existing comment'),
- ),
- 'comment_insert' => array(
- 'label' => t('After saving a new comment'),
- ),
- 'comment_update' => array(
- 'label' => t('After saving an updated comment'),
- ),
- 'comment_delete' => array(
- 'label' => t('After deleting a comment'),
- ),
- 'comment_view' => array(
- 'label' => t('When a comment is being viewed by an authenticated user'),
- ),
- ),
- 'taxonomy' => array(
- 'taxonomy_term_insert' => array(
- 'label' => t('After saving a new term to the database'),
- ),
- 'taxonomy_term_update' => array(
- 'label' => t('After saving an updated term to the database'),
- ),
- 'taxonomy_term_delete' => array(
- 'label' => t('After deleting a term'),
- ),
- ),
- 'system' => array(
- 'cron' => array(
- 'label' => t('When cron runs'),
- ),
- ),
- 'user' => array(
- 'user_insert' => array(
- 'label' => t('After creating a new user account'),
- ),
- 'user_update' => array(
- 'label' => t('After updating a user account'),
- ),
- 'user_delete' => array(
- 'label' => t('After a user has been deleted'),
- ),
- 'user_login' => array(
- 'label' => t('After a user has logged in'),
- ),
- 'user_logout' => array(
- 'label' => t('After a user has logged out'),
- ),
- 'user_view' => array(
- 'label' => t("When a user's profile is being viewed"),
- ),
- ),
- );
- }
-
-/**
- * Gets the action IDs of actions to be executed for a hook.
- *
- * @param $hook
- * The name of the hook being fired.
- *
- * @return
- * An array whose keys are action IDs that the user has associated with
- * this trigger, and whose values are arrays containing the action type and
- * label.
- */
-function trigger_get_assigned_actions($hook) {
- $actions = &drupal_static(__FUNCTION__, array());
- if (!isset($actions[$hook])) {
- $actions[$hook] = db_query("SELECT ta.aid, a.type, a.label FROM {trigger_assignments} ta LEFT JOIN {actions} a ON ta.aid = a.aid WHERE ta.hook = :hook ORDER BY ta.weight", array(
- ':hook' => $hook,
- ))->fetchAllAssoc('aid', PDO::FETCH_ASSOC);
- }
- return $actions[$hook];
-}
-
-/**
- * Implements hook_theme().
- */
-function trigger_theme() {
- return array(
- 'trigger_display' => array(
- 'render element' => 'element',
- 'file' => 'trigger.admin.inc',
- ),
- );
-}
-
-/**
- * Implements hook_forms().
- *
- * We re-use code by using the same assignment form definition for each hook.
- */
-function trigger_forms() {
- $trigger_info = _trigger_get_all_info();
- $forms = array();
- foreach ($trigger_info as $module => $hooks) {
- foreach ($hooks as $hook => $description) {
- $forms['trigger_' . $hook . '_assign_form'] = array('callback' => 'trigger_assign_form');
- }
- }
-
- return $forms;
-}
-
-/**
- * Loads associated objects for node triggers.
- *
- * When an action is called in a context that does not match its type, the
- * object that the action expects must be retrieved. For example, when an action
- * that works on users is called during a node hook implementation, the user
- * object is not available since the node hook call doesn't pass it. So here we
- * load the object the action expects.
- *
- * @param $type
- * The type of action that is about to be called.
- * @param $node
- * The node that was passed via the node hook.
- *
- * @return
- * The object expected by the action that is about to be called.
- */
-function _trigger_normalize_node_context($type, $node) {
- // Note that comment-type actions are not supported in node contexts,
- // because we wouldn't know which comment to choose.
- switch ($type) {
- // An action that works on users is being called in a node context.
- // Load the user object of the node's author.
- case 'user':
- return user_load($node->uid);
- }
-}
-
-/**
- * Calls action functions for node triggers.
- *
- * @param $node
- * Node object.
- * @param $hook
- * Hook to trigger.
- * @param $a3
- * Additional argument to action function.
- * @param $a4
- * Additional argument to action function.
- */
-function _trigger_node($node, $hook, $a3 = NULL, $a4 = NULL) {
- // Keep objects for reuse so that changes actions make to objects can persist.
- static $objects;
- // Prevent recursion by tracking which operations have already been called.
- static $recursion;
-
- $aids = trigger_get_assigned_actions($hook);
- if (!$aids) {
- return;
- }
-
- if (isset($recursion[$hook])) {
- return;
- }
- $recursion[$hook] = TRUE;
-
- $context = array(
- 'group' => 'node',
- 'hook' => $hook,
- );
-
- // We need to get the expected object if the action's type is not 'node'.
- // We keep the object in $objects so we can reuse it if we have multiple actions
- // that make changes to an object.
- foreach ($aids as $aid => $info) {
- $type = $info['type'];
- if ($type != 'node') {
- if (!isset($objects[$type])) {
- $objects[$type] = _trigger_normalize_node_context($type, $node);
- }
- // Since we know about the node, we pass that info along to the action.
- $context['node'] = $node;
- $result = actions_do($aid, $objects[$type], $context, $a3, $a4);
- }
- else {
- actions_do($aid, $node, $context, $a3, $a4);
- }
- }
-
- unset($recursion[$hook]);
-}
-
-/**
- * Implements hook_node_view().
- */
-function trigger_node_view($node, $view_mode) {
- _trigger_node($node, 'node_view', $view_mode);
-}
-
-/**
- * Implements hook_node_update().
- */
-function trigger_node_update($node) {
- _trigger_node($node, 'node_update');
-}
-
-/**
- * Implements hook_node_presave().
- */
-function trigger_node_presave($node) {
- _trigger_node($node, 'node_presave');
-}
-
-/**
- * Implements hook_node_insert().
- */
-function trigger_node_insert($node) {
- _trigger_node($node, 'node_insert');
-}
-
-/**
- * Implements hook_node_delete().
- */
-function trigger_node_delete($node) {
- _trigger_node($node, 'node_delete');
-}
-
-/**
- * Loads associated objects for comment triggers.
- *
- * When an action is called in a context that does not match its type, the
- * object that the action expects must be retrieved. For example, when an action
- * that works on nodes is called during the comment hook, the node object is not
- * available since the comment hook doesn't pass it. So here we load the object
- * the action expects.
- *
- * @param $type
- * The type of action that is about to be called.
- * @param $comment
- * The comment that was passed via the comment hook.
- *
- * @return
- * The object expected by the action that is about to be called.
- */
-function _trigger_normalize_comment_context($type, $comment) {
- switch ($type) {
- // An action that works with nodes is being called in a comment context.
- case 'node':
- return node_load(is_array($comment) ? $comment['nid'] : $comment->nid);
-
- // An action that works on users is being called in a comment context.
- case 'user':
- return user_load(is_array($comment) ? $comment['uid'] : $comment->uid);
- }
-}
-
-/**
- * Implements hook_comment_presave().
- */
-function trigger_comment_presave($comment) {
- _trigger_comment($comment, 'comment_presave');
-}
-
-/**
- * Implements hook_comment_insert().
- */
-function trigger_comment_insert($comment) {
- _trigger_comment($comment, 'comment_insert');
-}
-
-/**
- * Implements hook_comment_update().
- */
-function trigger_comment_update($comment) {
- _trigger_comment($comment, 'comment_update');
-}
-
-/**
- * Implements hook_comment_delete().
- */
-function trigger_comment_delete($comment) {
- _trigger_comment($comment, 'comment_delete');
-}
-
-/**
- * Implements hook_comment_view().
- */
-function trigger_comment_view($comment) {
- _trigger_comment($comment, 'comment_view');
-}
-
-/**
- * Calls action functions for comment triggers.
- *
- * @param $a1
- * Comment object or array of form values.
- * @param $hook
- * Hook to trigger.
- */
-function _trigger_comment($a1, $hook) {
- // Keep objects for reuse so that changes actions make to objects can persist.
- static $objects;
- $aids = trigger_get_assigned_actions($hook);
- $context = array(
- 'group' => 'comment',
- 'hook' => $hook,
- );
- // We need to get the expected object if the action's type is not 'comment'.
- // We keep the object in $objects so we can reuse it if we have multiple
- // actions that make changes to an object.
- foreach ($aids as $aid => $info) {
- $type = $info['type'];
- if ($type != 'comment') {
- if (!isset($objects[$type])) {
- $objects[$type] = _trigger_normalize_comment_context($type, $a1);
- }
- // Since we know about the comment, we pass it along to the action
- // in case it wants to peek at it.
- $context['comment'] = (object) $a1;
- actions_do($aid, $objects[$type], $context);
- }
- else {
- actions_do($aid, $a1, $context);
- }
- }
-}
-
-/**
- * Implements hook_cron().
- */
-function trigger_cron() {
- $aids = trigger_get_assigned_actions('cron');
- $context = array(
- 'group' => 'cron',
- 'hook' => 'cron',
- );
- // Cron does not act on any specific object.
- $object = NULL;
- actions_do(array_keys($aids), $object, $context);
-}
-
-/**
- * Loads associated objects for user triggers.
- *
- * When an action is called in a context that does not match its type, the
- * object that the action expects must be retrieved. For example, when an action
- * that works on nodes is called during the user hook, the node object is not
- * available since the user hook doesn't pass it. So here we load the object the
- * action expects.
- *
- * @param $type
- * The type of action that is about to be called.
- * @param $account
- * The account object that was passed via the user hook.
- *
- * @return
- * The object expected by the action that is about to be called.
- */
-function _trigger_normalize_user_context($type, $account) {
- // Note that comment-type actions are not supported in user contexts,
- // because we wouldn't know which comment to choose.
- switch ($type) {
- // An action that works with nodes is being called in a user context.
- // If a single node is being viewed, return the node.
- case 'node':
- // If we are viewing an individual node, return the node.
- if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == NULL) {
- return node_load(array('nid' => arg(1)));
- }
- break;
- }
-}
-
-/**
- * Implements hook_user_login().
- */
-function trigger_user_login(&$edit, $account, $category) {
- _trigger_user('user_login', $edit, $account, $category);
-}
-
-/**
- * Implements hook_user_logout().
- */
-function trigger_user_logout($account) {
- $edit = array();
- _trigger_user('user_logout', $edit, $account);
-}
-
-/**
- * Implements hook_user_insert().
- */
-function trigger_user_insert(&$edit, $account, $category) {
- _trigger_user('user_insert', $edit, $account, $category);
-}
-
-/**
- * Implements hook_user_update().
- */
-function trigger_user_update(&$edit, $account, $category) {
- _trigger_user('user_update', $edit, $account, $category);
-}
-
-/**
- * Implements hook_user_cancel().
- */
-function trigger_user_cancel($edit, $account, $method) {
- switch ($method) {
- case 'user_cancel_reassign':
- _trigger_user('user_delete', $edit, $account, $method);
- break;
- }
-}
-
-/**
- * Implements hook_user_delete().
- */
-function trigger_user_delete($account) {
- $edit = array();
- _trigger_user('user_delete', $edit, $account, NULL);
-}
-
-/**
- * Implements hook_user_view().
- */
-function trigger_user_view($account) {
- $edit = NULL;
- _trigger_user('user_view', $edit, $account, NULL);
-}
-
-/**
- * Calls action functions for user triggers.
- *
- * @param $hook
- * The hook that called this function.
- * @param $edit
- * Edit variable passed in to the hook or empty array if not needed.
- * @param $account
- * Account variable passed in to the hook.
- * @param $method
- * Method variable passed in to the hook or NULL if not needed.
- */
-function _trigger_user($hook, &$edit, $account, $category = NULL) {
- // Keep objects for reuse so that changes actions make to objects can persist.
- static $objects;
- $aids = trigger_get_assigned_actions($hook);
- $context = array(
- 'group' => 'user',
- 'hook' => $hook,
- 'form_values' => &$edit,
- );
- foreach ($aids as $aid => $info) {
- $type = $info['type'];
- if ($type != 'user') {
- if (!isset($objects[$type])) {
- $objects[$type] = _trigger_normalize_user_context($type, $account);
- }
- $context['user'] = $account;
- actions_do($aid, $objects[$type], $context);
- }
- else {
- actions_do($aid, $account, $context, $category);
- }
- }
-}
-
-/**
- * Calls action functions for taxonomy triggers.
- *
- * @param $hook
- * Hook to trigger actions for taxonomy_term_insert(),
- * taxonomy_term_update(), and taxonomy_term_delete().
- * @param $array
- * Item on which operation is being performed, either a term or
- * form values.
- */
-function _trigger_taxonomy($hook, $array) {
- $aids = trigger_get_assigned_actions($hook);
- $context = array(
- 'group' => 'taxonomy',
- 'hook' => $hook
- );
- actions_do(array_keys($aids), (object) $array, $context);
-}
-
-/**
- * Implements hook_taxonomy_term_insert().
- */
-function trigger_taxonomy_term_insert($term) {
- _trigger_taxonomy('taxonomy_term_insert', (array) $term);
-}
-
-/**
- * Implements hook_taxonomy_term_update().
- */
-function trigger_taxonomy_term_update($term) {
- _trigger_taxonomy('taxonomy_term_update', (array) $term);
-}
-
-/**
- * Implements hook_taxonomy_term_delete().
- */
-function trigger_taxonomy_term_delete($term) {
- _trigger_taxonomy('taxonomy_term_delete', (array) $term);
-}
-
-/**
- * Implements hook_actions_delete().
- *
- * Removes all trigger entries for the given action, when an action is deleted.
- */
-function trigger_actions_delete($aid) {
- db_delete('trigger_assignments')
- ->condition('aid', $aid)
- ->execute();
- drupal_static_reset('trigger_get_assigned_actions');
-}
-
-/**
- * Retrieves and caches information from hook_trigger_info() implementations.
- *
- * @return
- * Array of all triggers.
- */
-function _trigger_get_all_info() {
- $triggers = &drupal_static(__FUNCTION__);
-
- if (!isset($triggers)) {
- $triggers = module_invoke_all('trigger_info');
- drupal_alter('trigger_info', $triggers);
- }
-
- return $triggers;
-}
-
-/**
- * Gathers information about tabs on the triggers administration screen.
- *
- * @return
- * Array of modules that have triggers, with the keys being the
- * machine-readable name of the module, and the values being the
- * human-readable name of the module.
- */
-function _trigger_tab_information() {
- // Gather information about all triggers and modules.
- $trigger_info = _trigger_get_all_info();
- $modules = system_get_info('module');
- $modules = array_intersect_key($modules, $trigger_info);
-
- $return_info = array();
- foreach ($modules as $name => $info) {
- $return_info[$name] = $info['name'];
- }
-
- return $return_info;
-}
diff --git a/modules/trigger/trigger.test b/modules/trigger/trigger.test
deleted file mode 100644
index 9e5f114..0000000
--- a/modules/trigger/trigger.test
+++ /dev/null
@@ -1,771 +0,0 @@
-drupalPost("admin/config/system/actions/configure/$hash", $edit, t('Save'));
- $this->assertText(t('The action has been successfully saved.'));
-
- // Now we have to find out the action ID of what we created.
- return db_query('SELECT aid FROM {actions} WHERE callback = :callback AND label = :label', array(':callback' => $action, ':label' => $edit['actions_label']))->fetchField();
- }
-
-}
-
-/**
- * Provides tests for node triggers.
- */
-class TriggerContentTestCase extends TriggerWebTestCase {
- var $_cleanup_roles = array();
- var $_cleanup_users = array();
-
- public static function getInfo() {
- return array(
- 'name' => 'Trigger content (node) actions',
- 'description' => 'Perform various tests with content actions.',
- 'group' => 'Trigger',
- );
- }
-
- function setUp() {
- parent::setUp('trigger', 'trigger_test');
- }
-
- /**
- * Tests several content-oriented trigger issues.
- *
- * These are in one function to assure they happen in the right order.
- */
- function testActionsContent() {
- global $user;
- $content_actions = array('node_publish_action', 'node_unpublish_action', 'node_make_sticky_action', 'node_make_unsticky_action', 'node_promote_action', 'node_unpromote_action');
-
- $test_user = $this->drupalCreateUser(array('administer actions'));
- $web_user = $this->drupalCreateUser(array('create page content', 'access content', 'administer nodes'));
- foreach ($content_actions as $action) {
- $hash = drupal_hash_base64($action);
- $info = $this->actionInfo($action);
-
- // Assign an action to a trigger, then pull the trigger, and make sure
- // the actions fire.
- $this->drupalLogin($test_user);
- $edit = array('aid' => $hash);
- $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'), array(), array(), 'trigger-node-presave-assign-form');
- // Create an unpublished node.
- $this->drupalLogin($web_user);
- $edit = array();
- $langcode = LANGUAGE_NONE;
- $edit["title"] = '!SimpleTest test node! ' . $this->randomName(10);
- $edit["body[$langcode][0][value]"] = '!SimpleTest test body! ' . $this->randomName(32) . ' ' . $this->randomName(32);
- $edit[$info['property']] = !$info['expected'];
- $this->drupalPost('node/add/page', $edit, t('Save'));
- // Make sure the text we want appears.
- $this->assertRaw(t('!post %title has been created.', array('!post' => 'Basic page', '%title' => $edit["title"])), 'Make sure the Basic page has actually been created');
- // Action should have been fired.
- $loaded_node = $this->drupalGetNodeByTitle($edit["title"]);
- $this->assertTrue($loaded_node->$info['property'] == $info['expected'], format_string('Make sure the @action action fired.', array('@action' => $info['name'])));
- // Leave action assigned for next test
-
- // There should be an error when the action is assigned to the trigger
- // twice.
- $this->drupalLogin($test_user);
- // This action already assigned in this test.
- $edit = array('aid' => $hash);
- $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'), array(), array(), 'trigger-node-presave-assign-form');
- $this->assertRaw(t('The action you chose is already assigned to that trigger.'), 'Check to make sure an error occurs when assigning an action to a trigger twice.');
-
- // The action should be able to be unassigned from a trigger.
- $this->drupalPost('admin/structure/trigger/unassign/node/node_presave/' . $hash, array(), t('Unassign'));
- $this->assertRaw(t('Action %action has been unassigned.', array('%action' => ucfirst($info['name']))), format_string('Check to make sure the @action action can be unassigned from the trigger.', array('@action' => $info['name'])));
- $assigned = db_query("SELECT COUNT(*) FROM {trigger_assignments} WHERE aid IN (:keys)", array(':keys' => $content_actions))->fetchField();
- $this->assertFalse($assigned, 'Check to make sure unassign worked properly at the database level.');
- }
- }
-
- /**
- * Tests multiple node actions.
- *
- * Verifies that node actions are fired for each node individually, if acting
- * on multiple nodes.
- */
- function testActionContentMultiple() {
- // Assign an action to the node save/update trigger.
- $test_user = $this->drupalCreateUser(array('administer actions', 'administer nodes', 'create page content', 'access administration pages', 'access content overview'));
- $this->drupalLogin($test_user);
- $nodes = array();
-
- for ($index = 0; $index < 3; $index++) {
- $nodes[] = $this->drupalCreateNode(array('type' => 'page'));
- }
-
- $action_id = 'trigger_test_generic_any_action';
- $hash = drupal_hash_base64($action_id);
- $edit = array('aid' => $hash);
- $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'), array(), array(), 'trigger-node-update-assign-form');
-
- $edit = array(
- 'operation' => 'unpublish',
- 'nodes[' . $nodes[0]->nid . ']' => TRUE,
- 'nodes[' . $nodes[1]->nid . ']' => TRUE,
- );
- $this->drupalPost('admin/content', $edit, t('Update'));
- $count = variable_get('trigger_test_generic_any_action', 0);
- $this->assertTrue($count == 2, format_string('Action was triggered 2 times. Actual: %count', array('%count' => $count)));
- }
-
- /**
- * Returns some info about each of the content actions.
- *
- * This is helper function for testActionsContent().
- *
- * @param $action
- * The name of the action to return info about.
- *
- * @return
- * An associative array of info about the action.
- */
- function actionInfo($action) {
- $info = array(
- 'node_publish_action' => array(
- 'property' => 'status',
- 'expected' => 1,
- 'name' => t('publish content'),
- ),
- 'node_unpublish_action' => array(
- 'property' => 'status',
- 'expected' => 0,
- 'name' => t('unpublish content'),
- ),
- 'node_make_sticky_action' => array(
- 'property' => 'sticky',
- 'expected' => 1,
- 'name' => t('make content sticky'),
- ),
- 'node_make_unsticky_action' => array(
- 'property' => 'sticky',
- 'expected' => 0,
- 'name' => t('make content unsticky'),
- ),
- 'node_promote_action' => array(
- 'property' => 'promote',
- 'expected' => 1,
- 'name' => t('promote content to front page'),
- ),
- 'node_unpromote_action' => array(
- 'property' => 'promote',
- 'expected' => 0,
- 'name' => t('remove content from front page'),
- ),
- );
- return $info[$action];
- }
-}
-
-/**
- * Tests cron trigger.
- */
-class TriggerCronTestCase extends TriggerWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Trigger cron (system) actions',
- 'description' => 'Perform various tests with cron trigger.',
- 'group' => 'Trigger',
- );
- }
-
- function setUp() {
- parent::setUp('trigger', 'trigger_test');
- }
-
- /**
- * Tests assigning multiple actions to the cron trigger.
- *
- * This test ensures that both simple and multiple complex actions
- * succeed properly. This is done in the cron trigger test because
- * cron allows passing multiple actions in at once.
- */
- function testActionsCron() {
- // Create an administrative user.
- $test_user = $this->drupalCreateUser(array('administer actions'));
- $this->drupalLogin($test_user);
-
- // Assign a non-configurable action to the cron run trigger.
- $edit = array('aid' => drupal_hash_base64('trigger_test_system_cron_action'));
- $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'), array(), array(), 'trigger-cron-assign-form');
-
- // Assign a configurable action to the cron trigger.
- $action_label = $this->randomName();
- $edit = array(
- 'actions_label' => $action_label,
- 'subject' => $action_label,
- );
- $aid = $this->configureAdvancedAction('trigger_test_system_cron_conf_action', $edit);
- // $aid is likely 3 but if we add more uses for the sequences table in
- // core it might break, so it is easier to get the value from the database.
- $edit = array('aid' => drupal_hash_base64($aid));
- $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'), array(), array(), 'trigger-cron-assign-form');
-
- // Add a second configurable action to the cron trigger.
- $action_label = $this->randomName();
- $edit = array(
- 'actions_label' => $action_label,
- 'subject' => $action_label,
- );
- $aid = $this->configureAdvancedAction('trigger_test_system_cron_conf_action', $edit);
- $edit = array('aid' => drupal_hash_base64($aid));
- $this->drupalPost('admin/structure/trigger/system', $edit, t('Assign'), array(), array(), 'trigger-cron-assign-form');
-
- // Force a cron run.
- $this->cronRun();
-
- // Make sure the non-configurable action has fired.
- $action_run = variable_get('trigger_test_system_cron_action', FALSE);
- $this->assertTrue($action_run, 'Check that the cron run triggered the test action.');
-
- // Make sure that both configurable actions have fired.
- $action_run = variable_get('trigger_test_system_cron_conf_action', 0) == 2;
- $this->assertTrue($action_run, 'Check that the cron run triggered both complex actions.');
- }
-}
-
-/**
- * Provides a base class with trigger assignments and test comparisons.
- */
-class TriggerActionTestCase extends TriggerWebTestCase {
-
- function setUp() {
- parent::setUp('trigger');
- }
-
- /**
- * Creates a message with tokens.
- *
- * @param $trigger
- *
- * @return
- * A message with embedded tokens.
- */
- function generateMessageWithTokens($trigger) {
- // Note that subject is limited to 254 characters in action configuration.
- $message = t('Action was triggered by trigger @trigger user:name=[user:name] user:uid=[user:uid] user:mail=[user:mail] user:url=[user:url] user:edit-url=[user:edit-url] user:created=[user:created]',
- array('@trigger' => $trigger));
- return trim($message);
- }
-
- /**
- * Generates a comparison message to match the pre-token-replaced message.
- *
- * @param $trigger
- * Trigger, like 'user_login'.
- * @param $account
- * Associated user account.
- *
- * @return
- * The token-replaced equivalent message. This does not use token
- * functionality.
- *
- * @see generateMessageWithTokens()
- */
- function generateTokenExpandedComparison($trigger, $account) {
- // Note that user:last-login was omitted because it changes and can't
- // be properly verified.
- $message = t('Action was triggered by trigger @trigger user:name=@username user:uid=@uid user:mail=@mail user:url=@user_url user:edit-url=@user_edit_url user:created=@user_created',
- array(
- '@trigger' => $trigger,
- '@username' => $account->name,
- '@uid' => !empty($account->uid) ? $account->uid : t('not yet assigned'),
- '@mail' => $account->mail,
- '@user_url' => !empty($account->uid) ? url("user/$account->uid", array('absolute' => TRUE)) : t('not yet assigned'),
- '@user_edit_url' => !empty($account->uid) ? url("user/$account->uid/edit", array('absolute' => TRUE)) : t('not yet assigned'),
- '@user_created' => isset($account->created) ? format_date($account->created, 'medium') : t('not yet created'),
- )
- );
- return trim($message);
- }
-
-
- /**
- * Assigns a simple (non-configurable) action to a trigger.
- *
- * @param $trigger
- * The trigger to assign to, like 'user_login'.
- * @param $action
- * The simple action to be assigned, like 'comment_insert'.
- */
- function assignSimpleAction($trigger, $action) {
- $form_name = "trigger_{$trigger}_assign_form";
- $form_html_id = strtr($form_name, '_', '-');
- $edit = array('aid' => drupal_hash_base64($action));
- $trigger_type = preg_replace('/_.*/', '', $trigger);
- $this->drupalPost("admin/structure/trigger/$trigger_type", $edit, t('Assign'), array(), array(), $form_html_id);
- $actions = trigger_get_assigned_actions($trigger);
- $this->assertTrue(!empty($actions[$action]), format_string('Simple action @action assigned to trigger @trigger', array('@action' => $action, '@trigger' => $trigger)));
- }
-
- /**
- * Assigns a system message action to the passed-in trigger.
- *
- * @param $trigger
- * For example, 'user_login'
- */
- function assignSystemMessageAction($trigger) {
- $form_name = "trigger_{$trigger}_assign_form";
- $form_html_id = strtr($form_name, '_', '-');
- // Assign a configurable action 'System message' to the passed trigger.
- $action_edit = array(
- 'actions_label' => $trigger . "_system_message_action_" . $this->randomName(16),
- 'message' => $this->generateMessageWithTokens($trigger),
- );
-
- // Configure an advanced action that we can assign.
- $aid = $this->configureAdvancedAction('system_message_action', $action_edit);
-
- $edit = array('aid' => drupal_hash_base64($aid));
- $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'), array(), array(), $form_html_id);
- drupal_static_reset('trigger_get_asssigned_actions');
- }
-
-
- /**
- * Assigns a system_send_email_action to the passed-in trigger.
- *
- * @param $trigger
- * For example, 'user_login'
- */
- function assignSystemEmailAction($trigger) {
- $form_name = "trigger_{$trigger}_assign_form";
- $form_html_id = strtr($form_name, '_', '-');
-
- $message = $this->generateMessageWithTokens($trigger);
- // Assign a configurable action 'System message' to the passed trigger.
- $action_edit = array(
- // 'actions_label' => $trigger . "_system_send_message_action_" . $this->randomName(16),
- 'actions_label' => $trigger . "_system_send_email_action",
- 'recipient' => '[user:mail]',
- 'subject' => $message,
- 'message' => $message,
- );
-
- // Configure an advanced action that we can assign.
- $aid = $this->configureAdvancedAction('system_send_email_action', $action_edit);
-
- $edit = array('aid' => drupal_hash_base64($aid));
- $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'), array(), array(), $form_html_id);
- drupal_static_reset('trigger_get_assigned_actions');
- }
-
- /**
- * Asserts correct token replacement in both system message and email.
- *
- * @param $trigger
- * A trigger like 'user_login'.
- * @param $account
- * The user account which triggered the action.
- * @param $email_depth
- * Number of emails to scan, starting with most recent.
- */
- function assertSystemMessageAndEmailTokenReplacement($trigger, $account, $email_depth = 1) {
- $this->assertSystemMessageTokenReplacement($trigger, $account);
- $this->assertSystemEmailTokenReplacement($trigger, $account, $email_depth);
- }
-
- /**
- * Asserts correct token replacement for the given trigger and account.
- *
- * @param $trigger
- * A trigger like 'user_login'.
- * @param $account
- * The user account which triggered the action.
- */
- function assertSystemMessageTokenReplacement($trigger, $account) {
- $expected = $this->generateTokenExpandedComparison($trigger, $account);
- $this->assertText($expected,
- format_string('Expected system message to contain token-replaced text "@expected" found in configured system message action', array('@expected' => $expected )) );
- }
-
-
- /**
- * Asserts correct token replacement for the given trigger and account.
- *
- * @param $trigger
- * A trigger like 'user_login'.
- * @param $account
- * The user account which triggered the action.
- * @param $email_depth
- * Number of emails to scan, starting with most recent.
- */
- function assertSystemEmailTokenReplacement($trigger, $account, $email_depth = 1) {
- $this->verboseEmail($email_depth);
- $expected = $this->generateTokenExpandedComparison($trigger, $account);
- $this->assertMailString('subject', $expected, $email_depth);
- $this->assertMailString('body', $expected, $email_depth);
- $this->assertMail('to', $account->mail, 'Mail sent to correct destination');
- }
-}
-
-/**
- * Tests token substitution in trigger actions.
- *
- * This tests nearly every permutation of user triggers with system actions
- * and checks the token replacement.
- */
-class TriggerUserTokenTestCase extends TriggerActionTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Test user triggers',
- 'description' => 'Test user triggers and system actions with token replacement.',
- 'group' => 'Trigger',
- );
- }
-
-
- /**
- * Tests a variety of token replacements in actions.
- */
- function testUserTriggerTokenReplacement() {
- $test_user = $this->drupalCreateUser(array('administer actions', 'administer users', 'change own username', 'access user profiles'));
- $this->drupalLogin($test_user);
-
- $triggers = array('user_login', 'user_insert', 'user_update', 'user_delete', 'user_logout', 'user_view');
- foreach ($triggers as $trigger) {
- $this->assignSystemMessageAction($trigger);
- $this->assignSystemEmailAction($trigger);
- }
-
- $this->drupalLogout();
- $this->assertSystemEmailTokenReplacement('user_logout', $test_user);
-
- $this->drupalLogin($test_user);
- $this->assertSystemMessageAndEmailTokenReplacement('user_login', $test_user, 2);
- $this->assertSystemMessageAndEmailTokenReplacement('user_view', $test_user, 2);
-
- $this->drupalPost("user/{$test_user->uid}/edit", array('name' => $test_user->name . '_changed'), t('Save'));
- $test_user->name .= '_changed'; // Since we just changed it.
- $this->assertSystemMessageAndEmailTokenReplacement('user_update', $test_user, 2);
-
- $this->drupalGet('user');
- $this->assertSystemMessageAndEmailTokenReplacement('user_view', $test_user);
-
- $new_user = $this->drupalCreateUser(array('administer actions', 'administer users', 'cancel account', 'access administration pages'));
- $this->assertSystemEmailTokenReplacement('user_insert', $new_user);
-
- $this->drupalLogin($new_user);
- $user_to_delete = $this->drupalCreateUser(array('access content'));
- variable_set('user_cancel_method', 'user_cancel_delete');
-
- $this->drupalPost("user/{$user_to_delete->uid}/cancel", array(), t('Cancel account'));
- $this->assertSystemMessageAndEmailTokenReplacement('user_delete', $user_to_delete);
- }
-
-
-}
-
-/**
- * Tests token substitution in trigger actions.
- *
- * This tests nearly every permutation of user triggers with system actions
- * and checks the token replacement.
- */
-class TriggerUserActionTestCase extends TriggerActionTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Test user actions',
- 'description' => 'Test user actions.',
- 'group' => 'Trigger',
- );
- }
-
- /**
- * Tests user action assignment and execution.
- */
- function testUserActionAssignmentExecution() {
- $test_user = $this->drupalCreateUser(array('administer actions', 'create article content', 'access comments', 'administer comments', 'skip comment approval', 'edit own comments'));
- $this->drupalLogin($test_user);
-
- $triggers = array('comment_presave', 'comment_insert', 'comment_update');
- // system_block_ip_action is difficult to test without ruining the test.
- $actions = array('user_block_user_action');
- foreach ($triggers as $trigger) {
- foreach ($actions as $action) {
- $this->assignSimpleAction($trigger, $action);
- }
- }
-
- $node = $this->drupalCreateNode(array('type' => 'article'));
- $this->drupalPost("node/{$node->nid}", array('comment_body[und][0][value]' => t("my comment"), 'subject' => t("my comment subject")), t('Save'));
- // Posting a comment should have blocked this user.
- $account = user_load($test_user->uid, TRUE);
- $this->assertTrue($account->status == 0, 'Account is blocked');
- $comment_author_uid = $account->uid;
- // Now rehabilitate the comment author so it can be be blocked again when
- // the comment is updated.
- user_save($account, array('status' => TRUE));
-
- $test_user = $this->drupalCreateUser(array('administer actions', 'create article content', 'access comments', 'administer comments', 'skip comment approval', 'edit own comments'));
- $this->drupalLogin($test_user);
-
- // Our original comment will have been comment 1.
- $this->drupalPost("comment/1/edit", array('comment_body[und][0][value]' => t("my comment, updated"), 'subject' => t("my comment subject")), t('Save'));
- $comment_author_account = user_load($comment_author_uid, TRUE);
- $this->assertTrue($comment_author_account->status == 0, format_string('Comment author account (uid=@uid) is blocked after update to comment', array('@uid' => $comment_author_uid)));
-
- // Verify that the comment was updated.
- $test_user = $this->drupalCreateUser(array('administer actions', 'create article content', 'access comments', 'administer comments', 'skip comment approval', 'edit own comments'));
- $this->drupalLogin($test_user);
-
- $this->drupalGet("node/$node->nid");
- $this->assertText(t("my comment, updated"));
- $this->verboseEmail();
- }
-}
-
-/**
- * Tests other triggers.
- */
-class TriggerOtherTestCase extends TriggerWebTestCase {
- var $_cleanup_roles = array();
- var $_cleanup_users = array();
-
- public static function getInfo() {
- return array(
- 'name' => 'Trigger other actions',
- 'description' => 'Test triggering of user, comment, taxonomy actions.',
- 'group' => 'Trigger',
- );
- }
-
- function setUp() {
- parent::setUp('trigger', 'trigger_test', 'contact');
- }
-
- /**
- * Tests triggering on user create and user login.
- */
- function testActionsUser() {
- // Assign an action to the create user trigger.
- $test_user = $this->drupalCreateUser(array('administer actions'));
- $this->drupalLogin($test_user);
- $action_id = 'trigger_test_generic_action';
- $hash = drupal_hash_base64($action_id);
- $edit = array('aid' => $hash);
- $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'), array(), array(), 'trigger-user-insert-assign-form');
-
- // Set action variable to FALSE.
- variable_set($action_id, FALSE);
-
- // Create an unblocked user
- $web_user = $this->drupalCreateUser(array('administer users'));
- $this->drupalLogin($web_user);
- $name = $this->randomName();
- $pass = user_password();
- $edit = array();
- $edit['name'] = $name;
- $edit['mail'] = $name . '@example.com';
- $edit['pass[pass1]'] = $pass;
- $edit['pass[pass2]'] = $pass;
- $edit['status'] = 1;
- $this->drupalPost('admin/people/create', $edit, t('Create new account'));
-
- // Verify that the action variable has been set.
- $this->assertTrue(variable_get($action_id, FALSE), 'Check that creating a user triggered the test action.');
-
- // Reset the action variable.
- variable_set($action_id, FALSE);
-
- $this->drupalLogin($test_user);
- // Assign a configurable action 'System message' to the user_login trigger.
- $action_edit = array(
- 'actions_label' => $this->randomName(16),
- 'message' => t("You have logged in:") . $this->randomName(16),
- );
-
- // Configure an advanced action that we can assign.
- $aid = $this->configureAdvancedAction('system_message_action', $action_edit);
- $edit = array('aid' => drupal_hash_base64($aid));
- $this->drupalPost('admin/structure/trigger/user', $edit, t('Assign'), array(), array(), 'trigger-user-login-assign-form');
-
- // Verify that the action has been assigned to the correct hook.
- $actions = trigger_get_assigned_actions('user_login');
- $this->assertEqual(1, count($actions), 'One Action assigned to the hook');
- $this->assertEqual($actions[$aid]['label'], $action_edit['actions_label'], 'Correct action label found.');
-
- // User should get the configured message at login.
- $contact_user = $this->drupalCreateUser(array('access site-wide contact form'));;
- $this->drupalLogin($contact_user);
- $this->assertText($action_edit['message']);
- }
-
- /**
- * Tests triggering on comment save.
- */
- function testActionsComment() {
- // Assign an action to the comment save trigger.
- $test_user = $this->drupalCreateUser(array('administer actions'));
- $this->drupalLogin($test_user);
- $action_id = 'trigger_test_generic_action';
- $hash = drupal_hash_base64($action_id);
- $edit = array('aid' => $hash);
- $this->drupalPost('admin/structure/trigger/comment', $edit, t('Assign'), array(), array(), 'trigger-comment-insert-assign-form');
-
- // Set action variable to FALSE.
- variable_set($action_id, FALSE);
-
- // Create a node and add a comment to it.
- $web_user = $this->drupalCreateUser(array('create article content', 'access content', 'skip comment approval', 'post comments'));
- $this->drupalLogin($web_user);
- $node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
- $edit = array();
- $edit['subject'] = $this->randomName(10);
- $edit['comment_body[' . LANGUAGE_NONE . '][0][value]'] = $this->randomName(10) . ' ' . $this->randomName(10);
- $this->drupalGet('comment/reply/' . $node->nid);
- $this->drupalPost(NULL, $edit, t('Save'));
-
- // Verify that the action variable has been set.
- $this->assertTrue(variable_get($action_id, FALSE), 'Check that creating a comment triggered the action.');
- }
-
- /**
- * Tests triggering on taxonomy new term.
- */
- function testActionsTaxonomy() {
- // Assign an action to the taxonomy term save trigger.
- $test_user = $this->drupalCreateUser(array('administer actions'));
- $this->drupalLogin($test_user);
- $action_id = 'trigger_test_generic_action';
- $hash = drupal_hash_base64($action_id);
- $edit = array('aid' => $hash);
- $this->drupalPost('admin/structure/trigger/taxonomy', $edit, t('Assign'), array(), array(), 'trigger-taxonomy-term-insert-assign-form');
-
- // Set action variable to FALSE.
- variable_set($action_id, FALSE);
-
- // Create a taxonomy vocabulary and add a term to it.
-
- // Create a vocabulary.
- $vocabulary = new stdClass();
- $vocabulary->name = $this->randomName();
- $vocabulary->description = $this->randomName();
- $vocabulary->machine_name = drupal_strtolower($this->randomName());
- $vocabulary->help = '';
- $vocabulary->nodes = array('article' => 'article');
- $vocabulary->weight = mt_rand(0, 10);
- taxonomy_vocabulary_save($vocabulary);
-
- $term = new stdClass();
- $term->name = $this->randomName();
- $term->vid = $vocabulary->vid;
- taxonomy_term_save($term);
-
- // Verify that the action variable has been set.
- $this->assertTrue(variable_get($action_id, FALSE), 'Check that creating a taxonomy term triggered the action.');
- }
-
-}
-
-/**
- * Tests that orphaned actions are properly handled.
- */
-class TriggerOrphanedActionsTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Trigger orphaned actions',
- 'description' => 'Test triggering an action that has since been removed.',
- 'group' => 'Trigger',
- );
- }
-
- function setUp() {
- parent::setUp('trigger', 'trigger_test');
- }
-
- /**
- * Tests logic around orphaned actions.
- */
- function testActionsOrphaned() {
- $action = 'trigger_test_generic_any_action';
- $hash = drupal_hash_base64($action);
-
- // Assign an action from a disable-able module to a trigger, then pull the
- // trigger, and make sure the actions fire.
- $test_user = $this->drupalCreateUser(array('administer actions'));
- $this->drupalLogin($test_user);
- $edit = array('aid' => $hash);
- $this->drupalPost('admin/structure/trigger/node', $edit, t('Assign'), array(), array(), 'trigger-node-presave-assign-form');
-
- // Create an unpublished node.
- $web_user = $this->drupalCreateUser(array('create page content', 'edit own page content', 'access content', 'administer nodes'));
- $this->drupalLogin($web_user);
- $edit = array();
- $langcode = LANGUAGE_NONE;
- $edit["title"] = '!SimpleTest test node! ' . $this->randomName(10);
- $edit["body[$langcode][0][value]"] = '!SimpleTest test body! ' . $this->randomName(32) . ' ' . $this->randomName(32);
- $this->drupalPost('node/add/page', $edit, t('Save'));
- $this->assertRaw(t('!post %title has been created.', array('!post' => 'Basic page', '%title' => $edit["title"])), 'Make sure the Basic page has actually been created');
-
- // Action should have been fired.
- $this->assertTrue(variable_get('trigger_test_generic_any_action', FALSE), 'Trigger test action successfully fired.');
-
- // Disable the module that provides the action and make sure the trigger
- // doesn't white screen.
- module_disable(array('trigger_test'));
- $loaded_node = $this->drupalGetNodeByTitle($edit["title"]);
- $edit["body[$langcode][0][value]"] = '!SimpleTest test body! ' . $this->randomName(32) . ' ' . $this->randomName(32);
- $this->drupalPost("node/$loaded_node->nid/edit", $edit, t('Save'));
-
- // If the node body was updated successfully we have dealt with the
- // unavailable action.
- $this->assertRaw(t('!post %title has been updated.', array('!post' => 'Basic page', '%title' => $edit["title"])), 'Make sure the Basic page can be updated with the missing trigger function.');
- }
-}
-
-/**
- * Tests the unassigning of triggers.
- */
-class TriggerUnassignTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'Trigger unassigning',
- 'description' => 'Tests the unassigning of triggers.',
- 'group' => 'Trigger',
- );
- }
-
- function setUp() {
- parent::setUp('trigger', 'trigger_test');
- $web_user = $this->drupalCreateUser(array('administer actions'));
- $this->drupalLogin($web_user);
- }
-
- /**
- * Tests an attempt to unassign triggers when none are assigned.
- */
- function testUnassignAccessDenied() {
- $this->drupalGet('admin/structure/trigger/unassign');
- $this->assertResponse(403, 'If there are no actions available, return access denied.');
- }
-
-}
diff --git a/modules/update/tests/aaa_update_test.1_0.xml b/modules/update/tests/aaa_update_test.1_0.xml
deleted file mode 100644
index a168453..0000000
--- a/modules/update/tests/aaa_update_test.1_0.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-AAA Update test
-aaa_update_test
-Drupal
-7.x
-1
-1
-1
-published
- http://example.com/project/aaa_update_test
-
- Projects Modules
-
-
-
- aaa_update_test 7.x-1.0
- 7.x-1.0
- DRUPAL-7--1-0
- 1
- 0
- published
- http://example.com/aaa_update_test-7-x-1-0-release
- http://example.com/aaa_update_test-7.x-1.0.tar.gz
- 1250424521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/tests/aaa_update_test.info b/modules/update/tests/aaa_update_test.info
deleted file mode 100644
index a283720..0000000
--- a/modules/update/tests/aaa_update_test.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = AAA Update test
-description = Support module for update module testing.
-package = Testing
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/aaa_update_test.module b/modules/update/tests/aaa_update_test.module
deleted file mode 100644
index 4d67b8e..0000000
--- a/modules/update/tests/aaa_update_test.module
+++ /dev/null
@@ -1,6 +0,0 @@
-
-No release history was found for the requested project (aaa_update_test).
diff --git a/modules/update/tests/aaa_update_test.tar.gz b/modules/update/tests/aaa_update_test.tar.gz
deleted file mode 100644
index 22c9719..0000000
Binary files a/modules/update/tests/aaa_update_test.tar.gz and /dev/null differ
diff --git a/modules/update/tests/bbb_update_test.1_0.xml b/modules/update/tests/bbb_update_test.1_0.xml
deleted file mode 100644
index bfdf196..0000000
--- a/modules/update/tests/bbb_update_test.1_0.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-BBB Update test
-bbb_update_test
-Drupal
-7.x
-1
-1
-1
-published
- http://example.com/project/bbb_update_test
-
- Projects Modules
-
-
-
- bbb_update_test 7.x-1.0
- 7.x-1.0
- DRUPAL-7--1-0
- 1
- 0
- published
- http://example.com/bbb_update_test-7-x-1-0-release
- http://example.com/bbb_update_test-7.x-1.0.tar.gz
- 1250424521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/tests/bbb_update_test.info b/modules/update/tests/bbb_update_test.info
deleted file mode 100644
index 75084ae..0000000
--- a/modules/update/tests/bbb_update_test.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = BBB Update test
-description = Support module for update module testing.
-package = Testing
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/bbb_update_test.module b/modules/update/tests/bbb_update_test.module
deleted file mode 100644
index 4d67b8e..0000000
--- a/modules/update/tests/bbb_update_test.module
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-CCC Update test
-ccc_update_test
-Drupal
-7.x
-1
-1
-1
-published
- http://example.com/project/ccc_update_test
-
- Projects Modules
-
-
-
- ccc_update_test 7.x-1.0
- 7.x-1.0
- DRUPAL-7--1-0
- 1
- 0
- published
- http://example.com/ccc_update_test-7-x-1-0-release
- http://example.com/ccc_update_test-7.x-1.0.tar.gz
- 1250424521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/tests/ccc_update_test.info b/modules/update/tests/ccc_update_test.info
deleted file mode 100644
index 0bd4cde..0000000
--- a/modules/update/tests/ccc_update_test.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = CCC Update test
-description = Support module for update module testing.
-package = Testing
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/ccc_update_test.module b/modules/update/tests/ccc_update_test.module
deleted file mode 100644
index 4d67b8e..0000000
--- a/modules/update/tests/ccc_update_test.module
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-Drupal
-drupal
-Drupal
-7.x
-7
-7
-7
-published
- http://example.com/project/drupal
-
- Projects Drupal project
-
-
-
- Drupal 7.0
- 7.0
- DRUPAL-7-0
- 7
- 0
- published
- http://example.com/drupal-7-0-release
- http://example.com/drupal-7-0.tar.gz
- 1250424521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/tests/drupal.1.xml b/modules/update/tests/drupal.1.xml
deleted file mode 100644
index de4cfd0..0000000
--- a/modules/update/tests/drupal.1.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-Drupal
-drupal
-Drupal
-7.x
-7
-7
-7
-published
- http://example.com/project/drupal
-
- Projects Drupal project
-
-
-
- Drupal 7.1
- 7.1
- DRUPAL-7-1
- 7
- 1
- published
- http://example.com/drupal-7-1-release
- http://example.com/drupal-7-1.tar.gz
- 1250424581
- b966255555d9c9b86d480ca08cfaa98e
- 2147483648
-
- Release type New features
- Release type Bug fixes
-
-
-
- Drupal 7.0
- 7.0
- DRUPAL-7-0
- 7
- 0
- published
- http://example.com/drupal-7-0-release
- http://example.com/drupal-7-0.tar.gz
- 1250424521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/tests/drupal.2-sec.xml b/modules/update/tests/drupal.2-sec.xml
deleted file mode 100644
index 1e68c8d..0000000
--- a/modules/update/tests/drupal.2-sec.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-Drupal
-drupal
-Drupal
-7.x
-7
-7
-7
-published
- http://example.com/project/drupal
-
- Projects Drupal project
-
-
-
- Drupal 7.2
- 7.2
- DRUPAL-7-2
- 7
- 2
- published
- http://example.com/drupal-7-2-release
- http://example.com/drupal-7-2.tar.gz
- 1250424641
- b966255555d9c9b86d480ca08cfaa98e
- 4294967296
-
- Release type New features
- Release type Bug fixes
- Release type Security update
-
-
-
- Drupal 7.1
- 7.1
- DRUPAL-7-1
- 7
- 1
- published
- http://example.com/drupal-7-1-release
- http://example.com/drupal-7-1.tar.gz
- 1250424581
- b966255555d9c9b86d480ca08cfaa98e
- 2147483648
-
- Release type New features
- Release type Bug fixes
-
-
-
- Drupal 7.0
- 7.0
- DRUPAL-7-0
- 7
- 0
- published
- http://example.com/drupal-7-0-release
- http://example.com/drupal-7-0.tar.gz
- 1250424521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/tests/drupal.dev.xml b/modules/update/tests/drupal.dev.xml
deleted file mode 100644
index 49dcc3f..0000000
--- a/modules/update/tests/drupal.dev.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-Drupal
-drupal
-Drupal
-7.x
-7
-7
-7
-published
- http://example.com/project/drupal
-
- Projects Drupal project
-
-
-
- Drupal 7.0
- 7.0
- DRUPAL-7-0
- 7
- 0
- published
- http://example.com/drupal-7-0-release
- http://example.com/drupal-7-0.tar.gz
- 1250424521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
- Drupal 7.x-dev
- 7.x-dev
- DRUPAL-7
- 7
- dev
- published
- http://example.com/drupal-7-x-dev-release
- http://example.com/drupal-7.x-dev.tar.gz
- 1250424581
- b966255555d9c9b86d480ca08cfaa98e
- 2147483648
-
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info b/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info
deleted file mode 100644
index 9718784..0000000
--- a/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info
+++ /dev/null
@@ -1,4 +0,0 @@
-name = Update test base theme
-description = Test theme which acts as a base theme for other test subthemes.
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info b/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info
deleted file mode 100644
index 6ca42f4..0000000
--- a/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info
+++ /dev/null
@@ -1,5 +0,0 @@
-name = Update test subtheme
-description = Test theme which uses update_test_basetheme as the base theme.
-core = 7.x
-base theme = update_test_basetheme
-hidden = TRUE
diff --git a/modules/update/tests/update_test.info b/modules/update/tests/update_test.info
deleted file mode 100644
index f68dc9d..0000000
--- a/modules/update/tests/update_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Update test
-description = Support module for update module testing.
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/update/tests/update_test.module b/modules/update/tests/update_test.module
deleted file mode 100644
index 6fe4bdd..0000000
--- a/modules/update/tests/update_test.module
+++ /dev/null
@@ -1,191 +0,0 @@
- t('Update test'),
- 'page callback' => 'update_test_mock_page',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
- $items['503-error'] = array(
- 'title' => t('503 Service unavailable'),
- 'page callback' => 'update_callback_service_unavailable',
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- );
-
- return $items;
-}
-
-/**
- * Implements hook_system_info_alter().
- *
- * Checks the 'update_test_system_info' variable and sees if we need to alter
- * the system info for the given $file based on the setting. The setting is
- * expected to be a nested associative array. If the key '#all' is defined, its
- * subarray will include .info keys and values for all modules and themes on the
- * system. Otherwise, the settings array is keyed by the module or theme short
- * name ($file->name) and the subarrays contain settings just for that module or
- * theme.
- */
-function update_test_system_info_alter(&$info, $file) {
- $setting = variable_get('update_test_system_info', array());
- foreach (array('#all', $file->name) as $id) {
- if (!empty($setting[$id])) {
- foreach ($setting[$id] as $key => $value) {
- $info[$key] = $value;
- }
- }
- }
-}
-
-/**
- * Implements hook_update_status_alter().
- *
- * Checks the 'update_test_update_status' variable and sees if we need to alter
- * the update status for the given project based on the setting. The setting is
- * expected to be a nested associative array. If the key '#all' is defined, its
- * subarray will include .info keys and values for all modules and themes on the
- * system. Otherwise, the settings array is keyed by the module or theme short
- * name and the subarrays contain settings just for that module or theme.
- */
-function update_test_update_status_alter(&$projects) {
- $setting = variable_get('update_test_update_status', array());
- if (!empty($setting)) {
- foreach ($projects as $project_name => &$project) {
- foreach (array('#all', $project_name) as $id) {
- if (!empty($setting[$id])) {
- foreach ($setting[$id] as $key => $value) {
- $project[$key] = $value;
- }
- }
- }
- }
- }
-}
-
-/**
- * Page callback: Prints mock XML for the Update Manager module.
- *
- * The specific XML file to print depends on two things: the project we're
- * trying to fetch data for, and the desired "availability scenario" for that
- * project which we're trying to test. Before attempting to fetch this data (by
- * checking for updates on the available updates report), callers need to define
- * the 'update_test_xml_map' variable as an array, keyed by project name,
- * indicating which availability scenario to use for that project.
- *
- * @param $project_name
- * The project short name the update manager is trying to fetch data for (the
- * fetch URLs are of the form: [base_url]/[project_name]/[core_version]).
- *
- * @see update_test_menu()
- */
-function update_test_mock_page($project_name) {
- $xml_map = variable_get('update_test_xml_map', FALSE);
- if (isset($xml_map[$project_name])) {
- $availability_scenario = $xml_map[$project_name];
- }
- elseif (isset($xml_map['#all'])) {
- $availability_scenario = $xml_map['#all'];
- }
- else {
- // The test didn't specify (for example, the webroot has other modules and
- // themes installed but they're disabled by the version of the site
- // running the test. So, we default to a file we know won't exist, so at
- // least we'll get an empty page from readfile instead of a bunch of
- // Drupal page output.
- $availability_scenario = '#broken#';
- }
-
- $path = drupal_get_path('module', 'update_test');
- readfile("$path/$project_name.$availability_scenario.xml");
-}
-
-/**
- * Implements hook_archiver_info().
- */
-function update_test_archiver_info() {
- return array(
- 'update_test_archiver' => array(
- // This is bogus, we only care about the extensions for now.
- 'class' => 'ArchiverUpdateTest',
- 'extensions' => array('update-test-extension'),
- ),
- );
-}
-
-/**
- * Implements hook_filetransfer_info().
- */
-function update_test_filetransfer_info() {
- // Define a mock file transfer method, to ensure that there will always be
- // at least one method available in the user interface (regardless of the
- // environment in which the update manager tests are run).
- return array(
- 'system_test' => array(
- 'title' => t('Update Test FileTransfer'),
- // This should be in an .inc file, but for testing purposes, it is OK to
- // leave it in the main module file.
- 'file' => 'update_test.module',
- 'class' => 'UpdateTestFileTransfer',
- 'weight' => -20,
- ),
- );
-}
-
-/**
- * Mocks a FileTransfer object to test the settings form functionality.
- */
-class UpdateTestFileTransfer {
-
- /**
- * Returns an UpdateTestFileTransfer object.
- *
- * @return
- * A new UpdateTestFileTransfer object.
- */
- public static function factory() {
- return new UpdateTestFileTransfer;
- }
-
- /**
- * Returns a settings form with a text field to input a username.
- */
- public function getSettingsForm() {
- $form = array();
- $form['udpate_test_username'] = array(
- '#type' => 'textfield',
- '#title' => t('Update Test Username'),
- );
- return $form;
- }
-}
-
-/**
- * Page callback: Displays an Error 503 (Service unavailable) page.
- *
- * @see update_test_menu()
- */
-function update_callback_service_unavailable() {
- drupal_add_http_header('Status', '503 Service unavailable');
- print "503 Service Temporarily Unavailable";
-}
diff --git a/modules/update/tests/update_test_basetheme.1_1-sec.xml b/modules/update/tests/update_test_basetheme.1_1-sec.xml
deleted file mode 100644
index 5c11c03..0000000
--- a/modules/update/tests/update_test_basetheme.1_1-sec.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-Update test base theme
-update_test_basetheme
-Drupal
-7.x
-1
-1
-1
-published
- http://example.com/project/update_test_basetheme
-
- Projects Themes
-
-
-
- update_test_basetheme 7.x-1.1
- 7.x-1.1
- DRUPAL-7--1-1
- 1
- 1
- published
- http://example.com/update_test_basetheme-7-x-1-1-release
- http://example.com/update_test_basetheme-7.x-1.1.tar.gz
- 1250624521
- b966255555d9c9b86d480ca08cfaa98e
- 1073763241
-
- Release type Security update
- Release type New features
- Release type Bug fixes
-
-
-
- update_test_basetheme 7.x-1.0
- 7.x-1.0
- DRUPAL-7--1-0
- 1
- 0
- published
- http://example.com/update_test_basetheme-7-x-1-0-release
- http://example.com/update_test_basetheme-7.x-1.0.tar.gz
- 1250524521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/tests/update_test_subtheme.1_0.xml b/modules/update/tests/update_test_subtheme.1_0.xml
deleted file mode 100644
index 5d04ec8..0000000
--- a/modules/update/tests/update_test_subtheme.1_0.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-Update test subtheme
-update_test_subtheme
-Drupal
-7.x
-1
-1
-1
-published
- http://example.com/project/update_test_subtheme
-
- Projects Themes
-
-
-
- update_test_subtheme 7.x-1.0
- 7.x-1.0
- DRUPAL-7--1-0
- 1
- 0
- published
- http://example.com/update_test_subtheme-7-x-1-0-release
- http://example.com/update_test_subtheme-7.x-1.0.tar.gz
- 1250524521
- b966255555d9c9b86d480ca08cfaa98e
- 1073741824
-
- Release type New features
- Release type Bug fixes
-
-
-
-
diff --git a/modules/update/update-rtl.css b/modules/update/update-rtl.css
deleted file mode 100644
index f181c84..0000000
--- a/modules/update/update-rtl.css
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * @file
- * RTL styles used by the Update Manager module.
- */
-
-.update .project {
- padding-right: .25em;
-}
-
-.update .version-status {
- float: left;
- padding-left: 10px;
-}
-
-.update .version-status .icon {
- padding-right: .5em;
-}
-
-.update table.version .version-title {
- padding-left: 1em;
-}
-
-.update table.version .version-details {
- padding-left: .5em;
- direction: ltr;
-}
-
-.update table.version .version-links {
- text-align: left;
- padding-left: 1em;
-}
-
-.update .check-manually {
- padding-right: 1em;
-}
diff --git a/modules/update/update.api.php b/modules/update/update.api.php
deleted file mode 100644
index cb5669e..0000000
--- a/modules/update/update.api.php
+++ /dev/null
@@ -1,133 +0,0 @@
- 'disabled_project_name',
- // Array of values from the main .info file for this project.
- 'info' => array(
- 'name' => 'Some disabled module',
- 'description' => 'A module not enabled on the site that you want to see in the available updates report.',
- 'version' => '7.x-1.0',
- 'core' => '7.x',
- // The maximum file change time (the "ctime" returned by the filectime()
- // PHP method) for all of the .info files included in this project.
- '_info_file_ctime' => 1243888165,
- ),
- // The date stamp when the project was released, if known. If the disabled
- // project was an officially packaged release from drupal.org, this will
- // be included in the .info file as the 'datestamp' field. This only
- // really matters for development snapshot releases that are regenerated,
- // so it can be left undefined or set to 0 in most cases.
- 'datestamp' => 1243888185,
- // Any modules (or themes) included in this project. Keyed by machine-
- // readable "short name", value is the human-readable project name printed
- // in the UI.
- 'includes' => array(
- 'disabled_project' => 'Disabled module',
- 'disabled_project_helper' => 'Disabled module helper module',
- 'disabled_project_foo' => 'Disabled module foo add-on module',
- ),
- // Does this project contain a 'module', 'theme', 'disabled-module', or
- // 'disabled-theme'?
- 'project_type' => 'disabled-module',
- );
-}
-
-/**
- * Alter the information about available updates for projects.
- *
- * @param $projects
- * Reference to an array of information about available updates to each
- * project installed on the system.
- *
- * @see update_calculate_project_data()
- */
-function hook_update_status_alter(&$projects) {
- $settings = variable_get('update_advanced_project_settings', array());
- foreach ($projects as $project => $project_info) {
- if (isset($settings[$project]) && isset($settings[$project]['check']) &&
- ($settings[$project]['check'] == 'never' ||
- (isset($project_info['recommended']) &&
- $settings[$project]['check'] === $project_info['recommended']))) {
- $projects[$project]['status'] = UPDATE_NOT_CHECKED;
- $projects[$project]['reason'] = t('Ignored from settings');
- if (!empty($settings[$project]['notes'])) {
- $projects[$project]['extra'][] = array(
- 'class' => array('admin-note'),
- 'label' => t('Administrator note'),
- 'data' => $settings[$project]['notes'],
- );
- }
- }
- }
-}
-
-/**
- * Verify an archive after it has been downloaded and extracted.
- *
- * @param string $project
- * The short name of the project that has been downloaded.
- * @param string $archive_file
- * The filename of the unextracted archive.
- * @param string $directory
- * The directory that the archive was extracted into.
- *
- * @return
- * If there are any problems, return an array of error messages. If there are
- * no problems, return an empty array.
- *
- * @see update_manager_archive_verify()
- * @ingroup update_manager_file
- */
-function hook_verify_update_archive($project, $archive_file, $directory) {
- $errors = array();
- if (!file_exists($directory)) {
- $errors[] = t('The %directory does not exist.', array('%directory' => $directory));
- }
- // Add other checks on the archive integrity here.
- return $errors;
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/update/update.authorize.inc b/modules/update/update.authorize.inc
deleted file mode 100644
index 6ddd2c5..0000000
--- a/modules/update/update.authorize.inc
+++ /dev/null
@@ -1,333 +0,0 @@
- $project_info) {
- $operations[] = array(
- 'update_authorize_batch_copy_project',
- array(
- $project_info['project'],
- $project_info['updater_name'],
- $project_info['local_url'],
- $filetransfer,
- ),
- );
- }
-
- $batch = array(
- 'title' => t('Installing updates'),
- 'init_message' => t('Preparing to update your site'),
- 'operations' => $operations,
- 'finished' => 'update_authorize_update_batch_finished',
- 'file' => drupal_get_path('module', 'update') . '/update.authorize.inc',
- );
-
- batch_set($batch);
- // Invoke the batch via authorize.php.
- system_authorized_batch_process();
-}
-
-/**
- * Installs a new project when invoked by authorize.php.
- *
- * Callback for system_authorized_init() in
- * update_manager_install_form_submit().
- *
- * @param FileTransfer $filetransfer
- * The FileTransfer object created by authorize.php for use during this
- * operation.
- * @param string $project
- * The canonical project short name (e.g., {system}.name).
- * @param string $updater_name
- * The name of the Updater class to use for installing this project.
- * @param string $local_url
- * The URL to the locally installed temp directory where the project has
- * already been downloaded and extracted into.
- */
-function update_authorize_run_install($filetransfer, $project, $updater_name, $local_url) {
- $operations[] = array(
- 'update_authorize_batch_copy_project',
- array(
- $project,
- $updater_name,
- $local_url,
- $filetransfer,
- ),
- );
-
- // @todo Instantiate our Updater to set the human-readable title?
- $batch = array(
- 'title' => t('Installing %project', array('%project' => $project)),
- 'init_message' => t('Preparing to install'),
- 'operations' => $operations,
- // @todo Use a different finished callback for different messages?
- 'finished' => 'update_authorize_install_batch_finished',
- 'file' => drupal_get_path('module', 'update') . '/update.authorize.inc',
- );
- batch_set($batch);
-
- // Invoke the batch via authorize.php.
- system_authorized_batch_process();
-}
-
-/**
- * Batch callback: Copies project to its proper place when authorized to do so.
- *
- * @param string $project
- * The canonical short name of the project being installed.
- * @param string $updater_name
- * The name of the Updater class to use for installing this project.
- * @param string $local_url
- * The URL to the locally installed temp directory where the project has
- * already been downloaded and extracted into.
- * @param FileTransfer $filetransfer
- * The FileTransfer object to use for performing this operation.
- * @param array $context
- * Reference to an array used for Batch API storage.
- */
-function update_authorize_batch_copy_project($project, $updater_name, $local_url, $filetransfer, &$context) {
-
- // Initialize some variables in the Batch API $context array.
- if (!isset($context['results']['log'])) {
- $context['results']['log'] = array();
- }
- if (!isset($context['results']['log'][$project])) {
- $context['results']['log'][$project] = array();
- }
-
- if (!isset($context['results']['tasks'])) {
- $context['results']['tasks'] = array();
- }
-
- // The batch API uses a session, and since all the arguments are serialized
- // and unserialized between requests, although the FileTransfer object itself
- // will be reconstructed, the connection pointer itself will be lost. However,
- // the FileTransfer object will still have the connection variable, even
- // though the connection itself is now gone. So, although it's ugly, we have
- // to unset the connection variable at this point so that the FileTransfer
- // object will re-initiate the actual connection.
- unset($filetransfer->connection);
-
- if (!empty($context['results']['log'][$project]['#abort'])) {
- $context['finished'] = 1;
- return;
- }
-
- $updater = new $updater_name($local_url);
-
- try {
- if ($updater->isInstalled()) {
- // This is an update.
- $tasks = $updater->update($filetransfer);
- }
- else {
- $tasks = $updater->install($filetransfer);
- }
- }
- catch (UpdaterException $e) {
- _update_batch_create_message($context['results']['log'][$project], t('Error installing / updating'), FALSE);
- _update_batch_create_message($context['results']['log'][$project], $e->getMessage(), FALSE);
- $context['results']['log'][$project]['#abort'] = TRUE;
- return;
- }
-
- _update_batch_create_message($context['results']['log'][$project], t('Installed %project_name successfully', array('%project_name' => $project)));
- if (!empty($tasks)) {
- $context['results']['tasks'] += $tasks;
- }
-
- // This particular operation is now complete, even though the batch might
- // have other operations to perform.
- $context['finished'] = 1;
-}
-
-/**
- * Batch callback: Performs actions when the authorized update batch is done.
- *
- * This processes the results and stashes them into SESSION such that
- * authorize.php will render a report. Also responsible for putting the site
- * back online and clearing the update status cache after a successful update.
- *
- * @param $success
- * TRUE if the batch operation was successful; FALSE if there were errors.
- * @param $results
- * An associative array of results from the batch operation.
- */
-function update_authorize_update_batch_finished($success, $results) {
- foreach ($results['log'] as $project => $messages) {
- if (!empty($messages['#abort'])) {
- $success = FALSE;
- }
- }
- $offline = variable_get('maintenance_mode', FALSE);
- if ($success) {
- // Now that the update completed, we need to clear the cache of available
- // update data and recompute our status, so prevent show bogus results.
- _update_authorize_clear_update_status();
-
- // Take the site out of maintenance mode if it was previously that way.
- if ($offline && isset($_SESSION['maintenance_mode']) && $_SESSION['maintenance_mode'] == FALSE) {
- variable_set('maintenance_mode', FALSE);
- $page_message = array(
- 'message' => t('Update was completed successfully. Your site has been taken out of maintenance mode.'),
- 'type' => 'status',
- );
- }
- else {
- $page_message = array(
- 'message' => t('Update was completed successfully.'),
- 'type' => 'status',
- );
- }
- }
- elseif (!$offline) {
- $page_message = array(
- 'message' => t('Update failed! See the log below for more information.'),
- 'type' => 'error',
- );
- }
- else {
- $page_message = array(
- 'message' => t('Update failed! See the log below for more information. Your site is still in maintenance mode.'),
- 'type' => 'error',
- );
- }
- // Since we're doing an update of existing code, always add a task for
- // running update.php.
- $results['tasks'][] = t('Your modules have been downloaded and updated.');
- $results['tasks'][] = t('Run database updates ', array('@update' => base_path() . 'update.php'));
-
- // Unset the variable since it is no longer needed.
- unset($_SESSION['maintenance_mode']);
-
- // Set all these values into the SESSION so authorize.php can display them.
- $_SESSION['authorize_results']['success'] = $success;
- $_SESSION['authorize_results']['page_message'] = $page_message;
- $_SESSION['authorize_results']['messages'] = $results['log'];
- $_SESSION['authorize_results']['tasks'] = $results['tasks'];
- $_SESSION['authorize_operation']['page_title'] = t('Update manager');
-}
-
-/**
- * Batch callback: Performs actions when the authorized install batch is done.
- *
- * This processes the results and stashes them into SESSION such that
- * authorize.php will render a report. Also responsible for putting the site
- * back online after a successful install if necessary.
- *
- * @param $success
- * TRUE if the batch operation was a success; FALSE if there were errors.
- * @param $results
- * An associative array of results from the batch operation.
- */
-function update_authorize_install_batch_finished($success, $results) {
- foreach ($results['log'] as $project => $messages) {
- if (!empty($messages['#abort'])) {
- $success = FALSE;
- }
- }
- $offline = variable_get('maintenance_mode', FALSE);
- if ($success) {
- // Take the site out of maintenance mode if it was previously that way.
- if ($offline && isset($_SESSION['maintenance_mode']) && $_SESSION['maintenance_mode'] == FALSE) {
- variable_set('maintenance_mode', FALSE);
- $page_message = array(
- 'message' => t('Installation was completed successfully. Your site has been taken out of maintenance mode.'),
- 'type' => 'status',
- );
- }
- else {
- $page_message = array(
- 'message' => t('Installation was completed successfully.'),
- 'type' => 'status',
- );
- }
- }
- elseif (!$success && !$offline) {
- $page_message = array(
- 'message' => t('Installation failed! See the log below for more information.'),
- 'type' => 'error',
- );
- }
- else {
- $page_message = array(
- 'message' => t('Installation failed! See the log below for more information. Your site is still in maintenance mode.'),
- 'type' => 'error',
- );
- }
-
- // Unset the variable since it is no longer needed.
- unset($_SESSION['maintenance_mode']);
-
- // Set all these values into the SESSION so authorize.php can display them.
- $_SESSION['authorize_results']['success'] = $success;
- $_SESSION['authorize_results']['page_message'] = $page_message;
- $_SESSION['authorize_results']['messages'] = $results['log'];
- $_SESSION['authorize_results']['tasks'] = $results['tasks'];
- $_SESSION['authorize_operation']['page_title'] = t('Update manager');
-}
-
-/**
- * Creates a structure of log messages.
- *
- * @param array $project_results
- * An associative array of results from the batch operation.
- * @param string $message
- * A string containing a log message.
- * @param bool $success
- * (optional) TRUE if the operation the message is about was a success, FALSE
- * if there were errors. Defaults to TRUE.
- */
-function _update_batch_create_message(&$project_results, $message, $success = TRUE) {
- $project_results[] = array('message' => $message, 'success' => $success);
-}
-
-/**
- * Clears cached available update status data.
- *
- * Since this function is run at such a low bootstrap level, the Update Manager
- * module is not loaded. So, we can't just call _update_cache_clear(). However,
- * the database is bootstrapped, so we can do a query ourselves to clear out
- * what we want to clear.
- *
- * Note that we do not want to just truncate the table, since that would remove
- * items related to currently pending fetch attempts.
- *
- * @see update_authorize_update_batch_finished()
- * @see _update_cache_clear()
- */
-function _update_authorize_clear_update_status() {
- $query = db_delete('cache_update');
- $query->condition(
- db_or()
- ->condition('cid', 'update_project_%', 'LIKE')
- ->condition('cid', 'available_releases::%', 'LIKE')
- );
- $query->execute();
-}
diff --git a/modules/update/update.compare.inc b/modules/update/update.compare.inc
deleted file mode 100644
index 072a0da..0000000
--- a/modules/update/update.compare.inc
+++ /dev/null
@@ -1,832 +0,0 @@
-status && !empty($file->sub_themes)) {
- foreach ($file->sub_themes as $key => $name) {
- // Build a list of enabled sub-themes.
- if ($list[$key]->status) {
- $file->enabled_sub_themes[$key] = $name;
- }
- }
- // If there are no enabled subthemes, we should ignore this base theme
- // for the enabled case. If the site is trying to display disabled
- // themes, we'll catch it then.
- if (empty($file->enabled_sub_themes)) {
- continue;
- }
- }
- // Otherwise, just add projects of the proper status to our list.
- elseif ($file->status != $status) {
- continue;
- }
-
- // Skip if the .info file is broken.
- if (empty($file->info)) {
- continue;
- }
-
- // Skip if it's a hidden module or theme.
- if (!empty($file->info['hidden'])) {
- continue;
- }
-
- // If the .info doesn't define the 'project', try to figure it out.
- if (!isset($file->info['project'])) {
- $file->info['project'] = update_get_project_name($file);
- }
-
- // If we still don't know the 'project', give up.
- if (empty($file->info['project'])) {
- continue;
- }
-
- // If we don't already know it, grab the change time on the .info file
- // itself. Note: we need to use the ctime, not the mtime (modification
- // time) since many (all?) tar implementations will go out of their way to
- // set the mtime on the files it creates to the timestamps recorded in the
- // tarball. We want to see the last time the file was changed on disk,
- // which is left alone by tar and correctly set to the time the .info file
- // was unpacked.
- if (!isset($file->info['_info_file_ctime'])) {
- $info_filename = dirname($file->uri) . '/' . $file->name . '.info';
- $file->info['_info_file_ctime'] = filectime($info_filename);
- }
-
- if (!isset($file->info['datestamp'])) {
- $file->info['datestamp'] = 0;
- }
-
- $project_name = $file->info['project'];
-
- // Figure out what project type we're going to use to display this module
- // or theme. If the project name is 'drupal', we don't want it to show up
- // under the usual "Modules" section, we put it at a special "Drupal Core"
- // section at the top of the report.
- if ($project_name == 'drupal') {
- $project_display_type = 'core';
- }
- else {
- $project_display_type = $project_type;
- }
- if (empty($status) && empty($file->enabled_sub_themes)) {
- // If we're processing disabled modules or themes, append a suffix.
- // However, we don't do this to a a base theme with enabled
- // subthemes, since we treat that case as if it is enabled.
- $project_display_type .= '-disabled';
- }
- // Add a list of sub-themes that "depend on" the project and a list of base
- // themes that are "required by" the project.
- if ($project_name == 'drupal') {
- // Drupal core is always required, so this extra info would be noise.
- $sub_themes = array();
- $base_themes = array();
- }
- else {
- // Add list of enabled sub-themes.
- $sub_themes = !empty($file->enabled_sub_themes) ? $file->enabled_sub_themes : array();
- // Add list of base themes.
- $base_themes = !empty($file->base_themes) ? $file->base_themes : array();
- }
- if (!isset($projects[$project_name])) {
- // Only process this if we haven't done this project, since a single
- // project can have multiple modules or themes.
- $projects[$project_name] = array(
- 'name' => $project_name,
- // Only save attributes from the .info file we care about so we do not
- // bloat our RAM usage needlessly.
- 'info' => update_filter_project_info($file->info),
- 'datestamp' => $file->info['datestamp'],
- 'includes' => array($file->name => $file->info['name']),
- 'project_type' => $project_display_type,
- 'project_status' => $status,
- 'sub_themes' => $sub_themes,
- 'base_themes' => $base_themes,
- );
- }
- elseif ($projects[$project_name]['project_type'] == $project_display_type) {
- // Only add the file we're processing to the 'includes' array for this
- // project if it is of the same type and status (which is encoded in the
- // $project_display_type). This prevents listing all the disabled
- // modules included with an enabled project if we happen to be checking
- // for disabled modules, too.
- $projects[$project_name]['includes'][$file->name] = $file->info['name'];
- $projects[$project_name]['info']['_info_file_ctime'] = max($projects[$project_name]['info']['_info_file_ctime'], $file->info['_info_file_ctime']);
- $projects[$project_name]['datestamp'] = max($projects[$project_name]['datestamp'], $file->info['datestamp']);
- if (!empty($sub_themes)) {
- $projects[$project_name]['sub_themes'] += $sub_themes;
- }
- if (!empty($base_themes)) {
- $projects[$project_name]['base_themes'] += $base_themes;
- }
- }
- elseif (empty($status)) {
- // If we have a project_name that matches, but the project_display_type
- // does not, it means we're processing a disabled module or theme that
- // belongs to a project that has some enabled code. In this case, we add
- // the disabled thing into a separate array for separate display.
- $projects[$project_name]['disabled'][$file->name] = $file->info['name'];
- }
- }
-}
-
-/**
- * Determines what project a given file object belongs to.
- *
- * @param $file
- * A file object as returned by system_get_files_database().
- *
- * @return
- * The canonical project short name.
- *
- * @see system_get_files_database()
- */
-function update_get_project_name($file) {
- $project_name = '';
- if (isset($file->info['project'])) {
- $project_name = $file->info['project'];
- }
- elseif (isset($file->info['package']) && (strpos($file->info['package'], 'Core') === 0)) {
- $project_name = 'drupal';
- }
- return $project_name;
-}
-
-/**
- * Determines version and type information for currently installed projects.
- *
- * Processes the list of projects on the system to figure out the currently
- * installed versions, and other information that is required before we can
- * compare against the available releases to produce the status report.
- *
- * @param $projects
- * Array of project information from update_get_projects().
- */
-function update_process_project_info(&$projects) {
- foreach ($projects as $key => $project) {
- // Assume an official release until we see otherwise.
- $install_type = 'official';
-
- $info = $project['info'];
-
- if (isset($info['version'])) {
- // Check for development snapshots
- if (preg_match('@(dev|HEAD)@', $info['version'])) {
- $install_type = 'dev';
- }
-
- // Figure out what the currently installed major version is. We need
- // to handle both contribution (e.g. "5.x-1.3", major = 1) and core
- // (e.g. "5.1", major = 5) version strings.
- $matches = array();
- if (preg_match('/^(\d+\.x-)?(\d+)\..*$/', $info['version'], $matches)) {
- $info['major'] = $matches[2];
- }
- elseif (!isset($info['major'])) {
- // This would only happen for version strings that don't follow the
- // drupal.org convention. We let contribs define "major" in their
- // .info in this case, and only if that's missing would we hit this.
- $info['major'] = -1;
- }
- }
- else {
- // No version info available at all.
- $install_type = 'unknown';
- $info['version'] = t('Unknown');
- $info['major'] = -1;
- }
-
- // Finally, save the results we care about into the $projects array.
- $projects[$key]['existing_version'] = $info['version'];
- $projects[$key]['existing_major'] = $info['major'];
- $projects[$key]['install_type'] = $install_type;
- }
-}
-
-/**
- * Calculates the current update status of all projects on the site.
- *
- * The results of this function are expensive to compute, especially on sites
- * with lots of modules or themes, since it involves a lot of comparisons and
- * other operations. Therefore, we cache the results into the {cache_update}
- * table using the 'update_project_data' cache ID. However, since this is not
- * the data about available updates fetched from the network, it is ok to
- * invalidate it somewhat quickly. If we keep this data for very long, site
- * administrators are more likely to see incorrect results if they upgrade to a
- * newer version of a module or theme but do not visit certain pages that
- * automatically clear this cache.
- *
- * @param array $available
- * Data about available project releases.
- *
- * @return
- * An array of installed projects with current update status information.
- *
- * @see update_get_available()
- * @see update_get_projects()
- * @see update_process_project_info()
- * @see update_project_cache()
- */
-function update_calculate_project_data($available) {
- // Retrieve the projects from cache, if present.
- $projects = update_project_cache('update_project_data');
- // If $projects is empty, then the cache must be rebuilt.
- // Otherwise, return the cached data and skip the rest of the function.
- if (!empty($projects)) {
- return $projects;
- }
- $projects = update_get_projects();
- update_process_project_info($projects);
- foreach ($projects as $project => $project_info) {
- if (isset($available[$project])) {
- update_calculate_project_update_status($project, $projects[$project], $available[$project]);
- }
- else {
- $projects[$project]['status'] = UPDATE_UNKNOWN;
- $projects[$project]['reason'] = t('No available releases found');
- }
- }
- // Give other modules a chance to alter the status (for example, to allow a
- // contrib module to provide fine-grained settings to ignore specific
- // projects or releases).
- drupal_alter('update_status', $projects);
-
- // Cache the site's update status for at most 1 hour.
- _update_cache_set('update_project_data', $projects, REQUEST_TIME + 3600);
- return $projects;
-}
-
-/**
- * Calculates the current update status of a specific project.
- *
- * This function is the heart of the update status feature. For each project it
- * is invoked with, it first checks if the project has been flagged with a
- * special status like "unsupported" or "insecure", or if the project node
- * itself has been unpublished. In any of those cases, the project is marked
- * with an error and the next project is considered.
- *
- * If the project itself is valid, the function decides what major release
- * series to consider. The project defines what the currently supported major
- * versions are for each version of core, so the first step is to make sure the
- * current version is still supported. If so, that's the target version. If the
- * current version is unsupported, the project maintainer's recommended major
- * version is used. There's also a check to make sure that this function never
- * recommends an earlier release than the currently installed major version.
- *
- * Given a target major version, the available releases are scanned looking for
- * the specific release to recommend (avoiding beta releases and development
- * snapshots if possible). For the target major version, the highest patch level
- * is found. If there is a release at that patch level with no extra ("beta",
- * etc.), then the release at that patch level with the most recent release date
- * is recommended. If every release at that patch level has extra (only betas),
- * then the latest release from the previous patch level is recommended. For
- * example:
- *
- * - 1.6-bugfix <-- recommended version because 1.6 already exists.
- * - 1.6
- *
- * or
- *
- * - 1.6-beta
- * - 1.5 <-- recommended version because no 1.6 exists.
- * - 1.4
- *
- * Also, the latest release from the same major version is looked for, even beta
- * releases, to display to the user as the "Latest version" option.
- * Additionally, the latest official release from any higher major versions that
- * have been released is searched for to provide a set of "Also available"
- * options.
- *
- * Finally, and most importantly, the release history continues to be scanned
- * until the currently installed release is reached, searching for anything
- * marked as a security update. If any security updates have been found between
- * the recommended release and the installed version, all of the releases that
- * included a security fix are recorded so that the site administrator can be
- * warned their site is insecure, and links pointing to the release notes for
- * each security update can be included (which, in turn, will link to the
- * official security announcements for each vulnerability).
- *
- * This function relies on the fact that the .xml release history data comes
- * sorted based on major version and patch level, then finally by release date
- * if there are multiple releases such as betas from the same major.patch
- * version (e.g., 5.x-1.5-beta1, 5.x-1.5-beta2, and 5.x-1.5). Development
- * snapshots for a given major version are always listed last.
- *
- * @param $unused
- * Input is not being used, but remains in function for API compatibility
- * reasons.
- * @param $project_data
- * An array containing information about a specific project.
- * @param $available
- * Data about available project releases of a specific project.
- */
-function update_calculate_project_update_status($unused, &$project_data, $available) {
- foreach (array('title', 'link') as $attribute) {
- if (!isset($project_data[$attribute]) && isset($available[$attribute])) {
- $project_data[$attribute] = $available[$attribute];
- }
- }
-
- // If the project status is marked as something bad, there's nothing else
- // to consider.
- if (isset($available['project_status'])) {
- switch ($available['project_status']) {
- case 'insecure':
- $project_data['status'] = UPDATE_NOT_SECURE;
- if (empty($project_data['extra'])) {
- $project_data['extra'] = array();
- }
- $project_data['extra'][] = array(
- 'class' => array('project-not-secure'),
- 'label' => t('Project not secure'),
- 'data' => t('This project has been labeled insecure by the Drupal security team, and is no longer available for download. Immediately disabling everything included by this project is strongly recommended!'),
- );
- break;
- case 'unpublished':
- case 'revoked':
- $project_data['status'] = UPDATE_REVOKED;
- if (empty($project_data['extra'])) {
- $project_data['extra'] = array();
- }
- $project_data['extra'][] = array(
- 'class' => array('project-revoked'),
- 'label' => t('Project revoked'),
- 'data' => t('This project has been revoked, and is no longer available for download. Disabling everything included by this project is strongly recommended!'),
- );
- break;
- case 'unsupported':
- $project_data['status'] = UPDATE_NOT_SUPPORTED;
- if (empty($project_data['extra'])) {
- $project_data['extra'] = array();
- }
- $project_data['extra'][] = array(
- 'class' => array('project-not-supported'),
- 'label' => t('Project not supported'),
- 'data' => t('This project is no longer supported, and is no longer available for download. Disabling everything included by this project is strongly recommended!'),
- );
- break;
- case 'not-fetched':
- $project_data['status'] = UPDATE_NOT_FETCHED;
- $project_data['reason'] = t('Failed to get available update data.');
- break;
-
- default:
- // Assume anything else (e.g. 'published') is valid and we should
- // perform the rest of the logic in this function.
- break;
- }
- }
-
- if (!empty($project_data['status'])) {
- // We already know the status for this project, so there's nothing else to
- // compute. Record the project status into $project_data and we're done.
- $project_data['project_status'] = $available['project_status'];
- return;
- }
-
- // Figure out the target major version.
- $existing_major = $project_data['existing_major'];
- $supported_majors = array();
- if (isset($available['supported_majors'])) {
- $supported_majors = explode(',', $available['supported_majors']);
- }
- elseif (isset($available['default_major'])) {
- // Older release history XML file without supported or recommended.
- $supported_majors[] = $available['default_major'];
- }
-
- if (in_array($existing_major, $supported_majors)) {
- // Still supported, stay at the current major version.
- $target_major = $existing_major;
- }
- elseif (isset($available['recommended_major'])) {
- // Since 'recommended_major' is defined, we know this is the new XML
- // format. Therefore, we know the current release is unsupported since
- // its major version was not in the 'supported_majors' list. We should
- // find the best release from the recommended major version.
- $target_major = $available['recommended_major'];
- $project_data['status'] = UPDATE_NOT_SUPPORTED;
- }
- elseif (isset($available['default_major'])) {
- // Older release history XML file without recommended, so recommend
- // the currently defined "default_major" version.
- $target_major = $available['default_major'];
- }
- else {
- // Malformed XML file? Stick with the current version.
- $target_major = $existing_major;
- }
-
- // Make sure we never tell the admin to downgrade. If we recommended an
- // earlier version than the one they're running, they'd face an
- // impossible data migration problem, since Drupal never supports a DB
- // downgrade path. In the unfortunate case that what they're running is
- // unsupported, and there's nothing newer for them to upgrade to, we
- // can't print out a "Recommended version", but just have to tell them
- // what they have is unsupported and let them figure it out.
- $target_major = max($existing_major, $target_major);
-
- $release_patch_changed = '';
- $patch = '';
-
- // If the project is marked as UPDATE_FETCH_PENDING, it means that the
- // data we currently have (if any) is stale, and we've got a task queued
- // up to (re)fetch the data. In that case, we mark it as such, merge in
- // whatever data we have (e.g. project title and link), and move on.
- if (!empty($available['fetch_status']) && $available['fetch_status'] == UPDATE_FETCH_PENDING) {
- $project_data['status'] = UPDATE_FETCH_PENDING;
- $project_data['reason'] = t('No available update data');
- $project_data['fetch_status'] = $available['fetch_status'];
- return;
- }
-
- // Defend ourselves from XML history files that contain no releases.
- if (empty($available['releases'])) {
- $project_data['status'] = UPDATE_UNKNOWN;
- $project_data['reason'] = t('No available releases found');
- return;
- }
- foreach ($available['releases'] as $version => $release) {
- // First, if this is the existing release, check a few conditions.
- if ($project_data['existing_version'] === $version) {
- if (isset($release['terms']['Release type']) &&
- in_array('Insecure', $release['terms']['Release type'])) {
- $project_data['status'] = UPDATE_NOT_SECURE;
- }
- elseif ($release['status'] == 'unpublished') {
- $project_data['status'] = UPDATE_REVOKED;
- if (empty($project_data['extra'])) {
- $project_data['extra'] = array();
- }
- $project_data['extra'][] = array(
- 'class' => array('release-revoked'),
- 'label' => t('Release revoked'),
- 'data' => t('Your currently installed release has been revoked, and is no longer available for download. Disabling everything included in this release or upgrading is strongly recommended!'),
- );
- }
- elseif (isset($release['terms']['Release type']) &&
- in_array('Unsupported', $release['terms']['Release type'])) {
- $project_data['status'] = UPDATE_NOT_SUPPORTED;
- if (empty($project_data['extra'])) {
- $project_data['extra'] = array();
- }
- $project_data['extra'][] = array(
- 'class' => array('release-not-supported'),
- 'label' => t('Release not supported'),
- 'data' => t('Your currently installed release is now unsupported, and is no longer available for download. Disabling everything included in this release or upgrading is strongly recommended!'),
- );
- }
- }
-
- // Otherwise, ignore unpublished, insecure, or unsupported releases.
- if ($release['status'] == 'unpublished' ||
- (isset($release['terms']['Release type']) &&
- (in_array('Insecure', $release['terms']['Release type']) ||
- in_array('Unsupported', $release['terms']['Release type'])))) {
- continue;
- }
-
- // See if this is a higher major version than our target and yet still
- // supported. If so, record it as an "Also available" release.
- // Note: some projects have a HEAD release from CVS days, which could
- // be one of those being compared. They would not have version_major
- // set, so we must call isset first.
- if (isset($release['version_major']) && $release['version_major'] > $target_major) {
- if (in_array($release['version_major'], $supported_majors)) {
- if (!isset($project_data['also'])) {
- $project_data['also'] = array();
- }
- if (!isset($project_data['also'][$release['version_major']])) {
- $project_data['also'][$release['version_major']] = $version;
- $project_data['releases'][$version] = $release;
- }
- }
- // Otherwise, this release can't matter to us, since it's neither
- // from the release series we're currently using nor the recommended
- // release. We don't even care about security updates for this
- // branch, since if a project maintainer puts out a security release
- // at a higher major version and not at the lower major version,
- // they must remove the lower version from the supported major
- // versions at the same time, in which case we won't hit this code.
- continue;
- }
-
- // Look for the 'latest version' if we haven't found it yet. Latest is
- // defined as the most recent version for the target major version.
- if (!isset($project_data['latest_version'])
- && $release['version_major'] == $target_major) {
- $project_data['latest_version'] = $version;
- $project_data['releases'][$version] = $release;
- }
-
- // Look for the development snapshot release for this branch.
- if (!isset($project_data['dev_version'])
- && $release['version_major'] == $target_major
- && isset($release['version_extra'])
- && $release['version_extra'] == 'dev') {
- $project_data['dev_version'] = $version;
- $project_data['releases'][$version] = $release;
- }
-
- // Look for the 'recommended' version if we haven't found it yet (see
- // phpdoc at the top of this function for the definition).
- if (!isset($project_data['recommended'])
- && $release['version_major'] == $target_major
- && isset($release['version_patch'])) {
- if ($patch != $release['version_patch']) {
- $patch = $release['version_patch'];
- $release_patch_changed = $release;
- }
- if (empty($release['version_extra']) && $patch == $release['version_patch']) {
- $project_data['recommended'] = $release_patch_changed['version'];
- $project_data['releases'][$release_patch_changed['version']] = $release_patch_changed;
- }
- }
-
- // Stop searching once we hit the currently installed version.
- if ($project_data['existing_version'] === $version) {
- break;
- }
-
- // If we're running a dev snapshot and have a timestamp, stop
- // searching for security updates once we hit an official release
- // older than what we've got. Allow 100 seconds of leeway to handle
- // differences between the datestamp in the .info file and the
- // timestamp of the tarball itself (which are usually off by 1 or 2
- // seconds) so that we don't flag that as a new release.
- if ($project_data['install_type'] == 'dev') {
- if (empty($project_data['datestamp'])) {
- // We don't have current timestamp info, so we can't know.
- continue;
- }
- elseif (isset($release['date']) && ($project_data['datestamp'] + 100 > $release['date'])) {
- // We're newer than this, so we can skip it.
- continue;
- }
- }
-
- // See if this release is a security update.
- if (isset($release['terms']['Release type'])
- && in_array('Security update', $release['terms']['Release type'])) {
- $project_data['security updates'][] = $release;
- }
- }
-
- // If we were unable to find a recommended version, then make the latest
- // version the recommended version if possible.
- if (!isset($project_data['recommended']) && isset($project_data['latest_version'])) {
- $project_data['recommended'] = $project_data['latest_version'];
- }
-
- //
- // Check to see if we need an update or not.
- //
-
- if (!empty($project_data['security updates'])) {
- // If we found security updates, that always trumps any other status.
- $project_data['status'] = UPDATE_NOT_SECURE;
- }
-
- if (isset($project_data['status'])) {
- // If we already know the status, we're done.
- return;
- }
-
- // If we don't know what to recommend, there's nothing we can report.
- // Bail out early.
- if (!isset($project_data['recommended'])) {
- $project_data['status'] = UPDATE_UNKNOWN;
- $project_data['reason'] = t('No available releases found');
- return;
- }
-
- // If we're running a dev snapshot, compare the date of the dev snapshot
- // with the latest official version, and record the absolute latest in
- // 'latest_dev' so we can correctly decide if there's a newer release
- // than our current snapshot.
- if ($project_data['install_type'] == 'dev') {
- if (isset($project_data['dev_version']) && $available['releases'][$project_data['dev_version']]['date'] > $available['releases'][$project_data['latest_version']]['date']) {
- $project_data['latest_dev'] = $project_data['dev_version'];
- }
- else {
- $project_data['latest_dev'] = $project_data['latest_version'];
- }
- }
-
- // Figure out the status, based on what we've seen and the install type.
- switch ($project_data['install_type']) {
- case 'official':
- if ($project_data['existing_version'] === $project_data['recommended'] || $project_data['existing_version'] === $project_data['latest_version']) {
- $project_data['status'] = UPDATE_CURRENT;
- }
- else {
- $project_data['status'] = UPDATE_NOT_CURRENT;
- }
- break;
-
- case 'dev':
- $latest = $available['releases'][$project_data['latest_dev']];
- if (empty($project_data['datestamp'])) {
- $project_data['status'] = UPDATE_NOT_CHECKED;
- $project_data['reason'] = t('Unknown release date');
- }
- elseif (($project_data['datestamp'] + 100 > $latest['date'])) {
- $project_data['status'] = UPDATE_CURRENT;
- }
- else {
- $project_data['status'] = UPDATE_NOT_CURRENT;
- }
- break;
-
- default:
- $project_data['status'] = UPDATE_UNKNOWN;
- $project_data['reason'] = t('Invalid info');
- }
-}
-
-/**
- * Retrieves data from {cache_update} or empties the cache when necessary.
- *
- * Two very expensive arrays computed by this module are the list of all
- * installed modules and themes (and .info data, project associations, etc), and
- * the current status of the site relative to the currently available releases.
- * These two arrays are cached in the {cache_update} table and used whenever
- * possible. The cache is cleared whenever the administrator visits the status
- * report, available updates report, or the module or theme administration
- * pages, since we should always recompute the most current values on any of
- * those pages.
- *
- * Note: while both of these arrays are expensive to compute (in terms of disk
- * I/O and some fairly heavy CPU processing), neither of these is the actual
- * data about available updates that we have to fetch over the network from
- * updates.drupal.org. That information is stored with the
- * 'update_available_releases' cache ID -- it needs to persist longer than 1
- * hour and never get invalidated just by visiting a page on the site.
- *
- * @param $cid
- * The cache ID of data to return from the cache. Valid options are
- * 'update_project_data' and 'update_project_projects'.
- *
- * @return
- * The cached value of the $projects array generated by
- * update_calculate_project_data() or update_get_projects(), or an empty array
- * when the cache is cleared.
- */
-function update_project_cache($cid) {
- $projects = array();
-
- // On certain paths, we should clear the cache and recompute the projects for
- // update status of the site to avoid presenting stale information.
- $q = $_GET['q'];
- $paths = array(
- 'admin/modules',
- 'admin/modules/update',
- 'admin/appearance',
- 'admin/appearance/update',
- 'admin/reports',
- 'admin/reports/updates',
- 'admin/reports/updates/update',
- 'admin/reports/status',
- 'admin/reports/updates/check',
- );
- if (in_array($q, $paths)) {
- _update_cache_clear($cid);
- }
- else {
- $cache = _update_cache_get($cid);
- if (!empty($cache->data) && $cache->expire > REQUEST_TIME) {
- $projects = $cache->data;
- }
- }
- return $projects;
-}
-
-/**
- * Filters the project .info data to only save attributes we need.
- *
- * @param array $info
- * Array of .info file data as returned by drupal_parse_info_file().
- *
- * @return
- * Array of .info file data we need for the update manager.
- *
- * @see _update_process_info_list()
- */
-function update_filter_project_info($info) {
- $whitelist = array(
- '_info_file_ctime',
- 'datestamp',
- 'major',
- 'name',
- 'package',
- 'project',
- 'project status url',
- 'version',
- );
- return array_intersect_key($info, drupal_map_assoc($whitelist));
-}
diff --git a/modules/update/update.css b/modules/update/update.css
deleted file mode 100644
index ba45fe6..0000000
--- a/modules/update/update.css
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * @file
- * Styles used by the Update Manager module.
- */
-
-.update .project {
- font-weight: bold;
- font-size: 110%;
- padding-left: .25em; /* LTR */
- height: 22px;
-}
-
-.update .version-status {
- float: right; /* LTR */
- padding-right: 10px; /* LTR */
- font-size: 110%;
- height: 20px;
-}
-
-.update .version-status .icon {
- padding-left: .5em; /* LTR */
-}
-
-.update .version-date {
- white-space: nowrap;
-}
-
-.update .info {
- margin: 0;
- padding: 1em 1em .25em 1em;
-}
-
-.update tr.even,
-.update tr.odd {
- border: none;
-}
-
-.update tr td {
- border-top: 1px solid #ccc;
- border-bottom: 1px solid #ccc;
-}
-
-.update tr.error {
- background: #fcc;
-}
-
-.update tr.error .version-recommended {
- background: #fdd;
-}
-
-.update tr.ok {
- background: #dfd;
-}
-
-.update tr.warning {
- background: #ffd;
-}
-
-.update tr.warning .version-recommended {
- background: #ffe;
-}
-
-.current-version,
-.new-version {
- direction: ltr; /* Note: version numbers should always be LTR. */
-}
-
-.update tr.unknown {
- background: #ddd;
-}
-
-table.update,
-.update table.version {
- width: 100%;
- margin-top: .5em;
- border: none;
-}
-
-.update table.version tbody {
- border: none;
-}
-
-.update table.version tr,
-.update table.version td {
- line-height: .9em;
- padding: 0;
- margin: 0;
- border: none;
- background: none;
-}
-
-.update table.version .version-title {
- padding-left: 1em; /* LTR */
- width: 14em;
-}
-
-.update table.version .version-details {
- padding-right: .5em; /* LTR */
-}
-
-.update table.version .version-links {
- text-align: right; /* LTR */
- padding-right: 1em; /* LTR */
-}
-
-.update table.version-security .version-title {
- color: #970F00;
-}
-
-.update table.version-recommended-strong .version-title {
- font-weight: bold;
-}
-
-.update .security-error {
- font-weight: bold;
- color: #970F00;
-}
-
-.update .check-manually {
- padding-left: 1em; /* LTR */
-}
-
-.update-major-version-warning {
- color: #ff0000;
-}
-
-table tbody tr.update-security,
-table tbody tr.update-unsupported {
- background: #fcc;
-}
-
-th.update-project-name {
- width: 50%;
-}
-
diff --git a/modules/update/update.fetch.inc b/modules/update/update.fetch.inc
deleted file mode 100644
index 9dd2f0b..0000000
--- a/modules/update/update.fetch.inc
+++ /dev/null
@@ -1,423 +0,0 @@
- array(
- array('update_fetch_data_batch', array()),
- ),
- 'finished' => 'update_fetch_data_finished',
- 'title' => t('Checking available update data'),
- 'progress_message' => t('Trying to check available update data ...'),
- 'error_message' => t('Error checking available update data.'),
- 'file' => drupal_get_path('module', 'update') . '/update.fetch.inc',
- );
- batch_set($batch);
- batch_process('admin/reports/updates');
-}
-
-/**
- * Batch callback: Processes a step in batch for fetching available update data.
- *
- * @param $context
- * Reference to an array used for Batch API storage.
- */
-function update_fetch_data_batch(&$context) {
- $queue = DrupalQueue::get('update_fetch_tasks');
- if (empty($context['sandbox']['max'])) {
- $context['finished'] = 0;
- $context['sandbox']['max'] = $queue->numberOfItems();
- $context['sandbox']['progress'] = 0;
- $context['message'] = t('Checking available update data ...');
- $context['results']['updated'] = 0;
- $context['results']['failures'] = 0;
- $context['results']['processed'] = 0;
- }
-
- // Grab another item from the fetch queue.
- for ($i = 0; $i < 5; $i++) {
- if ($item = $queue->claimItem()) {
- if (_update_process_fetch_task($item->data)) {
- $context['results']['updated']++;
- $context['message'] = t('Checked available update data for %title.', array('%title' => $item->data['info']['name']));
- }
- else {
- $context['message'] = t('Failed to check available update data for %title.', array('%title' => $item->data['info']['name']));
- $context['results']['failures']++;
- }
- $context['sandbox']['progress']++;
- $context['results']['processed']++;
- $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
- $queue->deleteItem($item);
- }
- else {
- // If the queue is currently empty, we're done. It's possible that
- // another thread might have added new fetch tasks while we were
- // processing this batch. In that case, the usual 'finished' math could
- // get confused, since we'd end up processing more tasks that we thought
- // we had when we started and initialized 'max' with numberOfItems(). By
- // forcing 'finished' to be exactly 1 here, we ensure that batch
- // processing is terminated.
- $context['finished'] = 1;
- return;
- }
- }
-}
-
-/**
- * Batch callback: Performs actions when all fetch tasks have been completed.
- *
- * @param $success
- * TRUE if the batch operation was successful; FALSE if there were errors.
- * @param $results
- * An associative array of results from the batch operation, including the key
- * 'updated' which holds the total number of projects we fetched available
- * update data for.
- */
-function update_fetch_data_finished($success, $results) {
- if ($success) {
- if (!empty($results)) {
- if (!empty($results['updated'])) {
- drupal_set_message(format_plural($results['updated'], 'Checked available update data for one project.', 'Checked available update data for @count projects.'));
- }
- if (!empty($results['failures'])) {
- drupal_set_message(format_plural($results['failures'], 'Failed to get available update data for one project.', 'Failed to get available update data for @count projects.'), 'error');
- }
- }
- }
- else {
- drupal_set_message(t('An error occurred trying to get available update data.'), 'error');
- }
-}
-
-/**
- * Attempts to drain the queue of tasks for release history data to fetch.
- */
-function _update_fetch_data() {
- $queue = DrupalQueue::get('update_fetch_tasks');
- $end = time() + variable_get('update_max_fetch_time', UPDATE_MAX_FETCH_TIME);
- while (time() < $end && ($item = $queue->claimItem())) {
- _update_process_fetch_task($item->data);
- $queue->deleteItem($item);
- }
-}
-
-/**
- * Processes a task to fetch available update data for a single project.
- *
- * Once the release history XML data is downloaded, it is parsed and saved into
- * the {cache_update} table in an entry just for that project.
- *
- * @param $project
- * Associative array of information about the project to fetch data for.
- *
- * @return
- * TRUE if we fetched parsable XML, otherwise FALSE.
- */
-function _update_process_fetch_task($project) {
- global $base_url;
- $fail = &drupal_static(__FUNCTION__, array());
- // This can be in the middle of a long-running batch, so REQUEST_TIME won't
- // necessarily be valid.
- $now = time();
- if (empty($fail)) {
- // If we have valid data about release history XML servers that we have
- // failed to fetch from on previous attempts, load that from the cache.
- if (($cache = _update_cache_get('fetch_failures')) && ($cache->expire > $now)) {
- $fail = $cache->data;
- }
- }
-
- $max_fetch_attempts = variable_get('update_max_fetch_attempts', UPDATE_MAX_FETCH_ATTEMPTS);
-
- $success = FALSE;
- $available = array();
- $site_key = drupal_hmac_base64($base_url, drupal_get_private_key());
- $url = _update_build_fetch_url($project, $site_key);
- $fetch_url_base = _update_get_fetch_url_base($project);
- $project_name = $project['name'];
-
- if (empty($fail[$fetch_url_base]) || $fail[$fetch_url_base] < $max_fetch_attempts) {
- $xml = drupal_http_request($url);
- if (!isset($xml->error) && isset($xml->data)) {
- $data = $xml->data;
- }
- }
-
- if (!empty($data)) {
- $available = update_parse_xml($data);
- // @todo: Purge release data we don't need (http://drupal.org/node/238950).
- if (!empty($available)) {
- // Only if we fetched and parsed something sane do we return success.
- $success = TRUE;
- }
- }
- else {
- $available['project_status'] = 'not-fetched';
- if (empty($fail[$fetch_url_base])) {
- $fail[$fetch_url_base] = 1;
- }
- else {
- $fail[$fetch_url_base]++;
- }
- }
-
- $frequency = variable_get('update_check_frequency', 1);
- $cid = 'available_releases::' . $project_name;
- _update_cache_set($cid, $available, $now + (60 * 60 * 24 * $frequency));
-
- // Stash the $fail data back in the DB for the next 5 minutes.
- _update_cache_set('fetch_failures', $fail, $now + (60 * 5));
-
- // Whether this worked or not, we did just (try to) check for updates.
- variable_set('update_last_check', $now);
-
- // Now that we processed the fetch task for this project, clear out the
- // record in {cache_update} for this task so we're willing to fetch again.
- _update_cache_clear('fetch_task::' . $project_name);
-
- return $success;
-}
-
-/**
- * Clears out all the cached available update data and initiates re-fetching.
- */
-function _update_refresh() {
- module_load_include('inc', 'update', 'update.compare');
-
- // Since we're fetching new available update data, we want to clear
- // our cache of both the projects we care about, and the current update
- // status of the site. We do *not* want to clear the cache of available
- // releases just yet, since that data (even if it's stale) can be useful
- // during update_get_projects(); for example, to modules that implement
- // hook_system_info_alter() such as cvs_deploy.
- _update_cache_clear('update_project_projects');
- _update_cache_clear('update_project_data');
-
- $projects = update_get_projects();
-
- // Now that we have the list of projects, we should also clear our cache of
- // available release data, since even if we fail to fetch new data, we need
- // to clear out the stale data at this point.
- _update_cache_clear('available_releases::', TRUE);
-
- foreach ($projects as $key => $project) {
- update_create_fetch_task($project);
- }
-}
-
-/**
- * Adds a task to the queue for fetching release history data for a project.
- *
- * We only create a new fetch task if there's no task already in the queue for
- * this particular project (based on 'fetch_task::' entries in the
- * {cache_update} table).
- *
- * @param $project
- * Associative array of information about a project as created by
- * update_get_projects(), including keys such as 'name' (short name), and the
- * 'info' array with data from a .info file for the project.
- *
- * @see update_get_projects()
- * @see update_get_available()
- * @see update_refresh()
- * @see update_fetch_data()
- * @see _update_process_fetch_task()
- */
-function _update_create_fetch_task($project) {
- $fetch_tasks = &drupal_static(__FUNCTION__, array());
- if (empty($fetch_tasks)) {
- $fetch_tasks = _update_get_cache_multiple('fetch_task');
- }
- $cid = 'fetch_task::' . $project['name'];
- if (empty($fetch_tasks[$cid])) {
- $queue = DrupalQueue::get('update_fetch_tasks');
- $queue->createItem($project);
- // Due to race conditions, it is possible that another process already
- // inserted a row into the {cache_update} table and the following query will
- // throw an exception.
- // @todo: Remove the need for the manual check by relying on a queue that
- // enforces unique items.
- try {
- db_insert('cache_update')
- ->fields(array(
- 'cid' => $cid,
- 'created' => REQUEST_TIME,
- ))
- ->execute();
- }
- catch (Exception $e) {
- // The exception can be ignored safely.
- }
- $fetch_tasks[$cid] = REQUEST_TIME;
- }
-}
-
-/**
- * Generates the URL to fetch information about project updates.
- *
- * This figures out the right URL to use, based on the project's .info file and
- * the global defaults. Appends optional query arguments when the site is
- * configured to report usage stats.
- *
- * @param $project
- * The array of project information from update_get_projects().
- * @param $site_key
- * (optional) The anonymous site key hash. Defaults to an empty string.
- *
- * @return
- * The URL for fetching information about updates to the specified project.
- *
- * @see update_fetch_data()
- * @see _update_process_fetch_task()
- * @see update_get_projects()
- */
-function _update_build_fetch_url($project, $site_key = '') {
- $name = $project['name'];
- $url = _update_get_fetch_url_base($project);
- $url .= '/' . $name . '/' . DRUPAL_CORE_COMPATIBILITY;
-
- // Only append usage information if we have a site key and the project is
- // enabled. We do not want to record usage statistics for disabled projects.
- if (!empty($site_key) && (strpos($project['project_type'], 'disabled') === FALSE)) {
- // Append the site key.
- $url .= (strpos($url, '?') !== FALSE) ? '&' : '?';
- $url .= 'site_key=';
- $url .= rawurlencode($site_key);
-
- // Append the version.
- if (!empty($project['info']['version'])) {
- $url .= '&version=';
- $url .= rawurlencode($project['info']['version']);
- }
-
- // Append the list of modules or themes enabled.
- $list = array_keys($project['includes']);
- $url .= '&list=';
- $url .= rawurlencode(implode(',', $list));
- }
- return $url;
-}
-
-/**
- * Returns the base of the URL to fetch available update data for a project.
- *
- * @param $project
- * The array of project information from update_get_projects().
- *
- * @return
- * The base of the URL used for fetching available update data. This does
- * not include the path elements to specify a particular project, version,
- * site_key, etc.
- *
- * @see _update_build_fetch_url()
- */
-function _update_get_fetch_url_base($project) {
- return isset($project['info']['project status url']) ? $project['info']['project status url'] : variable_get('update_fetch_url', UPDATE_DEFAULT_URL);
-}
-
-/**
- * Performs any notifications that should be done once cron fetches new data.
- *
- * This method checks the status of the site using the new data and, depending
- * on the configuration of the site, notifies administrators via e-mail if there
- * are new releases or missing security updates.
- *
- * @see update_requirements()
- */
-function _update_cron_notify() {
- module_load_install('update');
- $status = update_requirements('runtime');
- $params = array();
- $notify_all = (variable_get('update_notification_threshold', 'all') == 'all');
- foreach (array('core', 'contrib') as $report_type) {
- $type = 'update_' . $report_type;
- if (isset($status[$type]['severity'])
- && ($status[$type]['severity'] == REQUIREMENT_ERROR || ($notify_all && $status[$type]['reason'] == UPDATE_NOT_CURRENT))) {
- $params[$report_type] = $status[$type]['reason'];
- }
- }
- if (!empty($params)) {
- $notify_list = variable_get('update_notify_emails', '');
- if (!empty($notify_list)) {
- $default_language = language_default();
- foreach ($notify_list as $target) {
- if ($target_user = user_load_by_mail($target)) {
- $target_language = user_preferred_language($target_user);
- }
- else {
- $target_language = $default_language;
- }
- $message = drupal_mail('update', 'status_notify', $target, $target_language, $params);
- // Track when the last mail was successfully sent to avoid sending
- // too many e-mails.
- if ($message['result']) {
- variable_set('update_last_email_notification', REQUEST_TIME);
- }
- }
- }
- }
-}
-
-/**
- * Parses the XML of the Drupal release history info files.
- *
- * @param $raw_xml
- * A raw XML string of available release data for a given project.
- *
- * @return
- * Array of parsed data about releases for a given project, or NULL if there
- * was an error parsing the string.
- */
-function update_parse_xml($raw_xml) {
- try {
- $xml = new SimpleXMLElement($raw_xml);
- }
- catch (Exception $e) {
- // SimpleXMLElement::__construct produces an E_WARNING error message for
- // each error found in the XML data and throws an exception if errors
- // were detected. Catch any exception and return failure (NULL).
- return;
- }
- // If there is no valid project data, the XML is invalid, so return failure.
- if (!isset($xml->short_name)) {
- return;
- }
- $short_name = (string) $xml->short_name;
- $data = array();
- foreach ($xml as $k => $v) {
- $data[$k] = (string) $v;
- }
- $data['releases'] = array();
- if (isset($xml->releases)) {
- foreach ($xml->releases->children() as $release) {
- $version = (string) $release->version;
- $data['releases'][$version] = array();
- foreach ($release->children() as $k => $v) {
- $data['releases'][$version][$k] = (string) $v;
- }
- $data['releases'][$version]['terms'] = array();
- if ($release->terms) {
- foreach ($release->terms->children() as $term) {
- if (!isset($data['releases'][$version]['terms'][(string) $term->name])) {
- $data['releases'][$version]['terms'][(string) $term->name] = array();
- }
- $data['releases'][$version]['terms'][(string) $term->name][] = (string) $term->value;
- }
- }
- }
- }
- return $data;
-}
diff --git a/modules/update/update.info b/modules/update/update.info
deleted file mode 100644
index 250cae1..0000000
--- a/modules/update/update.info
+++ /dev/null
@@ -1,7 +0,0 @@
-name = Update manager
-description = Checks for available updates, and can securely install or update modules and themes via a web interface.
-version = VERSION
-package = Core
-core = 7.x
-files[] = update.test
-configure = admin/reports/updates/settings
diff --git a/modules/update/update.install b/modules/update/update.install
deleted file mode 100644
index baf4953..0000000
--- a/modules/update/update.install
+++ /dev/null
@@ -1,190 +0,0 @@
-createQueue();
-}
-
-/**
- * Implements hook_uninstall().
- */
-function update_uninstall() {
- // Clear any variables that might be in use
- $variables = array(
- 'update_check_frequency',
- 'update_fetch_url',
- 'update_last_check',
- 'update_last_email_notification',
- 'update_notification_threshold',
- 'update_notify_emails',
- 'update_max_fetch_attempts',
- 'update_max_fetch_time',
- );
- foreach ($variables as $variable) {
- variable_del($variable);
- }
- $queue = DrupalQueue::get('update_fetch_tasks');
- $queue->deleteQueue();
-}
-
-/**
- * Fills in the requirements array.
- *
- * This is shared for both core and contrib to generate the right elements in
- * the array for hook_requirements().
- *
- * @param $project
- * Array of information about the project we're testing as returned by
- * update_calculate_project_data().
- * @param $type
- * What kind of project this is ('core' or 'contrib').
- *
- * @return
- * An array to be included in the nested $requirements array.
- *
- * @see hook_requirements()
- * @see update_requirements()
- * @see update_calculate_project_data()
- */
-function _update_requirement_check($project, $type) {
- $requirement = array();
- if ($type == 'core') {
- $requirement['title'] = t('Drupal core update status');
- }
- else {
- $requirement['title'] = t('Module and theme update status');
- }
- $status = $project['status'];
- if ($status != UPDATE_CURRENT) {
- $requirement['reason'] = $status;
- $requirement['description'] = _update_message_text($type, $status, TRUE);
- $requirement['severity'] = REQUIREMENT_ERROR;
- }
- switch ($status) {
- case UPDATE_NOT_SECURE:
- $requirement_label = t('Not secure!');
- break;
- case UPDATE_REVOKED:
- $requirement_label = t('Revoked!');
- break;
- case UPDATE_NOT_SUPPORTED:
- $requirement_label = t('Unsupported release');
- break;
- case UPDATE_NOT_CURRENT:
- $requirement_label = t('Out of date');
- $requirement['severity'] = REQUIREMENT_WARNING;
- break;
- case UPDATE_UNKNOWN:
- case UPDATE_NOT_CHECKED:
- case UPDATE_NOT_FETCHED:
- $requirement_label = isset($project['reason']) ? $project['reason'] : t('Can not determine status');
- $requirement['severity'] = REQUIREMENT_WARNING;
- break;
- default:
- $requirement_label = t('Up to date');
- }
- if ($status != UPDATE_CURRENT && $type == 'core' && isset($project['recommended'])) {
- $requirement_label .= ' ' . t('(version @version available)', array('@version' => $project['recommended']));
- }
- $requirement['value'] = l($requirement_label, update_manager_access() ? 'admin/reports/updates/update' : 'admin/reports/updates');
- return $requirement;
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Create a queue to store tasks for requests to fetch available update data.
- */
-function update_update_7000() {
- module_load_include('inc', 'system', 'system.queue');
- $queue = DrupalQueue::get('update_fetch_tasks');
- $queue->createQueue();
-}
-
-/**
- * Recreates cache_update table.
- *
- * Converts fields that hold serialized variables from text to blob.
- * Removes 'headers' column.
- */
-function update_update_7001() {
- $schema = system_schema_cache_7054();
-
- db_drop_table('cache_update');
- db_create_table('cache_update', $schema);
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
diff --git a/modules/update/update.manager.inc b/modules/update/update.manager.inc
deleted file mode 100644
index 85b587d..0000000
--- a/modules/update/update.manager.inc
+++ /dev/null
@@ -1,943 +0,0 @@
- t('There was a problem getting update information. Try again later.'),
- );
- return $form;
- }
-
- $form['#attached']['css'][] = drupal_get_path('module', 'update') . '/update.css';
-
- // This will be a nested array. The first key is the kind of project, which
- // can be either 'enabled', 'disabled', 'manual' (projects which require
- // manual updates, such as core). Then, each subarray is an array of
- // projects of that type, indexed by project short name, and containing an
- // array of data for cells in that project's row in the appropriate table.
- $projects = array();
-
- // This stores the actual download link we're going to update from for each
- // project in the form, regardless of if it's enabled or disabled.
- $form['project_downloads'] = array('#tree' => TRUE);
-
- module_load_include('inc', 'update', 'update.compare');
- $project_data = update_calculate_project_data($available);
- foreach ($project_data as $name => $project) {
- // Filter out projects which are up to date already.
- if ($project['status'] == UPDATE_CURRENT) {
- continue;
- }
- // The project name to display can vary based on the info we have.
- if (!empty($project['title'])) {
- if (!empty($project['link'])) {
- $project_name = l($project['title'], $project['link']);
- }
- else {
- $project_name = check_plain($project['title']);
- }
- }
- elseif (!empty($project['info']['name'])) {
- $project_name = check_plain($project['info']['name']);
- }
- else {
- $project_name = check_plain($name);
- }
- if ($project['project_type'] == 'theme' || $project['project_type'] == 'theme-disabled') {
- $project_name .= ' ' . t('(Theme)');
- }
-
- if (empty($project['recommended'])) {
- // If we don't know what to recommend they upgrade to, we should skip
- // the project entirely.
- continue;
- }
-
- $recommended_release = $project['releases'][$project['recommended']];
- $recommended_version = $recommended_release['version'] . ' ' . l(t('(Release notes)'), $recommended_release['release_link'], array('attributes' => array('title' => t('Release notes for @project_title', array('@project_title' => $project['title'])))));
- if ($recommended_release['version_major'] != $project['existing_major']) {
- $recommended_version .= '' . t('This update is a major version update which means that it may not be backwards compatible with your currently running version. It is recommended that you read the release notes and proceed at your own risk.') . '
';
- }
-
- // Create an entry for this project.
- $entry = array(
- 'title' => $project_name,
- 'installed_version' => $project['existing_version'],
- 'recommended_version' => $recommended_version,
- );
-
- switch ($project['status']) {
- case UPDATE_NOT_SECURE:
- case UPDATE_REVOKED:
- $entry['title'] .= ' ' . t('(Security update)');
- $entry['#weight'] = -2;
- $type = 'security';
- break;
-
- case UPDATE_NOT_SUPPORTED:
- $type = 'unsupported';
- $entry['title'] .= ' ' . t('(Unsupported)');
- $entry['#weight'] = -1;
- break;
-
- case UPDATE_UNKNOWN:
- case UPDATE_NOT_FETCHED:
- case UPDATE_NOT_CHECKED:
- case UPDATE_NOT_CURRENT:
- $type = 'recommended';
- break;
-
- default:
- // Jump out of the switch and onto the next project in foreach.
- continue 2;
- }
-
- $entry['#attributes'] = array('class' => array('update-' . $type));
-
- // Drupal core needs to be upgraded manually.
- $needs_manual = $project['project_type'] == 'core';
-
- if ($needs_manual) {
- // There are no checkboxes in the 'Manual updates' table so it will be
- // rendered by theme('table'), not theme('tableselect'). Since the data
- // formats are incompatible, we convert now to the format expected by
- // theme('table').
- unset($entry['#weight']);
- $attributes = $entry['#attributes'];
- unset($entry['#attributes']);
- $entry = array(
- 'data' => $entry,
- ) + $attributes;
- }
- else {
- $form['project_downloads'][$name] = array(
- '#type' => 'value',
- '#value' => $recommended_release['download_link'],
- );
- }
-
- // Based on what kind of project this is, save the entry into the
- // appropriate subarray.
- switch ($project['project_type']) {
- case 'core':
- // Core needs manual updates at this time.
- $projects['manual'][$name] = $entry;
- break;
-
- case 'module':
- case 'theme':
- $projects['enabled'][$name] = $entry;
- break;
-
- case 'module-disabled':
- case 'theme-disabled':
- $projects['disabled'][$name] = $entry;
- break;
- }
- }
-
- if (empty($projects)) {
- $form['message'] = array(
- '#markup' => t('All of your projects are up to date.'),
- );
- return $form;
- }
-
- $headers = array(
- 'title' => array(
- 'data' => t('Name'),
- 'class' => array('update-project-name'),
- ),
- 'installed_version' => t('Installed version'),
- 'recommended_version' => t('Recommended version'),
- );
-
- if (!empty($projects['enabled'])) {
- $form['projects'] = array(
- '#type' => 'tableselect',
- '#header' => $headers,
- '#options' => $projects['enabled'],
- );
- if (!empty($projects['disabled'])) {
- $form['projects']['#prefix'] = '' . t('Enabled') . ' ';
- }
- }
-
- if (!empty($projects['disabled'])) {
- $form['disabled_projects'] = array(
- '#type' => 'tableselect',
- '#header' => $headers,
- '#options' => $projects['disabled'],
- '#weight' => 1,
- '#prefix' => '' . t('Disabled') . ' ',
- );
- }
-
- // If either table has been printed yet, we need a submit button and to
- // validate the checkboxes.
- if (!empty($projects['enabled']) || !empty($projects['disabled'])) {
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Download these updates'),
- );
- $form['#validate'][] = 'update_manager_update_form_validate';
- }
-
- if (!empty($projects['manual'])) {
- $prefix = '' . t('Manual updates required') . ' ';
- $prefix .= '' . t('Updates of Drupal core are not supported at this time.') . '
';
- $form['manual_updates'] = array(
- '#type' => 'markup',
- '#markup' => theme('table', array('header' => $headers, 'rows' => $projects['manual'])),
- '#prefix' => $prefix,
- '#weight' => 120,
- );
- }
-
- return $form;
-}
-
-/**
- * Returns HTML for the first page in the process of updating projects.
- *
- * @param $variables
- * An associative array containing:
- * - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_update_manager_update_form($variables) {
- $form = $variables['form'];
- $last = variable_get('update_last_check', 0);
- $output = theme('update_last_check', array('last' => $last));
- $output .= drupal_render_children($form);
- return $output;
-}
-
-/**
- * Form validation handler for update_manager_update_form().
- *
- * Ensures that at least one project is selected.
- *
- * @see update_manager_update_form_submit()
- */
-function update_manager_update_form_validate($form, &$form_state) {
- if (!empty($form_state['values']['projects'])) {
- $enabled = array_filter($form_state['values']['projects']);
- }
- if (!empty($form_state['values']['disabled_projects'])) {
- $disabled = array_filter($form_state['values']['disabled_projects']);
- }
- if (empty($enabled) && empty($disabled)) {
- form_set_error('projects', t('You must select at least one project to update.'));
- }
-}
-
-/**
- * Form submission handler for update_manager_update_form().
- *
- * Sets up a batch that downloads, extracts, and verifies the selected releases.
- *
- * @see update_manager_update_form_validate()
- */
-function update_manager_update_form_submit($form, &$form_state) {
- $projects = array();
- foreach (array('projects', 'disabled_projects') as $type) {
- if (!empty($form_state['values'][$type])) {
- $projects = array_merge($projects, array_keys(array_filter($form_state['values'][$type])));
- }
- }
- $operations = array();
- foreach ($projects as $project) {
- $operations[] = array(
- 'update_manager_batch_project_get',
- array(
- $project,
- $form_state['values']['project_downloads'][$project],
- ),
- );
- }
- $batch = array(
- 'title' => t('Downloading updates'),
- 'init_message' => t('Preparing to download selected updates'),
- 'operations' => $operations,
- 'finished' => 'update_manager_download_batch_finished',
- 'file' => drupal_get_path('module', 'update') . '/update.manager.inc',
- );
- batch_set($batch);
-}
-
-/**
- * Batch callback: Performs actions when the download batch is completed.
- *
- * @param $success
- * TRUE if the batch operation was successful, FALSE if there were errors.
- * @param $results
- * An associative array of results from the batch operation.
- */
-function update_manager_download_batch_finished($success, $results) {
- if (!empty($results['errors'])) {
- $error_list = array(
- 'title' => t('Downloading updates failed:'),
- 'items' => $results['errors'],
- );
- drupal_set_message(theme('item_list', $error_list), 'error');
- }
- elseif ($success) {
- drupal_set_message(t('Updates downloaded successfully.'));
- $_SESSION['update_manager_update_projects'] = $results['projects'];
- drupal_goto('admin/update/ready');
- }
- else {
- // Ideally we're catching all Exceptions, so they should never see this,
- // but just in case, we have to tell them something.
- drupal_set_message(t('Fatal error trying to download.'), 'error');
- }
-}
-
-/**
- * Form constructor for the update ready form.
- *
- * Build the form when the site is ready to update (after downloading).
- *
- * This form is an intermediary step in the automated update workflow. It is
- * presented to the site administrator after all the required updates have been
- * downloaded and verified. The point of this page is to encourage the user to
- * backup their site, give them the opportunity to put the site offline, and
- * then ask them to confirm that the update should continue. After this step,
- * the user is redirected to authorize.php to enter their file transfer
- * credentials and attempt to complete the update.
- *
- * @see update_manager_update_ready_form_submit()
- * @see update_menu()
- * @ingroup forms
- */
-function update_manager_update_ready_form($form, &$form_state) {
- if (!_update_manager_check_backends($form, 'update')) {
- return $form;
- }
-
- $form['backup'] = array(
- '#prefix' => '',
- '#markup' => t('Back up your database and site before you continue. Learn how .', array('@backup_url' => url('http://drupal.org/node/22281'))),
- '#suffix' => ' ',
- );
-
- $form['maintenance_mode'] = array(
- '#title' => t('Perform updates with site in maintenance mode (strongly recommended)'),
- '#type' => 'checkbox',
- '#default_value' => TRUE,
- );
-
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Continue'),
- );
-
- return $form;
-}
-
-/**
- * Form submission handler for update_manager_update_ready_form().
- *
- * If the site administrator requested that the site is put offline during the
- * update, do so now. Otherwise, pull information about all the required updates
- * out of the SESSION, figure out what Drupal\Core\Updater\Updater class is
- * needed for each one, generate an array of update operations to perform, and
- * hand it all off to system_authorized_init(), then redirect to authorize.php.
- *
- * @see update_authorize_run_update()
- * @see system_authorized_init()
- * @see system_authorized_get_url()
- */
-function update_manager_update_ready_form_submit($form, &$form_state) {
- // Store maintenance_mode setting so we can restore it when done.
- $_SESSION['maintenance_mode'] = variable_get('maintenance_mode', FALSE);
- if ($form_state['values']['maintenance_mode'] == TRUE) {
- variable_set('maintenance_mode', TRUE);
- }
-
- if (!empty($_SESSION['update_manager_update_projects'])) {
- // Make sure the Updater registry is loaded.
- drupal_get_updaters();
-
- $updates = array();
- $directory = _update_manager_extract_directory();
-
- $projects = $_SESSION['update_manager_update_projects'];
- unset($_SESSION['update_manager_update_projects']);
-
- foreach ($projects as $project => $url) {
- $project_location = $directory . '/' . $project;
- $updater = Updater::factory($project_location);
- $project_real_location = drupal_realpath($project_location);
- $updates[] = array(
- 'project' => $project,
- 'updater_name' => get_class($updater),
- 'local_url' => $project_real_location,
- );
- }
-
- // If the owner of the last directory we extracted is the same as the
- // owner of our configuration directory (e.g. sites/default) where we're
- // trying to install the code, there's no need to prompt for FTP/SSH
- // credentials. Instead, we instantiate a FileTransferLocal and invoke
- // update_authorize_run_update() directly.
- if (fileowner($project_real_location) == fileowner(conf_path())) {
- module_load_include('inc', 'update', 'update.authorize');
- $filetransfer = new FileTransferLocal(DRUPAL_ROOT);
- update_authorize_run_update($filetransfer, $updates);
- }
- // Otherwise, go through the regular workflow to prompt for FTP/SSH
- // credentials and invoke update_authorize_run_update() indirectly with
- // whatever FileTransfer object authorize.php creates for us.
- else {
- system_authorized_init('update_authorize_run_update', drupal_get_path('module', 'update') . '/update.authorize.inc', array($updates), t('Update manager'));
- $form_state['redirect'] = system_authorized_get_url();
- }
- }
-}
-
-/**
- * @} End of "defgroup update_manager_update".
- */
-
-/**
- * @defgroup update_manager_install Update Manager module: install
- * @{
- * Update Manager module functionality for installing new code.
- *
- * Provides a user interface to install new code.
- */
-
-/**
- * Form constructor for the install form of the Update Manager module.
- *
- * This presents a place to enter a URL or upload an archive file to use to
- * install a new module or theme.
- *
- * @param $context
- * String representing the context from which we're trying to install.
- * Allowed values are 'module', 'theme', and 'report'.
- *
- * @see update_manager_install_form_validate()
- * @see update_manager_install_form_submit()
- * @see update_menu()
- * @ingroup forms
- */
-function update_manager_install_form($form, &$form_state, $context) {
- if (!_update_manager_check_backends($form, 'install')) {
- return $form;
- }
-
- $form['help_text'] = array(
- '#prefix' => '',
- '#markup' => t('You can find modules and themes on drupal.org . The following file extensions are supported: %extensions.', array(
- '@module_url' => 'http://drupal.org/project/modules',
- '@theme_url' => 'http://drupal.org/project/themes',
- '@drupal_org_url' => 'http://drupal.org',
- '%extensions' => archiver_get_extensions(),
- )),
- '#suffix' => '
',
- );
-
- $form['project_url'] = array(
- '#type' => 'textfield',
- '#title' => t('Install from a URL'),
- '#description' => t('For example: %url', array('%url' => 'http://ftp.drupal.org/files/projects/name.tar.gz')),
- );
-
- $form['information'] = array(
- '#prefix' => '',
- '#markup' => t('Or'),
- '#suffix' => ' ',
- );
-
- $form['project_upload'] = array(
- '#type' => 'file',
- '#title' => t('Upload a module or theme archive to install'),
- '#description' => t('For example: %filename from your local computer', array('%filename' => 'name.tar.gz')),
- );
-
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Install'),
- );
-
- return $form;
-}
-
-/**
- * Checks for file transfer backends and prepares a form fragment about them.
- *
- * @param array $form
- * Reference to the form array we're building.
- * @param string $operation
- * The update manager operation we're in the middle of. Can be either 'update'
- * or 'install'. Use to provide operation-specific interface text.
- *
- * @return
- * TRUE if the update manager should continue to the next step in the
- * workflow, or FALSE if we've hit a fatal configuration and must halt the
- * workflow.
- */
-function _update_manager_check_backends(&$form, $operation) {
- // If file transfers will be performed locally, we do not need to display any
- // warnings or notices to the user and should automatically continue the
- // workflow, since we won't be using a FileTransfer backend that requires
- // user input or a specific server configuration.
- if (update_manager_local_transfers_allowed()) {
- return TRUE;
- }
-
- // Otherwise, show the available backends.
- $form['available_backends'] = array(
- '#prefix' => '',
- '#suffix' => '
',
- );
-
- $available_backends = drupal_get_filetransfer_info();
- if (empty($available_backends)) {
- if ($operation == 'update') {
- $form['available_backends']['#markup'] = t('Your server does not support updating modules and themes from this interface. Instead, update modules and themes by uploading the new versions directly to the server, as described in the handbook .', array('@handbook_url' => 'http://drupal.org/getting-started/install-contrib'));
- }
- else {
- $form['available_backends']['#markup'] = t('Your server does not support installing modules and themes from this interface. Instead, install modules and themes by uploading them directly to the server, as described in the handbook .', array('@handbook_url' => 'http://drupal.org/getting-started/install-contrib'));
- }
- return FALSE;
- }
-
- $backend_names = array();
- foreach ($available_backends as $backend) {
- $backend_names[] = $backend['title'];
- }
- if ($operation == 'update') {
- $form['available_backends']['#markup'] = format_plural(
- count($available_backends),
- 'Updating modules and themes requires @backends access to your server. See the handbook for other update methods.',
- 'Updating modules and themes requires access to your server via one of the following methods: @backends . See the handbook for other update methods.',
- array(
- '@backends' => implode(', ', $backend_names),
- '@handbook_url' => 'http://drupal.org/getting-started/install-contrib',
- ));
- }
- else {
- $form['available_backends']['#markup'] = format_plural(
- count($available_backends),
- 'Installing modules and themes requires @backends access to your server. See the handbook for other installation methods.',
- 'Installing modules and themes requires access to your server via one of the following methods: @backends . See the handbook for other installation methods.',
- array(
- '@backends' => implode(', ', $backend_names),
- '@handbook_url' => 'http://drupal.org/getting-started/install-contrib',
- ));
- }
- return TRUE;
-}
-
-/**
- * Form validation handler for update_manager_install_form().
- *
- * @see update_manager_install_form_submit()
- */
-function update_manager_install_form_validate($form, &$form_state) {
- if (!($form_state['values']['project_url'] XOR !empty($_FILES['files']['name']['project_upload']))) {
- form_set_error('project_url', t('You must either provide a URL or upload an archive file to install.'));
- }
-
- if ($form_state['values']['project_url']) {
- if (!valid_url($form_state['values']['project_url'], TRUE)) {
- form_set_error('project_url', t('The provided URL is invalid.'));
- }
- }
-}
-
-/**
- * Form submission handler for update_manager_install_form().
- *
- * Either downloads the file specified in the URL to a temporary cache, or
- * uploads the file attached to the form, then attempts to extract the archive
- * into a temporary location and verify it. Instantiate the appropriate
- * Updater class for this project and make sure it is not already installed in
- * the live webroot. If everything is successful, setup an operation to run
- * via authorize.php which will copy the extracted files from the temporary
- * location into the live site.
- *
- * @see update_manager_install_form_validate()
- * @see update_authorize_run_install()
- * @see system_authorized_init()
- * @see system_authorized_get_url()
- */
-function update_manager_install_form_submit($form, &$form_state) {
- if ($form_state['values']['project_url']) {
- $field = 'project_url';
- $local_cache = update_manager_file_get($form_state['values']['project_url']);
- if (!$local_cache) {
- form_set_error($field, t('Unable to retrieve Drupal project from %url.', array('%url' => $form_state['values']['project_url'])));
- return;
- }
- }
- elseif ($_FILES['files']['name']['project_upload']) {
- $validators = array('file_validate_extensions' => array(archiver_get_extensions()));
- $field = 'project_upload';
- if (!($finfo = file_save_upload($field, $validators, NULL, FILE_EXISTS_REPLACE))) {
- // Failed to upload the file. file_save_upload() calls form_set_error() on
- // failure.
- return;
- }
- $local_cache = $finfo->uri;
- }
-
- $directory = _update_manager_extract_directory();
- try {
- $archive = update_manager_archive_extract($local_cache, $directory);
- }
- catch (Exception $e) {
- form_set_error($field, $e->getMessage());
- return;
- }
-
- $files = $archive->listContents();
- if (!$files) {
- form_set_error($field, t('Provided archive contains no files.'));
- return;
- }
-
- // Unfortunately, we can only use the directory name to determine the project
- // name. Some archivers list the first file as the directory (i.e., MODULE/)
- // and others list an actual file (i.e., MODULE/README.TXT).
- $project = strtok($files[0], '/\\');
-
- $archive_errors = update_manager_archive_verify($project, $local_cache, $directory);
- if (!empty($archive_errors)) {
- form_set_error($field, array_shift($archive_errors));
- // @todo: Fix me in D8: We need a way to set multiple errors on the same
- // form element and have all of them appear!
- if (!empty($archive_errors)) {
- foreach ($archive_errors as $error) {
- drupal_set_message($error, 'error');
- }
- }
- return;
- }
-
- // Make sure the Updater registry is loaded.
- drupal_get_updaters();
-
- $project_location = $directory . '/' . $project;
- try {
- $updater = Updater::factory($project_location);
- }
- catch (Exception $e) {
- form_set_error($field, $e->getMessage());
- return;
- }
-
- try {
- $project_title = Updater::getProjectTitle($project_location);
- }
- catch (Exception $e) {
- form_set_error($field, $e->getMessage());
- return;
- }
-
- if (!$project_title) {
- form_set_error($field, t('Unable to determine %project name.', array('%project' => $project)));
- }
-
- if ($updater->isInstalled()) {
- form_set_error($field, t('%project is already installed.', array('%project' => $project_title)));
- return;
- }
-
- $project_real_location = drupal_realpath($project_location);
- $arguments = array(
- 'project' => $project,
- 'updater_name' => get_class($updater),
- 'local_url' => $project_real_location,
- );
-
- // If the owner of the directory we extracted is the same as the
- // owner of our configuration directory (e.g. sites/default) where we're
- // trying to install the code, there's no need to prompt for FTP/SSH
- // credentials. Instead, we instantiate a FileTransferLocal and invoke
- // update_authorize_run_install() directly.
- if (fileowner($project_real_location) == fileowner(conf_path())) {
- module_load_include('inc', 'update', 'update.authorize');
- $filetransfer = new FileTransferLocal(DRUPAL_ROOT);
- call_user_func_array('update_authorize_run_install', array_merge(array($filetransfer), $arguments));
- }
- // Otherwise, go through the regular workflow to prompt for FTP/SSH
- // credentials and invoke update_authorize_run_install() indirectly with
- // whatever FileTransfer object authorize.php creates for us.
- else {
- system_authorized_init('update_authorize_run_install', drupal_get_path('module', 'update') . '/update.authorize.inc', $arguments, t('Update manager'));
- $form_state['redirect'] = system_authorized_get_url();
- }
-}
-
-/**
- * @} End of "defgroup update_manager_install".
- */
-
-/**
- * @defgroup update_manager_file Update Manager module: file management
- * @{
- * Update Manager module file management functions.
- *
- * These functions are used by the update manager to copy, extract, and verify
- * archive files.
- */
-
-/**
- * Unpacks a downloaded archive file.
- *
- * @param string $file
- * The filename of the archive you wish to extract.
- * @param string $directory
- * The directory you wish to extract the archive into.
- *
- * @return Archiver
- * The Archiver object used to extract the archive.
- *
- * @throws Exception
- */
-function update_manager_archive_extract($file, $directory) {
- $archiver = archiver_get_archiver($file);
- if (!$archiver) {
- throw new Exception(t('Cannot extract %file, not a valid archive.', array ('%file' => $file)));
- }
-
- // Remove the directory if it exists, otherwise it might contain a mixture of
- // old files mixed with the new files (e.g. in cases where files were removed
- // from a later release).
- $files = $archiver->listContents();
-
- // Unfortunately, we can only use the directory name to determine the project
- // name. Some archivers list the first file as the directory (i.e., MODULE/)
- // and others list an actual file (i.e., MODULE/README.TXT).
- $project = strtok($files[0], '/\\');
-
- $extract_location = $directory . '/' . $project;
- if (file_exists($extract_location)) {
- file_unmanaged_delete_recursive($extract_location);
- }
-
- $archiver->extract($directory);
- return $archiver;
-}
-
-/**
- * Verifies an archive after it has been downloaded and extracted.
- *
- * This function is responsible for invoking hook_verify_update_archive().
- *
- * @param string $project
- * The short name of the project to download.
- * @param string $archive_file
- * The filename of the unextracted archive.
- * @param string $directory
- * The directory that the archive was extracted into.
- *
- * @return array
- * An array of error messages to display if the archive was invalid. If there
- * are no errors, it will be an empty array.
- */
-function update_manager_archive_verify($project, $archive_file, $directory) {
- return module_invoke_all('verify_update_archive', $project, $archive_file, $directory);
-}
-
-/**
- * Copies a file from the specified URL to the temporary directory for updates.
- *
- * Returns the local path if the file has already been downloaded.
- *
- * @param $url
- * The URL of the file on the server.
- *
- * @return string
- * Path to local file.
- */
-function update_manager_file_get($url) {
- $parsed_url = parse_url($url);
- $remote_schemes = array('http', 'https', 'ftp', 'ftps', 'smb', 'nfs');
- if (!in_array($parsed_url['scheme'], $remote_schemes)) {
- // This is a local file, just return the path.
- return drupal_realpath($url);
- }
-
- // Check the cache and download the file if needed.
- $cache_directory = _update_manager_cache_directory();
- $local = $cache_directory . '/' . drupal_basename($parsed_url['path']);
-
- if (!file_exists($local) || update_delete_file_if_stale($local)) {
- return system_retrieve_file($url, $local, FALSE, FILE_EXISTS_REPLACE);
- }
- else {
- return $local;
- }
-}
-
-/**
- * Batch callback: Downloads, unpacks, and verifies a project.
- *
- * This function assumes that the provided URL points to a file archive of some
- * sort. The URL can have any scheme that we have a file stream wrapper to
- * support. The file is downloaded to a local cache.
- *
- * @param string $project
- * The short name of the project to download.
- * @param string $url
- * The URL to download a specific project release archive file.
- * @param array $context
- * Reference to an array used for Batch API storage.
- *
- * @see update_manager_download_page()
- */
-function update_manager_batch_project_get($project, $url, &$context) {
- // This is here to show the user that we are in the process of downloading.
- if (!isset($context['sandbox']['started'])) {
- $context['sandbox']['started'] = TRUE;
- $context['message'] = t('Downloading %project', array('%project' => $project));
- $context['finished'] = 0;
- return;
- }
-
- // Actually try to download the file.
- if (!($local_cache = update_manager_file_get($url))) {
- $context['results']['errors'][$project] = t('Failed to download %project from %url', array('%project' => $project, '%url' => $url));
- return;
- }
-
- // Extract it.
- $extract_directory = _update_manager_extract_directory();
- try {
- update_manager_archive_extract($local_cache, $extract_directory);
- }
- catch (Exception $e) {
- $context['results']['errors'][$project] = $e->getMessage();
- return;
- }
-
- // Verify it.
- $archive_errors = update_manager_archive_verify($project, $local_cache, $extract_directory);
- if (!empty($archive_errors)) {
- // We just need to make sure our array keys don't collide, so use the
- // numeric keys from the $archive_errors array.
- foreach ($archive_errors as $key => $error) {
- $context['results']['errors']["$project-$key"] = $error;
- }
- return;
- }
-
- // Yay, success.
- $context['results']['projects'][$project] = $url;
- $context['finished'] = 1;
-}
-
-/**
- * Determines if file transfers will be performed locally.
- *
- * If the server is configured such that webserver-created files have the same
- * owner as the configuration directory (e.g., sites/default) where new code
- * will eventually be installed, the update manager can transfer files entirely
- * locally, without changing their ownership (in other words, without prompting
- * the user for FTP, SSH or other credentials).
- *
- * This server configuration is an inherent security weakness because it allows
- * a malicious webserver process to append arbitrary PHP code and then execute
- * it. However, it is supported here because it is a common configuration on
- * shared hosting, and there is nothing Drupal can do to prevent it.
- *
- * @return
- * TRUE if local file transfers are allowed on this server, or FALSE if not.
- *
- * @see update_manager_update_ready_form_submit()
- * @see update_manager_install_form_submit()
- * @see install_check_requirements()
- */
-function update_manager_local_transfers_allowed() {
- // Compare the owner of a webserver-created temporary file to the owner of
- // the configuration directory to determine if local transfers will be
- // allowed.
- $temporary_file = drupal_tempnam('temporary://', 'update_');
- $local_transfers_allowed = fileowner($temporary_file) === fileowner(conf_path());
-
- // Clean up. If this fails, we can ignore it (since this is just a temporary
- // file anyway).
- @drupal_unlink($temporary_file);
-
- return $local_transfers_allowed;
-}
-
-/**
- * @} End of "defgroup update_manager_file".
- */
diff --git a/modules/update/update.module b/modules/update/update.module
deleted file mode 100644
index d1f0d85..0000000
--- a/modules/update/update.module
+++ /dev/null
@@ -1,993 +0,0 @@
-' . t('Here you can find information about available updates for your installed modules and themes. Note that each module or theme is part of a "project", which may or may not have the same name, and might include multiple modules or themes within it.') . '';
-
- case 'admin/help#update':
- $output = '';
- $output .= '' . t('About') . ' ';
- $output .= '' . t("The Update manager module periodically checks for new versions of your site's software (including contributed modules and themes), and alerts administrators to available updates. In order to provide update information, anonymous usage statistics are sent to Drupal.org. If desired, you may disable the Update manager module from the Module administration page . For more information, see the online handbook entry for Update manager module .", array('@update' => 'http://drupal.org/documentation/modules/update', '@modules' => url('admin/modules'))) . '
';
- // Only explain the Update manager if it has not been disabled.
- if (update_manager_access()) {
- $output .= '' . t('The Update manager also allows administrators to update and install modules and themes through the administration interface.') . '
';
- }
- $output .= '' . t('Uses') . ' ';
- $output .= '';
- $output .= '' . t('Checking for available updates') . ' ';
- $output .= '' . t('A report of available updates will alert you when new releases are available for download. You may configure options for the frequency for checking updates (which are performed during cron runs) and e-mail notifications at the Update manager settings page.', array('@update-report' => url('admin/reports/updates'), '@cron' => 'http://drupal.org/cron', '@update-settings' => url('admin/reports/updates/settings'))) . ' ';
- // Only explain the Update manager if it has not been disabled.
- if (update_manager_access()) {
- $output .= '' . t('Performing updates through the user interface') . ' ';
- $output .= '' . t('The Update manager module allows administrators to perform updates directly through the administration interface. At the top of the modules and themes pages you will see a link to update to new releases. This will direct you to the update page where you see a listing of all the missing updates and confirm which ones you want to upgrade. From there, you are prompted for your FTP/SSH password, which then transfers the files into your Drupal installation, overwriting your old files. More detailed instructions can be found in the online handbook .', array('@modules_page' => url('admin/modules'), '@themes_page' => url('admin/appearance'), '@update-page' => url('admin/reports/updates/update'), '@update' => 'http://drupal.org/documentation/modules/update')) . ' ';
- $output .= '' . t('Installing new modules and themes through the user interface') . ' ';
- $output .= '' . t('You can also install new modules and themes in the same fashion, through the install page , or by clicking the Install new module/theme link at the top of the modules and themes pages. In this case, you are prompted to provide either the URL to the download, or to upload a packaged release file from your local computer.', array('@modules_page' => url('admin/modules'), '@themes_page' => url('admin/appearance'), '@install' => url('admin/reports/updates/install'))) . ' ';
- }
- $output .= ' ';
- return $output;
- }
-}
-
-/**
- * Implements hook_init().
- */
-function update_init() {
- if (arg(0) == 'admin' && user_access('administer site configuration')) {
- switch ($_GET['q']) {
- // These pages don't need additional nagging.
- case 'admin/appearance/update':
- case 'admin/appearance/install':
- case 'admin/modules/update':
- case 'admin/modules/install':
- case 'admin/reports/updates':
- case 'admin/reports/updates/update':
- case 'admin/reports/updates/install':
- case 'admin/reports/updates/settings':
- case 'admin/reports/status':
- case 'admin/update/ready':
- return;
-
- // If we are on the appearance or modules list, display a detailed report
- // of the update status.
- case 'admin/appearance':
- case 'admin/modules':
- $verbose = TRUE;
- break;
-
- }
- module_load_install('update');
- $status = update_requirements('runtime');
- foreach (array('core', 'contrib') as $report_type) {
- $type = 'update_' . $report_type;
- if (!empty($verbose)) {
- if (isset($status[$type]['severity'])) {
- if ($status[$type]['severity'] == REQUIREMENT_ERROR) {
- drupal_set_message($status[$type]['description'], 'error', FALSE);
- }
- elseif ($status[$type]['severity'] == REQUIREMENT_WARNING) {
- drupal_set_message($status[$type]['description'], 'warning', FALSE);
- }
- }
- }
- // Otherwise, if we're on *any* admin page and there's a security
- // update missing, print an error message about it.
- else {
- if (isset($status[$type])
- && isset($status[$type]['reason'])
- && $status[$type]['reason'] === UPDATE_NOT_SECURE) {
- drupal_set_message($status[$type]['description'], 'error', FALSE);
- }
- }
- }
- }
-}
-
-/**
- * Implements hook_menu().
- */
-function update_menu() {
- $items = array();
-
- $items['admin/reports/updates'] = array(
- 'title' => 'Available updates',
- 'description' => 'Get a status report about available updates for your installed modules and themes.',
- 'page callback' => 'update_status',
- 'access arguments' => array('administer site configuration'),
- 'weight' => -50,
- 'file' => 'update.report.inc',
- );
- $items['admin/reports/updates/list'] = array(
- 'title' => 'List',
- 'access arguments' => array('administer site configuration'),
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- );
- $items['admin/reports/updates/settings'] = array(
- 'title' => 'Settings',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('update_settings'),
- 'access arguments' => array('administer site configuration'),
- 'file' => 'update.settings.inc',
- 'type' => MENU_LOCAL_TASK,
- 'weight' => 50,
- );
- $items['admin/reports/updates/check'] = array(
- 'title' => 'Manual update check',
- 'page callback' => 'update_manual_status',
- 'access arguments' => array('administer site configuration'),
- 'type' => MENU_CALLBACK,
- 'file' => 'update.fetch.inc',
- );
-
- // We want action links for updating projects at a few different locations:
- // both the module and theme administration pages, and on the available
- // updates report itself. The menu items will be mostly identical, except the
- // paths and titles, so we just define them in a loop. We pass in a string
- // indicating what context we're entering the action from, so that can
- // customize the appearance as needed.
- $paths = array(
- 'report' => 'admin/reports/updates',
- 'module' => 'admin/modules',
- 'theme' => 'admin/appearance',
- );
- foreach ($paths as $context => $path) {
- $items[$path . '/install'] = array(
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('update_manager_install_form', $context),
- 'access callback' => 'update_manager_access',
- 'access arguments' => array(),
- 'weight' => 25,
- 'type' => MENU_LOCAL_ACTION,
- 'file' => 'update.manager.inc',
- );
- $items[$path . '/update'] = array(
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('update_manager_update_form', $context),
- 'access callback' => 'update_manager_access',
- 'access arguments' => array(),
- 'weight' => 10,
- 'title' => 'Update',
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'update.manager.inc',
- );
- }
- // Customize the titles of the action links depending on where they appear.
- // We use += array() to let the translation extractor find these menu titles.
- $items['admin/reports/updates/install'] += array('title' => 'Install new module or theme');
- $items['admin/modules/install'] += array('title' => 'Install new module');
- $items['admin/appearance/install'] += array('title' => 'Install new theme');
-
- // Menu callback used for the confirmation page after all the releases
- // have been downloaded, asking you to backup before installing updates.
- $items['admin/update/ready'] = array(
- 'title' => 'Ready to update',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('update_manager_update_ready_form'),
- 'access callback' => 'update_manager_access',
- 'access arguments' => array(),
- 'type' => MENU_CALLBACK,
- 'file' => 'update.manager.inc',
- );
-
- return $items;
-}
-
-/**
- * Access callback: Resolves if the current user can access updater menu items.
- *
- * It both enforces the 'administer software updates' permission and the global
- * kill switch for the authorize.php script.
- *
- * @return
- * TRUE if the current user can access the updater menu items; FALSE
- * otherwise.
- *
- * @see update_menu()
- */
-function update_manager_access() {
- return variable_get('allow_authorize_operations', TRUE) && user_access('administer software updates');
-}
-
-/**
- * Implements hook_theme().
- */
-function update_theme() {
- return array(
- 'update_manager_update_form' => array(
- 'render element' => 'form',
- 'file' => 'update.manager.inc',
- ),
- 'update_last_check' => array(
- 'variables' => array('last' => NULL),
- ),
- 'update_report' => array(
- 'variables' => array('data' => NULL),
- ),
- 'update_version' => array(
- 'variables' => array('version' => NULL, 'tag' => NULL, 'class' => array()),
- ),
- 'update_status_label' => array(
- 'variables' => array('status' => NULL),
- ),
- );
-}
-
-/**
- * Implements hook_cron().
- */
-function update_cron() {
- $frequency = variable_get('update_check_frequency', 1);
- $interval = 60 * 60 * 24 * $frequency;
- if ((REQUEST_TIME - variable_get('update_last_check', 0)) > $interval) {
- // If the configured update interval has elapsed, we want to invalidate
- // the cached data for all projects, attempt to re-fetch, and trigger any
- // configured notifications about the new status.
- update_refresh();
- update_fetch_data();
- }
- else {
- // Otherwise, see if any individual projects are now stale or still
- // missing data, and if so, try to fetch the data.
- update_get_available(TRUE);
- }
- if ((REQUEST_TIME - variable_get('update_last_email_notification', 0)) > $interval) {
- // If configured time between notifications elapsed, send email about
- // updates possibly available.
- module_load_include('inc', 'update', 'update.fetch');
- _update_cron_notify();
- }
-
- // Clear garbage from disk.
- update_clear_update_disk_cache();
-}
-
-/**
- * Implements hook_themes_enabled().
- *
- * If themes are enabled, we invalidate the cache of available updates.
- */
-function update_themes_enabled($themes) {
- // Clear all update module caches.
- _update_cache_clear();
-}
-
-/**
- * Implements hook_themes_disabled().
- *
- * If themes are disabled, we invalidate the cache of available updates.
- */
-function update_themes_disabled($themes) {
- // Clear all update module caches.
- _update_cache_clear();
-}
-
-/**
- * Implements hook_form_FORM_ID_alter() for system_modules().
- *
- * Adds a form submission handler to the system modules form, so that if a site
- * admin saves the form, we invalidate the cache of available updates.
- *
- * @see _update_cache_clear()
- */
-function update_form_system_modules_alter(&$form, $form_state) {
- $form['#submit'][] = 'update_cache_clear_submit';
-}
-
-/**
- * Form submission handler for system_modules().
- *
- * @see update_form_system_modules_alter()
- */
-function update_cache_clear_submit($form, &$form_state) {
- // Clear all update module caches.
- _update_cache_clear();
-}
-
-/**
- * Returns a warning message when there is no data about available updates.
- */
-function _update_no_data() {
- $destination = drupal_get_destination();
- return t('No update information available. Run cron or check manually .', array(
- '@run_cron' => url('admin/reports/status/run-cron', array('query' => $destination)),
- '@check_manually' => url('admin/reports/updates/check', array('query' => $destination)),
- ));
-}
-
-/**
- * Tries to get update information from cache and refreshes it when necessary.
- *
- * In addition to checking the cache lifetime, this function also ensures that
- * there are no .info files for enabled modules or themes that have a newer
- * modification timestamp than the last time we checked for available update
- * data. If any .info file was modified, it almost certainly means a new version
- * of something was installed. Without fresh available update data, the logic in
- * update_calculate_project_data() will be wrong and produce confusing, bogus
- * results.
- *
- * @param $refresh
- * (optional) Boolean to indicate if this method should refresh the cache
- * automatically if there's no data. Defaults to FALSE.
- *
- * @return
- * Array of data about available releases, keyed by project shortname.
- *
- * @see update_refresh()
- * @see update_get_projects()
- */
-function update_get_available($refresh = FALSE) {
- module_load_include('inc', 'update', 'update.compare');
- $needs_refresh = FALSE;
-
- // Grab whatever data we currently have cached in the DB.
- $available = _update_get_cached_available_releases();
- $num_avail = count($available);
-
- $projects = update_get_projects();
- foreach ($projects as $key => $project) {
- // If there's no data at all, we clearly need to fetch some.
- if (empty($available[$key])) {
- update_create_fetch_task($project);
- $needs_refresh = TRUE;
- continue;
- }
-
- // See if the .info file is newer than the last time we checked for data,
- // and if so, mark this project's data as needing to be re-fetched. Any
- // time an admin upgrades their local installation, the .info file will
- // be changed, so this is the only way we can be sure we're not showing
- // bogus information right after they upgrade.
- if ($project['info']['_info_file_ctime'] > $available[$key]['last_fetch']) {
- $available[$key]['fetch_status'] = UPDATE_FETCH_PENDING;
- }
-
- // If we have project data but no release data, we need to fetch. This
- // can be triggered when we fail to contact a release history server.
- if (empty($available[$key]['releases'])) {
- $available[$key]['fetch_status'] = UPDATE_FETCH_PENDING;
- }
-
- // If we think this project needs to fetch, actually create the task now
- // and remember that we think we're missing some data.
- if (!empty($available[$key]['fetch_status']) && $available[$key]['fetch_status'] == UPDATE_FETCH_PENDING) {
- update_create_fetch_task($project);
- $needs_refresh = TRUE;
- }
- }
-
- if ($needs_refresh && $refresh) {
- // Attempt to drain the queue of fetch tasks.
- update_fetch_data();
- // After processing the queue, we've (hopefully) got better data, so pull
- // the latest from the cache again and use that directly.
- $available = _update_get_cached_available_releases();
- }
-
- return $available;
-}
-
-/**
- * Creates a new fetch task after loading the necessary include file.
- *
- * @param $project
- * Associative array of information about a project. See update_get_projects()
- * for the keys used.
- *
- * @see _update_create_fetch_task()
- */
-function update_create_fetch_task($project) {
- module_load_include('inc', 'update', 'update.fetch');
- return _update_create_fetch_task($project);
-}
-
-/**
- * Refreshes the release data after loading the necessary include file.
- *
- * @see _update_refresh()
- */
-function update_refresh() {
- module_load_include('inc', 'update', 'update.fetch');
- return _update_refresh();
-}
-
-/**
- * Attempts to fetch update data after loading the necessary include file.
- *
- * @see _update_fetch_data()
- */
-function update_fetch_data() {
- module_load_include('inc', 'update', 'update.fetch');
- return _update_fetch_data();
-}
-
-/**
- * Returns all currently cached data about available releases for all projects.
- *
- * @return
- * Array of data about available releases, keyed by project shortname.
- */
-function _update_get_cached_available_releases() {
- $data = array();
- $cache_items = _update_get_cache_multiple('available_releases');
- foreach ($cache_items as $cid => $cache) {
- $cache->data['last_fetch'] = $cache->created;
- if ($cache->expire < REQUEST_TIME) {
- $cache->data['fetch_status'] = UPDATE_FETCH_PENDING;
- }
- // The project shortname is embedded in the cache ID, even if there's no
- // data for this project in the DB at all, so use that for the indexes in
- // the array.
- $parts = explode('::', $cid, 2);
- $data[$parts[1]] = $cache->data;
- }
- return $data;
-}
-
-/**
- * Implements hook_mail().
- *
- * Constructs the e-mail notification message when the site is out of date.
- *
- * @param $key
- * Unique key to indicate what message to build, always 'status_notify'.
- * @param $message
- * Reference to the message array being built.
- * @param $params
- * Array of parameters to indicate what kind of text to include in the message
- * body. This is a keyed array of message type ('core' or 'contrib') as the
- * keys, and the status reason constant (UPDATE_NOT_SECURE, etc) for the
- * values.
- *
- * @see drupal_mail()
- * @see _update_cron_notify()
- * @see _update_message_text()
- */
-function update_mail($key, &$message, $params) {
- $language = $message['language'];
- $langcode = $language->language;
- $message['subject'] .= t('New release(s) available for !site_name', array('!site_name' => variable_get('site_name', 'Drupal')), array('langcode' => $langcode));
- foreach ($params as $msg_type => $msg_reason) {
- $message['body'][] = _update_message_text($msg_type, $msg_reason, FALSE, $language);
- }
- $message['body'][] = t('See the available updates page for more information:', array(), array('langcode' => $langcode)) . "\n" . url('admin/reports/updates', array('absolute' => TRUE, 'language' => $language));
- if (update_manager_access()) {
- $message['body'][] = t('You can automatically install your missing updates using the Update manager:', array(), array('langcode' => $langcode)) . "\n" . url('admin/reports/updates/update', array('absolute' => TRUE, 'language' => $language));
- }
- $settings_url = url('admin/reports/updates/settings', array('absolute' => TRUE));
- if (variable_get('update_notification_threshold', 'all') == 'all') {
- $message['body'][] = t('Your site is currently configured to send these emails when any updates are available. To get notified only for security updates, !url.', array('!url' => $settings_url));
- }
- else {
- $message['body'][] = t('Your site is currently configured to send these emails only when security updates are available. To get notified for any available updates, !url.', array('!url' => $settings_url));
- }
-}
-
-/**
- * Returns the appropriate message text when site is out of date or not secure.
- *
- * These error messages are shared by both update_requirements() for the
- * site-wide status report at admin/reports/status and in the body of the
- * notification e-mail messages generated by update_cron().
- *
- * @param $msg_type
- * String to indicate what kind of message to generate. Can be either 'core'
- * or 'contrib'.
- * @param $msg_reason
- * Integer constant specifying why message is generated.
- * @param $report_link
- * (optional) Boolean that controls if a link to the updates report should be
- * added. Defaults to FALSE.
- * @param $language
- * (optional) A language object to use. Defaults to NULL.
- *
- * @return
- * The properly translated error message for the given key.
- */
-function _update_message_text($msg_type, $msg_reason, $report_link = FALSE, $language = NULL) {
- $langcode = isset($language) ? $language->language : NULL;
- $text = '';
- switch ($msg_reason) {
- case UPDATE_NOT_SECURE:
- if ($msg_type == 'core') {
- $text = t('There is a security update available for your version of Drupal. To ensure the security of your server, you should update immediately!', array(), array('langcode' => $langcode));
- }
- else {
- $text = t('There are security updates available for one or more of your modules or themes. To ensure the security of your server, you should update immediately!', array(), array('langcode' => $langcode));
- }
- break;
-
- case UPDATE_REVOKED:
- if ($msg_type == 'core') {
- $text = t('Your version of Drupal has been revoked and is no longer available for download. Upgrading is strongly recommended!', array(), array('langcode' => $langcode));
- }
- else {
- $text = t('The installed version of at least one of your modules or themes has been revoked and is no longer available for download. Upgrading or disabling is strongly recommended!', array(), array('langcode' => $langcode));
- }
- break;
-
- case UPDATE_NOT_SUPPORTED:
- if ($msg_type == 'core') {
- $text = t('Your version of Drupal is no longer supported. Upgrading is strongly recommended!', array(), array('langcode' => $langcode));
- }
- else {
- $text = t('The installed version of at least one of your modules or themes is no longer supported. Upgrading or disabling is strongly recommended. See the project homepage for more details.', array(), array('langcode' => $langcode));
- }
- break;
-
- case UPDATE_NOT_CURRENT:
- if ($msg_type == 'core') {
- $text = t('There are updates available for your version of Drupal. To ensure the proper functioning of your site, you should update as soon as possible.', array(), array('langcode' => $langcode));
- }
- else {
- $text = t('There are updates available for one or more of your modules or themes. To ensure the proper functioning of your site, you should update as soon as possible.', array(), array('langcode' => $langcode));
- }
- break;
-
- case UPDATE_UNKNOWN:
- case UPDATE_NOT_CHECKED:
- case UPDATE_NOT_FETCHED:
- case UPDATE_FETCH_PENDING:
- if ($msg_type == 'core') {
- $text = t('There was a problem checking available updates for Drupal.', array('@update-report' => url('admin/reports/updates')), array('langcode' => $langcode));
- }
- else {
- $text = t('There was a problem checking available updates for your modules or themes.', array('@update-report' => url('admin/reports/updates')), array('langcode' => $langcode));
- }
- break;
- }
-
- if ($report_link) {
- if (update_manager_access()) {
- $text .= ' ' . t('See the available updates page for more information and to install your missing updates.', array('@available_updates' => url('admin/reports/updates/update', array('language' => $language))), array('langcode' => $langcode));
- }
- else {
- $text .= ' ' . t('See the available updates page for more information.', array('@available_updates' => url('admin/reports/updates', array('language' => $language))), array('langcode' => $langcode));
- }
- }
-
- return $text;
-}
-
-/**
- * Orders projects based on their status.
- *
- * Callback for uasort() within update_requirements().
- */
-function _update_project_status_sort($a, $b) {
- // The status constants are numerically in the right order, so we can
- // usually subtract the two to compare in the order we want. However,
- // negative status values should be treated as if they are huge, since we
- // always want them at the bottom of the list.
- $a_status = $a['status'] > 0 ? $a['status'] : (-10 * $a['status']);
- $b_status = $b['status'] > 0 ? $b['status'] : (-10 * $b['status']);
- return $a_status - $b_status;
-}
-
-/**
- * Returns HTML for the last time we checked for update data.
- *
- * In addition to properly formatting the given timestamp, this function also
- * provides a "Check manually" link that refreshes the available update and
- * redirects back to the same page.
- *
- * @param $variables
- * An associative array containing:
- * - last: The timestamp when the site last checked for available updates.
- *
- * @see theme_update_report()
- * @see theme_update_available_updates_form()
- * @ingroup themeable
- */
-function theme_update_last_check($variables) {
- $last = $variables['last'];
- $output = '';
- $output .= $last ? t('Last checked: @time ago', array('@time' => format_interval(REQUEST_TIME - $last))) : t('Last checked: never');
- $output .= ' (' . l(t('Check manually'), 'admin/reports/updates/check', array('query' => drupal_get_destination())) . ') ';
- $output .= "
\n";
- return $output;
-}
-
-/**
- * Implements hook_verify_update_archive().
- *
- * First, we ensure that the archive isn't a copy of Drupal core, which the
- * update manager does not yet support. See http://drupal.org/node/606592
- *
- * Then, we make sure that at least one module included in the archive file has
- * an .info file which claims that the code is compatible with the current
- * version of Drupal core.
- *
- * @see drupal_system_listing()
- * @see _system_rebuild_module_data()
- */
-function update_verify_update_archive($project, $archive_file, $directory) {
- $errors = array();
-
- // Make sure this isn't a tarball of Drupal core.
- if (
- file_exists("$directory/$project/index.php")
- && file_exists("$directory/$project/update.php")
- && file_exists("$directory/$project/includes/bootstrap.inc")
- && file_exists("$directory/$project/modules/node/node.module")
- && file_exists("$directory/$project/modules/system/system.module")
- ) {
- return array(
- 'no-core' => t('Automatic updating of Drupal core is not supported. See the upgrade guide for information on how to update Drupal core manually.', array('@upgrade-guide' => 'http://drupal.org/upgrade')),
- );
- }
-
- // Parse all the .info files and make sure at least one is compatible with
- // this version of Drupal core. If one is compatible, then the project as a
- // whole is considered compatible (since, for example, the project may ship
- // with some out-of-date modules that are not necessary for its overall
- // functionality).
- $compatible_project = FALSE;
- $incompatible = array();
- $files = file_scan_directory("$directory/$project", '/^' . DRUPAL_PHP_FUNCTION_PATTERN . '\.info$/', array('key' => 'name', 'min_depth' => 0));
- foreach ($files as $key => $file) {
- // Get the .info file for the module or theme this file belongs to.
- $info = drupal_parse_info_file($file->uri);
-
- // If the module or theme is incompatible with Drupal core, set an error.
- if (empty($info['core']) || $info['core'] != DRUPAL_CORE_COMPATIBILITY) {
- $incompatible[] = !empty($info['name']) ? $info['name'] : t('Unknown');
- }
- else {
- $compatible_project = TRUE;
- break;
- }
- }
-
- if (empty($files)) {
- $errors[] = t('%archive_file does not contain any .info files.', array('%archive_file' => drupal_basename($archive_file)));
- }
- elseif (!$compatible_project) {
- $errors[] = format_plural(
- count($incompatible),
- '%archive_file contains a version of %names that is not compatible with Drupal !version.',
- '%archive_file contains versions of modules or themes that are not compatible with Drupal !version: %names',
- array('!version' => DRUPAL_CORE_COMPATIBILITY, '%archive_file' => drupal_basename($archive_file), '%names' => implode(', ', $incompatible))
- );
- }
-
- return $errors;
-}
-
-/**
- * @defgroup update_status_cache Private update status cache system
- * @{
- * Functions to manage the update status cache.
- *
- * We specifically do NOT use the core cache API for saving the fetched data
- * about available updates. It is vitally important that this cache is only
- * cleared when we're populating it after successfully fetching new available
- * update data. Usage of the core cache API results in all sorts of potential
- * problems that would result in attempting to fetch available update data all
- * the time, including if a site has a "minimum cache lifetime" (which is both a
- * minimum and a maximum) defined, or if a site uses memcache or another
- * pluggable cache system that assumes volatile caches.
- *
- * The Update Manager module still uses the {cache_update} table, but instead of
- * using cache_set(), cache_get(), and cache_clear_all(), there are private
- * helper functions that implement these same basic tasks but ensure that the
- * cache is not prematurely cleared, and that the data is always stored in the
- * database, even if memcache or another cache backend is in use.
- */
-
-/**
- * Stores data in the private update status cache table.
- *
- * @param $cid
- * The cache ID to save the data with.
- * @param $data
- * The data to store.
- * @param $expire
- * One of the following values:
- * - CACHE_PERMANENT: Indicates that the item should never be removed except
- * by explicitly using _update_cache_clear().
- * - A Unix timestamp: Indicates that the item should be kept at least until
- * the given time, after which it will be invalidated.
- *
- * @see _update_cache_get()
- */
-function _update_cache_set($cid, $data, $expire) {
- $fields = array(
- 'created' => REQUEST_TIME,
- 'expire' => $expire,
- );
- if (!is_string($data)) {
- $fields['data'] = serialize($data);
- $fields['serialized'] = 1;
- }
- else {
- $fields['data'] = $data;
- $fields['serialized'] = 0;
- }
- db_merge('cache_update')
- ->key(array('cid' => $cid))
- ->fields($fields)
- ->execute();
-}
-
-/**
- * Retrieves data from the private update status cache table.
- *
- * @param $cid
- * The cache ID to retrieve.
- *
- * @return
- * An array of data for the given cache ID, or NULL if the ID was not found.
- *
- * @see _update_cache_set()
- */
-function _update_cache_get($cid) {
- $cache = db_query("SELECT data, created, expire, serialized FROM {cache_update} WHERE cid = :cid", array(':cid' => $cid))->fetchObject();
- if (isset($cache->data)) {
- if ($cache->serialized) {
- $cache->data = unserialize($cache->data);
- }
- }
- return $cache;
-}
-
-/**
- * Returns an array of cache items with a given cache ID prefix.
- *
- * @param string $cid_prefix
- * The cache ID prefix.
- *
- * @return
- * Associative array of cache items, keyed by cache ID.
- */
-function _update_get_cache_multiple($cid_prefix) {
- $data = array();
- $result = db_select('cache_update')
- ->fields('cache_update', array('cid', 'data', 'created', 'expire', 'serialized'))
- ->condition('cache_update.cid', $cid_prefix . '::%', 'LIKE')
- ->execute();
- foreach ($result as $cache) {
- if ($cache) {
- if ($cache->serialized) {
- $cache->data = unserialize($cache->data);
- }
- $data[$cache->cid] = $cache;
- }
- }
- return $data;
-}
-
-/**
- * Invalidates cached data relating to update status.
- *
- * @param $cid
- * (optional) Cache ID of the record to clear from the private update module
- * cache. If empty, all records will be cleared from the table except fetch
- * tasks. Defaults to NULL.
- * @param $wildcard
- * (optional) If TRUE, cache IDs starting with $cid are deleted in addition to
- * the exact cache ID specified by $cid. Defaults to FALSE.
- */
-function _update_cache_clear($cid = NULL, $wildcard = FALSE) {
- if (empty($cid)) {
- db_delete('cache_update')
- // Clear everything except fetch task information because these are used
- // to ensure that the fetch task queue items are not added multiple times.
- ->condition('cid', 'fetch_task::%', 'NOT LIKE')
- ->execute();
- }
- else {
- $query = db_delete('cache_update');
- if ($wildcard) {
- $query->condition('cid', $cid . '%', 'LIKE');
- }
- else {
- $query->condition('cid', $cid);
- }
- $query->execute();
- }
-}
-
-/**
- * Implements hook_flush_caches().
- *
- * Called from update.php (among others) to flush the caches. Since we're
- * running update.php, we are likely to install a new version of something, in
- * which case, we want to check for available update data again. However,
- * because we have our own caching system, we need to directly clear the
- * database table ourselves at this point and return nothing, for example, on
- * sites that use memcache where cache_clear_all() won't know how to purge this
- * data.
- *
- * However, we only want to do this from update.php, since otherwise, we'd lose
- * all the available update data on every cron run. So, we specifically check if
- * the site is in MAINTENANCE_MODE == 'update' (which indicates update.php is
- * running, not update module... alas for overloaded names).
- */
-function update_flush_caches() {
- if (defined('MAINTENANCE_MODE') && MAINTENANCE_MODE == 'update') {
- _update_cache_clear();
- }
- return array();
-}
-
-/**
- * @} End of "defgroup update_status_cache".
- */
-
-/**
- * Returns a short unique identifier for this Drupal installation.
- *
- * @return
- * An eight character string uniquely identifying this Drupal installation.
- */
-function _update_manager_unique_identifier() {
- $id = &drupal_static(__FUNCTION__, '');
- if (empty($id)) {
- $id = substr(hash('sha256', drupal_get_hash_salt()), 0, 8);
- }
- return $id;
-}
-
-/**
- * Returns the directory where update archive files should be extracted.
- *
- * @param $create
- * (optional) Whether to attempt to create the directory if it does not
- * already exist. Defaults to TRUE.
- *
- * @return
- * The full path to the temporary directory where update file archives should
- * be extracted.
- */
-function _update_manager_extract_directory($create = TRUE) {
- $directory = &drupal_static(__FUNCTION__, '');
- if (empty($directory)) {
- $directory = 'temporary://update-extraction-' . _update_manager_unique_identifier();
- if ($create && !file_exists($directory)) {
- mkdir($directory);
- }
- }
- return $directory;
-}
-
-/**
- * Returns the directory where update archive files should be cached.
- *
- * @param $create
- * (optional) Whether to attempt to create the directory if it does not
- * already exist. Defaults to TRUE.
- *
- * @return
- * The full path to the temporary directory where update file archives should
- * be cached.
- */
-function _update_manager_cache_directory($create = TRUE) {
- $directory = &drupal_static(__FUNCTION__, '');
- if (empty($directory)) {
- $directory = 'temporary://update-cache-' . _update_manager_unique_identifier();
- if ($create && !file_exists($directory)) {
- mkdir($directory);
- }
- }
- return $directory;
-}
-
-/**
- * Clears the temporary files and directories based on file age from disk.
- */
-function update_clear_update_disk_cache() {
- // List of update module cache directories. Do not create the directories if
- // they do not exist.
- $directories = array(
- _update_manager_cache_directory(FALSE),
- _update_manager_extract_directory(FALSE),
- );
-
- // Search for files and directories in base folder only without recursion.
- foreach ($directories as $directory) {
- file_scan_directory($directory, '/.*/', array('callback' => 'update_delete_file_if_stale', 'recurse' => FALSE));
- }
-}
-
-/**
- * Deletes stale files and directories from the update manager disk cache.
- *
- * Files and directories older than 6 hours and development snapshots older than
- * 5 minutes are considered stale. We only cache development snapshots for 5
- * minutes since otherwise updated snapshots might not be downloaded as
- * expected.
- *
- * When checking file ages, we need to use the ctime, not the mtime
- * (modification time) since many (all?) tar implementations go out of their way
- * to set the mtime on the files they create to the timestamps recorded in the
- * tarball. We want to see the last time the file was changed on disk, which is
- * left alone by tar and correctly set to the time the archive file was
- * unpacked.
- *
- * @param $path
- * A string containing a file path or (streamwrapper) URI.
- */
-function update_delete_file_if_stale($path) {
- if (file_exists($path)) {
- $filectime = filectime($path);
- if (REQUEST_TIME - $filectime > DRUPAL_MAXIMUM_TEMP_FILE_AGE || (preg_match('/.*-dev\.(tar\.gz|zip)/i', $path) && REQUEST_TIME - $filectime > 300)) {
- file_unmanaged_delete_recursive($path);
- }
- }
-}
diff --git a/modules/update/update.report.inc b/modules/update/update.report.inc
deleted file mode 100644
index f256575..0000000
--- a/modules/update/update.report.inc
+++ /dev/null
@@ -1,327 +0,0 @@
- $data));
- }
- else {
- return theme('update_report', array('data' => _update_no_data()));
- }
-}
-
-/**
- * Returns HTML for the project status report.
- *
- * @param array $variables
- * An associative array containing:
- * - data: An array of data about each project's status.
- *
- * @ingroup themeable
- */
-function theme_update_report($variables) {
- $data = $variables['data'];
-
- $last = variable_get('update_last_check', 0);
- $output = theme('update_last_check', array('last' => $last));
-
- if (!is_array($data)) {
- $output .= '' . $data . '
';
- return $output;
- }
-
- $header = array();
- $rows = array();
-
- $notification_level = variable_get('update_notification_threshold', 'all');
-
- // Create an array of status values keyed by module or theme name, since
- // we'll need this while generating the report if we have to cross reference
- // anything (e.g. subthemes which have base themes missing an update).
- foreach ($data as $project) {
- foreach ($project['includes'] as $key => $name) {
- $status[$key] = $project['status'];
- }
- }
-
- foreach ($data as $project) {
- switch ($project['status']) {
- case UPDATE_CURRENT:
- $class = 'ok';
- $icon = theme('image', array('path' => 'misc/watchdog-ok.png', 'width' => 18, 'height' => 18, 'alt' => t('ok'), 'title' => t('ok')));
- break;
- case UPDATE_UNKNOWN:
- case UPDATE_FETCH_PENDING:
- case UPDATE_NOT_FETCHED:
- $class = 'unknown';
- $icon = theme('image', array('path' => 'misc/watchdog-warning.png', 'width' => 18, 'height' => 18, 'alt' => t('warning'), 'title' => t('warning')));
- break;
- case UPDATE_NOT_SECURE:
- case UPDATE_REVOKED:
- case UPDATE_NOT_SUPPORTED:
- $class = 'error';
- $icon = theme('image', array('path' => 'misc/watchdog-error.png', 'width' => 18, 'height' => 18, 'alt' => t('error'), 'title' => t('error')));
- break;
- case UPDATE_NOT_CHECKED:
- case UPDATE_NOT_CURRENT:
- default:
- $class = 'warning';
- $icon = theme('image', array('path' => 'misc/watchdog-warning.png', 'width' => 18, 'height' => 18, 'alt' => t('warning'), 'title' => t('warning')));
- break;
- }
-
- $row = '';
- $status_label = theme('update_status_label', array('status' => $project['status']));
- $row .= !empty($status_label) ? $status_label : check_plain($project['reason']);
- $row .= '' . $icon . ' ';
- $row .= "
\n";
-
- $row .= '';
- if (isset($project['title'])) {
- if (isset($project['link'])) {
- $row .= l($project['title'], $project['link']);
- }
- else {
- $row .= check_plain($project['title']);
- }
- }
- else {
- $row .= check_plain($project['name']);
- }
- $row .= ' ' . check_plain($project['existing_version']);
- if ($project['install_type'] == 'dev' && !empty($project['datestamp'])) {
- $row .= ' (' . format_date($project['datestamp'], 'custom', 'Y-M-d') . ') ';
- }
- $row .= "
\n";
-
- $versions_inner = '';
- $security_class = array();
- $version_class = array();
- if (isset($project['recommended'])) {
- if ($project['status'] != UPDATE_CURRENT || $project['existing_version'] !== $project['recommended']) {
-
- // First, figure out what to recommend.
- // If there's only 1 security update and it has the same version we're
- // recommending, give it the same CSS class as if it was recommended,
- // but don't print out a separate "Recommended" line for this project.
- if (!empty($project['security updates']) && count($project['security updates']) == 1 && $project['security updates'][0]['version'] === $project['recommended']) {
- $security_class[] = 'version-recommended';
- $security_class[] = 'version-recommended-strong';
- }
- else {
- $version_class[] = 'version-recommended';
- // Apply an extra class if we're displaying both a recommended
- // version and anything else for an extra visual hint.
- if ($project['recommended'] !== $project['latest_version']
- || !empty($project['also'])
- || ($project['install_type'] == 'dev'
- && isset($project['dev_version'])
- && $project['latest_version'] !== $project['dev_version']
- && $project['recommended'] !== $project['dev_version'])
- || (isset($project['security updates'][0])
- && $project['recommended'] !== $project['security updates'][0])
- ) {
- $version_class[] = 'version-recommended-strong';
- }
- $versions_inner .= theme('update_version', array('version' => $project['releases'][$project['recommended']], 'tag' => t('Recommended version:'), 'class' => $version_class));
- }
-
- // Now, print any security updates.
- if (!empty($project['security updates'])) {
- $security_class[] = 'version-security';
- foreach ($project['security updates'] as $security_update) {
- $versions_inner .= theme('update_version', array('version' => $security_update, 'tag' => t('Security update:'), 'class' => $security_class));
- }
- }
- }
-
- if ($project['recommended'] !== $project['latest_version']) {
- $versions_inner .= theme('update_version', array('version' => $project['releases'][$project['latest_version']], 'tag' => t('Latest version:'), 'class' => array('version-latest')));
- }
- if ($project['install_type'] == 'dev'
- && $project['status'] != UPDATE_CURRENT
- && isset($project['dev_version'])
- && $project['recommended'] !== $project['dev_version']) {
- $versions_inner .= theme('update_version', array('version' => $project['releases'][$project['dev_version']], 'tag' => t('Development version:'), 'class' => array('version-latest')));
- }
- }
-
- if (isset($project['also'])) {
- foreach ($project['also'] as $also) {
- $versions_inner .= theme('update_version', array('version' => $project['releases'][$also], 'tag' => t('Also available:'), 'class' => array('version-also-available')));
- }
- }
-
- if (!empty($versions_inner)) {
- $row .= "\n" . $versions_inner . "
\n";
- }
- $row .= "\n";
- if (!empty($project['extra'])) {
- $row .= '\n"; // extra div.
- }
-
- $row .= '
';
- sort($project['includes']);
- if (!empty($project['disabled'])) {
- sort($project['disabled']);
- // Make sure we start with a clean slate for each project in the report.
- $includes_items = array();
- $row .= t('Includes:');
- $includes_items[] = t('Enabled: %includes', array('%includes' => implode(', ', $project['includes'])));
- $includes_items[] = t('Disabled: %disabled', array('%disabled' => implode(', ', $project['disabled'])));
- $row .= theme('item_list', array('items' => $includes_items));
- }
- else {
- $row .= t('Includes: %includes', array('%includes' => implode(', ', $project['includes'])));
- }
- $row .= "
\n";
-
- if (!empty($project['base_themes'])) {
- $row .= '
';
- asort($project['base_themes']);
- $base_themes = array();
- foreach ($project['base_themes'] as $base_key => $base_theme) {
- switch ($status[$base_key]) {
- case UPDATE_NOT_SECURE:
- case UPDATE_REVOKED:
- case UPDATE_NOT_SUPPORTED:
- $base_themes[] = t('%base_theme (!base_label)', array('%base_theme' => $base_theme, '!base_label' => theme('update_status_label', array('status' => $status[$base_key]))));
- break;
-
- default:
- $base_themes[] = drupal_placeholder($base_theme);
- }
- }
- $row .= t('Depends on: !basethemes', array('!basethemes' => implode(', ', $base_themes)));
- $row .= "
\n";
- }
-
- if (!empty($project['sub_themes'])) {
- $row .= '
';
- sort($project['sub_themes']);
- $row .= t('Required by: %subthemes', array('%subthemes' => implode(', ', $project['sub_themes'])));
- $row .= "
\n";
- }
-
- $row .= "
\n"; // info div.
-
- if (!isset($rows[$project['project_type']])) {
- $rows[$project['project_type']] = array();
- }
- $row_key = isset($project['title']) ? drupal_strtolower($project['title']) : drupal_strtolower($project['name']);
- $rows[$project['project_type']][$row_key] = array(
- 'class' => array($class),
- 'data' => array($row),
- );
- }
-
- $project_types = array(
- 'core' => t('Drupal core'),
- 'module' => t('Modules'),
- 'theme' => t('Themes'),
- 'module-disabled' => t('Disabled modules'),
- 'theme-disabled' => t('Disabled themes'),
- );
- foreach ($project_types as $type_name => $type_label) {
- if (!empty($rows[$type_name])) {
- ksort($rows[$type_name]);
- $output .= "\n" . $type_label . " \n";
- $output .= theme('table', array('header' => $header, 'rows' => $rows[$type_name], 'attributes' => array('class' => array('update'))));
- }
- }
- drupal_add_css(drupal_get_path('module', 'update') . '/update.css');
- return $output;
-}
-
-/**
- * Returns HTML for a label to display for a project's update status.
- *
- * @param array $variables
- * An associative array containing:
- * - status: The integer code for a project's current update status.
- *
- * @see update_calculate_project_data()
- * @ingroup themeable
- */
-function theme_update_status_label($variables) {
- switch ($variables['status']) {
- case UPDATE_NOT_SECURE:
- return '' . t('Security update required!') . ' ';
-
- case UPDATE_REVOKED:
- return '' . t('Revoked!') . ' ';
-
- case UPDATE_NOT_SUPPORTED:
- return '' . t('Not supported!') . ' ';
-
- case UPDATE_NOT_CURRENT:
- return '' . t('Update available') . ' ';
-
- case UPDATE_CURRENT:
- return '' . t('Up to date') . ' ';
-
- }
-}
-
-/**
- * Returns HTML for the version display of a project.
- *
- * @param array $variables
- * An associative array containing:
- * - version: An array of data about the latest released version, containing:
- * - version: The version number.
- * - release_link: The URL for the release notes.
- * - date: The date of the release.
- * - download_link: The URL for the downloadable file.
- * - tag: The title of the project.
- * - class: A string containing extra classes for the wrapping table.
- *
- * @ingroup themeable
- */
-function theme_update_version($variables) {
- $version = $variables['version'];
- $tag = $variables['tag'];
- $class = implode(' ', $variables['class']);
-
- $output = '';
- $output .= '';
- $output .= '';
- $output .= '' . $tag . " \n";
- $output .= '';
- $output .= l($version['version'], $version['release_link']);
- $output .= ' (' . format_date($version['date'], 'custom', 'Y-M-d') . ') ';
- $output .= " \n";
- $output .= '';
- $links = array();
- $links['update-download'] = array(
- 'title' => t('Download'),
- 'href' => $version['download_link'],
- );
- $links['update-release-notes'] = array(
- 'title' => t('Release notes'),
- 'href' => $version['release_link'],
- );
- $output .= theme('links__update_version', array('links' => $links));
- $output .= ' ';
- $output .= ' ';
- $output .= "
\n";
- return $output;
-}
diff --git a/modules/update/update.settings.inc b/modules/update/update.settings.inc
deleted file mode 100644
index 5cd2414..0000000
--- a/modules/update/update.settings.inc
+++ /dev/null
@@ -1,128 +0,0 @@
- 'radios',
- '#title' => t('Check for updates'),
- '#default_value' => variable_get('update_check_frequency', 1),
- '#options' => array(
- '1' => t('Daily'),
- '7' => t('Weekly'),
- ),
- '#description' => t('Select how frequently you want to automatically check for new releases of your currently installed modules and themes.'),
- );
-
- $form['update_check_disabled'] = array(
- '#type' => 'checkbox',
- '#title' => t('Check for updates of disabled modules and themes'),
- '#default_value' => variable_get('update_check_disabled', FALSE),
- );
-
- $notify_emails = variable_get('update_notify_emails', array());
- $form['update_notify_emails'] = array(
- '#type' => 'textarea',
- '#title' => t('E-mail addresses to notify when updates are available'),
- '#rows' => 4,
- '#default_value' => implode("\n", $notify_emails),
- '#description' => t('Whenever your site checks for available updates and finds new releases, it can notify a list of users via e-mail. Put each address on a separate line. If blank, no e-mails will be sent.'),
- );
-
- $form['update_notification_threshold'] = array(
- '#type' => 'radios',
- '#title' => t('E-mail notification threshold'),
- '#default_value' => variable_get('update_notification_threshold', 'all'),
- '#options' => array(
- 'all' => t('All newer versions'),
- 'security' => t('Only security updates'),
- ),
- '#description' => t('You can choose to send e-mail only if a security update is available, or to be notified about all newer versions. If there are updates available of Drupal core or any of your installed modules and themes, your site will always print a message on the status report page, and will also display an error message on administration pages if there is a security update.', array('@status_report' => url('admin/reports/status')))
- );
-
- $form = system_settings_form($form);
- // Custom validation callback for the email notification setting.
- $form['#validate'][] = 'update_settings_validate';
- // We need to call our own submit callback first, not the one from
- // system_settings_form(), so that we can process and save the emails.
- unset($form['#submit']);
-
- return $form;
-}
-
-/**
- * Form validation handler for update_settings().
- *
- * Validates the e-mail addresses and ensures the field is formatted correctly.
- *
- * @see update_settings_submit()
- */
-function update_settings_validate($form, &$form_state) {
- if (!empty($form_state['values']['update_notify_emails'])) {
- $valid = array();
- $invalid = array();
- foreach (explode("\n", trim($form_state['values']['update_notify_emails'])) as $email) {
- $email = trim($email);
- if (!empty($email)) {
- if (valid_email_address($email)) {
- $valid[] = $email;
- }
- else {
- $invalid[] = $email;
- }
- }
- }
- if (empty($invalid)) {
- $form_state['notify_emails'] = $valid;
- }
- elseif (count($invalid) == 1) {
- form_set_error('update_notify_emails', t('%email is not a valid e-mail address.', array('%email' => reset($invalid))));
- }
- else {
- form_set_error('update_notify_emails', t('%emails are not valid e-mail addresses.', array('%emails' => implode(', ', $invalid))));
- }
- }
-}
-
-/**
- * Form submission handler for update_settings().
- *
- * Also invalidates the cache of available updates if the "Check for updates of
- * disabled modules and themes" setting is being changed. The available updates
- * report needs to refetch available update data after this setting changes or
- * it would show misleading things (e.g., listing the disabled projects on the
- * site with the "No available releases found" warning).
- *
- * @see update_settings_validate()
- */
-function update_settings_submit($form, $form_state) {
- $op = $form_state['values']['op'];
-
- if (empty($form_state['notify_emails'])) {
- variable_del('update_notify_emails');
- }
- else {
- variable_set('update_notify_emails', $form_state['notify_emails']);
- }
- unset($form_state['notify_emails']);
- unset($form_state['values']['update_notify_emails']);
-
- // See if the update_check_disabled setting is being changed, and if so,
- // invalidate all cached update status data.
- $check_disabled = variable_get('update_check_disabled', FALSE);
- if ($form_state['values']['update_check_disabled'] != $check_disabled) {
- _update_cache_clear();
- }
-
- system_settings_form_submit($form, $form_state);
-}
diff --git a/modules/update/update.test b/modules/update/update.test
deleted file mode 100644
index 9e04cda..0000000
--- a/modules/update/update.test
+++ /dev/null
@@ -1,803 +0,0 @@
- TRUE)));
- // Save the map for update_test_mock_page() to use.
- variable_set('update_test_xml_map', $xml_map);
- // Manually check the update status.
- $this->drupalGet('admin/reports/updates/check');
- }
-
- /**
- * Runs a series of assertions that are applicable to all update statuses.
- */
- protected function standardTests() {
- $this->assertRaw('' . t('Drupal core') . ' ');
- $this->assertRaw(l(t('Drupal'), 'http://example.com/project/drupal'), 'Link to the Drupal project appears.');
- $this->assertNoText(t('No available releases found'));
- }
-
-}
-
-/**
- * Tests behavior related to discovering and listing updates to Drupal core.
- */
-class UpdateCoreTestCase extends UpdateTestHelper {
-
- public static function getInfo() {
- return array(
- 'name' => 'Update core functionality',
- 'description' => 'Tests the Update Manager module through a series of functional tests using mock XML data.',
- 'group' => 'Update',
- );
- }
-
- function setUp() {
- parent::setUp('update_test', 'update');
- $admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer modules'));
- $this->drupalLogin($admin_user);
- }
-
- /**
- * Tests the Update Manager module when no updates are available.
- */
- function testNoUpdatesAvailable() {
- $this->setSystemInfo7_0();
- $this->refreshUpdateStatus(array('drupal' => '0'));
- $this->standardTests();
- $this->assertText(t('Up to date'));
- $this->assertNoText(t('Update available'));
- $this->assertNoText(t('Security update required!'));
- }
-
- /**
- * Tests the Update Manager module when one normal update is available.
- */
- function testNormalUpdateAvailable() {
- $this->setSystemInfo7_0();
- $this->refreshUpdateStatus(array('drupal' => '1'));
- $this->standardTests();
- $this->assertNoText(t('Up to date'));
- $this->assertText(t('Update available'));
- $this->assertNoText(t('Security update required!'));
- $this->assertRaw(l('7.1', 'http://example.com/drupal-7-1-release'), 'Link to release appears.');
- $this->assertRaw(l(t('Download'), 'http://example.com/drupal-7-1.tar.gz'), 'Link to download appears.');
- $this->assertRaw(l(t('Release notes'), 'http://example.com/drupal-7-1-release'), 'Link to release notes appears.');
- }
-
- /**
- * Tests the Update Manager module when a security update is available.
- */
- function testSecurityUpdateAvailable() {
- $this->setSystemInfo7_0();
- $this->refreshUpdateStatus(array('drupal' => '2-sec'));
- $this->standardTests();
- $this->assertNoText(t('Up to date'));
- $this->assertNoText(t('Update available'));
- $this->assertText(t('Security update required!'));
- $this->assertRaw(l('7.2', 'http://example.com/drupal-7-2-release'), 'Link to release appears.');
- $this->assertRaw(l(t('Download'), 'http://example.com/drupal-7-2.tar.gz'), 'Link to download appears.');
- $this->assertRaw(l(t('Release notes'), 'http://example.com/drupal-7-2-release'), 'Link to release notes appears.');
- }
-
- /**
- * Ensures proper results where there are date mismatches among modules.
- */
- function testDatestampMismatch() {
- $system_info = array(
- '#all' => array(
- // We need to think we're running a -dev snapshot to see dates.
- 'version' => '7.0-dev',
- 'datestamp' => time(),
- ),
- 'block' => array(
- // This is 2001-09-09 01:46:40 GMT, so test for "2001-Sep-".
- 'datestamp' => '1000000000',
- ),
- );
- variable_set('update_test_system_info', $system_info);
- $this->refreshUpdateStatus(array('drupal' => 'dev'));
- $this->assertNoText(t('2001-Sep-'));
- $this->assertText(t('Up to date'));
- $this->assertNoText(t('Update available'));
- $this->assertNoText(t('Security update required!'));
- }
-
- /**
- * Checks that running cron updates the list of available updates.
- */
- function testModulePageRunCron() {
- $this->setSystemInfo7_0();
- variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
- variable_set('update_test_xml_map', array('drupal' => '0'));
-
- $this->cronRun();
- $this->drupalGet('admin/modules');
- $this->assertNoText(t('No update information available.'));
- }
-
- /**
- * Checks the messages at admin/modules when the site is up to date.
- */
- function testModulePageUpToDate() {
- $this->setSystemInfo7_0();
- // Instead of using refreshUpdateStatus(), set these manually.
- variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
- variable_set('update_test_xml_map', array('drupal' => '0'));
-
- $this->drupalGet('admin/reports/updates');
- $this->clickLink(t('Check manually'));
- $this->assertText(t('Checked available update data for one project.'));
- $this->drupalGet('admin/modules');
- $this->assertNoText(t('There are updates available for your version of Drupal.'));
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
- }
-
- /**
- * Checks the messages at admin/modules when an update is missing.
- */
- function testModulePageRegularUpdate() {
- $this->setSystemInfo7_0();
- // Instead of using refreshUpdateStatus(), set these manually.
- variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
- variable_set('update_test_xml_map', array('drupal' => '1'));
-
- $this->drupalGet('admin/reports/updates');
- $this->clickLink(t('Check manually'));
- $this->assertText(t('Checked available update data for one project.'));
- $this->drupalGet('admin/modules');
- $this->assertText(t('There are updates available for your version of Drupal.'));
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
- }
-
- /**
- * Checks the messages at admin/modules when a security update is missing.
- */
- function testModulePageSecurityUpdate() {
- $this->setSystemInfo7_0();
- // Instead of using refreshUpdateStatus(), set these manually.
- variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
- variable_set('update_test_xml_map', array('drupal' => '2-sec'));
-
- $this->drupalGet('admin/reports/updates');
- $this->clickLink(t('Check manually'));
- $this->assertText(t('Checked available update data for one project.'));
- $this->drupalGet('admin/modules');
- $this->assertNoText(t('There are updates available for your version of Drupal.'));
- $this->assertText(t('There is a security update available for your version of Drupal.'));
-
- // Make sure admin/appearance warns you you're missing a security update.
- $this->drupalGet('admin/appearance');
- $this->assertNoText(t('There are updates available for your version of Drupal.'));
- $this->assertText(t('There is a security update available for your version of Drupal.'));
-
- // Make sure duplicate messages don't appear on Update status pages.
- $this->drupalGet('admin/reports/status');
- // We're expecting "There is a security update..." inside the status report
- // itself, but the drupal_set_message() appears as an li so we can prefix
- // with that and search for the raw HTML.
- $this->assertNoRaw('' . t('There is a security update available for your version of Drupal.'));
-
- $this->drupalGet('admin/reports/updates');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
- $this->drupalGet('admin/reports/updates/settings');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
- }
-
- /**
- * Tests the Update Manager module when the update server returns 503 errors.
- */
- function testServiceUnavailable() {
- $this->refreshUpdateStatus(array(), '503-error');
- // Ensure that no "Warning: SimpleXMLElement..." parse errors are found.
- $this->assertNoText('SimpleXMLElement');
- $this->assertUniqueText(t('Failed to get available update data for one project.'));
- }
-
- /**
- * Tests that exactly one fetch task per project is created and not more.
- */
- function testFetchTasks() {
- $projecta = array(
- 'name' => 'aaa_update_test',
- );
- $projectb = array(
- 'name' => 'bbb_update_test',
- );
- $queue = DrupalQueue::get('update_fetch_tasks');
- $this->assertEqual($queue->numberOfItems(), 0, 'Queue is empty');
- update_create_fetch_task($projecta);
- $this->assertEqual($queue->numberOfItems(), 1, 'Queue contains one item');
- update_create_fetch_task($projectb);
- $this->assertEqual($queue->numberOfItems(), 2, 'Queue contains two items');
- // Try to add project a again.
- update_create_fetch_task($projecta);
- $this->assertEqual($queue->numberOfItems(), 2, 'Queue still contains two items');
-
- // Clear cache and try again.
- _update_cache_clear();
- drupal_static_reset('_update_create_fetch_task');
- update_create_fetch_task($projecta);
- $this->assertEqual($queue->numberOfItems(), 2, 'Queue contains two items');
- }
-
- /**
- * Sets the version to 7.0 when no project-specific mapping is defined.
- */
- protected function setSystemInfo7_0() {
- $setting = array(
- '#all' => array(
- 'version' => '7.0',
- ),
- );
- variable_set('update_test_system_info', $setting);
- }
-
-}
-
-/**
- * Tests behavior related to handling updates to contributed modules and themes.
- */
-class UpdateTestContribCase extends UpdateTestHelper {
-
- public static function getInfo() {
- return array(
- 'name' => 'Update contrib functionality',
- 'description' => 'Tests how the Update Manager module handles contributed modules and themes in a series of functional tests using mock XML data.',
- 'group' => 'Update',
- );
- }
-
- function setUp() {
- parent::setUp('update_test', 'update', 'aaa_update_test', 'bbb_update_test', 'ccc_update_test');
- $admin_user = $this->drupalCreateUser(array('administer site configuration'));
- $this->drupalLogin($admin_user);
- }
-
- /**
- * Tests when there is no available release data for a contrib module.
- */
- function testNoReleasesAvailable() {
- $system_info = array(
- '#all' => array(
- 'version' => '7.0',
- ),
- 'aaa_update_test' => array(
- 'project' => 'aaa_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- );
- variable_set('update_test_system_info', $system_info);
- $this->refreshUpdateStatus(array('drupal' => '0', 'aaa_update_test' => 'no-releases'));
- $this->drupalGet('admin/reports/updates');
- // Cannot use $this->standardTests() because we need to check for the
- // 'No available releases found' string.
- $this->assertRaw('' . t('Drupal core') . ' ');
- $this->assertRaw(l(t('Drupal'), 'http://example.com/project/drupal'));
- $this->assertText(t('Up to date'));
- $this->assertRaw('' . t('Modules') . ' ');
- $this->assertNoText(t('Update available'));
- $this->assertText(t('No available releases found'));
- $this->assertNoRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'));
- }
-
- /**
- * Tests the basic functionality of a contrib module on the status report.
- */
- function testUpdateContribBasic() {
- $system_info = array(
- '#all' => array(
- 'version' => '7.0',
- ),
- 'aaa_update_test' => array(
- 'project' => 'aaa_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- );
- variable_set('update_test_system_info', $system_info);
- $this->refreshUpdateStatus(
- array(
- 'drupal' => '0',
- 'aaa_update_test' => '1_0',
- )
- );
- $this->standardTests();
- $this->assertText(t('Up to date'));
- $this->assertRaw('' . t('Modules') . ' ');
- $this->assertNoText(t('Update available'));
- $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project appears.');
- }
-
- /**
- * Tests that contrib projects are ordered by project name.
- *
- * If a project contains multiple modules, we want to make sure that the
- * available updates report is sorted by the parent project names, not by the
- * names of the modules included in each project. In this test case, we have
- * two contrib projects, "BBB Update test" and "CCC Update test". However, we
- * have a module called "aaa_update_test" that's part of the "CCC Update test"
- * project. We need to make sure that we see the "BBB" project before the
- * "CCC" project, even though "CCC" includes a module that's processed first
- * if you sort alphabetically by module name (which is the order we see things
- * inside system_rebuild_module_data() for example).
- */
- function testUpdateContribOrder() {
- // We want core to be version 7.0.
- $system_info = array(
- '#all' => array(
- 'version' => '7.0',
- ),
- // All the rest should be visible as contrib modules at version 7.x-1.0.
-
- // aaa_update_test needs to be part of the "CCC Update test" project,
- // which would throw off the report if we weren't properly sorting by
- // the project names.
- 'aaa_update_test' => array(
- 'project' => 'ccc_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
-
- // This should be its own project, and listed first on the report.
- 'bbb_update_test' => array(
- 'project' => 'bbb_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
-
- // This will contain both aaa_update_test and ccc_update_test, and
- // should come after the bbb_update_test project.
- 'ccc_update_test' => array(
- 'project' => 'ccc_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- );
- variable_set('update_test_system_info', $system_info);
- $this->refreshUpdateStatus(array('drupal' => '0', '#all' => '1_0'));
- $this->standardTests();
- // We're expecting the report to say all projects are up to date.
- $this->assertText(t('Up to date'));
- $this->assertNoText(t('Update available'));
- // We want to see all 3 module names listed, since they'll show up either
- // as project names or as modules under the "Includes" listing.
- $this->assertText(t('AAA Update test'));
- $this->assertText(t('BBB Update test'));
- $this->assertText(t('CCC Update test'));
- // We want aaa_update_test included in the ccc_update_test project, not as
- // its own project on the report.
- $this->assertNoRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project does not appear.');
- // The other two should be listed as projects.
- $this->assertRaw(l(t('BBB Update test'), 'http://example.com/project/bbb_update_test'), 'Link to bbb_update_test project appears.');
- $this->assertRaw(l(t('CCC Update test'), 'http://example.com/project/ccc_update_test'), 'Link to bbb_update_test project appears.');
-
- // We want to make sure we see the BBB project before the CCC project.
- // Instead of just searching for 'BBB Update test' or something, we want
- // to use the full markup that starts the project entry itself, so that
- // we're really testing that the project listings are in the right order.
- $bbb_project_link = 'BBB Update test ';
- $ccc_project_link = '
CCC Update test ';
- $this->assertTrue(strpos($this->drupalGetContent(), $bbb_project_link) < strpos($this->drupalGetContent(), $ccc_project_link), "'BBB Update test' project is listed before the 'CCC Update test' project");
- }
-
- /**
- * Tests that subthemes are notified about security updates for base themes.
- */
- function testUpdateBaseThemeSecurityUpdate() {
- // Only enable the subtheme, not the base theme.
- db_update('system')
- ->fields(array('status' => 1))
- ->condition('type', 'theme')
- ->condition('name', 'update_test_subtheme')
- ->execute();
-
- // Define the initial state for core and the subtheme.
- $system_info = array(
- // We want core to be version 7.0.
- '#all' => array(
- 'version' => '7.0',
- ),
- // Show the update_test_basetheme
- 'update_test_basetheme' => array(
- 'project' => 'update_test_basetheme',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- // Show the update_test_subtheme
- 'update_test_subtheme' => array(
- 'project' => 'update_test_subtheme',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- );
- variable_set('update_test_system_info', $system_info);
- $xml_mapping = array(
- 'drupal' => '0',
- 'update_test_subtheme' => '1_0',
- 'update_test_basetheme' => '1_1-sec',
- );
- $this->refreshUpdateStatus($xml_mapping);
- $this->assertText(t('Security update required!'));
- $this->assertRaw(l(t('Update test base theme'), 'http://example.com/project/update_test_basetheme'), 'Link to the Update test base theme project appears.');
- }
-
- /**
- * Tests that disabled themes are only shown when desired.
- */
- function testUpdateShowDisabledThemes() {
- // Make sure all the update_test_* themes are disabled.
- db_update('system')
- ->fields(array('status' => 0))
- ->condition('type', 'theme')
- ->condition('name', 'update_test_%', 'LIKE')
- ->execute();
-
- // Define the initial state for core and the test contrib themes.
- $system_info = array(
- // We want core to be version 7.0.
- '#all' => array(
- 'version' => '7.0',
- ),
- // The update_test_basetheme should be visible and up to date.
- 'update_test_basetheme' => array(
- 'project' => 'update_test_basetheme',
- 'version' => '7.x-1.1',
- 'hidden' => FALSE,
- ),
- // The update_test_subtheme should be visible and up to date.
- 'update_test_subtheme' => array(
- 'project' => 'update_test_subtheme',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- );
- // When there are contributed modules in the site's file system, the
- // total number of attempts made in the test may exceed the default value
- // of update_max_fetch_attempts. Therefore this variable is set very high
- // to avoid test failures in those cases.
- variable_set('update_max_fetch_attempts', 99999);
- variable_set('update_test_system_info', $system_info);
- $xml_mapping = array(
- 'drupal' => '0',
- 'update_test_subtheme' => '1_0',
- 'update_test_basetheme' => '1_1-sec',
- );
- $base_theme_project_link = l(t('Update test base theme'), 'http://example.com/project/update_test_basetheme');
- $sub_theme_project_link = l(t('Update test subtheme'), 'http://example.com/project/update_test_subtheme');
- foreach (array(TRUE, FALSE) as $check_disabled) {
- variable_set('update_check_disabled', $check_disabled);
- $this->refreshUpdateStatus($xml_mapping);
- // In neither case should we see the "Themes" heading for enabled themes.
- $this->assertNoText(t('Themes'));
- if ($check_disabled) {
- $this->assertText(t('Disabled themes'));
- $this->assertRaw($base_theme_project_link, 'Link to the Update test base theme project appears.');
- $this->assertRaw($sub_theme_project_link, 'Link to the Update test subtheme project appears.');
- }
- else {
- $this->assertNoText(t('Disabled themes'));
- $this->assertNoRaw($base_theme_project_link, 'Link to the Update test base theme project does not appear.');
- $this->assertNoRaw($sub_theme_project_link, 'Link to the Update test subtheme project does not appear.');
- }
- }
- }
-
- /**
- * Makes sure that if we fetch from a broken URL, sane things happen.
- */
- function testUpdateBrokenFetchURL() {
- $system_info = array(
- '#all' => array(
- 'version' => '7.0',
- ),
- 'aaa_update_test' => array(
- 'project' => 'aaa_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- 'bbb_update_test' => array(
- 'project' => 'bbb_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- 'ccc_update_test' => array(
- 'project' => 'ccc_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- );
- variable_set('update_test_system_info', $system_info);
-
- $xml_mapping = array(
- 'drupal' => '0',
- 'aaa_update_test' => '1_0',
- 'bbb_update_test' => 'does-not-exist',
- 'ccc_update_test' => '1_0',
- );
- $this->refreshUpdateStatus($xml_mapping);
-
- $this->assertText(t('Up to date'));
- // We're expecting the report to say most projects are up to date, so we
- // hope that 'Up to date' is not unique.
- $this->assertNoUniqueText(t('Up to date'));
- // It should say we failed to get data, not that we're missing an update.
- $this->assertNoText(t('Update available'));
-
- // We need to check that this string is found as part of a project row,
- // not just in the "Failed to get available update data for ..." message
- // at the top of the page.
- $this->assertRaw('
' . t('Failed to get available update data'));
-
- // We should see the output messages from fetching manually.
- $this->assertUniqueText(t('Checked available update data for 3 projects.'));
- $this->assertUniqueText(t('Failed to get available update data for one project.'));
-
- // The other two should be listed as projects.
- $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project appears.');
- $this->assertNoRaw(l(t('BBB Update test'), 'http://example.com/project/bbb_update_test'), 'Link to bbb_update_test project does not appear.');
- $this->assertRaw(l(t('CCC Update test'), 'http://example.com/project/ccc_update_test'), 'Link to bbb_update_test project appears.');
- }
-
- /**
- * Checks that hook_update_status_alter() works to change a status.
- *
- * We provide the same external data as if aaa_update_test 7.x-1.0 were
- * installed and that was the latest release. Then we use
- * hook_update_status_alter() to try to mark this as missing a security
- * update, then assert if we see the appropriate warnings on the right pages.
- */
- function testHookUpdateStatusAlter() {
- variable_set('allow_authorize_operations', TRUE);
- $update_admin_user = $this->drupalCreateUser(array('administer site configuration', 'administer software updates'));
- $this->drupalLogin($update_admin_user);
-
- $system_info = array(
- '#all' => array(
- 'version' => '7.0',
- ),
- 'aaa_update_test' => array(
- 'project' => 'aaa_update_test',
- 'version' => '7.x-1.0',
- 'hidden' => FALSE,
- ),
- );
- variable_set('update_test_system_info', $system_info);
- $update_status = array(
- 'aaa_update_test' => array(
- 'status' => UPDATE_NOT_SECURE,
- ),
- );
- variable_set('update_test_update_status', $update_status);
- $this->refreshUpdateStatus(
- array(
- 'drupal' => '0',
- 'aaa_update_test' => '1_0',
- )
- );
- $this->drupalGet('admin/reports/updates');
- $this->assertRaw('
' . t('Modules') . ' ');
- $this->assertText(t('Security update required!'));
- $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project appears.');
-
- // Visit the reports page again without the altering and make sure the
- // status is back to normal.
- variable_set('update_test_update_status', array());
- $this->drupalGet('admin/reports/updates');
- $this->assertRaw('
' . t('Modules') . ' ');
- $this->assertNoText(t('Security update required!'));
- $this->assertRaw(l(t('AAA Update test'), 'http://example.com/project/aaa_update_test'), 'Link to aaa_update_test project appears.');
-
- // Turn the altering back on and visit the Update manager UI.
- variable_set('update_test_update_status', $update_status);
- $this->drupalGet('admin/modules/update');
- $this->assertText(t('Security update'));
-
- // Turn the altering back off and visit the Update manager UI.
- variable_set('update_test_update_status', array());
- $this->drupalGet('admin/modules/update');
- $this->assertNoText(t('Security update'));
- }
-
-}
-
-/**
- * Tests project upload and extract functionality.
- */
-class UpdateTestUploadCase extends UpdateTestHelper {
-
- public static function getInfo() {
- return array(
- 'name' => 'Upload and extract module functionality',
- 'description' => 'Tests the Update Manager module\'s upload and extraction functionality.',
- 'group' => 'Update',
- );
- }
-
- public function setUp() {
- parent::setUp('update', 'update_test');
- variable_set('allow_authorize_operations', TRUE);
- $admin_user = $this->drupalCreateUser(array('administer software updates', 'administer site configuration'));
- $this->drupalLogin($admin_user);
- }
-
- /**
- * Tests upload and extraction of a module.
- */
- public function testUploadModule() {
- // Images are not valid archives, so get one and try to install it. We
- // need an extra variable to store the result of drupalGetTestFiles()
- // since reset() takes an argument by reference and passing in a constant
- // emits a notice in strict mode.
- $imageTestFiles = $this->drupalGetTestFiles('image');
- $invalidArchiveFile = reset($imageTestFiles);
- $edit = array(
- 'files[project_upload]' => $invalidArchiveFile->uri,
- );
- // This also checks that the correct archive extensions are allowed.
- $this->drupalPost('admin/modules/install', $edit, t('Install'));
- $this->assertText(t('Only files with the following extensions are allowed: @archive_extensions.', array('@archive_extensions' => archiver_get_extensions())),'Only valid archives can be uploaded.');
-
- // Check to ensure an existing module can't be reinstalled. Also checks that
- // the archive was extracted since we can't know if the module is already
- // installed until after extraction.
- $validArchiveFile = drupal_get_path('module', 'update') . '/tests/aaa_update_test.tar.gz';
- $edit = array(
- 'files[project_upload]' => $validArchiveFile,
- );
- $this->drupalPost('admin/modules/install', $edit, t('Install'));
- $this->assertText(t('@module_name is already installed.', array('@module_name' => 'AAA Update test')), 'Existing module was extracted and not reinstalled.');
- }
-
- /**
- * Ensures that archiver extensions are properly merged in the UI.
- */
- function testFileNameExtensionMerging() {
- $this->drupalGet('admin/modules/install');
- // Make sure the bogus extension supported by update_test.module is there.
- $this->assertPattern('/file extensions are supported:.*update-test-extension/', "Found 'update-test-extension' extension");
- // Make sure it didn't clobber the first option from core.
- $this->assertPattern('/file extensions are supported:.*tar/', "Found 'tar' extension");
- }
-
- /**
- * Checks the messages on update manager pages when missing a security update.
- */
- function testUpdateManagerCoreSecurityUpdateMessages() {
- $setting = array(
- '#all' => array(
- 'version' => '7.0',
- ),
- );
- variable_set('update_test_system_info', $setting);
- variable_set('update_fetch_url', url('update-test', array('absolute' => TRUE)));
- variable_set('update_test_xml_map', array('drupal' => '2-sec'));
- // Initialize the update status.
- $this->drupalGet('admin/reports/updates');
-
- // Now, make sure none of the Update manager pages have duplicate messages
- // about core missing a security update.
-
- $this->drupalGet('admin/modules/install');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
- $this->drupalGet('admin/modules/update');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
- $this->drupalGet('admin/appearance/install');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
- $this->drupalGet('admin/appearance/update');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
- $this->drupalGet('admin/reports/updates/install');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
- $this->drupalGet('admin/reports/updates/update');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
-
- $this->drupalGet('admin/update/ready');
- $this->assertNoText(t('There is a security update available for your version of Drupal.'));
- }
-
-}
-
-/**
- * Tests update functionality unrelated to the database.
- */
-class UpdateCoreUnitTestCase extends DrupalUnitTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => "Unit tests",
- 'description' => 'Test update funcionality unrelated to the database.',
- 'group' => 'Update',
- );
- }
-
- function setUp() {
- parent::setUp('update');
- module_load_include('inc', 'update', 'update.fetch');
- }
-
- /**
- * Tests that _update_build_fetch_url() builds the URL correctly.
- */
- function testUpdateBuildFetchUrl() {
- //first test that we didn't break the trivial case
- $project['name'] = 'update_test';
- $project['project_type'] = '';
- $project['info']['version'] = '';
- $project['info']['project status url'] = 'http://www.example.com';
- $project['includes'] = array('module1' => 'Module 1', 'module2' => 'Module 2');
- $site_key = '';
- $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY;
- $url = _update_build_fetch_url($project, $site_key);
- $this->assertEqual($url, $expected, "'$url' when no site_key provided should be '$expected'.");
-
- //For disabled projects it shouldn't add the site key either.
- $site_key = 'site_key';
- $project['project_type'] = 'disabled';
- $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY;
- $url = _update_build_fetch_url($project, $site_key);
- $this->assertEqual($url, $expected, "'$url' should be '$expected' for disabled projects.");
-
- //for enabled projects, adding the site key
- $project['project_type'] = '';
- $expected = 'http://www.example.com/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY;
- $expected .= '?site_key=site_key';
- $expected .= '&list=' . rawurlencode('module1,module2');
- $url = _update_build_fetch_url($project, $site_key);
- $this->assertEqual($url, $expected, "When site_key provided, '$url' should be '$expected'.");
-
- // http://drupal.org/node/1481156 test incorrect logic when URL contains
- // a question mark.
- $project['info']['project status url'] = 'http://www.example.com/?project=';
- $expected = 'http://www.example.com/?project=/' . $project['name'] . '/' . DRUPAL_CORE_COMPATIBILITY;
- $expected .= '&site_key=site_key';
- $expected .= '&list=' . rawurlencode('module1,module2');
- $url = _update_build_fetch_url($project, $site_key);
- $this->assertEqual($url, $expected, "When ? is present, '$url' should be '$expected'.");
-
- }
-}
\ No newline at end of file
diff --git a/modules/user/tests/user_form_test.info b/modules/user/tests/user_form_test.info
deleted file mode 100644
index 39d6c57..0000000
--- a/modules/user/tests/user_form_test.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = "User module form tests"
-description = "Support module for user form testing."
-package = Testing
-version = VERSION
-core = 7.x
-hidden = TRUE
diff --git a/modules/user/tests/user_form_test.module b/modules/user/tests/user_form_test.module
deleted file mode 100644
index 4e907f3..0000000
--- a/modules/user/tests/user_form_test.module
+++ /dev/null
@@ -1,64 +0,0 @@
- 'User form test for current password validation',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_form_test_current_password',1),
- 'access arguments' => array('administer users'),
- 'type' => MENU_SUGGESTED_ITEM,
- );
- return $items;
-}
-
-/**
- * A test form for user_validate_current_pass().
- */
-function user_form_test_current_password($form, &$form_state, $account) {
- $account->user_form_test_field = '';
- $form['#user'] = $account;
-
- $form['user_form_test_field'] = array(
- '#type' => 'textfield',
- '#title' => t('Test field'),
- '#description' => t('A field that would require a correct password to change.'),
- '#required' => TRUE,
- );
-
- $form['current_pass'] = array(
- '#type' => 'password',
- '#title' => t('Current password'),
- '#size' => 25,
- '#description' => t('Enter your current password'),
- );
-
- $form['current_pass_required_values'] = array(
- '#type' => 'value',
- '#value' => array('user_form_test_field' => t('Test field')),
- );
-
- $form['#validate'][] = 'user_validate_current_pass';
- $form['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Test'),
- );
- return $form;
-}
-
-/**
- * Submit function for the test form for user_validate_current_pass().
- */
-function user_form_test_current_password_submit($form, &$form_state) {
- drupal_set_message(t('The password has been validated and the form submitted successfully.'));
-}
diff --git a/modules/user/user-picture.tpl.php b/modules/user/user-picture.tpl.php
deleted file mode 100644
index ee82187..0000000
--- a/modules/user/user-picture.tpl.php
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
diff --git a/modules/user/user-profile-category.tpl.php b/modules/user/user-profile-category.tpl.php
deleted file mode 100644
index 0a86c76..0000000
--- a/modules/user/user-profile-category.tpl.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
>
-
-
diff --git a/modules/user/user-profile-item.tpl.php b/modules/user/user-profile-item.tpl.php
deleted file mode 100644
index 042d43a..0000000
--- a/modules/user/user-profile-item.tpl.php
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
>
-
>
diff --git a/modules/user/user-profile.tpl.php b/modules/user/user-profile.tpl.php
deleted file mode 100644
index 0a64fed..0000000
--- a/modules/user/user-profile.tpl.php
+++ /dev/null
@@ -1,39 +0,0 @@
-field_example has a
- * variable $field_example defined. When needing to access a field's raw
- * values, developers/themers are strongly encouraged to use these
- * variables. Otherwise they will have to explicitly specify the desired
- * field language, e.g. $account->field_example['en'], thus overriding any
- * language negotiation rule that was previously applied.
- *
- * @see user-profile-category.tpl.php
- * Where the html is handled for the group.
- * @see user-profile-item.tpl.php
- * Where the html is handled for each item in the group.
- * @see template_preprocess_user_profile()
- *
- * @ingroup themeable
- */
-?>
-
>
-
-
diff --git a/modules/user/user-rtl.css b/modules/user/user-rtl.css
deleted file mode 100644
index 642c943..0000000
--- a/modules/user/user-rtl.css
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#permissions td.permission {
- padding-left: 0;
- padding-right: 1.5em;
-}
-
-#user-admin-roles .form-item-name {
- float: right;
- margin-left: 1em;
- margin-right: 0;
-}
-
-/**
- * Password strength indicator.
- */
-.password-strength {
- float: left;
-}
-.password-strength-text {
- float: left;
-}
-div.password-confirm {
- float: left;
-}
-.confirm-parent,
-.password-parent {
- clear: right;
-}
-
-/* Generated by user.module but used by profile.module: */
-.profile .user-picture {
- float: left;
- margin: 0 0 1em 1em;
-}
diff --git a/modules/user/user.admin.inc b/modules/user/user.admin.inc
deleted file mode 100644
index 6ca330b..0000000
--- a/modules/user/user.admin.inc
+++ /dev/null
@@ -1,1053 +0,0 @@
- 'fieldset',
- '#title' => t('Show only users where'),
- '#theme' => 'exposed_filters__user',
- );
- foreach ($session as $filter) {
- list($type, $value) = $filter;
- if ($type == 'permission') {
- // Merge arrays of module permissions into one.
- // Slice past the first element '[any]' whose value is not an array.
- $options = call_user_func_array('array_merge', array_slice($filters[$type]['options'], 1));
- $value = $options[$value];
- }
- else {
- $value = $filters[$type]['options'][$value];
- }
- $t_args = array('%property' => $filters[$type]['title'], '%value' => $value);
- if ($i++) {
- $form['filters']['current'][] = array('#markup' => t('and where %property is %value', $t_args));
- }
- else {
- $form['filters']['current'][] = array('#markup' => t('%property is %value', $t_args));
- }
- }
-
- $form['filters']['status'] = array(
- '#type' => 'container',
- '#attributes' => array('class' => array('clearfix')),
- '#prefix' => ($i ? '
' . t('and where') . '
' : ''),
- );
- $form['filters']['status']['filters'] = array(
- '#type' => 'container',
- '#attributes' => array('class' => array('filters')),
- );
- foreach ($filters as $key => $filter) {
- $form['filters']['status']['filters'][$key] = array(
- '#type' => 'select',
- '#options' => $filter['options'],
- '#title' => $filter['title'],
- '#default_value' => '[any]',
- );
- }
-
- $form['filters']['status']['actions'] = array(
- '#type' => 'actions',
- '#attributes' => array('class' => array('container-inline')),
- );
- $form['filters']['status']['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => (count($session) ? t('Refine') : t('Filter')),
- );
- if (count($session)) {
- $form['filters']['status']['actions']['undo'] = array(
- '#type' => 'submit',
- '#value' => t('Undo'),
- );
- $form['filters']['status']['actions']['reset'] = array(
- '#type' => 'submit',
- '#value' => t('Reset'),
- );
- }
-
- drupal_add_library('system', 'drupal.form');
-
- return $form;
-}
-
-/**
- * Process result from user administration filter form.
- */
-function user_filter_form_submit($form, &$form_state) {
- $op = $form_state['values']['op'];
- $filters = user_filters();
- switch ($op) {
- case t('Filter'):
- case t('Refine'):
- // Apply every filter that has a choice selected other than 'any'.
- foreach ($filters as $filter => $options) {
- if (isset($form_state['values'][$filter]) && $form_state['values'][$filter] != '[any]') {
- // Merge an array of arrays into one if necessary.
- $options = ($filter == 'permission') ? form_options_flatten($filters[$filter]['options']) : $filters[$filter]['options'];
- // Only accept valid selections offered on the dropdown, block bad input.
- if (isset($options[$form_state['values'][$filter]])) {
- $_SESSION['user_overview_filter'][] = array($filter, $form_state['values'][$filter]);
- }
- }
- }
- break;
- case t('Undo'):
- array_pop($_SESSION['user_overview_filter']);
- break;
- case t('Reset'):
- $_SESSION['user_overview_filter'] = array();
- break;
- case t('Update'):
- return;
- }
-
- $form_state['redirect'] = 'admin/people';
- return;
-}
-
-/**
- * Form builder; User administration page.
- *
- * @ingroup forms
- * @see user_admin_account_validate()
- * @see user_admin_account_submit()
- */
-function user_admin_account() {
-
- $header = array(
- 'username' => array('data' => t('Username'), 'field' => 'u.name'),
- 'status' => array('data' => t('Status'), 'field' => 'u.status'),
- 'roles' => array('data' => t('Roles')),
- 'member_for' => array('data' => t('Member for'), 'field' => 'u.created', 'sort' => 'desc'),
- 'access' => array('data' => t('Last access'), 'field' => 'u.access'),
- 'operations' => array('data' => t('Operations')),
- );
-
- $query = db_select('users', 'u');
- $query->condition('u.uid', 0, '<>');
- user_build_filter_query($query);
-
- $count_query = clone $query;
- $count_query->addExpression('COUNT(u.uid)');
-
- $query = $query->extend('PagerDefault')->extend('TableSort');
- $query
- ->fields('u', array('uid', 'name', 'status', 'created', 'access'))
- ->limit(50)
- ->orderByHeader($header)
- ->setCountQuery($count_query);
- $result = $query->execute();
-
- $form['options'] = array(
- '#type' => 'fieldset',
- '#title' => t('Update options'),
- '#attributes' => array('class' => array('container-inline')),
- );
- $options = array();
- foreach (module_invoke_all('user_operations') as $operation => $array) {
- $options[$operation] = $array['label'];
- }
- $form['options']['operation'] = array(
- '#type' => 'select',
- '#title' => t('Operation'),
- '#title_display' => 'invisible',
- '#options' => $options,
- '#default_value' => 'unblock',
- );
- $options = array();
- $form['options']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Update'),
- );
-
- $destination = drupal_get_destination();
-
- $status = array(t('blocked'), t('active'));
- $roles = array_map('check_plain', user_roles(TRUE));
- $accounts = array();
- foreach ($result as $account) {
- $users_roles = array();
- $roles_result = db_query('SELECT rid FROM {users_roles} WHERE uid = :uid', array(':uid' => $account->uid));
- foreach ($roles_result as $user_role) {
- $users_roles[] = $roles[$user_role->rid];
- }
- asort($users_roles);
-
- $options[$account->uid] = array(
- 'username' => theme('username', array('account' => $account)),
- 'status' => $status[$account->status],
- 'roles' => theme('item_list', array('items' => $users_roles)),
- 'member_for' => format_interval(REQUEST_TIME - $account->created),
- 'access' => $account->access ? t('@time ago', array('@time' => format_interval(REQUEST_TIME - $account->access))) : t('never'),
- 'operations' => array('data' => array('#type' => 'link', '#title' => t('edit'), '#href' => "user/$account->uid/edit", '#options' => array('query' => $destination))),
- );
- }
-
- $form['accounts'] = array(
- '#type' => 'tableselect',
- '#header' => $header,
- '#options' => $options,
- '#empty' => t('No people available.'),
- );
- $form['pager'] = array('#markup' => theme('pager'));
-
- return $form;
-}
-
-/**
- * Submit the user administration update form.
- */
-function user_admin_account_submit($form, &$form_state) {
- $operations = module_invoke_all('user_operations', $form, $form_state);
- $operation = $operations[$form_state['values']['operation']];
- // Filter out unchecked accounts.
- $accounts = array_filter($form_state['values']['accounts']);
- if ($function = $operation['callback']) {
- // Add in callback arguments if present.
- if (isset($operation['callback arguments'])) {
- $args = array_merge(array($accounts), $operation['callback arguments']);
- }
- else {
- $args = array($accounts);
- }
- call_user_func_array($function, $args);
-
- drupal_set_message(t('The update has been performed.'));
- }
-}
-
-function user_admin_account_validate($form, &$form_state) {
- $form_state['values']['accounts'] = array_filter($form_state['values']['accounts']);
- if (count($form_state['values']['accounts']) == 0) {
- form_set_error('', t('No users selected.'));
- }
-}
-
-/**
- * Form builder; Configure user settings for this site.
- *
- * @ingroup forms
- * @see system_settings_form()
- */
-function user_admin_settings() {
- // Settings for anonymous users.
- $form['anonymous_settings'] = array(
- '#type' => 'fieldset',
- '#title' => t('Anonymous users'),
- );
- $form['anonymous_settings']['anonymous'] = array(
- '#type' => 'textfield',
- '#title' => t('Name'),
- '#default_value' => variable_get('anonymous', t('Anonymous')),
- '#description' => t('The name used to indicate anonymous users.'),
- '#required' => TRUE,
- );
-
- // Administrative role option.
- $form['admin_role'] = array(
- '#type' => 'fieldset',
- '#title' => t('Administrator role'),
- );
-
- // Do not allow users to set the anonymous or authenticated user roles as the
- // administrator role.
- $roles = user_roles();
- unset($roles[DRUPAL_ANONYMOUS_RID]);
- unset($roles[DRUPAL_AUTHENTICATED_RID]);
- $roles[0] = t('disabled');
-
- $form['admin_role']['user_admin_role'] = array(
- '#type' => 'select',
- '#title' => t('Administrator role'),
- '#default_value' => variable_get('user_admin_role', 0),
- '#options' => $roles,
- '#description' => t('This role will be automatically assigned new permissions whenever a module is enabled. Changing this setting will not affect existing permissions.'),
- );
-
- // User registration settings.
- $form['registration_cancellation'] = array(
- '#type' => 'fieldset',
- '#title' => t('Registration and cancellation'),
- );
- $form['registration_cancellation']['user_register'] = array(
- '#type' => 'radios',
- '#title' => t('Who can register accounts?'),
- '#default_value' => variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL),
- '#options' => array(
- USER_REGISTER_ADMINISTRATORS_ONLY => t('Administrators only'),
- USER_REGISTER_VISITORS => t('Visitors'),
- USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL => t('Visitors, but administrator approval is required'),
- )
- );
- $form['registration_cancellation']['user_email_verification'] = array(
- '#type' => 'checkbox',
- '#title' => t('Require e-mail verification when a visitor creates an account.'),
- '#default_value' => variable_get('user_email_verification', TRUE),
- '#description' => t('New users will be required to validate their e-mail address prior to logging into the site, and will be assigned a system-generated password. With this setting disabled, users will be logged in immediately upon registering, and may select their own passwords during registration.')
- );
- module_load_include('inc', 'user', 'user.pages');
- $form['registration_cancellation']['user_cancel_method'] = array(
- '#type' => 'item',
- '#title' => t('When cancelling a user account'),
- '#description' => t('Users with the %select-cancel-method or %administer-users
permissions can override this default method.', array('%select-cancel-method' => t('Select method for cancelling account'), '%administer-users' => t('Administer users'), '@permissions-url' => url('admin/people/permissions'))),
- );
- $form['registration_cancellation']['user_cancel_method'] += user_cancel_methods();
- foreach (element_children($form['registration_cancellation']['user_cancel_method']) as $element) {
- // Remove all account cancellation methods that have #access defined, as
- // those cannot be configured as default method.
- if (isset($form['registration_cancellation']['user_cancel_method'][$element]['#access'])) {
- $form['registration_cancellation']['user_cancel_method'][$element]['#access'] = FALSE;
- }
- // Remove the description (only displayed on the confirmation form).
- else {
- unset($form['registration_cancellation']['user_cancel_method'][$element]['#description']);
- }
- }
-
- // Account settings.
- $form['personalization'] = array(
- '#type' => 'fieldset',
- '#title' => t('Personalization'),
- );
- $form['personalization']['user_signatures'] = array(
- '#type' => 'checkbox',
- '#title' => t('Enable signatures.'),
- '#default_value' => variable_get('user_signatures', 0),
- );
- // If picture support is enabled, check whether the picture directory exists.
- if (variable_get('user_pictures', 0)) {
- $picture_path = file_default_scheme() . '://' . variable_get('user_picture_path', 'pictures');
- if (!file_prepare_directory($picture_path, FILE_CREATE_DIRECTORY)) {
- form_set_error('user_picture_path', t('The directory %directory does not exist or is not writable.', array('%directory' => $picture_path)));
- watchdog('file system', 'The directory %directory does not exist or is not writable.', array('%directory' => $picture_path), WATCHDOG_ERROR);
- }
- }
- $picture_support = variable_get('user_pictures', 0);
- $form['personalization']['user_pictures'] = array(
- '#type' => 'checkbox',
- '#title' => t('Enable user pictures.'),
- '#default_value' => $picture_support,
- );
- drupal_add_js(drupal_get_path('module', 'user') . '/user.js');
- $form['personalization']['pictures'] = array(
- '#type' => 'container',
- '#states' => array(
- // Hide the additional picture settings when user pictures are disabled.
- 'invisible' => array(
- 'input[name="user_pictures"]' => array('checked' => FALSE),
- ),
- ),
- );
- $form['personalization']['pictures']['user_picture_path'] = array(
- '#type' => 'textfield',
- '#title' => t('Picture directory'),
- '#default_value' => variable_get('user_picture_path', 'pictures'),
- '#size' => 30,
- '#maxlength' => 255,
- '#description' => t('Subdirectory in the file upload directory where pictures will be stored.'),
- );
- $form['personalization']['pictures']['user_picture_default'] = array(
- '#type' => 'textfield',
- '#title' => t('Default picture'),
- '#default_value' => variable_get('user_picture_default', ''),
- '#size' => 30,
- '#maxlength' => 255,
- '#description' => t('URL of picture to display for users with no custom picture selected. Leave blank for none.'),
- );
- if (module_exists('image')) {
- $form['personalization']['pictures']['settings']['user_picture_style'] = array(
- '#type' => 'select',
- '#title' => t('Picture display style'),
- '#options' => image_style_options(TRUE, PASS_THROUGH),
- '#default_value' => variable_get('user_picture_style', ''),
- '#description' => t('The style selected will be used on display, while the original image is retained. Styles may be configured in the
Image styles administration area.', array('!url' => url('admin/config/media/image-styles'))),
- );
- }
- $form['personalization']['pictures']['user_picture_dimensions'] = array(
- '#type' => 'textfield',
- '#title' => t('Picture upload dimensions'),
- '#default_value' => variable_get('user_picture_dimensions', '85x85'),
- '#size' => 10,
- '#maxlength' => 10,
- '#field_suffix' => ' ' . t('pixels'),
- '#description' => t('Pictures larger than this will be scaled down to this size.'),
- );
- $form['personalization']['pictures']['user_picture_file_size'] = array(
- '#type' => 'textfield',
- '#title' => t('Picture upload file size'),
- '#default_value' => variable_get('user_picture_file_size', '30'),
- '#size' => 10,
- '#maxlength' => 10,
- '#field_suffix' => ' ' . t('KB'),
- '#description' => t('Maximum allowed file size for uploaded pictures. Upload size is normally limited only by the PHP maximum post and file upload settings, and images are automatically scaled down to the dimensions specified above.'),
- '#element_validate' => array('element_validate_integer_positive'),
- );
- $form['personalization']['pictures']['user_picture_guidelines'] = array(
- '#type' => 'textarea',
- '#title' => t('Picture guidelines'),
- '#default_value' => variable_get('user_picture_guidelines', ''),
- '#description' => t("This text is displayed at the picture upload form in addition to the default guidelines. It's useful for helping or instructing your users."),
- );
-
- $form['email_title'] = array(
- '#type' => 'item',
- '#title' => t('E-mails'),
- );
- $form['email'] = array(
- '#type' => 'vertical_tabs',
- );
- // These email tokens are shared for all settings, so just define
- // the list once to help ensure they stay in sync.
- $email_token_help = t('Available variables are: [site:name], [site:url], [user:name], [user:mail], [site:login-url], [site:url-brief], [user:edit-url], [user:one-time-login-url], [user:cancel-url].');
-
- $form['email_admin_created'] = array(
- '#type' => 'fieldset',
- '#title' => t('Welcome (new user created by administrator)'),
- '#collapsible' => TRUE,
- '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_ADMINISTRATORS_ONLY),
- '#description' => t('Edit the welcome e-mail messages sent to new member accounts created by an administrator.') . ' ' . $email_token_help,
- '#group' => 'email',
- );
- $form['email_admin_created']['user_mail_register_admin_created_subject'] = array(
- '#type' => 'textfield',
- '#title' => t('Subject'),
- '#default_value' => _user_mail_text('register_admin_created_subject', NULL, array(), FALSE),
- '#maxlength' => 180,
- );
- $form['email_admin_created']['user_mail_register_admin_created_body'] = array(
- '#type' => 'textarea',
- '#title' => t('Body'),
- '#default_value' => _user_mail_text('register_admin_created_body', NULL, array(), FALSE),
- '#rows' => 15,
- );
-
- $form['email_pending_approval'] = array(
- '#type' => 'fieldset',
- '#title' => t('Welcome (awaiting approval)'),
- '#collapsible' => TRUE,
- '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL),
- '#description' => t('Edit the welcome e-mail messages sent to new members upon registering, when administrative approval is required.') . ' ' . $email_token_help,
- '#group' => 'email',
- );
- $form['email_pending_approval']['user_mail_register_pending_approval_subject'] = array(
- '#type' => 'textfield',
- '#title' => t('Subject'),
- '#default_value' => _user_mail_text('register_pending_approval_subject', NULL, array(), FALSE),
- '#maxlength' => 180,
- );
- $form['email_pending_approval']['user_mail_register_pending_approval_body'] = array(
- '#type' => 'textarea',
- '#title' => t('Body'),
- '#default_value' => _user_mail_text('register_pending_approval_body', NULL, array(), FALSE),
- '#rows' => 8,
- );
-
- $form['email_no_approval_required'] = array(
- '#type' => 'fieldset',
- '#title' => t('Welcome (no approval required)'),
- '#collapsible' => TRUE,
- '#collapsed' => (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) != USER_REGISTER_VISITORS),
- '#description' => t('Edit the welcome e-mail messages sent to new members upon registering, when no administrator approval is required.') . ' ' . $email_token_help,
- '#group' => 'email',
- );
- $form['email_no_approval_required']['user_mail_register_no_approval_required_subject'] = array(
- '#type' => 'textfield',
- '#title' => t('Subject'),
- '#default_value' => _user_mail_text('register_no_approval_required_subject', NULL, array(), FALSE),
- '#maxlength' => 180,
- );
- $form['email_no_approval_required']['user_mail_register_no_approval_required_body'] = array(
- '#type' => 'textarea',
- '#title' => t('Body'),
- '#default_value' => _user_mail_text('register_no_approval_required_body', NULL, array(), FALSE),
- '#rows' => 15,
- );
-
- $form['email_password_reset'] = array(
- '#type' => 'fieldset',
- '#title' => t('Password recovery'),
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- '#description' => t('Edit the e-mail messages sent to users who request a new password.') . ' ' . $email_token_help,
- '#group' => 'email',
- '#weight' => 10,
- );
- $form['email_password_reset']['user_mail_password_reset_subject'] = array(
- '#type' => 'textfield',
- '#title' => t('Subject'),
- '#default_value' => _user_mail_text('password_reset_subject', NULL, array(), FALSE),
- '#maxlength' => 180,
- );
- $form['email_password_reset']['user_mail_password_reset_body'] = array(
- '#type' => 'textarea',
- '#title' => t('Body'),
- '#default_value' => _user_mail_text('password_reset_body', NULL, array(), FALSE),
- '#rows' => 12,
- );
-
- $form['email_activated'] = array(
- '#type' => 'fieldset',
- '#title' => t('Account activation'),
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- '#description' => t('Enable and edit e-mail messages sent to users upon account activation (when an administrator activates an account of a user who has already registered, on a site where administrative approval is required).') . ' ' . $email_token_help,
- '#group' => 'email',
- );
- $form['email_activated']['user_mail_status_activated_notify'] = array(
- '#type' => 'checkbox',
- '#title' => t('Notify user when account is activated.'),
- '#default_value' => variable_get('user_mail_status_activated_notify', TRUE),
- );
- $form['email_activated']['settings'] = array(
- '#type' => 'container',
- '#states' => array(
- // Hide the additional settings when this email is disabled.
- 'invisible' => array(
- 'input[name="user_mail_status_activated_notify"]' => array('checked' => FALSE),
- ),
- ),
- );
- $form['email_activated']['settings']['user_mail_status_activated_subject'] = array(
- '#type' => 'textfield',
- '#title' => t('Subject'),
- '#default_value' => _user_mail_text('status_activated_subject', NULL, array(), FALSE),
- '#maxlength' => 180,
- );
- $form['email_activated']['settings']['user_mail_status_activated_body'] = array(
- '#type' => 'textarea',
- '#title' => t('Body'),
- '#default_value' => _user_mail_text('status_activated_body', NULL, array(), FALSE),
- '#rows' => 15,
- );
-
- $form['email_blocked'] = array(
- '#type' => 'fieldset',
- '#title' => t('Account blocked'),
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- '#description' => t('Enable and edit e-mail messages sent to users when their accounts are blocked.') . ' ' . $email_token_help,
- '#group' => 'email',
- );
- $form['email_blocked']['user_mail_status_blocked_notify'] = array(
- '#type' => 'checkbox',
- '#title' => t('Notify user when account is blocked.'),
- '#default_value' => variable_get('user_mail_status_blocked_notify', FALSE),
- );
- $form['email_blocked']['settings'] = array(
- '#type' => 'container',
- '#states' => array(
- // Hide the additional settings when the blocked email is disabled.
- 'invisible' => array(
- 'input[name="user_mail_status_blocked_notify"]' => array('checked' => FALSE),
- ),
- ),
- );
- $form['email_blocked']['settings']['user_mail_status_blocked_subject'] = array(
- '#type' => 'textfield',
- '#title' => t('Subject'),
- '#default_value' => _user_mail_text('status_blocked_subject', NULL, array(), FALSE),
- '#maxlength' => 180,
- );
- $form['email_blocked']['settings']['user_mail_status_blocked_body'] = array(
- '#type' => 'textarea',
- '#title' => t('Body'),
- '#default_value' => _user_mail_text('status_blocked_body', NULL, array(), FALSE),
- '#rows' => 3,
- );
-
- $form['email_cancel_confirm'] = array(
- '#type' => 'fieldset',
- '#title' => t('Account cancellation confirmation'),
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- '#description' => t('Edit the e-mail messages sent to users when they attempt to cancel their accounts.') . ' ' . $email_token_help,
- '#group' => 'email',
- );
- $form['email_cancel_confirm']['user_mail_cancel_confirm_subject'] = array(
- '#type' => 'textfield',
- '#title' => t('Subject'),
- '#default_value' => _user_mail_text('cancel_confirm_subject', NULL, array(), FALSE),
- '#maxlength' => 180,
- );
- $form['email_cancel_confirm']['user_mail_cancel_confirm_body'] = array(
- '#type' => 'textarea',
- '#title' => t('Body'),
- '#default_value' => _user_mail_text('cancel_confirm_body', NULL, array(), FALSE),
- '#rows' => 3,
- );
-
- $form['email_canceled'] = array(
- '#type' => 'fieldset',
- '#title' => t('Account canceled'),
- '#collapsible' => TRUE,
- '#collapsed' => TRUE,
- '#description' => t('Enable and edit e-mail messages sent to users when their accounts are canceled.') . ' ' . $email_token_help,
- '#group' => 'email',
- );
- $form['email_canceled']['user_mail_status_canceled_notify'] = array(
- '#type' => 'checkbox',
- '#title' => t('Notify user when account is canceled.'),
- '#default_value' => variable_get('user_mail_status_canceled_notify', FALSE),
- );
- $form['email_canceled']['settings'] = array(
- '#type' => 'container',
- '#states' => array(
- // Hide the settings when the cancel notify checkbox is disabled.
- 'invisible' => array(
- 'input[name="user_mail_status_canceled_notify"]' => array('checked' => FALSE),
- ),
- ),
- );
- $form['email_canceled']['settings']['user_mail_status_canceled_subject'] = array(
- '#type' => 'textfield',
- '#title' => t('Subject'),
- '#default_value' => _user_mail_text('status_canceled_subject', NULL, array(), FALSE),
- '#maxlength' => 180,
- );
- $form['email_canceled']['settings']['user_mail_status_canceled_body'] = array(
- '#type' => 'textarea',
- '#title' => t('Body'),
- '#default_value' => _user_mail_text('status_canceled_body', NULL, array(), FALSE),
- '#rows' => 3,
- );
-
- return system_settings_form($form);
-}
-
-/**
- * Menu callback: administer permissions.
- *
- * @ingroup forms
- * @see user_admin_permissions_submit()
- * @see theme_user_admin_permissions()
- */
-function user_admin_permissions($form, $form_state, $rid = NULL) {
-
- // Retrieve role names for columns.
- $role_names = user_roles();
- if (is_numeric($rid)) {
- $role_names = array($rid => $role_names[$rid]);
- }
- // Fetch permissions for all roles or the one selected role.
- $role_permissions = user_role_permissions($role_names);
-
- // Store $role_names for use when saving the data.
- $form['role_names'] = array(
- '#type' => 'value',
- '#value' => $role_names,
- );
- // Render role/permission overview:
- $options = array();
- $module_info = system_get_info('module');
- $hide_descriptions = system_admin_compact_mode();
-
- // Get a list of all the modules implementing a hook_permission() and sort by
- // display name.
- $modules = array();
- foreach (module_implements('permission') as $module) {
- $modules[$module] = $module_info[$module]['name'];
- }
- asort($modules);
-
- foreach ($modules as $module => $display_name) {
- if ($permissions = module_invoke($module, 'permission')) {
- $form['permission'][] = array(
- '#markup' => $module_info[$module]['name'],
- '#id' => $module,
- );
- foreach ($permissions as $perm => $perm_item) {
- // Fill in default values for the permission.
- $perm_item += array(
- 'description' => '',
- 'restrict access' => FALSE,
- 'warning' => !empty($perm_item['restrict access']) ? t('Warning: Give to trusted roles only; this permission has security implications.') : '',
- );
- $options[$perm] = '';
- $form['permission'][$perm] = array(
- '#type' => 'item',
- '#markup' => $perm_item['title'],
- '#description' => theme('user_permission_description', array('permission_item' => $perm_item, 'hide' => $hide_descriptions)),
- );
- foreach ($role_names as $rid => $name) {
- // Builds arrays for checked boxes for each role
- if (isset($role_permissions[$rid][$perm])) {
- $status[$rid][] = $perm;
- }
- }
- }
- }
- }
-
- // Have to build checkboxes here after checkbox arrays are built
- foreach ($role_names as $rid => $name) {
- $form['checkboxes'][$rid] = array(
- '#type' => 'checkboxes',
- '#options' => $options,
- '#default_value' => isset($status[$rid]) ? $status[$rid] : array(),
- '#attributes' => array('class' => array('rid-' . $rid)),
- );
- $form['role_names'][$rid] = array('#markup' => check_plain($name), '#tree' => TRUE);
- }
-
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save permissions'));
-
- $form['#attached']['js'][] = drupal_get_path('module', 'user') . '/user.permissions.js';
-
- return $form;
-}
-
-/**
- * Save permissions selected on the administer permissions page.
- *
- * @see user_admin_permissions()
- */
-function user_admin_permissions_submit($form, &$form_state) {
- foreach ($form_state['values']['role_names'] as $rid => $name) {
- user_role_change_permissions($rid, $form_state['values'][$rid]);
- }
-
- drupal_set_message(t('The changes have been saved.'));
-
- // Clear the cached pages and blocks.
- cache_clear_all();
-}
-
-/**
- * Returns HTML for the administer permissions page.
- *
- * @param $variables
- * An associative array containing:
- * - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_user_admin_permissions($variables) {
- $form = $variables['form'];
-
- $roles = user_roles();
- foreach (element_children($form['permission']) as $key) {
- $row = array();
- // Module name
- if (is_numeric($key)) {
- $row[] = array('data' => drupal_render($form['permission'][$key]), 'class' => array('module'), 'id' => 'module-' . $form['permission'][$key]['#id'], 'colspan' => count($form['role_names']['#value']) + 1);
- }
- else {
- // Permission row.
- $row[] = array(
- 'data' => drupal_render($form['permission'][$key]),
- 'class' => array('permission'),
- );
- foreach (element_children($form['checkboxes']) as $rid) {
- $form['checkboxes'][$rid][$key]['#title'] = $roles[$rid] . ': ' . $form['permission'][$key]['#markup'];
- $form['checkboxes'][$rid][$key]['#title_display'] = 'invisible';
- $row[] = array('data' => drupal_render($form['checkboxes'][$rid][$key]), 'class' => array('checkbox'));
- }
- }
- $rows[] = $row;
- }
- $header[] = (t('Permission'));
- foreach (element_children($form['role_names']) as $rid) {
- $header[] = array('data' => drupal_render($form['role_names'][$rid]), 'class' => array('checkbox'));
- }
- $output = theme('system_compact_link');
- $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'permissions')));
- $output .= drupal_render_children($form);
- return $output;
-}
-
-/**
- * Returns HTML for an individual permission description.
- *
- * @param $variables
- * An associative array containing:
- * - permission_item: An associative array representing the permission whose
- * description is being themed. Useful keys include:
- * - description: The text of the permission description.
- * - warning: A security-related warning message about the permission (if
- * there is one).
- * - hide: A boolean indicating whether or not the permission description was
- * requested to be hidden rather than shown.
- *
- * @ingroup themeable
- */
-function theme_user_permission_description($variables) {
- if (!$variables['hide']) {
- $description = array();
- $permission_item = $variables['permission_item'];
- if (!empty($permission_item['description'])) {
- $description[] = $permission_item['description'];
- }
- if (!empty($permission_item['warning'])) {
- $description[] = '
' . $permission_item['warning'] . ' ';
- }
- if (!empty($description)) {
- return implode(' ', $description);
- }
- }
-}
-
-/**
- * Form to re-order roles or add a new one.
- *
- * @ingroup forms
- * @see theme_user_admin_roles()
- */
-function user_admin_roles($form, $form_state) {
- $roles = user_roles();
-
- $form['roles'] = array(
- '#tree' => TRUE,
- );
- $order = 0;
- foreach ($roles as $rid => $name) {
- $form['roles'][$rid]['#role'] = (object) array(
- 'rid' => $rid,
- 'name' => $name,
- 'weight' => $order,
- );
- $form['roles'][$rid]['#weight'] = $order;
- $form['roles'][$rid]['weight'] = array(
- '#type' => 'textfield',
- '#title' => t('Weight for @title', array('@title' => $name)),
- '#title_display' => 'invisible',
- '#size' => 4,
- '#default_value' => $order,
- '#attributes' => array('class' => array('role-weight')),
- );
- $order++;
- }
-
- $form['name'] = array(
- '#type' => 'textfield',
- '#title' => t('Name'),
- '#title_display' => 'invisible',
- '#size' => 32,
- '#maxlength' => 64,
- );
- $form['add'] = array(
- '#type' => 'submit',
- '#value' => t('Add role'),
- '#validate' => array('user_admin_role_validate'),
- '#submit' => array('user_admin_role_submit'),
- );
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save order'),
- '#submit' => array('user_admin_roles_order_submit'),
- );
-
- return $form;
-}
-
-/**
- * Form submit function. Update the role weights.
- */
-function user_admin_roles_order_submit($form, &$form_state) {
- foreach ($form_state['values']['roles'] as $rid => $role_values) {
- $role = $form['roles'][$rid]['#role'];
- $role->weight = $role_values['weight'];
- user_role_save($role);
- }
- drupal_set_message(t('The role settings have been updated.'));
-}
-
-/**
- * Returns HTML for the role order and new role form.
- *
- * @param $variables
- * An associative array containing:
- * - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_user_admin_roles($variables) {
- $form = $variables['form'];
-
- $header = array(t('Name'), t('Weight'), array('data' => t('Operations'), 'colspan' => 2));
- foreach (element_children($form['roles']) as $rid) {
- $name = $form['roles'][$rid]['#role']->name;
- $row = array();
- if (in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
- $row[] = t('@name
(locked) ', array('@name' => $name));
- $row[] = drupal_render($form['roles'][$rid]['weight']);
- $row[] = '';
- $row[] = l(t('edit permissions'), 'admin/people/permissions/' . $rid);
- }
- else {
- $row[] = check_plain($name);
- $row[] = drupal_render($form['roles'][$rid]['weight']);
- $row[] = l(t('edit role'), 'admin/people/permissions/roles/edit/' . $rid);
- $row[] = l(t('edit permissions'), 'admin/people/permissions/' . $rid);
- }
- $rows[] = array('data' => $row, 'class' => array('draggable'));
- }
- $rows[] = array(array('data' => drupal_render($form['name']) . drupal_render($form['add']), 'colspan' => 4, 'class' => 'edit-name'));
-
- drupal_add_tabledrag('user-roles', 'order', 'sibling', 'role-weight');
-
- $output = theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'user-roles')));
- $output .= drupal_render_children($form);
-
- return $output;
-}
-
-/**
- * Form to configure a single role.
- *
- * @ingroup forms
- * @see user_admin_role_validate()
- * @see user_admin_role_submit()
- */
-function user_admin_role($form, $form_state, $role) {
- if ($role->rid == DRUPAL_ANONYMOUS_RID || $role->rid == DRUPAL_AUTHENTICATED_RID) {
- drupal_goto('admin/people/permissions/roles');
- }
-
- // Display the edit role form.
- $form['name'] = array(
- '#type' => 'textfield',
- '#title' => t('Role name'),
- '#default_value' => $role->name,
- '#size' => 30,
- '#required' => TRUE,
- '#maxlength' => 64,
- '#description' => t('The name for this role. Example: "moderator", "editorial board", "site architect".'),
- );
- $form['rid'] = array(
- '#type' => 'value',
- '#value' => $role->rid,
- );
- $form['weight'] = array(
- '#type' => 'value',
- '#value' => $role->weight,
- );
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save role'),
- );
- $form['actions']['delete'] = array(
- '#type' => 'submit',
- '#value' => t('Delete role'),
- '#submit' => array('user_admin_role_delete_submit'),
- );
-
- return $form;
-}
-
-/**
- * Form validation handler for the user_admin_role() form.
- */
-function user_admin_role_validate($form, &$form_state) {
- if (!empty($form_state['values']['name'])) {
- if ($form_state['values']['op'] == t('Save role')) {
- $role = user_role_load_by_name($form_state['values']['name']);
- if ($role && $role->rid != $form_state['values']['rid']) {
- form_set_error('name', t('The role name %name already exists. Choose another role name.', array('%name' => $form_state['values']['name'])));
- }
- }
- elseif ($form_state['values']['op'] == t('Add role')) {
- if (user_role_load_by_name($form_state['values']['name'])) {
- form_set_error('name', t('The role name %name already exists. Choose another role name.', array('%name' => $form_state['values']['name'])));
- }
- }
- }
- else {
- form_set_error('name', t('You must specify a valid role name.'));
- }
-}
-
-/**
- * Form submit handler for the user_admin_role() form.
- */
-function user_admin_role_submit($form, &$form_state) {
- $role = (object) $form_state['values'];
- if ($form_state['values']['op'] == t('Save role')) {
- user_role_save($role);
- drupal_set_message(t('The role has been renamed.'));
- }
- elseif ($form_state['values']['op'] == t('Add role')) {
- user_role_save($role);
- drupal_set_message(t('The role has been added.'));
- }
- $form_state['redirect'] = 'admin/people/permissions/roles';
- return;
-}
-
-/**
- * Form submit handler for the user_admin_role() form.
- */
-function user_admin_role_delete_submit($form, &$form_state) {
- $form_state['redirect'] = 'admin/people/permissions/roles/delete/' . $form_state['values']['rid'];
-}
-
-/**
- * Form to confirm role delete operation.
- */
-function user_admin_role_delete_confirm($form, &$form_state, $role) {
- $form['rid'] = array(
- '#type' => 'value',
- '#value' => $role->rid,
- );
- return confirm_form($form, t('Are you sure you want to delete the role %name ?', array('%name' => $role->name)), 'admin/people/permissions/roles', t('This action cannot be undone.'), t('Delete'));
-}
-
-/**
- * Form submit handler for user_admin_role_delete_confirm().
- */
-function user_admin_role_delete_confirm_submit($form, &$form_state) {
- user_role_delete((int) $form_state['values']['rid']);
- drupal_set_message(t('The role has been deleted.'));
- $form_state['redirect'] = 'admin/people/permissions/roles';
-}
-
diff --git a/modules/user/user.api.php b/modules/user/user.api.php
deleted file mode 100644
index edc61bd..0000000
--- a/modules/user/user.api.php
+++ /dev/null
@@ -1,461 +0,0 @@
- array_keys($users)));
- foreach ($result as $record) {
- $users[$record->uid]->foo = $record->foo;
- }
-}
-
-/**
- * Respond to user deletion.
- *
- * This hook is invoked from user_delete_multiple() before field_attach_delete()
- * is called and before users are actually removed from the database.
- *
- * Modules should additionally implement hook_user_cancel() to process stored
- * user data for other account cancellation methods.
- *
- * @param $account
- * The account that is being deleted.
- *
- * @see user_delete_multiple()
- */
-function hook_user_delete($account) {
- db_delete('mytable')
- ->condition('uid', $account->uid)
- ->execute();
-}
-
-/**
- * Act on user account cancellations.
- *
- * This hook is invoked from user_cancel() before a user account is canceled.
- * Depending on the account cancellation method, the module should either do
- * nothing, unpublish content, or anonymize content. See user_cancel_methods()
- * for the list of default account cancellation methods provided by User module.
- * Modules may add further methods via hook_user_cancel_methods_alter().
- *
- * This hook is NOT invoked for the 'user_cancel_delete' account cancellation
- * method. To react on this method, implement hook_user_delete() instead.
- *
- * Expensive operations should be added to the global account cancellation batch
- * by using batch_set().
- *
- * @param $edit
- * The array of form values submitted by the user.
- * @param $account
- * The user object on which the operation is being performed.
- * @param $method
- * The account cancellation method.
- *
- * @see user_cancel_methods()
- * @see hook_user_cancel_methods_alter()
- */
-function hook_user_cancel($edit, $account, $method) {
- switch ($method) {
- case 'user_cancel_block_unpublish':
- // Unpublish nodes (current revisions).
- module_load_include('inc', 'node', 'node.admin');
- $nodes = db_select('node', 'n')
- ->fields('n', array('nid'))
- ->condition('uid', $account->uid)
- ->execute()
- ->fetchCol();
- node_mass_update($nodes, array('status' => 0));
- break;
-
- case 'user_cancel_reassign':
- // Anonymize nodes (current revisions).
- module_load_include('inc', 'node', 'node.admin');
- $nodes = db_select('node', 'n')
- ->fields('n', array('nid'))
- ->condition('uid', $account->uid)
- ->execute()
- ->fetchCol();
- node_mass_update($nodes, array('uid' => 0));
- // Anonymize old revisions.
- db_update('node_revision')
- ->fields(array('uid' => 0))
- ->condition('uid', $account->uid)
- ->execute();
- // Clean history.
- db_delete('history')
- ->condition('uid', $account->uid)
- ->execute();
- break;
- }
-}
-
-/**
- * Modify account cancellation methods.
- *
- * By implementing this hook, modules are able to add, customize, or remove
- * account cancellation methods. All defined methods are turned into radio
- * button form elements by user_cancel_methods() after this hook is invoked.
- * The following properties can be defined for each method:
- * - title: The radio button's title.
- * - description: (optional) A description to display on the confirmation form
- * if the user is not allowed to select the account cancellation method. The
- * description is NOT used for the radio button, but instead should provide
- * additional explanation to the user seeking to cancel their account.
- * - access: (optional) A boolean value indicating whether the user can access
- * a method. If #access is defined, the method cannot be configured as default
- * method.
- *
- * @param $methods
- * An array containing user account cancellation methods, keyed by method id.
- *
- * @see user_cancel_methods()
- * @see user_cancel_confirm_form()
- */
-function hook_user_cancel_methods_alter(&$methods) {
- // Limit access to disable account and unpublish content method.
- $methods['user_cancel_block_unpublish']['access'] = user_access('administer site configuration');
-
- // Remove the content re-assigning method.
- unset($methods['user_cancel_reassign']);
-
- // Add a custom zero-out method.
- $methods['mymodule_zero_out'] = array(
- 'title' => t('Delete the account and remove all content.'),
- 'description' => t('All your content will be replaced by empty strings.'),
- // access should be used for administrative methods only.
- 'access' => user_access('access zero-out account cancellation method'),
- );
-}
-
-/**
- * Add mass user operations.
- *
- * This hook enables modules to inject custom operations into the mass operations
- * dropdown found at admin/people, by associating a callback function with
- * the operation, which is called when the form is submitted. The callback function
- * receives one initial argument, which is an array of the checked users.
- *
- * @return
- * An array of operations. Each operation is an associative array that may
- * contain the following key-value pairs:
- * - "label": Required. The label for the operation, displayed in the dropdown menu.
- * - "callback": Required. The function to call for the operation.
- * - "callback arguments": Optional. An array of additional arguments to pass to
- * the callback function.
- *
- */
-function hook_user_operations() {
- $operations = array(
- 'unblock' => array(
- 'label' => t('Unblock the selected users'),
- 'callback' => 'user_user_operations_unblock',
- ),
- 'block' => array(
- 'label' => t('Block the selected users'),
- 'callback' => 'user_user_operations_block',
- ),
- 'cancel' => array(
- 'label' => t('Cancel the selected user accounts'),
- ),
- );
- return $operations;
-}
-
-/**
- * Retrieve a list of user setting or profile information categories.
- *
- * @return
- * An array of associative arrays. Each inner array has elements:
- * - "name": The internal name of the category.
- * - "title": The human-readable, localized name of the category.
- * - "weight": An integer specifying the category's sort ordering.
- * - "access callback": Name of the access callback function to use to
- * determine whether the user can edit the category. Defaults to using
- * user_edit_access(). See hook_menu() for more information on access
- * callbacks.
- * - "access arguments": Arguments for the access callback function. Defaults
- * to array(1).
- */
-function hook_user_categories() {
- return array(array(
- 'name' => 'account',
- 'title' => t('Account settings'),
- 'weight' => 1,
- ));
-}
-
-/**
- * A user account is about to be created or updated.
- *
- * This hook is primarily intended for modules that want to store properties in
- * the serialized {users}.data column, which is automatically loaded whenever a
- * user account object is loaded, modules may add to $edit['data'] in order
- * to have their data serialized on save.
- *
- * @param $edit
- * The array of form values submitted by the user. Assign values to this
- * array to save changes in the database.
- * @param $account
- * The user object on which the operation is performed. Values assigned in
- * this object will not be saved in the database.
- * @param $category
- * The active category of user information being edited.
- *
- * @see hook_user_insert()
- * @see hook_user_update()
- */
-function hook_user_presave(&$edit, $account, $category) {
- // Make sure that our form value 'mymodule_foo' is stored as
- // 'mymodule_bar' in the 'data' (serialized) column.
- if (isset($edit['mymodule_foo'])) {
- $edit['data']['mymodule_bar'] = $edit['mymodule_foo'];
- }
-}
-
-/**
- * A user account was created.
- *
- * The module should save its custom additions to the user object into the
- * database.
- *
- * @param $edit
- * The array of form values submitted by the user.
- * @param $account
- * The user object on which the operation is being performed.
- * @param $category
- * The active category of user information being edited.
- *
- * @see hook_user_presave()
- * @see hook_user_update()
- */
-function hook_user_insert(&$edit, $account, $category) {
- db_insert('mytable')
- ->fields(array(
- 'myfield' => $edit['myfield'],
- 'uid' => $account->uid,
- ))
- ->execute();
-}
-
-/**
- * A user account was updated.
- *
- * Modules may use this hook to update their user data in a custom storage
- * after a user account has been updated.
- *
- * @param $edit
- * The array of form values submitted by the user.
- * @param $account
- * The user object on which the operation is performed.
- * @param $category
- * The active category of user information being edited.
- *
- * @see hook_user_presave()
- * @see hook_user_insert()
- */
-function hook_user_update(&$edit, $account, $category) {
- db_insert('user_changes')
- ->fields(array(
- 'uid' => $account->uid,
- 'changed' => time(),
- ))
- ->execute();
-}
-
-/**
- * The user just logged in.
- *
- * @param $edit
- * The array of form values submitted by the user.
- * @param $account
- * The user object on which the operation was just performed.
- */
-function hook_user_login(&$edit, $account) {
- // If the user has a NULL time zone, notify them to set a time zone.
- if (!$account->timezone && variable_get('configurable_timezones', 1) && variable_get('empty_timezone_message', 0)) {
- drupal_set_message(t('Configure your
account time zone setting .', array('@user-edit' => url("user/$account->uid/edit", array('query' => drupal_get_destination(), 'fragment' => 'edit-timezone')))));
- }
-}
-
-/**
- * The user just logged out.
- *
- * Note that when this hook is invoked, the changes have not yet been written to
- * the database, because a database transaction is still in progress. The
- * transaction is not finalized until the save operation is entirely completed
- * and user_save() goes out of scope. You should not rely on data in the
- * database at this time as it is not updated yet. You should also note that any
- * write/update database queries executed from this hook are also not committed
- * immediately. Check user_save() and db_transaction() for more info.
- *
- * @param $account
- * The user object on which the operation was just performed.
- */
-function hook_user_logout($account) {
- db_insert('logouts')
- ->fields(array(
- 'uid' => $account->uid,
- 'time' => time(),
- ))
- ->execute();
-}
-
-/**
- * The user's account information is being displayed.
- *
- * The module should format its custom additions for display and add them to the
- * $account->content array.
- *
- * @param $account
- * The user object on which the operation is being performed.
- * @param $view_mode
- * View mode, e.g. 'full'.
- * @param $langcode
- * The language code used for rendering.
- *
- * @see hook_user_view_alter()
- * @see hook_entity_view()
- */
-function hook_user_view($account, $view_mode, $langcode) {
- if (user_access('create blog content', $account)) {
- $account->content['summary']['blog'] = array(
- '#type' => 'user_profile_item',
- '#title' => t('Blog'),
- '#markup' => l(t('View recent blog entries'), "blog/$account->uid", array('attributes' => array('title' => t("Read !username's latest blog entries.", array('!username' => format_username($account)))))),
- '#attributes' => array('class' => array('blog')),
- );
- }
-}
-
-/**
- * The user was built; the module may modify the structured content.
- *
- * This hook is called after the content has been assembled in a structured array
- * and may be used for doing processing which requires that the complete user
- * content structure has been built.
- *
- * If the module wishes to act on the rendered HTML of the user rather than the
- * structured content array, it may use this hook to add a #post_render callback.
- * Alternatively, it could also implement hook_preprocess_user_profile(). See
- * drupal_render() and theme() documentation respectively for details.
- *
- * @param $build
- * A renderable array representing the user.
- *
- * @see user_view()
- * @see hook_entity_view_alter()
- */
-function hook_user_view_alter(&$build) {
- // Check for the existence of a field added by another module.
- if (isset($build['an_additional_field'])) {
- // Change its weight.
- $build['an_additional_field']['#weight'] = -10;
- }
-
- // Add a #post_render callback to act on the rendered HTML of the user.
- $build['#post_render'][] = 'my_module_user_post_render';
-}
-
-/**
- * Act on a user role being inserted or updated.
- *
- * Modules implementing this hook can act on the user role object before
- * it has been saved to the database.
- *
- * @param $role
- * A user role object.
- *
- * @see hook_user_role_insert()
- * @see hook_user_role_update()
- */
-function hook_user_role_presave($role) {
- // Set a UUID for the user role if it doesn't already exist
- if (empty($role->uuid)) {
- $role->uuid = uuid_uuid();
- }
-}
-
-/**
- * Respond to creation of a new user role.
- *
- * Modules implementing this hook can act on the user role object when saved to
- * the database. It's recommended that you implement this hook if your module
- * adds additional data to user roles object. The module should save its custom
- * additions to the database.
- *
- * @param $role
- * A user role object.
- */
-function hook_user_role_insert($role) {
- // Save extra fields provided by the module to user roles.
- db_insert('my_module_table')
- ->fields(array(
- 'rid' => $role->rid,
- 'role_description' => $role->description,
- ))
- ->execute();
-}
-
-/**
- * Respond to updates to a user role.
- *
- * Modules implementing this hook can act on the user role object when updated.
- * It's recommended that you implement this hook if your module adds additional
- * data to user roles object. The module should save its custom additions to
- * the database.
- *
- * @param $role
- * A user role object.
- */
-function hook_user_role_update($role) {
- // Save extra fields provided by the module to user roles.
- db_merge('my_module_table')
- ->key(array('rid' => $role->rid))
- ->fields(array(
- 'role_description' => $role->description
- ))
- ->execute();
-}
-
-/**
- * Respond to user role deletion.
- *
- * This hook allows you act when a user role has been deleted.
- * If your module stores references to roles, it's recommended that you
- * implement this hook and delete existing instances of the deleted role
- * in your module database tables.
- *
- * @param $role
- * The $role object being deleted.
- */
-function hook_user_role_delete($role) {
- // Delete existing instances of the deleted role.
- db_delete('my_module_table')
- ->condition('rid', $role->rid)
- ->execute();
-}
-
-/**
- * @} End of "addtogroup hooks".
- */
diff --git a/modules/user/user.css b/modules/user/user.css
deleted file mode 100644
index 079ec38..0000000
--- a/modules/user/user.css
+++ /dev/null
@@ -1,102 +0,0 @@
-
-#permissions td.module {
- font-weight: bold;
-}
-#permissions td.permission {
- padding-left: 1.5em; /* LTR */
-}
-#permissions tr.odd .form-item,
-#permissions tr.even .form-item {
- white-space: normal;
-}
-#user-admin-settings fieldset .fieldset-description {
- font-size: 0.85em;
- padding-bottom: .5em;
-}
-
-/**
- * Override default textfield float to put the "Add role" button next to
- * the input textfield.
- */
-#user-admin-roles td.edit-name {
- clear: both;
-}
-#user-admin-roles .form-item-name {
- float: left; /* LTR */
- margin-right: 1em; /* LTR */
-}
-
-/**
- * Password strength indicator.
- */
-.password-strength {
- width: 17em;
- float: right; /* LTR */
- margin-top: 1.4em;
-}
-.password-strength-title {
- display: inline;
-}
-.password-strength-text {
- float: right; /* LTR */
- font-weight: bold;
-}
-.password-indicator {
- background-color: #C4C4C4;
- height: 0.3em;
- width: 100%;
-}
-.password-indicator div {
- height: 100%;
- width: 0%;
- background-color: #47C965;
-}
-input.password-confirm,
-input.password-field {
- width: 16em;
- margin-bottom: 0.4em;
-}
-div.password-confirm {
- float: right; /* LTR */
- margin-top: 1.5em;
- visibility: hidden;
- width: 17em;
-}
-div.form-item div.password-suggestions {
- padding: 0.2em 0.5em;
- margin: 0.7em 0;
- width: 38.5em;
- border: 1px solid #B4B4B4;
-}
-div.password-suggestions ul {
- margin-bottom: 0;
-}
-.confirm-parent,
-.password-parent {
- clear: left; /* LTR */
- margin: 0;
- width: 36.3em;
-}
-
-/* Generated by user.module but used by profile.module: */
-.profile {
- clear: both;
- margin: 1em 0;
-}
-.profile .user-picture {
- float: right; /* LTR */
- margin: 0 1em 1em 0; /* LTR */
-}
-.profile h3 {
- border-bottom: 1px solid #ccc;
-}
-.profile dl {
- margin: 0 0 1.5em 0;
-}
-.profile dt {
- margin: 0 0 0.2em 0;
- font-weight: bold;
-}
-.profile dd {
- margin: 0 0 1em 0;
-}
diff --git a/modules/user/user.info b/modules/user/user.info
deleted file mode 100644
index 1154f53..0000000
--- a/modules/user/user.info
+++ /dev/null
@@ -1,10 +0,0 @@
-name = User
-description = Manages the user registration and login system.
-package = Core
-version = VERSION
-core = 7.x
-files[] = user.module
-files[] = user.test
-required = TRUE
-configure = admin/config/people
-stylesheets[all][] = user.css
diff --git a/modules/user/user.install b/modules/user/user.install
deleted file mode 100644
index b573e72..0000000
--- a/modules/user/user.install
+++ /dev/null
@@ -1,915 +0,0 @@
- 'Stores distributed authentication mapping.',
- 'fields' => array(
- 'aid' => array(
- 'description' => 'Primary Key: Unique authmap ID.',
- 'type' => 'serial',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- ),
- 'uid' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => "User's {users}.uid.",
- ),
- 'authname' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Unique authentication name.',
- ),
- 'module' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Module which is controlling the authentication.',
- ),
- ),
- 'unique keys' => array(
- 'authname' => array('authname'),
- ),
- 'primary key' => array('aid'),
- 'foreign keys' => array(
- 'user' => array(
- 'table' => 'users',
- 'columns' => array('uid' => 'uid'),
- ),
- ),
- );
-
- $schema['role_permission'] = array(
- 'description' => 'Stores the permissions assigned to user roles.',
- 'fields' => array(
- 'rid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Foreign Key: {role}.rid.',
- ),
- 'permission' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'A single permission granted to the role identified by rid.',
- ),
- 'module' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => "The module declaring the permission.",
- ),
- ),
- 'primary key' => array('rid', 'permission'),
- 'indexes' => array(
- 'permission' => array('permission'),
- ),
- 'foreign keys' => array(
- 'role' => array(
- 'table' => 'role',
- 'columns' => array('rid' => 'rid'),
- ),
- ),
- );
-
- $schema['role'] = array(
- 'description' => 'Stores user roles.',
- 'fields' => array(
- 'rid' => array(
- 'type' => 'serial',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Primary Key: Unique role ID.',
- ),
- 'name' => array(
- 'type' => 'varchar',
- 'length' => 64,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Unique role name.',
- 'translatable' => TRUE,
- ),
- 'weight' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'The weight of this role in listings and the user interface.',
- ),
- ),
- 'unique keys' => array(
- 'name' => array('name'),
- ),
- 'primary key' => array('rid'),
- 'indexes' => array(
- 'name_weight' => array('name', 'weight'),
- ),
- );
-
- // The table name here is plural, despite Drupal table naming standards,
- // because "user" is a reserved word in many databases.
- $schema['users'] = array(
- 'description' => 'Stores user data.',
- 'fields' => array(
- 'uid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'description' => 'Primary Key: Unique user ID.',
- 'default' => 0,
- ),
- 'name' => array(
- 'type' => 'varchar',
- 'length' => 60,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => 'Unique user name.',
- ),
- 'pass' => array(
- 'type' => 'varchar',
- 'length' => 128,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => "User's password (hashed).",
- ),
- 'mail' => array(
- 'type' => 'varchar',
- 'length' => 254,
- 'not null' => FALSE,
- 'default' => '',
- 'description' => "User's e-mail address.",
- ),
- 'theme' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => "User's default theme.",
- ),
- 'signature' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => "User's signature.",
- ),
- 'signature_format' => array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => FALSE,
- 'description' => 'The {filter_format}.format of the signature.',
- ),
- 'created' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Timestamp for when user was created.',
- ),
- 'access' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Timestamp for previous time user accessed the site.',
- ),
- 'login' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => "Timestamp for user's last login.",
- ),
- 'status' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'size' => 'tiny',
- 'description' => 'Whether the user is active(1) or blocked(0).',
- ),
- 'timezone' => array(
- 'type' => 'varchar',
- 'length' => 32,
- 'not null' => FALSE,
- 'description' => "User's time zone.",
- ),
- 'language' => array(
- 'type' => 'varchar',
- 'length' => 12,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => "User's default language.",
- ),
- 'picture' => array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => "Foreign key: {file_managed}.fid of user's picture.",
- ),
- 'init' => array(
- 'type' => 'varchar',
- 'length' => 254,
- 'not null' => FALSE,
- 'default' => '',
- 'description' => 'E-mail address used for initial account creation.',
- ),
- 'data' => array(
- 'type' => 'blob',
- 'not null' => FALSE,
- 'size' => 'big',
- 'serialize' => TRUE,
- 'description' => 'A serialized array of name value pairs that are related to the user. Any form values posted during user edit are stored and are loaded into the $user object during user_load(). Use of this field is discouraged and it will likely disappear in a future version of Drupal.',
- ),
- ),
- 'indexes' => array(
- 'access' => array('access'),
- 'created' => array('created'),
- 'mail' => array('mail'),
- 'picture' => array('picture'),
- ),
- 'unique keys' => array(
- 'name' => array('name'),
- ),
- 'primary key' => array('uid'),
- 'foreign keys' => array(
- 'signature_format' => array(
- 'table' => 'filter_format',
- 'columns' => array('signature_format' => 'format'),
- ),
- ),
- );
-
- $schema['users_roles'] = array(
- 'description' => 'Maps users to roles.',
- 'fields' => array(
- 'uid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Primary Key: {users}.uid for user.',
- ),
- 'rid' => array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => 'Primary Key: {role}.rid for role.',
- ),
- ),
- 'primary key' => array('uid', 'rid'),
- 'indexes' => array(
- 'rid' => array('rid'),
- ),
- 'foreign keys' => array(
- 'user' => array(
- 'table' => 'users',
- 'columns' => array('uid' => 'uid'),
- ),
- 'role' => array(
- 'table' => 'role',
- 'columns' => array('rid' => 'rid'),
- ),
- ),
- );
-
- return $schema;
-}
-
-/**
- * Implements hook_install().
- */
-function user_install() {
- // Insert a row for the anonymous user.
- db_insert('users')
- ->fields(array(
- 'uid' => 0,
- 'name' => '',
- 'mail' => '',
- ))
- ->execute();
-
- // We need some placeholders here as name and mail are uniques and data is
- // presumed to be a serialized array. This will be changed by the settings
- // form in the installer.
- db_insert('users')
- ->fields(array(
- 'uid' => 1,
- 'name' => 'placeholder-for-uid-1',
- 'mail' => 'placeholder-for-uid-1',
- 'created' => REQUEST_TIME,
- 'status' => 1,
- 'data' => NULL,
- ))
- ->execute();
-
- // Built-in roles.
- $rid_anonymous = db_insert('role')
- ->fields(array('name' => 'anonymous user', 'weight' => 0))
- ->execute();
- $rid_authenticated = db_insert('role')
- ->fields(array('name' => 'authenticated user', 'weight' => 1))
- ->execute();
-
- // Sanity check to ensure the anonymous and authenticated role IDs are the
- // same as the drupal defined constants. In certain situations, this will
- // not be true.
- if ($rid_anonymous != DRUPAL_ANONYMOUS_RID) {
- db_update('role')
- ->fields(array('rid' => DRUPAL_ANONYMOUS_RID))
- ->condition('rid', $rid_anonymous)
- ->execute();
- }
- if ($rid_authenticated != DRUPAL_AUTHENTICATED_RID) {
- db_update('role')
- ->fields(array('rid' => DRUPAL_AUTHENTICATED_RID))
- ->condition('rid', $rid_authenticated)
- ->execute();
- }
-}
-
-/**
- * Implements hook_update_dependencies().
- */
-function user_update_dependencies() {
- // user_update_7006() updates data in the {role_permission} table, so it must
- // run after system_update_7007(), which populates that table.
- $dependencies['user'][7006] = array(
- 'system' => 7007,
- );
-
- // user_update_7010() needs to query the {filter_format} table to get a list
- // of existing text formats, so it must run after filter_update_7000(), which
- // creates that table.
- $dependencies['user'][7010] = array(
- 'filter' => 7000,
- );
-
- // user_update_7012() uses the file API and inserts records into the
- // {file_managed} table, so it therefore must run after system_update_7061(),
- // which inserts files with specific IDs into the table and therefore relies
- // on the table being empty (otherwise it would accidentally overwrite
- // existing records).
- $dependencies['user'][7012] = array(
- 'system' => 7061,
- );
-
- // user_update_7013() uses the file usage API, which relies on the
- // {file_usage} table, so it must run after system_update_7059(), which
- // creates that table.
- $dependencies['user'][7013] = array(
- 'system' => 7059,
- );
-
- return $dependencies;
-}
-
-/**
- * Utility function: grant a set of permissions to a role during update.
- *
- * This function is valid for a database schema version 7000.
- *
- * @param $rid
- * The role ID.
- * @param $permissions
- * An array of permissions names.
- * @param $module
- * The name of the module defining the permissions.
- * @ingroup update_api
- */
-function _update_7000_user_role_grant_permissions($rid, array $permissions, $module) {
- // Grant new permissions for the role.
- foreach ($permissions as $name) {
- db_merge('role_permission')
- ->key(array(
- 'rid' => $rid,
- 'permission' => $name,
- ))
- ->fields(array(
- 'module' => $module,
- ))
- ->execute();
- }
-}
-
-/**
- * @addtogroup updates-6.x-to-7.x
- * @{
- */
-
-/**
- * Increase the length of the password field to accommodate better hashes.
- *
- * Also re-hashes all current passwords to improve security. This may be a
- * lengthy process, and is performed batch-wise.
- */
-function user_update_7000(&$sandbox) {
- $sandbox['#finished'] = 0;
- // Lower than DRUPAL_HASH_COUNT to make the update run at a reasonable speed.
- $hash_count_log2 = 11;
- // Multi-part update.
- if (!isset($sandbox['user_from'])) {
- db_change_field('users', 'pass', 'pass', array('type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => ''));
- $sandbox['user_from'] = 0;
- $sandbox['user_count'] = db_query("SELECT COUNT(uid) FROM {users}")->fetchField();
- }
- else {
- require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
- // Hash again all current hashed passwords.
- $has_rows = FALSE;
- // Update this many per page load.
- $count = 1000;
- $result = db_query_range("SELECT uid, pass FROM {users} WHERE uid > 0 ORDER BY uid", $sandbox['user_from'], $count);
- foreach ($result as $account) {
- $has_rows = TRUE;
-
- // If the $account->pass value is not a MD5 hash (a 32 character
- // hexadecimal string) then skip it.
- if (!preg_match('/^[0-9a-f]{32}$/', $account->pass)) {
- continue;
- }
-
- $new_hash = user_hash_password($account->pass, $hash_count_log2);
- if ($new_hash) {
- // Indicate an updated password.
- $new_hash = 'U' . $new_hash;
- db_update('users')
- ->fields(array('pass' => $new_hash))
- ->condition('uid', $account->uid)
- ->execute();
- }
- }
- $sandbox['#finished'] = $sandbox['user_from']/$sandbox['user_count'];
- $sandbox['user_from'] += $count;
- if (!$has_rows) {
- $sandbox['#finished'] = 1;
- return t('User passwords rehashed to improve security');
- }
- }
-}
-
-/**
- * Remove the 'threshold', 'mode' and 'sort' columns from the {users} table.
- *
- * These fields were previously used to store per-user comment settings.
- */
-
-function user_update_7001() {
- db_drop_field('users', 'threshold');
- db_drop_field('users', 'mode');
- db_drop_field('users', 'sort');
-}
-
-/**
- * Convert user time zones from time zone offsets to time zone names.
- */
-function user_update_7002(&$sandbox) {
- $sandbox['#finished'] = 0;
-
- // Multi-part update.
- if (!isset($sandbox['user_from'])) {
- db_change_field('users', 'timezone', 'timezone', array('type' => 'varchar', 'length' => 32, 'not null' => FALSE));
- $sandbox['user_from'] = 0;
- $sandbox['user_count'] = db_query("SELECT COUNT(uid) FROM {users}")->fetchField();
- $sandbox['user_not_migrated'] = 0;
- }
- else {
- $timezones = system_time_zones();
- // Update this many per page load.
- $count = 10000;
- $contributed_date_module = db_field_exists('users', 'timezone_name');
- $contributed_event_module = db_field_exists('users', 'timezone_id');
-
- $results = db_query_range("SELECT uid FROM {users} ORDER BY uid", $sandbox['user_from'], $count);
- foreach ($results as $account) {
- $timezone = NULL;
- // If the contributed Date module has created a users.timezone_name
- // column, use this data to set each user's time zone.
- if ($contributed_date_module) {
- $date_timezone = db_query("SELECT timezone_name FROM {users} WHERE uid = :uid", array(':uid' => $account->uid))->fetchField();
- if (isset($timezones[$date_timezone])) {
- $timezone = $date_timezone;
- }
- }
- // If the contributed Event module has stored user time zone information
- // use that information to update the user accounts.
- if (!$timezone && $contributed_event_module) {
- try {
- $event_timezone = db_query("SELECT t.name FROM {users} u LEFT JOIN {event_timezones} t ON u.timezone_id = t.timezone WHERE u.uid = :uid", array(':uid' => $account->uid))->fetchField();
- $event_timezone = str_replace(' ', '_', $event_timezone);
- if (isset($timezones[$event_timezone])) {
- $timezone = $event_timezone;
- }
- }
- catch (PDOException $e) {
- // Ignore error if event_timezones table does not exist or unexpected
- // schema found.
- }
- }
- if ($timezone) {
- db_update('users')
- ->fields(array('timezone' => $timezone))
- ->condition('uid', $account->uid)
- ->execute();
- }
- else {
- $sandbox['user_not_migrated']++;
- db_update('users')
- ->fields(array('timezone' => NULL))
- ->condition('uid', $account->uid)
- ->execute();
- }
- $sandbox['user_from']++;
- }
-
- $sandbox['#finished'] = $sandbox['user_from'] / $sandbox['user_count'];
- if ($sandbox['user_from'] == $sandbox['user_count']) {
- if ($sandbox['user_not_migrated'] > 0) {
- variable_set('empty_timezone_message', 1);
- drupal_set_message(format_string('Some user time zones have been emptied and need to be set to the correct values. Use the new
time zone options to choose whether to remind users at login to set the correct time zone.', array('@config-url' => url('admin/config/regional/settings'))), 'warning');
- }
- return t('Migrated user time zones');
- }
- }
-}
-
-/**
- * Update user settings for cancelling user accounts.
- *
- * Prior to 7.x, users were not able to cancel their accounts. When
- * administrators deleted an account, all contents were assigned to uid 0,
- * which is the same as the 'user_cancel_reassign' method now.
- */
-function user_update_7003() {
- // Set the default account cancellation method.
- variable_set('user_cancel_method', 'user_cancel_reassign');
- // Re-assign notification setting.
- if ($setting = variable_get('user_mail_status_deleted_notify', FALSE)) {
- variable_set('user_mail_status_canceled_notify', $setting);
- variable_del('user_mail_status_deleted_notify');
- }
- // Re-assign "Account deleted" mail strings to "Account canceled" mail.
- if ($setting = variable_get('user_mail_status_deleted_subject', FALSE)) {
- variable_set('user_mail_status_canceled_subject', $setting);
- variable_del('user_mail_status_deleted_subject');
- }
- if ($setting = variable_get('user_mail_status_deleted_body', FALSE)) {
- variable_set('user_mail_status_canceled_body', $setting);
- variable_del('user_mail_status_deleted_body');
- }
-}
-
-/**
- * Changes the users table to allow longer e-mail addresses.
- */
-function user_update_7005(&$sandbox) {
- $mail_field = array(
- 'type' => 'varchar',
- 'length' => 254,
- 'not null' => FALSE,
- 'default' => '',
- 'description' => "User's e-mail address.",
- );
- $init_field = array(
- 'type' => 'varchar',
- 'length' => 254,
- 'not null' => FALSE,
- 'default' => '',
- 'description' => 'E-mail address used for initial account creation.',
- );
- db_drop_index('users', 'mail');
- db_change_field('users', 'mail', 'mail', $mail_field, array('indexes' => array('mail' => array('mail'))));
- db_change_field('users', 'init', 'init', $init_field);
-}
-
-/**
- * Add module data to {role_permission}.
- */
-function user_update_7006(&$sandbox) {
- $module_field = array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => TRUE,
- 'default' => '',
- 'description' => "The module declaring the permission.",
- );
- // Check that the field hasn't been updated in an aborted run of this
- // update.
- if (!db_field_exists('role_permission', 'module')) {
- // Add a new field for the fid.
- db_add_field('role_permission', 'module', $module_field);
- }
-}
-
-/**
- * Add a weight column to user roles.
- */
-function user_update_7007() {
- db_add_field('role', 'weight', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
- db_add_index('role', 'name_weight', array('name', 'weight'));
-}
-
-/**
- * If 'user_register' variable was unset in Drupal 6, set it to be the same as
- * the Drupal 6 default setting.
- */
-function user_update_7008() {
- if (!isset($GLOBALS['conf']['user_register'])) {
- // Set to the Drupal 6 default, "visitors can create accounts".
- variable_set('user_register', USER_REGISTER_VISITORS);
- }
-}
-
-/**
- * Converts fields that store serialized variables from text to blob.
- */
-function user_update_7009() {
- $spec = array(
- 'type' => 'blob',
- 'not null' => FALSE,
- 'size' => 'big',
- 'serialize' => TRUE,
- 'description' => 'A serialized array of name value pairs that are related to the user. Any form values posted during user edit are stored and are loaded into the $user object during user_load(). Use of this field is discouraged and it will likely disappear in a future version of Drupal.',
- );
- db_change_field('users', 'data', 'data', $spec);
-}
-
-/**
- * Update the {user}.signature_format column.
- */
-function user_update_7010() {
- // Update the database column to allow NULL values.
- db_change_field('users', 'signature_format', 'signature_format', array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => FALSE,
- 'description' => 'The {filter_format}.format of the signature.',
- ));
-
- // Replace the signature format with NULL if the signature is empty and does
- // not already have a stored text format.
- //
- // In Drupal 6, "0" (the former FILTER_FORMAT_DEFAULT constant) could be used
- // to indicate this situation, but in Drupal 7, only NULL is supported. This
- // update therefore preserves the ability of user accounts which were never
- // given a signature (for example, if the site did not have user signatures
- // enabled, or if the user never edited their account information) to not
- // have a particular text format assumed for them the first time the
- // signature is edited.
- db_update('users')
- ->fields(array('signature_format' => NULL))
- ->condition('signature', '')
- ->condition('signature_format', 0)
- ->execute();
-
- // There are a number of situations in which a Drupal 6 site could store
- // content with a nonexistent text format. This includes text formats that
- // had later been deleted, or non-empty content stored with a value of "0"
- // (the former FILTER_FORMAT_DEFAULT constant). Drupal 6 would filter this
- // content using whatever the site-wide default text format was at the moment
- // the text was being displayed.
- //
- // In Drupal 7, this behavior is no longer supported, and all content must be
- // stored with an explicit text format (or it will not be displayed when it
- // is filtered). Therefore, to preserve the behavior of the site after the
- // upgrade, we must replace all instances described above with the current
- // value of the (old) site-wide default format at the moment of the upgrade.
- $existing_formats = db_query("SELECT format FROM {filter_format}")->fetchCol();
- $default_format = variable_get('filter_default_format', 1);
- db_update('users')
- ->fields(array('signature_format' => $default_format))
- ->isNotNull('signature_format')
- ->condition('signature_format', $existing_formats, 'NOT IN')
- ->execute();
-}
-
-/**
- * Placeholder function.
- *
- * As a fix for user_update_7011() not updating email templates to use the new
- * tokens, user_update_7017() now targets email templates of Drupal 6 sites and
- * already upgraded sites.
- */
-function user_update_7011() {
-}
-
-/**
- * Add the user's pictures to the {file_managed} table and make them managed
- * files.
- */
-function user_update_7012(&$sandbox) {
-
- $picture_field = array(
- 'type' => 'int',
- 'not null' => TRUE,
- 'default' => 0,
- 'description' => "Foreign key: {file_managed}.fid of user's picture.",
- );
-
- if (!isset($sandbox['progress'])) {
- // Check that the field hasn't been updated in an aborted run of this
- // update.
- if (!db_field_exists('users', 'picture_fid')) {
- // Add a new field for the fid.
- db_add_field('users', 'picture_fid', $picture_field);
- }
-
- // Initialize batch update information.
- $sandbox['progress'] = 0;
- $sandbox['last_user_processed'] = -1;
- $sandbox['max'] = db_query("SELECT COUNT(*) FROM {users} WHERE picture <> ''")->fetchField();
- }
-
- // As a batch operation move the photos into the {file_managed} table and
- // update the {users} records.
- $limit = 500;
- $result = db_query_range("SELECT uid, picture FROM {users} WHERE picture <> '' AND uid > :uid ORDER BY uid", 0, $limit, array(':uid' => $sandbox['last_user_processed']));
- foreach ($result as $user) {
- // Don't bother adding files that don't exist.
- if (file_exists($user->picture)) {
-
- // Check if the file already exists.
- $files = file_load_multiple(array(), array('uri' => $user->picture));
- if (count($files)) {
- $file = reset($files);
- }
- else {
- // Create a file object.
- $file = new stdClass();
- $file->uri = $user->picture;
- $file->filename = drupal_basename($file->uri);
- $file->filemime = file_get_mimetype($file->uri);
- $file->uid = $user->uid;
- $file->status = FILE_STATUS_PERMANENT;
- $file = file_save($file);
- }
-
- db_update('users')
- ->fields(array('picture_fid' => $file->fid))
- ->condition('uid', $user->uid)
- ->execute();
- }
-
- // Update our progress information for the batch update.
- $sandbox['progress']++;
- $sandbox['last_user_processed'] = $user->uid;
- }
-
- // Indicate our current progress to the batch update system. If there's no
- // max value then there's nothing to update and we're finished.
- $sandbox['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['progress'] / $sandbox['max']);
-
- // When we're finished, drop the old picture field and rename the new one to
- // replace it.
- if (isset($sandbox['#finished']) && $sandbox['#finished'] == 1) {
- db_drop_field('users', 'picture');
- db_change_field('users', 'picture_fid', 'picture', $picture_field);
- }
-}
-
-/**
- * Add user module file usage entries.
- */
-function user_update_7013(&$sandbox) {
- if (!isset($sandbox['progress'])) {
- // Initialize batch update information.
- $sandbox['progress'] = 0;
- $sandbox['last_uid_processed'] = -1;
- $sandbox['max'] = db_query("SELECT COUNT(*) FROM {users} u WHERE u.picture <> 0")->fetchField();
- }
-
- // Add usage entries for the user picture files.
- $limit = 500;
- $result = db_query_range('SELECT f.*, u.uid as user_uid FROM {users} u INNER JOIN {file_managed} f ON u.picture = f.fid WHERE u.picture <> 0 AND u.uid > :uid ORDER BY u.uid', 0, $limit, array(':uid' => $sandbox['last_uid_processed']))->fetchAllAssoc('fid', PDO::FETCH_ASSOC);
- foreach ($result as $row) {
- $uid = $row['user_uid'];
- $file = (object) $row;
- file_usage_add($file, 'user', 'user', $uid);
-
- // Update our progress information for the batch update.
- $sandbox['progress']++;
- $sandbox['last_uid_processed'] = $uid;
- }
-
- // Indicate our current progress to the batch update system.
- $sandbox['#finished'] = empty($sandbox['max']) || ($sandbox['progress'] / $sandbox['max']);
-}
-
-/**
- * Rename the 'post comments without approval' permission.
- *
- * In Drupal 7, this permission has been renamed to 'skip comment approval'.
- */
-function user_update_7014() {
- db_update('role_permission')
- ->fields(array('permission' => 'skip comment approval'))
- ->condition('permission', 'post comments without approval')
- ->execute();
-
- return t("Renamed the 'post comments without approval' permission to 'skip comment approval'.");
-}
-
-/**
- * Change {users}.signature_format into varchar.
- */
-function user_update_7015() {
- db_change_field('users', 'signature_format', 'signature_format', array(
- 'type' => 'varchar',
- 'length' => 255,
- 'not null' => FALSE,
- 'description' => 'The {filter_format}.format of the signature.',
- ));
-}
-
-/**
- * @} End of "addtogroup updates-6.x-to-7.x".
- */
-
-/**
- * @addtogroup updates-7.x-extra
- * @{
- */
-
-/**
- * Update the database to match the schema.
- */
-function user_update_7016() {
- // Add field default.
- db_change_field('users', 'uid', 'uid', array(
- 'type' => 'int',
- 'unsigned' => TRUE,
- 'not null' => TRUE,
- 'default' => 0,
- ));
-}
-
-/**
- * Update email templates to use new tokens.
- *
- * This function upgrades customized email templates from the old !token format
- * to the new core tokens format. Additionally, in Drupal 7 we no longer e-mail
- * plain text passwords to users, and there is no token for a plain text
- * password in the new token system. Therefore, it also modifies any saved
- * templates using the old '!password' token such that the token is removed, and
- * displays a warning to users that they may need to go and modify the wording
- * of their templates.
- */
-function user_update_7017() {
- $message = '';
-
- $tokens = array(
- '!site' => '[site:name]',
- '!username' => '[user:name]',
- '!mailto' => '[user:mail]',
- '!login_uri' => '[site:login-url]',
- '!uri_brief' => '[site:url-brief]',
- '!edit_uri' => '[user:edit-url]',
- '!login_url' => '[user:one-time-login-url]',
- '!uri' => '[site:url]',
- '!date' => '[date:medium]',
- '!password' => '',
- );
-
- $result = db_select('variable', 'v')
- ->fields('v', array('name'))
- ->condition('name', db_like('user_mail_') . '%', 'LIKE')
- ->execute();
-
- foreach ($result as $row) {
- // Use variable_get() to get the unserialized value for free.
- if ($value = variable_get($row->name, FALSE)) {
-
- if (empty($message) && (strpos($value, '!password') !== FALSE)) {
- $message = t('The ability to send users their passwords in plain text has been removed in Drupal 7. Your existing email templates have been modified to remove it. You should
review these templates to make sure they read properly.', array('@template-url' => url('admin/config/people/accounts')));
- }
-
- variable_set($row->name, str_replace(array_keys($tokens), $tokens, $value));
- }
- }
-
- return $message;
-}
-
-/**
- * Ensure there is an index on {users}.picture.
- */
-function user_update_7018() {
- if (!db_index_exists('users', 'picture')) {
- db_add_index('users', 'picture', array('picture'));
- }
-}
-
-/**
- * @} End of "addtogroup updates-7.x-extra".
- */
diff --git a/modules/user/user.js b/modules/user/user.js
deleted file mode 100644
index d182066..0000000
--- a/modules/user/user.js
+++ /dev/null
@@ -1,196 +0,0 @@
-(function ($) {
-
-/**
- * Attach handlers to evaluate the strength of any password fields and to check
- * that its confirmation is correct.
- */
-Drupal.behaviors.password = {
- attach: function (context, settings) {
- var translate = settings.password;
- $('input.password-field', context).once('password', function () {
- var passwordInput = $(this);
- var innerWrapper = $(this).parent();
- var outerWrapper = $(this).parent().parent();
-
- // Add identifying class to password element parent.
- innerWrapper.addClass('password-parent');
-
- // Add the password confirmation layer.
- $('input.password-confirm', outerWrapper).parent().prepend('
' + translate['confirmTitle'] + '
').addClass('confirm-parent');
- var confirmInput = $('input.password-confirm', outerWrapper);
- var confirmResult = $('div.password-confirm', outerWrapper);
- var confirmChild = $('span', confirmResult);
-
- // Add the description box.
- var passwordMeter = '
' + translate['strengthTitle'] + '
';
- $(confirmInput).parent().after('
');
- $(innerWrapper).prepend(passwordMeter);
- var passwordDescription = $('div.password-suggestions', outerWrapper).hide();
-
- // Check the password strength.
- var passwordCheck = function () {
-
- // Evaluate the password strength.
- var result = Drupal.evaluatePasswordStrength(passwordInput.val(), settings.password);
-
- // Update the suggestions for how to improve the password.
- if (passwordDescription.html() != result.message) {
- passwordDescription.html(result.message);
- }
-
- // Only show the description box if there is a weakness in the password.
- if (result.strength == 100) {
- passwordDescription.hide();
- }
- else {
- passwordDescription.show();
- }
-
- // Adjust the length of the strength indicator.
- $(innerWrapper).find('.indicator').css('width', result.strength + '%');
-
- // Update the strength indication text.
- $(innerWrapper).find('.password-strength-text').html(result.indicatorText);
-
- passwordCheckMatch();
- };
-
- // Check that password and confirmation inputs match.
- var passwordCheckMatch = function () {
-
- if (confirmInput.val()) {
- var success = passwordInput.val() === confirmInput.val();
-
- // Show the confirm result.
- confirmResult.css({ visibility: 'visible' });
-
- // Remove the previous styling if any exists.
- if (this.confirmClass) {
- confirmChild.removeClass(this.confirmClass);
- }
-
- // Fill in the success message and set the class accordingly.
- var confirmClass = success ? 'ok' : 'error';
- confirmChild.html(translate['confirm' + (success ? 'Success' : 'Failure')]).addClass(confirmClass);
- this.confirmClass = confirmClass;
- }
- else {
- confirmResult.css({ visibility: 'hidden' });
- }
- };
-
- // Monitor keyup and blur events.
- // Blur must be used because a mouse paste does not trigger keyup.
- passwordInput.keyup(passwordCheck).focus(passwordCheck).blur(passwordCheck);
- confirmInput.keyup(passwordCheckMatch).blur(passwordCheckMatch);
- });
- }
-};
-
-/**
- * Evaluate the strength of a user's password.
- *
- * Returns the estimated strength and the relevant output message.
- */
-Drupal.evaluatePasswordStrength = function (password, translate) {
- var weaknesses = 0, strength = 100, msg = [];
-
- var hasLowercase = /[a-z]+/.test(password);
- var hasUppercase = /[A-Z]+/.test(password);
- var hasNumbers = /[0-9]+/.test(password);
- var hasPunctuation = /[^a-zA-Z0-9]+/.test(password);
-
- // If there is a username edit box on the page, compare password to that, otherwise
- // use value from the database.
- var usernameBox = $('input.username');
- var username = (usernameBox.length > 0) ? usernameBox.val() : translate.username;
-
- // Lose 5 points for every character less than 6, plus a 30 point penalty.
- if (password.length < 6) {
- msg.push(translate.tooShort);
- strength -= ((6 - password.length) * 5) + 30;
- }
-
- // Count weaknesses.
- if (!hasLowercase) {
- msg.push(translate.addLowerCase);
- weaknesses++;
- }
- if (!hasUppercase) {
- msg.push(translate.addUpperCase);
- weaknesses++;
- }
- if (!hasNumbers) {
- msg.push(translate.addNumbers);
- weaknesses++;
- }
- if (!hasPunctuation) {
- msg.push(translate.addPunctuation);
- weaknesses++;
- }
-
- // Apply penalty for each weakness (balanced against length penalty).
- switch (weaknesses) {
- case 1:
- strength -= 12.5;
- break;
-
- case 2:
- strength -= 25;
- break;
-
- case 3:
- strength -= 40;
- break;
-
- case 4:
- strength -= 40;
- break;
- }
-
- // Check if password is the same as the username.
- if (password !== '' && password.toLowerCase() === username.toLowerCase()) {
- msg.push(translate.sameAsUsername);
- // Passwords the same as username are always very weak.
- strength = 5;
- }
-
- // Based on the strength, work out what text should be shown by the password strength meter.
- if (strength < 60) {
- indicatorText = translate.weak;
- } else if (strength < 70) {
- indicatorText = translate.fair;
- } else if (strength < 80) {
- indicatorText = translate.good;
- } else if (strength <= 100) {
- indicatorText = translate.strong;
- }
-
- // Assemble the final message.
- msg = translate.hasWeaknesses + '
';
- return { strength: strength, message: msg, indicatorText: indicatorText };
-
-};
-
-/**
- * Field instance settings screen: force the 'Display on registration form'
- * checkbox checked whenever 'Required' is checked.
- */
-Drupal.behaviors.fieldUserRegistration = {
- attach: function (context, settings) {
- var $checkbox = $('form#field-ui-field-edit-form input#edit-instance-settings-user-register-form');
-
- if ($checkbox.length) {
- $('input#edit-instance-required', context).once('user-register-form-checkbox', function () {
- $(this).bind('change', function (e) {
- if ($(this).attr('checked')) {
- $checkbox.attr('checked', true);
- }
- });
- });
-
- }
- }
-};
-
-})(jQuery);
diff --git a/modules/user/user.module b/modules/user/user.module
deleted file mode 100644
index 9637a71..0000000
--- a/modules/user/user.module
+++ /dev/null
@@ -1,4070 +0,0 @@
-' . t('About') . '';
- $output .= '
' . t('The User module allows users to register, log in, and log out. It also allows users with proper permissions to manage user roles (used to classify users) and permissions associated with those roles. For more information, see the online handbook entry for User module .', array('@user' => 'http://drupal.org/documentation/modules/user')) . '
';
- $output .= '
' . t('Uses') . ' ';
- $output .= '
';
- $output .= '' . t('Creating and managing users') . ' ';
- $output .= '' . t('The User module allows users with the appropriate permissions to create user accounts through the People administration page , where they can also assign users to one or more roles, and block or delete user accounts. If allowed, users without accounts (anonymous users) can create their own accounts on the Create new account page.', array('@permissions' => url('admin/people/permissions', array('fragment' => 'module-user')), '@people' => url('admin/people'), '@register' => url('user/register'))) . ' ';
- $output .= '' . t('User roles and permissions') . ' ';
- $output .= '' . t('Roles are used to group and classify users; each user can be assigned one or more roles. By default there are two roles: anonymous user (users that are not logged in) and authenticated user (users that are registered and logged in). Depending on choices you made when you installed Drupal, the installation process may have defined more roles, and you can create additional custom roles on the Roles page . After creating roles, you can set permissions for each role on the Permissions page . Granting a permission allows users who have been assigned a particular role to perform an action on the site, such as viewing a particular type of content, editing or creating content, administering settings for a particular module, or using a particular function of the site (such as search).', array('@permissions_user' => url('admin/people/permissions'), '@roles' => url('admin/people/permissions/roles'))) . ' ';
- $output .= '' . t('Account settings') . ' ';
- $output .= '' . t('The Account settings page allows you to manage settings for the displayed name of the anonymous user role, personal contact forms, user registration, and account cancellation. On this page you can also manage settings for account personalization (including signatures and user pictures), and adapt the text for the e-mail messages that are sent automatically during the user registration process.', array('@accounts' => url('admin/config/people/accounts'))) . ' ';
- $output .= ' ';
- return $output;
- case 'admin/people/create':
- return '
' . t("This web page allows administrators to register new users. Users' e-mail addresses and usernames must be unique.") . '
';
- case 'admin/people/permissions':
- return '
' . t('Permissions let you control what users can do and see on your site. You can define a specific set of permissions for each role. (See the Roles page to create a role). Two important roles to consider are Authenticated Users and Administrators. Any permissions granted to the Authenticated Users role will be given to any user who can log into your site. You can make any role the Administrator role for the site, meaning this will be granted all new permissions automatically. You can do this on the User Settings page. You should be careful to ensure that only trusted users are given this access and level of control of your site.', array('@role' => url('admin/people/permissions/roles'), '@settings' => url('admin/config/people/accounts'))) . '
';
- case 'admin/people/permissions/roles':
- $output = '
' . t('Roles allow you to fine tune the security and administration of Drupal. A role defines a group of users that have certain privileges as defined on the permissions page . Examples of roles include: anonymous user, authenticated user, moderator, administrator and so on. In this area you will define the names and order of the roles on your site. It is recommended to order your roles from least permissive (anonymous user) to most permissive (administrator). To delete a role choose "edit role".', array('@permissions' => url('admin/people/permissions'))) . '
';
- $output .= '
' . t('By default, Drupal comes with two user roles:') . '
';
- $output .= '
';
- $output .= '' . t("Anonymous user: this role is used for users that don't have a user account or that are not authenticated.") . ' ';
- $output .= '' . t('Authenticated user: this role is automatically granted to all logged in users.') . ' ';
- $output .= ' ';
- return $output;
- case 'admin/config/people/accounts/fields':
- return '
' . t('This form lets administrators add, edit, and arrange fields for storing user data.') . '
';
- case 'admin/config/people/accounts/display':
- return '
' . t('This form lets administrators configure how fields should be displayed when rendering a user profile page.') . '
';
- case 'admin/people/search':
- return '
' . t('Enter a simple pattern ("*" may be used as a wildcard match) to search for a username or e-mail address. For example, one may search for "br" and Drupal might return "brian", "brad", and "brenda@example.com".') . '
';
- }
-}
-
-/**
- * Invokes a user hook in every module.
- *
- * We cannot use module_invoke() for this, because the arguments need to
- * be passed by reference.
- *
- * @param $type
- * A text string that controls which user hook to invoke. Valid choices are:
- * - cancel: Invokes hook_user_cancel().
- * - insert: Invokes hook_user_insert().
- * - login: Invokes hook_user_login().
- * - presave: Invokes hook_user_presave().
- * - update: Invokes hook_user_update().
- * @param $edit
- * An associative array variable containing form values to be passed
- * as the first parameter of the hook function.
- * @param $account
- * The user account object to be passed as the second parameter of the hook
- * function.
- * @param $category
- * The category of user information being acted upon.
- */
-function user_module_invoke($type, &$edit, $account, $category = NULL) {
- foreach (module_implements('user_' . $type) as $module) {
- $function = $module . '_user_' . $type;
- $function($edit, $account, $category);
- }
-}
-
-/**
- * Implements hook_theme().
- */
-function user_theme() {
- return array(
- 'user_picture' => array(
- 'variables' => array('account' => NULL),
- 'template' => 'user-picture',
- ),
- 'user_profile' => array(
- 'render element' => 'elements',
- 'template' => 'user-profile',
- 'file' => 'user.pages.inc',
- ),
- 'user_profile_category' => array(
- 'render element' => 'element',
- 'template' => 'user-profile-category',
- 'file' => 'user.pages.inc',
- ),
- 'user_profile_item' => array(
- 'render element' => 'element',
- 'template' => 'user-profile-item',
- 'file' => 'user.pages.inc',
- ),
- 'user_list' => array(
- 'variables' => array('users' => NULL, 'title' => NULL),
- ),
- 'user_admin_permissions' => array(
- 'render element' => 'form',
- 'file' => 'user.admin.inc',
- ),
- 'user_admin_roles' => array(
- 'render element' => 'form',
- 'file' => 'user.admin.inc',
- ),
- 'user_permission_description' => array(
- 'variables' => array('permission_item' => NULL, 'hide' => NULL),
- 'file' => 'user.admin.inc',
- ),
- 'user_signature' => array(
- 'variables' => array('signature' => NULL),
- ),
- );
-}
-
-/**
- * Implements hook_entity_info().
- */
-function user_entity_info() {
- $return = array(
- 'user' => array(
- 'label' => t('User'),
- 'controller class' => 'UserController',
- 'base table' => 'users',
- 'uri callback' => 'user_uri',
- 'label callback' => 'format_username',
- 'fieldable' => TRUE,
- // $user->language is only the preferred user language for the user
- // interface textual elements. As it is not necessarily related to the
- // language assigned to fields, we do not define it as the entity language
- // key.
- 'entity keys' => array(
- 'id' => 'uid',
- ),
- 'bundles' => array(
- 'user' => array(
- 'label' => t('User'),
- 'admin' => array(
- 'path' => 'admin/config/people/accounts',
- 'access arguments' => array('administer users'),
- ),
- ),
- ),
- 'view modes' => array(
- 'full' => array(
- 'label' => t('User account'),
- 'custom settings' => FALSE,
- ),
- ),
- ),
- );
- return $return;
-}
-
-/**
- * Implements callback_entity_info_uri().
- */
-function user_uri($user) {
- return array(
- 'path' => 'user/' . $user->uid,
- );
-}
-
-/**
- * Implements hook_field_info_alter().
- */
-function user_field_info_alter(&$info) {
- // Add the 'user_register_form' instance setting to all field types.
- foreach ($info as $field_type => &$field_type_info) {
- $field_type_info += array('instance_settings' => array());
- $field_type_info['instance_settings'] += array(
- 'user_register_form' => FALSE,
- );
- }
-}
-
-/**
- * Implements hook_field_extra_fields().
- */
-function user_field_extra_fields() {
- $return['user']['user'] = array(
- 'form' => array(
- 'account' => array(
- 'label' => t('User name and password'),
- 'description' => t('User module account form elements.'),
- 'weight' => -10,
- ),
- 'timezone' => array(
- 'label' => t('Timezone'),
- 'description' => t('User module timezone form element.'),
- 'weight' => 6,
- ),
- ),
- 'display' => array(
- 'summary' => array(
- 'label' => t('History'),
- 'description' => t('User module history view element.'),
- 'weight' => 5,
- ),
- ),
- );
-
- return $return;
-}
-
-/**
- * Fetches a user object based on an external authentication source.
- *
- * @param string $authname
- * The external authentication username.
- *
- * @return
- * A fully-loaded user object if the user is found or FALSE if not found.
- */
-function user_external_load($authname) {
- $uid = db_query("SELECT uid FROM {authmap} WHERE authname = :authname", array(':authname' => $authname))->fetchField();
-
- if ($uid) {
- return user_load($uid);
- }
- else {
- return FALSE;
- }
-}
-
-/**
- * Load multiple users based on certain conditions.
- *
- * This function should be used whenever you need to load more than one user
- * from the database. Users are loaded into memory and will not require
- * database access if loaded again during the same page request.
- *
- * @param $uids
- * An array of user IDs.
- * @param $conditions
- * (deprecated) An associative array of conditions on the {users}
- * table, where the keys are the database fields and the values are the
- * values those fields must have. Instead, it is preferable to use
- * EntityFieldQuery to retrieve a list of entity IDs loadable by
- * this function.
- * @param $reset
- * A boolean indicating that the internal cache should be reset. Use this if
- * loading a user object which has been altered during the page request.
- *
- * @return
- * An array of user objects, indexed by uid.
- *
- * @see entity_load()
- * @see user_load()
- * @see user_load_by_mail()
- * @see user_load_by_name()
- * @see EntityFieldQuery
- *
- * @todo Remove $conditions in Drupal 8.
- */
-function user_load_multiple($uids = array(), $conditions = array(), $reset = FALSE) {
- return entity_load('user', $uids, $conditions, $reset);
-}
-
-/**
- * Controller class for users.
- *
- * This extends the DrupalDefaultEntityController class, adding required
- * special handling for user objects.
- */
-class UserController extends DrupalDefaultEntityController {
-
- function attachLoad(&$queried_users, $revision_id = FALSE) {
- // Build an array of user picture IDs so that these can be fetched later.
- $picture_fids = array();
- foreach ($queried_users as $key => $record) {
- $picture_fids[] = $record->picture;
- $queried_users[$key]->data = unserialize($record->data);
- $queried_users[$key]->roles = array();
- if ($record->uid) {
- $queried_users[$record->uid]->roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user';
- }
- else {
- $queried_users[$record->uid]->roles[DRUPAL_ANONYMOUS_RID] = 'anonymous user';
- }
- }
-
- // Add any additional roles from the database.
- $result = db_query('SELECT r.rid, r.name, ur.uid FROM {role} r INNER JOIN {users_roles} ur ON ur.rid = r.rid WHERE ur.uid IN (:uids)', array(':uids' => array_keys($queried_users)));
- foreach ($result as $record) {
- $queried_users[$record->uid]->roles[$record->rid] = $record->name;
- }
-
- // Add the full file objects for user pictures if enabled.
- if (!empty($picture_fids) && variable_get('user_pictures', 0)) {
- $pictures = file_load_multiple($picture_fids);
- foreach ($queried_users as $account) {
- if (!empty($account->picture) && isset($pictures[$account->picture])) {
- $account->picture = $pictures[$account->picture];
- }
- else {
- $account->picture = NULL;
- }
- }
- }
- // Call the default attachLoad() method. This will add fields and call
- // hook_user_load().
- parent::attachLoad($queried_users, $revision_id);
- }
-}
-
-/**
- * Loads a user object.
- *
- * Drupal has a global $user object, which represents the currently-logged-in
- * user. So to avoid confusion and to avoid clobbering the global $user object,
- * it is a good idea to assign the result of this function to a different local
- * variable, generally $account. If you actually do want to act as the user you
- * are loading, it is essential to call drupal_save_session(FALSE); first.
- * See
- * @link http://drupal.org/node/218104 Safely impersonating another user @endlink
- * for more information.
- *
- * @param $uid
- * Integer specifying the user ID to load.
- * @param $reset
- * TRUE to reset the internal cache and load from the database; FALSE
- * (default) to load from the internal cache, if set.
- *
- * @return
- * A fully-loaded user object upon successful user load, or FALSE if the user
- * cannot be loaded.
- *
- * @see user_load_multiple()
- */
-function user_load($uid, $reset = FALSE) {
- $users = user_load_multiple(array($uid), array(), $reset);
- return reset($users);
-}
-
-/**
- * Fetch a user object by email address.
- *
- * @param $mail
- * String with the account's e-mail address.
- * @return
- * A fully-loaded $user object upon successful user load or FALSE if user
- * cannot be loaded.
- *
- * @see user_load_multiple()
- */
-function user_load_by_mail($mail) {
- $users = user_load_multiple(array(), array('mail' => $mail));
- return reset($users);
-}
-
-/**
- * Fetch a user object by account name.
- *
- * @param $name
- * String with the account's user name.
- * @return
- * A fully-loaded $user object upon successful user load or FALSE if user
- * cannot be loaded.
- *
- * @see user_load_multiple()
- */
-function user_load_by_name($name) {
- $users = user_load_multiple(array(), array('name' => $name));
- return reset($users);
-}
-
-/**
- * Save changes to a user account or add a new user.
- *
- * @param $account
- * (optional) The user object to modify or add. If you want to modify
- * an existing user account, you will need to ensure that (a) $account
- * is an object, and (b) you have set $account->uid to the numeric
- * user ID of the user account you wish to modify. If you
- * want to create a new user account, you can set $account->is_new to
- * TRUE or omit the $account->uid field.
- * @param $edit
- * An array of fields and values to save. For example array('name'
- * => 'My name'). Key / value pairs added to the $edit['data'] will be
- * serialized and saved in the {users.data} column.
- * @param $category
- * (optional) The category for storing profile information in.
- *
- * @return
- * A fully-loaded $user object upon successful save or FALSE if the save failed.
- *
- * @todo D8: Drop $edit and fix user_save() to be consistent with others.
- */
-function user_save($account, $edit = array(), $category = 'account') {
- $transaction = db_transaction();
- try {
- if (!empty($edit['pass'])) {
- // Allow alternate password hashing schemes.
- require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
- $edit['pass'] = user_hash_password(trim($edit['pass']));
- // Abort if the hashing failed and returned FALSE.
- if (!$edit['pass']) {
- return FALSE;
- }
- }
- else {
- // Avoid overwriting an existing password with a blank password.
- unset($edit['pass']);
- }
- if (isset($edit['mail'])) {
- $edit['mail'] = trim($edit['mail']);
- }
-
- // Load the stored entity, if any.
- if (!empty($account->uid) && !isset($account->original)) {
- $account->original = entity_load_unchanged('user', $account->uid);
- }
-
- if (empty($account)) {
- $account = new stdClass();
- }
- if (!isset($account->is_new)) {
- $account->is_new = empty($account->uid);
- }
- // Prepopulate $edit['data'] with the current value of $account->data.
- // Modules can add to or remove from this array in hook_user_presave().
- if (!empty($account->data)) {
- $edit['data'] = !empty($edit['data']) ? array_merge($account->data, $edit['data']) : $account->data;
- }
-
- // Invoke hook_user_presave() for all modules.
- user_module_invoke('presave', $edit, $account, $category);
-
- // Invoke presave operations of Field Attach API and Entity API. Those APIs
- // require a fully-fledged and updated entity object. Therefore, we need to
- // copy any new property values of $edit into it.
- foreach ($edit as $key => $value) {
- $account->$key = $value;
- }
- field_attach_presave('user', $account);
- module_invoke_all('entity_presave', $account, 'user');
-
- if (is_object($account) && !$account->is_new) {
- // Process picture uploads.
- if (!empty($account->picture->fid) && (!isset($account->original->picture->fid) || $account->picture->fid != $account->original->picture->fid)) {
- $picture = $account->picture;
- // If the picture is a temporary file move it to its final location and
- // make it permanent.
- if (!$picture->status) {
- $info = image_get_info($picture->uri);
- $picture_directory = file_default_scheme() . '://' . variable_get('user_picture_path', 'pictures');
-
- // Prepare the pictures directory.
- file_prepare_directory($picture_directory, FILE_CREATE_DIRECTORY);
- $destination = file_stream_wrapper_uri_normalize($picture_directory . '/picture-' . $account->uid . '-' . REQUEST_TIME . '.' . $info['extension']);
-
- // Move the temporary file into the final location.
- if ($picture = file_move($picture, $destination, FILE_EXISTS_RENAME)) {
- $picture->status = FILE_STATUS_PERMANENT;
- $account->picture = file_save($picture);
- file_usage_add($picture, 'user', 'user', $account->uid);
- }
- }
- // Delete the previous picture if it was deleted or replaced.
- if (!empty($account->original->picture->fid)) {
- file_usage_delete($account->original->picture, 'user', 'user', $account->uid);
- file_delete($account->original->picture);
- }
- }
- elseif (isset($edit['picture_delete']) && $edit['picture_delete']) {
- file_usage_delete($account->original->picture, 'user', 'user', $account->uid);
- file_delete($account->original->picture);
- }
- // Save the picture object, if it is set. drupal_write_record() expects
- // $account->picture to be a FID.
- $picture = empty($account->picture) ? NULL : $account->picture;
- $account->picture = empty($account->picture->fid) ? 0 : $account->picture->fid;
-
- // Do not allow 'uid' to be changed.
- $account->uid = $account->original->uid;
- // Save changes to the user table.
- $success = drupal_write_record('users', $account, 'uid');
- // Restore the picture object.
- $account->picture = $picture;
- if ($success === FALSE) {
- // The query failed - better to abort the save than risk further
- // data loss.
- return FALSE;
- }
-
- // Reload user roles if provided.
- if ($account->roles != $account->original->roles) {
- db_delete('users_roles')
- ->condition('uid', $account->uid)
- ->execute();
-
- $query = db_insert('users_roles')->fields(array('uid', 'rid'));
- foreach (array_keys($account->roles) as $rid) {
- if (!in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
- $query->values(array(
- 'uid' => $account->uid,
- 'rid' => $rid,
- ));
- }
- }
- $query->execute();
- }
-
- // Delete a blocked user's sessions to kick them if they are online.
- if ($account->original->status != $account->status && $account->status == 0) {
- drupal_session_destroy_uid($account->uid);
- }
-
- // If the password changed, delete all open sessions and recreate
- // the current one.
- if ($account->pass != $account->original->pass) {
- drupal_session_destroy_uid($account->uid);
- if ($account->uid == $GLOBALS['user']->uid) {
- drupal_session_regenerate();
- }
- }
-
- // Save Field data.
- field_attach_update('user', $account);
-
- // Send emails after we have the new user object.
- if ($account->status != $account->original->status) {
- // The user's status is changing; conditionally send notification email.
- $op = $account->status == 1 ? 'status_activated' : 'status_blocked';
- _user_mail_notify($op, $account);
- }
-
- // Update $edit with any interim changes to $account.
- foreach ($account as $key => $value) {
- if (!property_exists($account->original, $key) || $value !== $account->original->$key) {
- $edit[$key] = $value;
- }
- }
- user_module_invoke('update', $edit, $account, $category);
- module_invoke_all('entity_update', $account, 'user');
- }
- else {
- // Allow 'uid' to be set by the caller. There is no danger of writing an
- // existing user as drupal_write_record will do an INSERT.
- if (empty($account->uid)) {
- $account->uid = db_next_id(db_query('SELECT MAX(uid) FROM {users}')->fetchField());
- }
- // Allow 'created' to be set by the caller.
- if (!isset($account->created)) {
- $account->created = REQUEST_TIME;
- }
- $success = drupal_write_record('users', $account);
- if ($success === FALSE) {
- // On a failed INSERT some other existing user's uid may be returned.
- // We must abort to avoid overwriting their account.
- return FALSE;
- }
-
- // Make sure $account is properly initialized.
- $account->roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user';
-
- field_attach_insert('user', $account);
- $edit = (array) $account;
- user_module_invoke('insert', $edit, $account, $category);
- module_invoke_all('entity_insert', $account, 'user');
-
- // Save user roles. Skip built-in roles, and ones that were already saved
- // to the database during hook calls.
- $rids_to_skip = array_merge(array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID), db_query('SELECT rid FROM {users_roles} WHERE uid = :uid', array(':uid' => $account->uid))->fetchCol());
- if ($rids_to_save = array_diff(array_keys($account->roles), $rids_to_skip)) {
- $query = db_insert('users_roles')->fields(array('uid', 'rid'));
- foreach ($rids_to_save as $rid) {
- $query->values(array(
- 'uid' => $account->uid,
- 'rid' => $rid,
- ));
- }
- $query->execute();
- }
- }
- // Clear internal properties.
- unset($account->is_new);
- unset($account->original);
- // Clear the static loading cache.
- entity_get_controller('user')->resetCache(array($account->uid));
-
- return $account;
- }
- catch (Exception $e) {
- $transaction->rollback();
- watchdog_exception('user', $e);
- throw $e;
- }
-}
-
-/**
- * Verify the syntax of the given name.
- */
-function user_validate_name($name) {
- if (!$name) {
- return t('You must enter a username.');
- }
- if (substr($name, 0, 1) == ' ') {
- return t('The username cannot begin with a space.');
- }
- if (substr($name, -1) == ' ') {
- return t('The username cannot end with a space.');
- }
- if (strpos($name, ' ') !== FALSE) {
- return t('The username cannot contain multiple spaces in a row.');
- }
- if (preg_match('/[^\x{80}-\x{F7} a-z0-9@_.\'-]/i', $name)) {
- return t('The username contains an illegal character.');
- }
- if (preg_match('/[\x{80}-\x{A0}' . // Non-printable ISO-8859-1 + NBSP
- '\x{AD}' . // Soft-hyphen
- '\x{2000}-\x{200F}' . // Various space characters
- '\x{2028}-\x{202F}' . // Bidirectional text overrides
- '\x{205F}-\x{206F}' . // Various text hinting characters
- '\x{FEFF}' . // Byte order mark
- '\x{FF01}-\x{FF60}' . // Full-width latin
- '\x{FFF9}-\x{FFFD}' . // Replacement characters
- '\x{0}-\x{1F}]/u', // NULL byte and control characters
- $name)) {
- return t('The username contains an illegal character.');
- }
- if (drupal_strlen($name) > USERNAME_MAX_LENGTH) {
- return t('The username %name is too long: it must be %max characters or less.', array('%name' => $name, '%max' => USERNAME_MAX_LENGTH));
- }
-}
-
-/**
- * Validates a user's email address.
- *
- * Checks that a user's email address exists and follows all standard
- * validation rules. Returns error messages when the address is invalid.
- *
- * @param $mail
- * A user's email address.
- *
- * @return
- * If the address is invalid, a human-readable error message is returned.
- * If the address is valid, nothing is returned.
- */
-function user_validate_mail($mail) {
- if (!$mail) {
- return t('You must enter an e-mail address.');
- }
- if (!valid_email_address($mail)) {
- return t('The e-mail address %mail is not valid.', array('%mail' => $mail));
- }
-}
-
-/**
- * Validates an image uploaded by a user.
- *
- * @see user_account_form()
- */
-function user_validate_picture(&$form, &$form_state) {
- // If required, validate the uploaded picture.
- $validators = array(
- 'file_validate_is_image' => array(),
- 'file_validate_image_resolution' => array(variable_get('user_picture_dimensions', '85x85')),
- 'file_validate_size' => array(variable_get('user_picture_file_size', '30') * 1024),
- );
-
- // Save the file as a temporary file.
- $file = file_save_upload('picture_upload', $validators);
- if ($file === FALSE) {
- form_set_error('picture_upload', t("Failed to upload the picture image; the %directory directory doesn't exist or is not writable.", array('%directory' => variable_get('user_picture_path', 'pictures'))));
- }
- elseif ($file !== NULL) {
- $form_state['values']['picture_upload'] = $file;
- }
-}
-
-/**
- * Generate a random alphanumeric password.
- */
-function user_password($length = 10) {
- // This variable contains the list of allowable characters for the
- // password. Note that the number 0 and the letter 'O' have been
- // removed to avoid confusion between the two. The same is true
- // of 'I', 1, and 'l'.
- $allowable_characters = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
-
- // Zero-based count of characters in the allowable list:
- $len = strlen($allowable_characters) - 1;
-
- // Declare the password as a blank string.
- $pass = '';
-
- // Loop the number of times specified by $length.
- for ($i = 0; $i < $length; $i++) {
- do {
- // Find a secure random number within the range needed.
- $index = ord(drupal_random_bytes(1));
- } while ($index > $len);
-
- // Each iteration, pick a random character from the
- // allowable string and append it to the password:
- $pass .= $allowable_characters[$index];
- }
-
- return $pass;
-}
-
-/**
- * Determine the permissions for one or more roles.
- *
- * @param $roles
- * An array whose keys are the role IDs of interest, such as $user->roles.
- *
- * @return
- * If $roles is a non-empty array, an array indexed by role ID is returned.
- * Each value is an array whose keys are the permission strings for the given
- * role ID. If $roles is empty nothing is returned.
- */
-function user_role_permissions($roles = array()) {
- $cache = &drupal_static(__FUNCTION__, array());
-
- $role_permissions = $fetch = array();
-
- if ($roles) {
- foreach ($roles as $rid => $name) {
- if (isset($cache[$rid])) {
- $role_permissions[$rid] = $cache[$rid];
- }
- else {
- // Add this rid to the list of those needing to be fetched.
- $fetch[] = $rid;
- // Prepare in case no permissions are returned.
- $cache[$rid] = array();
- }
- }
-
- if ($fetch) {
- // Get from the database permissions that were not in the static variable.
- // Only role IDs with at least one permission assigned will return rows.
- $result = db_query("SELECT rid, permission FROM {role_permission} WHERE rid IN (:fetch)", array(':fetch' => $fetch));
-
- foreach ($result as $row) {
- $cache[$row->rid][$row->permission] = TRUE;
- }
- foreach ($fetch as $rid) {
- // For every rid, we know we at least assigned an empty array.
- $role_permissions[$rid] = $cache[$rid];
- }
- }
- }
-
- return $role_permissions;
-}
-
-/**
- * Determine whether the user has a given privilege.
- *
- * @param $string
- * The permission, such as "administer nodes", being checked for.
- * @param $account
- * (optional) The account to check, if not given use currently logged in user.
- *
- * @return
- * Boolean TRUE if the current user has the requested permission.
- *
- * All permission checks in Drupal should go through this function. This
- * way, we guarantee consistent behavior, and ensure that the superuser
- * can perform all actions.
- */
-function user_access($string, $account = NULL) {
- global $user;
-
- if (!isset($account)) {
- $account = $user;
- }
-
- // User #1 has all privileges:
- if ($account->uid == 1) {
- return TRUE;
- }
-
- // To reduce the number of SQL queries, we cache the user's permissions
- // in a static variable.
- // Use the advanced drupal_static() pattern, since this is called very often.
- static $drupal_static_fast;
- if (!isset($drupal_static_fast)) {
- $drupal_static_fast['perm'] = &drupal_static(__FUNCTION__);
- }
- $perm = &$drupal_static_fast['perm'];
- if (!isset($perm[$account->uid])) {
- $role_permissions = user_role_permissions($account->roles);
-
- $perms = array();
- foreach ($role_permissions as $one_role) {
- $perms += $one_role;
- }
- $perm[$account->uid] = $perms;
- }
-
- return isset($perm[$account->uid][$string]);
-}
-
-/**
- * Checks for usernames blocked by user administration.
- *
- * @param $name
- * A string containing a name of the user.
- *
- * @return
- * Object with property 'name' (the user name), if the user is blocked;
- * FALSE if the user is not blocked.
- */
-function user_is_blocked($name) {
- return db_select('users')
- ->fields('users', array('name'))
- ->condition('name', db_like($name), 'LIKE')
- ->condition('status', 0)
- ->execute()->fetchObject();
-}
-
-/**
- * Checks if a user has a role.
- *
- * @param int $rid
- * A role ID.
- *
- * @param object|null $account
- * (optional) A user account. Defaults to the current user.
- *
- * @return bool
- * TRUE if the user has the role, or FALSE if not.
- */
-function user_has_role($rid, $account = NULL) {
- if (!$account) {
- $account = $GLOBALS['user'];
- }
-
- return isset($account->roles[$rid]);
-}
-
-/**
- * Implements hook_permission().
- */
-function user_permission() {
- return array(
- 'administer permissions' => array(
- 'title' => t('Administer permissions'),
- 'restrict access' => TRUE,
- ),
- 'administer users' => array(
- 'title' => t('Administer users'),
- 'restrict access' => TRUE,
- ),
- 'access user profiles' => array(
- 'title' => t('View user profiles'),
- ),
- 'change own username' => array(
- 'title' => t('Change own username'),
- ),
- 'cancel account' => array(
- 'title' => t('Cancel own user account'),
- 'description' => t('Note: content may be kept, unpublished, deleted or transferred to the %anonymous-name user depending on the configured
user settings .', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')), '@user-settings-url' => url('admin/config/people/accounts'))),
- ),
- 'select account cancellation method' => array(
- 'title' => t('Select method for cancelling own account'),
- 'restrict access' => TRUE,
- ),
- );
-}
-
-/**
- * Implements hook_file_download().
- *
- * Ensure that user pictures (avatars) are always downloadable.
- */
-function user_file_download($uri) {
- if (strpos(file_uri_target($uri), variable_get('user_picture_path', 'pictures') . '/picture-') === 0) {
- $info = image_get_info($uri);
- return array('Content-Type' => $info['mime_type']);
- }
-}
-
-/**
- * Implements hook_file_move().
- */
-function user_file_move($file, $source) {
- // If a user's picture is replaced with a new one, update the record in
- // the users table.
- if (isset($file->fid) && isset($source->fid) && $file->fid != $source->fid) {
- db_update('users')
- ->fields(array(
- 'picture' => $file->fid,
- ))
- ->condition('picture', $source->fid)
- ->execute();
- }
-}
-
-/**
- * Implements hook_file_delete().
- */
-function user_file_delete($file) {
- // Remove any references to the file.
- db_update('users')
- ->fields(array('picture' => 0))
- ->condition('picture', $file->fid)
- ->execute();
-}
-
-/**
- * Implements hook_search_info().
- */
-function user_search_info() {
- return array(
- 'title' => 'Users',
- );
-}
-
-/**
- * Implements hook_search_access().
- */
-function user_search_access() {
- return user_access('access user profiles');
-}
-
-/**
- * Implements hook_search_execute().
- */
-function user_search_execute($keys = NULL, $conditions = NULL) {
- $find = array();
- // Replace wildcards with MySQL/PostgreSQL wildcards.
- $keys = preg_replace('!\*+!', '%', $keys);
- $query = db_select('users')->extend('PagerDefault');
- $query->fields('users', array('uid'));
- if (user_access('administer users')) {
- // Administrators can also search in the otherwise private email field,
- // and they don't need to be restricted to only active users.
- $query->fields('users', array('mail'));
- $query->condition(db_or()->
- condition('name', '%' . db_like($keys) . '%', 'LIKE')->
- condition('mail', '%' . db_like($keys) . '%', 'LIKE'));
- }
- else {
- // Regular users can only search via usernames, and we do not show them
- // blocked accounts.
- $query->condition('name', '%' . db_like($keys) . '%', 'LIKE')
- ->condition('status', 1);
- }
- $uids = $query
- ->limit(15)
- ->execute()
- ->fetchCol();
- $accounts = user_load_multiple($uids);
-
- $results = array();
- foreach ($accounts as $account) {
- $result = array(
- 'title' => format_username($account),
- 'link' => url('user/' . $account->uid, array('absolute' => TRUE)),
- );
- if (user_access('administer users')) {
- $result['title'] .= ' (' . $account->mail . ')';
- }
- $results[] = $result;
- }
-
- return $results;
-}
-
-/**
- * Implements hook_element_info().
- */
-function user_element_info() {
- $types['user_profile_category'] = array(
- '#theme_wrappers' => array('user_profile_category'),
- );
- $types['user_profile_item'] = array(
- '#theme' => 'user_profile_item',
- );
- return $types;
-}
-
-/**
- * Implements hook_user_view().
- */
-function user_user_view($account) {
- $account->content['user_picture'] = array(
- '#markup' => theme('user_picture', array('account' => $account)),
- '#weight' => -10,
- );
- if (!isset($account->content['summary'])) {
- $account->content['summary'] = array();
- }
- $account->content['summary'] += array(
- '#type' => 'user_profile_category',
- '#attributes' => array('class' => array('user-member')),
- '#weight' => 5,
- '#title' => t('History'),
- );
- $account->content['summary']['member_for'] = array(
- '#type' => 'user_profile_item',
- '#title' => t('Member for'),
- '#markup' => format_interval(REQUEST_TIME - $account->created),
- );
-}
-
-/**
- * Helper function to add default user account fields to user registration and edit form.
- *
- * @see user_account_form_validate()
- * @see user_validate_current_pass()
- * @see user_validate_picture()
- * @see user_validate_mail()
- */
-function user_account_form(&$form, &$form_state) {
- global $user;
-
- $account = $form['#user'];
- $register = ($form['#user']->uid > 0 ? FALSE : TRUE);
-
- $admin = user_access('administer users');
-
- $form['#validate'][] = 'user_account_form_validate';
-
- // Account information.
- $form['account'] = array(
- '#type' => 'container',
- '#weight' => -10,
- );
- // Only show name field on registration form or user can change own username.
- $form['account']['name'] = array(
- '#type' => 'textfield',
- '#title' => t('Username'),
- '#maxlength' => USERNAME_MAX_LENGTH,
- '#description' => t('Spaces are allowed; punctuation is not allowed except for periods, hyphens, apostrophes, and underscores.'),
- '#required' => TRUE,
- '#attributes' => array('class' => array('username')),
- '#default_value' => (!$register ? $account->name : ''),
- '#access' => ($register || ($user->uid == $account->uid && user_access('change own username')) || $admin),
- '#weight' => -10,
- );
-
- $form['account']['mail'] = array(
- '#type' => 'textfield',
- '#title' => t('E-mail address'),
- '#maxlength' => EMAIL_MAX_LENGTH,
- '#description' => t('A valid e-mail address. All e-mails from the system will be sent to this address. The e-mail address is not made public and will only be used if you wish to receive a new password or wish to receive certain news or notifications by e-mail.'),
- '#required' => TRUE,
- '#default_value' => (!$register ? $account->mail : ''),
- );
-
- // Display password field only for existing users or when user is allowed to
- // assign a password during registration.
- if (!$register) {
- $form['account']['pass'] = array(
- '#type' => 'password_confirm',
- '#size' => 25,
- '#description' => t('To change the current user password, enter the new password in both fields.'),
- );
- // To skip the current password field, the user must have logged in via a
- // one-time link and have the token in the URL.
- $pass_reset = isset($_SESSION['pass_reset_' . $account->uid]) && isset($_GET['pass-reset-token']) && ($_GET['pass-reset-token'] == $_SESSION['pass_reset_' . $account->uid]);
- $protected_values = array();
- $current_pass_description = '';
- // The user may only change their own password without their current
- // password if they logged in via a one-time login link.
- if (!$pass_reset) {
- $protected_values['mail'] = $form['account']['mail']['#title'];
- $protected_values['pass'] = t('Password');
- $request_new = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'))));
- $current_pass_description = t('Enter your current password to change the %mail or %pass. !request_new.', array('%mail' => $protected_values['mail'], '%pass' => $protected_values['pass'], '!request_new' => $request_new));
- }
- // The user must enter their current password to change to a new one.
- if ($user->uid == $account->uid) {
- $form['account']['current_pass_required_values'] = array(
- '#type' => 'value',
- '#value' => $protected_values,
- );
- $form['account']['current_pass'] = array(
- '#type' => 'password',
- '#title' => t('Current password'),
- '#size' => 25,
- '#access' => !empty($protected_values),
- '#description' => $current_pass_description,
- '#weight' => -5,
- // Do not let web browsers remember this password, since we are trying
- // to confirm that the person submitting the form actually knows the
- // current one.
- '#attributes' => array('autocomplete' => 'off'),
- );
- $form['#validate'][] = 'user_validate_current_pass';
- }
- }
- elseif (!variable_get('user_email_verification', TRUE) || $admin) {
- $form['account']['pass'] = array(
- '#type' => 'password_confirm',
- '#size' => 25,
- '#description' => t('Provide a password for the new account in both fields.'),
- '#required' => TRUE,
- );
- }
-
- if ($admin) {
- $status = isset($account->status) ? $account->status : 1;
- }
- else {
- $status = $register ? variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) == USER_REGISTER_VISITORS : $account->status;
- }
- $form['account']['status'] = array(
- '#type' => 'radios',
- '#title' => t('Status'),
- '#default_value' => $status,
- '#options' => array(t('Blocked'), t('Active')),
- '#access' => $admin,
- );
-
- $roles = array_map('check_plain', user_roles(TRUE));
- // The disabled checkbox subelement for the 'authenticated user' role
- // must be generated separately and added to the checkboxes element,
- // because of a limitation in Form API not supporting a single disabled
- // checkbox within a set of checkboxes.
- // @todo This should be solved more elegantly. See issue #119038.
- $checkbox_authenticated = array(
- '#type' => 'checkbox',
- '#title' => $roles[DRUPAL_AUTHENTICATED_RID],
- '#default_value' => TRUE,
- '#disabled' => TRUE,
- );
- unset($roles[DRUPAL_AUTHENTICATED_RID]);
- $form['account']['roles'] = array(
- '#type' => 'checkboxes',
- '#title' => t('Roles'),
- '#default_value' => (!$register && isset($account->roles) ? array_keys($account->roles) : array()),
- '#options' => $roles,
- '#access' => $roles && user_access('administer permissions'),
- DRUPAL_AUTHENTICATED_RID => $checkbox_authenticated,
- );
-
- $form['account']['notify'] = array(
- '#type' => 'checkbox',
- '#title' => t('Notify user of new account'),
- '#access' => $register && $admin,
- );
-
- // Signature.
- $form['signature_settings'] = array(
- '#type' => 'fieldset',
- '#title' => t('Signature settings'),
- '#weight' => 1,
- '#access' => (!$register && variable_get('user_signatures', 0)),
- );
-
- $form['signature_settings']['signature'] = array(
- '#type' => 'text_format',
- '#title' => t('Signature'),
- '#default_value' => isset($account->signature) ? $account->signature : '',
- '#description' => t('Your signature will be publicly displayed at the end of your comments.'),
- '#format' => isset($account->signature_format) ? $account->signature_format : NULL,
- );
-
- // Picture/avatar.
- $form['picture'] = array(
- '#type' => 'fieldset',
- '#title' => t('Picture'),
- '#weight' => 1,
- '#access' => (!$register && variable_get('user_pictures', 0)),
- );
- $form['picture']['picture'] = array(
- '#type' => 'value',
- '#value' => isset($account->picture) ? $account->picture : NULL,
- );
- $form['picture']['picture_current'] = array(
- '#markup' => theme('user_picture', array('account' => $account)),
- );
- $form['picture']['picture_delete'] = array(
- '#type' => 'checkbox',
- '#title' => t('Delete picture'),
- '#access' => !empty($account->picture->fid),
- '#description' => t('Check this box to delete your current picture.'),
- );
- $form['picture']['picture_upload'] = array(
- '#type' => 'file',
- '#title' => t('Upload picture'),
- '#size' => 48,
- '#description' => t('Your virtual face or picture. Pictures larger than @dimensions pixels will be scaled down.', array('@dimensions' => variable_get('user_picture_dimensions', '85x85'))) . ' ' . filter_xss_admin(variable_get('user_picture_guidelines', '')),
- );
- $form['#validate'][] = 'user_validate_picture';
-}
-
-/**
- * Form validation handler for the current password on the user_account_form().
- *
- * @see user_account_form()
- */
-function user_validate_current_pass(&$form, &$form_state) {
- $account = $form['#user'];
- foreach ($form_state['values']['current_pass_required_values'] as $key => $name) {
- // This validation only works for required textfields (like mail) or
- // form values like password_confirm that have their own validation
- // that prevent them from being empty if they are changed.
- if ((strlen(trim($form_state['values'][$key])) > 0) && ($form_state['values'][$key] != $account->$key)) {
- require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
- $current_pass_failed = empty($form_state['values']['current_pass']) || !user_check_password($form_state['values']['current_pass'], $account);
- if ($current_pass_failed) {
- form_set_error('current_pass', t("Your current password is missing or incorrect; it's required to change the %name.", array('%name' => $name)));
- form_set_error($key);
- }
- // We only need to check the password once.
- break;
- }
- }
-}
-
-/**
- * Form validation handler for user_account_form().
- *
- * @see user_account_form()
- */
-function user_account_form_validate($form, &$form_state) {
- if ($form['#user_category'] == 'account' || $form['#user_category'] == 'register') {
- $account = $form['#user'];
- // Validate new or changing username.
- if (isset($form_state['values']['name'])) {
- if ($error = user_validate_name($form_state['values']['name'])) {
- form_set_error('name', $error);
- }
- elseif ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('name', db_like($form_state['values']['name']), 'LIKE')->range(0, 1)->execute()->fetchField()) {
- form_set_error('name', t('The name %name is already taken.', array('%name' => $form_state['values']['name'])));
- }
- }
-
- // Trim whitespace from mail, to prevent confusing 'e-mail not valid'
- // warnings often caused by cutting and pasting.
- $mail = trim($form_state['values']['mail']);
- form_set_value($form['account']['mail'], $mail, $form_state);
-
- // Validate the e-mail address, and check if it is taken by an existing user.
- if ($error = user_validate_mail($form_state['values']['mail'])) {
- form_set_error('mail', $error);
- }
- elseif ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('mail', db_like($form_state['values']['mail']), 'LIKE')->range(0, 1)->execute()->fetchField()) {
- // Format error message dependent on whether the user is logged in or not.
- if ($GLOBALS['user']->uid) {
- form_set_error('mail', t('The e-mail address %email is already taken.', array('%email' => $form_state['values']['mail'])));
- }
- else {
- form_set_error('mail', t('The e-mail address %email is already registered.
Have you forgotten your password? ', array('%email' => $form_state['values']['mail'], '@password' => url('user/password'))));
- }
- }
-
- // Make sure the signature isn't longer than the size of the database field.
- // Signatures are disabled by default, so make sure it exists first.
- if (isset($form_state['values']['signature'])) {
- // Move text format for user signature into 'signature_format'.
- $form_state['values']['signature_format'] = $form_state['values']['signature']['format'];
- // Move text value for user signature into 'signature'.
- $form_state['values']['signature'] = $form_state['values']['signature']['value'];
-
- $user_schema = drupal_get_schema('users');
- if (drupal_strlen($form_state['values']['signature']) > $user_schema['fields']['signature']['length']) {
- form_set_error('signature', t('The signature is too long: it must be %max characters or less.', array('%max' => $user_schema['fields']['signature']['length'])));
- }
- }
- }
-}
-
-/**
- * Implements hook_user_presave().
- */
-function user_user_presave(&$edit, $account, $category) {
- if ($category == 'account' || $category == 'register') {
- if (!empty($edit['picture_upload'])) {
- $edit['picture'] = $edit['picture_upload'];
- }
- // Delete picture if requested, and if no replacement picture was given.
- elseif (!empty($edit['picture_delete'])) {
- $edit['picture'] = NULL;
- }
- // Prepare user roles.
- if (isset($edit['roles'])) {
- $edit['roles'] = array_filter($edit['roles']);
- }
- }
-
- // Move account cancellation information into $user->data.
- foreach (array('user_cancel_method', 'user_cancel_notify') as $key) {
- if (isset($edit[$key])) {
- $edit['data'][$key] = $edit[$key];
- }
- }
-}
-
-/**
- * Implements hook_user_categories().
- */
-function user_user_categories() {
- return array(array(
- 'name' => 'account',
- 'title' => t('Account settings'),
- 'weight' => 1,
- ));
-}
-
-function user_login_block($form) {
- $form['#action'] = url(current_path(), array('query' => drupal_get_destination(), 'external' => FALSE));
- $form['#id'] = 'user-login-form';
- $form['#validate'] = user_login_default_validators();
- $form['#submit'][] = 'user_login_submit';
- $form['name'] = array('#type' => 'textfield',
- '#title' => t('Username'),
- '#maxlength' => USERNAME_MAX_LENGTH,
- '#size' => 15,
- '#required' => TRUE,
- );
- $form['pass'] = array('#type' => 'password',
- '#title' => t('Password'),
- '#size' => 15,
- '#required' => TRUE,
- );
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array('#type' => 'submit',
- '#value' => t('Log in'),
- );
- $items = array();
- if (variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL)) {
- $items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'))));
- }
- $items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'))));
- $form['links'] = array('#markup' => theme('item_list', array('items' => $items)));
- return $form;
-}
-
-/**
- * Implements hook_block_info().
- */
-function user_block_info() {
- global $user;
-
- $blocks['login']['info'] = t('User login');
- // Not worth caching.
- $blocks['login']['cache'] = DRUPAL_NO_CACHE;
-
- $blocks['new']['info'] = t('Who\'s new');
- $blocks['new']['properties']['administrative'] = TRUE;
-
- // Too dynamic to cache.
- $blocks['online']['info'] = t('Who\'s online');
- $blocks['online']['cache'] = DRUPAL_NO_CACHE;
- $blocks['online']['properties']['administrative'] = TRUE;
-
- return $blocks;
-}
-
-/**
- * Implements hook_block_configure().
- */
-function user_block_configure($delta = '') {
- global $user;
-
- switch ($delta) {
- case 'new':
- $form['user_block_whois_new_count'] = array(
- '#type' => 'select',
- '#title' => t('Number of users to display'),
- '#default_value' => variable_get('user_block_whois_new_count', 5),
- '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),
- );
- return $form;
-
- case 'online':
- $period = drupal_map_assoc(array(30, 60, 120, 180, 300, 600, 900, 1800, 2700, 3600, 5400, 7200, 10800, 21600, 43200, 86400), 'format_interval');
- $form['user_block_seconds_online'] = array('#type' => 'select', '#title' => t('User activity'), '#default_value' => variable_get('user_block_seconds_online', 900), '#options' => $period, '#description' => t('A user is considered online for this long after they have last viewed a page.'));
- $form['user_block_max_list_count'] = array('#type' => 'select', '#title' => t('User list length'), '#default_value' => variable_get('user_block_max_list_count', 10), '#options' => drupal_map_assoc(array(0, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100)), '#description' => t('Maximum number of currently online users to display.'));
- return $form;
- }
-}
-
-/**
- * Implements hook_block_save().
- */
-function user_block_save($delta = '', $edit = array()) {
- global $user;
-
- switch ($delta) {
- case 'new':
- variable_set('user_block_whois_new_count', $edit['user_block_whois_new_count']);
- break;
-
- case 'online':
- variable_set('user_block_seconds_online', $edit['user_block_seconds_online']);
- variable_set('user_block_max_list_count', $edit['user_block_max_list_count']);
- break;
- }
-}
-
-/**
- * Implements hook_block_view().
- */
-function user_block_view($delta = '') {
- global $user;
-
- $block = array();
-
- switch ($delta) {
- case 'login':
- // For usability's sake, avoid showing two login forms on one page.
- if (!$user->uid && !(arg(0) == 'user' && !is_numeric(arg(1)))) {
-
- $block['subject'] = t('User login');
- $block['content'] = drupal_get_form('user_login_block');
- }
- return $block;
-
- case 'new':
- if (user_access('access content')) {
- // Retrieve a list of new users who have subsequently accessed the site successfully.
- $items = db_query_range('SELECT uid, name FROM {users} WHERE status <> 0 AND access <> 0 ORDER BY created DESC', 0, variable_get('user_block_whois_new_count', 5))->fetchAll();
- $output = theme('user_list', array('users' => $items));
-
- $block['subject'] = t('Who\'s new');
- $block['content'] = $output;
- }
- return $block;
-
- case 'online':
- if (user_access('access content')) {
- // Count users active within the defined period.
- $interval = REQUEST_TIME - variable_get('user_block_seconds_online', 900);
-
- // Perform database queries to gather online user lists. We use s.timestamp
- // rather than u.access because it is much faster.
- $authenticated_count = db_query("SELECT COUNT(DISTINCT s.uid) FROM {sessions} s WHERE s.timestamp >= :timestamp AND s.uid > 0", array(':timestamp' => $interval))->fetchField();
-
- $output = '
' . format_plural($authenticated_count, 'There is currently 1 user online.', 'There are currently @count users online.') . '
';
-
- // Display a list of currently online users.
- $max_users = variable_get('user_block_max_list_count', 10);
- if ($authenticated_count && $max_users) {
- $items = db_query_range('SELECT u.uid, u.name, MAX(s.timestamp) AS max_timestamp FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.timestamp >= :interval AND s.uid > 0 GROUP BY u.uid, u.name ORDER BY max_timestamp DESC', 0, $max_users, array(':interval' => $interval))->fetchAll();
- $output .= theme('user_list', array('users' => $items));
- }
-
- $block['subject'] = t('Who\'s online');
- $block['content'] = $output;
- }
- return $block;
- }
-}
-
-/**
- * Process variables for user-picture.tpl.php.
- *
- * The $variables array contains the following arguments:
- * - $account: A user, node or comment object with 'name', 'uid' and 'picture'
- * fields.
- *
- * @see user-picture.tpl.php
- */
-function template_preprocess_user_picture(&$variables) {
- $variables['user_picture'] = '';
- if (variable_get('user_pictures', 0)) {
- $account = $variables['account'];
- if (!empty($account->picture)) {
- // @TODO: Ideally this function would only be passed file objects, but
- // since there's a lot of legacy code that JOINs the {users} table to
- // {node} or {comments} and passes the results into this function if we
- // a numeric value in the picture field we'll assume it's a file id
- // and load it for them. Once we've got user_load_multiple() and
- // comment_load_multiple() functions the user module will be able to load
- // the picture files in mass during the object's load process.
- if (is_numeric($account->picture)) {
- $account->picture = file_load($account->picture);
- }
- if (!empty($account->picture->uri)) {
- $filepath = $account->picture->uri;
- }
- }
- elseif (variable_get('user_picture_default', '')) {
- $filepath = variable_get('user_picture_default', '');
- }
- if (isset($filepath)) {
- $alt = t("@user's picture", array('@user' => format_username($account)));
- // If the image does not have a valid Drupal scheme (for eg. HTTP),
- // don't load image styles.
- if (module_exists('image') && file_valid_uri($filepath) && $style = variable_get('user_picture_style', '')) {
- $variables['user_picture'] = theme('image_style', array('style_name' => $style, 'path' => $filepath, 'alt' => $alt, 'title' => $alt));
- }
- else {
- $variables['user_picture'] = theme('image', array('path' => $filepath, 'alt' => $alt, 'title' => $alt));
- }
- if (!empty($account->uid) && user_access('access user profiles')) {
- $attributes = array('attributes' => array('title' => t('View user profile.')), 'html' => TRUE);
- $variables['user_picture'] = l($variables['user_picture'], "user/$account->uid", $attributes);
- }
- }
- }
-}
-
-/**
- * Returns HTML for a list of users.
- *
- * @param $variables
- * An associative array containing:
- * - users: An array with user objects. Should contain at least the name and
- * uid.
- * - title: (optional) Title to pass on to theme_item_list().
- *
- * @ingroup themeable
- */
-function theme_user_list($variables) {
- $users = $variables['users'];
- $title = $variables['title'];
- $items = array();
-
- if (!empty($users)) {
- foreach ($users as $user) {
- $items[] = theme('username', array('account' => $user));
- }
- }
- return theme('item_list', array('items' => $items, 'title' => $title));
-}
-
-/**
- * Determines if the current user is anonymous.
- *
- * @return bool
- * TRUE if the user is anonymous, FALSE if the user is authenticated.
- */
-function user_is_anonymous() {
- // Menu administrators can see items for anonymous when administering.
- return !$GLOBALS['user']->uid || !empty($GLOBALS['menu_admin']);
-}
-
-/**
- * Determines if the current user is logged in.
- *
- * @return bool
- * TRUE if the user is logged in, FALSE if the user is anonymous.
- */
-function user_is_logged_in() {
- return (bool) $GLOBALS['user']->uid;
-}
-
-/**
- * Determines if the current user has access to the user registration page.
- *
- * @return bool
- * TRUE if the user is not already logged in and can register for an account.
- */
-function user_register_access() {
- return user_is_anonymous() && variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
-}
-
-/**
- * User view access callback.
- *
- * @param $account
- * Can either be a full user object or a $uid.
- */
-function user_view_access($account) {
- $uid = is_object($account) ? $account->uid : (int) $account;
-
- // Never allow access to view the anonymous user account.
- if ($uid) {
- // Admins can view all, users can view own profiles at all times.
- if ($GLOBALS['user']->uid == $uid || user_access('administer users')) {
- return TRUE;
- }
- elseif (user_access('access user profiles')) {
- // At this point, load the complete account object.
- if (!is_object($account)) {
- $account = user_load($uid);
- }
- return (is_object($account) && $account->status);
- }
- }
- return FALSE;
-}
-
-/**
- * Access callback for user account editing.
- */
-function user_edit_access($account) {
- return (($GLOBALS['user']->uid == $account->uid) || user_access('administer users')) && $account->uid > 0;
-}
-
-/**
- * Menu access callback; limit access to account cancellation pages.
- *
- * Limit access to users with the 'cancel account' permission or administrative
- * users, and prevent the anonymous user from cancelling the account.
- */
-function user_cancel_access($account) {
- return ((($GLOBALS['user']->uid == $account->uid) && user_access('cancel account')) || user_access('administer users')) && $account->uid > 0;
-}
-
-/**
- * Implements hook_menu().
- */
-function user_menu() {
- $items['user/autocomplete'] = array(
- 'title' => 'User autocomplete',
- 'page callback' => 'user_autocomplete',
- 'access callback' => 'user_access',
- 'access arguments' => array('access user profiles'),
- 'type' => MENU_CALLBACK,
- 'file' => 'user.pages.inc',
- );
-
- // Registration and login pages.
- $items['user'] = array(
- 'title' => 'User account',
- 'title callback' => 'user_menu_title',
- 'page callback' => 'user_page',
- 'access callback' => TRUE,
- 'file' => 'user.pages.inc',
- 'weight' => -10,
- 'menu_name' => 'user-menu',
- );
-
- $items['user/login'] = array(
- 'title' => 'Log in',
- 'access callback' => 'user_is_anonymous',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- );
-
- $items['user/register'] = array(
- 'title' => 'Create new account',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_register_form'),
- 'access callback' => 'user_register_access',
- 'type' => MENU_LOCAL_TASK,
- );
-
- $items['user/password'] = array(
- 'title' => 'Request new password',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_pass'),
- 'access callback' => TRUE,
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'user.pages.inc',
- );
- $items['user/reset/%/%/%'] = array(
- 'title' => 'Reset password',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_pass_reset', 2, 3, 4),
- 'access callback' => TRUE,
- 'type' => MENU_CALLBACK,
- 'file' => 'user.pages.inc',
- );
-
- $items['user/logout'] = array(
- 'title' => 'Log out',
- 'access callback' => 'user_is_logged_in',
- 'page callback' => 'user_logout',
- 'weight' => 10,
- 'menu_name' => 'user-menu',
- 'file' => 'user.pages.inc',
- );
-
- // User listing pages.
- $items['admin/people'] = array(
- 'title' => 'People',
- 'description' => 'Manage user accounts, roles, and permissions.',
- 'page callback' => 'user_admin',
- 'page arguments' => array('list'),
- 'access arguments' => array('administer users'),
- 'position' => 'left',
- 'weight' => -4,
- 'file' => 'user.admin.inc',
- );
- $items['admin/people/people'] = array(
- 'title' => 'List',
- 'description' => 'Find and manage people interacting with your site.',
- 'access arguments' => array('administer users'),
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10,
- 'file' => 'user.admin.inc',
- );
-
- // Permissions and role forms.
- $items['admin/people/permissions'] = array(
- 'title' => 'Permissions',
- 'description' => 'Determine access to features by selecting permissions for roles.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_admin_permissions'),
- 'access arguments' => array('administer permissions'),
- 'file' => 'user.admin.inc',
- 'type' => MENU_LOCAL_TASK,
- );
- $items['admin/people/permissions/list'] = array(
- 'title' => 'Permissions',
- 'description' => 'Determine access to features by selecting permissions for roles.',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -8,
- );
- $items['admin/people/permissions/roles'] = array(
- 'title' => 'Roles',
- 'description' => 'List, edit, or add user roles.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_admin_roles'),
- 'access arguments' => array('administer permissions'),
- 'file' => 'user.admin.inc',
- 'type' => MENU_LOCAL_TASK,
- 'weight' => -5,
- );
- $items['admin/people/permissions/roles/edit/%user_role'] = array(
- 'title' => 'Edit role',
- 'page arguments' => array('user_admin_role', 5),
- 'access callback' => 'user_role_edit_access',
- 'access arguments' => array(5),
- );
- $items['admin/people/permissions/roles/delete/%user_role'] = array(
- 'title' => 'Delete role',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_admin_role_delete_confirm', 5),
- 'access callback' => 'user_role_edit_access',
- 'access arguments' => array(5),
- 'file' => 'user.admin.inc',
- );
-
- $items['admin/people/create'] = array(
- 'title' => 'Add user',
- 'page arguments' => array('create'),
- 'access arguments' => array('administer users'),
- 'type' => MENU_LOCAL_ACTION,
- );
-
- // Administration pages.
- $items['admin/config/people'] = array(
- 'title' => 'People',
- 'description' => 'Configure user accounts.',
- 'position' => 'left',
- 'weight' => -20,
- 'page callback' => 'system_admin_menu_block_page',
- 'access arguments' => array('access administration pages'),
- 'file' => 'system.admin.inc',
- 'file path' => drupal_get_path('module', 'system'),
- );
- $items['admin/config/people/accounts'] = array(
- 'title' => 'Account settings',
- 'description' => 'Configure default behavior of users, including registration requirements, e-mails, fields, and user pictures.',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_admin_settings'),
- 'access arguments' => array('administer users'),
- 'file' => 'user.admin.inc',
- 'weight' => -10,
- );
- $items['admin/config/people/accounts/settings'] = array(
- 'title' => 'Settings',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10,
- );
-
- $items['user/%user'] = array(
- 'title' => 'My account',
- 'title callback' => 'user_page_title',
- 'title arguments' => array(1),
- 'page callback' => 'user_view_page',
- 'page arguments' => array(1),
- 'access callback' => 'user_view_access',
- 'access arguments' => array(1),
- // By assigning a different menu name, this item (and all registered child
- // paths) are no longer considered as children of 'user'. When accessing the
- // user account pages, the preferred menu link that is used to build the
- // active trail (breadcrumb) will be found in this menu (unless there is
- // more specific link), so the link to 'user' will not be in the breadcrumb.
- 'menu_name' => 'navigation',
- );
-
- $items['user/%user/view'] = array(
- 'title' => 'View',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'weight' => -10,
- );
-
- $items['user/%user/cancel'] = array(
- 'title' => 'Cancel account',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_cancel_confirm_form', 1),
- 'access callback' => 'user_cancel_access',
- 'access arguments' => array(1),
- 'file' => 'user.pages.inc',
- );
-
- $items['user/%user/cancel/confirm/%/%'] = array(
- 'title' => 'Confirm account cancellation',
- 'page callback' => 'user_cancel_confirm',
- 'page arguments' => array(1, 4, 5),
- 'access callback' => 'user_cancel_access',
- 'access arguments' => array(1),
- 'file' => 'user.pages.inc',
- );
-
- $items['user/%user/edit'] = array(
- 'title' => 'Edit',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_profile_form', 1),
- 'access callback' => 'user_edit_access',
- 'access arguments' => array(1),
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'user.pages.inc',
- );
-
- $items['user/%user_category/edit/account'] = array(
- 'title' => 'Account',
- 'type' => MENU_DEFAULT_LOCAL_TASK,
- 'load arguments' => array('%map', '%index'),
- );
-
- if (($categories = _user_categories()) && (count($categories) > 1)) {
- foreach ($categories as $key => $category) {
- // 'account' is already handled by the MENU_DEFAULT_LOCAL_TASK.
- if ($category['name'] != 'account') {
- $items['user/%user_category/edit/' . $category['name']] = array(
- 'title callback' => 'check_plain',
- 'title arguments' => array($category['title']),
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('user_profile_form', 1, 3),
- 'access callback' => isset($category['access callback']) ? $category['access callback'] : 'user_edit_access',
- 'access arguments' => isset($category['access arguments']) ? $category['access arguments'] : array(1),
- 'type' => MENU_LOCAL_TASK,
- 'weight' => $category['weight'],
- 'load arguments' => array('%map', '%index'),
- 'tab_parent' => 'user/%/edit',
- 'file' => 'user.pages.inc',
- );
- }
- }
- }
- return $items;
-}
-
-/**
- * Implements hook_menu_site_status_alter().
- */
-function user_menu_site_status_alter(&$menu_site_status, $path) {
- if ($menu_site_status == MENU_SITE_OFFLINE) {
- // If the site is offline, log out unprivileged users.
- if (user_is_logged_in() && !user_access('access site in maintenance mode')) {
- module_load_include('pages.inc', 'user', 'user');
- user_logout();
- }
-
- if (user_is_anonymous()) {
- switch ($path) {
- case 'user':
- // Forward anonymous user to login page.
- drupal_goto('user/login');
- case 'user/login':
- case 'user/password':
- // Disable offline mode.
- $menu_site_status = MENU_SITE_ONLINE;
- break;
- default:
- if (strpos($path, 'user/reset/') === 0) {
- // Disable offline mode.
- $menu_site_status = MENU_SITE_ONLINE;
- }
- break;
- }
- }
- }
- if (user_is_logged_in()) {
- if ($path == 'user/login') {
- // If user is logged in, redirect to 'user' instead of giving 403.
- drupal_goto('user');
- }
- if ($path == 'user/register') {
- // Authenticated user should be redirected to user edit page.
- drupal_goto('user/' . $GLOBALS['user']->uid . '/edit');
- }
- }
-}
-
-/**
- * Implements hook_menu_link_alter().
- */
-function user_menu_link_alter(&$link) {
- // The path 'user' must be accessible for anonymous users, but only visible
- // for authenticated users. Authenticated users should see "My account", but
- // anonymous users should not see it at all. Therefore, invoke
- // user_translated_menu_link_alter() to conditionally hide the link.
- if ($link['link_path'] == 'user' && $link['module'] == 'system') {
- $link['options']['alter'] = TRUE;
- }
-
- // Force the Logout link to appear on the top-level of 'user-menu' menu by
- // default (i.e., unless it has been customized).
- if ($link['link_path'] == 'user/logout' && $link['module'] == 'system' && empty($link['customized'])) {
- $link['plid'] = 0;
- }
-}
-
-/**
- * Implements hook_translated_menu_link_alter().
- */
-function user_translated_menu_link_alter(&$link) {
- // Hide the "User account" link for anonymous users.
- if ($link['link_path'] == 'user' && $link['module'] == 'system' && !$GLOBALS['user']->uid) {
- $link['hidden'] = 1;
- }
-}
-
-/**
- * Implements hook_admin_paths().
- */
-function user_admin_paths() {
- $paths = array(
- 'user/*/cancel' => TRUE,
- 'user/*/edit' => TRUE,
- 'user/*/edit/*' => TRUE,
- );
- return $paths;
-}
-
-/**
- * Returns $arg or the user ID of the current user if $arg is '%' or empty.
- *
- * Deprecated. Use %user_uid_optional instead.
- *
- * @todo D8: Remove.
- */
-function user_uid_only_optional_to_arg($arg) {
- return user_uid_optional_to_arg($arg);
-}
-
-/**
- * Load either a specified or the current user account.
- *
- * @param $uid
- * An optional user ID of the user to load. If not provided, the current
- * user's ID will be used.
- * @return
- * A fully-loaded $user object upon successful user load, FALSE if user
- * cannot be loaded.
- *
- * @see user_load()
- * @todo rethink the naming of this in Drupal 8.
- */
-function user_uid_optional_load($uid = NULL) {
- if (!isset($uid)) {
- $uid = $GLOBALS['user']->uid;
- }
- return user_load($uid);
-}
-
-/**
- * Return a user object after checking if any profile category in the path exists.
- */
-function user_category_load($uid, &$map, $index) {
- static $user_categories, $accounts;
-
- // Cache $account - this load function will get called for each profile tab.
- if (!isset($accounts[$uid])) {
- $accounts[$uid] = user_load($uid);
- }
- $valid = TRUE;
- if ($account = $accounts[$uid]) {
- // Since the path is like user/%/edit/category_name, the category name will
- // be at a position 2 beyond the index corresponding to the % wildcard.
- $category_index = $index + 2;
- // Valid categories may contain slashes, and hence need to be imploded.
- $category_path = implode('/', array_slice($map, $category_index));
- if ($category_path) {
- // Check that the requested category exists.
- $valid = FALSE;
- if (!isset($user_categories)) {
- $user_categories = _user_categories();
- }
- foreach ($user_categories as $category) {
- if ($category['name'] == $category_path) {
- $valid = TRUE;
- // Truncate the map array in case the category name had slashes.
- $map = array_slice($map, 0, $category_index);
- // Assign the imploded category name to the last map element.
- $map[$category_index] = $category_path;
- break;
- }
- }
- }
- }
- return $valid ? $account : FALSE;
-}
-
-/**
- * Returns $arg or the user ID of the current user if $arg is '%' or empty.
- *
- * @todo rethink the naming of this in Drupal 8.
- */
-function user_uid_optional_to_arg($arg) {
- // Give back the current user uid when called from eg. tracker, aka.
- // with an empty arg. Also use the current user uid when called from
- // the menu with a % for the current account link.
- return empty($arg) || $arg == '%' ? $GLOBALS['user']->uid : $arg;
-}
-
-/**
- * Menu item title callback for the 'user' path.
- *
- * Anonymous users should see "User account", but authenticated users are
- * expected to see "My account".
- */
-function user_menu_title() {
- return user_is_logged_in() ? t('My account') : t('User account');
-}
-
-/**
- * Menu item title callback - use the user name.
- */
-function user_page_title($account) {
- return is_object($account) ? format_username($account) : '';
-}
-
-/**
- * Discover which external authentication module(s) authenticated a username.
- *
- * @param $authname
- * A username used by an external authentication module.
- * @return
- * An associative array with module as key and username as value.
- */
-function user_get_authmaps($authname = NULL) {
- $authmaps = db_query("SELECT module, authname FROM {authmap} WHERE authname = :authname", array(':authname' => $authname))->fetchAllKeyed();
- return count($authmaps) ? $authmaps : 0;
-}
-
-/**
- * Save mappings of which external authentication module(s) authenticated
- * a user. Maps external usernames to user ids in the users table.
- *
- * @param $account
- * A user object.
- * @param $authmaps
- * An associative array with a compound key and the username as the value.
- * The key is made up of 'authname_' plus the name of the external authentication
- * module.
- * @see user_external_login_register()
- */
-function user_set_authmaps($account, $authmaps) {
- foreach ($authmaps as $key => $value) {
- $module = explode('_', $key, 2);
- if ($value) {
- db_merge('authmap')
- ->key(array(
- 'uid' => $account->uid,
- 'module' => $module[1],
- ))
- ->fields(array('authname' => $value))
- ->execute();
- }
- else {
- db_delete('authmap')
- ->condition('uid', $account->uid)
- ->condition('module', $module[1])
- ->execute();
- }
- }
-}
-
-/**
- * Form builder; the main user login form.
- *
- * @ingroup forms
- */
-function user_login($form, &$form_state) {
- global $user;
-
- // If we are already logged on, go to the user page instead.
- if ($user->uid) {
- drupal_goto('user/' . $user->uid);
- }
-
- // Display login form:
- $form['name'] = array('#type' => 'textfield',
- '#title' => t('Username'),
- '#size' => 60,
- '#maxlength' => USERNAME_MAX_LENGTH,
- '#required' => TRUE,
- );
-
- $form['name']['#description'] = t('Enter your @s username.', array('@s' => variable_get('site_name', 'Drupal')));
- $form['pass'] = array('#type' => 'password',
- '#title' => t('Password'),
- '#description' => t('Enter the password that accompanies your username.'),
- '#required' => TRUE,
- );
- $form['#validate'] = user_login_default_validators();
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Log in'));
-
- return $form;
-}
-
-/**
- * Set up a series for validators which check for blocked users,
- * then authenticate against local database, then return an error if
- * authentication fails. Distributed authentication modules are welcome
- * to use hook_form_alter() to change this series in order to
- * authenticate against their user database instead of the local users
- * table. If a distributed authentication module is successful, it
- * should set $form_state['uid'] to a user ID.
- *
- * We use three validators instead of one since external authentication
- * modules usually only need to alter the second validator.
- *
- * @see user_login_name_validate()
- * @see user_login_authenticate_validate()
- * @see user_login_final_validate()
- * @return array
- * A simple list of validate functions.
- */
-function user_login_default_validators() {
- return array('user_login_name_validate', 'user_login_authenticate_validate', 'user_login_final_validate');
-}
-
-/**
- * A FAPI validate handler. Sets an error if supplied username has been blocked.
- */
-function user_login_name_validate($form, &$form_state) {
- if (!empty($form_state['values']['name']) && user_is_blocked($form_state['values']['name'])) {
- // Blocked in user administration.
- form_set_error('name', t('The username %name has not been activated or is blocked.', array('%name' => $form_state['values']['name'])));
- }
-}
-
-/**
- * A validate handler on the login form. Check supplied username/password
- * against local users table. If successful, $form_state['uid']
- * is set to the matching user ID.
- */
-function user_login_authenticate_validate($form, &$form_state) {
- $password = trim($form_state['values']['pass']);
- if (!empty($form_state['values']['name']) && !empty($password)) {
- // Do not allow any login from the current user's IP if the limit has been
- // reached. Default is 50 failed attempts allowed in one hour. This is
- // independent of the per-user limit to catch attempts from one IP to log
- // in to many different user accounts. We have a reasonably high limit
- // since there may be only one apparent IP for all users at an institution.
- if (!flood_is_allowed('failed_login_attempt_ip', variable_get('user_failed_login_ip_limit', 50), variable_get('user_failed_login_ip_window', 3600))) {
- $form_state['flood_control_triggered'] = 'ip';
- return;
- }
- $account = db_query("SELECT * FROM {users} WHERE name = :name AND status = 1", array(':name' => $form_state['values']['name']))->fetchObject();
- if ($account) {
- if (variable_get('user_failed_login_identifier_uid_only', FALSE)) {
- // Register flood events based on the uid only, so they apply for any
- // IP address. This is the most secure option.
- $identifier = $account->uid;
- }
- else {
- // The default identifier is a combination of uid and IP address. This
- // is less secure but more resistant to denial-of-service attacks that
- // could lock out all users with public user names.
- $identifier = $account->uid . '-' . ip_address();
- }
- $form_state['flood_control_user_identifier'] = $identifier;
-
- // Don't allow login if the limit for this user has been reached.
- // Default is to allow 5 failed attempts every 6 hours.
- if (!flood_is_allowed('failed_login_attempt_user', variable_get('user_failed_login_user_limit', 5), variable_get('user_failed_login_user_window', 21600), $identifier)) {
- $form_state['flood_control_triggered'] = 'user';
- return;
- }
- }
- // We are not limited by flood control, so try to authenticate.
- // Set $form_state['uid'] as a flag for user_login_final_validate().
- $form_state['uid'] = user_authenticate($form_state['values']['name'], $password);
- }
-}
-
-/**
- * The final validation handler on the login form.
- *
- * Sets a form error if user has not been authenticated, or if too many
- * logins have been attempted. This validation function should always
- * be the last one.
- */
-function user_login_final_validate($form, &$form_state) {
- if (empty($form_state['uid'])) {
- // Always register an IP-based failed login event.
- flood_register_event('failed_login_attempt_ip', variable_get('user_failed_login_ip_window', 3600));
- // Register a per-user failed login event.
- if (isset($form_state['flood_control_user_identifier'])) {
- flood_register_event('failed_login_attempt_user', variable_get('user_failed_login_user_window', 21600), $form_state['flood_control_user_identifier']);
- }
-
- if (isset($form_state['flood_control_triggered'])) {
- if ($form_state['flood_control_triggered'] == 'user') {
- form_set_error('name', format_plural(variable_get('user_failed_login_user_limit', 5), 'Sorry, there has been more than one failed login attempt for this account. It is temporarily blocked. Try again later or
request a new password .', 'Sorry, there have been more than @count failed login attempts for this account. It is temporarily blocked. Try again later or
request a new password .', array('@url' => url('user/password'))));
- }
- else {
- // We did not find a uid, so the limit is IP-based.
- form_set_error('name', t('Sorry, too many failed login attempts from your IP address. This IP address is temporarily blocked. Try again later or
request a new password .', array('@url' => url('user/password'))));
- }
- }
- else {
- form_set_error('name', t('Sorry, unrecognized username or password.
Have you forgotten your password? ', array('@password' => url('user/password', array('query' => array('name' => $form_state['values']['name']))))));
- watchdog('user', 'Login attempt failed for %user.', array('%user' => $form_state['values']['name']));
- }
- }
- elseif (isset($form_state['flood_control_user_identifier'])) {
- // Clear past failures for this user so as not to block a user who might
- // log in and out more than once in an hour.
- flood_clear_event('failed_login_attempt_user', $form_state['flood_control_user_identifier']);
- }
-}
-
-/**
- * Try to validate the user's login credentials locally.
- *
- * @param $name
- * User name to authenticate.
- * @param $password
- * A plain-text password, such as trimmed text from form values.
- * @return
- * The user's uid on success, or FALSE on failure to authenticate.
- */
-function user_authenticate($name, $password) {
- $uid = FALSE;
- if (!empty($name) && !empty($password)) {
- $account = user_load_by_name($name);
- if ($account) {
- // Allow alternate password hashing schemes.
- require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
- if (user_check_password($password, $account)) {
- // Successful authentication.
- $uid = $account->uid;
-
- // Update user to new password scheme if needed.
- if (user_needs_new_hash($account)) {
- user_save($account, array('pass' => $password));
- }
- }
- }
- }
- return $uid;
-}
-
-/**
- * Finalize the login process. Must be called when logging in a user.
- *
- * The function records a watchdog message about the new session, saves the
- * login timestamp, calls hook_user_login(), and generates a new session.
- *
- * @param array $edit
- * The array of form values submitted by the user.
- *
- * @see hook_user_login()
- */
-function user_login_finalize(&$edit = array()) {
- global $user;
- watchdog('user', 'Session opened for %name.', array('%name' => $user->name));
- // Update the user table timestamp noting user has logged in.
- // This is also used to invalidate one-time login links.
- $user->login = REQUEST_TIME;
- db_update('users')
- ->fields(array('login' => $user->login))
- ->condition('uid', $user->uid)
- ->execute();
-
- // Regenerate the session ID to prevent against session fixation attacks.
- // This is called before hook_user in case one of those functions fails
- // or incorrectly does a redirect which would leave the old session in place.
- drupal_session_regenerate();
-
- user_module_invoke('login', $edit, $user);
-}
-
-/**
- * Submit handler for the login form. Load $user object and perform standard login
- * tasks. The user is then redirected to the My Account page. Setting the
- * destination in the query string overrides the redirect.
- */
-function user_login_submit($form, &$form_state) {
- global $user;
- $user = user_load($form_state['uid']);
- $form_state['redirect'] = 'user/' . $user->uid;
-
- user_login_finalize($form_state);
-}
-
-/**
- * Helper function for authentication modules. Either logs in or registers
- * the current user, based on username. Either way, the global $user object is
- * populated and login tasks are performed.
- */
-function user_external_login_register($name, $module) {
- $account = user_external_load($name);
- if (!$account) {
- // Register this new user.
- $userinfo = array(
- 'name' => $name,
- 'pass' => user_password(),
- 'init' => $name,
- 'status' => 1,
- 'access' => REQUEST_TIME
- );
- $account = user_save(drupal_anonymous_user(), $userinfo);
- // Terminate if an error occurred during user_save().
- if (!$account) {
- drupal_set_message(t("Error saving user account."), 'error');
- return;
- }
- user_set_authmaps($account, array("authname_$module" => $name));
- }
-
- // Log user in.
- $form_state['uid'] = $account->uid;
- user_login_submit(array(), $form_state);
-}
-
-/**
- * Generates a unique URL for a user to login and reset their password.
- *
- * @param object $account
- * An object containing the user account, which must contain at least the
- * following properties:
- * - uid: The user ID number.
- * - login: The UNIX timestamp of the user's last login.
- *
- * @return
- * A unique URL that provides a one-time log in for the user, from which
- * they can change their password.
- */
-function user_pass_reset_url($account) {
- $timestamp = REQUEST_TIME;
- return url("user/reset/$account->uid/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid), array('absolute' => TRUE));
-}
-
-/**
- * Generates a URL to confirm an account cancellation request.
- *
- * @param object $account
- * The user account object, which must contain at least the following
- * properties:
- * - uid: The user ID number.
- * - pass: The hashed user password string.
- * - login: The UNIX timestamp of the user's last login.
- *
- * @return
- * A unique URL that may be used to confirm the cancellation of the user
- * account.
- *
- * @see user_mail_tokens()
- * @see user_cancel_confirm()
- */
-function user_cancel_url($account) {
- $timestamp = REQUEST_TIME;
- return url("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid), array('absolute' => TRUE));
-}
-
-/**
- * Creates a unique hash value for use in time-dependent per-user URLs.
- *
- * This hash is normally used to build a unique and secure URL that is sent to
- * the user by email for purposes such as resetting the user's password. In
- * order to validate the URL, the same hash can be generated again, from the
- * same information, and compared to the hash value from the URL. The URL
- * normally contains both the time stamp and the numeric user ID. The login
- * timestamp and hashed password are retrieved from the database as necessary.
- * For a usage example, see user_cancel_url() and user_cancel_confirm().
- *
- * @param string $password
- * The hashed user account password value.
- * @param int $timestamp
- * A UNIX timestamp, typically REQUEST_TIME.
- * @param int $login
- * The UNIX timestamp of the user's last login.
- * @param int $uid
- * The user ID of the user account.
- *
- * @return
- * A string that is safe for use in URLs and SQL statements.
- */
-function user_pass_rehash($password, $timestamp, $login, $uid) {
- // Backwards compatibility: Try to determine a $uid if one was not passed.
- // (Since $uid is a required parameter to this function, a PHP warning will
- // be generated if it's not provided, which is an indication that the calling
- // code should be updated. But the code below will try to generate a correct
- // hash in the meantime.)
- if (!isset($uid)) {
- $uids = db_query_range('SELECT uid FROM {users} WHERE pass = :password AND login = :login AND uid > 0', 0, 2, array(':password' => $password, ':login' => $login))->fetchCol();
- // If exactly one user account matches the provided password and login
- // timestamp, proceed with that $uid.
- if (count($uids) == 1) {
- $uid = reset($uids);
- }
- // Otherwise there is no safe hash to return, so return a random string
- // that will never be treated as a valid token.
- else {
- return drupal_random_key();
- }
- }
-
- return drupal_hmac_base64($timestamp . $login . $uid, drupal_get_hash_salt() . $password);
-}
-
-/**
- * Cancel a user account.
- *
- * Since the user cancellation process needs to be run in a batch, either
- * Form API will invoke it, or batch_process() needs to be invoked after calling
- * this function and should define the path to redirect to.
- *
- * @param $edit
- * An array of submitted form values.
- * @param $uid
- * The user ID of the user account to cancel.
- * @param $method
- * The account cancellation method to use.
- *
- * @see _user_cancel()
- */
-function user_cancel($edit, $uid, $method) {
- global $user;
-
- $account = user_load($uid);
-
- if (!$account) {
- drupal_set_message(t('The user account %id does not exist.', array('%id' => $uid)), 'error');
- watchdog('user', 'Attempted to cancel non-existing user account: %id.', array('%id' => $uid), WATCHDOG_ERROR);
- return;
- }
-
- // Initialize batch (to set title).
- $batch = array(
- 'title' => t('Cancelling account'),
- 'operations' => array(),
- );
- batch_set($batch);
-
- // Modules use hook_user_delete() to respond to deletion.
- if ($method != 'user_cancel_delete') {
- // Allow modules to add further sets to this batch.
- module_invoke_all('user_cancel', $edit, $account, $method);
- }
-
- // Finish the batch and actually cancel the account.
- $batch = array(
- 'title' => t('Cancelling user account'),
- 'operations' => array(
- array('_user_cancel', array($edit, $account, $method)),
- ),
- );
-
- // After cancelling account, ensure that user is logged out.
- if ($account->uid == $user->uid) {
- // Batch API stores data in the session, so use the finished operation to
- // manipulate the current user's session id.
- $batch['finished'] = '_user_cancel_session_regenerate';
- }
-
- batch_set($batch);
-
- // Batch processing is either handled via Form API or has to be invoked
- // manually.
-}
-
-/**
- * Last batch processing step for cancelling a user account.
- *
- * Since batch and session API require a valid user account, the actual
- * cancellation of a user account needs to happen last.
- *
- * @see user_cancel()
- */
-function _user_cancel($edit, $account, $method) {
- global $user;
-
- switch ($method) {
- case 'user_cancel_block':
- case 'user_cancel_block_unpublish':
- default:
- // Send account blocked notification if option was checked.
- if (!empty($edit['user_cancel_notify'])) {
- _user_mail_notify('status_blocked', $account);
- }
- user_save($account, array('status' => 0));
- drupal_set_message(t('%name has been disabled.', array('%name' => $account->name)));
- watchdog('user', 'Blocked user: %name %email.', array('%name' => $account->name, '%email' => '<' . $account->mail . '>'), WATCHDOG_NOTICE);
- break;
-
- case 'user_cancel_reassign':
- case 'user_cancel_delete':
- // Send account canceled notification if option was checked.
- if (!empty($edit['user_cancel_notify'])) {
- _user_mail_notify('status_canceled', $account);
- }
- user_delete($account->uid);
- drupal_set_message(t('%name has been deleted.', array('%name' => $account->name)));
- watchdog('user', 'Deleted user: %name %email.', array('%name' => $account->name, '%email' => '<' . $account->mail . '>'), WATCHDOG_NOTICE);
- break;
- }
-
- // After cancelling account, ensure that user is logged out. We can't destroy
- // their session though, as we might have information in it, and we can't
- // regenerate it because batch API uses the session ID, we will regenerate it
- // in _user_cancel_session_regenerate().
- if ($account->uid == $user->uid) {
- $user = drupal_anonymous_user();
- }
-
- // Clear the cache for anonymous users.
- cache_clear_all();
-}
-
-/**
- * Finished batch processing callback for cancelling a user account.
- *
- * @see user_cancel()
- */
-function _user_cancel_session_regenerate() {
- // Regenerate the users session instead of calling session_destroy() as we
- // want to preserve any messages that might have been set.
- drupal_session_regenerate();
-}
-
-/**
- * Delete a user.
- *
- * @param $uid
- * A user ID.
- */
-function user_delete($uid) {
- user_delete_multiple(array($uid));
-}
-
-/**
- * Delete multiple user accounts.
- *
- * @param $uids
- * An array of user IDs.
- */
-function user_delete_multiple(array $uids) {
- if (!empty($uids)) {
- $accounts = user_load_multiple($uids, array());
-
- $transaction = db_transaction();
- try {
- foreach ($accounts as $uid => $account) {
- module_invoke_all('user_delete', $account);
- module_invoke_all('entity_delete', $account, 'user');
- field_attach_delete('user', $account);
- drupal_session_destroy_uid($account->uid);
- }
-
- db_delete('users')
- ->condition('uid', $uids, 'IN')
- ->execute();
- db_delete('users_roles')
- ->condition('uid', $uids, 'IN')
- ->execute();
- db_delete('authmap')
- ->condition('uid', $uids, 'IN')
- ->execute();
- }
- catch (Exception $e) {
- $transaction->rollback();
- watchdog_exception('user', $e);
- throw $e;
- }
- entity_get_controller('user')->resetCache();
- }
-}
-
-/**
- * Page callback wrapper for user_view().
- */
-function user_view_page($account) {
- // An administrator may try to view a non-existent account,
- // so we give them a 404 (versus a 403 for non-admins).
- return is_object($account) ? user_view($account) : MENU_NOT_FOUND;
-}
-
-/**
- * Generate an array for rendering the given user.
- *
- * When viewing a user profile, the $page array contains:
- *
- * - $page['content']['Profile Category']:
- * Profile categories keyed by their human-readable names.
- * - $page['content']['Profile Category']['profile_machine_name']:
- * Profile fields keyed by their machine-readable names.
- * - $page['content']['user_picture']:
- * User's rendered picture.
- * - $page['content']['summary']:
- * Contains the default "History" profile data for a user.
- * - $page['content']['#account']:
- * The user account of the profile being viewed.
- *
- * To theme user profiles, copy modules/user/user-profile.tpl.php
- * to your theme directory, and edit it as instructed in that file's comments.
- *
- * @param $account
- * A user object.
- * @param $view_mode
- * View mode, e.g. 'full'.
- * @param $langcode
- * (optional) A language code to use for rendering. Defaults to the global
- * content language of the current request.
- *
- * @return
- * An array as expected by drupal_render().
- */
-function user_view($account, $view_mode = 'full', $langcode = NULL) {
- if (!isset($langcode)) {
- $langcode = $GLOBALS['language_content']->language;
- }
-
- // Retrieve all profile fields and attach to $account->content.
- user_build_content($account, $view_mode, $langcode);
-
- $build = $account->content;
- // We don't need duplicate rendering info in account->content.
- unset($account->content);
-
- $build += array(
- '#theme' => 'user_profile',
- '#account' => $account,
- '#view_mode' => $view_mode,
- '#language' => $langcode,
- );
-
- // Allow modules to modify the structured user.
- $type = 'user';
- drupal_alter(array('user_view', 'entity_view'), $build, $type);
-
- return $build;
-}
-
-/**
- * Builds a structured array representing the profile content.
- *
- * @param $account
- * A user object.
- * @param $view_mode
- * View mode, e.g. 'full'.
- * @param $langcode
- * (optional) A language code to use for rendering. Defaults to the global
- * content language of the current request.
- */
-function user_build_content($account, $view_mode = 'full', $langcode = NULL) {
- if (!isset($langcode)) {
- $langcode = $GLOBALS['language_content']->language;
- }
-
- // Remove previously built content, if exists.
- $account->content = array();
-
- // Allow modules to change the view mode.
- $view_mode = key(entity_view_mode_prepare('user', array($account->uid => $account), $view_mode, $langcode));
-
- // Build fields content.
- field_attach_prepare_view('user', array($account->uid => $account), $view_mode, $langcode);
- entity_prepare_view('user', array($account->uid => $account), $langcode);
- $account->content += field_attach_view('user', $account, $view_mode, $langcode);
-
- // Populate $account->content with a render() array.
- module_invoke_all('user_view', $account, $view_mode, $langcode);
- module_invoke_all('entity_view', $account, 'user', $view_mode, $langcode);
-
- // Make sure the current view mode is stored if no module has already
- // populated the related key.
- $account->content += array('#view_mode' => $view_mode);
-}
-
-/**
- * Implements hook_mail().
- */
-function user_mail($key, &$message, $params) {
- $language = $message['language'];
- $variables = array('user' => $params['account']);
- $message['subject'] .= _user_mail_text($key . '_subject', $language, $variables);
- $message['body'][] = _user_mail_text($key . '_body', $language, $variables);
-}
-
-/**
- * Returns a mail string for a variable name.
- *
- * Used by user_mail() and the settings forms to retrieve strings.
- */
-function _user_mail_text($key, $language = NULL, $variables = array(), $replace = TRUE) {
- $langcode = isset($language) ? $language->language : NULL;
-
- if ($admin_setting = variable_get('user_mail_' . $key, FALSE)) {
- // An admin setting overrides the default string.
- $text = $admin_setting;
- }
- else {
- // No override, return default string.
- switch ($key) {
- case 'register_no_approval_required_subject':
- $text = t('Account details for [user:name] at [site:name]', array(), array('langcode' => $langcode));
- break;
- case 'register_no_approval_required_body':
- $text = t("[user:name],
-
-Thank you for registering at [site:name]. You may now log in by clicking this link or copying and pasting it to your browser:
-
-[user:one-time-login-url]
-
-This link can only be used once to log in and will lead you to a page where you can set your password.
-
-After setting your password, you will be able to log in at [site:login-url] in the future using:
-
-username: [user:name]
-password: Your password
-
--- [site:name] team", array(), array('langcode' => $langcode));
- break;
-
- case 'register_admin_created_subject':
- $text = t('An administrator created an account for you at [site:name]', array(), array('langcode' => $langcode));
- break;
- case 'register_admin_created_body':
- $text = t("[user:name],
-
-A site administrator at [site:name] has created an account for you. You may now log in by clicking this link or copying and pasting it to your browser:
-
-[user:one-time-login-url]
-
-This link can only be used once to log in and will lead you to a page where you can set your password.
-
-After setting your password, you will be able to log in at [site:login-url] in the future using:
-
-username: [user:name]
-password: Your password
-
--- [site:name] team", array(), array('langcode' => $langcode));
- break;
-
- case 'register_pending_approval_subject':
- case 'register_pending_approval_admin_subject':
- $text = t('Account details for [user:name] at [site:name] (pending admin approval)', array(), array('langcode' => $langcode));
- break;
- case 'register_pending_approval_body':
- $text = t("[user:name],
-
-Thank you for registering at [site:name]. Your application for an account is currently pending approval. Once it has been approved, you will receive another e-mail containing information about how to log in, set your password, and other details.
-
-
--- [site:name] team", array(), array('langcode' => $langcode));
- break;
- case 'register_pending_approval_admin_body':
- $text = t("[user:name] has applied for an account.
-
-[user:edit-url]", array(), array('langcode' => $langcode));
- break;
-
- case 'password_reset_subject':
- $text = t('Replacement login information for [user:name] at [site:name]', array(), array('langcode' => $langcode));
- break;
- case 'password_reset_body':
- $text = t("[user:name],
-
-A request to reset the password for your account has been made at [site:name].
-
-You may now log in by clicking this link or copying and pasting it to your browser:
-
-[user:one-time-login-url]
-
-This link can only be used once to log in and will lead you to a page where you can set your password. It expires after one day and nothing will happen if it's not used.
-
--- [site:name] team", array(), array('langcode' => $langcode));
- break;
-
- case 'status_activated_subject':
- $text = t('Account details for [user:name] at [site:name] (approved)', array(), array('langcode' => $langcode));
- break;
- case 'status_activated_body':
- $text = t("[user:name],
-
-Your account at [site:name] has been activated.
-
-You may now log in by clicking this link or copying and pasting it into your browser:
-
-[user:one-time-login-url]
-
-This link can only be used once to log in and will lead you to a page where you can set your password.
-
-After setting your password, you will be able to log in at [site:login-url] in the future using:
-
-username: [user:name]
-password: Your password
-
--- [site:name] team", array(), array('langcode' => $langcode));
- break;
-
- case 'status_blocked_subject':
- $text = t('Account details for [user:name] at [site:name] (blocked)', array(), array('langcode' => $langcode));
- break;
- case 'status_blocked_body':
- $text = t("[user:name],
-
-Your account on [site:name] has been blocked.
-
--- [site:name] team", array(), array('langcode' => $langcode));
- break;
-
- case 'cancel_confirm_subject':
- $text = t('Account cancellation request for [user:name] at [site:name]', array(), array('langcode' => $langcode));
- break;
- case 'cancel_confirm_body':
- $text = t("[user:name],
-
-A request to cancel your account has been made at [site:name].
-
-You may now cancel your account on [site:url-brief] by clicking this link or copying and pasting it into your browser:
-
-[user:cancel-url]
-
-NOTE: The cancellation of your account is not reversible.
-
-This link expires in one day and nothing will happen if it is not used.
-
--- [site:name] team", array(), array('langcode' => $langcode));
- break;
-
- case 'status_canceled_subject':
- $text = t('Account details for [user:name] at [site:name] (canceled)', array(), array('langcode' => $langcode));
- break;
- case 'status_canceled_body':
- $text = t("[user:name],
-
-Your account on [site:name] has been canceled.
-
--- [site:name] team", array(), array('langcode' => $langcode));
- break;
- }
- }
-
- if ($replace) {
- // We do not sanitize the token replacement, since the output of this
- // replacement is intended for an e-mail message, not a web browser.
- return token_replace($text, $variables, array('language' => $language, 'callback' => 'user_mail_tokens', 'sanitize' => FALSE, 'clear' => TRUE));
- }
-
- return $text;
-}
-
-/**
- * Token callback to add unsafe tokens for user mails.
- *
- * This function is used by the token_replace() call at the end of
- * _user_mail_text() to set up some additional tokens that can be
- * used in email messages generated by user_mail().
- *
- * @param $replacements
- * An associative array variable containing mappings from token names to
- * values (for use with strtr()).
- * @param $data
- * An associative array of token replacement values. If the 'user' element
- * exists, it must contain a user account object with the following
- * properties:
- * - login: The UNIX timestamp of the user's last login.
- * - pass: The hashed account login password.
- * @param $options
- * Unused parameter required by the token_replace() function.
- */
-function user_mail_tokens(&$replacements, $data, $options) {
- if (isset($data['user'])) {
- $replacements['[user:one-time-login-url]'] = user_pass_reset_url($data['user']);
- $replacements['[user:cancel-url]'] = user_cancel_url($data['user']);
- }
-}
-
-/*** Administrative features ***********************************************/
-
-/**
- * Retrieve an array of roles matching specified conditions.
- *
- * @param $membersonly
- * Set this to TRUE to exclude the 'anonymous' role.
- * @param $permission
- * A string containing a permission. If set, only roles containing that
- * permission are returned.
- *
- * @return
- * An associative array with the role id as the key and the role name as
- * value.
- */
-function user_roles($membersonly = FALSE, $permission = NULL) {
- $query = db_select('role', 'r');
- $query->addTag('translatable');
- $query->fields('r', array('rid', 'name'));
- $query->orderBy('weight');
- $query->orderBy('name');
- if (!empty($permission)) {
- $query->innerJoin('role_permission', 'p', 'r.rid = p.rid');
- $query->condition('p.permission', $permission);
- }
- $result = $query->execute();
-
- $roles = array();
- foreach ($result as $role) {
- switch ($role->rid) {
- // We only translate the built in role names
- case DRUPAL_ANONYMOUS_RID:
- if (!$membersonly) {
- $roles[$role->rid] = t($role->name);
- }
- break;
- case DRUPAL_AUTHENTICATED_RID:
- $roles[$role->rid] = t($role->name);
- break;
- default:
- $roles[$role->rid] = $role->name;
- }
- }
-
- return $roles;
-}
-
-/**
- * Fetches a user role by role ID.
- *
- * @param $rid
- * An integer representing the role ID.
- *
- * @return
- * A fully-loaded role object if a role with the given ID exists, or FALSE
- * otherwise.
- *
- * @see user_role_load_by_name()
- */
-function user_role_load($rid) {
- return db_select('role', 'r')
- ->fields('r')
- ->condition('rid', $rid)
- ->execute()
- ->fetchObject();
-}
-
-/**
- * Fetches a user role by role name.
- *
- * @param $role_name
- * A string representing the role name.
- *
- * @return
- * A fully-loaded role object if a role with the given name exists, or FALSE
- * otherwise.
- *
- * @see user_role_load()
- */
-function user_role_load_by_name($role_name) {
- return db_select('role', 'r')
- ->fields('r')
- ->condition('name', $role_name)
- ->execute()
- ->fetchObject();
-}
-
-/**
- * Save a user role to the database.
- *
- * @param $role
- * A role object to modify or add. If $role->rid is not specified, a new
- * role will be created.
- * @return
- * Status constant indicating if role was created or updated.
- * Failure to write the user role record will return FALSE. Otherwise.
- * SAVED_NEW or SAVED_UPDATED is returned depending on the operation
- * performed.
- */
-function user_role_save($role) {
- if ($role->name) {
- // Prevent leading and trailing spaces in role names.
- $role->name = trim($role->name);
- }
- if (!isset($role->weight)) {
- // Set a role weight to make this new role last.
- $query = db_select('role');
- $query->addExpression('MAX(weight)');
- $role->weight = $query->execute()->fetchField() + 1;
- }
-
- // Let modules modify the user role before it is saved to the database.
- module_invoke_all('user_role_presave', $role);
-
- if (!empty($role->rid) && $role->name) {
- $status = drupal_write_record('role', $role, 'rid');
- module_invoke_all('user_role_update', $role);
- }
- else {
- $status = drupal_write_record('role', $role);
- module_invoke_all('user_role_insert', $role);
- }
-
- // Clear the user access cache.
- drupal_static_reset('user_access');
- drupal_static_reset('user_role_permissions');
-
- return $status;
-}
-
-/**
- * Delete a user role from database.
- *
- * @param $role
- * A string with the role name, or an integer with the role ID.
- */
-function user_role_delete($role) {
- if (is_int($role)) {
- $role = user_role_load($role);
- }
- else {
- $role = user_role_load_by_name($role);
- }
-
- db_delete('role')
- ->condition('rid', $role->rid)
- ->execute();
- db_delete('role_permission')
- ->condition('rid', $role->rid)
- ->execute();
- // Update the users who have this role set:
- db_delete('users_roles')
- ->condition('rid', $role->rid)
- ->execute();
-
- module_invoke_all('user_role_delete', $role);
-
- // Clear the user access cache.
- drupal_static_reset('user_access');
- drupal_static_reset('user_role_permissions');
-}
-
-/**
- * Menu access callback for user role editing.
- */
-function user_role_edit_access($role) {
- // Prevent the system-defined roles from being altered or removed.
- if ($role->rid == DRUPAL_ANONYMOUS_RID || $role->rid == DRUPAL_AUTHENTICATED_RID) {
- return FALSE;
- }
-
- return user_access('administer permissions');
-}
-
-/**
- * Determine the modules that permissions belong to.
- *
- * @return
- * An associative array in the format $permission => $module.
- */
-function user_permission_get_modules() {
- $permissions = array();
- foreach (module_implements('permission') as $module) {
- $perms = module_invoke($module, 'permission');
- foreach ($perms as $key => $value) {
- $permissions[$key] = $module;
- }
- }
- return $permissions;
-}
-
-/**
- * Change permissions for a user role.
- *
- * This function may be used to grant and revoke multiple permissions at once.
- * For example, when a form exposes checkboxes to configure permissions for a
- * role, the form submit handler may directly pass the submitted values for the
- * checkboxes form element to this function.
- *
- * @param $rid
- * The ID of a user role to alter.
- * @param $permissions
- * An associative array, where the key holds the permission name and the value
- * determines whether to grant or revoke that permission. Any value that
- * evaluates to TRUE will cause the permission to be granted. Any value that
- * evaluates to FALSE will cause the permission to be revoked.
- * @code
- * array(
- * 'administer nodes' => 0, // Revoke 'administer nodes'
- * 'administer blocks' => FALSE, // Revoke 'administer blocks'
- * 'access user profiles' => 1, // Grant 'access user profiles'
- * 'access content' => TRUE, // Grant 'access content'
- * 'access comments' => 'access comments', // Grant 'access comments'
- * )
- * @endcode
- * Existing permissions are not changed, unless specified in $permissions.
- *
- * @see user_role_grant_permissions()
- * @see user_role_revoke_permissions()
- */
-function user_role_change_permissions($rid, array $permissions = array()) {
- // Grant new permissions for the role.
- $grant = array_filter($permissions);
- if (!empty($grant)) {
- user_role_grant_permissions($rid, array_keys($grant));
- }
- // Revoke permissions for the role.
- $revoke = array_diff_assoc($permissions, $grant);
- if (!empty($revoke)) {
- user_role_revoke_permissions($rid, array_keys($revoke));
- }
-}
-
-/**
- * Grant permissions to a user role.
- *
- * @param $rid
- * The ID of a user role to alter.
- * @param $permissions
- * A list of permission names to grant.
- *
- * @see user_role_change_permissions()
- * @see user_role_revoke_permissions()
- */
-function user_role_grant_permissions($rid, array $permissions = array()) {
- $modules = user_permission_get_modules();
- // Grant new permissions for the role.
- foreach ($permissions as $name) {
- db_merge('role_permission')
- ->key(array(
- 'rid' => $rid,
- 'permission' => $name,
- ))
- ->fields(array(
- 'module' => $modules[$name],
- ))
- ->execute();
- }
-
- // Clear the user access cache.
- drupal_static_reset('user_access');
- drupal_static_reset('user_role_permissions');
-}
-
-/**
- * Revoke permissions from a user role.
- *
- * @param $rid
- * The ID of a user role to alter.
- * @param $permissions
- * A list of permission names to revoke.
- *
- * @see user_role_change_permissions()
- * @see user_role_grant_permissions()
- */
-function user_role_revoke_permissions($rid, array $permissions = array()) {
- // Revoke permissions for the role.
- db_delete('role_permission')
- ->condition('rid', $rid)
- ->condition('permission', $permissions, 'IN')
- ->execute();
-
- // Clear the user access cache.
- drupal_static_reset('user_access');
- drupal_static_reset('user_role_permissions');
-}
-
-/**
- * Implements hook_user_operations().
- */
-function user_user_operations($form = array(), $form_state = array()) {
- $operations = array(
- 'unblock' => array(
- 'label' => t('Unblock the selected users'),
- 'callback' => 'user_user_operations_unblock',
- ),
- 'block' => array(
- 'label' => t('Block the selected users'),
- 'callback' => 'user_user_operations_block',
- ),
- 'cancel' => array(
- 'label' => t('Cancel the selected user accounts'),
- ),
- );
-
- if (user_access('administer permissions')) {
- $roles = user_roles(TRUE);
- unset($roles[DRUPAL_AUTHENTICATED_RID]); // Can't edit authenticated role.
-
- $add_roles = array();
- foreach ($roles as $key => $value) {
- $add_roles['add_role-' . $key] = $value;
- }
-
- $remove_roles = array();
- foreach ($roles as $key => $value) {
- $remove_roles['remove_role-' . $key] = $value;
- }
-
- if (count($roles)) {
- $role_operations = array(
- t('Add a role to the selected users') => array(
- 'label' => $add_roles,
- ),
- t('Remove a role from the selected users') => array(
- 'label' => $remove_roles,
- ),
- );
-
- $operations += $role_operations;
- }
- }
-
- // If the form has been posted, we need to insert the proper data for
- // role editing if necessary.
- if (!empty($form_state['submitted'])) {
- $operation_rid = explode('-', $form_state['values']['operation']);
- $operation = $operation_rid[0];
- if ($operation == 'add_role' || $operation == 'remove_role') {
- $rid = $operation_rid[1];
- if (user_access('administer permissions')) {
- $operations[$form_state['values']['operation']] = array(
- 'callback' => 'user_multiple_role_edit',
- 'callback arguments' => array($operation, $rid),
- );
- }
- else {
- watchdog('security', 'Detected malicious attempt to alter protected user fields.', array(), WATCHDOG_WARNING);
- return;
- }
- }
- }
-
- return $operations;
-}
-
-/**
- * Callback function for admin mass unblocking users.
- */
-function user_user_operations_unblock($accounts) {
- $accounts = user_load_multiple($accounts);
- foreach ($accounts as $account) {
- // Skip unblocking user if they are already unblocked.
- if ($account !== FALSE && $account->status == 0) {
- user_save($account, array('status' => 1));
- }
- }
-}
-
-/**
- * Callback function for admin mass blocking users.
- */
-function user_user_operations_block($accounts) {
- $accounts = user_load_multiple($accounts);
- foreach ($accounts as $account) {
- // Skip blocking user if they are already blocked.
- if ($account !== FALSE && $account->status == 1) {
- // For efficiency manually save the original account before applying any
- // changes.
- $account->original = clone $account;
- user_save($account, array('status' => 0));
- }
- }
-}
-
-/**
- * Callback function for admin mass adding/deleting a user role.
- */
-function user_multiple_role_edit($accounts, $operation, $rid) {
- // The role name is not necessary as user_save() will reload the user
- // object, but some modules' hook_user() may look at this first.
- $role_name = db_query('SELECT name FROM {role} WHERE rid = :rid', array(':rid' => $rid))->fetchField();
-
- switch ($operation) {
- case 'add_role':
- $accounts = user_load_multiple($accounts);
- foreach ($accounts as $account) {
- // Skip adding the role to the user if they already have it.
- if ($account !== FALSE && !isset($account->roles[$rid])) {
- $roles = $account->roles + array($rid => $role_name);
- // For efficiency manually save the original account before applying
- // any changes.
- $account->original = clone $account;
- user_save($account, array('roles' => $roles));
- }
- }
- break;
- case 'remove_role':
- $accounts = user_load_multiple($accounts);
- foreach ($accounts as $account) {
- // Skip removing the role from the user if they already don't have it.
- if ($account !== FALSE && isset($account->roles[$rid])) {
- $roles = array_diff($account->roles, array($rid => $role_name));
- // For efficiency manually save the original account before applying
- // any changes.
- $account->original = clone $account;
- user_save($account, array('roles' => $roles));
- }
- }
- break;
- }
-}
-
-function user_multiple_cancel_confirm($form, &$form_state) {
- $edit = $form_state['input'];
-
- $form['accounts'] = array('#prefix' => '
', '#tree' => TRUE);
- $accounts = user_load_multiple(array_keys(array_filter($edit['accounts'])));
- foreach ($accounts as $uid => $account) {
- // Prevent user 1 from being canceled.
- if ($uid <= 1) {
- continue;
- }
- $form['accounts'][$uid] = array(
- '#type' => 'hidden',
- '#value' => $uid,
- '#prefix' => '
',
- '#suffix' => check_plain($account->name) . " \n",
- );
- }
-
- // Output a notice that user 1 cannot be canceled.
- if (isset($accounts[1])) {
- $redirect = (count($accounts) == 1);
- $message = t('The user account %name cannot be cancelled.', array('%name' => $accounts[1]->name));
- drupal_set_message($message, $redirect ? 'error' : 'warning');
- // If only user 1 was selected, redirect to the overview.
- if ($redirect) {
- drupal_goto('admin/people');
- }
- }
-
- $form['operation'] = array('#type' => 'hidden', '#value' => 'cancel');
-
- module_load_include('inc', 'user', 'user.pages');
- $form['user_cancel_method'] = array(
- '#type' => 'item',
- '#title' => t('When cancelling these accounts'),
- );
- $form['user_cancel_method'] += user_cancel_methods();
- // Remove method descriptions.
- foreach (element_children($form['user_cancel_method']) as $element) {
- unset($form['user_cancel_method'][$element]['#description']);
- }
-
- // Allow to send the account cancellation confirmation mail.
- $form['user_cancel_confirm'] = array(
- '#type' => 'checkbox',
- '#title' => t('Require e-mail confirmation to cancel account.'),
- '#default_value' => FALSE,
- '#description' => t('When enabled, the user must confirm the account cancellation via e-mail.'),
- );
- // Also allow to send account canceled notification mail, if enabled.
- $form['user_cancel_notify'] = array(
- '#type' => 'checkbox',
- '#title' => t('Notify user when account is canceled.'),
- '#default_value' => FALSE,
- '#access' => variable_get('user_mail_status_canceled_notify', FALSE),
- '#description' => t('When enabled, the user will receive an e-mail notification after the account has been cancelled.'),
- );
-
- return confirm_form($form,
- t('Are you sure you want to cancel these user accounts?'),
- 'admin/people', t('This action cannot be undone.'),
- t('Cancel accounts'), t('Cancel'));
-}
-
-/**
- * Submit handler for mass-account cancellation form.
- *
- * @see user_multiple_cancel_confirm()
- * @see user_cancel_confirm_form_submit()
- */
-function user_multiple_cancel_confirm_submit($form, &$form_state) {
- global $user;
-
- if ($form_state['values']['confirm']) {
- foreach ($form_state['values']['accounts'] as $uid => $value) {
- // Prevent programmatic form submissions from cancelling user 1.
- if ($uid <= 1) {
- continue;
- }
- // Prevent user administrators from deleting themselves without confirmation.
- if ($uid == $user->uid) {
- $admin_form_state = $form_state;
- unset($admin_form_state['values']['user_cancel_confirm']);
- $admin_form_state['values']['_account'] = $user;
- user_cancel_confirm_form_submit(array(), $admin_form_state);
- }
- else {
- user_cancel($form_state['values'], $uid, $form_state['values']['user_cancel_method']);
- }
- }
- }
- $form_state['redirect'] = 'admin/people';
-}
-
-/**
- * Retrieve a list of all user setting/information categories and sort them by weight.
- */
-function _user_categories() {
- $categories = module_invoke_all('user_categories');
- usort($categories, '_user_sort');
-
- return $categories;
-}
-
-function _user_sort($a, $b) {
- $a = (array) $a + array('weight' => 0, 'title' => '');
- $b = (array) $b + array('weight' => 0, 'title' => '');
- return $a['weight'] < $b['weight'] ? -1 : ($a['weight'] > $b['weight'] ? 1 : ($a['title'] < $b['title'] ? -1 : 1));
-}
-
-/**
- * List user administration filters that can be applied.
- */
-function user_filters() {
- // Regular filters
- $filters = array();
- $roles = user_roles(TRUE);
- unset($roles[DRUPAL_AUTHENTICATED_RID]); // Don't list authorized role.
- if (count($roles)) {
- $filters['role'] = array(
- 'title' => t('role'),
- 'field' => 'ur.rid',
- 'options' => array(
- '[any]' => t('any'),
- ) + $roles,
- );
- }
-
- $options = array();
- foreach (module_implements('permission') as $module) {
- $function = $module . '_permission';
- if ($permissions = $function()) {
- asort($permissions);
- foreach ($permissions as $permission => $description) {
- $options[t('@module module', array('@module' => $module))][$permission] = t($permission);
- }
- }
- }
- ksort($options);
- $filters['permission'] = array(
- 'title' => t('permission'),
- 'options' => array(
- '[any]' => t('any'),
- ) + $options,
- );
-
- $filters['status'] = array(
- 'title' => t('status'),
- 'field' => 'u.status',
- 'options' => array(
- '[any]' => t('any'),
- 1 => t('active'),
- 0 => t('blocked'),
- ),
- );
- return $filters;
-}
-
-/**
- * Extends a query object for user administration filters based on session.
- *
- * @param $query
- * Query object that should be filtered.
- */
-function user_build_filter_query(SelectQuery $query) {
- $filters = user_filters();
- // Extend Query with filter conditions.
- foreach (isset($_SESSION['user_overview_filter']) ? $_SESSION['user_overview_filter'] : array() as $filter) {
- list($key, $value) = $filter;
- // This checks to see if this permission filter is an enabled permission for
- // the authenticated role. If so, then all users would be listed, and we can
- // skip adding it to the filter query.
- if ($key == 'permission') {
- $account = new stdClass();
- $account->uid = 'user_filter';
- $account->roles = array(DRUPAL_AUTHENTICATED_RID => 1);
- if (user_access($value, $account)) {
- continue;
- }
- $users_roles_alias = $query->join('users_roles', 'ur', '%alias.uid = u.uid');
- $permission_alias = $query->join('role_permission', 'p', $users_roles_alias . '.rid = %alias.rid');
- $query->condition($permission_alias . '.permission', $value);
- }
- elseif ($key == 'role') {
- $users_roles_alias = $query->join('users_roles', 'ur', '%alias.uid = u.uid');
- $query->condition($users_roles_alias . '.rid' , $value);
- }
- else {
- $query->condition($filters[$key]['field'], $value);
- }
- }
-}
-
-/**
- * Implements hook_comment_view().
- */
-function user_comment_view($comment) {
- if (variable_get('user_signatures', 0) && !empty($comment->signature)) {
- // @todo This alters and replaces the original object value, so a
- // hypothetical process of loading, viewing, and saving will hijack the
- // stored data. Consider renaming to $comment->signature_safe or similar
- // here and elsewhere in Drupal 8.
- $comment->signature = check_markup($comment->signature, $comment->signature_format, '', TRUE);
- }
- else {
- $comment->signature = '';
- }
-}
-
-/**
- * Returns HTML for a user signature.
- *
- * @param $variables
- * An associative array containing:
- * - signature: The user's signature.
- *
- * @ingroup themeable
- */
-function theme_user_signature($variables) {
- $signature = $variables['signature'];
- $output = '';
-
- if ($signature) {
- $output .= '
';
- $output .= '
—
';
- $output .= $signature;
- $output .= '
';
- }
-
- return $output;
-}
-
-/**
- * Get the language object preferred by the user. This user preference can
- * be set on the user account editing page, and is only available if there
- * are more than one languages enabled on the site. If the user did not
- * choose a preferred language, or is the anonymous user, the $default
- * value, or if it is not set, the site default language will be returned.
- *
- * @param $account
- * User account to look up language for.
- * @param $default
- * Optional default language object to return if the account
- * has no valid language.
- */
-function user_preferred_language($account, $default = NULL) {
- $language_list = language_list();
- if (!empty($account->language) && isset($language_list[$account->language])) {
- return $language_list[$account->language];
- }
- else {
- return $default ? $default : language_default();
- }
-}
-
-/**
- * Conditionally create and send a notification email when a certain
- * operation happens on the given user account.
- *
- * @see user_mail_tokens()
- * @see drupal_mail()
- *
- * @param $op
- * The operation being performed on the account. Possible values:
- * - 'register_admin_created': Welcome message for user created by the admin.
- * - 'register_no_approval_required': Welcome message when user
- * self-registers.
- * - 'register_pending_approval': Welcome message, user pending admin
- * approval.
- * - 'password_reset': Password recovery request.
- * - 'status_activated': Account activated.
- * - 'status_blocked': Account blocked.
- * - 'cancel_confirm': Account cancellation request.
- * - 'status_canceled': Account canceled.
- *
- * @param $account
- * The user object of the account being notified. Must contain at
- * least the fields 'uid', 'name', and 'mail'.
- * @param $language
- * Optional language to use for the notification, overriding account language.
- *
- * @return
- * The return value from drupal_mail_system()->mail(), if ends up being
- * called.
- */
-function _user_mail_notify($op, $account, $language = NULL) {
- // By default, we always notify except for canceled and blocked.
- $default_notify = ($op != 'status_canceled' && $op != 'status_blocked');
- $notify = variable_get('user_mail_' . $op . '_notify', $default_notify);
- if ($notify) {
- $params['account'] = $account;
- $language = $language ? $language : user_preferred_language($account);
- $mail = drupal_mail('user', $op, $account->mail, $language, $params);
- if ($op == 'register_pending_approval') {
- // If a user registered requiring admin approval, notify the admin, too.
- // We use the site default language for this.
- drupal_mail('user', 'register_pending_approval_admin', variable_get('site_mail', ini_get('sendmail_from')), language_default(), $params);
- }
- }
- return empty($mail) ? NULL : $mail['result'];
-}
-
-/**
- * Form element process handler for client-side password validation.
- *
- * This #process handler is automatically invoked for 'password_confirm' form
- * elements to add the JavaScript and string translations for dynamic password
- * validation.
- *
- * @see system_element_info()
- */
-function user_form_process_password_confirm($element) {
- global $user;
-
- $js_settings = array(
- 'password' => array(
- 'strengthTitle' => t('Password strength:'),
- 'hasWeaknesses' => t('To make your password stronger:'),
- 'tooShort' => t('Make it at least 6 characters'),
- 'addLowerCase' => t('Add lowercase letters'),
- 'addUpperCase' => t('Add uppercase letters'),
- 'addNumbers' => t('Add numbers'),
- 'addPunctuation' => t('Add punctuation'),
- 'sameAsUsername' => t('Make it different from your username'),
- 'confirmSuccess' => t('yes'),
- 'confirmFailure' => t('no'),
- 'weak' => t('Weak'),
- 'fair' => t('Fair'),
- 'good' => t('Good'),
- 'strong' => t('Strong'),
- 'confirmTitle' => t('Passwords match:'),
- 'username' => (isset($user->name) ? $user->name : ''),
- ),
- );
-
- $element['#attached']['js'][] = drupal_get_path('module', 'user') . '/user.js';
- // Ensure settings are only added once per page.
- static $already_added = FALSE;
- if (!$already_added) {
- $already_added = TRUE;
- $element['#attached']['js'][] = array('data' => $js_settings, 'type' => 'setting');
- }
-
- return $element;
-}
-
-/**
- * Implements hook_node_load().
- */
-function user_node_load($nodes, $types) {
- // Build an array of all uids for node authors, keyed by nid.
- $uids = array();
- foreach ($nodes as $nid => $node) {
- $uids[$nid] = $node->uid;
- }
-
- // Fetch name, picture, and data for these users.
- $user_fields = db_query("SELECT uid, name, picture, data FROM {users} WHERE uid IN (:uids)", array(':uids' => $uids))->fetchAllAssoc('uid');
-
- // Add these values back into the node objects.
- foreach ($uids as $nid => $uid) {
- $nodes[$nid]->name = $user_fields[$uid]->name;
- $nodes[$nid]->picture = $user_fields[$uid]->picture;
- $nodes[$nid]->data = $user_fields[$uid]->data;
- }
-}
-
-/**
- * Implements hook_image_style_delete().
- */
-function user_image_style_delete($style) {
- // If a style is deleted, update the variables.
- // Administrators choose a replacement style when deleting.
- user_image_style_save($style);
-}
-
-/**
- * Implements hook_image_style_save().
- */
-function user_image_style_save($style) {
- // If a style is renamed, update the variables that use it.
- if (isset($style['old_name']) && $style['old_name'] == variable_get('user_picture_style', '')) {
- variable_set('user_picture_style', $style['name']);
- }
-}
-
-/**
- * Implements hook_action_info().
- */
-function user_action_info() {
- return array(
- 'user_block_user_action' => array(
- 'label' => t('Block current user'),
- 'type' => 'user',
- 'configurable' => FALSE,
- 'triggers' => array('any'),
- ),
- );
-}
-
-/**
- * Blocks a specific user or the current user, if one is not specified.
- *
- * @param $entity
- * (optional) An entity object; if it is provided and it has a uid property,
- * the user with that ID is blocked.
- * @param $context
- * (optional) An associative array; if no user ID is found in $entity, the
- * 'uid' element of this array determines the user to block.
- *
- * @ingroup actions
- */
-function user_block_user_action(&$entity, $context = array()) {
- // First priority: If there is a $entity->uid, block that user.
- // This is most likely a user object or the author if a node or comment.
- if (isset($entity->uid)) {
- $uid = $entity->uid;
- }
- elseif (isset($context['uid'])) {
- $uid = $context['uid'];
- }
- // If neither of those are valid, then block the current user.
- else {
- $uid = $GLOBALS['user']->uid;
- }
- $account = user_load($uid);
- $account = user_save($account, array('status' => 0));
- watchdog('action', 'Blocked user %name.', array('%name' => $account->name));
-}
-
-/**
- * Implements hook_form_FORM_ID_alter().
- *
- * Add a checkbox for the 'user_register_form' instance settings on the 'Edit
- * field instance' form.
- */
-function user_form_field_ui_field_edit_form_alter(&$form, &$form_state, $form_id) {
- $instance = $form['#instance'];
-
- if ($instance['entity_type'] == 'user' && !$form['#field']['locked']) {
- $form['instance']['settings']['user_register_form'] = array(
- '#type' => 'checkbox',
- '#title' => t('Display on user registration form.'),
- '#description' => t("This is compulsory for 'required' fields."),
- // Field instances created in D7 beta releases before the setting was
- // introduced might be set as 'required' and 'not shown on user_register
- // form'. We make sure the checkbox comes as 'checked' for those.
- '#default_value' => $instance['settings']['user_register_form'] || $instance['required'],
- // Display just below the 'required' checkbox.
- '#weight' => $form['instance']['required']['#weight'] + .1,
- // Disabled when the 'required' checkbox is checked.
- '#states' => array(
- 'enabled' => array('input[name="instance[required]"]' => array('checked' => FALSE)),
- ),
- // Checked when the 'required' checkbox is checked. This is done through
- // a custom behavior, since the #states system would also synchronize on
- // uncheck.
- '#attached' => array(
- 'js' => array(drupal_get_path('module', 'user') . '/user.js'),
- ),
- );
-
- array_unshift($form['#submit'], 'user_form_field_ui_field_edit_form_submit');
- }
-}
-
-/**
- * Additional submit handler for the 'Edit field instance' form.
- *
- * Make sure the 'user_register_form' setting is set for required fields.
- */
-function user_form_field_ui_field_edit_form_submit($form, &$form_state) {
- $instance = $form_state['values']['instance'];
-
- if (!empty($instance['required'])) {
- form_set_value($form['instance']['settings']['user_register_form'], 1, $form_state);
- }
-}
-
-/**
- * Form builder; the user registration form.
- *
- * @ingroup forms
- * @see user_account_form()
- * @see user_account_form_validate()
- * @see user_register_submit()
- */
-function user_register_form($form, &$form_state) {
- global $user;
-
- $admin = user_access('administer users');
-
- // Pass access information to the submit handler. Running an access check
- // inside the submit function interferes with form processing and breaks
- // hook_form_alter().
- $form['administer_users'] = array(
- '#type' => 'value',
- '#value' => $admin,
- );
-
- // If we aren't admin but already logged on, go to the user page instead.
- if (!$admin && $user->uid) {
- drupal_goto('user/' . $user->uid);
- }
-
- $form['#user'] = drupal_anonymous_user();
- $form['#user_category'] = 'register';
-
- $form['#attached']['library'][] = array('system', 'jquery.cookie');
- $form['#attributes']['class'][] = 'user-info-from-cookie';
-
- // Start with the default user account fields.
- user_account_form($form, $form_state);
-
- // Attach field widgets, and hide the ones where the 'user_register_form'
- // setting is not on.
- $langcode = entity_language('user', $form['#user']);
- field_attach_form('user', $form['#user'], $form, $form_state, $langcode);
- foreach (field_info_instances('user', 'user') as $field_name => $instance) {
- if (empty($instance['settings']['user_register_form'])) {
- $form[$field_name]['#access'] = FALSE;
- }
- }
-
- if ($admin) {
- // Redirect back to page which initiated the create request;
- // usually admin/people/create.
- $form_state['redirect'] = $_GET['q'];
- }
-
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Create new account'),
- );
-
- $form['#validate'][] = 'user_register_validate';
- // Add the final user registration form submit handler.
- $form['#submit'][] = 'user_register_submit';
-
- return $form;
-}
-
-/**
- * Validation function for the user registration form.
- */
-function user_register_validate($form, &$form_state) {
- entity_form_field_validate('user', $form, $form_state);
-}
-
-/**
- * Submit handler for the user registration form.
- *
- * This function is shared by the installation form and the normal registration form,
- * which is why it can't be in the user.pages.inc file.
- *
- * @see user_register_form()
- */
-function user_register_submit($form, &$form_state) {
- $admin = $form_state['values']['administer_users'];
-
- if (!variable_get('user_email_verification', TRUE) || $admin) {
- $pass = $form_state['values']['pass'];
- }
- else {
- $pass = user_password();
- }
- $notify = !empty($form_state['values']['notify']);
-
- // Remove unneeded values.
- form_state_values_clean($form_state);
-
- $form_state['values']['pass'] = $pass;
- $form_state['values']['init'] = $form_state['values']['mail'];
-
- $account = $form['#user'];
-
- entity_form_submit_build_entity('user', $account, $form, $form_state);
-
- // Populate $edit with the properties of $account, which have been edited on
- // this form by taking over all values, which appear in the form values too.
- $edit = array_intersect_key((array) $account, $form_state['values']);
- $account = user_save($account, $edit);
-
- // Terminate if an error occurred during user_save().
- if (!$account) {
- drupal_set_message(t("Error saving user account."), 'error');
- $form_state['redirect'] = '';
- return;
- }
- $form_state['user'] = $account;
- $form_state['values']['uid'] = $account->uid;
-
- watchdog('user', 'New user: %name (%email).', array('%name' => $form_state['values']['name'], '%email' => $form_state['values']['mail']), WATCHDOG_NOTICE, l(t('edit'), 'user/' . $account->uid . '/edit'));
-
- // Add plain text password into user account to generate mail tokens.
- $account->password = $pass;
-
- // New administrative account without notification.
- $uri = entity_uri('user', $account);
- if ($admin && !$notify) {
- drupal_set_message(t('Created a new user account for
%name . No e-mail has been sent.', array('@url' => url($uri['path'], $uri['options']), '%name' => $account->name)));
- }
- // No e-mail verification required; log in user immediately.
- elseif (!$admin && !variable_get('user_email_verification', TRUE) && $account->status) {
- _user_mail_notify('register_no_approval_required', $account);
- $form_state['uid'] = $account->uid;
- user_login_submit(array(), $form_state);
- drupal_set_message(t('Registration successful. You are now logged in.'));
- $form_state['redirect'] = '';
- }
- // No administrator approval required.
- elseif ($account->status || $notify) {
- $op = $notify ? 'register_admin_created' : 'register_no_approval_required';
- _user_mail_notify($op, $account);
- if ($notify) {
- drupal_set_message(t('A welcome message with further instructions has been e-mailed to the new user
%name .', array('@url' => url($uri['path'], $uri['options']), '%name' => $account->name)));
- }
- else {
- drupal_set_message(t('A welcome message with further instructions has been sent to your e-mail address.'));
- $form_state['redirect'] = '';
- }
- }
- // Administrator approval required.
- else {
- _user_mail_notify('register_pending_approval', $account);
- drupal_set_message(t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.
In the meantime, a welcome message with further instructions has been sent to your e-mail address.'));
- $form_state['redirect'] = '';
- }
-}
-
-/**
- * Implements hook_modules_installed().
- */
-function user_modules_installed($modules) {
- // Assign all available permissions to the administrator role.
- $rid = variable_get('user_admin_role', 0);
- if ($rid) {
- $permissions = array();
- foreach ($modules as $module) {
- if ($module_permissions = module_invoke($module, 'permission')) {
- $permissions = array_merge($permissions, array_keys($module_permissions));
- }
- }
- if (!empty($permissions)) {
- user_role_grant_permissions($rid, $permissions);
- }
- }
-}
-
-/**
- * Implements hook_modules_uninstalled().
- */
-function user_modules_uninstalled($modules) {
- db_delete('role_permission')
- ->condition('module', $modules, 'IN')
- ->execute();
-}
-
-/**
- * Helper function to rewrite the destination to avoid redirecting to login page after login.
- *
- * Third-party authentication modules may use this function to determine the
- * proper destination after a user has been properly logged in.
- */
-function user_login_destination() {
- $destination = drupal_get_destination();
- if ($destination['destination'] == 'user/login') {
- $destination['destination'] = 'user';
- }
- return $destination;
-}
-
-/**
- * Saves visitor information as a cookie so it can be reused.
- *
- * @param $values
- * An array of key/value pairs to be saved into a cookie.
- */
-function user_cookie_save(array $values) {
- foreach ($values as $field => $value) {
- // Set cookie for 365 days.
- setrawcookie('Drupal.visitor.' . $field, rawurlencode($value), REQUEST_TIME + 31536000, '/');
- }
-}
-
-/**
- * Delete a visitor information cookie.
- *
- * @param $cookie_name
- * A cookie name such as 'homepage'.
- */
-function user_cookie_delete($cookie_name) {
- setrawcookie('Drupal.visitor.' . $cookie_name, '', REQUEST_TIME - 3600, '/');
-}
-
-/**
- * Implements hook_rdf_mapping().
- */
-function user_rdf_mapping() {
- return array(
- array(
- 'type' => 'user',
- 'bundle' => RDF_DEFAULT_BUNDLE,
- 'mapping' => array(
- 'rdftype' => array('sioc:UserAccount'),
- 'name' => array(
- 'predicates' => array('foaf:name'),
- ),
- 'homepage' => array(
- 'predicates' => array('foaf:page'),
- 'type' => 'rel',
- ),
- ),
- ),
- );
-}
-
-/**
- * Implements hook_file_download_access().
- */
-function user_file_download_access($field, $entity_type, $entity) {
- if ($entity_type == 'user') {
- return user_view_access($entity);
- }
-}
-
-/**
- * Implements hook_system_info_alter().
- *
- * Drupal 7 ships with two methods to add additional fields to users: Profile
- * module, a legacy module dating back from 2002, and Field API integration
- * with users. While Field API support for users currently provides less end
- * user features, the inefficient data storage mechanism of Profile module, as
- * well as its lack of consistency with the rest of the entity / field based
- * systems in Drupal 7, make this a sub-optimal solution to those who were not
- * using it in previous releases of Drupal.
- *
- * To prevent new Drupal 7 sites from installing Profile module, and
- * unwittingly ending up with two completely different and incompatible methods
- * of extending users, only make the Profile module available if the profile_*
- * tables are present.
- *
- * @todo: Remove in D8, pending upgrade path.
- */
-function user_system_info_alter(&$info, $file, $type) {
- if ($type == 'module' && $file->name == 'profile' && db_table_exists('profile_field')) {
- $info['hidden'] = FALSE;
- }
-}
diff --git a/modules/user/user.pages.inc b/modules/user/user.pages.inc
deleted file mode 100644
index f21bd13..0000000
--- a/modules/user/user.pages.inc
+++ /dev/null
@@ -1,564 +0,0 @@
-fields('users', array('name'))->condition('name', db_like($string) . '%', 'LIKE')->range(0, 10)->execute();
- foreach ($result as $user) {
- $matches[$user->name] = check_plain($user->name);
- }
- }
-
- drupal_json_output($matches);
-}
-
-/**
- * Form builder; Request a password reset.
- *
- * @ingroup forms
- * @see user_pass_validate()
- * @see user_pass_submit()
- */
-function user_pass() {
- global $user;
-
- $form['name'] = array(
- '#type' => 'textfield',
- '#title' => t('Username or e-mail address'),
- '#size' => 60,
- '#maxlength' => max(USERNAME_MAX_LENGTH, EMAIL_MAX_LENGTH),
- '#required' => TRUE,
- '#default_value' => isset($_GET['name']) ? $_GET['name'] : '',
- );
- // Allow logged in users to request this also.
- if ($user->uid > 0) {
- $form['name']['#type'] = 'value';
- $form['name']['#value'] = $user->mail;
- $form['mail'] = array(
- '#prefix' => '
',
- '#markup' => t('Password reset instructions will be mailed to %email. You must log out to use the password reset link in the e-mail.', array('%email' => $user->mail)),
- '#suffix' => '
',
- );
- }
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('E-mail new password'));
-
- return $form;
-}
-
-function user_pass_validate($form, &$form_state) {
- $name = trim($form_state['values']['name']);
- // Try to load by email.
- $users = user_load_multiple(array(), array('mail' => $name, 'status' => '1'));
- $account = reset($users);
- if (!$account) {
- // No success, try to load by name.
- $users = user_load_multiple(array(), array('name' => $name, 'status' => '1'));
- $account = reset($users);
- }
- if (isset($account->uid)) {
- form_set_value(array('#parents' => array('account')), $account, $form_state);
- }
- else {
- form_set_error('name', t('Sorry, %name is not recognized as a user name or an e-mail address.', array('%name' => $name)));
- }
-}
-
-function user_pass_submit($form, &$form_state) {
- global $language;
-
- $account = $form_state['values']['account'];
- // Mail one time login URL and instructions using current language.
- $mail = _user_mail_notify('password_reset', $account, $language);
- if (!empty($mail)) {
- watchdog('user', 'Password reset instructions mailed to %name at %email.', array('%name' => $account->name, '%email' => $account->mail));
- drupal_set_message(t('Further instructions have been sent to your e-mail address.'));
- }
-
- $form_state['redirect'] = 'user';
- return;
-}
-
-/**
- * Menu callback; process one time login link and redirects to the user page on success.
- */
-function user_pass_reset($form, &$form_state, $uid, $timestamp, $hashed_pass, $action = NULL) {
- global $user;
-
- // When processing the one-time login link, we have to make sure that a user
- // isn't already logged in.
- if ($user->uid) {
- // The existing user is already logged in.
- if ($user->uid == $uid) {
- drupal_set_message(t('You are logged in as %user.
Change your password. ', array('%user' => $user->name, '!user_edit' => url("user/$user->uid/edit"))));
- }
- // A different user is already logged in on the computer.
- else {
- $reset_link_account = user_load($uid);
- if (!empty($reset_link_account)) {
- drupal_set_message(t('Another user (%other_user) is already logged into the site on this computer, but you tried to use a one-time link for user %resetting_user. Please
logout and try using the link again.',
- array('%other_user' => $user->name, '%resetting_user' => $reset_link_account->name, '!logout' => url('user/logout'))));
- } else {
- // Invalid one-time link specifies an unknown user.
- drupal_set_message(t('The one-time login link you clicked is invalid.'));
- }
- }
- drupal_goto();
- }
- else {
- // Time out, in seconds, until login URL expires. Defaults to 24 hours =
- // 86400 seconds.
- $timeout = variable_get('user_password_reset_timeout', 86400);
- $current = REQUEST_TIME;
- // Some redundant checks for extra security ?
- $users = user_load_multiple(array($uid), array('status' => '1'));
- if ($timestamp <= $current && $account = reset($users)) {
- // No time out for first time login.
- if ($account->login && $current - $timestamp > $timeout) {
- drupal_set_message(t('You have tried to use a one-time login link that has expired. Please request a new one using the form below.'));
- drupal_goto('user/password');
- }
- elseif ($account->uid && $timestamp >= $account->login && $timestamp <= $current && $hashed_pass == user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid)) {
- // First stage is a confirmation form, then login
- if ($action == 'login') {
- // Set the new user.
- $user = $account;
- // user_login_finalize() also updates the login timestamp of the
- // user, which invalidates further use of the one-time login link.
- user_login_finalize();
- watchdog('user', 'User %name used one-time login link at time %timestamp.', array('%name' => $account->name, '%timestamp' => $timestamp));
- drupal_set_message(t('You have just used your one-time login link. It is no longer necessary to use this link to log in. Please change your password.'));
- // Let the user's password be changed without the current password check.
- $token = drupal_random_key();
- $_SESSION['pass_reset_' . $user->uid] = $token;
- drupal_goto('user/' . $user->uid . '/edit', array('query' => array('pass-reset-token' => $token)));
- }
- else {
- $form['message'] = array('#markup' => t('
This is a one-time login for %user_name and will expire on %expiration_date.
Click on this button to log in to the site and change your password.
', array('%user_name' => $account->name, '%expiration_date' => format_date($timestamp + $timeout))));
- $form['help'] = array('#markup' => '
' . t('This login can be used only once.') . '
');
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Log in'));
- $form['#action'] = url("user/reset/$uid/$timestamp/$hashed_pass/login");
- return $form;
- }
- }
- else {
- drupal_set_message(t('You have tried to use a one-time login link that has either been used or is no longer valid. Please request a new one using the form below.'));
- drupal_goto('user/password');
- }
- }
- else {
- // Deny access, no more clues.
- // Everything will be in the watchdog's URL for the administrator to check.
- drupal_access_denied();
- drupal_exit();
- }
- }
-}
-
-/**
- * Menu callback; logs the current user out, and redirects to the home page.
- */
-function user_logout() {
- global $user;
-
- watchdog('user', 'Session closed for %name.', array('%name' => $user->name));
-
- module_invoke_all('user_logout', $user);
-
- // Destroy the current session, and reset $user to the anonymous user.
- session_destroy();
-
- drupal_goto();
-}
-
-/**
- * Process variables for user-profile.tpl.php.
- *
- * @param array $variables
- * An associative array containing:
- * - elements: An associative array containing the user information and any
- * fields attached to the user. Properties used:
- * - #account: The user account of the profile being viewed.
- *
- * @see user-profile.tpl.php
- */
-function template_preprocess_user_profile(&$variables) {
- $account = $variables['elements']['#account'];
-
- // Helpful $user_profile variable for templates.
- foreach (element_children($variables['elements']) as $key) {
- $variables['user_profile'][$key] = $variables['elements'][$key];
- }
-
- // Preprocess fields.
- field_attach_preprocess('user', $account, $variables['elements'], $variables);
-}
-
-/**
- * Process variables for user-profile-item.tpl.php.
- *
- * The $variables array contains the following arguments:
- * - $element
- *
- * @see user-profile-item.tpl.php
- */
-function template_preprocess_user_profile_item(&$variables) {
- $variables['title'] = $variables['element']['#title'];
- $variables['value'] = $variables['element']['#markup'];
- $variables['attributes'] = '';
- if (isset($variables['element']['#attributes'])) {
- $variables['attributes'] = drupal_attributes($variables['element']['#attributes']);
- }
-}
-
-/**
- * Process variables for user-profile-category.tpl.php.
- *
- * The $variables array contains the following arguments:
- * - $element
- *
- * @see user-profile-category.tpl.php
- */
-function template_preprocess_user_profile_category(&$variables) {
- $variables['title'] = check_plain($variables['element']['#title']);
- $variables['profile_items'] = $variables['element']['#children'];
- $variables['attributes'] = '';
- if (isset($variables['element']['#attributes'])) {
- $variables['attributes'] = drupal_attributes($variables['element']['#attributes']);
- }
-}
-
-/**
- * Form builder; edit a user account or one of their profile categories.
- *
- * @ingroup forms
- * @see user_account_form()
- * @see user_account_form_validate()
- * @see user_profile_form_validate()
- * @see user_profile_form_submit()
- * @see user_cancel_confirm_form_submit()
- */
-function user_profile_form($form, &$form_state, $account, $category = 'account') {
- global $user;
-
- // During initial form build, add the entity to the form state for use during
- // form building and processing. During a rebuild, use what is in the form
- // state.
- if (!isset($form_state['user'])) {
- $form_state['user'] = $account;
- }
- else {
- $account = $form_state['user'];
- }
-
- // @todo Legacy support. Modules are encouraged to access the entity using
- // $form_state. Remove in Drupal 8.
- $form['#user'] = $account;
- $form['#user_category'] = $category;
-
- if ($category == 'account') {
- user_account_form($form, $form_state);
- // Attach field widgets.
- $langcode = entity_language('user', $account);
- field_attach_form('user', $account, $form, $form_state, $langcode);
- }
-
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Save'),
- );
- if ($category == 'account') {
- $form['actions']['cancel'] = array(
- '#type' => 'submit',
- '#value' => t('Cancel account'),
- '#submit' => array('user_edit_cancel_submit'),
- '#access' => $account->uid > 1 && (($account->uid == $user->uid && user_access('cancel account')) || user_access('administer users')),
- );
- }
-
- $form['#validate'][] = 'user_profile_form_validate';
- // Add the final user profile form submit handler.
- $form['#submit'][] = 'user_profile_form_submit';
-
- return $form;
-}
-
-/**
- * Validation function for the user account and profile editing form.
- */
-function user_profile_form_validate($form, &$form_state) {
- entity_form_field_validate('user', $form, $form_state);
-}
-
-/**
- * Submit function for the user account and profile editing form.
- */
-function user_profile_form_submit($form, &$form_state) {
- $account = $form_state['user'];
- $category = $form['#user_category'];
- // Remove unneeded values.
- form_state_values_clean($form_state);
-
- // Before updating the account entity, keep an unchanged copy for use with
- // user_save() later. This is necessary for modules implementing the user
- // hooks to be able to react on changes by comparing the values of $account
- // and $edit.
- $account_unchanged = clone $account;
-
- entity_form_submit_build_entity('user', $account, $form, $form_state);
-
- // Populate $edit with the properties of $account, which have been edited on
- // this form by taking over all values, which appear in the form values too.
- $edit = array_intersect_key((array) $account, $form_state['values']);
-
- user_save($account_unchanged, $edit, $category);
- $form_state['values']['uid'] = $account->uid;
-
- if ($category == 'account' && !empty($edit['pass'])) {
- // Remove the password reset tag since a new password was saved.
- unset($_SESSION['pass_reset_'. $account->uid]);
- }
- // Clear the page cache because pages can contain usernames and/or profile information:
- cache_clear_all();
-
- drupal_set_message(t('The changes have been saved.'));
-}
-
-/**
- * Submit function for the 'Cancel account' button on the user edit form.
- */
-function user_edit_cancel_submit($form, &$form_state) {
- $destination = array();
- if (isset($_GET['destination'])) {
- $destination = drupal_get_destination();
- unset($_GET['destination']);
- }
- // Note: We redirect from user/uid/edit to user/uid/cancel to make the tabs disappear.
- $form_state['redirect'] = array("user/" . $form['#user']->uid . "/cancel", array('query' => $destination));
-}
-
-/**
- * Form builder; confirm form for cancelling user account.
- *
- * @ingroup forms
- * @see user_edit_cancel_submit()
- */
-function user_cancel_confirm_form($form, &$form_state, $account) {
- global $user;
-
- $form['_account'] = array('#type' => 'value', '#value' => $account);
-
- // Display account cancellation method selection, if allowed.
- $admin_access = user_access('administer users');
- $can_select_method = $admin_access || user_access('select account cancellation method');
- $form['user_cancel_method'] = array(
- '#type' => 'item',
- '#title' => ($account->uid == $user->uid ? t('When cancelling your account') : t('When cancelling the account')),
- '#access' => $can_select_method,
- );
- $form['user_cancel_method'] += user_cancel_methods();
-
- // Allow user administrators to skip the account cancellation confirmation
- // mail (by default), as long as they do not attempt to cancel their own
- // account.
- $override_access = $admin_access && ($account->uid != $user->uid);
- $form['user_cancel_confirm'] = array(
- '#type' => 'checkbox',
- '#title' => t('Require e-mail confirmation to cancel account.'),
- '#default_value' => ($override_access ? FALSE : TRUE),
- '#access' => $override_access,
- '#description' => t('When enabled, the user must confirm the account cancellation via e-mail.'),
- );
- // Also allow to send account canceled notification mail, if enabled.
- $default_notify = variable_get('user_mail_status_canceled_notify', FALSE);
- $form['user_cancel_notify'] = array(
- '#type' => 'checkbox',
- '#title' => t('Notify user when account is canceled.'),
- '#default_value' => ($override_access ? FALSE : $default_notify),
- '#access' => $override_access && $default_notify,
- '#description' => t('When enabled, the user will receive an e-mail notification after the account has been cancelled.'),
- );
-
- // Prepare confirmation form page title and description.
- if ($account->uid == $user->uid) {
- $question = t('Are you sure you want to cancel your account?');
- }
- else {
- $question = t('Are you sure you want to cancel the account %name?', array('%name' => $account->name));
- }
- $description = '';
- if ($can_select_method) {
- $description = t('Select the method to cancel the account above.');
- foreach (element_children($form['user_cancel_method']) as $element) {
- unset($form['user_cancel_method'][$element]['#description']);
- }
- }
- else {
- // The radio button #description is used as description for the confirmation
- // form.
- foreach (element_children($form['user_cancel_method']) as $element) {
- if ($form['user_cancel_method'][$element]['#default_value'] == $form['user_cancel_method'][$element]['#return_value']) {
- $description = $form['user_cancel_method'][$element]['#description'];
- }
- unset($form['user_cancel_method'][$element]['#description']);
- }
- }
-
- // Always provide entity id in the same form key as in the entity edit form.
- $form['uid'] = array('#type' => 'value', '#value' => $account->uid);
- return confirm_form($form,
- $question,
- 'user/' . $account->uid,
- $description . ' ' . t('This action cannot be undone.'),
- t('Cancel account'), t('Cancel'));
-}
-
-/**
- * Submit handler for the account cancellation confirm form.
- *
- * @see user_cancel_confirm_form()
- * @see user_multiple_cancel_confirm_submit()
- */
-function user_cancel_confirm_form_submit($form, &$form_state) {
- global $user;
- $account = $form_state['values']['_account'];
-
- // Cancel account immediately, if the current user has administrative
- // privileges, no confirmation mail shall be sent, and the user does not
- // attempt to cancel the own account.
- if (user_access('administer users') && empty($form_state['values']['user_cancel_confirm']) && $account->uid != $user->uid) {
- user_cancel($form_state['values'], $account->uid, $form_state['values']['user_cancel_method']);
-
- $form_state['redirect'] = 'admin/people';
- }
- else {
- // Store cancelling method and whether to notify the user in $account for
- // user_cancel_confirm().
- $edit = array(
- 'user_cancel_method' => $form_state['values']['user_cancel_method'],
- 'user_cancel_notify' => $form_state['values']['user_cancel_notify'],
- );
- $account = user_save($account, $edit);
- _user_mail_notify('cancel_confirm', $account);
- drupal_set_message(t('A confirmation request to cancel your account has been sent to your e-mail address.'));
- watchdog('user', 'Sent account cancellation request to %name %email.', array('%name' => $account->name, '%email' => '<' . $account->mail . '>'), WATCHDOG_NOTICE);
-
- $form_state['redirect'] = "user/$account->uid";
- }
-}
-
-/**
- * Helper function to return available account cancellation methods.
- *
- * See documentation of hook_user_cancel_methods_alter().
- *
- * @return
- * An array containing all account cancellation methods as form elements.
- *
- * @see hook_user_cancel_methods_alter()
- * @see user_admin_settings()
- * @see user_cancel_confirm_form()
- * @see user_multiple_cancel_confirm()
- */
-function user_cancel_methods() {
- $methods = array(
- 'user_cancel_block' => array(
- 'title' => t('Disable the account and keep its content.'),
- 'description' => t('Your account will be blocked and you will no longer be able to log in. All of your content will remain attributed to your user name.'),
- ),
- 'user_cancel_block_unpublish' => array(
- 'title' => t('Disable the account and unpublish its content.'),
- 'description' => t('Your account will be blocked and you will no longer be able to log in. All of your content will be hidden from everyone but administrators.'),
- ),
- 'user_cancel_reassign' => array(
- 'title' => t('Delete the account and make its content belong to the %anonymous-name user.', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')))),
- 'description' => t('Your account will be removed and all account information deleted. All of your content will be assigned to the %anonymous-name user.', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')))),
- ),
- 'user_cancel_delete' => array(
- 'title' => t('Delete the account and its content.'),
- 'description' => t('Your account will be removed and all account information deleted. All of your content will also be deleted.'),
- 'access' => user_access('administer users'),
- ),
- );
- // Allow modules to customize account cancellation methods.
- drupal_alter('user_cancel_methods', $methods);
-
- // Turn all methods into real form elements.
- $default_method = variable_get('user_cancel_method', 'user_cancel_block');
- foreach ($methods as $name => $method) {
- $form[$name] = array(
- '#type' => 'radio',
- '#title' => $method['title'],
- '#description' => (isset($method['description']) ? $method['description'] : NULL),
- '#return_value' => $name,
- '#default_value' => $default_method,
- '#parents' => array('user_cancel_method'),
- );
- }
- return $form;
-}
-
-/**
- * Menu callback; Cancel a user account via e-mail confirmation link.
- *
- * @see user_cancel_confirm_form()
- * @see user_cancel_url()
- */
-function user_cancel_confirm($account, $timestamp = 0, $hashed_pass = '') {
- // Time out in seconds until cancel URL expires; 24 hours = 86400 seconds.
- $timeout = 86400;
- $current = REQUEST_TIME;
-
- // Basic validation of arguments.
- if (isset($account->data['user_cancel_method']) && !empty($timestamp) && !empty($hashed_pass)) {
- // Validate expiration and hashed password/login.
- if ($timestamp <= $current && $current - $timestamp < $timeout && $account->uid && $timestamp >= $account->login && $hashed_pass == user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid)) {
- $edit = array(
- 'user_cancel_notify' => isset($account->data['user_cancel_notify']) ? $account->data['user_cancel_notify'] : variable_get('user_mail_status_canceled_notify', FALSE),
- );
- user_cancel($edit, $account->uid, $account->data['user_cancel_method']);
- // Since user_cancel() is not invoked via Form API, batch processing needs
- // to be invoked manually and should redirect to the front page after
- // completion.
- batch_process('');
- }
- else {
- drupal_set_message(t('You have tried to use an account cancellation link that has expired. Please request a new one using the form below.'));
- drupal_goto("user/$account->uid/cancel");
- }
- }
- return MENU_ACCESS_DENIED;
-}
-
-/**
- * Page callback: Displays the user page.
- *
- * Displays user profile if user is logged in, or login form for anonymous
- * users.
- *
- * @return
- * A render array for either a user profile or a login form.
- *
- * @see user_view_page()
- * @see user_login()
- */
-function user_page() {
- global $user;
- if ($user->uid) {
- menu_set_active_item('user/' . $user->uid);
- return menu_execute_active_handler(NULL, FALSE);
- }
- else {
- return drupal_get_form('user_login');
- }
-}
diff --git a/modules/user/user.permissions.js b/modules/user/user.permissions.js
deleted file mode 100644
index 988820e..0000000
--- a/modules/user/user.permissions.js
+++ /dev/null
@@ -1,69 +0,0 @@
-(function ($) {
-
-/**
- * Shows checked and disabled checkboxes for inherited permissions.
- */
-Drupal.behaviors.permissions = {
- attach: function (context) {
- var self = this;
- $('table#permissions').once('permissions', function () {
- // On a site with many roles and permissions, this behavior initially has
- // to perform thousands of DOM manipulations to inject checkboxes and hide
- // them. By detaching the table from the DOM, all operations can be
- // performed without triggering internal layout and re-rendering processes
- // in the browser.
- var $table = $(this);
- if ($table.prev().length) {
- var $ancestor = $table.prev(), method = 'after';
- }
- else {
- var $ancestor = $table.parent(), method = 'append';
- }
- $table.detach();
-
- // Create dummy checkboxes. We use dummy checkboxes instead of reusing
- // the existing checkboxes here because new checkboxes don't alter the
- // submitted form. If we'd automatically check existing checkboxes, the
- // permission table would be polluted with redundant entries. This
- // is deliberate, but desirable when we automatically check them.
- var $dummy = $('
')
- .attr('title', Drupal.t("This permission is inherited from the authenticated user role."))
- .hide();
-
- $('input[type=checkbox]', this).not('.rid-2, .rid-1').addClass('real-checkbox').each(function () {
- $dummy.clone().insertAfter(this);
- });
-
- // Initialize the authenticated user checkbox.
- $('input[type=checkbox].rid-2', this)
- .bind('click.permissions', self.toggle)
- // .triggerHandler() cannot be used here, as it only affects the first
- // element.
- .each(self.toggle);
-
- // Re-insert the table into the DOM.
- $ancestor[method]($table);
- });
- },
-
- /**
- * Toggles all dummy checkboxes based on the checkboxes' state.
- *
- * If the "authenticated user" checkbox is checked, the checked and disabled
- * checkboxes are shown, the real checkboxes otherwise.
- */
- toggle: function () {
- var authCheckbox = this, $row = $(this).closest('tr');
- // jQuery performs too many layout calculations for .hide() and .show(),
- // leading to a major page rendering lag on sites with many roles and
- // permissions. Therefore, we toggle visibility directly.
- $row.find('.real-checkbox').each(function () {
- this.style.display = (authCheckbox.checked ? 'none' : '');
- });
- $row.find('.dummy-checkbox').each(function () {
- this.style.display = (authCheckbox.checked ? '' : 'none');
- });
- }
-};
-
-})(jQuery);
diff --git a/modules/user/user.test b/modules/user/user.test
deleted file mode 100644
index 07be4c2..0000000
--- a/modules/user/user.test
+++ /dev/null
@@ -1,2447 +0,0 @@
- 'User registration',
- 'description' => 'Test registration of user under different configurations.',
- 'group' => 'User'
- );
- }
-
- function setUp() {
- parent::setUp('field_test');
- }
-
- function testRegistrationWithEmailVerification() {
- // Require e-mail verification.
- variable_set('user_email_verification', TRUE);
-
- // Set registration to administrator only.
- variable_set('user_register', USER_REGISTER_ADMINISTRATORS_ONLY);
- $this->drupalGet('user/register');
- $this->assertResponse(403, 'Registration page is inaccessible when only administrators can create accounts.');
-
- // Allow registration by site visitors without administrator approval.
- variable_set('user_register', USER_REGISTER_VISITORS);
- $edit = array();
- $edit['name'] = $name = $this->randomName();
- $edit['mail'] = $mail = $edit['name'] . '@example.com';
- $this->drupalPost('user/register', $edit, t('Create new account'));
- $this->assertText(t('A welcome message with further instructions has been sent to your e-mail address.'), 'User registered successfully.');
- $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
- $new_user = reset($accounts);
- $this->assertTrue($new_user->status, 'New account is active after registration.');
-
- // Allow registration by site visitors, but require administrator approval.
- variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
- $edit = array();
- $edit['name'] = $name = $this->randomName();
- $edit['mail'] = $mail = $edit['name'] . '@example.com';
- $this->drupalPost('user/register', $edit, t('Create new account'));
- $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
- $new_user = reset($accounts);
- $this->assertFalse($new_user->status, 'New account is blocked until approved by an administrator.');
- }
-
- function testRegistrationWithoutEmailVerification() {
- // Don't require e-mail verification.
- variable_set('user_email_verification', FALSE);
-
- // Allow registration by site visitors without administrator approval.
- variable_set('user_register', USER_REGISTER_VISITORS);
- $edit = array();
- $edit['name'] = $name = $this->randomName();
- $edit['mail'] = $mail = $edit['name'] . '@example.com';
-
- // Try entering a mismatching password.
- $edit['pass[pass1]'] = '99999.0';
- $edit['pass[pass2]'] = '99999';
- $this->drupalPost('user/register', $edit, t('Create new account'));
- $this->assertText(t('The specified passwords do not match.'), 'Typing mismatched passwords displays an error message.');
-
- // Enter a correct password.
- $edit['pass[pass1]'] = $new_pass = $this->randomName();
- $edit['pass[pass2]'] = $new_pass;
- $this->drupalPost('user/register', $edit, t('Create new account'));
- $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
- $new_user = reset($accounts);
- $this->assertText(t('Registration successful. You are now logged in.'), 'Users are logged in after registering.');
- $this->drupalLogout();
-
- // Allow registration by site visitors, but require administrator approval.
- variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
- $edit = array();
- $edit['name'] = $name = $this->randomName();
- $edit['mail'] = $mail = $edit['name'] . '@example.com';
- $edit['pass[pass1]'] = $pass = $this->randomName();
- $edit['pass[pass2]'] = $pass;
- $this->drupalPost('user/register', $edit, t('Create new account'));
- $this->assertText(t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.'), 'Users are notified of pending approval');
-
- // Try to login before administrator approval.
- $auth = array(
- 'name' => $name,
- 'pass' => $pass,
- );
- $this->drupalPost('user/login', $auth, t('Log in'));
- $this->assertText(t('The username @name has not been activated or is blocked.', array('@name' => $name)), 'User cannot login yet.');
-
- // Activate the new account.
- $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
- $new_user = reset($accounts);
- $admin_user = $this->drupalCreateUser(array('administer users'));
- $this->drupalLogin($admin_user);
- $edit = array(
- 'status' => 1,
- );
- $this->drupalPost('user/' . $new_user->uid . '/edit', $edit, t('Save'));
- $this->drupalLogout();
-
- // Login after administrator approval.
- $this->drupalPost('user/login', $auth, t('Log in'));
- $this->assertText(t('Member for'), 'User can log in after administrator approval.');
- }
-
- function testRegistrationEmailDuplicates() {
- // Don't require e-mail verification.
- variable_set('user_email_verification', FALSE);
-
- // Allow registration by site visitors without administrator approval.
- variable_set('user_register', USER_REGISTER_VISITORS);
-
- // Set up a user to check for duplicates.
- $duplicate_user = $this->drupalCreateUser();
-
- $edit = array();
- $edit['name'] = $this->randomName();
- $edit['mail'] = $duplicate_user->mail;
-
- // Attempt to create a new account using an existing e-mail address.
- $this->drupalPost('user/register', $edit, t('Create new account'));
- $this->assertText(t('The e-mail address @email is already registered.', array('@email' => $duplicate_user->mail)), 'Supplying an exact duplicate email address displays an error message');
-
- // Attempt to bypass duplicate email registration validation by adding spaces.
- $edit['mail'] = ' ' . $duplicate_user->mail . ' ';
-
- $this->drupalPost('user/register', $edit, t('Create new account'));
- $this->assertText(t('The e-mail address @email is already registered.', array('@email' => $duplicate_user->mail)), 'Supplying a duplicate email address with added whitespace displays an error message');
- }
-
- function testRegistrationDefaultValues() {
- // Allow registration by site visitors without administrator approval.
- variable_set('user_register', USER_REGISTER_VISITORS);
-
- // Don't require e-mail verification.
- variable_set('user_email_verification', FALSE);
-
- // Set the default timezone to Brussels.
- variable_set('configurable_timezones', 1);
- variable_set('date_default_timezone', 'Europe/Brussels');
-
- // Check that the account information fieldset's options are not displayed
- // is a fieldset if there is not more than one fieldset in the form.
- $this->drupalGet('user/register');
- $this->assertNoRaw('
Account information ', 'Account settings fieldset was hidden.');
-
- $edit = array();
- $edit['name'] = $name = $this->randomName();
- $edit['mail'] = $mail = $edit['name'] . '@example.com';
- $edit['pass[pass1]'] = $new_pass = $this->randomName();
- $edit['pass[pass2]'] = $new_pass;
- $this->drupalPost(NULL, $edit, t('Create new account'));
-
- // Check user fields.
- $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
- $new_user = reset($accounts);
- $this->assertEqual($new_user->name, $name, 'Username matches.');
- $this->assertEqual($new_user->mail, $mail, 'E-mail address matches.');
- $this->assertEqual($new_user->theme, '', 'Correct theme field.');
- $this->assertEqual($new_user->signature, '', 'Correct signature field.');
- $this->assertTrue(($new_user->created > REQUEST_TIME - 20 ), 'Correct creation time.');
- $this->assertEqual($new_user->status, variable_get('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL) == USER_REGISTER_VISITORS ? 1 : 0, 'Correct status field.');
- $this->assertEqual($new_user->timezone, variable_get('date_default_timezone'), 'Correct time zone field.');
- $this->assertEqual($new_user->language, '', 'Correct language field.');
- $this->assertEqual($new_user->picture, '', 'Correct picture field.');
- $this->assertEqual($new_user->init, $mail, 'Correct init field.');
- }
-
- /**
- * Tests Field API fields on user registration forms.
- */
- function testRegistrationWithUserFields() {
- // Create a field, and an instance on 'user' entity type.
- $field = array(
- 'type' => 'test_field',
- 'field_name' => 'test_user_field',
- 'cardinality' => 1,
- );
- field_create_field($field);
- $instance = array(
- 'field_name' => 'test_user_field',
- 'entity_type' => 'user',
- 'label' => 'Some user field',
- 'bundle' => 'user',
- 'required' => TRUE,
- 'settings' => array('user_register_form' => FALSE),
- );
- field_create_instance($instance);
-
- // Check that the field does not appear on the registration form.
- $this->drupalGet('user/register');
- $this->assertNoText($instance['label'], 'The field does not appear on user registration form');
-
- // Have the field appear on the registration form.
- $instance['settings']['user_register_form'] = TRUE;
- field_update_instance($instance);
- $this->drupalGet('user/register');
- $this->assertText($instance['label'], 'The field appears on user registration form');
-
- // Check that validation errors are correctly reported.
- $edit = array();
- $edit['name'] = $name = $this->randomName();
- $edit['mail'] = $mail = $edit['name'] . '@example.com';
- // Missing input in required field.
- $edit['test_user_field[und][0][value]'] = '';
- $this->drupalPost(NULL, $edit, t('Create new account'));
- $this->assertRaw(t('@name field is required.', array('@name' => $instance['label'])), 'Field validation error was correctly reported.');
- // Invalid input.
- $edit['test_user_field[und][0][value]'] = '-1';
- $this->drupalPost(NULL, $edit, t('Create new account'));
- $this->assertRaw(t('%name does not accept the value -1.', array('%name' => $instance['label'])), 'Field validation error was correctly reported.');
-
- // Submit with valid data.
- $value = rand(1, 255);
- $edit['test_user_field[und][0][value]'] = $value;
- $this->drupalPost(NULL, $edit, t('Create new account'));
- // Check user fields.
- $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
- $new_user = reset($accounts);
- $this->assertEqual($new_user->test_user_field[LANGUAGE_NONE][0]['value'], $value, 'The field value was correctly saved.');
-
- // Check that the 'add more' button works.
- $field['cardinality'] = FIELD_CARDINALITY_UNLIMITED;
- field_update_field($field);
- foreach (array('js', 'nojs') as $js) {
- $this->drupalGet('user/register');
- // Add two inputs.
- $value = rand(1, 255);
- $edit = array();
- $edit['test_user_field[und][0][value]'] = $value;
- if ($js == 'js') {
- $this->drupalPostAJAX(NULL, $edit, 'test_user_field_add_more');
- $this->drupalPostAJAX(NULL, $edit, 'test_user_field_add_more');
- }
- else {
- $this->drupalPost(NULL, $edit, t('Add another item'));
- $this->drupalPost(NULL, $edit, t('Add another item'));
- }
- // Submit with three values.
- $edit['test_user_field[und][1][value]'] = $value + 1;
- $edit['test_user_field[und][2][value]'] = $value + 2;
- $edit['name'] = $name = $this->randomName();
- $edit['mail'] = $mail = $edit['name'] . '@example.com';
- $this->drupalPost(NULL, $edit, t('Create new account'));
- // Check user fields.
- $accounts = user_load_multiple(array(), array('name' => $name, 'mail' => $mail));
- $new_user = reset($accounts);
- $this->assertEqual($new_user->test_user_field[LANGUAGE_NONE][0]['value'], $value, format_string('@js : The field value was correclty saved.', array('@js' => $js)));
- $this->assertEqual($new_user->test_user_field[LANGUAGE_NONE][1]['value'], $value + 1, format_string('@js : The field value was correclty saved.', array('@js' => $js)));
- $this->assertEqual($new_user->test_user_field[LANGUAGE_NONE][2]['value'], $value + 2, format_string('@js : The field value was correclty saved.', array('@js' => $js)));
- }
- }
-}
-
-class UserValidationTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Username/e-mail validation',
- 'description' => 'Verify that username/email validity checks behave as designed.',
- 'group' => 'User'
- );
- }
-
- // Username validation.
- function testUsernames() {
- $test_cases = array( // '' => array('', 'assert'),
- 'foo' => array('Valid username', 'assertNull'),
- 'FOO' => array('Valid username', 'assertNull'),
- 'Foo O\'Bar' => array('Valid username', 'assertNull'),
- 'foo@bar' => array('Valid username', 'assertNull'),
- 'foo@example.com' => array('Valid username', 'assertNull'),
- 'foo@-example.com' => array('Valid username', 'assertNull'), // invalid domains are allowed in usernames
- 'þòøÇߪř€' => array('Valid username', 'assertNull'),
- 'ᚠᛇᚻ᛫ᛒᛦᚦ' => array('Valid UTF8 username', 'assertNull'), // runes
- ' foo' => array('Invalid username that starts with a space', 'assertNotNull'),
- 'foo ' => array('Invalid username that ends with a space', 'assertNotNull'),
- 'foo bar' => array('Invalid username that contains 2 spaces \' \'', 'assertNotNull'),
- '' => array('Invalid empty username', 'assertNotNull'),
- 'foo/' => array('Invalid username containing invalid chars', 'assertNotNull'),
- 'foo' . chr(0) . 'bar' => array('Invalid username containing chr(0)', 'assertNotNull'), // NULL
- 'foo' . chr(13) . 'bar' => array('Invalid username containing chr(13)', 'assertNotNull'), // CR
- str_repeat('x', USERNAME_MAX_LENGTH + 1) => array('Invalid excessively long username', 'assertNotNull'),
- );
- foreach ($test_cases as $name => $test_case) {
- list($description, $test) = $test_case;
- $result = user_validate_name($name);
- $this->$test($result, $description . ' (' . $name . ')');
- }
- }
-
- // Mail validation. More extensive tests can be found at common.test
- function testMailAddresses() {
- $test_cases = array( // '' => array('', 'assert'),
- '' => array('Empty mail address', 'assertNotNull'),
- 'foo' => array('Invalid mail address', 'assertNotNull'),
- 'foo@example.com' => array('Valid mail address', 'assertNull'),
- );
- foreach ($test_cases as $name => $test_case) {
- list($description, $test) = $test_case;
- $result = user_validate_mail($name);
- $this->$test($result, $description . ' (' . $name . ')');
- }
- }
-}
-
-/**
- * Functional tests for user logins, including rate limiting of login attempts.
- */
-class UserLoginTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User login',
- 'description' => 'Ensure that login works as expected.',
- 'group' => 'User',
- );
- }
-
- /**
- * Test the global login flood control.
- */
- function testGlobalLoginFloodControl() {
- // Set the global login limit.
- variable_set('user_failed_login_ip_limit', 10);
- // Set a high per-user limit out so that it is not relevant in the test.
- variable_set('user_failed_login_user_limit', 4000);
-
- $user1 = $this->drupalCreateUser(array());
- $incorrect_user1 = clone $user1;
- $incorrect_user1->pass_raw .= 'incorrect';
-
- // Try 2 failed logins.
- for ($i = 0; $i < 2; $i++) {
- $this->assertFailedLogin($incorrect_user1);
- }
-
- // A successful login will not reset the IP-based flood control count.
- $this->drupalLogin($user1);
- $this->drupalLogout();
-
- // Try 8 more failed logins, they should not trigger the flood control
- // mechanism.
- for ($i = 0; $i < 8; $i++) {
- $this->assertFailedLogin($incorrect_user1);
- }
-
- // The next login trial should result in an IP-based flood error message.
- $this->assertFailedLogin($incorrect_user1, 'ip');
-
- // A login with the correct password should also result in a flood error
- // message.
- $this->assertFailedLogin($user1, 'ip');
- }
-
- /**
- * Test the per-user login flood control.
- */
- function testPerUserLoginFloodControl() {
- // Set a high global limit out so that it is not relevant in the test.
- variable_set('user_failed_login_ip_limit', 4000);
- // Set the per-user login limit.
- variable_set('user_failed_login_user_limit', 3);
-
- $user1 = $this->drupalCreateUser(array());
- $incorrect_user1 = clone $user1;
- $incorrect_user1->pass_raw .= 'incorrect';
-
- $user2 = $this->drupalCreateUser(array());
-
- // Try 2 failed logins.
- for ($i = 0; $i < 2; $i++) {
- $this->assertFailedLogin($incorrect_user1);
- }
-
- // A successful login will reset the per-user flood control count.
- $this->drupalLogin($user1);
- $this->drupalLogout();
-
- // Try 3 failed logins for user 1, they will not trigger flood control.
- for ($i = 0; $i < 3; $i++) {
- $this->assertFailedLogin($incorrect_user1);
- }
-
- // Try one successful attempt for user 2, it should not trigger any
- // flood control.
- $this->drupalLogin($user2);
- $this->drupalLogout();
-
- // Try one more attempt for user 1, it should be rejected, even if the
- // correct password has been used.
- $this->assertFailedLogin($user1, 'user');
- }
-
- /**
- * Test that user password is re-hashed upon login after changing $count_log2.
- */
- function testPasswordRehashOnLogin() {
- // Load password hashing API.
- require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
- // Set initial $count_log2 to the default, DRUPAL_HASH_COUNT.
- variable_set('password_count_log2', DRUPAL_HASH_COUNT);
- // Create a new user and authenticate.
- $account = $this->drupalCreateUser(array());
- $password = $account->pass_raw;
- $this->drupalLogin($account);
- $this->drupalLogout();
- // Load the stored user. The password hash should reflect $count_log2.
- $account = user_load($account->uid);
- $this->assertIdentical(_password_get_count_log2($account->pass), DRUPAL_HASH_COUNT);
- // Change $count_log2 and log in again.
- variable_set('password_count_log2', DRUPAL_HASH_COUNT + 1);
- $account->pass_raw = $password;
- $this->drupalLogin($account);
- // Load the stored user, which should have a different password hash now.
- $account = user_load($account->uid, TRUE);
- $this->assertIdentical(_password_get_count_log2($account->pass), DRUPAL_HASH_COUNT + 1);
- }
-
- /**
- * Make an unsuccessful login attempt.
- *
- * @param $account
- * A user object with name and pass_raw attributes for the login attempt.
- * @param $flood_trigger
- * Whether or not to expect that the flood control mechanism will be
- * triggered.
- */
- function assertFailedLogin($account, $flood_trigger = NULL) {
- $edit = array(
- 'name' => $account->name,
- 'pass' => $account->pass_raw,
- );
- $this->drupalPost('user', $edit, t('Log in'));
- $this->assertNoFieldByXPath("//input[@name='pass' and @value!='']", NULL, 'Password value attribute is blank.');
- if (isset($flood_trigger)) {
- if ($flood_trigger == 'user') {
- $this->assertRaw(format_plural(variable_get('user_failed_login_user_limit', 5), 'Sorry, there has been more than one failed login attempt for this account. It is temporarily blocked. Try again later or request a new password .', 'Sorry, there have been more than @count failed login attempts for this account. It is temporarily blocked. Try again later or request a new password .', array('@url' => url('user/password'))));
- }
- else {
- // No uid, so the limit is IP-based.
- $this->assertRaw(t('Sorry, too many failed login attempts from your IP address. This IP address is temporarily blocked. Try again later or request a new password .', array('@url' => url('user/password'))));
- }
- }
- else {
- $this->assertText(t('Sorry, unrecognized username or password. Have you forgotten your password?'));
- }
- }
-}
-
-/**
- * Tests resetting a user password.
- */
-class UserPasswordResetTestCase extends DrupalWebTestCase {
- protected $profile = 'standard';
-
- public static function getInfo() {
- return array(
- 'name' => 'Reset password',
- 'description' => 'Ensure that password reset methods work as expected.',
- 'group' => 'User',
- );
- }
-
- /**
- * Tests password reset functionality.
- */
- function testUserPasswordReset() {
- // Create a user.
- $account = $this->drupalCreateUser();
- $this->drupalLogin($account);
- $this->drupalLogout();
- // Attempt to reset password.
- $edit = array('name' => $account->name);
- $this->drupalPost('user/password', $edit, t('E-mail new password'));
- // Confirm the password reset.
- $this->assertText(t('Further instructions have been sent to your e-mail address.'), 'Password reset instructions mailed message displayed.');
- }
-
- /**
- * Attempts login using an expired password reset link.
- */
- function testUserPasswordResetExpired() {
- // Set password reset timeout variable to 43200 seconds = 12 hours.
- $timeout = 43200;
- variable_set('user_password_reset_timeout', $timeout);
-
- // Create a user.
- $account = $this->drupalCreateUser();
- $this->drupalLogin($account);
- // Load real user object.
- $account = user_load($account->uid, TRUE);
- $this->drupalLogout();
-
- // To attempt an expired password reset, create a password reset link as if
- // its request time was 60 seconds older than the allowed limit of timeout.
- $bogus_timestamp = REQUEST_TIME - variable_get('user_password_reset_timeout', 86400) - 60;
- $this->drupalGet("user/reset/$account->uid/$bogus_timestamp/" . user_pass_rehash($account->pass, $bogus_timestamp, $account->login, $account->uid));
- $this->assertText(t('You have tried to use a one-time login link that has expired. Please request a new one using the form below.'), 'Expired password reset request rejected.');
- }
-
- /**
- * Prefill the text box on incorrect login via link to password reset page.
- */
- function testUserPasswordTextboxFilled() {
- $this->drupalGet('user/login');
- $edit = array(
- 'name' => $this->randomName(),
- 'pass' => $this->randomName(),
- );
- $this->drupalPost('user', $edit, t('Log in'));
- $this->assertRaw(t('Sorry, unrecognized username or password. Have you forgotten your password? ',
- array('@password' => url('user/password', array('query' => array('name' => $edit['name']))))));
- unset($edit['pass']);
- $this->drupalGet('user/password', array('query' => array('name' => $edit['name'])));
- $this->assertFieldByName('name', $edit['name'], 'User name found.');
- }
-
- /**
- * Make sure that users cannot forge password reset URLs of other users.
- */
- function testResetImpersonation() {
- // Make sure user 1 has a valid password, so it does not interfere with the
- // test user accounts that are created below.
- $account = user_load(1);
- user_save($account, array('pass' => user_password()));
-
- // Create two identical user accounts except for the user name. They must
- // have the same empty password, so we can't use $this->drupalCreateUser().
- $edit = array();
- $edit['name'] = $this->randomName();
- $edit['mail'] = $edit['name'] . '@example.com';
- $edit['status'] = 1;
-
- $user1 = user_save(drupal_anonymous_user(), $edit);
-
- $edit['name'] = $this->randomName();
- $user2 = user_save(drupal_anonymous_user(), $edit);
-
- // The password reset URL must not be valid for the second user when only
- // the user ID is changed in the URL.
- $reset_url = user_pass_reset_url($user1);
- $attack_reset_url = str_replace("user/reset/$user1->uid", "user/reset/$user2->uid", $reset_url);
- $this->drupalGet($attack_reset_url);
- $this->assertNoText($user2->name, 'The invalid password reset page does not show the user name.');
- $this->assertUrl('user/password', array(), 'The user is redirected to the password reset request page.');
- $this->assertText('You have tried to use a one-time login link that has either been used or is no longer valid. Please request a new one using the form below.');
-
- // When legacy code calls user_pass_rehash() without providing the $uid
- // parameter, neither password reset URL should be valid since it is
- // impossible for the system to determine which user account the token was
- // intended for.
- $timestamp = REQUEST_TIME;
- // Pass an explicit NULL for the $uid parameter of user_pass_rehash()
- // rather than not passing it at all, to avoid triggering PHP warnings in
- // the test.
- $reset_url_token = user_pass_rehash($user1->pass, $timestamp, $user1->login, NULL);
- $reset_url = url("user/reset/$user1->uid/$timestamp/$reset_url_token", array('absolute' => TRUE));
- $this->drupalGet($reset_url);
- $this->assertNoText($user1->name, 'The invalid password reset page does not show the user name.');
- $this->assertUrl('user/password', array(), 'The user is redirected to the password reset request page.');
- $this->assertText('You have tried to use a one-time login link that has either been used or is no longer valid. Please request a new one using the form below.');
- $attack_reset_url = str_replace("user/reset/$user1->uid", "user/reset/$user2->uid", $reset_url);
- $this->drupalGet($attack_reset_url);
- $this->assertNoText($user2->name, 'The invalid password reset page does not show the user name.');
- $this->assertUrl('user/password', array(), 'The user is redirected to the password reset request page.');
- $this->assertText('You have tried to use a one-time login link that has either been used or is no longer valid. Please request a new one using the form below.');
-
- // To verify that user_pass_rehash() never returns a valid result in the
- // above situation (even if legacy code also called it to attempt to
- // validate the token, rather than just to generate the URL), check that a
- // second call with the same parameters produces a different result.
- $new_reset_url_token = user_pass_rehash($user1->pass, $timestamp, $user1->login, NULL);
- $this->assertNotEqual($reset_url_token, $new_reset_url_token);
-
- // However, when the duplicate account is removed, the password reset URL
- // should be valid.
- user_delete($user2->uid);
- $reset_url_token = user_pass_rehash($user1->pass, $timestamp, $user1->login, NULL);
- $reset_url = url("user/reset/$user1->uid/$timestamp/$reset_url_token", array('absolute' => TRUE));
- $this->drupalGet($reset_url);
- $this->assertText($user1->name, 'The valid password reset page shows the user name.');
- $this->assertUrl($reset_url, array(), 'The user remains on the password reset login page.');
- $this->assertNoText('You have tried to use a one-time login link that has either been used or is no longer valid. Please request a new one using the form below.');
- }
-
-}
-
-/**
- * Test cancelling a user.
- */
-class UserCancelTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Cancel account',
- 'description' => 'Ensure that account cancellation methods work as expected.',
- 'group' => 'User',
- );
- }
-
- function setUp() {
- parent::setUp('comment');
- }
-
- /**
- * Attempt to cancel account without permission.
- */
- function testUserCancelWithoutPermission() {
- variable_set('user_cancel_method', 'user_cancel_reassign');
-
- // Create a user.
- $account = $this->drupalCreateUser(array());
- $this->drupalLogin($account);
- // Load real user object.
- $account = user_load($account->uid, TRUE);
-
- // Create a node.
- $node = $this->drupalCreateNode(array('uid' => $account->uid));
-
- // Attempt to cancel account.
- $this->drupalGet('user/' . $account->uid . '/edit');
- $this->assertNoRaw(t('Cancel account'), 'No cancel account button displayed.');
-
- // Attempt bogus account cancellation request confirmation.
- $timestamp = $account->login;
- $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid));
- $this->assertResponse(403, 'Bogus cancelling request rejected.');
- $account = user_load($account->uid);
- $this->assertTrue($account->status == 1, 'User account was not canceled.');
-
- // Confirm user's content has not been altered.
- $test_node = node_load($node->nid, NULL, TRUE);
- $this->assertTrue(($test_node->uid == $account->uid && $test_node->status == 1), 'Node of the user has not been altered.');
- }
-
- /**
- * Tests that user account for uid 1 cannot be cancelled.
- *
- * This should never be possible, or the site owner would become unable to
- * administer the site.
- */
- function testUserCancelUid1() {
- // Update uid 1's name and password to we know it.
- $password = user_password();
- require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
- $account = array(
- 'name' => 'user1',
- 'pass' => user_hash_password(trim($password)),
- );
- // We cannot use user_save() here or the password would be hashed again.
- db_update('users')
- ->fields($account)
- ->condition('uid', 1)
- ->execute();
-
- // Reload and log in uid 1.
- $user1 = user_load(1, TRUE);
- $user1->pass_raw = $password;
-
- // Try to cancel uid 1's account with a different user.
- $this->admin_user = $this->drupalCreateUser(array('administer users'));
- $this->drupalLogin($this->admin_user);
- $edit = array(
- 'operation' => 'cancel',
- 'accounts[1]' => TRUE,
- );
- $this->drupalPost('admin/people', $edit, t('Update'));
-
- // Verify that uid 1's account was not cancelled.
- $user1 = user_load(1, TRUE);
- $this->assertEqual($user1->status, 1, 'User #1 still exists and is not blocked.');
- }
-
- /**
- * Attempt invalid account cancellations.
- */
- function testUserCancelInvalid() {
- variable_set('user_cancel_method', 'user_cancel_reassign');
-
- // Create a user.
- $account = $this->drupalCreateUser(array('cancel account'));
- $this->drupalLogin($account);
- // Load real user object.
- $account = user_load($account->uid, TRUE);
-
- // Create a node.
- $node = $this->drupalCreateNode(array('uid' => $account->uid));
-
- // Attempt to cancel account.
- $this->drupalPost('user/' . $account->uid . '/edit', NULL, t('Cancel account'));
-
- // Confirm account cancellation.
- $timestamp = time();
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
- // Attempt bogus account cancellation request confirmation.
- $bogus_timestamp = $timestamp + 60;
- $this->drupalGet("user/$account->uid/cancel/confirm/$bogus_timestamp/" . user_pass_rehash($account->pass, $bogus_timestamp, $account->login, $account->uid));
- $this->assertText(t('You have tried to use an account cancellation link that has expired. Please request a new one using the form below.'), 'Bogus cancelling request rejected.');
- $account = user_load($account->uid);
- $this->assertTrue($account->status == 1, 'User account was not canceled.');
-
- // Attempt expired account cancellation request confirmation.
- $bogus_timestamp = $timestamp - 86400 - 60;
- $this->drupalGet("user/$account->uid/cancel/confirm/$bogus_timestamp/" . user_pass_rehash($account->pass, $bogus_timestamp, $account->login, $account->uid));
- $this->assertText(t('You have tried to use an account cancellation link that has expired. Please request a new one using the form below.'), 'Expired cancel account request rejected.');
- $accounts = user_load_multiple(array($account->uid), array('status' => 1));
- $this->assertTrue(reset($accounts), 'User account was not canceled.');
-
- // Confirm user's content has not been altered.
- $test_node = node_load($node->nid, NULL, TRUE);
- $this->assertTrue(($test_node->uid == $account->uid && $test_node->status == 1), 'Node of the user has not been altered.');
- }
-
- /**
- * Disable account and keep all content.
- */
- function testUserBlock() {
- variable_set('user_cancel_method', 'user_cancel_block');
-
- // Create a user.
- $web_user = $this->drupalCreateUser(array('cancel account'));
- $this->drupalLogin($web_user);
-
- // Load real user object.
- $account = user_load($web_user->uid, TRUE);
-
- // Attempt to cancel account.
- $this->drupalGet('user/' . $account->uid . '/edit');
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('Are you sure you want to cancel your account?'), 'Confirmation form to cancel account displayed.');
- $this->assertText(t('Your account will be blocked and you will no longer be able to log in. All of your content will remain attributed to your user name.'), 'Informs that all content will be remain as is.');
- $this->assertNoText(t('Select the method to cancel the account above.'), 'Does not allow user to select account cancellation method.');
-
- // Confirm account cancellation.
- $timestamp = time();
-
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
- // Confirm account cancellation request.
- $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid));
- $account = user_load($account->uid, TRUE);
- $this->assertTrue($account->status == 0, 'User has been blocked.');
-
- // Confirm that the confirmation message made it through to the end user.
- $this->assertRaw(t('%name has been disabled.', array('%name' => $account->name)), "Confirmation message displayed to user.");
- }
-
- /**
- * Disable account and unpublish all content.
- */
- function testUserBlockUnpublish() {
- variable_set('user_cancel_method', 'user_cancel_block_unpublish');
-
- // Create a user.
- $account = $this->drupalCreateUser(array('cancel account'));
- $this->drupalLogin($account);
- // Load real user object.
- $account = user_load($account->uid, TRUE);
-
- // Create a node with two revisions.
- $node = $this->drupalCreateNode(array('uid' => $account->uid));
- $settings = get_object_vars($node);
- $settings['revision'] = 1;
- $node = $this->drupalCreateNode($settings);
-
- // Attempt to cancel account.
- $this->drupalGet('user/' . $account->uid . '/edit');
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('Are you sure you want to cancel your account?'), 'Confirmation form to cancel account displayed.');
- $this->assertText(t('Your account will be blocked and you will no longer be able to log in. All of your content will be hidden from everyone but administrators.'), 'Informs that all content will be unpublished.');
-
- // Confirm account cancellation.
- $timestamp = time();
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
- // Confirm account cancellation request.
- $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid));
- $account = user_load($account->uid, TRUE);
- $this->assertTrue($account->status == 0, 'User has been blocked.');
-
- // Confirm user's content has been unpublished.
- $test_node = node_load($node->nid, NULL, TRUE);
- $this->assertTrue($test_node->status == 0, 'Node of the user has been unpublished.');
- $test_node = node_load($node->nid, $node->vid, TRUE);
- $this->assertTrue($test_node->status == 0, 'Node revision of the user has been unpublished.');
-
- // Confirm that the confirmation message made it through to the end user.
- $this->assertRaw(t('%name has been disabled.', array('%name' => $account->name)), "Confirmation message displayed to user.");
- }
-
- /**
- * Delete account and anonymize all content.
- */
- function testUserAnonymize() {
- variable_set('user_cancel_method', 'user_cancel_reassign');
-
- // Create a user.
- $account = $this->drupalCreateUser(array('cancel account'));
- $this->drupalLogin($account);
- // Load real user object.
- $account = user_load($account->uid, TRUE);
-
- // Create a simple node.
- $node = $this->drupalCreateNode(array('uid' => $account->uid));
-
- // Create a node with two revisions, the initial one belonging to the
- // cancelling user.
- $revision_node = $this->drupalCreateNode(array('uid' => $account->uid));
- $revision = $revision_node->vid;
- $settings = get_object_vars($revision_node);
- $settings['revision'] = 1;
- $settings['uid'] = 1; // Set new/current revision to someone else.
- $revision_node = $this->drupalCreateNode($settings);
-
- // Attempt to cancel account.
- $this->drupalGet('user/' . $account->uid . '/edit');
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('Are you sure you want to cancel your account?'), 'Confirmation form to cancel account displayed.');
- $this->assertRaw(t('Your account will be removed and all account information deleted. All of your content will be assigned to the %anonymous-name user.', array('%anonymous-name' => variable_get('anonymous', t('Anonymous')))), 'Informs that all content will be attributed to anonymous account.');
-
- // Confirm account cancellation.
- $timestamp = time();
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
- // Confirm account cancellation request.
- $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid));
- $this->assertFalse(user_load($account->uid, TRUE), 'User is not found in the database.');
-
- // Confirm that user's content has been attributed to anonymous user.
- $test_node = node_load($node->nid, NULL, TRUE);
- $this->assertTrue(($test_node->uid == 0 && $test_node->status == 1), 'Node of the user has been attributed to anonymous user.');
- $test_node = node_load($revision_node->nid, $revision, TRUE);
- $this->assertTrue(($test_node->revision_uid == 0 && $test_node->status == 1), 'Node revision of the user has been attributed to anonymous user.');
- $test_node = node_load($revision_node->nid, NULL, TRUE);
- $this->assertTrue(($test_node->uid != 0 && $test_node->status == 1), "Current revision of the user's node was not attributed to anonymous user.");
-
- // Confirm that the confirmation message made it through to the end user.
- $this->assertRaw(t('%name has been deleted.', array('%name' => $account->name)), "Confirmation message displayed to user.");
- }
-
- /**
- * Delete account and remove all content.
- */
- function testUserDelete() {
- variable_set('user_cancel_method', 'user_cancel_delete');
-
- // Create a user.
- $account = $this->drupalCreateUser(array('cancel account', 'post comments', 'skip comment approval'));
- $this->drupalLogin($account);
- // Load real user object.
- $account = user_load($account->uid, TRUE);
-
- // Create a simple node.
- $node = $this->drupalCreateNode(array('uid' => $account->uid));
-
- // Create comment.
- $langcode = LANGUAGE_NONE;
- $edit = array();
- $edit['subject'] = $this->randomName(8);
- $edit['comment_body[' . $langcode . '][0][value]'] = $this->randomName(16);
-
- $this->drupalPost('comment/reply/' . $node->nid, $edit, t('Preview'));
- $this->drupalPost(NULL, array(), t('Save'));
- $this->assertText(t('Your comment has been posted.'));
- $comments = comment_load_multiple(array(), array('subject' => $edit['subject']));
- $comment = reset($comments);
- $this->assertTrue($comment->cid, 'Comment found.');
-
- // Create a node with two revisions, the initial one belonging to the
- // cancelling user.
- $revision_node = $this->drupalCreateNode(array('uid' => $account->uid));
- $revision = $revision_node->vid;
- $settings = get_object_vars($revision_node);
- $settings['revision'] = 1;
- $settings['uid'] = 1; // Set new/current revision to someone else.
- $revision_node = $this->drupalCreateNode($settings);
-
- // Attempt to cancel account.
- $this->drupalGet('user/' . $account->uid . '/edit');
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('Are you sure you want to cancel your account?'), 'Confirmation form to cancel account displayed.');
- $this->assertText(t('Your account will be removed and all account information deleted. All of your content will also be deleted.'), 'Informs that all content will be deleted.');
-
- // Confirm account cancellation.
- $timestamp = time();
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
-
- // Confirm account cancellation request.
- $this->drupalGet("user/$account->uid/cancel/confirm/$timestamp/" . user_pass_rehash($account->pass, $timestamp, $account->login, $account->uid));
- $this->assertFalse(user_load($account->uid, TRUE), 'User is not found in the database.');
-
- // Confirm that user's content has been deleted.
- $this->assertFalse(node_load($node->nid, NULL, TRUE), 'Node of the user has been deleted.');
- $this->assertFalse(node_load($node->nid, $revision, TRUE), 'Node revision of the user has been deleted.');
- $this->assertTrue(node_load($revision_node->nid, NULL, TRUE), "Current revision of the user's node was not deleted.");
- $this->assertFalse(comment_load($comment->cid), 'Comment of the user has been deleted.');
-
- // Confirm that the confirmation message made it through to the end user.
- $this->assertRaw(t('%name has been deleted.', array('%name' => $account->name)), "Confirmation message displayed to user.");
- }
-
- /**
- * Create an administrative user and delete another user.
- */
- function testUserCancelByAdmin() {
- variable_set('user_cancel_method', 'user_cancel_reassign');
-
- // Create a regular user.
- $account = $this->drupalCreateUser(array());
-
- // Create administrative user.
- $admin_user = $this->drupalCreateUser(array('administer users'));
- $this->drupalLogin($admin_user);
-
- // Delete regular user.
- $this->drupalGet('user/' . $account->uid . '/edit');
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertRaw(t('Are you sure you want to cancel the account %name?', array('%name' => $account->name)), 'Confirmation form to cancel account displayed.');
- $this->assertText(t('Select the method to cancel the account above.'), 'Allows to select account cancellation method.');
-
- // Confirm deletion.
- $this->drupalPost(NULL, NULL, t('Cancel account'));
- $this->assertRaw(t('%name has been deleted.', array('%name' => $account->name)), 'User deleted.');
- $this->assertFalse(user_load($account->uid), 'User is not found in the database.');
- }
-
- /**
- * Create an administrative user and mass-delete other users.
- */
- function testMassUserCancelByAdmin() {
- variable_set('user_cancel_method', 'user_cancel_reassign');
- // Enable account cancellation notification.
- variable_set('user_mail_status_canceled_notify', TRUE);
-
- // Create administrative user.
- $admin_user = $this->drupalCreateUser(array('administer users'));
- $this->drupalLogin($admin_user);
-
- // Create some users.
- $users = array();
- for ($i = 0; $i < 3; $i++) {
- $account = $this->drupalCreateUser(array());
- $users[$account->uid] = $account;
- }
-
- // Cancel user accounts, including own one.
- $edit = array();
- $edit['operation'] = 'cancel';
- foreach ($users as $uid => $account) {
- $edit['accounts[' . $uid . ']'] = TRUE;
- }
- $edit['accounts[' . $admin_user->uid . ']'] = TRUE;
- // Also try to cancel uid 1.
- $edit['accounts[1]'] = TRUE;
- $this->drupalPost('admin/people', $edit, t('Update'));
- $this->assertText(t('Are you sure you want to cancel these user accounts?'), 'Confirmation form to cancel accounts displayed.');
- $this->assertText(t('When cancelling these accounts'), 'Allows to select account cancellation method.');
- $this->assertText(t('Require e-mail confirmation to cancel account.'), 'Allows to send confirmation mail.');
- $this->assertText(t('Notify user when account is canceled.'), 'Allows to send notification mail.');
-
- // Confirm deletion.
- $this->drupalPost(NULL, NULL, t('Cancel accounts'));
- $status = TRUE;
- foreach ($users as $account) {
- $status = $status && (strpos($this->content, t('%name has been deleted.', array('%name' => $account->name))) !== FALSE);
- $status = $status && !user_load($account->uid, TRUE);
- }
- $this->assertTrue($status, 'Users deleted and not found in the database.');
-
- // Ensure that admin account was not cancelled.
- $this->assertText(t('A confirmation request to cancel your account has been sent to your e-mail address.'), 'Account cancellation request mailed message displayed.');
- $admin_user = user_load($admin_user->uid);
- $this->assertTrue($admin_user->status == 1, 'Administrative user is found in the database and enabled.');
-
- // Verify that uid 1's account was not cancelled.
- $user1 = user_load(1, TRUE);
- $this->assertEqual($user1->status, 1, 'User #1 still exists and is not blocked.');
- }
-}
-
-class UserPictureTestCase extends DrupalWebTestCase {
- protected $user;
- protected $_directory_test;
-
- public static function getInfo() {
- return array(
- 'name' => 'Upload user picture',
- 'description' => 'Assure that dimension check, extension check and image scaling work as designed.',
- 'group' => 'User'
- );
- }
-
- function setUp() {
- parent::setUp();
- // Enable user pictures.
- variable_set('user_pictures', 1);
-
- $this->user = $this->drupalCreateUser();
-
- // Test if directories specified in settings exist in filesystem.
- $file_dir = 'public://';
- $file_check = file_prepare_directory($file_dir, FILE_CREATE_DIRECTORY);
- // TODO: Test public and private methods?
-
- $picture_dir = variable_get('user_picture_path', 'pictures');
- $picture_path = $file_dir . $picture_dir;
-
- $pic_check = file_prepare_directory($picture_path, FILE_CREATE_DIRECTORY);
- $this->_directory_test = is_writable($picture_path);
- $this->assertTrue($this->_directory_test, "The directory $picture_path doesn't exist or is not writable. Further tests won't be made.");
- }
-
- function testNoPicture() {
- $this->drupalLogin($this->user);
-
- // Try to upload a file that is not an image for the user picture.
- $not_an_image = current($this->drupalGetTestFiles('html'));
- $this->saveUserPicture($not_an_image);
- $this->assertRaw(t('Only JPEG, PNG and GIF images are allowed.'), 'Non-image files are not accepted.');
- }
-
- /**
- * Do the test:
- * GD Toolkit is installed
- * Picture has invalid dimension
- *
- * results: The image should be uploaded because ImageGDToolkit resizes the picture
- */
- function testWithGDinvalidDimension() {
- if ($this->_directory_test && image_get_toolkit()) {
- $this->drupalLogin($this->user);
-
- $image = current($this->drupalGetTestFiles('image'));
- $info = image_get_info($image->uri);
-
- // Set new variables: invalid dimensions, valid filesize (0 = no limit).
- $test_dim = ($info['width'] - 10) . 'x' . ($info['height'] - 10);
- variable_set('user_picture_dimensions', $test_dim);
- variable_set('user_picture_file_size', 0);
-
- $pic_path = $this->saveUserPicture($image);
- // Check that the image was resized and is being displayed on the
- // user's profile page.
- $text = t('The image was resized to fit within the maximum allowed dimensions of %dimensions pixels.', array('%dimensions' => $test_dim));
- $this->assertRaw($text, 'Image was resized.');
- $alt = t("@user's picture", array('@user' => format_username($this->user)));
- $style = variable_get('user_picture_style', '');
- $this->assertRaw(check_plain(image_style_url($style, $pic_path)), "Image is displayed in user's edit page");
-
- // Check if file is located in proper directory.
- $this->assertTrue(is_file($pic_path), "File is located in proper directory");
- }
- }
-
- /**
- * Do the test:
- * GD Toolkit is installed
- * Picture has invalid size
- *
- * results: The image should be uploaded because ImageGDToolkit resizes the picture
- */
- function testWithGDinvalidSize() {
- if ($this->_directory_test && image_get_toolkit()) {
- $this->drupalLogin($this->user);
-
- // Images are sorted first by size then by name. We need an image
- // bigger than 1 KB so we'll grab the last one.
- $files = $this->drupalGetTestFiles('image');
- $image = end($files);
- $info = image_get_info($image->uri);
-
- // Set new variables: valid dimensions, invalid filesize.
- $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
- $test_size = 1;
- variable_set('user_picture_dimensions', $test_dim);
- variable_set('user_picture_file_size', $test_size);
-
- $pic_path = $this->saveUserPicture($image);
-
- // Test that the upload failed and that the correct reason was cited.
- $text = t('The specified file %filename could not be uploaded.', array('%filename' => $image->filename));
- $this->assertRaw($text, 'Upload failed.');
- $text = t('The file is %filesize exceeding the maximum file size of %maxsize.', array('%filesize' => format_size(filesize($image->uri)), '%maxsize' => format_size($test_size * 1024)));
- $this->assertRaw($text, 'File size cited as reason for failure.');
-
- // Check if file is not uploaded.
- $this->assertFalse(is_file($pic_path), 'File was not uploaded.');
- }
- }
-
- /**
- * Do the test:
- * GD Toolkit is not installed
- * Picture has invalid size
- *
- * results: The image shouldn't be uploaded
- */
- function testWithoutGDinvalidDimension() {
- if ($this->_directory_test && !image_get_toolkit()) {
- $this->drupalLogin($this->user);
-
- $image = current($this->drupalGetTestFiles('image'));
- $info = image_get_info($image->uri);
-
- // Set new variables: invalid dimensions, valid filesize (0 = no limit).
- $test_dim = ($info['width'] - 10) . 'x' . ($info['height'] - 10);
- variable_set('user_picture_dimensions', $test_dim);
- variable_set('user_picture_file_size', 0);
-
- $pic_path = $this->saveUserPicture($image);
-
- // Test that the upload failed and that the correct reason was cited.
- $text = t('The specified file %filename could not be uploaded.', array('%filename' => $image->filename));
- $this->assertRaw($text, 'Upload failed.');
- $text = t('The image is too large; the maximum dimensions are %dimensions pixels.', array('%dimensions' => $test_dim));
- $this->assertRaw($text, 'Checking response on invalid image (dimensions).');
-
- // Check if file is not uploaded.
- $this->assertFalse(is_file($pic_path), 'File was not uploaded.');
- }
- }
-
- /**
- * Do the test:
- * GD Toolkit is not installed
- * Picture has invalid size
- *
- * results: The image shouldn't be uploaded
- */
- function testWithoutGDinvalidSize() {
- if ($this->_directory_test && !image_get_toolkit()) {
- $this->drupalLogin($this->user);
-
- $image = current($this->drupalGetTestFiles('image'));
- $info = image_get_info($image->uri);
-
- // Set new variables: valid dimensions, invalid filesize.
- $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
- $test_size = 1;
- variable_set('user_picture_dimensions', $test_dim);
- variable_set('user_picture_file_size', $test_size);
-
- $pic_path = $this->saveUserPicture($image);
-
- // Test that the upload failed and that the correct reason was cited.
- $text = t('The specified file %filename could not be uploaded.', array('%filename' => $image->filename));
- $this->assertRaw($text, 'Upload failed.');
- $text = t('The file is %filesize exceeding the maximum file size of %maxsize.', array('%filesize' => format_size(filesize($image->uri)), '%maxsize' => format_size($test_size * 1024)));
- $this->assertRaw($text, 'File size cited as reason for failure.');
-
- // Check if file is not uploaded.
- $this->assertFalse(is_file($pic_path), 'File was not uploaded.');
- }
- }
-
- /**
- * Do the test:
- * Picture is valid (proper size and dimension)
- *
- * results: The image should be uploaded
- */
- function testPictureIsValid() {
- if ($this->_directory_test) {
- $this->drupalLogin($this->user);
-
- $image = current($this->drupalGetTestFiles('image'));
- $info = image_get_info($image->uri);
-
- // Set new variables: valid dimensions, valid filesize (0 = no limit).
- $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
- variable_set('user_picture_dimensions', $test_dim);
- variable_set('user_picture_file_size', 0);
-
- $pic_path = $this->saveUserPicture($image);
-
- // Check if image is displayed in user's profile page.
- $this->drupalGet('user');
- $this->assertRaw(file_uri_target($pic_path), "Image is displayed in user's profile page");
-
- // Check if file is located in proper directory.
- $this->assertTrue(is_file($pic_path), 'File is located in proper directory');
-
- // Set new picture dimensions.
- $test_dim = ($info['width'] + 5) . 'x' . ($info['height'] + 5);
- variable_set('user_picture_dimensions', $test_dim);
-
- $pic_path2 = $this->saveUserPicture($image);
- $this->assertNotEqual($pic_path, $pic_path2, 'Filename of second picture is different.');
-
- // Check if user picture has a valid file ID after saving the user.
- $account = user_load($this->user->uid, TRUE);
- $this->assertTrue(is_object($account->picture), 'User picture object is valid after user load.');
- $this->assertNotNull($account->picture->fid, 'User picture object has a FID after user load.');
- $this->assertTrue(is_file($account->picture->uri), 'File is located in proper directory after user load.');
- user_save($account);
- // Verify that the user save does not destroy the user picture object.
- $this->assertTrue(is_object($account->picture), 'User picture object is valid after user save.');
- $this->assertNotNull($account->picture->fid, 'User picture object has a FID after user save.');
- $this->assertTrue(is_file($account->picture->uri), 'File is located in proper directory after user save.');
- }
- }
-
- /**
- * Test HTTP schema working with user pictures.
- */
- function testExternalPicture() {
- $this->drupalLogin($this->user);
- // Set the default picture to an URI with a HTTP schema.
- $images = $this->drupalGetTestFiles('image');
- $image = $images[0];
- $pic_path = file_create_url($image->uri);
- variable_set('user_picture_default', $pic_path);
-
- // Check if image is displayed in user's profile page.
- $this->drupalGet('user');
-
- // Get the user picture image via xpath.
- $elements = $this->xpath('//div[@class="user-picture"]/img');
- $this->assertEqual(count($elements), 1, "There is exactly one user picture on the user's profile page");
- $this->assertEqual($pic_path, (string) $elements[0]['src'], "User picture source is correct.");
- }
-
- /**
- * Tests deletion of user pictures.
- */
- function testDeletePicture() {
- $this->drupalLogin($this->user);
-
- $image = current($this->drupalGetTestFiles('image'));
- $info = image_get_info($image->uri);
-
- // Set new variables: valid dimensions, valid filesize (0 = no limit).
- $test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
- variable_set('user_picture_dimensions', $test_dim);
- variable_set('user_picture_file_size', 0);
-
- // Save a new picture.
- $edit = array('files[picture_upload]' => drupal_realpath($image->uri));
- $this->drupalPost('user/' . $this->user->uid . '/edit', $edit, t('Save'));
-
- // Load actual user data from database.
- $account = user_load($this->user->uid, TRUE);
- $pic_path = isset($account->picture) ? $account->picture->uri : NULL;
-
- // Check if image is displayed in user's profile page.
- $this->drupalGet('user');
- $this->assertRaw(file_uri_target($pic_path), "Image is displayed in user's profile page");
-
- // Check if file is located in proper directory.
- $this->assertTrue(is_file($pic_path), 'File is located in proper directory');
-
- $edit = array('picture_delete' => 1);
- $this->drupalPost('user/' . $this->user->uid . '/edit', $edit, t('Save'));
-
- // Load actual user data from database.
- $account1 = user_load($this->user->uid, TRUE);
- $this->assertNull($account1->picture, 'User object has no picture');
-
- $file = file_load($account->picture->fid);
- $this->assertFalse($file, 'File is removed from database');
-
- // Clear out PHP's file stat cache so we see the current value.
- clearstatcache();
- $this->assertFalse(is_file($pic_path), 'File is removed from file system');
- }
-
- function saveUserPicture($image) {
- $edit = array('files[picture_upload]' => drupal_realpath($image->uri));
- $this->drupalPost('user/' . $this->user->uid . '/edit', $edit, t('Save'));
-
- // Load actual user data from database.
- $account = user_load($this->user->uid, TRUE);
- return isset($account->picture) ? $account->picture->uri : NULL;
- }
-
- /**
- * Tests the admin form validates user picture settings.
- */
- function testUserPictureAdminFormValidation() {
- $this->drupalLogin($this->drupalCreateUser(array('administer users')));
-
- // The default values are valid.
- $this->drupalPost('admin/config/people/accounts', array(), t('Save configuration'));
- $this->assertText(t('The configuration options have been saved.'), 'The default values are valid.');
-
- // The form does not save with an invalid file size.
- $edit = array(
- 'user_picture_file_size' => $this->randomName(),
- );
- $this->drupalPost('admin/config/people/accounts', $edit, t('Save configuration'));
- $this->assertNoText(t('The configuration options have been saved.'), 'The form does not save with an invalid file size.');
- }
-}
-
-
-class UserPermissionsTestCase extends DrupalWebTestCase {
- protected $admin_user;
- protected $rid;
-
- public static function getInfo() {
- return array(
- 'name' => 'Role permissions',
- 'description' => 'Verify that role permissions can be added and removed via the permissions page.',
- 'group' => 'User'
- );
- }
-
- function setUp() {
- parent::setUp();
-
- $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'access user profiles', 'administer site configuration', 'administer modules', 'administer users'));
-
- // Find the new role ID - it must be the maximum.
- $all_rids = array_keys($this->admin_user->roles);
- sort($all_rids);
- $this->rid = array_pop($all_rids);
- }
-
- /**
- * Change user permissions and check user_access().
- */
- function testUserPermissionChanges() {
- $this->drupalLogin($this->admin_user);
- $rid = $this->rid;
- $account = $this->admin_user;
-
- // Add a permission.
- $this->assertFalse(user_access('administer nodes', $account), 'User does not have "administer nodes" permission.');
- $edit = array();
- $edit[$rid . '[administer nodes]'] = TRUE;
- $this->drupalPost('admin/people/permissions', $edit, t('Save permissions'));
- $this->assertText(t('The changes have been saved.'), 'Successful save message displayed.');
- drupal_static_reset('user_access');
- drupal_static_reset('user_role_permissions');
- $this->assertTrue(user_access('administer nodes', $account), 'User now has "administer nodes" permission.');
-
- // Remove a permission.
- $this->assertTrue(user_access('access user profiles', $account), 'User has "access user profiles" permission.');
- $edit = array();
- $edit[$rid . '[access user profiles]'] = FALSE;
- $this->drupalPost('admin/people/permissions', $edit, t('Save permissions'));
- $this->assertText(t('The changes have been saved.'), 'Successful save message displayed.');
- drupal_static_reset('user_access');
- drupal_static_reset('user_role_permissions');
- $this->assertFalse(user_access('access user profiles', $account), 'User no longer has "access user profiles" permission.');
- }
-
- /**
- * Test assigning of permissions for the administrator role.
- */
- function testAdministratorRole() {
- $this->drupalLogin($this->admin_user);
- $this->drupalGet('admin/config/people/accounts');
-
- // Set the user's role to be the administrator role.
- $edit = array();
- $edit['user_admin_role'] = $this->rid;
- $this->drupalPost('admin/config/people/accounts', $edit, t('Save configuration'));
-
- // Enable aggregator module and ensure the 'administer news feeds'
- // permission is assigned by default.
- $edit = array();
- $edit['modules[Core][aggregator][enable]'] = TRUE;
- $this->drupalPost('admin/modules', $edit, t('Save configuration'));
- $this->assertTrue(user_access('administer news feeds', $this->admin_user), 'The permission was automatically assigned to the administrator role');
- }
-
- /**
- * Verify proper permission changes by user_role_change_permissions().
- */
- function testUserRoleChangePermissions() {
- $rid = $this->rid;
- $account = $this->admin_user;
-
- // Verify current permissions.
- $this->assertFalse(user_access('administer nodes', $account), 'User does not have "administer nodes" permission.');
- $this->assertTrue(user_access('access user profiles', $account), 'User has "access user profiles" permission.');
- $this->assertTrue(user_access('administer site configuration', $account), 'User has "administer site configuration" permission.');
-
- // Change permissions.
- $permissions = array(
- 'administer nodes' => 1,
- 'access user profiles' => 0,
- );
- user_role_change_permissions($rid, $permissions);
-
- // Verify proper permission changes.
- $this->assertTrue(user_access('administer nodes', $account), 'User now has "administer nodes" permission.');
- $this->assertFalse(user_access('access user profiles', $account), 'User no longer has "access user profiles" permission.');
- $this->assertTrue(user_access('administer site configuration', $account), 'User still has "administer site configuration" permission.');
- }
-}
-
-class UserAdminTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User administration',
- 'description' => 'Test user administration page functionality.',
- 'group' => 'User'
- );
- }
-
- /**
- * Registers a user and deletes it.
- */
- function testUserAdmin() {
-
- $user_a = $this->drupalCreateUser(array());
- $user_b = $this->drupalCreateUser(array('administer taxonomy'));
- $user_c = $this->drupalCreateUser(array('administer taxonomy'));
-
- // Create admin user to delete registered user.
- $admin_user = $this->drupalCreateUser(array('administer users'));
- $this->drupalLogin($admin_user);
- $this->drupalGet('admin/people');
- $this->assertText($user_a->name, 'Found user A on admin users page');
- $this->assertText($user_b->name, 'Found user B on admin users page');
- $this->assertText($user_c->name, 'Found user C on admin users page');
- $this->assertText($admin_user->name, 'Found Admin user on admin users page');
-
- // Test for existence of edit link in table.
- $link = l(t('edit'), "user/$user_a->uid/edit", array('query' => array('destination' => 'admin/people')));
- $this->assertRaw($link, 'Found user A edit link on admin users page');
-
- // Filter the users by permission 'administer taxonomy'.
- $edit = array();
- $edit['permission'] = 'administer taxonomy';
- $this->drupalPost('admin/people', $edit, t('Filter'));
-
- // Check if the correct users show up.
- $this->assertNoText($user_a->name, 'User A not on filtered by perm admin users page');
- $this->assertText($user_b->name, 'Found user B on filtered by perm admin users page');
- $this->assertText($user_c->name, 'Found user C on filtered by perm admin users page');
-
- // Filter the users by role. Grab the system-generated role name for User C.
- $edit['role'] = max(array_flip($user_c->roles));
- $this->drupalPost('admin/people', $edit, t('Refine'));
-
- // Check if the correct users show up when filtered by role.
- $this->assertNoText($user_a->name, 'User A not on filtered by role on admin users page');
- $this->assertNoText($user_b->name, 'User B not on filtered by role on admin users page');
- $this->assertText($user_c->name, 'User C on filtered by role on admin users page');
-
- // Test blocking of a user.
- $account = user_load($user_c->uid);
- $this->assertEqual($account->status, 1, 'User C not blocked');
- $edit = array();
- $edit['operation'] = 'block';
- $edit['accounts[' . $account->uid . ']'] = TRUE;
- $this->drupalPost('admin/people', $edit, t('Update'));
- $account = user_load($user_c->uid, TRUE);
- $this->assertEqual($account->status, 0, 'User C blocked');
-
- // Test unblocking of a user from /admin/people page and sending of activation mail
- $editunblock = array();
- $editunblock['operation'] = 'unblock';
- $editunblock['accounts[' . $account->uid . ']'] = TRUE;
- $this->drupalPost('admin/people', $editunblock, t('Update'));
- $account = user_load($user_c->uid, TRUE);
- $this->assertEqual($account->status, 1, 'User C unblocked');
- $this->assertMail("to", $account->mail, "Activation mail sent to user C");
-
- // Test blocking and unblocking another user from /user/[uid]/edit form and sending of activation mail
- $user_d = $this->drupalCreateUser(array());
- $account1 = user_load($user_d->uid, TRUE);
- $this->drupalPost('user/' . $account1->uid . '/edit', array('status' => 0), t('Save'));
- $account1 = user_load($user_d->uid, TRUE);
- $this->assertEqual($account1->status, 0, 'User D blocked');
- $this->drupalPost('user/' . $account1->uid . '/edit', array('status' => TRUE), t('Save'));
- $account1 = user_load($user_d->uid, TRUE);
- $this->assertEqual($account1->status, 1, 'User D unblocked');
- $this->assertMail("to", $account1->mail, "Activation mail sent to user D");
- }
-}
-
-/**
- * Tests for user-configurable time zones.
- */
-class UserTimeZoneFunctionalTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User time zones',
- 'description' => 'Set a user time zone and verify that dates are displayed in local time.',
- 'group' => 'User',
- );
- }
-
- /**
- * Tests the display of dates and time when user-configurable time zones are set.
- */
- function testUserTimeZone() {
- // Setup date/time settings for Los Angeles time.
- variable_set('date_default_timezone', 'America/Los_Angeles');
- variable_set('configurable_timezones', 1);
- variable_set('date_format_medium', 'Y-m-d H:i T');
-
- // Create a user account and login.
- $web_user = $this->drupalCreateUser();
- $this->drupalLogin($web_user);
-
- // Create some nodes with different authored-on dates.
- // Two dates in PST (winter time):
- $date1 = '2007-03-09 21:00:00 -0800';
- $date2 = '2007-03-11 01:00:00 -0800';
- // One date in PDT (summer time):
- $date3 = '2007-03-20 21:00:00 -0700';
- $node1 = $this->drupalCreateNode(array('created' => strtotime($date1), 'type' => 'article'));
- $node2 = $this->drupalCreateNode(array('created' => strtotime($date2), 'type' => 'article'));
- $node3 = $this->drupalCreateNode(array('created' => strtotime($date3), 'type' => 'article'));
-
- // Confirm date format and time zone.
- $this->drupalGet("node/$node1->nid");
- $this->assertText('2007-03-09 21:00 PST', 'Date should be PST.');
- $this->drupalGet("node/$node2->nid");
- $this->assertText('2007-03-11 01:00 PST', 'Date should be PST.');
- $this->drupalGet("node/$node3->nid");
- $this->assertText('2007-03-20 21:00 PDT', 'Date should be PDT.');
-
- // Change user time zone to Santiago time.
- $edit = array();
- $edit['mail'] = $web_user->mail;
- $edit['timezone'] = 'America/Santiago';
- $this->drupalPost("user/$web_user->uid/edit", $edit, t('Save'));
- $this->assertText(t('The changes have been saved.'), 'Time zone changed to Santiago time.');
-
- // Confirm date format and time zone.
- $this->drupalGet("node/$node1->nid");
- $this->assertText('2007-03-10 02:00 CLST', 'Date should be Chile summer time; five hours ahead of PST.');
- $this->drupalGet("node/$node2->nid");
- $this->assertText('2007-03-11 05:00 CLT', 'Date should be Chile time; four hours ahead of PST');
- $this->drupalGet("node/$node3->nid");
- $this->assertText('2007-03-21 00:00 CLT', 'Date should be Chile time; three hours ahead of PDT.');
- }
-}
-
-/**
- * Test user autocompletion.
- */
-class UserAutocompleteTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User autocompletion',
- 'description' => 'Test user autocompletion functionality.',
- 'group' => 'User'
- );
- }
-
- function setUp() {
- parent::setUp();
-
- // Set up two users with different permissions to test access.
- $this->unprivileged_user = $this->drupalCreateUser();
- $this->privileged_user = $this->drupalCreateUser(array('access user profiles'));
- }
-
- /**
- * Tests access to user autocompletion and verify the correct results.
- */
- function testUserAutocomplete() {
- // Check access from unprivileged user, should be denied.
- $this->drupalLogin($this->unprivileged_user);
- $this->drupalGet('user/autocomplete/' . $this->unprivileged_user->name[0]);
- $this->assertResponse(403, 'Autocompletion access denied to user without permission.');
-
- // Check access from privileged user.
- $this->drupalLogout();
- $this->drupalLogin($this->privileged_user);
- $this->drupalGet('user/autocomplete/' . $this->unprivileged_user->name[0]);
- $this->assertResponse(200, 'Autocompletion access allowed.');
-
- // Using first letter of the user's name, make sure the user's full name is in the results.
- $this->assertRaw($this->unprivileged_user->name, 'User name found in autocompletion results.');
- }
-}
-
-
-/**
- * Tests user links in the secondary menu.
- */
-class UserAccountLinksUnitTests extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User account links',
- 'description' => 'Test user-account links.',
- 'group' => 'User'
- );
- }
-
- function setUp() {
- parent::setUp('menu');
- }
-
- /**
- * Tests the secondary menu.
- */
- function testSecondaryMenu() {
- // Create a regular user.
- $user = $this->drupalCreateUser(array());
-
- // Log in and get the homepage.
- $this->drupalLogin($user);
- $this->drupalGet('');
-
- // For a logged-in user, expect the secondary menu to have links for "My
- // account" and "Log out".
- $link = $this->xpath('//ul[@id=:menu_id]/li/a[contains(@href, :href) and text()=:text]', array(
- ':menu_id' => 'secondary-menu-links',
- ':href' => 'user',
- ':text' => 'My account',
- ));
- $this->assertEqual(count($link), 1, 'My account link is in secondary menu.');
-
- $link = $this->xpath('//ul[@id=:menu_id]/li/a[contains(@href, :href) and text()=:text]', array(
- ':menu_id' => 'secondary-menu-links',
- ':href' => 'user/logout',
- ':text' => 'Log out',
- ));
- $this->assertEqual(count($link), 1, 'Log out link is in secondary menu.');
-
- // Log out and get the homepage.
- $this->drupalLogout();
- $this->drupalGet('');
-
- // For a logged-out user, expect no secondary links.
- $element = $this->xpath('//ul[@id=:menu_id]', array(':menu_id' => 'secondary-menu-links'));
- $this->assertEqual(count($element), 0, 'No secondary-menu for logged-out users.');
- }
-
- /**
- * Tests disabling the 'My account' link.
- */
- function testDisabledAccountLink() {
- // Create an admin user and log in.
- $this->drupalLogin($this->drupalCreateUser(array('access administration pages', 'administer menu')));
-
- // Verify that the 'My account' link is enabled.
- $this->drupalGet('admin/structure/menu/manage/user-menu');
- $label = $this->xpath('//label[contains(.,:text)]/@for', array(':text' => 'Enable My account menu link'));
- $this->assertFieldChecked((string) $label[0], "The 'My account' link is enabled by default.");
-
- // Disable the 'My account' link.
- $input = $this->xpath('//input[@id=:field_id]/@name', array(':field_id' => (string)$label[0]));
- $edit = array(
- (string) $input[0] => FALSE,
- );
- $this->drupalPost('admin/structure/menu/manage/user-menu', $edit, t('Save configuration'));
-
- // Get the homepage.
- $this->drupalGet('');
-
- // Verify that the 'My account' link does not appear when disabled.
- $link = $this->xpath('//ul[@id=:menu_id]/li/a[contains(@href, :href) and text()=:text]', array(
- ':menu_id' => 'secondary-menu-links',
- ':href' => 'user',
- ':text' => 'My account',
- ));
- $this->assertEqual(count($link), 0, 'My account link is not in the secondary menu.');
- }
-
-}
-
-/**
- * Test user blocks.
- */
-class UserBlocksUnitTests extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User blocks',
- 'description' => 'Test user blocks.',
- 'group' => 'User'
- );
- }
-
- /**
- * Test the user login block.
- */
- function testUserLoginBlock() {
- // Create a user with some permission that anonymous users lack.
- $user = $this->drupalCreateUser(array('administer permissions'));
-
- // Log in using the block.
- $edit = array();
- $edit['name'] = $user->name;
- $edit['pass'] = $user->pass_raw;
- $this->drupalPost('admin/people/permissions', $edit, t('Log in'));
- $this->assertNoText(t('User login'), 'Logged in.');
-
- // Check that we are still on the same page.
- $this->assertEqual(url('admin/people/permissions', array('absolute' => TRUE)), $this->getUrl(), 'Still on the same page after login for access denied page');
-
- // Now, log out and repeat with a non-403 page.
- $this->drupalLogout();
- $this->drupalPost('filter/tips', $edit, t('Log in'));
- $this->assertNoText(t('User login'), 'Logged in.');
- $this->assertPattern('!!', 'Still on the same page after login for allowed page');
-
- // Check that the user login block is not vulnerable to information
- // disclosure to third party sites.
- $this->drupalLogout();
- $this->drupalPost('http://example.com/', $edit, t('Log in'), array('external' => FALSE));
- // Check that we remain on the site after login.
- $this->assertEqual(url('user/' . $user->uid, array('absolute' => TRUE)), $this->getUrl(), 'Redirected to user profile page after login from the frontpage');
- }
-
- /**
- * Test the Who's Online block.
- */
- function testWhosOnlineBlock() {
- // Generate users and make sure there are no current user sessions.
- $user1 = $this->drupalCreateUser(array());
- $user2 = $this->drupalCreateUser(array());
- $user3 = $this->drupalCreateUser(array());
- $this->assertEqual(db_query("SELECT COUNT(*) FROM {sessions}")->fetchField(), 0, 'Sessions table is empty.');
-
- // Insert a user with two sessions.
- $this->insertSession(array('uid' => $user1->uid));
- $this->insertSession(array('uid' => $user1->uid));
- $this->assertEqual(db_query("SELECT COUNT(*) FROM {sessions} WHERE uid = :uid", array(':uid' => $user1->uid))->fetchField(), 2, 'Duplicate user session has been inserted.');
-
- // Insert a user with only one session.
- $this->insertSession(array('uid' => $user2->uid, 'timestamp' => REQUEST_TIME + 1));
-
- // Insert an inactive logged-in user who should not be seen in the block.
- $this->insertSession(array('uid' => $user3->uid, 'timestamp' => (REQUEST_TIME - variable_get('user_block_seconds_online', 900) - 1)));
-
- // Insert two anonymous user sessions.
- $this->insertSession();
- $this->insertSession();
-
- // Test block output.
- $block = user_block_view('online');
- $this->drupalSetContent($block['content']);
- $this->assertRaw(t('2 users'), 'Correct number of online users (2 users).');
- $this->assertText($user1->name, 'Active user 1 found in online list.');
- $this->assertText($user2->name, 'Active user 2 found in online list.');
- $this->assertNoText($user3->name, "Inactive user not found in online list.");
- $this->assertTrue(strpos($this->drupalGetContent(), $user1->name) > strpos($this->drupalGetContent(), $user2->name), 'Online users are ordered correctly.');
- }
-
- /**
- * Insert a user session into the {sessions} table. This function is used
- * since we cannot log in more than one user at the same time in tests.
- */
- private function insertSession(array $fields = array()) {
- $fields += array(
- 'uid' => 0,
- 'sid' => drupal_hash_base64(uniqid(mt_rand(), TRUE)),
- 'timestamp' => REQUEST_TIME,
- );
- db_insert('sessions')
- ->fields($fields)
- ->execute();
- $this->assertEqual(db_query("SELECT COUNT(*) FROM {sessions} WHERE uid = :uid AND sid = :sid AND timestamp = :timestamp", array(':uid' => $fields['uid'], ':sid' => $fields['sid'], ':timestamp' => $fields['timestamp']))->fetchField(), 1, 'Session record inserted.');
- }
-}
-
-/**
- * Tests saving a user account.
- */
-class UserSaveTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'User save test',
- 'description' => 'Test user_save() for arbitrary new uid.',
- 'group' => 'User',
- );
- }
-
- /**
- * Test creating a user with arbitrary uid.
- */
- function testUserImport() {
- // User ID must be a number that is not in the database.
- $max_uid = db_query('SELECT MAX(uid) FROM {users}')->fetchField();
- $test_uid = $max_uid + mt_rand(1000, 1000000);
- $test_name = $this->randomName();
-
- // Create the base user, based on drupalCreateUser().
- $user = array(
- 'name' => $test_name,
- 'uid' => $test_uid,
- 'mail' => $test_name . '@example.com',
- 'is_new' => TRUE,
- 'pass' => user_password(),
- 'status' => 1,
- );
- $user_by_return = user_save(drupal_anonymous_user(), $user);
- $this->assertTrue($user_by_return, 'Loading user by return of user_save().');
-
- // Test if created user exists.
- $user_by_uid = user_load($test_uid);
- $this->assertTrue($user_by_uid, 'Loading user by uid.');
-
- $user_by_name = user_load_by_name($test_name);
- $this->assertTrue($user_by_name, 'Loading user by name.');
- }
-}
-
-/**
- * Test the create user administration page.
- */
-class UserCreateTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'User create',
- 'description' => 'Test the create user administration page.',
- 'group' => 'User',
- );
- }
-
- /**
- * Create a user through the administration interface and ensure that it
- * displays in the user list.
- */
- protected function testUserAdd() {
- $user = $this->drupalCreateUser(array('administer users'));
- $this->drupalLogin($user);
-
- foreach (array(FALSE, TRUE) as $notify) {
- $edit = array(
- 'name' => $this->randomName(),
- 'mail' => $this->randomName() . '@example.com',
- 'pass[pass1]' => $pass = $this->randomString(),
- 'pass[pass2]' => $pass,
- 'notify' => $notify,
- );
- $this->drupalPost('admin/people/create', $edit, t('Create new account'));
-
- if ($notify) {
- $this->assertText(t('A welcome message with further instructions has been e-mailed to the new user @name.', array('@name' => $edit['name'])), 'User created');
- $this->assertEqual(count($this->drupalGetMails()), 1, 'Notification e-mail sent');
- }
- else {
- $this->assertText(t('Created a new user account for @name. No e-mail has been sent.', array('@name' => $edit['name'])), 'User created');
- $this->assertEqual(count($this->drupalGetMails()), 0, 'Notification e-mail not sent');
- }
-
- $this->drupalGet('admin/people');
- $this->assertText($edit['name'], 'User found in list of users');
- }
- }
-}
-
-/**
- * Tests editing a user account.
- */
-class UserEditTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'User edit',
- 'description' => 'Test user edit page.',
- 'group' => 'User',
- );
- }
-
- /**
- * Test user edit page.
- */
- function testUserEdit() {
- // Test user edit functionality with user pictures disabled.
- variable_set('user_pictures', 0);
- $user1 = $this->drupalCreateUser(array('change own username'));
- $user2 = $this->drupalCreateUser(array());
- $this->drupalLogin($user1);
-
- // Test that error message appears when attempting to use a non-unique user name.
- $edit['name'] = $user2->name;
- $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
- $this->assertRaw(t('The name %name is already taken.', array('%name' => $edit['name'])));
-
- // Repeat the test with user pictures enabled, which modifies the form.
- variable_set('user_pictures', 1);
- $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
- $this->assertRaw(t('The name %name is already taken.', array('%name' => $edit['name'])));
-
- // Check that filling out a single password field does not validate.
- $edit = array();
- $edit['pass[pass1]'] = '';
- $edit['pass[pass2]'] = $this->randomName();
- $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
- $this->assertText(t("The specified passwords do not match."), 'Typing mismatched passwords displays an error message.');
-
- $edit['pass[pass1]'] = $this->randomName();
- $edit['pass[pass2]'] = '';
- $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
- $this->assertText(t("The specified passwords do not match."), 'Typing mismatched passwords displays an error message.');
-
- // Test that the error message appears when attempting to change the mail or
- // pass without the current password.
- $edit = array();
- $edit['mail'] = $this->randomName() . '@new.example.com';
- $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
- $this->assertRaw(t("Your current password is missing or incorrect; it's required to change the %name.", array('%name' => t('E-mail address'))));
-
- $edit['current_pass'] = $user1->pass_raw;
- $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
- $this->assertRaw(t("The changes have been saved."));
-
- // Test that the user must enter current password before changing passwords.
- $edit = array();
- $edit['pass[pass1]'] = $new_pass = $this->randomName();
- $edit['pass[pass2]'] = $new_pass;
- $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
- $this->assertRaw(t("Your current password is missing or incorrect; it's required to change the %name.", array('%name' => t('Password'))));
-
- // Try again with the current password.
- $edit['current_pass'] = $user1->pass_raw;
- $this->drupalPost("user/$user1->uid/edit", $edit, t('Save'));
- $this->assertRaw(t("The changes have been saved."));
-
- // Make sure the user can log in with their new password.
- $this->drupalLogout();
- $user1->pass_raw = $new_pass;
- $this->drupalLogin($user1);
- $this->drupalLogout();
- }
-}
-
-/**
- * Test case for user signatures.
- */
-class UserSignatureTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User signatures',
- 'description' => 'Test user signatures.',
- 'group' => 'User',
- );
- }
-
- function setUp() {
- parent::setUp('comment');
-
- // Enable user signatures.
- variable_set('user_signatures', 1);
-
- // Prefetch text formats.
- $this->full_html_format = filter_format_load('full_html');
- $this->plain_text_format = filter_format_load('plain_text');
-
- // Create regular and administrative users.
- $this->web_user = $this->drupalCreateUser(array());
- $admin_permissions = array('administer comments');
- foreach (filter_formats() as $format) {
- if ($permission = filter_permission_name($format)) {
- $admin_permissions[] = $permission;
- }
- }
- $this->admin_user = $this->drupalCreateUser($admin_permissions);
- }
-
- /**
- * Test that a user can change their signature format and that it is respected
- * upon display.
- */
- function testUserSignature() {
- // Create a new node with comments on.
- $node = $this->drupalCreateNode(array('comment' => COMMENT_NODE_OPEN));
-
- // Verify that user signature field is not displayed on registration form.
- $this->drupalGet('user/register');
- $this->assertNoText(t('Signature'));
-
- // Log in as a regular user and create a signature.
- $this->drupalLogin($this->web_user);
- $signature_text = "" . $this->randomName() . " ";
- $edit = array(
- 'signature[value]' => $signature_text,
- 'signature[format]' => $this->plain_text_format->format,
- );
- $this->drupalPost('user/' . $this->web_user->uid . '/edit', $edit, t('Save'));
-
- // Verify that values were stored.
- $this->assertFieldByName('signature[value]', $edit['signature[value]'], 'Submitted signature text found.');
- $this->assertFieldByName('signature[format]', $edit['signature[format]'], 'Submitted signature format found.');
-
- // Create a comment.
- $langcode = LANGUAGE_NONE;
- $edit = array();
- $edit['subject'] = $this->randomName(8);
- $edit['comment_body[' . $langcode . '][0][value]'] = $this->randomName(16);
- $this->drupalPost('comment/reply/' . $node->nid, $edit, t('Preview'));
- $this->drupalPost(NULL, array(), t('Save'));
-
- // Get the comment ID. (This technique is the same one used in the Comment
- // module's CommentHelperCase test case.)
- preg_match('/#comment-([0-9]+)/', $this->getURL(), $match);
- $comment_id = $match[1];
-
- // Log in as an administrator and edit the comment to use Full HTML, so
- // that the comment text itself is not filtered at all.
- $this->drupalLogin($this->admin_user);
- $edit['comment_body[' . $langcode . '][0][format]'] = $this->full_html_format->format;
- $this->drupalPost('comment/' . $comment_id . '/edit', $edit, t('Save'));
-
- // Assert that the signature did not make it through unfiltered.
- $this->drupalGet('node/' . $node->nid);
- $this->assertNoRaw($signature_text, 'Unfiltered signature text not found.');
- $this->assertRaw(check_markup($signature_text, $this->plain_text_format->format), 'Filtered signature text found.');
- }
-}
-
-/*
- * Test that a user, having editing their own account, can still log in.
- */
-class UserEditedOwnAccountTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'User edited own account',
- 'description' => 'Test user edited own account can still log in.',
- 'group' => 'User',
- );
- }
-
- function testUserEditedOwnAccount() {
- // Change account setting 'Who can register accounts?' to Administrators
- // only.
- variable_set('user_register', USER_REGISTER_ADMINISTRATORS_ONLY);
-
- // Create a new user account and log in.
- $account = $this->drupalCreateUser(array('change own username'));
- $this->drupalLogin($account);
-
- // Change own username.
- $edit = array();
- $edit['name'] = $this->randomName();
- $this->drupalPost('user/' . $account->uid . '/edit', $edit, t('Save'));
-
- // Log out.
- $this->drupalLogout();
-
- // Set the new name on the user account and attempt to log back in.
- $account->name = $edit['name'];
- $this->drupalLogin($account);
- }
-}
-
-/**
- * Test case to test adding, editing and deleting roles.
- */
-class UserRoleAdminTestCase extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'User role administration',
- 'description' => 'Test adding, editing and deleting user roles and changing role weights.',
- 'group' => 'User',
- );
- }
-
- function setUp() {
- parent::setUp();
- $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'administer users'));
- }
-
- /**
- * Test adding, renaming and deleting roles.
- */
- function testRoleAdministration() {
- $this->drupalLogin($this->admin_user);
-
- // Test adding a role. (In doing so, we use a role name that happens to
- // correspond to an integer, to test that the role administration pages
- // correctly distinguish between role names and IDs.)
- $role_name = '123';
- $edit = array('name' => $role_name);
- $this->drupalPost('admin/people/permissions/roles', $edit, t('Add role'));
- $this->assertText(t('The role has been added.'), 'The role has been added.');
- $role = user_role_load_by_name($role_name);
- $this->assertTrue(is_object($role), 'The role was successfully retrieved from the database.');
-
- // Try adding a duplicate role.
- $this->drupalPost(NULL, $edit, t('Add role'));
- $this->assertRaw(t('The role name %name already exists. Choose another role name.', array('%name' => $role_name)), 'Duplicate role warning displayed.');
-
- // Test renaming a role.
- $old_name = $role_name;
- $role_name = '456';
- $edit = array('name' => $role_name);
- $this->drupalPost("admin/people/permissions/roles/edit/{$role->rid}", $edit, t('Save role'));
- $this->assertText(t('The role has been renamed.'), 'The role has been renamed.');
- $this->assertFalse(user_role_load_by_name($old_name), 'The role can no longer be retrieved from the database using its old name.');
- $this->assertTrue(is_object(user_role_load_by_name($role_name)), 'The role can be retrieved from the database using its new name.');
-
- // Test deleting a role.
- $this->drupalPost("admin/people/permissions/roles/edit/{$role->rid}", NULL, t('Delete role'));
- $this->drupalPost(NULL, NULL, t('Delete'));
- $this->assertText(t('The role has been deleted.'), 'The role has been deleted');
- $this->assertNoLinkByHref("admin/people/permissions/roles/edit/{$role->rid}", 'Role edit link removed.');
- $this->assertFalse(user_role_load_by_name($role_name), 'A deleted role can no longer be loaded.');
-
- // Make sure that the system-defined roles cannot be edited via the user
- // interface.
- $this->drupalGet('admin/people/permissions/roles/edit/' . DRUPAL_ANONYMOUS_RID);
- $this->assertResponse(403, 'Access denied when trying to edit the built-in anonymous role.');
- $this->drupalGet('admin/people/permissions/roles/edit/' . DRUPAL_AUTHENTICATED_RID);
- $this->assertResponse(403, 'Access denied when trying to edit the built-in authenticated role.');
- }
-
- /**
- * Test user role weight change operation.
- */
- function testRoleWeightChange() {
- $this->drupalLogin($this->admin_user);
-
- // Pick up a random role and get its weight.
- $rid = array_rand(user_roles());
- $role = user_role_load($rid);
- $old_weight = $role->weight;
-
- // Change the role weight and submit the form.
- $edit = array('roles['. $rid .'][weight]' => $old_weight + 1);
- $this->drupalPost('admin/people/permissions/roles', $edit, t('Save order'));
- $this->assertText(t('The role settings have been updated.'), 'The role settings form submitted successfully.');
-
- // Retrieve the saved role and compare its weight.
- $role = user_role_load($rid);
- $new_weight = $role->weight;
- $this->assertTrue(($old_weight + 1) == $new_weight, 'Role weight updated successfully.');
- }
-}
-
-/**
- * Test user token replacement in strings.
- */
-class UserTokenReplaceTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User token replacement',
- 'description' => 'Generates text using placeholders for dummy content to check user token replacement.',
- 'group' => 'User',
- );
- }
-
- /**
- * Creates a user, then tests the tokens generated from it.
- */
- function testUserTokenReplacement() {
- global $language;
- $url_options = array(
- 'absolute' => TRUE,
- 'language' => $language,
- );
-
- // Create two users and log them in one after another.
- $user1 = $this->drupalCreateUser(array());
- $user2 = $this->drupalCreateUser(array());
- $this->drupalLogin($user1);
- $this->drupalLogout();
- $this->drupalLogin($user2);
-
- $account = user_load($user1->uid);
- $global_account = user_load($GLOBALS['user']->uid);
-
- // Generate and test sanitized tokens.
- $tests = array();
- $tests['[user:uid]'] = $account->uid;
- $tests['[user:name]'] = check_plain(format_username($account));
- $tests['[user:mail]'] = check_plain($account->mail);
- $tests['[user:url]'] = url("user/$account->uid", $url_options);
- $tests['[user:edit-url]'] = url("user/$account->uid/edit", $url_options);
- $tests['[user:last-login]'] = format_date($account->login, 'medium', '', NULL, $language->language);
- $tests['[user:last-login:short]'] = format_date($account->login, 'short', '', NULL, $language->language);
- $tests['[user:created]'] = format_date($account->created, 'medium', '', NULL, $language->language);
- $tests['[user:created:short]'] = format_date($account->created, 'short', '', NULL, $language->language);
- $tests['[current-user:name]'] = check_plain(format_username($global_account));
-
- // Test to make sure that we generated something for each token.
- $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array('user' => $account), array('language' => $language));
- $this->assertEqual($output, $expected, format_string('Sanitized user token %token replaced.', array('%token' => $input)));
- }
-
- // Generate and test unsanitized tokens.
- $tests['[user:name]'] = format_username($account);
- $tests['[user:mail]'] = $account->mail;
- $tests['[current-user:name]'] = format_username($global_account);
-
- foreach ($tests as $input => $expected) {
- $output = token_replace($input, array('user' => $account), array('language' => $language, 'sanitize' => FALSE));
- $this->assertEqual($output, $expected, format_string('Unsanitized user token %token replaced.', array('%token' => $input)));
- }
- }
-}
-
-/**
- * Test user search.
- */
-class UserUserSearchTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'User search',
- 'description' => 'Tests the user search page and verifies that sensitive information is hidden from unauthorized users.',
- 'group' => 'User',
- );
- }
-
- function testUserSearch() {
- $user1 = $this->drupalCreateUser(array('access user profiles', 'search content', 'use advanced search'));
- $this->drupalLogin($user1);
- $keys = $user1->mail;
- $edit = array('keys' => $keys);
- $this->drupalPost('search/user/', $edit, t('Search'));
- $this->assertNoText($keys);
- $this->drupalLogout();
-
- $user2 = $this->drupalCreateUser(array('administer users', 'access user profiles', 'search content', 'use advanced search'));
- $this->drupalLogin($user2);
- $keys = $user2->mail;
- $edit = array('keys' => $keys);
- $this->drupalPost('search/user/', $edit, t('Search'));
- $this->assertText($keys);
-
- // Create a blocked user.
- $blocked_user = $this->drupalCreateUser();
- $edit = array('status' => 0);
- $blocked_user = user_save($blocked_user, $edit);
-
- // Verify that users with "administer users" permissions can see blocked
- // accounts in search results.
- $edit = array('keys' => $blocked_user->name);
- $this->drupalPost('search/user/', $edit, t('Search'));
- $this->assertText($blocked_user->name, 'Blocked users are listed on the user search results for users with the "administer users" permission.');
-
- // Verify that users without "administer users" permissions do not see
- // blocked accounts in search results.
- $this->drupalLogin($user1);
- $edit = array('keys' => $blocked_user->name);
- $this->drupalPost('search/user/', $edit, t('Search'));
- $this->assertNoText($blocked_user->name, 'Blocked users are hidden from the user search results.');
-
- $this->drupalLogout();
- }
-}
-
-/**
- * Test role assignment.
- */
-class UserRolesAssignmentTestCase extends DrupalWebTestCase {
- protected $admin_user;
-
- public static function getInfo() {
- return array(
- 'name' => 'Role assignment',
- 'description' => 'Tests that users can be assigned and unassigned roles.',
- 'group' => 'User'
- );
- }
-
- function setUp() {
- parent::setUp();
- $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'administer users'));
- $this->drupalLogin($this->admin_user);
- }
-
- /**
- * Tests that a user can be assigned a role and that the role can be removed
- * again.
- */
- function testAssignAndRemoveRole() {
- $rid = $this->drupalCreateRole(array('administer content types'));
- $account = $this->drupalCreateUser();
-
- // Assign the role to the user.
- $this->drupalPost('user/' . $account->uid . '/edit', array("roles[$rid]" => $rid), t('Save'));
- $this->assertText(t('The changes have been saved.'));
- $this->assertFieldChecked('edit-roles-' . $rid, 'Role is assigned.');
- $this->userLoadAndCheckRoleAssigned($account, $rid);
-
- // Remove the role from the user.
- $this->drupalPost('user/' . $account->uid . '/edit', array("roles[$rid]" => FALSE), t('Save'));
- $this->assertText(t('The changes have been saved.'));
- $this->assertNoFieldChecked('edit-roles-' . $rid, 'Role is removed from user.');
- $this->userLoadAndCheckRoleAssigned($account, $rid, FALSE);
- }
-
- /**
- * Tests that when creating a user the role can be assigned. And that it can
- * be removed again.
- */
- function testCreateUserWithRole() {
- $rid = $this->drupalCreateRole(array('administer content types'));
- // Create a new user and add the role at the same time.
- $edit = array(
- 'name' => $this->randomName(),
- 'mail' => $this->randomName() . '@example.com',
- 'pass[pass1]' => $pass = $this->randomString(),
- 'pass[pass2]' => $pass,
- "roles[$rid]" => $rid,
- );
- $this->drupalPost('admin/people/create', $edit, t('Create new account'));
- $this->assertText(t('Created a new user account for !name.', array('!name' => $edit['name'])));
- // Get the newly added user.
- $account = user_load_by_name($edit['name']);
-
- $this->drupalGet('user/' . $account->uid . '/edit');
- $this->assertFieldChecked('edit-roles-' . $rid, 'Role is assigned.');
- $this->userLoadAndCheckRoleAssigned($account, $rid);
-
- // Remove the role again.
- $this->drupalPost('user/' . $account->uid . '/edit', array("roles[$rid]" => FALSE), t('Save'));
- $this->assertText(t('The changes have been saved.'));
- $this->assertNoFieldChecked('edit-roles-' . $rid, 'Role is removed from user.');
- $this->userLoadAndCheckRoleAssigned($account, $rid, FALSE);
- }
-
- /**
- * Check role on user object.
- *
- * @param object $account
- * The user account to check.
- * @param string $rid
- * The role ID to search for.
- * @param bool $is_assigned
- * (optional) Whether to assert that $rid exists (TRUE) or not (FALSE).
- * Defaults to TRUE.
- */
- private function userLoadAndCheckRoleAssigned($account, $rid, $is_assigned = TRUE) {
- $account = user_load($account->uid, TRUE);
- if ($is_assigned) {
- $this->assertTrue(array_key_exists($rid, $account->roles), 'The role is present in the user object.');
- }
- else {
- $this->assertFalse(array_key_exists($rid, $account->roles), 'The role is not present in the user object.');
- }
- }
-}
-
-
-/**
- * Unit test for authmap assignment.
- */
-class UserAuthmapAssignmentTestCase extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'Authmap assignment',
- 'description' => 'Tests that users can be assigned and unassigned authmaps.',
- 'group' => 'User'
- );
- }
-
- /**
- * Test authmap assignment and retrieval.
- */
- function testAuthmapAssignment() {
- $account = $this->drupalCreateUser();
-
- // Assign authmaps to the user.
- $authmaps = array(
- 'authname_poll' => 'external username one',
- 'authname_book' => 'external username two',
- );
- user_set_authmaps($account, $authmaps);
-
- // Test for expected authmaps.
- $expected_authmaps = array(
- 'external username one' => array(
- 'poll' => 'external username one',
- ),
- 'external username two' => array(
- 'book' => 'external username two',
- ),
- );
- foreach ($expected_authmaps as $authname => $expected_output) {
- $this->assertIdentical(user_get_authmaps($authname), $expected_output, format_string('Authmap for authname %authname was set correctly.', array('%authname' => $authname)));
- }
-
- // Remove authmap for module poll, add authmap for module blog.
- $authmaps = array(
- 'authname_poll' => NULL,
- 'authname_blog' => 'external username three',
- );
- user_set_authmaps($account, $authmaps);
-
- // Assert that external username one does not have authmaps.
- $remove_username = 'external username one';
- unset($expected_authmaps[$remove_username]);
- $this->assertFalse(user_get_authmaps($remove_username), format_string('Authmap for %authname was removed.', array('%authname' => $remove_username)));
-
- // Assert that a new authmap was created for external username three, and
- // existing authmaps for external username two were unchanged.
- $expected_authmaps['external username three'] = array('blog' => 'external username three');
- foreach ($expected_authmaps as $authname => $expected_output) {
- $this->assertIdentical(user_get_authmaps($authname), $expected_output, format_string('Authmap for authname %authname was set correctly.', array('%authname' => $authname)));
- }
- }
-}
-
-/**
- * Tests user_validate_current_pass on a custom form.
- */
-class UserValidateCurrentPassCustomForm extends DrupalWebTestCase {
-
- public static function getInfo() {
- return array(
- 'name' => 'User validate current pass custom form',
- 'description' => 'Test that user_validate_current_pass is usable on a custom form.',
- 'group' => 'User',
- );
- }
-
- /**
- * User with permission to view content.
- */
- protected $accessUser;
-
- /**
- * User permission to administer users.
- */
- protected $adminUser;
-
- function setUp() {
- parent::setUp('user_form_test');
- // Create two users
- $this->accessUser = $this->drupalCreateUser(array('access content'));
- $this->adminUser = $this->drupalCreateUser(array('administer users'));
- }
-
- /**
- * Tests that user_validate_current_pass can be reused on a custom form.
- */
- function testUserValidateCurrentPassCustomForm() {
- $this->drupalLogin($this->adminUser);
-
- // Submit the custom form with the admin user using the access user's password.
- $edit = array();
- $edit['user_form_test_field'] = $this->accessUser->name;
- $edit['current_pass'] = $this->accessUser->pass_raw;
- $this->drupalPost('user_form_test_current_password/' . $this->accessUser->uid, $edit, t('Test'));
- $this->assertText(t('The password has been validated and the form submitted successfully.'));
- }
-}
diff --git a/modules/user/user.tokens.inc b/modules/user/user.tokens.inc
deleted file mode 100644
index 8dcea4b..0000000
--- a/modules/user/user.tokens.inc
+++ /dev/null
@@ -1,131 +0,0 @@
- t('Users'),
- 'description' => t('Tokens related to individual user accounts.'),
- 'needs-data' => 'user',
- );
- $types['current-user'] = array(
- 'name' => t('Current user'),
- 'description' => t('Tokens related to the currently logged in user.'),
- 'type' => 'user',
- );
-
- $user['uid'] = array(
- 'name' => t('User ID'),
- 'description' => t("The unique ID of the user account."),
- );
- $user['name'] = array(
- 'name' => t("Name"),
- 'description' => t("The login name of the user account."),
- );
- $user['mail'] = array(
- 'name' => t("Email"),
- 'description' => t("The email address of the user account."),
- );
- $user['url'] = array(
- 'name' => t("URL"),
- 'description' => t("The URL of the account profile page."),
- );
- $user['edit-url'] = array(
- 'name' => t("Edit URL"),
- 'description' => t("The URL of the account edit page."),
- );
-
- $user['last-login'] = array(
- 'name' => t("Last login"),
- 'description' => t("The date the user last logged in to the site."),
- 'type' => 'date',
- );
- $user['created'] = array(
- 'name' => t("Created"),
- 'description' => t("The date the user account was created."),
- 'type' => 'date',
- );
-
- return array(
- 'types' => $types,
- 'tokens' => array('user' => $user),
- );
-}
-
-/**
- * Implements hook_tokens().
- */
-function user_tokens($type, $tokens, array $data = array(), array $options = array()) {
- $url_options = array('absolute' => TRUE);
- if (isset($options['language'])) {
- $url_options['language'] = $options['language'];
- $language_code = $options['language']->language;
- }
- else {
- $language_code = NULL;
- }
- $sanitize = !empty($options['sanitize']);
-
- $replacements = array();
-
- if ($type == 'user' && !empty($data['user'])) {
- $account = $data['user'];
- foreach ($tokens as $name => $original) {
- switch ($name) {
- // Basic user account information.
- case 'uid':
- // In the case of hook user_presave uid is not set yet.
- $replacements[$original] = !empty($account->uid) ? $account->uid : t('not yet assigned');
- break;
-
- case 'name':
- $name = format_username($account);
- $replacements[$original] = $sanitize ? check_plain($name) : $name;
- break;
-
- case 'mail':
- $replacements[$original] = $sanitize ? check_plain($account->mail) : $account->mail;
- break;
-
- case 'url':
- $replacements[$original] = !empty($account->uid) ? url("user/$account->uid", $url_options) : t('not yet assigned');
- break;
-
- case 'edit-url':
- $replacements[$original] = !empty($account->uid) ? url("user/$account->uid/edit", $url_options) : t('not yet assigned');
- break;
-
- // These tokens are default variations on the chained tokens handled below.
- case 'last-login':
- $replacements[$original] = !empty($account->login) ? format_date($account->login, 'medium', '', NULL, $language_code) : t('never');
- break;
-
- case 'created':
- // In the case of user_presave the created date may not yet be set.
- $replacements[$original] = !empty($account->created) ? format_date($account->created, 'medium', '', NULL, $language_code) : t('not yet created');
- break;
- }
- }
-
- if ($login_tokens = token_find_with_prefix($tokens, 'last-login')) {
- $replacements += token_generate('date', $login_tokens, array('date' => $account->login), $options);
- }
-
- if ($registered_tokens = token_find_with_prefix($tokens, 'created')) {
- $replacements += token_generate('date', $registered_tokens, array('date' => $account->created), $options);
- }
- }
-
- if ($type == 'current-user') {
- $account = user_load($GLOBALS['user']->uid);
- $replacements += token_generate('user', $tokens, array('user' => $account), $options);
- }
-
- return $replacements;
-}
diff --git a/profiles/minimal/minimal.info b/profiles/minimal/minimal.info
deleted file mode 100644
index 6ec8f74..0000000
--- a/profiles/minimal/minimal.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Minimal
-description = Start with only a few modules enabled.
-version = VERSION
-core = 7.x
-dependencies[] = block
-dependencies[] = dblog
diff --git a/profiles/minimal/minimal.install b/profiles/minimal/minimal.install
deleted file mode 100644
index 9cf4fa2..0000000
--- a/profiles/minimal/minimal.install
+++ /dev/null
@@ -1,81 +0,0 @@
- 'system',
- 'delta' => 'main',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'content',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'user',
- 'delta' => 'login',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'sidebar_first',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'system',
- 'delta' => 'navigation',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'sidebar_first',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'system',
- 'delta' => 'management',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 1,
- 'region' => 'sidebar_first',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'system',
- 'delta' => 'help',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'help',
- 'pages' => '',
- 'cache' => -1,
- ),
- );
- $query = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'pages', 'cache'));
- foreach ($values as $record) {
- $query->values($record);
- }
- $query->execute();
-
- // Allow visitor account creation, but with administrative approval.
- variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
-
- // Enable default permissions for system roles.
- user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access content'));
- user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access content'));
-}
diff --git a/profiles/minimal/minimal.profile b/profiles/minimal/minimal.profile
deleted file mode 100644
index fe6da8c..0000000
--- a/profiles/minimal/minimal.profile
+++ /dev/null
@@ -1,15 +0,0 @@
- 'filtered_html',
- 'name' => 'Filtered HTML',
- 'weight' => 0,
- 'filters' => array(
- // URL filter.
- 'filter_url' => array(
- 'weight' => 0,
- 'status' => 1,
- ),
- // HTML filter.
- 'filter_html' => array(
- 'weight' => 1,
- 'status' => 1,
- ),
- // Line break filter.
- 'filter_autop' => array(
- 'weight' => 2,
- 'status' => 1,
- ),
- // HTML corrector filter.
- 'filter_htmlcorrector' => array(
- 'weight' => 10,
- 'status' => 1,
- ),
- ),
- );
- $filtered_html_format = (object) $filtered_html_format;
- filter_format_save($filtered_html_format);
-
- $full_html_format = array(
- 'format' => 'full_html',
- 'name' => 'Full HTML',
- 'weight' => 1,
- 'filters' => array(
- // URL filter.
- 'filter_url' => array(
- 'weight' => 0,
- 'status' => 1,
- ),
- // Line break filter.
- 'filter_autop' => array(
- 'weight' => 1,
- 'status' => 1,
- ),
- // HTML corrector filter.
- 'filter_htmlcorrector' => array(
- 'weight' => 10,
- 'status' => 1,
- ),
- ),
- );
- $full_html_format = (object) $full_html_format;
- filter_format_save($full_html_format);
-
- // Enable some standard blocks.
- $default_theme = variable_get('theme_default', 'bartik');
- $admin_theme = 'seven';
- $blocks = array(
- array(
- 'module' => 'system',
- 'delta' => 'main',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'content',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'search',
- 'delta' => 'form',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => -1,
- 'region' => 'sidebar_first',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'node',
- 'delta' => 'recent',
- 'theme' => $admin_theme,
- 'status' => 1,
- 'weight' => 10,
- 'region' => 'dashboard_main',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'user',
- 'delta' => 'login',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'sidebar_first',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'system',
- 'delta' => 'navigation',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'sidebar_first',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'system',
- 'delta' => 'powered-by',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 10,
- 'region' => 'footer',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'system',
- 'delta' => 'help',
- 'theme' => $default_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'help',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'system',
- 'delta' => 'main',
- 'theme' => $admin_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'content',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'system',
- 'delta' => 'help',
- 'theme' => $admin_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'help',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'user',
- 'delta' => 'login',
- 'theme' => $admin_theme,
- 'status' => 1,
- 'weight' => 10,
- 'region' => 'content',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'user',
- 'delta' => 'new',
- 'theme' => $admin_theme,
- 'status' => 1,
- 'weight' => 0,
- 'region' => 'dashboard_sidebar',
- 'pages' => '',
- 'cache' => -1,
- ),
- array(
- 'module' => 'search',
- 'delta' => 'form',
- 'theme' => $admin_theme,
- 'status' => 1,
- 'weight' => -10,
- 'region' => 'dashboard_sidebar',
- 'pages' => '',
- 'cache' => -1,
- ),
- );
- $query = db_insert('block')->fields(array('module', 'delta', 'theme', 'status', 'weight', 'region', 'pages', 'cache'));
- foreach ($blocks as $block) {
- $query->values($block);
- }
- $query->execute();
-
- // Insert default pre-defined node types into the database. For a complete
- // list of available node type attributes, refer to the node type API
- // documentation at: http://api.drupal.org/api/HEAD/function/hook_node_info.
- $types = array(
- array(
- 'type' => 'page',
- 'name' => st('Basic page'),
- 'base' => 'node_content',
- 'description' => st("Use basic pages for your static content, such as an 'About us' page."),
- 'custom' => 1,
- 'modified' => 1,
- 'locked' => 0,
- ),
- array(
- 'type' => 'article',
- 'name' => st('Article'),
- 'base' => 'node_content',
- 'description' => st('Use articles for time-sensitive content like news, press releases or blog posts.'),
- 'custom' => 1,
- 'modified' => 1,
- 'locked' => 0,
- ),
- );
-
- foreach ($types as $type) {
- $type = node_type_set_defaults($type);
- node_type_save($type);
- node_add_body_field($type);
- }
-
- // Insert default pre-defined RDF mapping into the database.
- $rdf_mappings = array(
- array(
- 'type' => 'node',
- 'bundle' => 'page',
- 'mapping' => array(
- 'rdftype' => array('foaf:Document'),
- ),
- ),
- array(
- 'type' => 'node',
- 'bundle' => 'article',
- 'mapping' => array(
- 'field_image' => array(
- 'predicates' => array('og:image', 'rdfs:seeAlso'),
- 'type' => 'rel',
- ),
- 'field_tags' => array(
- 'predicates' => array('dc:subject'),
- 'type' => 'rel',
- ),
- ),
- ),
- );
- foreach ($rdf_mappings as $rdf_mapping) {
- rdf_mapping_save($rdf_mapping);
- }
-
- // Default "Basic page" to not be promoted and have comments disabled.
- variable_set('node_options_page', array('status'));
- variable_set('comment_page', COMMENT_NODE_HIDDEN);
-
- // Don't display date and author information for "Basic page" nodes by default.
- variable_set('node_submitted_page', FALSE);
-
- // Enable user picture support and set the default to a square thumbnail option.
- variable_set('user_pictures', '1');
- variable_set('user_picture_dimensions', '1024x1024');
- variable_set('user_picture_file_size', '800');
- variable_set('user_picture_style', 'thumbnail');
-
- // Allow visitor account creation with administrative approval.
- variable_set('user_register', USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL);
-
- // Create a default vocabulary named "Tags", enabled for the 'article' content type.
- $description = st('Use tags to group articles on similar topics into categories.');
- $vocabulary = (object) array(
- 'name' => st('Tags'),
- 'description' => $description,
- 'machine_name' => 'tags',
- );
- taxonomy_vocabulary_save($vocabulary);
-
- $field = array(
- 'field_name' => 'field_' . $vocabulary->machine_name,
- 'type' => 'taxonomy_term_reference',
- // Set cardinality to unlimited for tagging.
- 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
- 'settings' => array(
- 'allowed_values' => array(
- array(
- 'vocabulary' => $vocabulary->machine_name,
- 'parent' => 0,
- ),
- ),
- ),
- );
- field_create_field($field);
-
- $help = st('Enter a comma-separated list of words to describe your content.');
- $instance = array(
- 'field_name' => 'field_' . $vocabulary->machine_name,
- 'entity_type' => 'node',
- 'label' => 'Tags',
- 'bundle' => 'article',
- 'description' => $help,
- 'widget' => array(
- 'type' => 'taxonomy_autocomplete',
- 'weight' => -4,
- ),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- 'weight' => 10,
- ),
- 'teaser' => array(
- 'type' => 'taxonomy_term_reference_link',
- 'weight' => 10,
- ),
- ),
- );
- field_create_instance($instance);
-
-
- // Create an image field named "Image", enabled for the 'article' content type.
- // Many of the following values will be defaulted, they're included here as an illustrative examples.
- // See http://api.drupal.org/api/function/field_create_field/7
-
- $field = array(
- 'field_name' => 'field_image',
- 'type' => 'image',
- 'cardinality' => 1,
- 'locked' => FALSE,
- 'indexes' => array('fid' => array('fid')),
- 'settings' => array(
- 'uri_scheme' => 'public',
- 'default_image' => FALSE,
- ),
- 'storage' => array(
- 'type' => 'field_sql_storage',
- 'settings' => array(),
- ),
- );
- field_create_field($field);
-
-
- // Many of the following values will be defaulted, they're included here as an illustrative examples.
- // See http://api.drupal.org/api/function/field_create_instance/7
- $instance = array(
- 'field_name' => 'field_image',
- 'entity_type' => 'node',
- 'label' => 'Image',
- 'bundle' => 'article',
- 'description' => st('Upload an image to go with this article.'),
- 'required' => FALSE,
-
- 'settings' => array(
- 'file_directory' => 'field/image',
- 'file_extensions' => 'png gif jpg jpeg',
- 'max_filesize' => '',
- 'max_resolution' => '',
- 'min_resolution' => '',
- 'alt_field' => TRUE,
- 'title_field' => '',
- ),
-
- 'widget' => array(
- 'type' => 'image_image',
- 'settings' => array(
- 'progress_indicator' => 'throbber',
- 'preview_image_style' => 'thumbnail',
- ),
- 'weight' => -1,
- ),
-
- 'display' => array(
- 'default' => array(
- 'label' => 'hidden',
- 'type' => 'image',
- 'settings' => array('image_style' => 'large', 'image_link' => ''),
- 'weight' => -1,
- ),
- 'teaser' => array(
- 'label' => 'hidden',
- 'type' => 'image',
- 'settings' => array('image_style' => 'medium', 'image_link' => 'content'),
- 'weight' => -1,
- ),
- ),
- );
- field_create_instance($instance);
-
- // Enable default permissions for system roles.
- $filtered_html_permission = filter_permission_name($filtered_html_format);
- user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access content', 'access comments', $filtered_html_permission));
- user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access content', 'access comments', 'post comments', 'skip comment approval', $filtered_html_permission));
-
- // Create a default role for site administrators, with all available permissions assigned.
- $admin_role = new stdClass();
- $admin_role->name = 'administrator';
- $admin_role->weight = 2;
- user_role_save($admin_role);
- user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));
- // Set this as the administrator role.
- variable_set('user_admin_role', $admin_role->rid);
-
- // Assign user 1 the "administrator" role.
- db_insert('users_roles')
- ->fields(array('uid' => 1, 'rid' => $admin_role->rid))
- ->execute();
-
- // Create a Home link in the main menu.
- $item = array(
- 'link_title' => st('Home'),
- 'link_path' => '',
- 'menu_name' => 'main-menu',
- );
- menu_link_save($item);
-
- // Update the menu router information.
- menu_rebuild();
-
- // Enable the admin theme.
- db_update('system')
- ->fields(array('status' => 1))
- ->condition('type', 'theme')
- ->condition('name', 'seven')
- ->execute();
- variable_set('admin_theme', 'seven');
- variable_set('node_admin_theme', '1');
-}
diff --git a/profiles/standard/standard.profile b/profiles/standard/standard.profile
deleted file mode 100644
index d554c93..0000000
--- a/profiles/standard/standard.profile
+++ /dev/null
@@ -1,15 +0,0 @@
- 'Installation profile module tests helper',
- 'description' => 'Verifies that tests in installation profile modules are found and may use another profile for running tests.',
- 'group' => 'Installation profile',
- );
- }
-
- function setUp() {
- // Attempt to install a module in Testing profile, while this test runs with
- // a different profile.
- parent::setUp(array('drupal_system_listing_compatible_test'));
- }
-
- /**
- * Non-empty test* method required to executed the test case class.
- */
- function testDrupalSystemListing() {
- $this->pass(__CLASS__ . ' test executed.');
- }
-}
diff --git a/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info b/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info
deleted file mode 100644
index c067987..0000000
--- a/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info
+++ /dev/null
@@ -1,9 +0,0 @@
-name = "Drupal system listing incompatible test"
-description = "Support module for testing the drupal_system_listing function."
-package = Testing
-version = VERSION
-; This deliberately has the wrong core version, to test that it does not take
-; precedence over the version of the same module that is in the
-; modules/simpletest/tests directory.
-core = 6.x
-hidden = TRUE
diff --git a/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module b/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.module
+++ /dev/null
@@ -1 +0,0 @@
-
+
+
+
+
+ WordPress › ReadMe
+
+
+
+
+
+ Version 4.1.1
+
+Semantic Personal Publishing Platform
+
+First Things First
+Welcome. WordPress is a very special project to me. Every developer and contributor adds something unique to the mix, and together we create something beautiful that I’m proud to be a part of. Thousands of hours have gone into WordPress, and we’re dedicated to making it better every day. Thank you for making it part of your world.
+— Matt Mullenweg
+
+Installation: Famous 5-minute install
+
+ Unzip the package in an empty directory and upload everything.
+ Open wp-admin/install.php in your browser. It will take you through the process to set up a wp-config.php
file with your database connection details.
+
+ If for some reason this doesn’t work, don’t worry. It doesn’t work on all web hosts. Open up wp-config-sample.php
with a text editor like WordPad or similar and fill in your database connection details.
+ Save the file as wp-config.php
and upload it.
+ Open wp-admin/install.php in your browser.
+
+
+ Once the configuration file is set up, the installer will set up the tables needed for your blog. If there is an error, double check your wp-config.php
file, and try again. If it fails again, please go to the support forums with as much data as you can gather.
+ If you did not enter a password, note the password given to you. If you did not provide a username, it will be admin
.
+ The installer should then send you to the login page . Sign in with the username and password you chose during the installation. If a password was generated for you, you can then click on “Profile” to change the password.
+
+
+Updating
+Using the Automatic Updater
+If you are updating from version 2.7 or higher, you can use the automatic updater:
+
+ Open wp-admin/update-core.php in your browser and follow the instructions.
+ You wanted more, perhaps? That’s it!
+
+
+Updating Manually
+
+ Before you update anything, make sure you have backup copies of any files you may have modified such as index.php
.
+ Delete your old WordPress files, saving ones you’ve modified.
+ Upload the new files.
+ Point your browser to /wp-admin/upgrade.php .
+
+
+Migrating from other systems
+WordPress can import from a number of systems . First you need to get WordPress installed and working as described above, before using our import tools .
+
+System Requirements
+
+ PHP version 5.2.4 or higher.
+ MySQL version 5.0 or higher.
+
+
+System Recommendations
+
+
+Online Resources
+If you have any questions that aren’t addressed in this document, please take advantage of WordPress’ numerous online resources:
+
+ The WordPress Codex
+ The Codex is the encyclopedia of all things WordPress. It is the most comprehensive source of information for WordPress available.
+ The WordPress Blog
+ This is where you’ll find the latest updates and news related to WordPress. Recent WordPress news appears in your administrative dashboard by default.
+ WordPress Planet
+ The WordPress Planet is a news aggregator that brings together posts from WordPress blogs around the web.
+ WordPress Support Forums
+ If you’ve looked everywhere and still can’t find an answer, the support forums are very active and have a large community ready to help. To help them help you be sure to use a descriptive thread title and describe your question in as much detail as possible.
+ WordPress IRC Channel
+ There is an online chat channel that is used for discussion among people who use WordPress and occasionally support topics. The above wiki page should point you in the right direction. (irc.freenode.net #wordpress )
+
+
+Final Notes
+
+ If you have any suggestions, ideas, or comments, or if you (gasp!) found a bug, join us in the Support Forums .
+ WordPress has a robust plugin API that makes extending the code easy. If you are a developer interested in utilizing this, see the plugin documentation in the Codex . You shouldn’t modify any of the core code.
+
+
+Share the Love
+WordPress has no multi-million dollar marketing campaign or celebrity sponsors, but we do have something even better—you. If you enjoy WordPress please consider telling a friend, setting it up for someone less knowledgable than yourself, or writing the author of a media article that overlooks us.
+
+WordPress is the official continuation of b2/cafélog , which came from Michel V. The work has been continued by the WordPress developers . If you would like to support WordPress, please consider donating .
+
+License
+WordPress is free software, and is released under the terms of the GPL version 2 or (at your option) any later version. See license.txt .
+
+
+
diff --git a/robots.txt b/robots.txt
deleted file mode 100644
index ff9e286..0000000
--- a/robots.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-#
-# robots.txt
-#
-# This file is to prevent the crawling and indexing of certain parts
-# of your site by web crawlers and spiders run by sites like Yahoo!
-# and Google. By telling these "robots" where not to go on your site,
-# you save bandwidth and server resources.
-#
-# This file will be ignored unless it is at the root of your host:
-# Used: http://example.com/robots.txt
-# Ignored: http://example.com/site/robots.txt
-#
-# For more information about the robots.txt standard, see:
-# http://www.robotstxt.org/robotstxt.html
-
-User-agent: *
-Crawl-delay: 10
-# Directories
-Disallow: /includes/
-Disallow: /misc/
-Disallow: /modules/
-Disallow: /profiles/
-Disallow: /scripts/
-Disallow: /themes/
-# Files
-Disallow: /CHANGELOG.txt
-Disallow: /cron.php
-Disallow: /INSTALL.mysql.txt
-Disallow: /INSTALL.pgsql.txt
-Disallow: /INSTALL.sqlite.txt
-Disallow: /install.php
-Disallow: /INSTALL.txt
-Disallow: /LICENSE.txt
-Disallow: /MAINTAINERS.txt
-Disallow: /update.php
-Disallow: /UPGRADE.txt
-Disallow: /xmlrpc.php
-# Paths (clean URLs)
-Disallow: /admin/
-Disallow: /comment/reply/
-Disallow: /filter/tips/
-Disallow: /node/add/
-Disallow: /search/
-Disallow: /user/register/
-Disallow: /user/password/
-Disallow: /user/login/
-Disallow: /user/logout/
-# Paths (no clean URLs)
-Disallow: /?q=admin/
-Disallow: /?q=comment/reply/
-Disallow: /?q=filter/tips/
-Disallow: /?q=node/add/
-Disallow: /?q=search/
-Disallow: /?q=user/password/
-Disallow: /?q=user/register/
-Disallow: /?q=user/login/
-Disallow: /?q=user/logout/
diff --git a/scripts/code-clean.sh b/scripts/code-clean.sh
deleted file mode 100644
index 3338b6a..0000000
--- a/scripts/code-clean.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-find . -name "*~" -type f | xargs rm -f
-find . -name ".#*" -type f | xargs rm -f
-find . -name "*.rej" -type f | xargs rm -f
-find . -name "*.orig" -type f | xargs rm -f
-find . -name "DEADJOE" -type f | xargs rm -f
-find . -type f | grep -v ".psp" | grep -v ".gif" | grep -v ".jpg" | grep -v ".png" | grep -v ".tgz" | grep -v ".ico" | grep -v "druplicon" | xargs perl -wi -pe 's/\s+$/\n/'
-find . -type f | grep -v ".psp" | grep -v ".gif" | grep -v ".jpg" | grep -v ".png" | grep -v ".tgz" | grep -v ".ico" | grep -v "druplicon" | xargs perl -wi -pe 's/\t/ /g'
diff --git a/scripts/cron-curl.sh b/scripts/cron-curl.sh
deleted file mode 100644
index 9b168ab..0000000
--- a/scripts/cron-curl.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-curl --silent --compressed http://example.com/cron.php
diff --git a/scripts/cron-lynx.sh b/scripts/cron-lynx.sh
deleted file mode 100644
index 904667a..0000000
--- a/scripts/cron-lynx.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-/usr/bin/lynx -source http://example.com/cron.php > /dev/null 2>&1
diff --git a/scripts/drupal.sh b/scripts/drupal.sh
deleted file mode 100755
index 76bd750..0000000
--- a/scripts/drupal.sh
+++ /dev/null
@@ -1,144 +0,0 @@
-#!/usr/bin/env php
-"
-Example: {$script} "http://mysite.org/node"
-
-All arguments are long options.
-
- --help This page.
-
- --root Set the working directory for the script to the specified path.
- To execute Drupal this has to be the root directory of your
- Drupal installation, f.e. /home/www/foo/drupal (assuming Drupal
- running on Unix). Current directory is not required.
- Use surrounding quotation marks on Windows.
-
- --verbose This option displays the options as they are set, but will
- produce errors from setting the session.
-
- URI The URI to execute, i.e. http://default/foo/bar for executing
- the path '/foo/bar' in your site 'default'. URI has to be
- enclosed by quotation marks if there are ampersands in it
- (f.e. index.php?q=node&foo=bar). Prefix 'http://' is required,
- and the domain must exist in Drupal's sites-directory.
-
- If the given path and file exists it will be executed directly,
- i.e. if URI is set to http://default/bar/foo.php
- and bar/foo.php exists, this script will be executed without
- bootstrapping Drupal. To execute Drupal's cron.php, specify
- http://default/cron.php as the URI.
-
-
-To run this script without --root argument invoke it from the root directory
-of your Drupal installation with
-
- ./scripts/{$script}
-\n
-EOF;
- exit;
-}
-
-// define default settings
-$cmd = 'index.php';
-$_SERVER['HTTP_HOST'] = 'default';
-$_SERVER['PHP_SELF'] = '/index.php';
-$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
-$_SERVER['SERVER_SOFTWARE'] = NULL;
-$_SERVER['REQUEST_METHOD'] = 'GET';
-$_SERVER['QUERY_STRING'] = '';
-$_SERVER['PHP_SELF'] = $_SERVER['REQUEST_URI'] = '/';
-$_SERVER['HTTP_USER_AGENT'] = 'console';
-
-// toggle verbose mode
-if (in_array('--verbose', $_SERVER['argv'])) {
- $_verbose_mode = true;
-}
-else {
- $_verbose_mode = false;
-}
-
-// parse invocation arguments
-while ($param = array_shift($_SERVER['argv'])) {
- switch ($param) {
- case '--root':
- // change working directory
- $path = array_shift($_SERVER['argv']);
- if (is_dir($path)) {
- chdir($path);
- if ($_verbose_mode) {
- echo "cwd changed to: {$path}\n";
- }
- }
- else {
- echo "\nERROR: {$path} not found.\n\n";
- }
- break;
-
- default:
- if (substr($param, 0, 2) == '--') {
- // ignore unknown options
- break;
- }
- else {
- // parse the URI
- $path = parse_url($param);
-
- // set site name
- if (isset($path['host'])) {
- $_SERVER['HTTP_HOST'] = $path['host'];
- }
-
- // set query string
- if (isset($path['query'])) {
- $_SERVER['QUERY_STRING'] = $path['query'];
- parse_str($path['query'], $_GET);
- $_REQUEST = $_GET;
- }
-
- // set file to execute or Drupal path (clean URLs enabled)
- if (isset($path['path']) && file_exists(substr($path['path'], 1))) {
- $_SERVER['PHP_SELF'] = $_SERVER['REQUEST_URI'] = $path['path'];
- $cmd = substr($path['path'], 1);
- }
- elseif (isset($path['path'])) {
- if (!isset($_GET['q'])) {
- $_REQUEST['q'] = $_GET['q'] = $path['path'];
- }
- }
-
- // display setup in verbose mode
- if ($_verbose_mode) {
- echo "Hostname set to: {$_SERVER['HTTP_HOST']}\n";
- echo "Script name set to: {$cmd}\n";
- echo "Path set to: {$_GET['q']}\n";
- }
- }
- break;
- }
-}
-
-if (file_exists($cmd)) {
- include $cmd;
-}
-else {
- echo "\nERROR: {$cmd} not found.\n\n";
-}
-exit();
diff --git a/scripts/dump-database-d6.sh b/scripts/dump-database-d6.sh
deleted file mode 100644
index 41146b0..0000000
--- a/scripts/dump-database-d6.sh
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env php
- $data) {
- // Remove descriptions to save time and code.
- unset($data['description']);
- foreach ($data['fields'] as &$field) {
- unset($field['description']);
- }
-
- // Dump the table structure.
- $output .= "db_create_table('" . $table . "', " . drupal_var_export($data) . ");\n";
-
- // Don't output values for those tables.
- if (substr($table, 0, 5) == 'cache' || $table == 'sessions' || $table == 'watchdog') {
- $output .= "\n";
- continue;
- }
-
- // Prepare the export of values.
- $result = db_query('SELECT * FROM {'. $table .'}');
- $insert = '';
- while ($record = db_fetch_array($result)) {
- // users.uid is a serial and inserting 0 into a serial can break MySQL.
- // So record uid + 1 instead of uid for every uid and once all records
- // are in place, fix them up.
- if ($table == 'users') {
- $record['uid']++;
- }
- $insert .= '->values('. drupal_var_export($record) .")\n";
- }
-
- // Dump the values if there are some.
- if ($insert) {
- $output .= "db_insert('". $table . "')->fields(". drupal_var_export(array_keys($data['fields'])) .")\n";
- $output .= $insert;
- $output .= "->execute();\n";
- }
-
- // Add the statement fixing the serial in the user table.
- if ($table == 'users') {
- $output .= "db_query('UPDATE {users} SET uid = uid - 1');\n";
- }
-
- $output .= "\n";
-}
-
-print $output;
diff --git a/scripts/dump-database-d7.sh b/scripts/dump-database-d7.sh
deleted file mode 100644
index 7692c40..0000000
--- a/scripts/dump-database-d7.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env php
- $data) {
- // Remove descriptions to save time and code.
- unset($data['description']);
- foreach ($data['fields'] as &$field) {
- unset($field['description']);
- }
-
- // Dump the table structure.
- $output .= "db_create_table('" . $table . "', " . drupal_var_export($data) . ");\n";
-
- // Don't output values for those tables.
- if (substr($table, 0, 5) == 'cache' || $table == 'sessions' || $table == 'watchdog') {
- $output .= "\n";
- continue;
- }
-
- // Prepare the export of values.
- $result = db_query('SELECT * FROM {'. $table .'}', array(), array('fetch' => PDO::FETCH_ASSOC));
- $insert = '';
- foreach ($result as $record) {
- $insert .= '->values('. drupal_var_export($record) .")\n";
- }
-
- // Dump the values if there are some.
- if ($insert) {
- $output .= "db_insert('". $table . "')->fields(". drupal_var_export(array_keys($data['fields'])) .")\n";
- $output .= $insert;
- $output .= "->execute();\n";
- }
-
- $output .= "\n";
-}
-
-print $output;
diff --git a/scripts/generate-d6-content.sh b/scripts/generate-d6-content.sh
deleted file mode 100644
index fc4c68f..0000000
--- a/scripts/generate-d6-content.sh
+++ /dev/null
@@ -1,206 +0,0 @@
-#!/usr/bin/env php
- 11 ? array('page' => TRUE) : array();
- $vocabulary['multiple'] = $multiple[$i % 12];
- $vocabulary['required'] = $required[$i % 12];
- $vocabulary['relations'] = 1;
- $vocabulary['hierarchy'] = $hierarchy[$i % 12];
- $vocabulary['weight'] = $i;
- taxonomy_save_vocabulary($vocabulary);
- $parents = array();
- // Vocabularies without hierarchy get one term, single parent vocabularies get
- // one parent and one child term. Multiple parent vocabularies get three
- // terms: t0, t1, t2 where t0 is a parent of both t1 and t2.
- for ($j = 0; $j < $vocabulary['hierarchy'] + 1; $j++) {
- $term = array();
- $term['vid'] = $vocabulary['vid'];
- // For multiple parent vocabularies, omit the t0-t1 relation, otherwise
- // every parent in the vocabulary is a parent.
- $term['parent'] = $vocabulary['hierarchy'] == 2 && i == 1 ? array() : $parents;
- ++$term_id;
- $term['name'] = "term $term_id of vocabulary $voc_id (j=$j)";
- $term['description'] = 'description of ' . $term['name'];
- $term['weight'] = $i * 3 + $j;
- taxonomy_save_term($term);
- $terms[] = $term['tid'];
- $parents[] = $term['tid'];
- }
-}
-
-$node_id = 0;
-$revision_id = 0;
-module_load_include('inc', 'node', 'node.pages');
-for ($i = 0; $i < 24; $i++) {
- $uid = intval($i / 8) + 3;
- $user = user_load($uid);
- $node = new stdClass();
- $node->uid = $uid;
- $node->type = $i < 12 ? 'page' : 'story';
- $node->sticky = 0;
- ++$node_id;
- ++$revision_id;
- $node->title = "node title $node_id rev $revision_id (i=$i)";
- $type = node_get_types('type', $node->type);
- if ($type->has_body) {
- $node->body = str_repeat("node body ($node->type) - $i", 100);
- $node->teaser = node_teaser($node->body);
- $node->filter = variable_get('filter_default_format', 1);
- $node->format = FILTER_FORMAT_DEFAULT;
- }
- $node->status = intval($i / 4) % 2;
- $node->language = '';
- $node->revision = $i < 12;
- $node->promote = $i % 2;
- $node->created = $now + $i * 86400;
- $node->log = "added $i node";
- // Make every term association different a little. For nodes with revisions,
- // make the initial revision have a different set of terms than the
- // newest revision.
- $node_terms = $terms;
- unset($node_terms[$i], $node_terms[47 - $i]);
- if ($node->revision) {
- $node->taxonomy = array($i => $terms[$i], 47-$i => $terms[47 - $i]);
- }
- else {
- $node->taxonomy = $node_terms;
- }
- node_save($node);
- path_set_alias("node/$node->nid", "content/$node->created");
- if ($node->revision) {
- $user = user_load($uid + 3);
- ++$revision_id;
- $node->title .= " rev2 $revision_id";
- $node->body = str_repeat("node revision body ($node->type) - $i", 100);
- $node->log = "added $i revision";
- $node->taxonomy = $node_terms;
- node_save($node);
- }
-}
-
-// Create poll content
-for ($i = 0; $i < 12; $i++) {
- $uid = intval($i / 4) + 3;
- $user = user_load($uid);
- $node = new stdClass();
- $node->uid = $uid;
- $node->type = 'poll';
- $node->sticky = 0;
- $node->title = "poll title $i";
- $type = node_get_types('type', $node->type);
- if ($type->has_body) {
- $node->body = str_repeat("node body ($node->type) - $i", 100);
- $node->teaser = node_teaser($node->body);
- $node->filter = variable_get('filter_default_format', 1);
- $node->format = FILTER_FORMAT_DEFAULT;
- }
- $node->status = intval($i / 2) % 2;
- $node->language = '';
- $node->revision = 1;
- $node->promote = $i % 2;
- $node->created = $now + $i * 43200;
- $node->log = "added $i poll";
-
- $nbchoices = ($i % 4) + 2;
- for ($c = 0; $c < $nbchoices; $c++) {
- $node->choice[] = array('chtext' => "Choice $c for poll $i");
- }
- node_save($node);
- path_set_alias("node/$node->nid", "content/poll/$i");
- path_set_alias("node/$node->nid/results", "content/poll/$i/results");
-
- // Add some votes
- for ($v = 0; $v < ($i % 4) + 5; $v++) {
- $c = $v % $nbchoices;
- $form_state = array();
- $form_state['values']['choice'] = $c;
- $form_state['values']['op'] = t('Vote');
- drupal_execute('poll_view_voting', $form_state, $node);
- }
-}
-
-$uid = 6;
-$user = user_load($uid);
-$node = new stdClass();
-$node->uid = $uid;
-$node->type = 'broken';
-$node->sticky = 0;
-$node->title = "node title 24";
-$node->body = str_repeat("node body ($node->type) - 37", 100);
-$node->teaser = node_teaser($node->body);
-$node->filter = variable_get('filter_default_format', 1);
-$node->format = FILTER_FORMAT_DEFAULT;
-$node->status = 1;
-$node->language = '';
-$node->revision = 0;
-$node->promote = 0;
-$node->created = 1263769200;
-$node->log = "added $i node";
-node_save($node);
-path_set_alias("node/$node->nid", "content/1263769200");
diff --git a/scripts/generate-d7-content.sh b/scripts/generate-d7-content.sh
deleted file mode 100644
index 1e1d13f..0000000
--- a/scripts/generate-d7-content.sh
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/usr/bin/env php
-fields(array('uid', 'name', 'pass', 'mail', 'status', 'created', 'access'));
-for ($i = 0; $i < 6; $i++) {
- $name = "test user $i";
- $pass = md5("test PassW0rd $i !(.)");
- $mail = "test$i@example.com";
- $now = mktime(0, 0, 0, 1, $i + 1, 2010);
- $query->values(array(db_next_id(), $name, user_hash_password($pass), $mail, 1, $now, $now));
-}
-$query->execute();
-
-// Create vocabularies and terms.
-
-if (module_exists('taxonomy')) {
- $terms = array();
-
- // All possible combinations of these vocabulary properties.
- $hierarchy = array(0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2);
- $multiple = array(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1);
- $required = array(0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1);
-
- $voc_id = 0;
- $term_id = 0;
- for ($i = 0; $i < 24; $i++) {
- $vocabulary = new stdClass;
- ++$voc_id;
- $vocabulary->name = "vocabulary $voc_id (i=$i)";
- $vocabulary->machine_name = 'vocabulary_' . $voc_id . '_' . $i;
- $vocabulary->description = "description of ". $vocabulary->name;
- $vocabulary->multiple = $multiple[$i % 12];
- $vocabulary->required = $required[$i % 12];
- $vocabulary->relations = 1;
- $vocabulary->hierarchy = $hierarchy[$i % 12];
- $vocabulary->weight = $i;
- taxonomy_vocabulary_save($vocabulary);
- $field = array(
- 'field_name' => 'taxonomy_'. $vocabulary->machine_name,
- 'module' => 'taxonomy',
- 'type' => 'taxonomy_term_reference',
- 'cardinality' => $vocabulary->multiple || $vocabulary->tags ? FIELD_CARDINALITY_UNLIMITED : 1,
- 'settings' => array(
- 'required' => $vocabulary->required ? TRUE : FALSE,
- 'allowed_values' => array(
- array(
- 'vocabulary' => $vocabulary->machine_name,
- 'parent' => 0,
- ),
- ),
- ),
- );
- field_create_field($field);
- $node_types = $i > 11 ? array('page') : array_keys(node_type_get_types());
- foreach ($node_types as $bundle) {
- $instance = array(
- 'label' => $vocabulary->name,
- 'field_name' => $field['field_name'],
- 'bundle' => $bundle,
- 'entity_type' => 'node',
- 'settings' => array(),
- 'description' => $vocabulary->help,
- 'required' => $vocabulary->required,
- 'widget' => array(),
- 'display' => array(
- 'default' => array(
- 'type' => 'taxonomy_term_reference_link',
- 'weight' => 10,
- ),
- 'teaser' => array(
- 'type' => 'taxonomy_term_reference_link',
- 'weight' => 10,
- ),
- ),
- );
- if ($vocabulary->tags) {
- $instance['widget'] = array(
- 'type' => 'taxonomy_autocomplete',
- 'module' => 'taxonomy',
- 'settings' => array(
- 'size' => 60,
- 'autocomplete_path' => 'taxonomy/autocomplete',
- ),
- );
- }
- else {
- $instance['widget'] = array(
- 'type' => 'options_select',
- 'settings' => array(),
- );
- }
- field_create_instance($instance);
- }
- $parents = array();
- // Vocabularies without hierarchy get one term; single parent vocabularies
- // get one parent and one child term. Multiple parent vocabularies get
- // three terms: t0, t1, t2 where t0 is a parent of both t1 and t2.
- for ($j = 0; $j < $vocabulary->hierarchy + 1; $j++) {
- $term = new stdClass;
- $term->vocabulary_machine_name = $vocabulary->machine_name;
- // For multiple parent vocabularies, omit the t0-t1 relation, otherwise
- // every parent in the vocabulary is a parent.
- $term->parent = $vocabulary->hierarchy == 2 && i == 1 ? array() : $parents;
- ++$term_id;
- $term->name = "term $term_id of vocabulary $voc_id (j=$j)";
- $term->description = 'description of ' . $term->name;
- $term->format = 'filtered_html';
- $term->weight = $i * 3 + $j;
- taxonomy_term_save($term);
- $terms[] = $term->tid;
- $term_vocabs[$term->tid] = 'taxonomy_' . $vocabulary->machine_name;
- $parents[] = $term->tid;
- }
- }
-}
-
-$node_id = 0;
-$revision_id = 0;
-module_load_include('inc', 'node', 'node.pages');
-for ($i = 0; $i < 24; $i++) {
- $uid = intval($i / 8) + 3;
- $user = user_load($uid);
- $node = new stdClass();
- $node->uid = $uid;
- $node->type = $i < 12 ? 'page' : 'story';
- $node->sticky = 0;
- ++$node_id;
- ++$revision_id;
- $node->title = "node title $node_id rev $revision_id (i=$i)";
- $node->language = LANGUAGE_NONE;
- $body_text = str_repeat("node body ($node->type) - $i", 100);
- $node->body[$node->language][0]['value'] = $body_text;
- $node->body[$node->language][0]['summary'] = text_summary($body_text);
- $node->body[$node->language][0]['format'] = 'filtered_html';
- $node->status = intval($i / 4) % 2;
- $node->revision = $i < 12;
- $node->promote = $i % 2;
- $node->created = $now + $i * 86400;
- $node->log = "added $i node";
- // Make every term association different a little. For nodes with revisions,
- // make the initial revision have a different set of terms than the
- // newest revision.
- $items = array();
- if (module_exists('taxonomy')) {
- if ($node->revision) {
- $node_terms = array($terms[$i], $terms[47-$i]);
- }
- else {
- $node_terms = $terms;
- unset($node_terms[$i], $node_terms[47 - $i]);
- }
- foreach ($node_terms as $tid) {
- $field_name = $term_vocabs[$tid];
- $node->{$field_name}[LANGUAGE_NONE][] = array('tid' => $tid);
- }
- }
- $node->path = array('alias' => "content/$node->created");
- node_save($node);
- if ($node->revision) {
- $user = user_load($uid + 3);
- ++$revision_id;
- $node->title .= " rev2 $revision_id";
- $body_text = str_repeat("node revision body ($node->type) - $i", 100);
- $node->body[$node->language][0]['value'] = $body_text;
- $node->body[$node->language][0]['summary'] = text_summary($body_text);
- $node->body[$node->language][0]['format'] = 'filtered_html';
- $node->log = "added $i revision";
- $node_terms = $terms;
- unset($node_terms[$i], $node_terms[47 - $i]);
- foreach ($node_terms as $tid) {
- $field_name = $term_vocabs[$tid];
- $node->{$field_name}[LANGUAGE_NONE][] = array('tid' => $tid);
- }
- node_save($node);
- }
-}
-
-if (module_exists('poll')) {
- // Create poll content.
- for ($i = 0; $i < 12; $i++) {
- $uid = intval($i / 4) + 3;
- $user = user_load($uid);
- $node = new stdClass();
- $node->uid = $uid;
- $node->type = 'poll';
- $node->sticky = 0;
- $node->title = "poll title $i";
- $node->language = LANGUAGE_NONE;
- $node->status = intval($i / 2) % 2;
- $node->revision = 1;
- $node->promote = $i % 2;
- $node->created = REQUEST_TIME + $i * 43200;
- $node->runtime = 0;
- $node->active = 1;
- $node->log = "added $i poll";
- $node->path = array('alias' => "content/poll/$i");
-
- $nbchoices = ($i % 4) + 2;
- for ($c = 0; $c < $nbchoices; $c++) {
- $node->choice[] = array('chtext' => "Choice $c for poll $i", 'chvotes' => 0, 'weight' => 0);
- }
- node_save($node);
- $path = array(
- 'alias' => "content/poll/$i/results",
- 'source' => "node/$node->nid/results",
- );
- path_save($path);
-
- // Add some votes.
- $node = node_load($node->nid);
- $choices = array_keys($node->choice);
- $original_user = $GLOBALS['user'];
- for ($v = 0; $v < ($i % 4); $v++) {
- drupal_static_reset('ip_address');
- $_SERVER['REMOTE_ADDR'] = "127.0.$v.1";
- $GLOBALS['user'] = drupal_anonymous_user();// We should have already allowed anon to vote.
- $c = $v % $nbchoices;
- $form_state = array();
- $form_state['values']['choice'] = $choices[$c];
- $form_state['values']['op'] = t('Vote');
- drupal_form_submit('poll_view_voting', $form_state, $node);
- }
- }
-}
-
-// Test that upgrade works even on a bundle whose parent module was disabled.
-// This is simulated by creating an existing content type and changing the
-// bundle to another type through direct database update queries.
-$node_type = 'broken';
-$uid = 6;
-$user = user_load($uid);
-$node = new stdClass();
-$node->uid = $uid;
-$node->type = 'article';
-$body_text = str_repeat("node body ($node_type) - 37", 100);
-$node->sticky = 0;
-$node->title = "node title 24";
-$node->language = LANGUAGE_NONE;
-$node->body[$node->language][0]['value'] = $body_text;
-$node->body[$node->language][0]['summary'] = text_summary($body_text);
-$node->body[$node->language][0]['format'] = 'filtered_html';
-$node->status = 1;
-$node->revision = 0;
-$node->promote = 0;
-$node->created = 1263769200;
-$node->log = "added a broken node";
-$node->path = array('alias' => "content/1263769200");
-node_save($node);
-db_update('node')
- ->fields(array(
- 'type' => $node_type,
- ))
- ->condition('nid', $node->nid)
- ->execute();
-if (db_table_exists('field_data_body')) {
- db_update('field_data_body')
- ->fields(array(
- 'bundle' => $node_type,
- ))
- ->condition('entity_id', $node->nid)
- ->condition('entity_type', 'node')
- ->execute();
- db_update('field_revision_body')
- ->fields(array(
- 'bundle' => $node_type,
- ))
- ->condition('entity_id', $node->nid)
- ->condition('entity_type', 'node')
- ->execute();
-}
-db_update('field_config_instance')
- ->fields(array(
- 'bundle' => $node_type,
- ))
- ->condition('bundle', 'article')
- ->execute();
diff --git a/scripts/password-hash.sh b/scripts/password-hash.sh
deleted file mode 100755
index 004421a..0000000
--- a/scripts/password-hash.sh
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/php
-"
-Example: {$script} "mynewpassword"
-
-All arguments are long options.
-
- --help Print this page.
-
- --root
-
- Set the working directory for the script to the specified path.
- To execute this script this has to be the root directory of your
- Drupal installation, e.g. /home/www/foo/drupal (assuming Drupal
- running on Unix). Use surrounding quotation marks on Windows.
-
- "" ["" ["" ...]]
-
- One or more plan-text passwords enclosed by double quotes. The
- output hash may be manually entered into the {users}.pass field to
- change a password via SQL to a known value.
-
-To run this script without the --root argument invoke it from the root directory
-of your Drupal installation as
-
- ./scripts/{$script}
-\n
-EOF;
- exit;
-}
-
-$passwords = array();
-
-// Parse invocation arguments.
-while ($param = array_shift($_SERVER['argv'])) {
- switch ($param) {
- case '--root':
- // Change the working directory.
- $path = array_shift($_SERVER['argv']);
- if (is_dir($path)) {
- chdir($path);
- }
- break;
- default:
- // Add a password to the list to be processed.
- $passwords[] = $param;
- break;
- }
-}
-
-define('DRUPAL_ROOT', getcwd());
-
-include_once DRUPAL_ROOT . '/includes/password.inc';
-include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
-
-foreach ($passwords as $password) {
- print("\npassword: $password \t\thash: ". user_hash_password($password) ."\n");
-}
-print("\n");
-
diff --git a/scripts/run-tests.sh b/scripts/run-tests.sh
deleted file mode 100755
index 9078168..0000000
--- a/scripts/run-tests.sh
+++ /dev/null
@@ -1,724 +0,0 @@
- $tests) {
- $all_tests = array_merge($all_tests, array_keys($tests));
-}
-$test_list = array();
-
-if ($args['list']) {
- // Display all available tests.
- echo "\nAvailable test groups & classes\n";
- echo "-------------------------------\n\n";
- foreach ($groups as $group => $tests) {
- echo $group . "\n";
- foreach ($tests as $class => $info) {
- echo " - " . $info['name'] . ' (' . $class . ')' . "\n";
- }
- }
- exit;
-}
-
-$test_list = simpletest_script_get_test_list();
-
-// Try to allocate unlimited time to run the tests.
-drupal_set_time_limit(0);
-
-simpletest_script_reporter_init();
-
-// Setup database for test results.
-$test_id = db_insert('simpletest_test_id')->useDefaults(array('test_id'))->execute();
-
-// Execute tests.
-simpletest_script_execute_batch($test_id, simpletest_script_get_test_list());
-
-// Retrieve the last database prefix used for testing and the last test class
-// that was run from. Use the information to read the lgo file in case any
-// fatal errors caused the test to crash.
-list($last_prefix, $last_test_class) = simpletest_last_test_get($test_id);
-simpletest_log_read($test_id, $last_prefix, $last_test_class);
-
-// Stop the timer.
-simpletest_script_reporter_timer_stop();
-
-// Display results before database is cleared.
-simpletest_script_reporter_display_results();
-
-if ($args['xml']) {
- simpletest_script_reporter_write_xml_results();
-}
-
-// Cleanup our test results.
-simpletest_clean_results_table($test_id);
-
-// Test complete, exit.
-exit;
-
-/**
- * Print help text.
- */
-function simpletest_script_help() {
- global $args;
-
- echo <<
-Example: {$args['script']} Profile
-
-All arguments are long options.
-
- --help Print this page.
-
- --list Display all available test groups.
-
- --clean Cleans up database tables or directories from previous, failed,
- tests and then exits (no tests are run).
-
- --url Immediately precedes a URL to set the host and path. You will
- need this parameter if Drupal is in a subdirectory on your
- localhost and you have not set \$base_url in settings.php. Tests
- can be run under SSL by including https:// in the URL.
-
- --php The absolute path to the PHP executable. Usually not needed.
-
- --concurrency [num]
-
- Run tests in parallel, up to [num] tests at a time.
-
- --all Run all available tests.
-
- --class Run tests identified by specific class names, instead of group names.
-
- --file Run tests identified by specific file names, instead of group names.
- Specify the path and the extension (i.e. 'modules/user/user.test').
-
- --xml
-
- If provided, test results will be written as xml files to this path.
-
- --color Output text format results with color highlighting.
-
- --verbose Output detailed assertion messages in addition to summary.
-
- [,[, ...]]
-
- One or more tests to be run. By default, these are interpreted
- as the names of test groups as shown at
- ?q=admin/config/development/testing.
- These group names typically correspond to module names like "User"
- or "Profile" or "System", but there is also a group "XML-RPC".
- If --class is specified then these are interpreted as the names of
- specific test classes whose test methods will be run. Tests must
- be separated by commas. Ignored if --all is specified.
-
-To run this script you will normally invoke it from the root directory of your
-Drupal installation as the webserver user (differs per configuration), or root:
-
-sudo -u [wwwrun|www-data|etc] php ./scripts/{$args['script']}
- --url http://example.com/ --all
-sudo -u [wwwrun|www-data|etc] php ./scripts/{$args['script']}
- --url http://example.com/ --class BlockTestCase
-\n
-EOF;
-}
-
-/**
- * Parse execution argument and ensure that all are valid.
- *
- * @return The list of arguments.
- */
-function simpletest_script_parse_args() {
- // Set default values.
- $args = array(
- 'script' => '',
- 'help' => FALSE,
- 'list' => FALSE,
- 'clean' => FALSE,
- 'url' => '',
- 'php' => '',
- 'concurrency' => 1,
- 'all' => FALSE,
- 'class' => FALSE,
- 'file' => FALSE,
- 'color' => FALSE,
- 'verbose' => FALSE,
- 'test_names' => array(),
- // Used internally.
- 'test-id' => 0,
- 'execute-test' => '',
- 'xml' => '',
- );
-
- // Override with set values.
- $args['script'] = basename(array_shift($_SERVER['argv']));
-
- $count = 0;
- while ($arg = array_shift($_SERVER['argv'])) {
- if (preg_match('/--(\S+)/', $arg, $matches)) {
- // Argument found.
- if (array_key_exists($matches[1], $args)) {
- // Argument found in list.
- $previous_arg = $matches[1];
- if (is_bool($args[$previous_arg])) {
- $args[$matches[1]] = TRUE;
- }
- else {
- $args[$matches[1]] = array_shift($_SERVER['argv']);
- }
- // Clear extraneous values.
- $args['test_names'] = array();
- $count++;
- }
- else {
- // Argument not found in list.
- simpletest_script_print_error("Unknown argument '$arg'.");
- exit;
- }
- }
- else {
- // Values found without an argument should be test names.
- $args['test_names'] += explode(',', $arg);
- $count++;
- }
- }
-
- // Validate the concurrency argument
- if (!is_numeric($args['concurrency']) || $args['concurrency'] <= 0) {
- simpletest_script_print_error("--concurrency must be a strictly positive integer.");
- exit;
- }
-
- return array($args, $count);
-}
-
-/**
- * Initialize script variables and perform general setup requirements.
- */
-function simpletest_script_init($server_software) {
- global $args, $php;
-
- $host = 'localhost';
- $path = '';
- // Determine location of php command automatically, unless a command line argument is supplied.
- if (!empty($args['php'])) {
- $php = $args['php'];
- }
- elseif ($php_env = getenv('_')) {
- // '_' is an environment variable set by the shell. It contains the command that was executed.
- $php = $php_env;
- }
- elseif ($sudo = getenv('SUDO_COMMAND')) {
- // 'SUDO_COMMAND' is an environment variable set by the sudo program.
- // Extract only the PHP interpreter, not the rest of the command.
- list($php, ) = explode(' ', $sudo, 2);
- }
- else {
- simpletest_script_print_error('Unable to automatically determine the path to the PHP interpreter. Supply the --php command line argument.');
- simpletest_script_help();
- exit();
- }
-
- // Get URL from arguments.
- if (!empty($args['url'])) {
- $parsed_url = parse_url($args['url']);
- $host = $parsed_url['host'] . (isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '');
- $path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
-
- // If the passed URL schema is 'https' then setup the $_SERVER variables
- // properly so that testing will run under HTTPS.
- if ($parsed_url['scheme'] == 'https') {
- $_SERVER['HTTPS'] = 'on';
- }
- }
-
- $_SERVER['HTTP_HOST'] = $host;
- $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
- $_SERVER['SERVER_ADDR'] = '127.0.0.1';
- $_SERVER['SERVER_SOFTWARE'] = $server_software;
- $_SERVER['SERVER_NAME'] = 'localhost';
- $_SERVER['REQUEST_URI'] = $path .'/';
- $_SERVER['REQUEST_METHOD'] = 'GET';
- $_SERVER['SCRIPT_NAME'] = $path .'/index.php';
- $_SERVER['PHP_SELF'] = $path .'/index.php';
- $_SERVER['HTTP_USER_AGENT'] = 'Drupal command line';
-
- if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
- // Ensure that any and all environment variables are changed to https://.
- foreach ($_SERVER as $key => $value) {
- $_SERVER[$key] = str_replace('http://', 'https://', $_SERVER[$key]);
- }
- }
-
- chdir(realpath(dirname(__FILE__) . '/..'));
- define('DRUPAL_ROOT', getcwd());
- require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
-}
-
-/**
- * Execute a batch of tests.
- */
-function simpletest_script_execute_batch($test_id, $test_classes) {
- global $args;
-
- // Multi-process execution.
- $children = array();
- while (!empty($test_classes) || !empty($children)) {
- while (count($children) < $args['concurrency']) {
- if (empty($test_classes)) {
- break;
- }
-
- // Fork a child process.
- $test_class = array_shift($test_classes);
- $command = simpletest_script_command($test_id, $test_class);
- $process = proc_open($command, array(), $pipes, NULL, NULL, array('bypass_shell' => TRUE));
-
- if (!is_resource($process)) {
- echo "Unable to fork test process. Aborting.\n";
- exit;
- }
-
- // Register our new child.
- $children[] = array(
- 'process' => $process,
- 'class' => $test_class,
- 'pipes' => $pipes,
- );
- }
-
- // Wait for children every 200ms.
- usleep(200000);
-
- // Check if some children finished.
- foreach ($children as $cid => $child) {
- $status = proc_get_status($child['process']);
- if (empty($status['running'])) {
- // The child exited, unregister it.
- proc_close($child['process']);
- if ($status['exitcode']) {
- echo 'FATAL ' . $test_class . ': test runner returned a non-zero error code (' . $status['exitcode'] . ').' . "\n";
- }
- unset($children[$cid]);
- }
- }
- }
-}
-
-/**
- * Bootstrap Drupal and run a single test.
- */
-function simpletest_script_run_one_test($test_id, $test_class) {
- try {
- // Bootstrap Drupal.
- drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
-
- simpletest_classloader_register();
-
- $test = new $test_class($test_id);
- $test->run();
- $info = $test->getInfo();
-
- $had_fails = (isset($test->results['#fail']) && $test->results['#fail'] > 0);
- $had_exceptions = (isset($test->results['#exception']) && $test->results['#exception'] > 0);
- $status = ($had_fails || $had_exceptions ? 'fail' : 'pass');
- simpletest_script_print($info['name'] . ' ' . _simpletest_format_summary_line($test->results) . "\n", simpletest_script_color_code($status));
-
- // Finished, kill this runner.
- exit(0);
- }
- catch (Exception $e) {
- echo (string) $e;
- exit(1);
- }
-}
-
-/**
- * Return a command used to run a test in a separate process.
- *
- * @param $test_id
- * The current test ID.
- * @param $test_class
- * The name of the test class to run.
- */
-function simpletest_script_command($test_id, $test_class) {
- global $args, $php;
-
- $command = escapeshellarg($php) . ' ' . escapeshellarg('./scripts/' . $args['script']) . ' --url ' . escapeshellarg($args['url']);
- if ($args['color']) {
- $command .= ' --color';
- }
- $command .= " --php " . escapeshellarg($php) . " --test-id $test_id --execute-test " . escapeshellarg($test_class);
- return $command;
-}
-
-/**
- * Get list of tests based on arguments. If --all specified then
- * returns all available tests, otherwise reads list of tests.
- *
- * Will print error and exit if no valid tests were found.
- *
- * @return List of tests.
- */
-function simpletest_script_get_test_list() {
- global $args, $all_tests, $groups;
-
- $test_list = array();
- if ($args['all']) {
- $test_list = $all_tests;
- }
- else {
- if ($args['class']) {
- // Check for valid class names.
- $test_list = array();
- foreach ($args['test_names'] as $test_class) {
- if (class_exists($test_class)) {
- $test_list[] = $test_class;
- }
- else {
- $groups = simpletest_test_get_all();
- $all_classes = array();
- foreach ($groups as $group) {
- $all_classes = array_merge($all_classes, array_keys($group));
- }
- simpletest_script_print_error('Test class not found: ' . $test_class);
- simpletest_script_print_alternatives($test_class, $all_classes, 6);
- exit(1);
- }
- }
- }
- elseif ($args['file']) {
- $files = array();
- foreach ($args['test_names'] as $file) {
- $files[drupal_realpath($file)] = 1;
- }
-
- // Check for valid class names.
- foreach ($all_tests as $class_name) {
- $refclass = new ReflectionClass($class_name);
- $file = $refclass->getFileName();
- if (isset($files[$file])) {
- $test_list[] = $class_name;
- }
- }
- }
- else {
- // Check for valid group names and get all valid classes in group.
- foreach ($args['test_names'] as $group_name) {
- if (isset($groups[$group_name])) {
- $test_list = array_merge($test_list, array_keys($groups[$group_name]));
- }
- else {
- simpletest_script_print_error('Test group not found: ' . $group_name);
- simpletest_script_print_alternatives($group_name, array_keys($groups));
- exit(1);
- }
- }
- }
- }
-
- if (empty($test_list)) {
- simpletest_script_print_error('No valid tests were specified.');
- exit;
- }
- return $test_list;
-}
-
-/**
- * Initialize the reporter.
- */
-function simpletest_script_reporter_init() {
- global $args, $all_tests, $test_list, $results_map;
-
- $results_map = array(
- 'pass' => 'Pass',
- 'fail' => 'Fail',
- 'exception' => 'Exception'
- );
-
- echo "\n";
- echo "Drupal test run\n";
- echo "---------------\n";
- echo "\n";
-
- // Tell the user about what tests are to be run.
- if ($args['all']) {
- echo "All tests will run.\n\n";
- }
- else {
- echo "Tests to be run:\n";
- foreach ($test_list as $class_name) {
- $info = call_user_func(array($class_name, 'getInfo'));
- echo " - " . $info['name'] . ' (' . $class_name . ')' . "\n";
- }
- echo "\n";
- }
-
- echo "Test run started:\n";
- echo " " . format_date($_SERVER['REQUEST_TIME'], 'long') . "\n";
- timer_start('run-tests');
- echo "\n";
-
- echo "Test summary\n";
- echo "------------\n";
- echo "\n";
-}
-
-/**
- * Display jUnit XML test results.
- */
-function simpletest_script_reporter_write_xml_results() {
- global $args, $test_id, $results_map;
-
- $results = db_query("SELECT * FROM {simpletest} WHERE test_id = :test_id ORDER BY test_class, message_id", array(':test_id' => $test_id));
-
- $test_class = '';
- $xml_files = array();
-
- foreach ($results as $result) {
- if (isset($results_map[$result->status])) {
- if ($result->test_class != $test_class) {
- // We've moved onto a new class, so write the last classes results to a file:
- if (isset($xml_files[$test_class])) {
- file_put_contents($args['xml'] . '/' . $test_class . '.xml', $xml_files[$test_class]['doc']->saveXML());
- unset($xml_files[$test_class]);
- }
- $test_class = $result->test_class;
- if (!isset($xml_files[$test_class])) {
- $doc = new DomDocument('1.0');
- $root = $doc->createElement('testsuite');
- $root = $doc->appendChild($root);
- $xml_files[$test_class] = array('doc' => $doc, 'suite' => $root);
- }
- }
-
- // For convenience:
- $dom_document = &$xml_files[$test_class]['doc'];
-
- // Create the XML element for this test case:
- $case = $dom_document->createElement('testcase');
- $case->setAttribute('classname', $test_class);
- list($class, $name) = explode('->', $result->function, 2);
- $case->setAttribute('name', $name);
-
- // Passes get no further attention, but failures and exceptions get to add more detail:
- if ($result->status == 'fail') {
- $fail = $dom_document->createElement('failure');
- $fail->setAttribute('type', 'failure');
- $fail->setAttribute('message', $result->message_group);
- $text = $dom_document->createTextNode($result->message);
- $fail->appendChild($text);
- $case->appendChild($fail);
- }
- elseif ($result->status == 'exception') {
- // In the case of an exception the $result->function may not be a class
- // method so we record the full function name:
- $case->setAttribute('name', $result->function);
-
- $fail = $dom_document->createElement('error');
- $fail->setAttribute('type', 'exception');
- $fail->setAttribute('message', $result->message_group);
- $full_message = $result->message . "\n\nline: " . $result->line . "\nfile: " . $result->file;
- $text = $dom_document->createTextNode($full_message);
- $fail->appendChild($text);
- $case->appendChild($fail);
- }
- // Append the test case XML to the test suite:
- $xml_files[$test_class]['suite']->appendChild($case);
- }
- }
- // The last test case hasn't been saved to a file yet, so do that now:
- if (isset($xml_files[$test_class])) {
- file_put_contents($args['xml'] . '/' . $test_class . '.xml', $xml_files[$test_class]['doc']->saveXML());
- unset($xml_files[$test_class]);
- }
-}
-
-/**
- * Stop the test timer.
- */
-function simpletest_script_reporter_timer_stop() {
- echo "\n";
- $end = timer_stop('run-tests');
- echo "Test run duration: " . format_interval($end['time'] / 1000);
- echo "\n\n";
-}
-
-/**
- * Display test results.
- */
-function simpletest_script_reporter_display_results() {
- global $args, $test_id, $results_map;
-
- if ($args['verbose']) {
- // Report results.
- echo "Detailed test results\n";
- echo "---------------------\n";
-
- $results = db_query("SELECT * FROM {simpletest} WHERE test_id = :test_id ORDER BY test_class, message_id", array(':test_id' => $test_id));
- $test_class = '';
- foreach ($results as $result) {
- if (isset($results_map[$result->status])) {
- if ($result->test_class != $test_class) {
- // Display test class every time results are for new test class.
- echo "\n\n---- $result->test_class ----\n\n\n";
- $test_class = $result->test_class;
-
- // Print table header.
- echo "Status Group Filename Line Function \n";
- echo "--------------------------------------------------------------------------------\n";
- }
-
- simpletest_script_format_result($result);
- }
- }
- }
-}
-
-/**
- * Format the result so that it fits within the default 80 character
- * terminal size.
- *
- * @param $result The result object to format.
- */
-function simpletest_script_format_result($result) {
- global $results_map, $color;
-
- $summary = sprintf("%-9.9s %-10.10s %-17.17s %4.4s %-35.35s\n",
- $results_map[$result->status], $result->message_group, basename($result->file), $result->line, $result->function);
-
- simpletest_script_print($summary, simpletest_script_color_code($result->status));
-
- $lines = explode("\n", wordwrap(trim(strip_tags($result->message)), 76));
- foreach ($lines as $line) {
- echo " $line\n";
- }
-}
-
-/**
- * Print error message prefixed with " ERROR: " and displayed in fail color
- * if color output is enabled.
- *
- * @param $message The message to print.
- */
-function simpletest_script_print_error($message) {
- simpletest_script_print(" ERROR: $message\n", SIMPLETEST_SCRIPT_COLOR_FAIL);
-}
-
-/**
- * Print a message to the console, if color is enabled then the specified
- * color code will be used.
- *
- * @param $message The message to print.
- * @param $color_code The color code to use for coloring.
- */
-function simpletest_script_print($message, $color_code) {
- global $args;
- if ($args['color']) {
- echo "\033[" . $color_code . "m" . $message . "\033[0m";
- }
- else {
- echo $message;
- }
-}
-
-/**
- * Get the color code associated with the specified status.
- *
- * @param $status The status string to get code for.
- * @return Color code.
- */
-function simpletest_script_color_code($status) {
- switch ($status) {
- case 'pass':
- return SIMPLETEST_SCRIPT_COLOR_PASS;
- case 'fail':
- return SIMPLETEST_SCRIPT_COLOR_FAIL;
- case 'exception':
- return SIMPLETEST_SCRIPT_COLOR_EXCEPTION;
- }
- return 0; // Default formatting.
-}
-
-/**
- * Prints alternative test names.
- *
- * Searches the provided array of string values for close matches based on the
- * Levenshtein algorithm.
- *
- * @see http://php.net/manual/en/function.levenshtein.php
- *
- * @param string $string
- * A string to test.
- * @param array $array
- * A list of strings to search.
- * @param int $degree
- * The matching strictness. Higher values return fewer matches. A value of
- * 4 means that the function will return strings from $array if the candidate
- * string in $array would be identical to $string by changing 1/4 or fewer of
- * its characters.
- */
-function simpletest_script_print_alternatives($string, $array, $degree = 4) {
- $alternatives = array();
- foreach ($array as $item) {
- $lev = levenshtein($string, $item);
- if ($lev <= strlen($item) / $degree || FALSE !== strpos($string, $item)) {
- $alternatives[] = $item;
- }
- }
- if (!empty($alternatives)) {
- simpletest_script_print(" Did you mean?\n", SIMPLETEST_SCRIPT_COLOR_FAIL);
- foreach ($alternatives as $alternative) {
- simpletest_script_print(" - $alternative\n", SIMPLETEST_SCRIPT_COLOR_FAIL);
- }
- }
-}
diff --git a/scripts/test.script b/scripts/test.script
deleted file mode 100644
index a45f3f0..0000000
--- a/scripts/test.script
+++ /dev/null
@@ -1,4 +0,0 @@
-This file is for testing purposes only.
-
-It is used to test the functionality of drupal_get_filename(). See
-BootstrapGetFilenameTestCase::testDrupalGetFilename() for more information.
diff --git a/sites/README.txt b/sites/README.txt
deleted file mode 100644
index 9aecef2..0000000
--- a/sites/README.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-This directory structure contains the settings and configuration files specific
-to your site or sites and is an integral part of multisite configuration.
-
-The sites/all/ subdirectory structure should be used to place your custom and
-downloaded extensions including modules, themes, and third party libraries.
-
-Downloaded installation profiles should be placed in the /profiles directory
-in the Drupal root.
-
-In multisite configuration, extensions found in the sites/all directory
-structure are available to all sites. Alternatively, the sites/your_site_name/
-subdirectory pattern may be used to restrict extensions to a specific
-site instance.
-
-See the respective README.txt files in sites/all/themes and sites/all/modules
-for additional information about obtaining and organizing extensions.
-
-See INSTALL.txt in the Drupal root for information about single-site
-installation or multisite configuration.
diff --git a/sites/all/modules/README.txt b/sites/all/modules/README.txt
deleted file mode 100644
index c72b43e..0000000
--- a/sites/all/modules/README.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-Place downloaded and custom modules that extend your site functionality beyond
-Drupal core in this directory to ensure clean separation from core modules and
-to facilitate safe, self-contained code updates. Contributed modules from the
-Drupal community may be downloaded at http://drupal.org/project/modules.
-
-It is safe to organize modules into subdirectories, such as "contrib" for
-contributed modules, and "custom" for custom modules. Note that if you move a
-module to a subdirectory after it has been enabled, you may need to clear the
-Drupal cache so that it can be found.
-
-In multisite configuration, modules found in this directory are available to
-all sites. Alternatively, the sites/your_site_name/modules directory pattern may
-be used to restrict modules to a specific site instance.
-
-Refer to the "Developing for Drupal" section of the README.txt in the Drupal
-root directory for further information on extending Drupal with custom modules.
diff --git a/sites/all/themes/README.txt b/sites/all/themes/README.txt
deleted file mode 100644
index e308af2..0000000
--- a/sites/all/themes/README.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Place downloaded and custom themes that modify your site's appearance in this
-directory to ensure clean separation from Drupal core and to facilitate safe,
-self-contained code updates. Contributed themes from the Drupal community may
-be downloaded at http://drupal.org/project/themes.
-
-It is safe to organize themes into subdirectories and is recommended to use
-Drupal's sub-theme functionality to ensure easy maintenance and upgrades.
-
-In multisite configuration, themes found in this directory are available to
-all sites. Alternatively, the sites/your_site_name/themes directory pattern may
-be used to restrict themes to a specific site instance.
-
-Refer to the "Appearance" section of the README.txt in the Drupal root
-directory for further information on theming.
diff --git a/sites/default/default.settings.php b/sites/default/default.settings.php
deleted file mode 100644
index 562f998..0000000
--- a/sites/default/default.settings.php
+++ /dev/null
@@ -1,567 +0,0 @@
- 'mysql',
- * 'database' => 'databasename',
- * 'username' => 'username',
- * 'password' => 'password',
- * 'host' => 'localhost',
- * 'port' => 3306,
- * 'prefix' => 'myprefix_',
- * 'collation' => 'utf8_general_ci',
- * );
- * @endcode
- *
- * The "driver" property indicates what Drupal database driver the
- * connection should use. This is usually the same as the name of the
- * database type, such as mysql or sqlite, but not always. The other
- * properties will vary depending on the driver. For SQLite, you must
- * specify a database file name in a directory that is writable by the
- * webserver. For most other drivers, you must specify a
- * username, password, host, and database name.
- *
- * Transaction support is enabled by default for all drivers that support it,
- * including MySQL. To explicitly disable it, set the 'transactions' key to
- * FALSE.
- * Note that some configurations of MySQL, such as the MyISAM engine, don't
- * support it and will proceed silently even if enabled. If you experience
- * transaction related crashes with such configuration, set the 'transactions'
- * key to FALSE.
- *
- * For each database, you may optionally specify multiple "target" databases.
- * A target database allows Drupal to try to send certain queries to a
- * different database if it can but fall back to the default connection if not.
- * That is useful for master/slave replication, as Drupal may try to connect
- * to a slave server when appropriate and if one is not available will simply
- * fall back to the single master server.
- *
- * The general format for the $databases array is as follows:
- * @code
- * $databases['default']['default'] = $info_array;
- * $databases['default']['slave'][] = $info_array;
- * $databases['default']['slave'][] = $info_array;
- * $databases['extra']['default'] = $info_array;
- * @endcode
- *
- * In the above example, $info_array is an array of settings described above.
- * The first line sets a "default" database that has one master database
- * (the second level default). The second and third lines create an array
- * of potential slave databases. Drupal will select one at random for a given
- * request as needed. The fourth line creates a new database with a name of
- * "extra".
- *
- * For a single database configuration, the following is sufficient:
- * @code
- * $databases['default']['default'] = array(
- * 'driver' => 'mysql',
- * 'database' => 'databasename',
- * 'username' => 'username',
- * 'password' => 'password',
- * 'host' => 'localhost',
- * 'prefix' => 'main_',
- * 'collation' => 'utf8_general_ci',
- * );
- * @endcode
- *
- * You can optionally set prefixes for some or all database table names
- * by using the 'prefix' setting. If a prefix is specified, the table
- * name will be prepended with its value. Be sure to use valid database
- * characters only, usually alphanumeric and underscore. If no prefixes
- * are desired, leave it as an empty string ''.
- *
- * To have all database names prefixed, set 'prefix' as a string:
- * @code
- * 'prefix' => 'main_',
- * @endcode
- * To provide prefixes for specific tables, set 'prefix' as an array.
- * The array's keys are the table names and the values are the prefixes.
- * The 'default' element is mandatory and holds the prefix for any tables
- * not specified elsewhere in the array. Example:
- * @code
- * 'prefix' => array(
- * 'default' => 'main_',
- * 'users' => 'shared_',
- * 'sessions' => 'shared_',
- * 'role' => 'shared_',
- * 'authmap' => 'shared_',
- * ),
- * @endcode
- * You can also use a reference to a schema/database as a prefix. This may be
- * useful if your Drupal installation exists in a schema that is not the default
- * or you want to access several databases from the same code base at the same
- * time.
- * Example:
- * @code
- * 'prefix' => array(
- * 'default' => 'main.',
- * 'users' => 'shared.',
- * 'sessions' => 'shared.',
- * 'role' => 'shared.',
- * 'authmap' => 'shared.',
- * );
- * @endcode
- * NOTE: MySQL and SQLite's definition of a schema is a database.
- *
- * Advanced users can add or override initial commands to execute when
- * connecting to the database server, as well as PDO connection settings. For
- * example, to enable MySQL SELECT queries to exceed the max_join_size system
- * variable, and to reduce the database connection timeout to 5 seconds:
- *
- * @code
- * $databases['default']['default'] = array(
- * 'init_commands' => array(
- * 'big_selects' => 'SET SQL_BIG_SELECTS=1',
- * ),
- * 'pdo' => array(
- * PDO::ATTR_TIMEOUT => 5,
- * ),
- * );
- * @endcode
- *
- * WARNING: These defaults are designed for database portability. Changing them
- * may cause unexpected behavior, including potential data loss.
- *
- * @see DatabaseConnection_mysql::__construct
- * @see DatabaseConnection_pgsql::__construct
- * @see DatabaseConnection_sqlite::__construct
- *
- * Database configuration format:
- * @code
- * $databases['default']['default'] = array(
- * 'driver' => 'mysql',
- * 'database' => 'databasename',
- * 'username' => 'username',
- * 'password' => 'password',
- * 'host' => 'localhost',
- * 'prefix' => '',
- * );
- * $databases['default']['default'] = array(
- * 'driver' => 'pgsql',
- * 'database' => 'databasename',
- * 'username' => 'username',
- * 'password' => 'password',
- * 'host' => 'localhost',
- * 'prefix' => '',
- * );
- * $databases['default']['default'] = array(
- * 'driver' => 'sqlite',
- * 'database' => '/path/to/databasefilename',
- * );
- * @endcode
- */
-$databases = array();
-
-/**
- * Access control for update.php script.
- *
- * If you are updating your Drupal installation using the update.php script but
- * are not logged in using either an account with the "Administer software
- * updates" permission or the site maintenance account (the account that was
- * created during installation), you will need to modify the access check
- * statement below. Change the FALSE to a TRUE to disable the access check.
- * After finishing the upgrade, be sure to open this file again and change the
- * TRUE back to a FALSE!
- */
-$update_free_access = FALSE;
-
-/**
- * Salt for one-time login links and cancel links, form tokens, etc.
- *
- * This variable will be set to a random value by the installer. All one-time
- * login links will be invalidated if the value is changed. Note that if your
- * site is deployed on a cluster of web servers, you must ensure that this
- * variable has the same value on each server. If this variable is empty, a hash
- * of the serialized database credentials will be used as a fallback salt.
- *
- * For enhanced security, you may set this variable to a value using the
- * contents of a file outside your docroot that is never saved together
- * with any backups of your Drupal files and database.
- *
- * Example:
- * $drupal_hash_salt = file_get_contents('/home/example/salt.txt');
- *
- */
-$drupal_hash_salt = '';
-
-/**
- * Base URL (optional).
- *
- * If Drupal is generating incorrect URLs on your site, which could
- * be in HTML headers (links to CSS and JS files) or visible links on pages
- * (such as in menus), uncomment the Base URL statement below (remove the
- * leading hash sign) and fill in the absolute URL to your Drupal installation.
- *
- * You might also want to force users to use a given domain.
- * See the .htaccess file for more information.
- *
- * Examples:
- * $base_url = 'http://www.example.com';
- * $base_url = 'http://www.example.com:8888';
- * $base_url = 'http://www.example.com/drupal';
- * $base_url = 'https://www.example.com:8888/drupal';
- *
- * It is not allowed to have a trailing slash; Drupal will add it
- * for you.
- */
-# $base_url = 'http://www.example.com'; // NO trailing slash!
-
-/**
- * PHP settings:
- *
- * To see what PHP settings are possible, including whether they can be set at
- * runtime (by using ini_set()), read the PHP documentation:
- * http://www.php.net/manual/ini.list.php
- * See drupal_environment_initialize() in includes/bootstrap.inc for required
- * runtime settings and the .htaccess file for non-runtime settings. Settings
- * defined there should not be duplicated here so as to avoid conflict issues.
- */
-
-/**
- * Some distributions of Linux (most notably Debian) ship their PHP
- * installations with garbage collection (gc) disabled. Since Drupal depends on
- * PHP's garbage collection for clearing sessions, ensure that garbage
- * collection occurs by using the most common settings.
- */
-ini_set('session.gc_probability', 1);
-ini_set('session.gc_divisor', 100);
-
-/**
- * Set session lifetime (in seconds), i.e. the time from the user's last visit
- * to the active session may be deleted by the session garbage collector. When
- * a session is deleted, authenticated users are logged out, and the contents
- * of the user's $_SESSION variable is discarded.
- */
-ini_set('session.gc_maxlifetime', 200000);
-
-/**
- * Set session cookie lifetime (in seconds), i.e. the time from the session is
- * created to the cookie expires, i.e. when the browser is expected to discard
- * the cookie. The value 0 means "until the browser is closed".
- */
-ini_set('session.cookie_lifetime', 2000000);
-
-/**
- * If you encounter a situation where users post a large amount of text, and
- * the result is stripped out upon viewing but can still be edited, Drupal's
- * output filter may not have sufficient memory to process it. If you
- * experience this issue, you may wish to uncomment the following two lines
- * and increase the limits of these variables. For more information, see
- * http://php.net/manual/pcre.configuration.php.
- */
-# ini_set('pcre.backtrack_limit', 200000);
-# ini_set('pcre.recursion_limit', 200000);
-
-/**
- * Drupal automatically generates a unique session cookie name for each site
- * based on its full domain name. If you have multiple domains pointing at the
- * same Drupal site, you can either redirect them all to a single domain (see
- * comment in .htaccess), or uncomment the line below and specify their shared
- * base domain. Doing so assures that users remain logged in as they cross
- * between your various domains. Make sure to always start the $cookie_domain
- * with a leading dot, as per RFC 2109.
- */
-# $cookie_domain = '.example.com';
-
-/**
- * Variable overrides:
- *
- * To override specific entries in the 'variable' table for this site,
- * set them here. You usually don't need to use this feature. This is
- * useful in a configuration file for a vhost or directory, rather than
- * the default settings.php. Any configuration setting from the 'variable'
- * table can be given a new value. Note that any values you provide in
- * these variable overrides will not be modifiable from the Drupal
- * administration interface.
- *
- * The following overrides are examples:
- * - site_name: Defines the site's name.
- * - theme_default: Defines the default theme for this site.
- * - anonymous: Defines the human-readable name of anonymous users.
- * Remove the leading hash signs to enable.
- */
-# $conf['site_name'] = 'My Drupal site';
-# $conf['theme_default'] = 'garland';
-# $conf['anonymous'] = 'Visitor';
-
-/**
- * A custom theme can be set for the offline page. This applies when the site
- * is explicitly set to maintenance mode through the administration page or when
- * the database is inactive due to an error. It can be set through the
- * 'maintenance_theme' key. The template file should also be copied into the
- * theme. It is located inside 'modules/system/maintenance-page.tpl.php'.
- * Note: This setting does not apply to installation and update pages.
- */
-# $conf['maintenance_theme'] = 'bartik';
-
-/**
- * Reverse Proxy Configuration:
- *
- * Reverse proxy servers are often used to enhance the performance
- * of heavily visited sites and may also provide other site caching,
- * security, or encryption benefits. In an environment where Drupal
- * is behind a reverse proxy, the real IP address of the client should
- * be determined such that the correct client IP address is available
- * to Drupal's logging, statistics, and access management systems. In
- * the most simple scenario, the proxy server will add an
- * X-Forwarded-For header to the request that contains the client IP
- * address. However, HTTP headers are vulnerable to spoofing, where a
- * malicious client could bypass restrictions by setting the
- * X-Forwarded-For header directly. Therefore, Drupal's proxy
- * configuration requires the IP addresses of all remote proxies to be
- * specified in $conf['reverse_proxy_addresses'] to work correctly.
- *
- * Enable this setting to get Drupal to determine the client IP from
- * the X-Forwarded-For header (or $conf['reverse_proxy_header'] if set).
- * If you are unsure about this setting, do not have a reverse proxy,
- * or Drupal operates in a shared hosting environment, this setting
- * should remain commented out.
- *
- * In order for this setting to be used you must specify every possible
- * reverse proxy IP address in $conf['reverse_proxy_addresses'].
- * If a complete list of reverse proxies is not available in your
- * environment (for example, if you use a CDN) you may set the
- * $_SERVER['REMOTE_ADDR'] variable directly in settings.php.
- * Be aware, however, that it is likely that this would allow IP
- * address spoofing unless more advanced precautions are taken.
- */
-# $conf['reverse_proxy'] = TRUE;
-
-/**
- * Specify every reverse proxy IP address in your environment.
- * This setting is required if $conf['reverse_proxy'] is TRUE.
- */
-# $conf['reverse_proxy_addresses'] = array('a.b.c.d', ...);
-
-/**
- * Set this value if your proxy server sends the client IP in a header
- * other than X-Forwarded-For.
- */
-# $conf['reverse_proxy_header'] = 'HTTP_X_CLUSTER_CLIENT_IP';
-
-/**
- * Page caching:
- *
- * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page
- * views. This tells a HTTP proxy that it may return a page from its local
- * cache without contacting the web server, if the user sends the same Cookie
- * header as the user who originally requested the cached page. Without "Vary:
- * Cookie", authenticated users would also be served the anonymous page from
- * the cache. If the site has mostly anonymous users except a few known
- * editors/administrators, the Vary header can be omitted. This allows for
- * better caching in HTTP proxies (including reverse proxies), i.e. even if
- * clients send different cookies, they still get content served from the cache.
- * However, authenticated users should access the site directly (i.e. not use an
- * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid
- * getting cached pages from the proxy.
- */
-# $conf['omit_vary_cookie'] = TRUE;
-
-/**
- * CSS/JS aggregated file gzip compression:
- *
- * By default, when CSS or JS aggregation and clean URLs are enabled Drupal will
- * store a gzip compressed (.gz) copy of the aggregated files. If this file is
- * available then rewrite rules in the default .htaccess file will serve these
- * files to browsers that accept gzip encoded content. This allows pages to load
- * faster for these users and has minimal impact on server load. If you are
- * using a webserver other than Apache httpd, or a caching reverse proxy that is
- * configured to cache and compress these files itself you may want to uncomment
- * one or both of the below lines, which will prevent gzip files being stored.
- */
-# $conf['css_gzip_compression'] = FALSE;
-# $conf['js_gzip_compression'] = FALSE;
-
-/**
- * Block caching:
- *
- * Block caching may not be compatible with node access modules depending on
- * how the original block cache policy is defined by the module that provides
- * the block. By default, Drupal therefore disables block caching when one or
- * more modules implement hook_node_grants(). If you consider block caching to
- * be safe on your site and want to bypass this restriction, uncomment the line
- * below.
- */
-# $conf['block_cache_bypass_node_grants'] = TRUE;
-
-/**
- * String overrides:
- *
- * To override specific strings on your site with or without enabling the Locale
- * module, add an entry to this list. This functionality allows you to change
- * a small number of your site's default English language interface strings.
- *
- * Remove the leading hash signs to enable.
- */
-# $conf['locale_custom_strings_en'][''] = array(
-# 'forum' => 'Discussion board',
-# '@count min' => '@count minutes',
-# );
-
-/**
- *
- * IP blocking:
- *
- * To bypass database queries for denied IP addresses, use this setting.
- * Drupal queries the {blocked_ips} table by default on every page request
- * for both authenticated and anonymous users. This allows the system to
- * block IP addresses from within the administrative interface and before any
- * modules are loaded. However on high traffic websites you may want to avoid
- * this query, allowing you to bypass database access altogether for anonymous
- * users under certain caching configurations.
- *
- * If using this setting, you will need to add back any IP addresses which
- * you may have blocked via the administrative interface. Each element of this
- * array represents a blocked IP address. Uncommenting the array and leaving it
- * empty will have the effect of disabling IP blocking on your site.
- *
- * Remove the leading hash signs to enable.
- */
-# $conf['blocked_ips'] = array(
-# 'a.b.c.d',
-# );
-
-/**
- * Fast 404 pages:
- *
- * Drupal can generate fully themed 404 pages. However, some of these responses
- * are for images or other resource files that are not displayed to the user.
- * This can waste bandwidth, and also generate server load.
- *
- * The options below return a simple, fast 404 page for URLs matching a
- * specific pattern:
- * - 404_fast_paths_exclude: A regular expression to match paths to exclude,
- * such as images generated by image styles, or dynamically-resized images.
- * If you need to add more paths, you can add '|path' to the expression.
- * - 404_fast_paths: A regular expression to match paths that should return a
- * simple 404 page, rather than the fully themed 404 page. If you don't have
- * any aliases ending in htm or html you can add '|s?html?' to the expression.
- * - 404_fast_html: The html to return for simple 404 pages.
- *
- * Add leading hash signs if you would like to disable this functionality.
- */
-$conf['404_fast_paths_exclude'] = '/\/(?:styles)\//';
-$conf['404_fast_paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';
-$conf['404_fast_html'] = '404 Not Found Not Found The requested URL "@path" was not found on this server.
';
-
-/**
- * By default the page request process will return a fast 404 page for missing
- * files if they match the regular expression set in '404_fast_paths' and not
- * '404_fast_paths_exclude' above. 404 errors will simultaneously be logged in
- * the Drupal system log.
- *
- * You can choose to return a fast 404 page earlier for missing pages (as soon
- * as settings.php is loaded) by uncommenting the line below. This speeds up
- * server response time when loading 404 error pages and prevents the 404 error
- * from being logged in the Drupal system log. In order to prevent valid pages
- * such as image styles and other generated content that may match the
- * '404_fast_paths' regular expression from returning 404 errors, it is
- * necessary to add them to the '404_fast_paths_exclude' regular expression
- * above. Make sure that you understand the effects of this feature before
- * uncommenting the line below.
- */
-# drupal_fast_404();
-
-/**
- * External access proxy settings:
- *
- * If your site must access the Internet via a web proxy then you can enter
- * the proxy settings here. Currently only basic authentication is supported
- * by using the username and password variables. The proxy_user_agent variable
- * can be set to NULL for proxies that require no User-Agent header or to a
- * non-empty string for proxies that limit requests to a specific agent. The
- * proxy_exceptions variable is an array of host names to be accessed directly,
- * not via proxy.
- */
-# $conf['proxy_server'] = '';
-# $conf['proxy_port'] = 8080;
-# $conf['proxy_username'] = '';
-# $conf['proxy_password'] = '';
-# $conf['proxy_user_agent'] = '';
-# $conf['proxy_exceptions'] = array('127.0.0.1', 'localhost');
-
-/**
- * Authorized file system operations:
- *
- * The Update manager module included with Drupal provides a mechanism for
- * site administrators to securely install missing updates for the site
- * directly through the web user interface. On securely-configured servers,
- * the Update manager will require the administrator to provide SSH or FTP
- * credentials before allowing the installation to proceed; this allows the
- * site to update the new files as the user who owns all the Drupal files,
- * instead of as the user the webserver is running as. On servers where the
- * webserver user is itself the owner of the Drupal files, the administrator
- * will not be prompted for SSH or FTP credentials (note that these server
- * setups are common on shared hosting, but are inherently insecure).
- *
- * Some sites might wish to disable the above functionality, and only update
- * the code directly via SSH or FTP themselves. This setting completely
- * disables all functionality related to these authorized file operations.
- *
- * @see http://drupal.org/node/244924
- *
- * Remove the leading hash signs to disable.
- */
-# $conf['allow_authorize_operations'] = FALSE;
diff --git a/sites/example.sites.php b/sites/example.sites.php
deleted file mode 100644
index 2b00151..0000000
--- a/sites/example.sites.php
+++ /dev/null
@@ -1,55 +0,0 @@
-..' => 'directory'. As an
- * example, to map http://www.drupal.org:8080/mysite/test to the configuration
- * directory sites/example.com, the array should be defined as:
- * @code
- * $sites = array(
- * '8080.www.drupal.org.mysite.test' => 'example.com',
- * );
- * @endcode
- * The URL, http://www.drupal.org:8080/mysite/test/, could be a symbolic link or
- * an Apache Alias directive that points to the Drupal root containing
- * index.php. An alias could also be created for a subdomain. See the
- * @link http://drupal.org/documentation/install online Drupal installation guide @endlink
- * for more information on setting up domains, subdomains, and subdirectories.
- *
- * The following examples look for a site configuration in sites/example.com:
- * @code
- * URL: http://dev.drupal.org
- * $sites['dev.drupal.org'] = 'example.com';
- *
- * URL: http://localhost/example
- * $sites['localhost.example'] = 'example.com';
- *
- * URL: http://localhost:8080/example
- * $sites['8080.localhost.example'] = 'example.com';
- *
- * URL: http://www.drupal.org:8080/mysite/test/
- * $sites['8080.www.drupal.org.mysite.test'] = 'example.com';
- * @endcode
- *
- * @see default.settings.php
- * @see conf_path()
- * @see http://drupal.org/documentation/install/multi-site
- */
diff --git a/themes/README.txt b/themes/README.txt
deleted file mode 100644
index 3fb27ed..0000000
--- a/themes/README.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
-This directory is reserved for core theme files. Custom or contributed themes
-should be placed in their own subdirectory of the sites/all/themes directory.
-For multisite installations, they can also be placed in a subdirectory under
-/sites/{sitename}/themes/, where {sitename} is the name of your site (e.g.,
-www.example.com). This will allow you to more easily update Drupal core files.
-
-For more details, see: http://drupal.org/node/176043
-
diff --git a/themes/bartik/bartik.info b/themes/bartik/bartik.info
deleted file mode 100644
index ce7e13f..0000000
--- a/themes/bartik/bartik.info
+++ /dev/null
@@ -1,35 +0,0 @@
-
-name = Bartik
-description = A flexible, recolorable theme with many regions.
-package = Core
-version = VERSION
-core = 7.x
-
-stylesheets[all][] = css/layout.css
-stylesheets[all][] = css/style.css
-stylesheets[all][] = css/colors.css
-stylesheets[print][] = css/print.css
-
-regions[header] = Header
-regions[help] = Help
-regions[page_top] = Page top
-regions[page_bottom] = Page bottom
-regions[highlighted] = Highlighted
-
-regions[featured] = Featured
-regions[content] = Content
-regions[sidebar_first] = Sidebar first
-regions[sidebar_second] = Sidebar second
-
-regions[triptych_first] = Triptych first
-regions[triptych_middle] = Triptych middle
-regions[triptych_last] = Triptych last
-
-regions[footer_firstcolumn] = Footer first column
-regions[footer_secondcolumn] = Footer second column
-regions[footer_thirdcolumn] = Footer third column
-regions[footer_fourthcolumn] = Footer fourth column
-regions[footer] = Footer
-
-settings[shortcut_module_link] = 0
-
diff --git a/themes/bartik/color/base.png b/themes/bartik/color/base.png
deleted file mode 100644
index 58cc088..0000000
Binary files a/themes/bartik/color/base.png and /dev/null differ
diff --git a/themes/bartik/color/color.inc b/themes/bartik/color/color.inc
deleted file mode 100644
index 7c29f50..0000000
--- a/themes/bartik/color/color.inc
+++ /dev/null
@@ -1,132 +0,0 @@
- array('logo' => theme_get_setting('logo', 'bartik'))), 'setting');
-
-$info = array(
- // Available colors and color labels used in theme.
- 'fields' => array(
- 'top' => t('Header top'),
- 'bottom' => t('Header bottom'),
- 'bg' => t('Main background'),
- 'sidebar' => t('Sidebar background'),
- 'sidebarborders' => t('Sidebar borders'),
- 'footer' => t('Footer background'),
- 'titleslogan' => t('Title and slogan'),
- 'text' => t('Text color'),
- 'link' => t('Link color'),
- ),
- // Pre-defined color schemes.
- 'schemes' => array(
- 'default' => array(
- 'title' => t('Blue Lagoon (default)'),
- 'colors' => array(
- 'top' => '#0779bf',
- 'bottom' => '#48a9e4',
- 'bg' => '#ffffff',
- 'sidebar' => '#f6f6f2',
- 'sidebarborders' => '#f9f9f9',
- 'footer' => '#292929',
- 'titleslogan' => '#fffeff',
- 'text' => '#3b3b3b',
- 'link' => '#0071B3',
- ),
- ),
- 'firehouse' => array(
- 'title' => t('Firehouse'),
- 'colors' => array(
- 'top' => '#cd2d2d',
- 'bottom' => '#cf3535',
- 'bg' => '#ffffff',
- 'sidebar' => '#f1f4f0',
- 'sidebarborders' => '#ededed',
- 'footer' => '#1f1d1c',
- 'titleslogan' => '#fffeff',
- 'text' => '#3b3b3b',
- 'link' => '#d6121f',
- ),
- ),
- 'ice' => array(
- 'title' => t('Ice'),
- 'colors' => array(
- 'top' => '#d0d0d0',
- 'bottom' => '#c2c4c5',
- 'bg' => '#ffffff',
- 'sidebar' => '#ffffff',
- 'sidebarborders' => '#cccccc',
- 'footer' => '#24272c',
- 'titleslogan' => '#000000',
- 'text' => '#4a4a4a',
- 'link' => '#019dbf',
- ),
- ),
- 'plum' => array(
- 'title' => t('Plum'),
- 'colors' => array(
- 'top' => '#4c1c58',
- 'bottom' => '#593662',
- 'bg' => '#fffdf7',
- 'sidebar' => '#edede7',
- 'sidebarborders' => '#e7e7e7',
- 'footer' => '#2c2c28',
- 'titleslogan' => '#ffffff',
- 'text' => '#301313',
- 'link' => '#9d408d',
- ),
- ),
- 'slate' => array(
- 'title' => t('Slate'),
- 'colors' => array(
- 'top' => '#4a4a4a',
- 'bottom' => '#4e4e4e',
- 'bg' => '#ffffff',
- 'sidebar' => '#ffffff',
- 'sidebarborders' => '#d0d0d0',
- 'footer' => '#161617',
- 'titleslogan' => '#ffffff',
- 'text' => '#3b3b3b',
- 'link' => '#0073b6',
- ),
- ),
- ),
-
- // CSS files (excluding @import) to rewrite with new color scheme.
- 'css' => array(
- 'css/colors.css',
- ),
-
- // Files to copy.
- 'copy' => array(
- 'logo.png',
- ),
-
- // Gradient definitions.
- 'gradients' => array(
- array(
- // (x, y, width, height).
- 'dimension' => array(0, 0, 0, 0),
- // Direction of gradient ('vertical' or 'horizontal').
- 'direction' => 'vertical',
- // Keys of colors to use for the gradient.
- 'colors' => array('top', 'bottom'),
- ),
- ),
-
- // Color areas to fill (x, y, width, height).
- 'fill' => array(),
-
- // Coordinates of all the theme slices (x, y, width, height)
- // with their filename as used in the stylesheet.
- 'slices' => array(),
-
- // Reference color used for blending. Matches the base.png's colors.
- 'blend_target' => '#ffffff',
-
- // Preview files.
- 'preview_css' => 'color/preview.css',
- 'preview_js' => 'color/preview.js',
- 'preview_html' => 'color/preview.html',
-
- // Base file for image generation.
- 'base_image' => 'color/base.png',
-);
diff --git a/themes/bartik/color/preview.css b/themes/bartik/color/preview.css
deleted file mode 100644
index 48a4a83..0000000
--- a/themes/bartik/color/preview.css
+++ /dev/null
@@ -1,200 +0,0 @@
-
-/* ---------- Color form ----------- */
-#color_scheme_form #palette .form-item {
- width: 25em;
-}
-#color_scheme_form #palette .form-item label {
- width: 15em;
-}
-
-/* ---------- Preview Styles ----------- */
-
-html.js #preview {
- clear: both;
- float: none !important;
-}
-#preview {
- background-color: #fff;
- font-family: Georgia, "Times New Roman", Times, serif;
- font-size: 14px;
- line-height: 1.5;
- overflow: hidden;
- word-wrap: break-word;
- margin-bottom: 10px;
-}
-#preview-header {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- position: relative;
-}
-#preview-logo {
- float: left;
- padding: 15px 15px 15px 10px;
-}
-#preview-site-name {
- color: #686868;
- font-weight: normal;
- font-size: 1.821em;
- line-height: 1;
- margin-bottom: 30px;
- margin-left: 15px;
- padding-top: 34px;
-}
-#preview-main-menu {
- clear: both;
- padding: 0 15px 3px;
-}
-#preview-main-menu-links a {
- color: #d9d9d9;
- padding: 0.6em 1em 0.4em;
-}
-#preview-main-menu-links {
- font-size: 0.929em;
- margin: 0;
- padding: 0;
-}
-#preview-main-menu-links a {
- color: #333;
- background: #ccc;
- background: rgba(255, 255, 255, 0.7);
- text-shadow: 0 1px #eee;
- -khtml-border-radius-topleft: 8px;
- -moz-border-radius-topleft: 8px;
- -webkit-border-top-left-radius: 8px;
- border-top-left-radius: 8px;
- -khtml-border-radius-topright: 8px;
- -moz-border-radius-topright: 8px;
- -webkit-border-top-right-radius: 8px;
- border-top-right-radius: 8px;
-}
-#preview-main-menu-links a:hover,
-#preview-main-menu-links a:focus {
- background: #fff;
- background: rgba(255, 255, 255, 0.95);
-}
-#preview-main-menu-links a:active {
- background: #b3b3b3;
- background: rgba(255, 255, 255, 1);
-}
-#preview-main-menu-links li a.active {
- border-bottom: none;
-}
-#preview-main-menu-links li {
- display: inline;
- list-style-type: none;
- padding: 0.6em 0 0.4em;
-}
-#preview-sidebar,
-#preview-content {
- display: inline;
- float: left;
- position: relative;
-}
-#preview-sidebar {
- margin-left: 15px;
- width: 210px;
-}
-#preview-content {
- margin-left: 30px;
- width: 26.5em;
-}
-#preview-sidebar .preview-block {
- border: 1px solid;
- margin: 20px 0;
- padding: 15px 20px;
-}
-#preview-sidebar h2 {
- border-bottom: 1px solid #d6d6d6;
- font-size: 1.071em;
- font-weight: normal;
- line-height: 1.2;
- margin: 0 0 0.5em;
- padding-bottom: 5px;
- text-shadow: 0 1px 0 #fff;
-}
-#preview .preview-block .preview-content {
- margin-top: 1em;
-}
-#preview .preview-block-menu .preview-content,
-#preview .preview-block-menu .preview-content ul {
- margin-top: 0;
-}
-#preview-main {
- margin-bottom: 40px;
- margin-top: 20px;
-}
-#preview-page-title {
- font-size: 2em;
- font-weight: normal;
- line-height: 1;
- margin: 1em 0 0.5em;
-}
-#preview-footer-wrapper {
- color: #c0c0c0;
- color: rgba(255, 255, 255, 0.65);
- display: block !important;
- font-size: 0.857em;
- padding: 20px 20px 25px;
-}
-#preview-footer-wrapper a {
- color: #fcfcfc;
- color: rgba(255, 255, 255, 0.8);
-}
-#preview-footer-wrapper a:hover,
-#preview-footer-wrapper a:focus {
- color: #fefefe;
- color: rgba(255, 255, 255, 0.95);
- text-decoration: underline;
-}
-#preview-footer-wrapper .preview-footer-column {
- display: inline;
- float: left;
- padding: 0 10px;
- position: relative;
- width: 220px;
-}
-#preview-footer-wrapper .preview-block {
- border: 1px solid #444;
- border-color: rgba(255, 255, 255, 0.1);
- margin: 20px 0;
- padding: 10px;
-}
-#preview-footer-columns .preview-block-menu {
- border: none;
- margin: 0;
- padding: 0;
-}
-#preview-footer-columns h2 {
- border-bottom: 1px solid #555;
- border-color: rgba(255, 255, 255, 0.15);
- font-size: 1em;
- margin-bottom: 0;
- padding-bottom: 3px;
- text-transform: uppercase;
-}
-#preview-footer-columns .preview-content {
- margin-top: 0;
-}
-#preview-footer-columns .preview-content ul {
- margin-left: 0;
- padding-left: 0;
-}
-#preview-footer-columns .preview-content li {
- list-style: none;
- list-style-image: none;
- margin: 0;
- padding: 0;
-}
-#preview-footer-columns .preview-content li a {
- border-bottom: 1px solid #555;
- border-color: rgba(255, 255, 255, 0.15);
- display: block;
- line-height: 1.2;
- padding: 0.8em 2px 0.8em 20px;
- text-indent: -15px;
-}
-#preview-footer-columns .preview-content li a:hover,
-#preview-footer-columns .preview-content li a:focus {
- background-color: #1f1f21;
- background-color: rgba(255, 255, 255, 0.05);
- text-decoration: none;
-}
diff --git a/themes/bartik/color/preview.html b/themes/bartik/color/preview.html
deleted file mode 100644
index 52ea566..0000000
--- a/themes/bartik/color/preview.html
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
Lorem ipsum dolor
-
-
- Sit amet,
consectetur adipisicing elit , sed do eiusmod tempor
- incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
- nostrud
exercitation ullamco laboris nisi ut aliquip ex ea
- commodo consequat. Maecenas id porttitor Ut enim ad minim veniam, quis nostr udfelis.
-
-
-
-
-
-
-
-
diff --git a/themes/bartik/color/preview.js b/themes/bartik/color/preview.js
deleted file mode 100644
index b40bcf7..0000000
--- a/themes/bartik/color/preview.js
+++ /dev/null
@@ -1,39 +0,0 @@
-
-(function ($) {
- Drupal.color = {
- logoChanged: false,
- callback: function(context, settings, form, farb, height, width) {
- // Change the logo to be the real one.
- if (!this.logoChanged) {
- $('#preview #preview-logo img').attr('src', Drupal.settings.color.logo);
- this.logoChanged = true;
- }
- // Remove the logo if the setting is toggled off.
- if (Drupal.settings.color.logo == null) {
- $('div').remove('#preview-logo');
- }
-
- // Solid background.
- $('#preview', form).css('backgroundColor', $('#palette input[name="palette[bg]"]', form).val());
-
- // Text preview.
- $('#preview #preview-main h2, #preview .preview-content', form).css('color', $('#palette input[name="palette[text]"]', form).val());
- $('#preview #preview-content a', form).css('color', $('#palette input[name="palette[link]"]', form).val());
-
- // Sidebar block.
- $('#preview #preview-sidebar #preview-block', form).css('background-color', $('#palette input[name="palette[sidebar]"]', form).val());
- $('#preview #preview-sidebar #preview-block', form).css('border-color', $('#palette input[name="palette[sidebarborders]"]', form).val());
-
- // Footer wrapper background.
- $('#preview #preview-footer-wrapper', form).css('background-color', $('#palette input[name="palette[footer]"]', form).val());
-
- // CSS3 Gradients.
- var gradient_start = $('#palette input[name="palette[top]"]', form).val();
- var gradient_end = $('#palette input[name="palette[bottom]"]', form).val();
-
- $('#preview #preview-header', form).attr('style', "background-color: " + gradient_start + "; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(" + gradient_start + "), to(" + gradient_end + ")); background-image: -moz-linear-gradient(-90deg, " + gradient_start + ", " + gradient_end + ");");
-
- $('#preview #preview-site-name', form).css('color', $('#palette input[name="palette[titleslogan]"]', form).val());
- }
- };
-})(jQuery);
diff --git a/themes/bartik/color/preview.png b/themes/bartik/color/preview.png
deleted file mode 100644
index 58cc088..0000000
Binary files a/themes/bartik/color/preview.png and /dev/null differ
diff --git a/themes/bartik/css/colors.css b/themes/bartik/css/colors.css
deleted file mode 100644
index fd83374..0000000
--- a/themes/bartik/css/colors.css
+++ /dev/null
@@ -1,58 +0,0 @@
-
-/* ---------- Color Module Styles ----------- */
-
-body,
-body.overlay {
- color: #3b3b3b;
-}
-.comment .comment-arrow {
- border-color: #ffffff;
-}
-#page,
-#main-wrapper,
-#main-menu-links li a.active,
-#main-menu-links li.active-trail a {
- background: #ffffff;
-}
-.tabs ul.primary li a.active {
- background-color: #ffffff;
-}
-.tabs ul.primary li.active a {
- background-color: #ffffff;
- border-bottom: 1px solid #ffffff;
-}
-#header {
- background-color: #48a9e4;
- background-image: -moz-linear-gradient(top, #0779bf 0%, #48a9e4 100%);
- background-image: -ms-linear-gradient(top, #0779bf 0%, #48a9e4 100%);
- background-image: -o-linear-gradient(top, #0779bf 0%, #48a9e4 100%);
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #0779bf), color-stop(1, #48a9e4));
- background-image: -webkit-linear-gradient(top, #0779bf 0%, #48a9e4 100%);
- background-image: linear-gradient(top, #0779bf 0%, #48a9e4 100%);
-}
-a {
- color: #0071B3;
-}
-a:hover,
-a:focus {
- color: #018fe2;
-}
-a:active {
- color: #23aeff;
-}
-.sidebar .block {
- background-color: #f6f6f2;
- border-color: #f9f9f9;
-}
-#page-wrapper,
-#footer-wrapper {
- background: #292929;
-}
-.region-header,
-.region-header a,
-.region-header li a.active,
-#name-and-slogan,
-#name-and-slogan a,
-#secondary-menu-links li a {
- color: #fffeff;
-}
diff --git a/themes/bartik/css/ie-rtl.css b/themes/bartik/css/ie-rtl.css
deleted file mode 100644
index 6358bf3..0000000
--- a/themes/bartik/css/ie-rtl.css
+++ /dev/null
@@ -1,48 +0,0 @@
-
-fieldset legend {
- left: 6px;
-}
-ul.action-links li a,
-#user-login-form li.openid-link a,
-#user-login li.openid-link a {
- zoom: 1;
-}
-.comment .attribution {
- float: right;
-}
-.comment .comment-arrow {
- position: absolute;
- right: 25px;
-}
-.region-header .block,
-.region-header #block-user-login .form-item {
- float: none;
- display: inline;
- vertical-align: top;
-}
-.region-header #block-user-login .item-list li {
- float: none;
-}
-.region-header #block-user-login .item-list li.last {
- padding-right: 0;
-}
-#user-login-form li.openid-link a,
-#user-login li.openid-link a {
- background-position: right -3px;
- padding-right: 20px;
- zoom: 1;
-}
-#main-menu ul.links li {
- margin: 0;
-}
-#main-menu ul.links li,
-#main-menu ul.links li a {
- display: inline;
- float: none;
- margin: 0;
- zoom: 1;
-}
-#footer li {
- display: inline;
- float: none;
-}
diff --git a/themes/bartik/css/ie.css b/themes/bartik/css/ie.css
deleted file mode 100644
index 7a65833..0000000
--- a/themes/bartik/css/ie.css
+++ /dev/null
@@ -1,63 +0,0 @@
-
-.block {
- zoom: 1;
-}
-#password-strength-text {
- margin-top: 0;
-}
-fieldset legend {
- left: -8px;
- padding: 0;
-}
-#footer-wrapper #footer .block {
- height: 100%;
-}
-.comment .attribution {
- display: inline-block;
- position: relative;
- float: left; /* LTR */
- overflow: hidden;
-}
-.comment .comment-text {
- display: inline-block;
- width: auto;
-}
-#search-block-form input.form-submit,
-#search-form input.form-submit {
- text-transform: capitalize; /* Trigger text indent. */
- height: 26px;
-}
-.meta {
- margin-bottom: 10px;
-}
-.region-header .form-required {
- color: #eee;
-}
-#search-block-form input.form-submit:hover,
-#search-block-form input.form-submit:focus,
-#search-form input.form-submit:hover,
-#search-form input.form-submit:focus {
- background-position: center -25px;
-}
-.contact-form #edit-message {
- width: 75%;
-}
-.contact-form .resizable-textarea .grippie {
- width: 76.3%;
-}
-#footer li {
- float: left; /* LTR */
-}
-#footer-wrapper {
- color: #c0c0c0;
-}
-#footer-wrapper a {
- color: #fcfcfc;
-}
-#footer-wrapper a:hover,
-#footer-wrapper a:focus {
- color: #fefefe;
-}
-.node-teaser {
- margin-top: 10px;
-}
diff --git a/themes/bartik/css/ie6.css b/themes/bartik/css/ie6.css
deleted file mode 100644
index 435fab0..0000000
--- a/themes/bartik/css/ie6.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#content {
- overflow: hidden;
-}
-.form-item-search-block-form {
- width: 50%;
-}
-.tabs ul.primary,
-.region-header .block-menu li a,
-.comment-form .form-item {
- zoom: 1;
-}
-#block-search-form .form-item-search-block-form input {
- width: 67%;
-}
-.node-teaser {
- border-bottom: 1px solid #d3d7d9;
-}
diff --git a/themes/bartik/css/layout-rtl.css b/themes/bartik/css/layout-rtl.css
deleted file mode 100644
index fa81e4f..0000000
--- a/themes/bartik/css/layout-rtl.css
+++ /dev/null
@@ -1,22 +0,0 @@
-
-/* ---------- Basic Layout RTL Styles ----------- */
-
-#content,
-#sidebar-first,
-#sidebar-second,
-.region-triptych-first,
-.region-triptych-middle,
-.region-triptych-last,
-.region-footer-firstcolumn,
-.region-footer-secondcolumn,
-.region-footer-thirdcolumn,
-.region-footer-fourthcolumn {
- float: right;
-}
-.region-header {
- float: left;
-}
-#secondary-menu {
- left: 0;
- right: auto;
-}
diff --git a/themes/bartik/css/layout.css b/themes/bartik/css/layout.css
deleted file mode 100644
index b561f4c..0000000
--- a/themes/bartik/css/layout.css
+++ /dev/null
@@ -1,100 +0,0 @@
-
-/* ---------- Basic Layout Styles ----------- */
-
-html,
-body,
-#page {
- height: 100%;
-}
-#page-wrapper {
- min-height: 100%;
- min-width: 960px;
-}
-#header div.section,
-#featured div.section,
-#messages div.section,
-#main,
-#triptych,
-#footer-columns,
-#footer {
- width: 960px;
- margin-left: auto;
- margin-right: auto;
-}
-#header div.section {
- position: relative;
-}
-.region-header {
- float: right; /* LTR */
- margin: 0 5px 10px;
-}
-.with-secondary-menu .region-header {
- margin-top: 3em;
-}
-.without-secondary-menu .region-header {
- margin-top: 15px;
-}
-#secondary-menu {
- position: absolute;
- right: 0; /* LTR */
- top: 0;
- width: 480px;
-}
-#content,
-#sidebar-first,
-#sidebar-second,
-.region-triptych-first,
-.region-triptych-middle,
-.region-triptych-last,
-.region-footer-firstcolumn,
-.region-footer-secondcolumn,
-.region-footer-thirdcolumn,
-.region-footer-fourthcolumn {
- display: inline;
- float: left; /* LTR */
- position: relative;
-}
-.one-sidebar #content {
- width: 720px;
-}
-.two-sidebars #content {
- width: 480px;
-}
-.no-sidebars #content {
- width: 960px;
- float: none;
-}
-#sidebar-first,
-#sidebar-second {
- width: 240px;
-}
-#main-wrapper {
- min-height: 300px;
-}
-#content .section,
-.sidebar .section {
- padding: 0 15px;
-}
-#breadcrumb {
- margin: 0 15px;
-}
-.region-triptych-first,
-.region-triptych-middle,
-.region-triptych-last {
- margin: 20px 20px 30px;
- width: 280px;
-}
-#footer-wrapper {
- padding: 35px 5px 30px;
-}
-.region-footer-firstcolumn,
-.region-footer-secondcolumn,
-.region-footer-thirdcolumn,
-.region-footer-fourthcolumn {
- padding: 0 10px;
- width: 220px;
-}
-#footer {
- width: 940px;
- min-width: 920px;
-}
diff --git a/themes/bartik/css/maintenance-page.css b/themes/bartik/css/maintenance-page.css
deleted file mode 100644
index c13c77b..0000000
--- a/themes/bartik/css/maintenance-page.css
+++ /dev/null
@@ -1,67 +0,0 @@
-
-body.maintenance-page {
- background-color: #fff;
- color: #000;
-}
-.maintenance-page #page-wrapper {
- background: #fff;
- margin-left: auto;
- margin-right: auto;
- min-width: 0;
- min-height: 0;
- width: 800px;
- border: 1px solid #ddd;
- margin-top: 40px;
-}
-.maintenance-page #page {
- margin: 20px 40px 40px;
-}
-.maintenance-page #main-wrapper {
- min-height: inherit;
-}
-.maintenance-page #header,
-.maintenance-page #messages,
-.maintenance-page #main {
- width: auto;
-}
-.maintenance-page #header div.section,
-.maintenance-page #main {
- width: 700px;
-}
-.maintenance-page #main {
- margin: 0;
-}
-.maintenance-page #content .section {
- padding: 0 0 0 10px;
-}
-.maintenance-page #header {
- background-color: #fff;
- background-image: none;
-}
-.maintenance-page #name-and-slogan {
- margin-bottom: 50px;
- margin-left: 0;
- padding-top: 20px;
- font-size: 90%;
-}
-.maintenance-page #name-and-slogan,
-.maintenance-page #name-and-slogan a,
-.maintenance-page #name-and-slogan a:hover,
-.maintenance-page #name-and-slogan a:hover {
- color: #777;
-}
-.maintenance-page h1#page-title {
- line-height: 1em;
- margin-top: 0;
-}
-.maintenance-page #messages {
- padding: 0;
- margin-top: 30px;
-}
-.maintenance-page #messages div.messages {
- margin: 0;
-}
-.maintenance-page #messages div.section {
- padding: 0;
- width: auto;
-}
diff --git a/themes/bartik/css/print.css b/themes/bartik/css/print.css
deleted file mode 100644
index 61ca3fa..0000000
--- a/themes/bartik/css/print.css
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/* ---------- General Layout ---------- */
-
-body,
-input,
-textarea,
-select {
- color: #000;
- background: none;
-}
-body.two-sidebars,
-body.sidebar-first,
-body.sidebar-second,
-body {
- width: 640px;
-}
-#sidebar-first,
-#sidebar-second,
-.navigation,
-#toolbar,
-#footer-wrapper,
-.tabs,
-.add-or-remove-shortcuts {
- display: none;
-}
-.one-sidebar #content,
-.two-sidebars #content {
- width: 100%;
-}
-#triptych-wrapper {
- width: 960px;
- margin: 0;
- padding: 0;
- border: none;
-}
-#triptych-first, #triptych-middle, #triptych-last {
- width: 250px;
-}
-
-/* ---------- Node Pages ---------- */
-
-#comments .title,
-#comments form,
-.comment_forbidden {
- display: none;
-}
diff --git a/themes/bartik/css/style-rtl.css b/themes/bartik/css/style-rtl.css
deleted file mode 100644
index 991edfc..0000000
--- a/themes/bartik/css/style-rtl.css
+++ /dev/null
@@ -1,276 +0,0 @@
-
-/* ------------------ Reset Styles ------------------ */
-
-caption,
-th,
-td {
- text-align: right;
-}
-blockquote {
- border-left: none;
- border-right: 4px solid #afafaf;
-}
-blockquote:before {
- content: "\201D";
-}
-blockquote:after {
- content: "\201C";
-}
-tr td,
-tr th {
- text-align: right;
-}
-
-/* ------------------ List Styles ------------------ */
-
-.region-content ul,
-.region-content ol {
- padding: 2.5em 0 0.25em 0;
-}
-.item-list ul li {
- padding: 0.2em 0 0 0.5em;
-}
-ul.tips {
- padding: 0 1.25em 0 0;
-}
-.block ol,
-.block ul {
- padding: 0 1em 0.25em 0;
-}
-
-/* ------------------ Header ------------------ */
-
-#logo {
- padding: 15px 10px 15px 15px;
-}
-#logo,
-#name-and-slogan,
-.region-header .block,
-.region-header #block-user-login .form-item,
-.region-header #block-user-login .item-list li {
- float: right;
-}
-#name-and-slogan {
- margin: 0 15px 30px 0;
-}
-.region-header .form-text {
- margin-left: 2px;
- margin-right: 0;
-}
-.region-header #block-user-login .item-list li.last {
- padding-left: 0;
- padding-right: 0.5em;
-}
-.region-header #block-user-login ul.openid-links li.last {
- padding-right: 0;
-}
-.region-header #user-login-form li.openid-link a,
-.region-header #user-login li.openid-link a {
- background-position: right -3px;
- padding-left: 0;
- padding-right: 20px;
-}
-
-/* --------------- Main Menu ------------ */
-
-#main-menu ul.links li,
-#main-menu ul.links li a {
- float: right;
-}
-
-/* --------------- Secondary Menu ------------ */
-
-#secondary-menu-links {
- float: left;
-}
-
-/* ----------------- Content ------------------ */
-
-.submitted .user-picture img {
- float: right;
- margin-left: 5px;
- margin-right: 0;
-}
-.field-type-taxonomy-term-reference .field-label {
- padding-left: 5px;
- padding-right: 0;
-}
-.field-type-taxonomy-term-reference ul.links li {
- padding: 0 0 0 1em;
- float: right;
-}
-.link-wrapper {
- text-align: left;
- margin-right: 236px;
- margin-left: 0;
-}
-
-/* ----------------- Comments ----------------- */
-
-.comment .user-picture img {
- margin-right: 0;
-}
-.comment .attribution {
- float: right;
- padding: 0 0 0 30px;
-}
-.comment .comment-arrow {
- background-image: url(../images/comment-arrow-rtl.gif);
- margin-left: 0;
- margin-right: -47px;
-}
-.comment .indented {
- margin-right: 40px;
- margin-left: 0;
-}
-.comment ul.links li {
- padding: 0 0 0.5em;
-}
-.comment-unpublished {
- margin-left: 5px;
- margin-right: 0;
- padding: 5px 5px 5px 2px;
-}
-
-/* -------------- Password Meter ------------- */
-
-#password-strength {
- left: auto;
- margin-top: 2em;
- right: 16em;
-}
-#password-strength-text {
- margin-top: 0;
- float: left;
-}
-.form-item-pass-pass2 label {
- clear: right;
-}
-
-/* ----------------- Buttons ------------------ */
-
-input.form-submit,
-a.button {
- margin-right: 0;
- margin-left: 0.6em;
-}
-
-/* --------------- Search Form ---------------- */
-
-#search-form input#edit-keys,
-#block-search-form .form-item-search-block-form input {
- float: right;
- margin-left: 5px;
- margin-right: 0;
-}
-
-/* ------------------ Footer ------------------ */
-
-#footer-columns ul {
- padding-right: 0;
-}
-#footer-columns li a {
- padding: 0.8em 20px 0.8em 2px;
-}
-#footer li a {
- float: right;
- border-left: 1px solid #555;
- border-color: rgba(255, 255, 255, 0.15);
- border-right: none;
-}
-#footer li.first a {
- padding-right: 0;
- padding-left: 12px;
-}
-#footer li.last a {
- padding-left: 0;
- padding-right: 12px;
- border-left: none;
-}
-
-/* --------------- System Tabs --------------- */
-
-.tabs ul.primary li {
- margin: 0 0 0 5px;
- float: right;
- zoom: 1;
-}
-.tabs ul.secondary li {
- float: right;
-}
-.tabs ul.secondary li:first-child {
- padding-right: 0;
-}
-.tabs ul.secondary li:last-child {
- border-left: none;
-}
-ul.action-links li a {
- background-position: right center;
- padding-left: 0;
- padding-right: 15px;
-}
-
-/* -------------- Form Elements ------------- */
-
-.fieldset-legend span.summary {
- margin-left: 0;
-}
-#user-profile-form input#edit-submit {
- margin-left: 0;
-}
-.password-suggestions ul li {
- margin-right: 1.2em;
- margin-left: 0;
-}
-
-/* Animated throbber */
-html.js input.form-autocomplete {
- background-position: 1% center;
-}
-html.js input.throbbing {
- background-position: 1% center;
-}
-
-/* Comment form */
-.comment-form label {
- float: right;
-}
-.comment-form .form-type-checkbox,
-.comment-form .form-radios,
-.comment-form .form-item .description {
- margin-left: 0;
- margin-right: 120px;
-}
-#edit-actions input {
- margin-left: 0.6em;
- margin-right: 0;
-}
-
-/* -------------- Shortcut Links ------------- */
-
-.shortcut-wrapper h1#page-title {
- float: right;
-}
-
-/* ---------- Poll ----------- */
-
-.poll .vote-form {
- text-align: right;
-}
-.poll .total {
- text-align: left;
-}
-
-/* ---------- Color Form ----------- */
-
-.color-form #palette {
- margin-left: 0;
- margin-right: 20px;
-}
-.color-form .form-item label {
- float: right;
-}
-.color-form #palette .lock {
- right: -20px;
- left: 0;
-}
diff --git a/themes/bartik/css/style.css b/themes/bartik/css/style.css
deleted file mode 100644
index 8426e56..0000000
--- a/themes/bartik/css/style.css
+++ /dev/null
@@ -1,1641 +0,0 @@
-
-/* ---------- Overall Specifications ---------- */
-
-body {
- line-height: 1.5;
- font-size: 87.5%;
- word-wrap: break-word;
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
-}
-a:link,
-a:visited {
- text-decoration: none;
-}
-a:hover,
-a:active,
-a:focus {
- text-decoration: underline;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin: 1.0em 0 0.5em;
- font-weight: inherit;
-}
-h1 {
- font-size: 1.357em;
- color: #000;
-}
-h2 {
- font-size: 1.143em;
-}
-p {
- margin: 0 0 1.2em;
-}
-del {
- text-decoration: line-through;
-}
-tr.odd {
- background-color: #dddddd;
-}
-img {
- outline: 0;
-}
-code,
-pre,
-kbd,
-samp,
-var {
- padding: 0 0.4em;
- font-size: 0.857em;
- font-family: Menlo, Consolas, "Andale Mono", "Lucida Console", "Nimbus Mono L", "DejaVu Sans Mono", monospace, "Courier New";
-}
-code {
- background-color: #f2f2f2;
- background-color: rgba(40, 40, 0, 0.06);
-}
-pre code,
-pre kbd,
-pre samp,
-pre var,
-kbd kbd,
-kbd samp,
-code var {
- font-size: 100%;
- background-color: transparent;
-}
-pre code,
-pre samp,
-pre var {
- padding: 0;
-}
-.description code {
- font-size: 1em;
-}
-kbd {
- background-color: #f2f2f2;
- border: 1px outset #575757;
- margin: 0 3px;
- color: #666;
- display: inline-block;
- padding: 0 6px;
- -khtml-border-radius: 5px;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
-}
-pre {
- background-color: #f2f2f2;
- background-color: rgba(40, 40, 0, 0.06);
- margin: 10px 0;
- overflow: hidden;
- padding: 15px;
- white-space: pre-wrap;
-}
-
-
-/* ------------------ Fonts ------------------ */
-
-body,
-#site-slogan,
-.ui-widget,
-.comment-form label {
- font-family: Georgia, "Times New Roman", Times, serif;
-}
-#header,
-#footer-wrapper,
-#skip-link,
-ul.contextual-links,
-ul.links,
-ul.primary,
-.item-list .pager,
-div.field-type-taxonomy-term-reference,
-div.messages,
-div.meta,
-p.comment-time,
-table,
-.breadcrumb {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-input,
-textarea,
-select,
-a.button {
- font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif;
-}
-
-/* ------------------ Reset Styles ------------------ */
-
-caption {
- text-align: left; /* LTR */
- font-weight: normal;
-}
-blockquote {
- background: #f7f7f7;
- border-left: 1px solid #bbb;
- font-style: italic;
- margin: 1.5em 10px;
- padding: 0.5em 10px;
-}
-blockquote:before {
- color: #bbb;
- content: "\201C";
- font-size: 3em;
- line-height: 0.1em;
- margin-right: 0.2em;
- vertical-align: -.4em;
-}
-blockquote:after {
- color: #bbb;
- content: "\201D";
- font-size: 3em;
- line-height: 0.1em;
- vertical-align: -.45em;
-}
-blockquote > p:first-child {
- display: inline;
-}
-a.feed-icon {
- display: inline-block;
- padding: 15px 0 0 0;
-}
-
-/* ------------------ Table Styles ------------------ */
-
-table {
- border: 0;
- border-spacing: 0;
- font-size: 0.857em;
- margin: 10px 0;
- width: 100%;
-}
-table table {
- font-size: 1em;
-}
-#footer-wrapper table {
- font-size: 1em;
-}
-table tr th {
- background: #757575;
- background: rgba(0, 0, 0, 0.51);
- border-bottom-style: none;
-}
-table tr th,
-table tr th a,
-table tr th a:hover {
- color: #FFF;
- font-weight: bold;
-}
-table tbody tr th {
- vertical-align: top;
-}
-tr td,
-tr th {
- padding: 4px 9px;
- border: 1px solid #fff;
- text-align: left; /* LTR */
-}
-#footer-wrapper tr td,
-#footer-wrapper tr th {
- border-color: #555;
- border-color: rgba(255, 255, 255, 0.18);
-}
-tr.odd {
- background: #e4e4e4;
- background: rgba(0, 0, 0, 0.105);
-}
-tr,
-tr.even {
- background: #efefef;
- background: rgba(0, 0, 0, 0.063);
-}
-table ul.links {
- margin: 0;
- padding: 0;
- font-size: 1em;
-}
-table ul.links li {
- padding: 0 1em 0 0;
-}
-
-/* ------------------ List Styles ------------------ */
-
-.block ol,
-.block ul {
- margin: 0;
- padding: 0 0 0.25em 1em; /* LTR */
-}
-.contextual-links-wrapper {
- font-size: small !important;
-}
-ul.contextual-links {
- font-size: 0.923em;
-}
-.contextual-links-wrapper a {
- text-shadow: 0 0 0 !important;
-}
-.item-list .pager {
- font-size: 0.929em;
-}
-ul.menu li {
- margin: 0;
-}
-.region-content ul,
-.region-content ol {
- margin: 1em 0;
- padding: 0 0 0.25em 2.5em; /* LTR */
-}
-.item-list ul li {
- margin: 0;
- padding: 0.2em 0.5em 0 0; /* LTR */
-}
-ul.tips {
- padding: 0 0 0 1.25em; /* LTR */
-}
-
-/* ------------------ Header ------------------ */
-#skip-link {
- left: 50%;
- margin-left: -5.25em;
- margin-top: 0;
- position: absolute;
- width: auto;
- z-index: 50;
-}
-#skip-link a,
-#skip-link a:link,
-#skip-link a:visited {
- background: #444;
- background: rgba(0, 0, 0, 0.6);
- color: #fff;
- display: block;
- font-size: 0.94em;
- line-height: 1.7;
- padding: 1px 10px 2px 10px;
- text-decoration: none;
- -khtml-border-radius: 0 0 10px 10px;
- -moz-border-radius: 0 0 10px 10px;
- -webkit-border-top-left-radius: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 10px;
- -webkit-border-bottom-right-radius: 10px;
- border-radius: 0 0 10px 10px;
-}
-#skip-link a:hover,
-#skip-link a:active,
-#skip-link a:focus {
- outline: 0;
-}
-#logo {
- float: left; /* LTR */
- padding: 15px 15px 15px 10px; /* LTR */
-}
-#name-and-slogan {
- float: left; /* LTR */
- padding-top: 34px;
- margin: 0 0 30px 15px; /* LTR */
-}
-#site-name {
- font-size: 1.821em;
- color: #686868;
- line-height: 1;
-}
-h1#site-name {
- margin: 0;
-}
-#site-name a {
- font-weight: normal;
-}
-#site-slogan {
- font-size: 0.929em;
- margin-top: 7px;
- word-spacing: 0.1em;
- font-style: italic;
-}
-/* Region header blocks. */
-.region-header .block {
- font-size: 0.857em;
- float: left; /* LTR */
- margin: 0 10px;
- padding: 0;
-}
-.region-header .block .content {
- margin: 0;
- padding: 0;
-}
-.region-header .block ul {
- margin: 0;
- padding: 0;
-}
-.region-header .block li {
- list-style: none;
- list-style-image: none;
- padding: 0;
-}
-.region-header .form-text {
- background: #fefefe;
- background: rgba(255, 255, 255, 0.7);
- border-color: #ccc;
- border-color: rgba(255, 255, 255, 0.3);
- margin-right: 2px; /* LTR */
- width: 120px;
-}
-.region-header .form-text:hover,
-.region-header .form-text:focus,
-.region-header .form-text:active {
- background: #fff;
- background: rgba(255, 255, 255, 0.8);
-}
-.region-header .form-required {
- color: #eee;
- color: rgba(255, 255, 255, 0.7);
-}
-/* Region header block menus. */
-.region-header .block-menu {
- border: 1px solid;
- border-color: #eee;
- border-color: rgba(255, 255, 255, 0.2);
- padding: 0;
- width: 208px;
-}
-.region-header .block-menu li a {
- display: block;
- border-bottom: 1px solid;
- border-bottom-color: #eee;
- border-bottom-color: rgba(255, 255, 255, 0.2);
- padding: 3px 7px;
-}
-.region-header .block-menu li a:hover,
-.region-header .block-menu li a:focus,
-.region-header .block-menu li a:active {
- text-decoration: none;
- background: rgba(255, 255, 255, 0.15);
-}
-.region-header .block-menu li.last a {
- border-bottom: 0;
-}
-/* User Login block in the header region */
-.region-header #block-user-login {
- width: auto;
-}
-.region-header #block-user-login .content {
- margin-top: 2px;
-}
-.region-header #block-user-login .form-item {
- float: left; /* LTR */
- margin: 0;
- padding: 0;
-}
-.region-header #block-user-login div.item-list,
-.region-header #block-user-login div.description {
- font-size: 0.916em;
- margin: 0;
-}
-.region-header #block-user-login div.item-list {
- clear: both;
-}
-.region-header #block-user-login div.description {
- display: inline;
-}
-.region-header #block-user-login .item-list ul {
- padding: 0;
- line-height: 1;
-}
-.region-header #block-user-login .item-list li {
- list-style: none;
- float: left; /* LTR */
- padding: 3px 0 1px;
-}
-.region-header #block-user-login .item-list li.last {
- padding-left: 0.5em; /* LTR */
-}
-.region-header #block-user-login ul.openid-links li.last {
- padding-left: 0; /* LTR */
-}
-.region-header #user-login-form li.openid-link a,
-.region-header #user-login li.openid-link a {
- padding-left: 20px; /* LTR */
-}
-.region-header #block-user-login .form-actions {
- margin: 4px 0 0;
- padding: 0;
- clear: both;
-}
-.region-header #block-user-login input.form-submit {
- border: 1px solid;
- border-color: #ccc;
- border-color: rgba(255, 255, 255, 0.5);
- background: #eee;
- background: rgba(255, 255, 255, 0.7);
- margin: 4px 0;
- padding: 3px 8px;
-}
-.region-header #block-user-login input.form-submit:hover,
-.region-header #block-user-login input.form-submit:focus {
- background: #fff;
- background: rgba(255, 255, 255, 0.9);
-}
-/* Search block in region header. */
-.region-header #block-search-form {
- width: 208px;
-}
-.region-header #block-search-form .form-text {
- width: 154px;
-}
-/* Language switcher block in region header. */
-.region-header .block-locale ul li {
- display: inline;
- padding: 0 0.5em;
-}
-
-/* --------------- Main Menu ------------ */
-
-#main-menu {
- clear: both;
-}
-#main-menu-links {
- font-size: 0.929em;
- margin: 0;
- padding: 0 15px;
-}
-#main-menu-links li {
- float: left; /* LTR */
- list-style: none;
- padding: 0 1px;
- margin: 0 1px;
-}
-#main-menu-links a {
- color: #333;
- background: #ccc;
- background: rgba(255, 255, 255, 0.7);
- float: left; /* LTR */
- height: 2.4em;
- line-height: 2.4em;
- padding: 0 0.8em;
- text-decoration: none;
- text-shadow: 0 1px #eee;
- -khtml-border-radius-topleft: 8px;
- -khtml-border-radius-topright: 8px;
- -moz-border-radius-topleft: 8px;
- -moz-border-radius-topright: 8px;
- -webkit-border-top-left-radius: 8px;
- -webkit-border-top-right-radius: 8px;
- border-top-left-radius: 8px;
- border-top-right-radius: 8px;
-}
-#main-menu-links a:hover,
-#main-menu-links a:focus {
- background: #f6f6f2;
- background: rgba(255, 255, 255, 0.95);
-}
-#main-menu-links a:active {
- background: #b3b3b3;
- background: rgba(255, 255, 255, 1);
-}
-#main-menu-links li a.active {
- border-bottom: none;
-}
-.featured #main-menu-links li a:active,
-.featured #main-menu-links li a.active {
- background: #f0f0f0;
- background: rgba(240, 240, 240, 1.0);
-}
-
-/* --------------- Secondary Menu ------------ */
-
-#secondary-menu-links {
- float: right; /* LTR */
- font-size: 0.929em;
- margin: 10px 10px 0;
-}
-#secondary-menu-links a:hover,
-#secondary-menu-links a:focus {
- text-decoration: underline;
-}
-
-/* ------------------- Main ------------------- */
-
-#main {
- margin-top: 20px;
- margin-bottom: 40px;
-}
-
-/* ----------------- Featured ----------------- */
-
-#featured {
- text-align: center;
- font-size: 1.643em;
- font-weight: normal;
- line-height: 1.4;
- padding: 20px 0 45px;
- margin: 0;
- background: #f0f0f0;
- background: rgba(30, 50, 10, 0.08);
- border-bottom: 1px solid #e7e7e7;
- text-shadow: 1px 1px #fff;
-}
-#featured h2 {
- font-size: 1.174em;
- line-height: 1;
-}
-#featured p {
- margin: 0;
- padding: 0;
-}
-
-/* --------------- Highlighted ---------------- */
-
-#highlighted {
- border-bottom: 1px solid #d3d7d9;
- font-size: 120%;
-}
-
-/* ------------------- Help ------------------- */
-
-.region-help {
- border: 1px solid #d3d7d9;
- padding: 0 1.5em;
- margin-bottom: 30px;
-}
-
-/* ----------------- Content ------------------ */
-
-.content {
- margin-top: 10px;
-}
-h1#page-title {
- font-size: 2em;
- line-height: 1;
-}
-#content h2 {
- margin-bottom: 2px;
- font-size: 1.429em;
- line-height: 1.4;
-}
-.node .content {
- font-size: 1.071em;
-}
-.node-teaser .content {
- font-size: 1em;
-}
-.node-teaser h2 {
- margin-top: 0;
- padding-top: 0.5em;
-}
-.node-teaser h2 a {
- color: #181818;
-}
-.node-teaser {
- border-bottom: 1px solid #d3d7d9;
- margin-bottom: 30px;
- padding-bottom: 15px;
-}
-.node-sticky {
- background: #f9f9f9;
- background: rgba(0, 0, 0, 0.024);
- border: 1px solid #d3d7d9;
- padding: 0 15px 15px;
-}
-.node-full {
- background: none;
- border: none;
- padding: 0;
-}
-.node-teaser .content {
- clear: none;
- line-height: 1.6;
-}
-.meta {
- font-size: 0.857em;
- color: #68696b;
- margin-bottom: -5px;
-}
-.submitted .user-picture img {
- float: left; /* LTR */
- height: 20px;
- margin: 1px 5px 0 0; /* LTR */
-}
-.field-type-taxonomy-term-reference {
- margin: 0 0 1.2em;
-}
-.field-type-taxonomy-term-reference .field-label {
- font-weight: normal;
- margin: 0;
- padding-right: 5px; /* LTR */
-}
-.field-type-taxonomy-term-reference .field-label,
-.field-type-taxonomy-term-reference ul.links {
- font-size: 0.8em;
-}
-.node-teaser .field-type-taxonomy-term-reference .field-label,
-.node-teaser .field-type-taxonomy-term-reference ul.links {
- font-size: 0.821em;
-}
-.field-type-taxonomy-term-reference ul.links {
- padding: 0;
- margin: 0;
- list-style: none;
-}
-.field-type-taxonomy-term-reference ul.links li {
- float: left; /* LTR */
- padding: 0 1em 0 0; /* LTR */
- white-space: nowrap;
-}
-.link-wrapper {
- text-align: right;
-}
-.field-type-image img,
-.user-picture img {
- margin: 0 0 1em;
-}
-ul.links {
- color: #68696b;
- font-size: 0.821em;
-}
-.node-unpublished {
- margin: -20px -15px 0;
- padding: 20px 15px 0;
-}
-.node-unpublished .comment-text .comment-arrow {
- border-left: 1px solid #fff4f4;
- border-right: 1px solid #fff4f4;
-}
-
-/* ----------------- Comments ----------------- */
-
-.comment h2.title {
- margin-bottom: 1em;
-}
-.comment div.user-picture img {
- margin-left: 0; /* LTR */
-}
-.comment {
- margin-bottom: 20px;
- display: table;
- vertical-align: top;
-}
-.comment .attribution {
- display: table-cell;
- padding: 0 30px 0 0; /* LTR */
- vertical-align: top;
- overflow: hidden;
-}
-.comment .attribution img {
- margin: 0;
- border: 1px solid #d3d7d9;
-}
-.comment .attribution .username {
- white-space: nowrap;
-}
-.comment .submitted p {
- margin: 4px 0;
- font-size: 1.071em;
- line-height: 1.2;
-}
-.comment .submitted .comment-time {
- font-size: 0.786em;
- color: #68696b;
-}
-.comment .submitted .comment-permalink {
- font-size: 0.786em;
-}
-.comment .content {
- font-size: 0.929em;
- line-height: 1.6;
-}
-.comment .comment-arrow {
- background: url(../images/comment-arrow.gif) no-repeat 0 center transparent; /* LTR */
- border-left: 1px solid;
- border-right: 1px solid;
- height: 40px;
- margin-left: -47px; /* LTR */
- margin-top: 10px;
- position: absolute;
- width: 20px;
-}
-.comment .comment-text {
- padding: 10px 25px;
- border: 1px solid #d3d7d9;
- display: table-cell;
- vertical-align: top;
- position: relative;
- width: 100%;
-}
-.comment .indented {
- margin-left: 40px; /* LTR */
-}
-.comment ul.links {
- padding: 0 0 0.25em 0;
-}
-.comment ul.links li {
- padding: 0 0.5em 0 0; /* LTR */
-}
-.comment-unpublished {
- margin-right: 5px; /* LTR */
- padding: 5px 2px 5px 5px; /* LTR */
-}
-.comment-unpublished .comment-text .comment-arrow {
- border-left: 1px solid #fff4f4;
- border-right: 1px solid #fff4f4;
-}
-
-/* ------------------ Sidebar ----------------- */
-.sidebar .section {
- padding-top: 10px;
-}
-.sidebar .block {
- border: 1px solid;
- padding: 15px 20px;
- margin: 0 0 20px;
-}
-.sidebar h2 {
- margin: 0 0 0.5em;
- border-bottom: 1px solid #d6d6d6;
- padding-bottom: 5px;
- text-shadow: 0 1px 0 #fff;
- font-size: 1.071em;
- line-height: 1.2;
-}
-.sidebar .block .content {
- font-size: 0.914em;
- line-height: 1.4;
-}
-.sidebar tbody {
- border: none;
-}
-.sidebar tr.even,
-.sidebar tr.odd {
- background: none;
- border-bottom: 1px solid #d6d6d6;
-}
-
-/* ----------------- Triptych ----------------- */
-
-#triptych-wrapper {
- background-color: #f0f0f0;
- background: rgba(30, 50, 10, 0.08);
- border-top: 1px solid #e7e7e7;
-}
-#triptych h2 {
- color: #000;
- font-size: 1.714em;
- margin-bottom: 0.8em;
- text-shadow: 0 1px 0 #fff;
- text-align: center;
- line-height: 1;
-}
-#triptych .block {
- margin-bottom: 2em;
- padding-bottom: 2em;
- border-bottom: 1px solid #dfdfdf;
- line-height: 1.3;
-}
-#triptych .block.last {
- border-bottom: none;
-}
-#triptych .block ul li,
-#triptych .block ol li {
- list-style: none;
-}
-#triptych .block ul,
-#triptych .block ol {
- padding-left: 0;
-}
-#triptych #block-user-login .form-text {
- width: 185px;
-}
-#triptych #block-user-online p {
- margin-bottom: 0;
-}
-#triptych #block-node-syndicate h2 {
- overflow: hidden;
- width: 0;
- height: 0;
-}
-#triptych-last #block-node-syndicate {
- text-align: right;
-}
-#triptych #block-search-form .form-type-textfield input {
- width: 185px;
-}
-#triptych-middle #block-system-powered-by {
- text-align: center;
-}
-#triptych-last #block-system-powered-by {
- text-align: right;
-}
-
-/* ------------------ Footer ------------------ */
-
-#footer-wrapper {
- color: #c0c0c0;
- color: rgba(255, 255, 255, 0.65);
- font-size: 0.857em;
-}
-#footer-wrapper a {
- color: #fcfcfc;
- color: rgba(255, 255, 255, 0.8);
-}
-#footer-wrapper a:hover,
-#footer-wrapper a:focus {
- color: #fefefe;
- color: rgba(255, 255, 255, 0.95);
- text-decoration: underline;
-}
-#footer-wrapper .block {
- margin: 20px 0;
- border: 1px solid #444;
- border-color: rgba(255, 255, 255, 0.1);
- padding: 10px;
-}
-#footer-columns .block-menu,
-#footer .block {
- margin: 0;
- padding: 0;
- border: none;
-}
-#footer .block {
- margin: 0.5em 0;
-}
-#footer .block .content {
- padding: 0.5em 0;
- margin-top: 0;
-}
-#footer .block h2 {
- margin: 0;
-}
-#footer-columns h2 {
- border-bottom: 1px solid #555;
- border-color: rgba(255, 255, 255, 0.15);
- font-size: 1em;
- margin-bottom: 0;
- padding-bottom: 3px;
- text-transform: uppercase;
-}
-#footer-columns .content {
- margin-top: 0;
-}
-#footer-columns p {
- margin-top: 1em;
-}
-#footer-columns .content ul {
- list-style: none;
- padding-left: 0; /* LTR */
- margin-left: 0;
-}
-#footer-columns .content li {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-#footer-columns .content li a {
- display: block;
- border-bottom: 1px solid #555;
- border-color: rgba(255, 255, 255, 0.15);
- line-height: 1.2;
- padding: 0.8em 2px 0.8em 20px; /* LTR */
- text-indent: -15px;
-}
-#footer-columns .content li a:hover,
-#footer-columns .content li a:focus {
- background-color: #1f1f21;
- background-color: rgba(255, 255, 255, 0.05);
- text-decoration: none;
-}
-#footer {
- letter-spacing: 0.2px;
- margin-top: 30px;
- border-top: 1px solid #555;
- border-color: rgba(255, 255, 255, 0.15);
-}
-#footer .region {
- margin-top: 20px;
-}
-#footer .block {
- clear: both;
-}
-#footer ul,
-#footer li {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-#footer li a {
- float: left; /* LTR */
- padding: 0 12px;
- display: block;
- border-right: 1px solid #555; /* LTR */
- border-color: rgba(255, 255, 255, 0.15);
-}
-#footer li.first a {
- padding-left: 0; /* LTR */
-}
-#footer li.last a {
- padding-right: 0; /* LTR */
- border-right: none; /* LTR */
-}
-#footer-wrapper tr.odd {
- background-color: transparent;
-}
-#footer-wrapper tr.even {
- background-color: #2c2c2c;
- background-color: rgba(0, 0, 0, 0.15);
-}
-
-/* --------------- System Tabs --------------- */
-
-.tabs {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- margin-bottom: 20px;
-}
-.tabs ul.primary {
- padding: 0 3px;
- margin: 0;
- overflow: hidden;
- border: none;
- background: transparent url(../images/tabs-border.png) repeat-x left bottom;
-}
-.tabs ul.primary li {
- display: block;
- float: left; /* LTR */
- vertical-align: bottom;
- margin: 0 5px 0 0; /* LTR */
-}
-.tabs ul.primary li.active a {
- border-bottom: 1px solid #ffffff;
-}
-.tabs ul.primary li a {
- color: #000;
- background-color: #ededed;
- height: 1.8em;
- line-height: 1.9;
- display: block;
- font-size: 0.929em;
- float: left; /* not LTR */
- padding: 0 10px 3px;
- margin: 0;
- text-shadow: 0 1px 0 #fff;
- -khtml-border-radius-topleft: 6px;
- -moz-border-radius-topleft: 6px;
- -webkit-border-top-left-radius: 6px;
- border-top-left-radius: 6px;
- -khtml-border-radius-topright: 6px;
- -moz-border-radius-topright: 6px;
- -webkit-border-top-right-radius: 6px;
- border-top-right-radius: 6px;
-}
-.tabs ul.primary li.active a {
- background-color: #ffffff;
-}
-.tabs ul.secondary {
- border-bottom: none;
- padding: 0.5em 0;
-}
-.tabs ul.secondary li {
- display: block;
- float: left; /* LTR */
-}
-.tabs ul.secondary li:last-child {
- border-right: none; /* LTR */
-}
-.tabs ul.secondary li:first-child {
- padding-left: 0; /* LTR */
-}
-.tabs ul.secondary li a {
- padding: 0.25em 0.5em;
-}
-.tabs ul.secondary li a.active {
- background: #f2f2f2;
- border-bottom: none;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- -khtml-border-radius: 5px;
- border-radius: 5px;
-}
-ul.action-links {
- list-style: none;
- margin: 5px;
- padding: 0.5em 1em;
-}
-ul.action-links li {
- display: inline-block;
- margin-left: 10px;
-}
-ul.action-links li a {
- padding-left: 15px;
- background: url(../images/add.png) no-repeat left center;
- margin: 0 10px 0 0;
-}
-
-/* ---------------- Messages ----------------- */
-
-#messages {
- padding: 20px 0 5px;
- margin: 0 auto;
-}
-.featured #messages {
- background: #f0f0f0;
- background: rgba(30, 50, 10, 0.08);
-}
-div.messages {
- margin: 8px 15px;
-}
-
-/* -------------- Breadcrumbs -------------- */
-
-.breadcrumb {
- font-size: 0.929em;
-}
-
-/* -------------- User Profile -------------- */
-
-.profile .user-picture {
- float: none;
-}
-
-/* -------------- Password Meter ------------- */
-
-.confirm-parent,
-.password-parent {
- width: 34em;
-}
-.password-parent,
-div.form-item div.password-suggestions {
- position: relative;
-}
-.password-strength-text,
-.password-strength-title,
-div.password-confirm {
- font-size: 0.82em;
-}
-.password-strength-text {
- margin-top: 0.2em;
-}
-div.password-confirm {
- margin-top: 2.2em;
- width: 20.73em;
-}
-
-/* ---------------- Buttons ---------------- */
-
-input.form-submit,
-a.button {
- background: #fff url(../images/buttons.png) 0 0 repeat-x;
- border: 1px solid #e4e4e4;
- border-bottom: 1px solid #b4b4b4;
- border-left-color: #d2d2d2;
- border-right-color: #d2d2d2;
- color: #3a3a3a;
- cursor: pointer;
- font-size: 0.929em;
- font-weight: normal;
- text-align: center;
- margin-bottom: 1em;
- margin-right: 0.6em; /* LTR */
- padding: 4px 17px;
- -khtml-border-radius: 15px;
- -moz-border-radius: 20px;
- -webkit-border-radius: 15px;
- border-radius: 15px;
-}
-a.button:link,
-a.button:visited,
-a.button:hover,
-a.button:focus,
-a.button:active {
- text-decoration: none;
- color: #5a5a5a;
-}
-
-/* -------------- Form Elements ------------- */
-
-fieldset {
- background: #ffffff;
- border: 1px solid #cccccc;
- margin-top: 10px;
- margin-bottom: 32px;
- padding: 0 0 10px;
- position: relative;
- top: 12px; /* Offsets the negative margin of legends */
- -khtml-border-radius: 4px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-.fieldset-wrapper {
- margin-top: 25px;
-}
-.node-form .vertical-tabs .fieldset-wrapper {
- margin-top: 0;
-}
-.filter-wrapper {
- top: 0;
- padding: 1em 0 0.2em;
- -khtml-border-radius-topright: 0;
- -khtml-border-radius-topleft: 0;
- -moz-border-radius-topright: 0;
- -moz-border-radius-topleft: 0;
- -webkit-border-top-left-radius: 0;
- -webkit-border-top-right-radius: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-.filter-help a {
- font-size: 0.857em;
- padding: 2px 20px 0;
-}
-.filter-wrapper .form-item label {
- margin-right: 10px;
-}
-.filter-wrapper .form-item {
- padding: 0 0 0.5em 0.5em;
-}
-.filter-guidelines {
- padding: 0 1.5em 0 0.5em;
-}
-fieldset.collapsed {
- background: transparent;
- -khtml-border-radius: 0;
- -moz-border-radius: 0;
- -webkit-border-radius: 0;
- border-radius: 0;
-}
-fieldset legend {
- background: #dbdbdb;
- border: 1px solid #ccc;
- border-bottom: none;
- color: #3b3b3b;
- display: block;
- height: 2em;
- left: -1px; /* LTR */
- font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif;
- line-height: 2;
- padding: 0;
- position: absolute;
- text-indent: 10px;
- text-shadow: 0 1px 0 #fff;
- top: -12px;
- width: 100%;
- -khtml-border-radius-topleft: 4px;
- -moz-border-radius-topleft: 4px;
- -webkit-border-top-left-radius: 4px;
- border-top-left-radius: 4px;
- -khtml-border-radius-topright: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-right-radius: 4px;
- border-top-right-radius: 4px;
-}
-fieldset.collapsed legend {
- -khtml-border-radius: 4px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-fieldset legend a {
- color: #3b3b3b;
-}
-fieldset legend a:hover,
-fieldset legend a:focus,
-fieldset legend a:active {
- color: #000;
-}
-fieldset .fieldset-wrapper {
- padding: 0 10px;
-}
-fieldset .fieldset-description {
- margin-top: 5px;
- margin-bottom: 1em;
- line-height: 1.4;
- color: #3c3c3c;
- font-style: italic;
-}
-input {
- margin: 2px 0;
- padding: 4px;
-}
-input,
-textarea {
- font-size: 0.929em;
-}
-textarea {
- line-height: 1.5;
-}
-textarea.form-textarea,
-select.form-select {
- padding: 4px;
-}
-input.form-text,
-textarea.form-textarea,
-select.form-select {
- border: 1px solid #ccc;
-}
-input.form-submit:hover,
-input.form-submit:focus {
- background: #dedede;
-}
-.password-suggestions ul li {
- margin-left: 1.2em; /* LTR */
-}
-.form-item {
- margin-bottom: 1em;
- margin-top: 2px;
-}
-.form-item label {
- font-size: 0.929em;
-}
-.form-type-radio label,
-.form-type-checkbox label {
- margin-left: 4px;
-}
-.form-type-radio .description,
-.form-type-checkbox .description {
- margin-left: 2px;
-}
-.form-actions {
- padding-top: 10px;
-}
-/* Contact Form */
-.contact-form #edit-name {
- width: 75%;
- -khtml-border-radius: 4px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-.contact-form #edit-mail {
- width: 75%;
- -khtml-border-radius: 4px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-.contact-form #edit-subject {
- width: 75%;
- -khtml-border-radius: 4px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-.contact-form #edit-message {
- width: 76.3%;
- -khtml-border-top-left-radius: 4px;
- -khtml-border-top-right-radius: 4px;
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
-}
-.contact-form .resizable-textarea .grippie {
- width: 76%;
- -khtml-border-bottom-left-radius: 4px;
- -khtml-border-bottom-right-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-bottomright: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
-}
-
-/* Disabled form elements */
-input.form-button-disabled,
-input.form-button-disabled:hover,
-input.form-button-disabled:focus,
-input.form-button-disabled:active,
-.form-disabled input,
-.form-disabled select,
-.form-disabled textarea {
- background: #ededed;
- border-color: #bbb;
- color: #717171;
-}
-.form-disabled .grippie {
- background-color: #ededed;
- border-color: #bbb;
-}
-.form-disabled label {
- color: #717171;
-}
-
-/* Comment form */
-.comment-form label {
- float: left; /* LTR */
- font-size: 0.929em;
- width: 120px;
-}
-.comment-form input,
-.comment-form .form-select {
- margin: 0;
- -khtml-border-radius: 4px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-.comment-form .form-type-textarea label {
- float: none;
-}
-.comment-form .form-item,
-.comment-form .form-radios,
-.comment-form .form-type-checkbox,
-.comment-form .form-select {
- margin-bottom: 10px;
- overflow: hidden;
-}
-.comment-form .form-type-checkbox,
-.comment-form .form-radios {
- margin-left: 120px; /* LTR */
-}
-.comment-form .form-type-checkbox label,
-.comment-form .form-radios label {
- float: none;
- margin-top: 0;
-}
-.comment-form input.form-file {
- width: auto;
-}
-.no-sidebars .comment-form .form-text {
- width: 800px;
-}
-.one-sidebar .comment-form .form-text {
- width: 500px;
-}
-.two-sidebars .comment-form .form-text {
- width: 320px;
-}
-.comment-form .form-item .description {
- font-size: 0.786em;
- line-height: 1.2;
- margin-left: 120px; /* LTR */
-}
-#content h2.comment-form {
- margin-bottom: 0.5em;
-}
-.comment-form .form-textarea {
- -khtml-border-radius-topleft: 4px;
- -khtml-border-radius-topright: 4px;
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
-}
-.comment-form fieldset.filter-wrapper .fieldset-wrapper,
-.comment-form .text-format-wrapper .form-item {
- margin-top: 0;
- margin-bottom: 0;
-}
-.filter-wrapper label {
- width: auto;
- float: none;
-}
-.filter-wrapper .form-select {
- min-width: 120px;
-}
-.comment-form fieldset.filter-wrapper .tips {
- font-size: 0.786em;
-}
-#comment-body-add-more-wrapper .form-type-textarea label {
- margin-bottom: 0.4em;
-}
-#edit-actions input {
- margin-right: 0.6em; /* LTR */
-}
-
-/* -------------- Other Overrides ------------- */
-
-div.password-suggestions {
- border: 0;
-}
-.ui-widget-overlay {
- background: #222222;
- opacity: 0.7;
-}
-div.vertical-tabs .vertical-tabs-panes fieldset.vertical-tabs-pane {
- padding: 1em;
-}
-#forum .name {
- font-size: 1.083em;
-}
-#forum .description {
- font-size: 1em;
-}
-
-/* --------------- Search Form ---------------- */
-
-#block-search-form {
- padding-bottom: 7px;
-}
-#block-search-form .content {
- margin-top: 0;
-}
-#search-form input#edit-keys,
-#block-search-form .form-item-search-block-form input {
- float: left; /* LTR */
- font-size: 1em;
- height: 1.143em;
- margin-right: 5px;
- width: 9em;
-}
-#search-block-form input.form-submit,
-#search-form input.form-submit {
- margin-left: 0;
- margin-right: 0;
- height: 25px;
- width: 34px;
- padding: 0;
- cursor: pointer;
- text-indent: -9999px;
- border-color: #e4e4e4 #d2d2d2 #b4b4b4;
- background: url(../images/search-button.png) no-repeat center top;
- overflow: hidden;
-}
-#search-block-form input.form-submit:hover,
-#search-block-form input.form-submit:focus,
-#search-form input.form-submit:hover,
-#search-form input.form-submit:focus {
- background-position: center bottom;
-}
-#search-form .form-item-keys label {
- display: block;
-}
-
-/* --------------- Search Results ---------------- */
-ol.search-results {
- padding-left: 0;
-}
-.search-results li {
- border-bottom: 1px solid #d3d7d9;
- padding-bottom: 0.4285em;
- margin-bottom: 0.5em;
-}
-.search-results li:last-child {
- border-bottom: none;
- padding-bottom: 0;
- margin-bottom: 1em;
-}
-.search-results .search-snippet-info {
- padding-left: 0;
-}
-
-/* -------------- Shortcut Links -------------- */
-
-.shortcut-wrapper {
- margin: 2.2em 0 1.1em 0; /* Same as usual h1#page-title margin. */
-}
-.shortcut-wrapper h1#page-title {
- float: left; /* LTR */
- margin: 0;
-}
-div.add-or-remove-shortcuts {
- padding-top: 0.9em;
-}
-.overlay div.add-or-remove-shortcuts {
- padding-top: 0.8em;
-}
-
-/* ---------- Admin-specific Theming ---------- */
-
-.page-admin #content img {
- margin-right: 15px; /* LTR */
-}
-.page-admin #content .simpletest-image img {
- margin: 0;
-}
-.page-admin-structure-block-demo .block-region {
- background: #ffff66;
- border: 1px dotted #9f9e00;
- color: #000;
- font: 90% "Lucida Grande", "Lucida Sans Unicode", sans-serif;
- margin: 5px;
- padding: 5px;
- text-align: center;
- text-shadow: none;
-}
-.page-admin-structure-block-demo #featured .block-region {
- font-size: 0.55em;
-}
-.page-admin-structure-block-demo #header .block-region {
- width: 500px;
-}
-.page-admin #admin-dblog img {
- margin: 0 5px;
-}
-/* Fix spacing when Seven is used in the overlay. */
-#system-theme-settings fieldset {
- padding: 0;
-}
-#system-theme-settings fieldset .fieldset-legend {
- margin-top: 0;
-}
-/* Configuration. */
-div.admin .right,
-div.admin .left {
- width: 49%;
- margin: 0;
-}
-div.admin-panel {
- background: #fbfbfb;
- border: 1px solid #ccc;
- margin: 10px 0;
- padding: 0 5px 5px;
-}
-div.admin-panel h3 {
- margin: 16px 7px;
-}
-div.admin-panel dt {
- border-top: 1px solid #ccc;
- padding: 7px 0 0;
-}
-div.admin-panel dd {
- margin: 0 0 10px;
-}
-div.admin-panel .description {
- margin: 0 0 14px 7px;
-}
-
-/* ---------- Overlay layout styles ----------- */
-
-.overlay #main,
-.overlay #content {
- width: auto;
- float: none;
-}
-.overlay #page {
- padding: 0 2em;
-}
-.overlay .region-page-top,
-.overlay #header,
-.overlay #page-title,
-.overlay #featured,
-.overlay #sidebar-first,
-.overlay #triptych-wrapper,
-.overlay #footer-wrapper {
- display: none;
-}
-.overlay-processed .field-type-image {
- display: block;
- float: none;
-}
-.overlay #messages {
- width: auto;
-}
-
-/* ---------- Poll ----------- */
-
-.node .poll {
- margin: 2em 0;
-}
-.node .poll #edit-choice {
- margin: 0 0 1.5em;
-}
-.poll .vote-form {
- text-align: left; /* LTR */
-}
-.poll .vote-form .choices {
- margin: 0;
-}
-.poll .percent {
- font-size: 0.857em;
- font-style: italic;
- margin-bottom: 3em;
- margin-top: -3.2em;
- float: right;
- text-align: right;
-}
-.poll .text {
- clear: right;
- margin-right: 2.25em;
-}
-.poll .total {
- font-size: 0.929em;
- font-style: italic;
- text-align: right; /* LTR */
- clear: both;
-}
-.node .poll {
- margin: 1.8em 0 0;
-}
-.node .poll .text {
- margin-right: 6.75em;
-}
-.node .poll #edit-choice {
- margin: 0 0 1.2em;
-}
-.poll .bar .foreground {
- background-color: #666;
-}
-#footer-wrapper .poll .bar {
- background-color: #666;
-}
-#footer-wrapper .poll .bar .foreground {
- background-color: #ddd;
-}
diff --git a/themes/bartik/images/add.png b/themes/bartik/images/add.png
deleted file mode 100644
index 3e167eb..0000000
Binary files a/themes/bartik/images/add.png and /dev/null differ
diff --git a/themes/bartik/images/buttons.png b/themes/bartik/images/buttons.png
deleted file mode 100644
index c4b6df5..0000000
Binary files a/themes/bartik/images/buttons.png and /dev/null differ
diff --git a/themes/bartik/images/comment-arrow-rtl.gif b/themes/bartik/images/comment-arrow-rtl.gif
deleted file mode 100644
index b597e65..0000000
Binary files a/themes/bartik/images/comment-arrow-rtl.gif and /dev/null differ
diff --git a/themes/bartik/images/comment-arrow.gif b/themes/bartik/images/comment-arrow.gif
deleted file mode 100644
index ce48d0c..0000000
Binary files a/themes/bartik/images/comment-arrow.gif and /dev/null differ
diff --git a/themes/bartik/images/search-button.png b/themes/bartik/images/search-button.png
deleted file mode 100644
index c6e820a..0000000
Binary files a/themes/bartik/images/search-button.png and /dev/null differ
diff --git a/themes/bartik/images/tabs-border.png b/themes/bartik/images/tabs-border.png
deleted file mode 100644
index 25f9535..0000000
Binary files a/themes/bartik/images/tabs-border.png and /dev/null differ
diff --git a/themes/bartik/logo.png b/themes/bartik/logo.png
deleted file mode 100644
index 0ada453..0000000
Binary files a/themes/bartik/logo.png and /dev/null differ
diff --git a/themes/bartik/screenshot.png b/themes/bartik/screenshot.png
deleted file mode 100644
index 34734ef..0000000
Binary files a/themes/bartik/screenshot.png and /dev/null differ
diff --git a/themes/bartik/template.php b/themes/bartik/template.php
deleted file mode 100644
index 7466e05..0000000
--- a/themes/bartik/template.php
+++ /dev/null
@@ -1,156 +0,0 @@
- CSS_THEME, 'browsers' => array('IE' => 'lte IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
- drupal_add_css(path_to_theme() . '/css/ie6.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'IE 6', '!IE' => FALSE), 'preprocess' => FALSE));
-}
-
-/**
- * Override or insert variables into the page template for HTML output.
- */
-function bartik_process_html(&$variables) {
- // Hook into color.module.
- if (module_exists('color')) {
- _color_html_alter($variables);
- }
-}
-
-/**
- * Override or insert variables into the page template.
- */
-function bartik_process_page(&$variables) {
- // Hook into color.module.
- if (module_exists('color')) {
- _color_page_alter($variables);
- }
- // Always print the site name and slogan, but if they are toggled off, we'll
- // just hide them visually.
- $variables['hide_site_name'] = theme_get_setting('toggle_name') ? FALSE : TRUE;
- $variables['hide_site_slogan'] = theme_get_setting('toggle_slogan') ? FALSE : TRUE;
- if ($variables['hide_site_name']) {
- // If toggle_name is FALSE, the site_name will be empty, so we rebuild it.
- $variables['site_name'] = filter_xss_admin(variable_get('site_name', 'Drupal'));
- }
- if ($variables['hide_site_slogan']) {
- // If toggle_site_slogan is FALSE, the site_slogan will be empty, so we rebuild it.
- $variables['site_slogan'] = filter_xss_admin(variable_get('site_slogan', ''));
- }
- // Since the title and the shortcut link are both block level elements,
- // positioning them next to each other is much simpler with a wrapper div.
- if (!empty($variables['title_suffix']['add_or_remove_shortcut']) && $variables['title']) {
- // Add a wrapper div using the title_prefix and title_suffix render elements.
- $variables['title_prefix']['shortcut_wrapper'] = array(
- '#markup' => '',
- '#weight' => 100,
- );
- $variables['title_suffix']['shortcut_wrapper'] = array(
- '#markup' => '
',
- '#weight' => -99,
- );
- // Make sure the shortcut link is the first item in title_suffix.
- $variables['title_suffix']['add_or_remove_shortcut']['#weight'] = -100;
- }
-}
-
-/**
- * Implements hook_preprocess_maintenance_page().
- */
-function bartik_preprocess_maintenance_page(&$variables) {
- // By default, site_name is set to Drupal if no db connection is available
- // or during site installation. Setting site_name to an empty string makes
- // the site and update pages look cleaner.
- // @see template_preprocess_maintenance_page
- if (!$variables['db_is_active']) {
- $variables['site_name'] = '';
- }
- drupal_add_css(drupal_get_path('theme', 'bartik') . '/css/maintenance-page.css');
-}
-
-/**
- * Override or insert variables into the maintenance page template.
- */
-function bartik_process_maintenance_page(&$variables) {
- // Always print the site name and slogan, but if they are toggled off, we'll
- // just hide them visually.
- $variables['hide_site_name'] = theme_get_setting('toggle_name') ? FALSE : TRUE;
- $variables['hide_site_slogan'] = theme_get_setting('toggle_slogan') ? FALSE : TRUE;
- if ($variables['hide_site_name']) {
- // If toggle_name is FALSE, the site_name will be empty, so we rebuild it.
- $variables['site_name'] = filter_xss_admin(variable_get('site_name', 'Drupal'));
- }
- if ($variables['hide_site_slogan']) {
- // If toggle_site_slogan is FALSE, the site_slogan will be empty, so we rebuild it.
- $variables['site_slogan'] = filter_xss_admin(variable_get('site_slogan', ''));
- }
-}
-
-/**
- * Override or insert variables into the node template.
- */
-function bartik_preprocess_node(&$variables) {
- if ($variables['view_mode'] == 'full' && node_is_page($variables['node'])) {
- $variables['classes_array'][] = 'node-full';
- }
-}
-
-/**
- * Override or insert variables into the block template.
- */
-function bartik_preprocess_block(&$variables) {
- // In the header region visually hide block titles.
- if ($variables['block']->region == 'header') {
- $variables['title_attributes_array']['class'][] = 'element-invisible';
- }
-}
-
-/**
- * Implements theme_menu_tree().
- */
-function bartik_menu_tree($variables) {
- return '';
-}
-
-/**
- * Implements theme_field__field_type().
- */
-function bartik_field__taxonomy_term_reference($variables) {
- $output = '';
-
- // Render the label, if it's not hidden.
- if (!$variables['label_hidden']) {
- $output .= '' . $variables['label'] . ': ';
- }
-
- // Render the items.
- $output .= ($variables['element']['#label_display'] == 'inline') ? '' : '';
- foreach ($variables['items'] as $delta => $item) {
- $output .= '' . drupal_render($item) . ' ';
- }
- $output .= ' ';
-
- // Render the top-level DIV.
- $output = '' . $output . '
';
-
- return $output;
-}
diff --git a/themes/bartik/templates/comment-wrapper.tpl.php b/themes/bartik/templates/comment-wrapper.tpl.php
deleted file mode 100644
index c0ca74b..0000000
--- a/themes/bartik/templates/comment-wrapper.tpl.php
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
diff --git a/themes/bartik/templates/comment.tpl.php b/themes/bartik/templates/comment.tpl.php
deleted file mode 100644
index d64487d..0000000
--- a/themes/bartik/templates/comment.tpl.php
+++ /dev/null
@@ -1,105 +0,0 @@
-created variable.
- * - $changed: Formatted date and time for when the comment was last changed.
- * Preprocess functions can reformat it by calling format_date() with the
- * desired parameters on the $comment->changed variable.
- * - $new: New comment marker.
- * - $permalink: Comment permalink.
- * - $submitted: Submission information created from $author and $created during
- * template_preprocess_comment().
- * - $picture: Authors picture.
- * - $signature: Authors signature.
- * - $status: Comment status. Possible values are:
- * comment-unpublished, comment-published or comment-preview.
- * - $title: Linked title.
- * - $classes: String of classes that can be used to style contextually through
- * CSS. It can be manipulated through the variable $classes_array from
- * preprocess functions. The default values can be one or more of the following:
- * - comment: The current template type, i.e., "theming hook".
- * - comment-by-anonymous: Comment by an unregistered user.
- * - comment-by-node-author: Comment by the author of the parent node.
- * - comment-preview: When previewing a new or edited comment.
- * The following applies only to viewers who are registered users:
- * - comment-unpublished: An unpublished comment visible only to administrators.
- * - comment-by-viewer: Comment by the user currently viewing the page.
- * - comment-new: New comment since last the visit.
- * - $title_prefix (array): An array containing additional output populated by
- * modules, intended to be displayed in front of the main title tag that
- * appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- * modules, intended to be displayed after the main title tag that appears in
- * the template.
- *
- * These two variables are provided for context:
- * - $comment: Full comment object.
- * - $node: Node object the comments are attached to.
- *
- * Other variables:
- * - $classes_array: Array of html class attribute values. It is flattened
- * into a string within the variable $classes.
- *
- * @see template_preprocess()
- * @see template_preprocess_comment()
- * @see template_process()
- * @see theme_comment()
- */
-?>
-
diff --git a/themes/bartik/templates/maintenance-page.tpl.php b/themes/bartik/templates/maintenance-page.tpl.php
deleted file mode 100644
index 6deef1e..0000000
--- a/themes/bartik/templates/maintenance-page.tpl.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
->
-
-
-
-
-
-
-
diff --git a/themes/bartik/templates/node.tpl.php b/themes/bartik/templates/node.tpl.php
deleted file mode 100644
index df5b454..0000000
--- a/themes/bartik/templates/node.tpl.php
+++ /dev/null
@@ -1,124 +0,0 @@
-body becomes $body. When needing to
- * access a field's raw values, developers/themers are strongly encouraged to
- * use these variables. Otherwise they will have to explicitly specify the
- * desired field language; for example, $node->body['en'], thus overriding any
- * language negotiation rule that was previously applied.
- *
- * @see template_preprocess()
- * @see template_preprocess_node()
- * @see template_process()
- */
-?>
->
-
-
-
-
>
-
-
-
-
-
-
-
-
-
-
-
-
-
>
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/themes/bartik/templates/page.tpl.php b/themes/bartik/templates/page.tpl.php
deleted file mode 100644
index 62f58d7..0000000
--- a/themes/bartik/templates/page.tpl.php
+++ /dev/null
@@ -1,247 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/themes/engines/phptemplate/phptemplate.engine b/themes/engines/phptemplate/phptemplate.engine
deleted file mode 100644
index d293b85..0000000
--- a/themes/engines/phptemplate/phptemplate.engine
+++ /dev/null
@@ -1,25 +0,0 @@
-filename) . '/template.php';
- if (file_exists($file)) {
- include_once DRUPAL_ROOT . '/' . $file;
- }
-}
-
-/**
- * Implements hook_theme().
- */
-function phptemplate_theme($existing, $type, $theme, $path) {
- $templates = drupal_find_theme_functions($existing, array($theme));
- $templates += drupal_find_theme_templates($existing, '.tpl.php', $path);
- return $templates;
-}
diff --git a/themes/garland/color/base.png b/themes/garland/color/base.png
deleted file mode 100644
index 983e0fe..0000000
Binary files a/themes/garland/color/base.png and /dev/null differ
diff --git a/themes/garland/color/color.inc b/themes/garland/color/color.inc
deleted file mode 100644
index 1633692..0000000
--- a/themes/garland/color/color.inc
+++ /dev/null
@@ -1,220 +0,0 @@
- array(
- 'base' => t('Base color'),
- 'link' => t('Link color'),
- 'top' => t('Header top'),
- 'bottom' => t('Header bottom'),
- 'text' => t('Text color'),
- ),
- // Pre-defined color schemes.
- 'schemes' => array(
- 'default' => array(
- 'title' => t('Blue Lagoon (Default)'),
- 'colors' => array(
- 'base' => '#0072b9',
- 'link' => '#027ac6',
- 'top' => '#2385c2',
- 'bottom' => '#5ab5ee',
- 'text' => '#494949',
- ),
- ),
- 'ash' => array(
- 'title' => t('Ash'),
- 'colors' => array(
- 'base' => '#464849',
- 'link' => '#2f416f',
- 'top' => '#2a2b2d',
- 'bottom' => '#5d6779',
- ),
- ),
- 'aquamarine' => array(
- 'title' => t('Aquamarine'),
- 'colors' => array(
- 'base' => '#55c0e2',
- 'link' => '#000000',
- 'text' => '#696969',
- 'top' => '#085360',
- 'bottom' => '#007e94',
- ),
- ),
- 'chocolate' => array(
- 'title' => t('Belgian Chocolate'),
- 'colors' => array(
- 'base' => '#d5b048',
- 'link' => '#6c420e',
- 'top' => '#331900',
- 'bottom' => '#971702',
- ),
- ),
- 'bluemarine' => array(
- 'title' => t('Bluemarine'),
- 'colors' => array(
- 'base' => '#3f3f3f',
- 'link' => '#336699',
- 'text' => '#000000',
- 'top' => '#6598cb',
- 'bottom' => '#6598cb',
- ),
- ),
- 'citrus' => array(
- 'title' => t('Citrus Blast'),
- 'colors' => array(
- 'base' => '#d0cb9a',
- 'link' => '#917803',
- 'top' => '#efde01',
- 'bottom' => '#e6fb2d',
- ),
- ),
- 'cold' => array(
- 'title' => t('Cold Day'),
- 'colors' => array(
- 'base' => '#0f005c',
- 'link' => '#434f8c',
- 'text' => '#000000',
- 'top' => '#4d91ff',
- 'bottom' => '#1a1575',
- ),
- ),
- 'greenbeam' => array(
- 'title' => t('Greenbeam'),
- 'colors' => array(
- 'base' => '#c9c497',
- 'link' => '#0c7a00',
- 'top' => '#03961e',
- 'bottom' => '#7be000',
- ),
- ),
- 'mediterrano' => array(
- 'title' => t('Mediterrano'),
- 'colors' => array(
- 'base' => '#ffe23d',
- 'link' => '#a9290a',
- 'top' => '#fc6d1d',
- 'bottom' => '#a30f42',
- ),
- ),
- 'mercury' => array(
- 'title' => t('Mercury'),
- 'colors' => array(
- 'base' => '#788597',
- 'link' => '#3f728d',
- 'top' => '#a9adbc',
- 'bottom' => '#d4d4d4',
- 'text' => '#707070',
- ),
- ),
- 'nocturnal' => array(
- 'title' => t('Nocturnal'),
- 'colors' => array(
- 'base' => '#5b5fa9',
- 'link' => '#5b5faa',
- 'top' => '#0a2352',
- 'bottom' => '#9fa8d5',
- ),
- ),
- 'olivia' => array(
- 'title' => t('Olivia'),
- 'colors' => array(
- 'base' => '#7db323',
- 'link' => '#6a9915',
- 'top' => '#b5d52a',
- 'bottom' => '#7db323',
- 'text' => '#191a19',
- ),
- ),
- 'pink_plastic' => array(
- 'title' => t('Pink Plastic'),
- 'colors' => array(
- 'base' => '#12020b',
- 'link' => '#1b1a13',
- 'top' => '#f391c6',
- 'bottom' => '#f41063',
- 'text' => '#898080',
- ),
- ),
- 'shiny_tomato' => array(
- 'title' => t('Shiny Tomato'),
- 'colors' => array(
- 'base' => '#b7a0ba',
- 'link' => '#c70000',
- 'top' => '#a1443a',
- 'bottom' => '#f21107',
- 'text' => '#515d52',
- ),
- ),
- 'teal_top' => array(
- 'title' => t('Teal Top'),
- 'colors' => array(
- 'base' => '#18583d',
- 'link' => '#1b5f42',
- 'top' => '#34775a',
- 'bottom' => '#52bf90',
- 'text' => '#2d2d2d',
- ),
- ),
- ),
-
- // Images to copy over.
- 'copy' => array(
- 'images/menu-collapsed.gif',
- 'images/menu-collapsed-rtl.gif',
- 'images/menu-expanded.gif',
- 'images/menu-leaf.gif',
- ),
-
- // CSS files (excluding @import) to rewrite with new color scheme.
- 'css' => array(
- 'style.css',
- ),
-
- // Gradient definitions.
- 'gradients' => array(
- array(
- // (x, y, width, height).
- 'dimension' => array(0, 38, 760, 121),
- // Direction of gradient ('vertical' or 'horizontal').
- 'direction' => 'vertical',
- // Keys of colors to use for the gradient.
- 'colors' => array('top', 'bottom'),
- ),
- ),
-
- // Color areas to fill (x, y, width, height).
- 'fill' => array(
- 'base' => array(0, 0, 760, 568),
- 'link' => array(107, 533, 41, 23),
- ),
-
- // Coordinates of all the theme slices (x, y, width, height)
- // with their filename as used in the stylesheet.
- 'slices' => array(
- 'images/body.png' => array(0, 37, 1, 280),
- 'images/bg-bar.png' => array(202, 530, 76, 14),
- 'images/bg-bar-white.png' => array(202, 506, 76, 14),
- 'images/bg-tab.png' => array(107, 533, 41, 23),
- 'images/bg-navigation.png' => array(0, 0, 7, 37),
- 'images/bg-content-left.png' => array(40, 117, 50, 352),
- 'images/bg-content-right.png' => array(510, 117, 50, 352),
- 'images/bg-content.png' => array(299, 117, 7, 200),
- 'images/bg-navigation-item.png' => array(32, 37, 17, 12),
- 'images/bg-navigation-item-hover.png' => array(54, 37, 17, 12),
- 'images/gradient-inner.png' => array(646, 307, 112, 42),
-
- 'logo.png' => array(622, 51, 64, 73),
- 'screenshot.png' => array(0, 37, 400, 240),
- ),
-
- // Reference color used for blending. Matches the base.png's colors.
- 'blend_target' => '#ffffff',
-
- // Preview files.
- 'preview_image' => 'color/preview.png',
- 'preview_css' => 'color/preview.css',
-
- // Base file for image generation.
- 'base_image' => 'color/base.png',
-);
diff --git a/themes/garland/color/preview.css b/themes/garland/color/preview.css
deleted file mode 100644
index cf32438..0000000
--- a/themes/garland/color/preview.css
+++ /dev/null
@@ -1,60 +0,0 @@
-
-/* Positioning */
-#preview {
- overflow: hidden;
- max-width: 100%;
-}
-#preview,
-#preview #img {
- width: 600px;
- height: 371px;
-}
-#preview #gradient-0 {
- position: absolute;
- left: 0;
- right: 0;
- top: 19px;
- height: 120px;
- z-index: 2;
-}
-#preview #text {
- position: absolute;
- left: 80px;
- width: 436px;
- top: 160px;
- height: 120px;
- z-index: 4;
-}
-#preview #img {
- position: relative;
- z-index: 3;
- background-image: url(preview.png);
-}
-#preview #gradient-0 .gradient-line {
- height: 10px;
- overflow: hidden;
-}
-
-/* Basic styles to match */
-#preview {
- font: 12px/170% Verdana;
-}
-#preview h2 {
- margin: 0;
- padding: 0;
- font-weight: normal;
- font-family: Helvetica, Arial, sans-serif;
- font-size: 160%;
- line-height: 130%;
-}
-#preview p {
- margin: .5em 0;
-}
-#preview a:link,
-#preview a:visited {
- text-decoration: none;
- font-weight: normal;
-}
-#preview a:hover {
- text-decoration: underline;
-}
diff --git a/themes/garland/color/preview.png b/themes/garland/color/preview.png
deleted file mode 100644
index 0dc5bf9..0000000
Binary files a/themes/garland/color/preview.png and /dev/null differ
diff --git a/themes/garland/comment.tpl.php b/themes/garland/comment.tpl.php
deleted file mode 100644
index 952cc01..0000000
--- a/themes/garland/comment.tpl.php
+++ /dev/null
@@ -1,31 +0,0 @@
-
->
-
-
-
-
-
-
-
-
-
-
-
-
-
>
-
-
-
-
-
-
-
diff --git a/themes/garland/fix-ie-rtl.css b/themes/garland/fix-ie-rtl.css
deleted file mode 100644
index fb1901b..0000000
--- a/themes/garland/fix-ie-rtl.css
+++ /dev/null
@@ -1,61 +0,0 @@
-
-body {
- /* Center layout */
- text-align: center;
-}
-
-#squeeze {
- zoom: 1;
- direction: ltr;
-}
-
-#squeeze .left-corner {
- direction: rtl
-}
-
-#header-region,
-#wrapper #container {
- /* Reset text alignment */
- text-align: right;
-}
-
-#wrapper #container #center {
- /* Reduce amount of damage done by extremely wide content */
- overflow: hidden;
-}
-
-#wrapper #container #center .right-corner .left-corner {
- /* Because of the lack of min-height, we use height as an alternative */
- height: 400px;
-}
-
-fieldset {
- /* Don't draw backgrounds on fieldsets in IE, as they look really bad. */
- background: none;
-}
-
-/* Prevent fieldsets from shifting when changing collapsed state. */
-html.js fieldset.collapsible {
- top: -1em;
-}
-
-html.js fieldset.collapsed {
- top: 0;
- margin-bottom: 1em;
-}
-
-tr.menu-disabled {
- /* Use filter to emulate CSS3 opacity */
- filter: alpha(opacity=50);
-}
-
-#header-region {
- /* Because of the lack of min-height, we use height as an alternative */
- height: 1em;
-}
-
-#attach-hide label,
-#uploadprogress div.message {
- /* Fading elements in IE causes the text to bleed unless they have a background. */
- background-color: #ffffff;
-}
diff --git a/themes/garland/fix-ie.css b/themes/garland/fix-ie.css
deleted file mode 100644
index 1a1c131..0000000
--- a/themes/garland/fix-ie.css
+++ /dev/null
@@ -1,65 +0,0 @@
-
-body {
- /* Center layout */
- text-align: center;
-}
-
-#header-region,
-#wrapper #container {
- /* Reset text alignment */
- text-align: left; /* LTR */
-}
-
-#wrapper #container #center {
- /* Reduce amount of damage done by extremely wide content */
- overflow: hidden;
-}
-
-#wrapper #container #center .right-corner .left-corner {
- /* Because of the lack of min-height, we use height as an alternative */
- height: 400px;
-}
-
-fieldset {
- /* Don't draw backgrounds on fieldsets in IE, as they look really bad. */
- background: none;
-}
-
-div.vertical-tabs ul.vertical-tabs-list li.first {
- background-image: none;
-}
-
-ul.primary {
- /* Fix missing top margin */
- position: relative; /* LTR */
-/* top: 0.5em; */
-}
-
-/* Prevent fieldsets from shifting when changing collapsed state. */
-html.js fieldset.collapsible {
- top: -1em;
-}
-html.js fieldset.collapsed {
- top: 0;
- margin-bottom: 1em;
-}
-
-tr.menu-disabled {
- /* Use filter to emulate CSS3 opacity */
- filter: alpha(opacity=50);
-}
-
-#header-region {
- /* Because of the lack of min-height, we use height as an alternative */
- height: 1em;
-}
-
-tr.taxonomy-term-preview {
- filter: alpha(opacity=50);
-}
-
-#attach-hide label,
-#uploadprogress div.message {
- /* Fading elements in IE causes the text to bleed unless they have a background. */
- background-color: #ffffff;
-}
diff --git a/themes/garland/garland.info b/themes/garland/garland.info
deleted file mode 100644
index 307f03a..0000000
--- a/themes/garland/garland.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = Garland
-description = A multi-column theme which can be configured to modify colors and switch between fixed and fluid width layouts.
-package = Core
-version = VERSION
-core = 7.x
-stylesheets[all][] = style.css
-stylesheets[print][] = print.css
-settings[garland_width] = fluid
diff --git a/themes/garland/images/bg-bar-white.png b/themes/garland/images/bg-bar-white.png
deleted file mode 100644
index 4549a5f..0000000
Binary files a/themes/garland/images/bg-bar-white.png and /dev/null differ
diff --git a/themes/garland/images/bg-bar.png b/themes/garland/images/bg-bar.png
deleted file mode 100644
index 1fbcae0..0000000
Binary files a/themes/garland/images/bg-bar.png and /dev/null differ
diff --git a/themes/garland/images/bg-content-left.png b/themes/garland/images/bg-content-left.png
deleted file mode 100644
index 8297f74..0000000
Binary files a/themes/garland/images/bg-content-left.png and /dev/null differ
diff --git a/themes/garland/images/bg-content-right.png b/themes/garland/images/bg-content-right.png
deleted file mode 100644
index 9fe5343..0000000
Binary files a/themes/garland/images/bg-content-right.png and /dev/null differ
diff --git a/themes/garland/images/bg-content.png b/themes/garland/images/bg-content.png
deleted file mode 100644
index d55828e..0000000
Binary files a/themes/garland/images/bg-content.png and /dev/null differ
diff --git a/themes/garland/images/bg-navigation-item-hover.png b/themes/garland/images/bg-navigation-item-hover.png
deleted file mode 100644
index c783d71..0000000
Binary files a/themes/garland/images/bg-navigation-item-hover.png and /dev/null differ
diff --git a/themes/garland/images/bg-navigation-item.png b/themes/garland/images/bg-navigation-item.png
deleted file mode 100644
index 375d095..0000000
Binary files a/themes/garland/images/bg-navigation-item.png and /dev/null differ
diff --git a/themes/garland/images/bg-navigation.png b/themes/garland/images/bg-navigation.png
deleted file mode 100644
index 18b9559..0000000
Binary files a/themes/garland/images/bg-navigation.png and /dev/null differ
diff --git a/themes/garland/images/bg-tab.png b/themes/garland/images/bg-tab.png
deleted file mode 100644
index 18554b0..0000000
Binary files a/themes/garland/images/bg-tab.png and /dev/null differ
diff --git a/themes/garland/images/body.png b/themes/garland/images/body.png
deleted file mode 100644
index 84bac9f..0000000
Binary files a/themes/garland/images/body.png and /dev/null differ
diff --git a/themes/garland/images/gradient-inner.png b/themes/garland/images/gradient-inner.png
deleted file mode 100644
index ba403b3..0000000
Binary files a/themes/garland/images/gradient-inner.png and /dev/null differ
diff --git a/themes/garland/images/menu-collapsed-rtl.gif b/themes/garland/images/menu-collapsed-rtl.gif
deleted file mode 100644
index fb0beb6..0000000
Binary files a/themes/garland/images/menu-collapsed-rtl.gif and /dev/null differ
diff --git a/themes/garland/images/menu-collapsed.gif b/themes/garland/images/menu-collapsed.gif
deleted file mode 100644
index 3dc9ca7..0000000
Binary files a/themes/garland/images/menu-collapsed.gif and /dev/null differ
diff --git a/themes/garland/images/menu-expanded.gif b/themes/garland/images/menu-expanded.gif
deleted file mode 100644
index 126ccc1..0000000
Binary files a/themes/garland/images/menu-expanded.gif and /dev/null differ
diff --git a/themes/garland/images/menu-leaf.gif b/themes/garland/images/menu-leaf.gif
deleted file mode 100644
index a55d802..0000000
Binary files a/themes/garland/images/menu-leaf.gif and /dev/null differ
diff --git a/themes/garland/images/task-list.png b/themes/garland/images/task-list.png
deleted file mode 100644
index 3f9b74f..0000000
Binary files a/themes/garland/images/task-list.png and /dev/null differ
diff --git a/themes/garland/logo.png b/themes/garland/logo.png
deleted file mode 100644
index bef4865..0000000
Binary files a/themes/garland/logo.png and /dev/null differ
diff --git a/themes/garland/maintenance-page.tpl.php b/themes/garland/maintenance-page.tpl.php
deleted file mode 100644
index 75fb147..0000000
--- a/themes/garland/maintenance-page.tpl.php
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/themes/garland/node.tpl.php b/themes/garland/node.tpl.php
deleted file mode 100644
index 27808f4..0000000
--- a/themes/garland/node.tpl.php
+++ /dev/null
@@ -1,34 +0,0 @@
-
->
-
-
-
-
-
-
>
-
-
-
-
-
-
-
-
>
-
-
-
-
-
-
diff --git a/themes/garland/page.tpl.php b/themes/garland/page.tpl.php
deleted file mode 100644
index 326255c..0000000
--- a/themes/garland/page.tpl.php
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/themes/garland/print.css b/themes/garland/print.css
deleted file mode 100644
index df4f0ae..0000000
--- a/themes/garland/print.css
+++ /dev/null
@@ -1,61 +0,0 @@
-
-body,
-input,
-textarea,
-select {
- color: #000;
- background: none;
- font-family: Verdana, sans-serif;
- font-size: 11pt;
-}
-
-ul.main-menu,
-ul.secondary-menu,
-#header-region,
-.sidebar {
- display: none;
-}
-
-body.two-sidebars,
-body.sidebar-first,
-body.sidebar-second,
-body {
- width: 640px;
-}
-
-body.sidebar-first #center,
-body.sidebar-second #center,
-body.two-sidebars #center,
-body.sidebar-first #squeeze,
-body.sidebar-second #squeeze,
-body.two-sidebars #squeeze {
- margin: 0;
-}
-
-#wrapper,
-#wrapper #container .breadcrumb,
-#wrapper #container #center,
-#wrapper #container #center .right-corner,
-#wrapper #container #center .right-corner .left-corner,
-#wrapper #container #footer,
-#wrapper #container #center #squeeze {
- position: static;
- left: 0;
- padding: 0;
- margin: 0;
- width: auto;
- float: none;
- clear: both;
- background: none;
-}
-
-#wrapper #container #header {
- height: 130px;
-}
-
-#wrapper #container #header h1,
-#wrapper #container #header h1 a:link,
-#wrapper #container #header h1 a:visited {
- text-shadow: none;
- color: #000;
-}
diff --git a/themes/garland/screenshot.png b/themes/garland/screenshot.png
deleted file mode 100644
index f34590e..0000000
Binary files a/themes/garland/screenshot.png and /dev/null differ
diff --git a/themes/garland/style-rtl.css b/themes/garland/style-rtl.css
deleted file mode 100644
index 58aed57..0000000
--- a/themes/garland/style-rtl.css
+++ /dev/null
@@ -1,344 +0,0 @@
-
-html {
- direction: rtl;
-}
-
-/**
- * Generic elements
- */
-body {
- direction: rtl;
-}
-
-ul,
-.block ul,
-ol {
- padding: 0 1.5em 0 0;
-}
-
-ul.menu,
-.item-list ul {
- margin: 0.35em -0.5em 0 0;
-}
-
-ol li,
-ul li,
-ul.menu li,
-.item-list ul li,
-li.leaf {
- margin: 0.15em .5em 0.15em 0;
-}
-
-ul li.collapsed {
- list-style-image: url(images/menu-collapsed-rtl.gif);
-}
-
-ul.inline li {
- padding: 0 0 0 1em;
-}
-
-ol.task-list {
- margin-left: 0;
- margin-right: 0;
-}
-
-ol.task-list li {
- padding: 0.5em 2em 0.5em 1em;
-}
-
-ol.task-list li.active {
- background: transparent url(images/task-list.png) no-repeat 97px 50%;
-}
-
-ol.task-list li.done {
- background: transparent url(../../misc/watchdog-ok.png) no-repeat 100% 50%;
-}
-
-ol.task-list li.active {
- margin-right: 0;
- margin-left: 1em;
-}
-
-dl {
- margin: 0.5em 1.5em 1em 0;
-}
-
-dl dt {
-}
-
-dl dd {
- margin: 0 1.5em .5em 0;
-}
-
-.messages li {
- padding: 0 1.3 0 0;
-}
-
-.form-button,
-.form-submit {
- margin: 0 0 0 0.5em;
-}
-
-.region-header h2 {
- margin: 0 0 0 1em;
-}
-
-#wrapper {
- background: #edf5fa url("images/body.png") repeat-x 50% 0;
-}
-
-#branding img {
- padding-right: 0;
- padding-left: 20px;
- float: right;
-}
-
-#wrapper #container #center {
- float: right;
-}
-
-body.sidebar-first #center {
- margin-left: 0;
- margin-right: -210px;
-}
-body.sidebar-second #center {
- margin-left: -210px;
- margin-right: 0;
-}
-
-/* And add blanks left and right for the sidebars to fill */
-body.sidebar-first #squeeze {
- margin-left: 0;
- margin-right: 210px;
-}
-body.sidebar-second #squeeze {
- margin-left: 210px;
- margin-right: 0;
-}
-
-#wrapper #container .sidebar {
- float: right;
-}
-
-#sidebar-first .block {
- padding: 0 0 0 15px;
-}
-
-#sidebar-second .block {
- padding: 0 15px 0 0;
-}
-
-
-
-#sidebar-first .block-region {
- margin: 0 0 0 15px;
-}
-
-#sidebar-second .block-region {
- margin: 0 15px 0px 0;
-}
-
-/* Now we add the backgrounds for the main content shading */
-#wrapper #container #center #squeeze {
- background: #fff url("images/bg-content.png") repeat-x 50% 0;
-}
-
-#wrapper #container .breadcrumb {
- position: absolute;
- top: 15px;
- left: 0;
- right: 35px;
- z-index: 3;
-}
-
-/**
- * Primary navigation
- */
-ul.main-menu {
- float: left;
- width:70%;
-}
-
-ul.main-menu li {
- float: right;
-}
-
-/**
- * Secondary navigation
- */
-ul.secondary-menu {
- float: left;
- clear: left;
- margin-left: 16em;
-}
-
-ul.secondary-menu li {
- float: right;
-}
-
-ul.primary {
- float: right;
-}
-ul.secondary {
- clear: both;
- text-align: right;
-}
-h1.with-tabs {
- float: right;
- margin: 0 0 0 2em;
-}
-
-ul.primary li a,
-ul.primary li.active a,
-ul.primary li a:hover,
-ul.primary li a:visited,
-ul.secondary li a,
-ul.secondary li.active a,
-ul.secondary li a:hover,
-ul.secondary li a:visited {
- margin: 0 1px 0 0;
-
-}
-ul.primary li a:after {
- /* Fix Firefox 2 RTL bug. */
- content: " ";
-}
-
-ul.links li, ul.inline li {
- padding-left: 1em;
- padding-right: 0;
-}
-
-.node .links,
-.comment .links {
- text-align: right;
- padding-right: 0;
-}
-
-.user-picture,
-.comment .submitted {
- padding-left: 0;
- float: left;
- clear: left;
- padding-right: 1em;
-}
-
-.new {
- float: left;
-}
-
-.indented {
- margin-left: 0;
- margin-right: 25px;
-}
-
-html.js fieldset.collapsible .fieldset-legend {
- padding-left: 0;
- padding-right: 2em;
- background: url("images/menu-expanded.gif") no-repeat 100% 50%;
-}
-
-html.js fieldset.collapsed .fieldset-legend {
- background: url("images/menu-collapsed-rtl.gif") no-repeat 100% 50%;
-}
-
-/**
- * Vertical tabs.
- */
-div.vertical-tabs {
- margin-left: 5%;
- margin-right: 15em;
-}
-
-/**
- * Syndication Block
- */
-#block-node-syndicate h2 {
- float: right;
- padding-right: 0;
- padding-left: 20px;
-}
-
-#block-node-syndicate img {
- float: left;
-}
-
-#block-node-syndicate .content {
- clear: left;
-}
-
-/**
- * Login Block
- */
-#user-login-form ul {
- text-align: right;
-}
-#user-login-form .openid-links {
- padding-left: 0;
- padding-right: 0.5em;
-}
-#user-login-form .openid-links li.user-link {
- padding-left: 0;
- padding-right: 1em;
-}
-
-div.admin .left {
- float: right;
-}
-
-div.admin .right {
- float: left;
-}
-
-/* Fix Opera, IE6 and IE7 header width */
-#wrapper #container #header {
- position: relative;
- width: 100%;
-}
-
-#wrapper #container #header #logo-floater {
- width: 100%;
- left: 0;
- top:0;
-}
-
-/**
- * Fixes for IE7 - Does not break other browsers
- */
-
-/* Position:relative on these breaks IE7. */
-ul.primary li a,
-ul.primary li.active a,
-ul.primary li a:hover,
-ul.primary li a:visited,
-ul.secondary li a,
-ul.secondary li.active a,
-ul.secondary li a:hover,
-ul.secondary li a:visited {
- position: static;
-}
-
-/* Fix right and left cloumns position breaking on window resize */
-#container {
- position: relative;
-}
-
-#center {
- position: relative;
-}
-
-#sidebar-second {
- position: absolute;
- right: 0;
-}
-
-/**
- * Apply hasLayout to elements in IE7, using standard property "min-height"
- * (see http://www.satzansatz.de/cssd/onhavinglayout.html)
- */
-
-/* Fix background bleed in center column. */
-#squeeze,
-#squeeze .right-corner {
- min-height: 1%;
-}
diff --git a/themes/garland/style.css b/themes/garland/style.css
deleted file mode 100644
index f36fa96..0000000
--- a/themes/garland/style.css
+++ /dev/null
@@ -1,1255 +0,0 @@
-
-/**
- * Generic elements
- */
-body {
- margin: 0;
- padding: 0;
- background: #edf5fa;
- font: 76%/170% Verdana, sans-serif;
- color: #494949;
-}
-
-input {
- font: 1em/100% Verdana, sans-serif;
- color: #494949;
-}
-
-textarea,
-select {
- font: 1em/160% Verdana, sans-serif;
- color: #494949;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin: 0;
- padding: 0;
- font-weight: normal;
- font-family: Helvetica, Arial, sans-serif;
-}
-
-h1 {
- font-size: 170%;
-}
-
-h2,
-#center h1 {
- font-size: 160%;
- line-height: 130%;
-}
-
-h3 {
- font-size: 140%;
-}
-
-h4 {
- font-size: 130%;
-}
-
-h5 {
- font-size: 120%;
-}
-
-h6 {
- font-size: 110%;
-}
-
-quote,
-code,
-fieldset {
- margin: .5em 0;
-}
-
-code,
-pre,
-kbd {
- font-size: 115%;
-}
-
-p {
- margin: 0.6em 0 1.2em;
- padding: 0;
-}
-
-a:link,
-a:visited {
- color: #027AC6;
- text-decoration: none;
-}
-
-a:hover {
- color: #0062A0;
- text-decoration: underline;
-}
-
-a:active,
-a.active {
- color: #5895be;
-}
-
-hr {
- margin: 0;
- padding: 0;
- border: none;
- height: 1px;
- background: #5294c1;
-}
-
-ul,
-.block ul,
-ol {
- margin: 0.5em 0 1em;
- padding: 0 0 0 1.5em; /* LTR */
-}
-
-/* Default to menu leaf bullet for unordered list items. "ul" used here so it can cascade to list items and "li.leaf" to override the system leaf image. */
-ul,
-ul li.leaf {
- list-style-image: url(images/menu-leaf.gif);
-}
-
-/* This is used to cancel the list style image when an ordered list is embedded in an unordered list. */
-ol {
- list-style-image: none;
-}
-
-ul.menu,
-.item-list ul {
- margin: 0.35em 0 0 -0.5em; /* LTR */
-}
-
-ol li,
-ul li,
-ul.menu li,
-.item-list ul li,
-li.leaf {
- margin: 0.15em 0 0.15em .5em; /* LTR */
- padding-bottom: .1em;
-}
-
-ul li.expanded {
- list-style-image: url(images/menu-expanded.gif);
-}
-
-ul li.collapsed {
- list-style-image: url(images/menu-collapsed.gif); /* LTR */
-}
-
-ul li.leaf a,
-ul li.expanded a,
-ul li.collapsed a {
- display: block;
-}
-
-ul.inline li {
- background: none;
- margin: 0;
- padding: 0 1em 0 0; /* LTR */
-}
-
-ol.task-list {
- margin-left: 0; /* LTR */
- list-style-type: none;
- list-style-image: none;
-}
-ol.task-list li {
- padding: 0.5em 1em 0.5em 2em; /* LTR */
-}
-ol.task-list li.active {
- background: transparent url(images/task-list.png) no-repeat 3px 50%; /* LTR */
-}
-ol.task-list li.done {
- color: #393;
- background: transparent url(../../misc/watchdog-ok.png) no-repeat 0px 50%; /* LTR */
-}
-ol.task-list li.active {
- margin-right: 1em; /* LTR */
-}
-
-fieldset ul.clearfix li {
- margin: 0;
- padding: 0;
- background-image: none;
-}
-
-dl {
- margin: 0.5em 0 1em 1.5em; /* LTR */
-}
-
-dl dt {
-}
-
-dl dd {
- margin: 0 0 .5em 1.5em; /* LTR */
-}
-
-img,
-a img {
- border: none;
-}
-
-table {
- margin: 1em 0;
- width: 100%;
-}
-
-thead th {
- border-bottom: 2px solid #d3e7f4;
- color: #494949;
- font-weight: bold;
-}
-
-th a:link,
-th a:visited {
- color: #6f9dbd;
-}
-
-td,
-th {
- padding: .3em .5em;
-}
-
-tr.even,
-tr.odd,
-tbody th {
- border: solid #d3e7f4;
- border-width: 1px 0;
-}
-
-tr.odd,
-tr.info {
- background-color: #edf5fa;
-}
-
-tr.even {
- background-color: #fff;
-}
-
-tr.drag {
- background-color: #ffb;
-}
-
-tr.drag-previous {
- background-color: #ffd;
-}
-
-tr.odd td.active {
- background-color: #ddecf5;
-}
-
-tr.even td.active {
- background-color: #e6f1f7;
-}
-
-td.region-title,
-td.module,
-td.container,
-td.category {
- border-top: 1.5em solid #fff;
- border-bottom: 1px solid #b4d7f0;
- background-color: #d4e7f3;
- color: #455067;
- font-weight: bold;
-}
-
-tr:first-child td.region-title,
-tr:first-child td.module,
-tr:first-child td.container,
-tr:first-child td.category {
- border-top-width: 0;
-}
-
-span.form-required {
- color: #ffae00;
-}
-
-.submitted, .description,
-.vertical-tab-button .summary {
- font-size: 0.92em;
- color: #898989;
-}
-
-.description .more-help-link {
- font-size: 0.92em;
-}
-
-.description {
- line-height: 150%;
- margin-bottom: 0.75em;
- color: #898989;
-}
-
-.preview {
- margin: .75em 0 .75em;
- padding: .5em 1em;
-}
-
-.form-checkboxes,
-.form-radios,
-.form-checkboxes .form-item,
-.form-radios .form-item {
- margin: 0.25em 0;
-}
-
-#center form {
- margin-bottom: 2em;
-}
-
-.form-actions {
- margin: 2em 0 1em;
-}
-.form-button,
-.form-submit {
- margin: 0 0.5em 0 0; /* LTR */
-}
-
-/**
- * Skip link
- */
-#skip-link {
- left: 50%;
- margin-left: -5.25em;
- margin-top: 0;
- position: absolute;
- width: auto;
- z-index: 1000;
-}
-#skip-link a,
-#skip-link a:link,
-#skip-link a:visited {
- background: #444;
- background: rgba(0, 0, 0, 0.6);
- color: #fff;
- display: block;
- font-size: 0.94em;
- line-height: 1.7;
- margin-top: 1px;
- padding: 2px 10px;
- text-decoration: none;
- -khtml-border-radius: 0 0 2px 2px;
- -moz-border-radius: 0 0 2px 2px;
- -webkit-border-bottom-left-radius: 2px;
- -webkit-border-bottom-right-radius: 2px;
- -webkit-border-top-left-radius: 0;
- -webkit-border-top-right-radius: 0;
- border-radius: 0 0 2px 2px;
-}
-#skip-link a:hover,
-#skip-link a:active,
-#skip-link a:focus {
- outline: 0;
-}
-
-/**
- * Layout
- */
-.region-header {
- min-height: 1em;
- background: #d2e6f3 url(images/bg-navigation.png) repeat-x 50% 100%;
-}
-
-.region-header .block {
- display: block;
- margin: 0 1em;
-}
-
-.region-header .block-region {
- display: block;
- margin: 0 0.5em 1em;
- padding: 0.5em;
- position: relative;
- top: 0.5em;
-}
-
-.region-header * {
- display: inline;
- line-height: 1.5em;
- margin-top: 0;
- margin-bottom: 0;
-}
-
-/* Prevent the previous directive from showing the content of script elements in Mozilla browsers. */
-.region-header script {
- display: none;
-}
-
-.region-header p,
-.region-header img {
- margin-top: 0.5em;
-}
-
-.region-header h2 {
- margin: 0 1em 0 0; /* LTR */
-}
-
-.region-header h3,
-.region-header label,
-.region-header li {
- margin: 0 1em;
- padding: 0;
- background: none;
-}
-
-#wrapper {
- background: #edf5fa url(images/body.png) repeat-x 50% 0;
-}
-
-/* Set container widths when we are using the "fixed width" option. */
-#wrapper #container {
- width: 560px;
- margin: 0 auto;
- padding: 0 20px;
-}
-
-body.one-sidebar #wrapper #container {
- width: 770px;
-}
-
-body.two-sidebars #wrapper #container {
- width: 980px;
-}
-
-/* Unset container width when we are using the "fluid width" option. */
-body.fluid-width #wrapper #container {
- width: auto;
- max-width: 1270px;
-}
-
-#wrapper #container #header {
- height: 80px;
-}
-
-#wrapper #container #header #logo-floater {
- position: absolute;
-}
-
-#branding,
-#branding a:link,
-#branding a:visited {
- line-height: 120px;
- position: relative;
- z-index: 2;
- white-space: nowrap;
-}
-
-#branding span {
- font-weight: bold;
-}
-
-#branding img {
- padding-top: 14px;
- padding-right: 20px; /* LTR */
- float: left; /* LTR */
-}
-
-/* With 3 columns, require a minimum width of 1000px to ensure there is enough horizontal space. */
-body.two-sidebars {
- min-width: 980px;
-}
-/* With 2 columns, require a minimum width of 800px. */
-body.sidebar-first,
-body.sidebar-second {
- min-width: 780px;
-}
-
-/* We must define 100% width to avoid the body being too narrow for near-empty pages */
-#wrapper #container #center {
- float: left; /* LTR */
- width: 100%;
-}
-
-/* So we move the #center container over the sidebars to compensate */
-body.sidebar-first #center {
- margin-left: -210px; /* LTR */
-}
-body.sidebar-second #center {
- margin-right: -210px; /* LTR */
-}
-body.two-sidebars #center {
- margin: 0 -210px;
-}
-
-/* And add blanks left and right for the sidebars to fill */
-body.sidebar-first #squeeze {
- margin-left: 210px; /* LTR */
-}
-body.sidebar-second #squeeze {
- margin-right: 210px; /* LTR */
-}
-body.two-sidebars #squeeze {
- margin: 0 210px;
-}
-
-/* We ensure the sidebars are still clickable using z-index */
-#wrapper #container .sidebar {
- margin: 60px 0 5em;
- width: 210px;
- float: left; /* LTR */
- z-index: 2;
- position: relative;
-}
-
-#wrapper #container .sidebar .block {
- margin: 0 0 1.5em 0;
-}
-
-#sidebar-first .block {
- padding: 0 15px 0 0; /* LTR */
-}
-
-#sidebar-second .block {
- padding: 0 0 0 15px; /* LTR */
-}
-
-.block .content {
- margin: 0.5em 0;
-}
-
-#sidebar-first .block-region {
- margin: 0 15px 0 0px; /* LTR */
-}
-
-#sidebar-second .block-region {
- margin: 0 0px 0 15px; /* LTR */
-}
-
-.block-region {
- padding: 1em;
- background: transparent;
- border: 2px dashed #b4d7f0;
- text-align: center;
- font-size: 1.3em;
-}
-
-/* Now we add the backgrounds for the main content shading */
-#wrapper #container #center #squeeze {
- background: #fff url(images/bg-content.png) repeat-x 50% 0;
- position: relative;
-}
-
-#wrapper #container #center .right-corner {
- background: transparent url(images/bg-content-right.png) no-repeat 100% 0;
- position: relative;
- left: 10px;
-}
-
-#wrapper #container #center .right-corner .left-corner {
- padding: 60px 25px 5em 35px;
- background: transparent url(images/bg-content-left.png) no-repeat 0 0;
- margin-left: -10px;
- position: relative;
- left: -10px;
- min-height: 400px;
-}
-
-#wrapper #container .region-footer {
- float: none;
- clear: both;
- text-align: center;
- margin: 4em 0 -3em;
- color: #898989;
-}
-
-#wrapper #container .breadcrumb {
- position: absolute;
- top: 15px;
- left: 35px; /* LTR */
- z-index: 3;
-}
-
-body.sidebar-first .region-footer {
- margin-left: -210px;
-}
-
-body.sidebar-second .region-footer {
- margin-right: -210px;
-}
-
-body.two-sidebars .region-footer {
- margin: 0 -210px;
-}
-
-/**
- * Header
- */
-div#branding {
- font-family: Helvetica,Arial,sans-serif;
-}
-
-div#branding strong {
- font-weight: normal;
-}
-
-#branding,
-#branding a:link,
-#branding a:visited {
- color: #fff;
- text-shadow: #1659ac 0px 1px 3px;
- font-size: 1.5em;
-}
-
-#branding a:hover {
- text-decoration: none;
-}
-
-#wrapper #container .breadcrumb {
- font-size: 0.92em;
-}
-
-#wrapper #container .breadcrumb,
-#wrapper #container .breadcrumb a {
- color: #529ad6;
-}
-
-#highlighted {
- padding: 1em;
- background-color: #fff;
- border: 1px solid #e0e5fb;
- margin-bottom: 2em;
-}
-
-/**
- * Overlay
- */
-#overlay #overlay-tabs li a {
- background: #d9eaf5;
- color: #000;
-}
-#overlay #overlay-tabs li a:hover,
-#overlay #overlay-tabs li a:focus {
- background: #fff;
-}
-#overlay #overlay-tabs li.active a {
- background: url("images/body.png") repeat-x scroll 50% -58px #edf5fa;
- color: #fff;
-}
-#overlay-content {
- padding: 1px;
-}
-#overlay-content #header {
- display: none;
-}
-#overlay-content #wrapper {
- background-position: 50% -80px;
-}
-
-
-/**
- * Primary navigation
- */
-ul.main-menu {
- margin: 0;
- padding: 0;
- float: right; /* LTR */
- position: relative;
- z-index: 4;
-}
-
-ul.main-menu li {
- margin: 0;
- padding: 0;
- float: left; /* LTR */
- background-image: none;
-}
-
-ul.main-menu li a,
-ul.main-menu li a:link,
-ul.main-menu li a:visited {
- display: block;
- margin: 0 1em;
- padding: .75em 0 0;
- color: #fff;
- background: transparent url(images/bg-navigation-item.png) no-repeat 50% 0;
-}
-
-ul.main-menu li a:hover,
-ul.main-menu li a.active {
- color: #fff;
- background: transparent url(images/bg-navigation-item-hover.png) no-repeat 50% 0;
-}
-
-/**
- * Secondary navigation
- */
-ul.secondary-menu {
- margin: 0;
- padding: 18px 0 0;
- float: right; /* LTR */
- clear: right; /* LTR */
- position: relative;
- z-index: 4;
-}
-
-ul.secondary-menu li {
- margin: 0;
- padding: 0;
- float: left; /* LTR */
- background-image: none;
-}
-
-ul.secondary-menu li a,
-ul.secondary-menu li a:link,
-ul.secondary-menu li a:visited {
- display: block;
- margin: 0 1em;
- padding: .75em 0 0;
- color: #cde3f1;
- background: transparent;
-}
-
-ul.secondary-menu li a:hover,
-ul.secondary-menu li a.active {
- color: #cde3f1;
- background: transparent;
-}
-
-/**
- * Local tasks
- */
-ul.primary,
-ul.primary li,
-ul.secondary,
-ul.secondary li {
- border: 0;
- background: none;
- margin: 0;
- padding: 0;
-}
-
-#tabs-wrapper {
- margin: 0 -26px 1em;
- padding: 0 26px;
- border-bottom: 1px solid #e9eff3;
- position: relative;
-}
-ul.primary {
- padding: 0.5em 0 10px;
- float: left; /* LTR */
-}
-ul.secondary {
- clear: both;
- text-align: left; /* LTR */
- border-bottom: 1px solid #e9eff3;
- margin: -0.2em -26px 1em;
- padding: 0 26px 0.6em;
-}
-h1.with-tabs {
- float: left; /* LTR */
- margin: 0 2em 0 0; /* LTR */
- padding: 0;
-}
-
-ul.primary li a,
-ul.primary li.active a,
-ul.primary li a:hover,
-ul.primary li a:visited,
-ul.secondary li a,
-ul.secondary li.active a,
-ul.secondary li a:hover,
-ul.secondary li a:visited {
- border: 0;
- background: transparent;
- padding: 4px 1em;
- margin: 0 0 0 1px; /* LTR */
- height: auto;
- text-decoration: none;
- position: relative;
- top: -1px;
- display: inline-block;
-}
-ul.primary li.active a,
-ul.primary li.active a:link,
-ul.primary li.active a:visited,
-ul.primary li a:hover,
-ul.secondary li.active a,
-ul.secondary li.active a:link,
-ul.secondary li.active a:visited,
-ul.secondary li a:hover {
- background: url(images/bg-tab.png) repeat-x 0 50%;
- color: #fff;
-}
-ul.primary li.active a,
-ul.secondary li.active a {
- font-weight: bold;
-}
-
-/**
- * Nodes & comments
- */
-.node {
- border-bottom: 1px solid #e9eff3;
- margin: 0 -16px 1.5em;
- padding: 1.5em 16px;
-}
-
-ul.links li,
-ul.inline li {
- margin-left: 0;
- margin-right: 0;
- padding-left: 0; /* LTR */
- padding-right: 1em; /* LTR */
- background-image: none;
-}
-
-.node .links,
-.comment .links {
- text-align: left; /* LTR */
- padding-left: 0; /* LTR */
-}
-
-.user-picture,
-.comment .submitted {
- float: right; /* LTR */
- clear: right; /* LTR */
- padding-left: 1em; /* LTR */
-}
-
-.new {
- color: #ffae00;
- font-size: 0.92em;
- font-weight: bold;
- float: right; /* LTR */
-}
-
-.preview .node,
-.preview .comment,
-.node-sticky {
- margin: 0;
- padding: 0.5em 0;
- border: 0;
- background: 0;
-}
-
-.node-sticky {
- padding: 1em;
- background-color: #fff;
- border: 1px solid #e0e5fb;
- margin-bottom: 2em;
-}
-
-#comments {
- position: relative;
- top: -1px;
- border-bottom: 1px solid #e9eff3;
- margin: 1.5em -25px 0;
- padding: 0 25px;
-}
-
-#comments h2.comments {
- margin: 0 -25px;
- padding: .5em 25px;
- background: #fff url(images/gradient-inner.png) repeat-x 0 0;
-}
-
-.comment {
- margin: 0 -25px;
- padding: 1.5em 25px 1.5em;
- border-top: 1px solid #e9eff3;
-}
-
-.indented {
- margin-left: 25px; /* LTR */
-}
-
-.comment h3 a.active {
- color: #494949;
-}
-
-.node .content,
-.comment .content {
- margin: 0.6em 0;
-}
-
-/**
- * Aggregator.module
- */
-#aggregator {
- margin-top: 1em;
-}
-#aggregator .feed-item-title {
- font-size: 160%;
- line-height: 130%;
-}
-#aggregator .feed-item {
- border-bottom: 1px solid #e9eff3;
- margin: -1.5em -31px 1.75em;
- padding: 1.5em 31px;
-}
-#aggregator .feed-item-categories {
- font-size: 0.92em;
-}
-#aggregator .feed-item-meta {
- font-size: 0.92em;
- color: #898989;
-}
-
-/**
- * Color.module
- */
-#palette .form-item {
- border: 1px solid #fff;
-}
-#palette .item-selected {
- background: #fff url(images/gradient-inner.png) repeat-x 0 0;
- border: 1px solid #d9eaf5;
-}
-
-/**
- * Menu.module
- */
-tr.odd td.menu-disabled {
- background-color: #edf5fa;
-}
-tr.even td.menu-disabled {
- background-color: #fff;
-}
-
-/**
- * Poll.module
- */
-.poll .bar {
- background: #fff url(images/bg-bar-white.png) repeat-x 0 0;
- border: solid #f0f0f0;
- border-width: 0 1px 1px;
-}
-
-.poll .bar .foreground {
- background: #71a7cc url(images/bg-bar.png) repeat-x 0 100%;
-}
-
-.poll .percent {
- font-size: .9em;
-}
-
-/**
- * Autocomplete.
- */
-#autocomplete li {
- cursor: default;
- padding: 2px;
- margin: 0;
-}
-
-/**
- * Collapsible fieldsets
- */
-fieldset {
- margin: 1em 0;
- padding: 1em;
- border: 1px solid #d9eaf5;
- background: #fff url(images/gradient-inner.png) repeat-x 0 0;
-}
-
-/* Targets IE 7. Fixes background image in field sets. */
-*:first-child+html fieldset {
- padding: 0 1em 1em;
- background-position: 0 .75em;
- background-color: transparent;
-}
-*:first-child+html .text-format-wrapper .filter-wrapper {
- padding: 1.5em 0 1.5em;
- background-position: 0 0;
-}
-
-/* Keep the background position at 0 for filters and vertical tabs. */
-*:first-child+html fieldset.filter-wrapper,
-*:first-child+html fieldset.vertical-tabs-pane {
- background-position: 0 0;
-}
-
-*:first-child+html fieldset .fieldset-wrapper .fieldset-description {
- padding-top: 1em;
-}
-
-html.js fieldset.collapsed {
- background: transparent;
- padding-top: 0;
- padding-bottom: .6em;
-}
-
-html.js fieldset.collapsible .fieldset-legend {
- padding-left: 2em; /* LTR */
- background: url(images/menu-expanded.gif) no-repeat 0% 50%; /* LTR */
-}
-html.js fieldset.collapsed .fieldset-legend {
- background: url(images/menu-collapsed.gif) no-repeat 0% 50%; /* LTR */
-}
-
-.fieldset-legend span.summary {
- color: #898989;
-}
-
-/**
- * Vertical tabs.
- */
-div.vertical-tabs {
- border-color: #d9eaf5;
-}
-
-div.vertical-tabs .vertical-tabs-panes fieldset.vertical-tabs-pane {
- padding: 0.5em 1em;
-}
-
-div.vertical-tabs ul.vertical-tabs-list {
- border-color: #d9eaf5;
-}
-
-div.vertical-tabs ul.vertical-tabs-list li {
- background-color: #edf5fa;
- border-color: #d9eaf5;
-}
-
-div.vertical-tabs ul.vertical-tabs-list li strong {
- font-weight: normal;
-}
-
-div.vertical-tabs ul.vertical-tabs-list li.selected strong {
- font-weight: bold;
-}
-
-div.vertical-tabs ul.vertical-tabs-list li.selected small {
- color: #898989;
-}
-
-div.vertical-tabs ul.vertical-tabs-list li.selected {
- background: #fff repeat-x 0 0;
-}
-
-div.vertical-tabs ul.vertical-tabs-list li.selected.first {
- background-image: url(images/gradient-inner.png);
-}
-
-div.vertical-tabs ul.vertical-tabs-list li.selected a strong {
- color: #494949;
-}
-
-/**
- * Syndication icons and block
- */
-#block-node-syndicate h2 {
- float: left; /* LTR */
- padding-right: 20px; /* LTR */
-}
-
-#block-node-syndicate img,
-.feed-icon {
- float: right; /* LTR */
- padding-top: 4px;
-}
-
-#block-node-syndicate .content {
- clear: right; /* LTR */
-}
-
-/**
- * Login Block
- */
-#user-login-form {
- text-align: center;
-}
-#user-login-form ul {
- text-align: left; /* LTR */
-}
-#user-login .openid-links {
- padding: 0;
-}
-#user-login-form .openid-links {
- padding-left: 0.5em; /* LTR */
-}
-#user-login-form .openid-links li.user-link {
- padding-left: 1em; /* LTR */
-}
-
-/**
- * User profiles.
- */
-.profile {
- margin-top: 1.5em;
-}
-.profile h3 {
- border-bottom: 0;
- margin-bottom: 1em;
-}
-.profile dl {
- margin: 0;
-}
-.profile dt {
- font-weight: normal;
- color: #898989;
- font-size: 0.92em;
- line-height: 1.3em;
- margin-top: 1.4em;
- margin-bottom: 0.45em;
-}
-.profile dd {
- margin-bottom: 1.6em;
-}
-
-/**
- * Admin Styles
- */
-div.admin-panel,
-div.admin-panel .description,
-div.admin-panel .body,
-div.admin,
-div.admin .left,
-div.admin .right,
-div.admin .expert-link,
-div.item-list,
-.menu {
- margin: 0;
- padding: 0;
-}
-
-div.admin .left {
- float: left; /* LTR */
- width: 48%;
-}
-div.admin .right {
- float: right; /* LTR */
- width: 48%;
-}
-
-div.admin-panel {
- background: #fff url(images/gradient-inner.png) repeat-x 0 0;
- padding: 1em 1em 1.5em;
-}
-div.admin-panel .description {
- margin-bottom: 1.5em;
-}
-div.admin-panel dl {
- margin: 0;
-}
-div.admin-panel dd {
- color: #898989;
- font-size: 0.92em;
- line-height: 1.3em;
- margin-top: -.2em;
- margin-bottom: .65em;
-}
-
-table.system-status-report th {
- border-color: #d3e7f4;
-}
-
-#autocomplete li.selected,
-tr.selected td,
-tr.selected td.active {
- background: #027ac6;
- color: #fff;
-}
-
-tr.selected td a:link,
-tr.selected td a:visited,
-tr.selected td a:active {
- color: #d3e7f4;
-}
-
-tr.taxonomy-term-preview {
- opacity: 0.5;
-}
-
-tr.taxonomy-term-divider-top {
- border-bottom: none;
-}
-
-tr.taxonomy-term-divider-bottom {
- border-top: 1px dotted #CCC;
-}
-
-.theme-selector h3 {
- margin: 10px 0;
-}
-.theme-selector .operations li {
- list-style-image: none;
-}
-
-/**
- * CSS support
- */
-
-/*******************************************************************
- * Color Module: Don't touch *
- *******************************************************************/
-
-/**
- * Generic elements.
- */
-.preview {
- background-color: #fcfce8;
- border: 1px solid #e5e58f;
-}
-
-.form-item input.error,
-.form-item textarea.error {
- border: 1px solid #c52020;
- color: #363636;
-}
-
-/**
- * dblog.module
- */
-tr.dblog-user {
- background-color: #fcf9e5;
-}
-
-tr.dblog-user td.active {
- background-color: #fbf5cf;
-}
-
-tr.dblog-content {
- background-color: #fefefe;
-}
-
-tr.dblog-content td.active {
- background-color: #f5f5f5;
-}
-
-tr.dblog-warning {
- background-color: #fdf5e6;
-}
-
-tr.dblog-warning td.active {
- background-color: #fdf2de;
-}
-
-tr.dblog-error {
- background-color: #fbe4e4;
-}
-
-tr.dblog-error td.active {
- background-color: #fbdbdb;
-}
-tr.dblog-page-not-found,
-tr.dblog-access-denied {
- background: #d7ffd7;
-}
-tr.dblog-page-not-found td.active,
-tr.dblog-access-denied td.active {
- background: #c7eec7;
-}
-
-/**
- * Status report colors.
- */
-table.system-status-report tr.error,
-table.system-status-report tr.error th {
- background-color: #fcc;
- border-color: #ebb;
- color: #200;
-}
-table.system-status-report tr.warning,
-table.system-status-report tr.warning th {
- background-color: #ffd;
- border-color: #eeb;
-}
-table.system-status-report tr.ok,
-table.system-status-report tr.ok th {
- background-color: #dfd;
- border-color: #beb;
-}
diff --git a/themes/garland/template.php b/themes/garland/template.php
deleted file mode 100644
index 416a43a..0000000
--- a/themes/garland/template.php
+++ /dev/null
@@ -1,156 +0,0 @@
-' . t('You are here') . '';
-
- $output .= '' . implode(' › ', $breadcrumb) . '
';
- return $output;
- }
-}
-
-/**
- * Override or insert variables into the maintenance page template.
- */
-function garland_preprocess_maintenance_page(&$vars) {
- // While markup for normal pages is split into page.tpl.php and html.tpl.php,
- // the markup for the maintenance page is all in the single
- // maintenance-page.tpl.php template. So, to have what's done in
- // garland_preprocess_html() also happen on the maintenance page, it has to be
- // called here.
- garland_preprocess_html($vars);
-}
-
-/**
- * Override or insert variables into the html template.
- */
-function garland_preprocess_html(&$vars) {
- // Toggle fixed or fluid width.
- if (theme_get_setting('garland_width') == 'fluid') {
- $vars['classes_array'][] = 'fluid-width';
- }
- // Add conditional CSS for IE6.
- drupal_add_css(path_to_theme() . '/fix-ie.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'lt IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
-}
-
-/**
- * Override or insert variables into the html template.
- */
-function garland_process_html(&$vars) {
- // Hook into color.module
- if (module_exists('color')) {
- _color_html_alter($vars);
- }
-}
-
-/**
- * Override or insert variables into the page template.
- */
-function garland_preprocess_page(&$vars) {
- // Move secondary tabs into a separate variable.
- $vars['tabs2'] = array(
- '#theme' => 'menu_local_tasks',
- '#secondary' => $vars['tabs']['#secondary'],
- );
- unset($vars['tabs']['#secondary']);
-
- if (isset($vars['main_menu'])) {
- $vars['primary_nav'] = theme('links__system_main_menu', array(
- 'links' => $vars['main_menu'],
- 'attributes' => array(
- 'class' => array('links', 'inline', 'main-menu'),
- ),
- 'heading' => array(
- 'text' => t('Main menu'),
- 'level' => 'h2',
- 'class' => array('element-invisible'),
- )
- ));
- }
- else {
- $vars['primary_nav'] = FALSE;
- }
- if (isset($vars['secondary_menu'])) {
- $vars['secondary_nav'] = theme('links__system_secondary_menu', array(
- 'links' => $vars['secondary_menu'],
- 'attributes' => array(
- 'class' => array('links', 'inline', 'secondary-menu'),
- ),
- 'heading' => array(
- 'text' => t('Secondary menu'),
- 'level' => 'h2',
- 'class' => array('element-invisible'),
- )
- ));
- }
- else {
- $vars['secondary_nav'] = FALSE;
- }
-
- // Prepare header.
- $site_fields = array();
- if (!empty($vars['site_name'])) {
- $site_fields[] = $vars['site_name'];
- }
- if (!empty($vars['site_slogan'])) {
- $site_fields[] = $vars['site_slogan'];
- }
- $vars['site_title'] = implode(' ', $site_fields);
- if (!empty($site_fields)) {
- $site_fields[0] = '' . $site_fields[0] . ' ';
- }
- $vars['site_html'] = implode(' ', $site_fields);
-
- // Set a variable for the site name title and logo alt attributes text.
- $slogan_text = $vars['site_slogan'];
- $site_name_text = $vars['site_name'];
- $vars['site_name_and_slogan'] = $site_name_text . ' ' . $slogan_text;
-}
-
-/**
- * Override or insert variables into the node template.
- */
-function garland_preprocess_node(&$vars) {
- $vars['submitted'] = $vars['date'] . ' — ' . $vars['name'];
-}
-
-/**
- * Override or insert variables into the comment template.
- */
-function garland_preprocess_comment(&$vars) {
- $vars['submitted'] = $vars['created'] . ' — ' . $vars['author'];
-}
-
-/**
- * Override or insert variables into the block template.
- */
-function garland_preprocess_block(&$vars) {
- $vars['title_attributes_array']['class'][] = 'title';
- $vars['classes_array'][] = 'clearfix';
-}
-
-/**
- * Override or insert variables into the page template.
- */
-function garland_process_page(&$vars) {
- // Hook into color.module
- if (module_exists('color')) {
- _color_page_alter($vars);
- }
-}
-
-/**
- * Override or insert variables into the region template.
- */
-function garland_preprocess_region(&$vars) {
- if ($vars['region'] == 'header') {
- $vars['classes_array'][] = 'clearfix';
- }
-}
diff --git a/themes/garland/theme-settings.php b/themes/garland/theme-settings.php
deleted file mode 100644
index 2454341..0000000
--- a/themes/garland/theme-settings.php
+++ /dev/null
@@ -1,30 +0,0 @@
- 'radios',
- '#title' => t('Content width'),
- '#options' => array(
- 'fluid' => t('Fluid width'),
- 'fixed' => t('Fixed width'),
- ),
- '#default_value' => theme_get_setting('garland_width'),
- '#description' => t('Specify whether the content will wrap to a fixed width or will fluidly expand to the width of the browser window.'),
- // Place this above the color scheme options.
- '#weight' => -2,
- );
-}
diff --git a/themes/seven/ie.css b/themes/seven/ie.css
deleted file mode 100644
index 4b25695..0000000
--- a/themes/seven/ie.css
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/* IE7 renders legends in nested fieldsets without a width. */
-fieldset legend {
- height: 1%;
-}
-
-/* IE renders absolute positioned legend where fieldset content starts. */
-fieldset .fieldset-legend {
- left: 0;
- top: 0;
-}
-
-/* IE renders monospace font too big. */
-code,
-pre,
-kbd {
- font-size: 1em;
-}
diff --git a/themes/seven/ie6.css b/themes/seven/ie6.css
deleted file mode 100644
index 7d1c320..0000000
--- a/themes/seven/ie6.css
+++ /dev/null
@@ -1,17 +0,0 @@
-
-ul.menu li,
-ul.menu li a,
-ul.links li,
-ul.links li a,
-.action-links,
-#page {
- height: 1%;
-}
-#block-system-main ul.admin-list li a {
- height: 1px;
- position: relative;
- display: block;
-}
-#block-system-main ul.admin-list li div.description a {
- display: inline;
-}
diff --git a/themes/seven/ie7.css b/themes/seven/ie7.css
deleted file mode 100644
index abcdb8a..0000000
--- a/themes/seven/ie7.css
+++ /dev/null
@@ -1,23 +0,0 @@
-
-ul.tabs.primary {
- padding: 0;
-}
-ul.primary li,
-ul.primary li a,
-ul.primary li.active a {
- float: none !important;
- display: inline;
-}
-ul.primary li,
-ul.primary li a,
-ul.primary li a.active,
-ul.primary li a:active,
-ul.primary li a:visited,
-ul.primary li a:hover,
-ul.primary li.active a {
- zoom: 1;
- position: relative;
-}
-ul.admin-list li {
- position: static;
-}
diff --git a/themes/seven/images/add.png b/themes/seven/images/add.png
deleted file mode 100644
index 1a2faf6..0000000
Binary files a/themes/seven/images/add.png and /dev/null differ
diff --git a/themes/seven/images/arrow-asc.png b/themes/seven/images/arrow-asc.png
deleted file mode 100644
index d25b8dd..0000000
Binary files a/themes/seven/images/arrow-asc.png and /dev/null differ
diff --git a/themes/seven/images/arrow-desc.png b/themes/seven/images/arrow-desc.png
deleted file mode 100644
index 2feade9..0000000
Binary files a/themes/seven/images/arrow-desc.png and /dev/null differ
diff --git a/themes/seven/images/arrow-next.png b/themes/seven/images/arrow-next.png
deleted file mode 100644
index ed551de..0000000
Binary files a/themes/seven/images/arrow-next.png and /dev/null differ
diff --git a/themes/seven/images/arrow-prev.png b/themes/seven/images/arrow-prev.png
deleted file mode 100644
index 64b2dac..0000000
Binary files a/themes/seven/images/arrow-prev.png and /dev/null differ
diff --git a/themes/seven/images/buttons.png b/themes/seven/images/buttons.png
deleted file mode 100644
index ae833d5..0000000
Binary files a/themes/seven/images/buttons.png and /dev/null differ
diff --git a/themes/seven/images/fc-rtl.png b/themes/seven/images/fc-rtl.png
deleted file mode 100644
index e02cf9c..0000000
Binary files a/themes/seven/images/fc-rtl.png and /dev/null differ
diff --git a/themes/seven/images/fc.png b/themes/seven/images/fc.png
deleted file mode 100644
index ac44b41..0000000
Binary files a/themes/seven/images/fc.png and /dev/null differ
diff --git a/themes/seven/images/list-item-rtl.png b/themes/seven/images/list-item-rtl.png
deleted file mode 100644
index aa654f7..0000000
Binary files a/themes/seven/images/list-item-rtl.png and /dev/null differ
diff --git a/themes/seven/images/list-item.png b/themes/seven/images/list-item.png
deleted file mode 100644
index d598d63..0000000
Binary files a/themes/seven/images/list-item.png and /dev/null differ
diff --git a/themes/seven/images/task-check.png b/themes/seven/images/task-check.png
deleted file mode 100644
index 64fadf8..0000000
Binary files a/themes/seven/images/task-check.png and /dev/null differ
diff --git a/themes/seven/images/task-item-rtl.png b/themes/seven/images/task-item-rtl.png
deleted file mode 100644
index fbf6185..0000000
Binary files a/themes/seven/images/task-item-rtl.png and /dev/null differ
diff --git a/themes/seven/images/task-item.png b/themes/seven/images/task-item.png
deleted file mode 100644
index c2f9bf0..0000000
Binary files a/themes/seven/images/task-item.png and /dev/null differ
diff --git a/themes/seven/images/ui-icons-222222-256x240.png b/themes/seven/images/ui-icons-222222-256x240.png
deleted file mode 100644
index 9a9606f..0000000
Binary files a/themes/seven/images/ui-icons-222222-256x240.png and /dev/null differ
diff --git a/themes/seven/images/ui-icons-454545-256x240.png b/themes/seven/images/ui-icons-454545-256x240.png
deleted file mode 100644
index 80cb644..0000000
Binary files a/themes/seven/images/ui-icons-454545-256x240.png and /dev/null differ
diff --git a/themes/seven/images/ui-icons-800000-256x240.png b/themes/seven/images/ui-icons-800000-256x240.png
deleted file mode 100644
index 7bf106b..0000000
Binary files a/themes/seven/images/ui-icons-800000-256x240.png and /dev/null differ
diff --git a/themes/seven/images/ui-icons-888888-256x240.png b/themes/seven/images/ui-icons-888888-256x240.png
deleted file mode 100644
index 8373712..0000000
Binary files a/themes/seven/images/ui-icons-888888-256x240.png and /dev/null differ
diff --git a/themes/seven/images/ui-icons-ffffff-256x240.png b/themes/seven/images/ui-icons-ffffff-256x240.png
deleted file mode 100644
index 3086869..0000000
Binary files a/themes/seven/images/ui-icons-ffffff-256x240.png and /dev/null differ
diff --git a/themes/seven/jquery.ui.theme.css b/themes/seven/jquery.ui.theme.css
deleted file mode 100644
index c26046a..0000000
--- a/themes/seven/jquery.ui.theme.css
+++ /dev/null
@@ -1,436 +0,0 @@
-/**
- * @file
- * Seven styles for jQuery UI.
- * Overrides /misc/ui/ui.theme.css.
- */
-
-/**
- * Component containers
- */
-.ui-widget {
- background: #fff;
-}
-.ui-widget-content {
- border: solid 1px #ccc;
-}
-
-/**
- * Interaction states
- */
-.ui-state-default,
-.ui-state-hover,
-.ui-state-focus,
-.ui-state-active {
- outline: 0;
-}
-.ui-state-active {
- font-weight: bold;
-}
-
-/**
- * Interaction cues
- */
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight {
- color: #840;
- background: #fe6;
- border: solid 1px #ed5;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error {
- color: #fff;
- background: #e63;
- border-color: #d52;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled {
- opacity: .35;
- filter: Alpha(Opacity=35);
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary {
- opacity: .7;
- filter: Alpha(Opacity=70);
-}
-
-/**
- * Icons
- */
-/* states and images */
-.ui-icon {
- display: block;
- text-indent: -99999px;
- width: 16px;
- height: 16px;
- overflow: hidden;
- background-repeat: no-repeat;
- background-image: url(images/ui-icons-222222-256x240.png);
-}
-.ui-widget-content .ui-icon,
-.ui-widget-header .ui-icon {
- background-image: url(images/ui-icons-222222-256x240.png);
-}
-.ui-state-default .ui-icon {
- background-image: url(images/ui-icons-888888-256x240.png);
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon,
-.ui-state-active .ui-icon {
- background-image: url(images/ui-icons-454545-256x240.png);
-}
-.ui-state-highlight .ui-icon {
- background-image: url(images/ui-icons-800000-256x240.png);
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
- background-image: url(images/ui-icons-ffffff-256x240.png);
-}
-.ui-widget p .ui-icon {
- margin: 2px 3px 0 0;
-}
-
-/* positioning */
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-
-/**
- * Accordion
- */
-.ui-accordion {
- border: none;
-}
-.ui-accordion .ui-accordion-header {
- border: solid 1px #ccc;
- text-transform: uppercase;
-}
-.ui-accordion h3.ui-accordion-header,
-#block-system-main h3.ui-accordion-header {
- font-size: 1.1em;
- margin: 10px 0;
-}
-#block-system-main .ui-accordion h3.ui-state-active,
-.ui-accordion h3.ui-state-active {
- margin-bottom: 0;
-}
-.ui-accordion .ui-accordion-header a {
- display: block;
-}
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border: solid 1px #ccc;
- border-top: 0;
-}
-
-/**
- * Tabs
- */
-.ui-tabs {
- padding: 0;
-}
-.ui-tabs .ui-tabs-nav {
- padding: 5px 10px 4px;
- margin: 0;
- line-height: 20px;
- border-bottom: solid 1px #ccc;
- -moz-border-radius-bottomleft: 0;
- -webkit-border-bottom-left-radius: 0;
- border-bottom-left-radius: 0;
- -moz-border-radius-bottomright: 0;
- -webkit-border-bottom-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-.ui-tabs .ui-tabs-nav li {
- padding: 0 1em 0 10px;
- margin: 0;
- list-style: none;
-}
-.ui-tabs .ui-tabs-nav li a {
- float: none;
- padding: 0 10px;
- -moz-border-radius: 10px;
- -webkit-border-radius: 10px;
- border-radius: 10px;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a {
- color: #fff;
- background: #666;
- font-weight: normal;
-}
-
-/**
- * Overlays
- */
-.ui-widget-overlay {
- background: #000;
- opacity: .70;
- filter: Alpha(Opacity=70);
-}
-
-/**
- * Dialogs
- */
-.ui-dialog {
- background: #fff;
- border: solid 1px #ccc;
- padding: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
- font-weight: bold;
- background: #e1e2dc;
-}
-.ui-dialog .ui-dialog-buttonpane {
- border-width: 0;
-}
-.ui-dialog .ui-dialog-buttonpane button {
- cursor: pointer;
- padding: 4px 17px;
- color: #5a5a5a;
- text-align: center;
- font-family: "Lucida Grande", Verdana, sans-serif;
- font-weight: normal;
- font-size: 1em;
- border: 1px solid #e4e4e4;
- border-bottom: 1px solid #b4b4b4;
- border-left-color: #D2D2D2;
- border-right-color: #D2D2D2;
- background: url(images/buttons.png) 0 0 repeat-x;
- -moz-border-radius: 20px;
- -webkit-border-radius: 20px;
- border-radius: 20px;
-}
-.ui-dialog .ui-dialog-buttonpane button:active {
- background: #666;
- color: #fff;
- border-color: #555;
- text-shadow: #222 0px -1px 0px;
-}
-.overlay {
- padding-right: 26px;
-}
-.overlay .ui-dialog-titlebar {
- background: transparent;
-}
-
-/**
- * Slider
- */
-.ui-slider {
- border: solid 1px #ccc;
-}
-.ui-slider .ui-slider-range {
- background: #e4e4e4;
-}
-.ui-slider .ui-slider-handle {
- border: 1px solid #e4e4e4;
- border-bottom: 1px solid #b4b4b4;
- border-left-color: #D2D2D2;
- border-right-color: #D2D2D2;
- background: url(images/buttons.png) 0 0 repeat-x;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-.ui-slider a.ui-state-active,
-.ui-slider .ui-slider-handle:active {
- background: #666;
- color: #fff;
- border: solid 1px #555;
-}
-
-/**
- * Progress Bar
- */
-.ui-progressbar {
- background: #e4e4e4;
- height: 1.4em;
-}
-.ui-progressbar .ui-progressbar-value {
- background: #0072b9 url(../../misc/progress.gif);
- height: 1.5em;
-}
-
-/**
- * Date Picker
- */
-.ui-datepicker {
- border: none;
-}
-.ui-datepicker td span, .ui-datepicker td a {
- text-align: center;
-}
-.ui-datepicker .ui-state-highlight {
- background: #E4E4E4;
- border-color: #D2D2D2;
- color: #000;
-}
diff --git a/themes/seven/logo.png b/themes/seven/logo.png
deleted file mode 100644
index 3b49a4c..0000000
Binary files a/themes/seven/logo.png and /dev/null differ
diff --git a/themes/seven/maintenance-page.tpl.php b/themes/seven/maintenance-page.tpl.php
deleted file mode 100644
index a158dde..0000000
--- a/themes/seven/maintenance-page.tpl.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/themes/seven/page.tpl.php b/themes/seven/page.tpl.php
deleted file mode 100644
index 6ab3ae8..0000000
--- a/themes/seven/page.tpl.php
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/themes/seven/reset.css b/themes/seven/reset.css
deleted file mode 100644
index 446d45e..0000000
--- a/themes/seven/reset.css
+++ /dev/null
@@ -1,216 +0,0 @@
-
-/**
- * Reset CSS styles.
- *
- * Based on Eric Meyer's "Reset CSS 1.0" tool from
- * http://meyerweb.com/eric/tools/css/reset
- */
-
-html,
-body,
-div,
-span,
-applet,
-object,
-iframe,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-p,
-blockquote,
-pre,
-a,
-abbr,
-acronym,
-address,
-big,
-cite,
-code,
-del,
-dfn,
-em,
-font,
-img,
-ins,
-kbd,
-q,
-s,
-samp,
-small,
-strike,
-strong,
-sub,
-sup,
-tt,
-var,
-b,
-u,
-i,
-center,
-dl,
-dt,
-dd,
-ol,
-ul,
-li,
-fieldset,
-form,
-input,
-select,
-textarea,
-label,
-legend,
-table,
-caption,
-tbody,
-tfoot,
-thead,
-tr,
-th,
-td,
-/* Drupal: system-menus.css */
-td.menu-disabled,
-ul.links,
-ul.links.inline,
-ul.links li,
-.block ul,
-/* Drupal: admin.css */
-div.admin,
-/* Drupal: system.css */
-tr.even,
-tr.odd,
-tr.drag,
-tbody,
-tbody th,
-thead th,
-.breadcrumb,
-.item-list .icon,
-.item-list .title,
-.item-list ul,
-.item-list ul li,
-ol.task-list li.active,
-.form-item,
-tr.odd .form-item,
-tr.even .form-item,
-.form-item .description,
-.form-item label,
-.form-item label.option,
-.form-checkboxes,
-.form-radios,
-.form-checkboxes .form-item,
-.form-radios .form-item,
-.marker,
-.form-required,
-.more-link,
-.more-help-link,
-.item-list .pager,
-.item-list .pager li,
-.pager-current,
-.tips,
-ul.primary,
-ul.primary li,
-ul.primary li a,
-ul.primary li.active a,
-ul.primary li a:hover,
-ul.secondary,
-ul.secondary li,
-ul.secondary a,
-ul.secondary a.active,
-.resizable-textarea {
- margin: 0;
- padding: 0;
- border: 0;
- vertical-align: baseline;
-}
-/* Drupal: system-menus.css */
-ul.links,
-ul.links.inline,
-ul.links li,
-.block ul,
-ol,
-ul,
-.item-list ul,
-.item-list ul li {
- list-style: none;
-}
-blockquote,
-q {
- quotes: none;
-}
-blockquote:before,
-blockquote:after,
-q:before,
-q:after {
- content: '';
- content: none;
-}
-
-/* Remember to highlight inserts somehow! */
-ins {
- text-decoration: none;
-}
-del {
- text-decoration: line-through;
-}
-
-/* Tables still need 'cellspacing="0"' in the markup. */
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-/**
- * Font reset.
- *
- * Specifically targets form elements which browsers often times give
- * special treatment.
- */
-input,
-select,
-textarea {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-textarea {
- font-size: 1em;
- line-height: 1.538em;
-}
-/**
- * Markup free clearing.
- *
- * Consider adding your own selectors to this instead of finding ways
- * to sneak the clearfix class into Drupal's markup.
- * From http://perishablepress.com/press/2009/12/06/new-clearfix-hack
- */
-ul.links:after,
-div.admin-panel .body:after,
-.clearfix:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-/* Exclude inline links from clearfix behavior */
-ul.inline:after {
- content: "";
- display: none;
- clear: none;
-}
-/* IE6 */
-* html .form-item,
-* html ul.links,
-* html div.admin-panel .body,
-* html .clearfix {
- height: 1%;
-}
-/* IE7 */
-*:first-child + html .form-item,
-*:first-child + html ul.links,
-*:first-child + html div.admin-panel .body,
-*:first-child + html .clearfix {
- min-height: 1%;
-}
diff --git a/themes/seven/screenshot.png b/themes/seven/screenshot.png
deleted file mode 100644
index 3f0c367..0000000
Binary files a/themes/seven/screenshot.png and /dev/null differ
diff --git a/themes/seven/seven.info b/themes/seven/seven.info
deleted file mode 100644
index 4293c07..0000000
--- a/themes/seven/seven.info
+++ /dev/null
@@ -1,14 +0,0 @@
-name = Seven
-description = A simple one-column, tableless, fluid width administration theme.
-package = Core
-version = VERSION
-core = 7.x
-stylesheets[screen][] = reset.css
-stylesheets[screen][] = style.css
-settings[shortcut_module_link] = 1
-regions[content] = Content
-regions[help] = Help
-regions[page_top] = Page top
-regions[page_bottom] = Page bottom
-regions[sidebar_first] = First sidebar
-regions_hidden[] = sidebar_first
diff --git a/themes/seven/style-rtl.css b/themes/seven/style-rtl.css
deleted file mode 100644
index a41d325..0000000
--- a/themes/seven/style-rtl.css
+++ /dev/null
@@ -1,241 +0,0 @@
-
-/**
- * Generic elements.
- */
-dl dd,
-dl dl {
- margin-right: 20px;
-}
-ul,
-.block ul,
-.item-list ul {
- margin: 0.25em 1.5em 0.25em 0;
-}
-ol {
- margin: 0.25em 2em 0.25em 0;
-}
-
-/**
- * Skip link.
- */
-#skip-link {
- right: 50%;
- margin-right: -5.25em;
-}
-#skip-link a,
-#skip-link a:link,
-#skip-link a:visited {
- padding: 1px 10px 2px 10px;
-}
-
-/**
- * Branding.
- */
-#branding {
- padding: 20px 20px 0 20px;
-}
-
-#branding div.block {
- float: left;
- padding-left: 0;
- padding-right: 10px;
-}
-#branding div.block form div.form-item {
- float: right;
-}
-#branding div.block form input.form-text {
- margin-left: 10px;
- margin-right: 0;
-}
-
-/**
- * Help.
- */
-#help div.more-help-link {
- text-align: left;
-}
-
-/**
- * Page title.
- */
-#branding h1.page-title {
- float: right;
-}
-
-/**
- * Tabs.
- */
-ul.primary li,
-ul.primary li a:link,
-ul.primary li a.active {
- float: right;
-}
-ul.primary,
-ul.secondary {
- float: left;
-}
-ul.secondary li {
- float: none;
-}
-ul.primary {
- padding-top: 0;
-}
-
-/**
- * Page layout.
- */
-#page {
- padding: 20px 0 40px 0;
- margin-left: 40px;
- margin-right: 40px;
-}
-#secondary-links ul.links li {
- padding: 0 0 10px 10px;
-}
-ul.links li,
-ul.inline li {
- padding-left: 1em;
- padding-right: 0;
-}
-ul.admin-list li {
- padding: 9px 30px 0 0;
- margin-right: 0;
- background: url(images/list-item-rtl.png) no-repeat right 11px;
-}
-ul.admin-list li a {
- margin-right: -30px;
- margin-left: 0;
- padding: 0 30px 4px 0;
-}
-ul.admin-list.compact li a {
- margin-right: 0;
-}
-ul.admin-list li div.description a {
- margin-right: 0;
-}
-
-/**
- * Tables.
- */
-table th.active a {
- padding: 0 0 0 25px;
-}
-table th.active img {
- left: 3px;
- right: auto;
-}
-/**
- * Exception for webkit bug with the right border of the last cell
- * in some tables, since it's webkit only, we can use :last-child
- */
-tr td:last-child {
- border-left: 1px solid #bebfb9;
- border-right: none;
-}
-
-/**
- * Fieldsets.
- */
-fieldset {
- padding: 2.5em 0 0 0;
-}
-fieldset .fieldset-legend {
- padding-right: 15px;
- right: 0;
-}
-fieldset .fieldset-wrapper {
- padding: 0 15px 13px 13px;
-}
-
-/* Filter */
-.filter-wrapper .form-item,
-.filter-wrapper .filter-guidelines,
-.filter-wrapper .filter-help {
- padding: 2px 0 0 0;
-}
-ul.tips li {
- margin: 0.25em 1.5em 0.25em 0;
-}
-body div.form-type-radio div.description,
-body div.form-type-checkbox div.description {
- margin-left: 0;
- margin-right: 1.5em;
-}
-input.form-submit,
-a.button {
- margin-left: 1em;
- margin-right: 0;
-}
-ul.action-links li {
- float: right;
- margin: 0 0 0 1em;
-}
-ul.action-links a {
- padding-left: 0;
- padding-right: 15px;
- background-position: right center;
-}
-
-/* Update options. */
-div.admin-options label,
-div.admin-options div.form-item {
- margin-left: 10px;
- margin-right: 0;
- float: right;
-}
-
-/* Maintenance theming */
-body.in-maintenance #sidebar-first {
- float: right;
-}
-body.in-maintenance #content {
- float: left;
- padding-left: 20px;
- padding-right: 0;
-}
-ol.task-list {
- margin-right: 0;
-}
-ol.task-list li {
- padding: 0.5em 20px 0.5em 1em;
-}
-ol.task-list li.active {
- background: transparent url(images/task-item-rtl.png) no-repeat right 50%;
- padding: 0.5em 20px 0.5em 1em;
-}
-
-/* Overlay theming */
-.overlay #branding div.breadcrumb {
- float: right;
-}
-.overlay ul.secondary {
- margin: -1.4em 0 0.3em 0;
-}
-
-/* Shortcut theming */
-div.add-or-remove-shortcuts {
- float: none;
- padding-left: 0;
- padding-right: 6px;
-}
-
-/* Dashboard */
-#dashboard div.block div.content {
- padding: 10px 5px 5px 5px;
-}
-#dashboard div.block div.content ul.menu {
- margin-right: 20px;
-}
-
-/* Recent content block */
-#block-node-recent .more-link {
- padding: 0 0 5px 5px;
-}
-
-/* User login block */
-#user-login-form .openid-links {
- margin-right: 0;
-}
-#user-login-form .openid-links .user-link {
- margin-right: 1.5em;
-}
diff --git a/themes/seven/style.css b/themes/seven/style.css
deleted file mode 100644
index c52d661..0000000
--- a/themes/seven/style.css
+++ /dev/null
@@ -1,990 +0,0 @@
-
-/**
- * Generic elements.
- */
-body {
- color: #000;
- background: #fff;
- font: normal 81.3%/1.538em "Lucida Grande", "Lucida Sans Unicode", sans-serif;
-}
-a {
- color: #0074BD;
- text-decoration: none;
-}
-a:hover {
- text-decoration: underline;
-}
-hr {
- margin: 0;
- padding: 0;
- border: none;
- height: 1px;
- background: #cccccc;
-}
-legend {
- font-weight: bold;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-weight: bold;
- margin: 10px 0;
-}
-h1 {
- font-size: 1.538em;
-}
-h2 {
- font-size: 1.385em;
-}
-h3 {
- font-size: 1.231em;
-}
-h4 {
- font-size: 1.154em;
-}
-h5,
-h6 {
- font-size: 1.077em;
-}
-p {
- margin: 1em 0;
-}
-dl {
- margin: 0 0 20px;
-}
-dl dd,
-dl dl {
- margin-left: 20px; /* LTR */
- margin-bottom: 10px;
-}
-blockquote {
- margin: 1em 40px;
-}
-address {
- font-style: italic;
-}
-u,
-ins {
- text-decoration: underline;
-}
-s,
-strike,
-del {
- text-decoration: line-through;
-}
-big {
- font-size: larger;
-}
-small {
- font-size: smaller;
-}
-sub {
- vertical-align: sub;
- font-size: smaller;
- line-height: normal;
-}
-sup {
- vertical-align: super;
- font-size: smaller;
- line-height: normal;
-}
-nobr {
- white-space: nowrap;
-}
-abbr,
-acronym {
- border-bottom: dotted 1px;
-}
-ul,
-.block ul,
-.item-list ul {
- list-style-type: disc;
- list-style-image: none;
- margin: 0.25em 0 0.25em 1.5em; /* LTR */
-}
-.item-list .pager li {
- padding: 0.5em;
-}
-.item-list ul li,
-li.leaf,
-ul.menu li {
- list-style-type: disc;
- list-style-image: none;
-}
-ul.menu li {
- margin: 0;
-}
-ol {
- list-style-type: decimal;
- margin: 0.25em 0 0.25em 2em; /* LTR */
-}
-.item-list ul li.collapsed,
-ul.menu li.collapsed {
- list-style-image:url(../../misc/menu-collapsed.png);
- list-style-type:disc;
-}
-.item-list ul li.expanded,
-ul.menu li.expanded {
- list-style-image:url(../../misc/menu-expanded.png);
- list-style-type:circle;
-}
-quote,
-code {
- margin: .5em 0;
-}
-code,
-pre,
-kbd {
- font-size: 1.231em;
-}
-pre {
- margin: 0.5em 0;
- white-space: pre-wrap;
-}
-
-/**
- * Skip link.
- */
-#skip-link {
- margin-top: 0;
- position: absolute;
- left: 50%; /* LTR */
- margin-left: -5.25em; /* LTR */
- width: auto;
- z-index: 50;
-}
-#skip-link a,
-#skip-link a:link,
-#skip-link a:visited {
- display: block;
- background: #444;
- color: #fff;
- font-size: 0.94em;
- padding: 1px 10px 2px 10px; /* LTR */
- text-decoration: none;
- -moz-border-radius: 0 0 10px 10px;
- -webkit-border-top-left-radius: 0;
- -webkit-border-top-right-radius: 0;
- -webkit-border-bottom-left-radius: 10px;
- -webkit-border-bottom-right-radius: 10px;
- border-radius: 0 0 10px 10px;
-}
-#skip-link a:hover,
-#skip-link a:focus,
-#skip-link a:active {
- outline: 0;
-}
-
-/**
- * Branding.
- */
-#branding {
- overflow: hidden;
- padding: 20px 20px 0 20px; /* LTR */
- position: relative;
- background-color: #e0e0d8;
-}
-#branding div.breadcrumb {
- font-size: 0.846em;
- padding-bottom: 5px;
-}
-#branding div.block {
- position: relative;
- float: right; /* LTR */
- width: 240px;
- padding-left: 10px; /* LTR */
- background: #333;
-}
-#branding div.block form label {
- display: none;
-}
-#branding div.block form div.form-item {
- float: left; /* LTR */
- border: 0;
- margin: 0;
- padding: 0;
-}
-#branding div.block form input.form-text {
- width: 140px;
- margin-right: 10px; /* LTR */
-}
-#branding div.block form input.form-submit {
- text-align: center;
- width: 80px;
-}
-
-/**
- * Help.
- */
-#help {
- font-size: 0.923em;
- margin-top: 1em;
-}
-#help p {
- margin: 0 0 10px;
-}
-#help div.more-help-link {
- text-align: right; /* LTR */
-}
-
-/**
- * Page title.
- */
-#page-title {
- background: #333;
- padding-top: 20px;
-}
-#branding h1.page-title {
- color: #000;
- margin: 0;
- padding-bottom: 10px;
- font-size: 1.385em;
- font-weight: normal;
- float: left; /* LTR */
-}
-
-/**
- * Console.
- */
-#console {
- margin: 9px 0 10px;
-}
-
-/**
- * Tabs.
- */
-ul.primary {
- float: right; /* LTR */
- border-bottom: none;
- text-transform: uppercase;
- font-size: 0.923em;
- height: 2.60em;
- margin: 0;
- padding-top: 0;
-}
-ul.primary li {
- float: left; /* LTR */
- list-style: none;
- margin: 0 2px;
-}
-ul.primary li a:link,
-ul.primary li a.active,
-ul.primary li a:active,
-ul.primary li a:visited,
-ul.primary li a:hover,
-ul.primary li.active a {
- display: block;
- float: left; /* LTR */
- height: 2.60em;
- line-height: 2.60em;
- padding: 0 18px 8px;
- background-color: #a6a7a2;
- color: #000;
- font-weight: bold;
- border-width: 1px 1px 0 1px;
- border-style: solid;
- border-color: #a6a7a2;
- -moz-border-radius: 8px 8px 0 0;
- -webkit-border-top-left-radius: 8px;
- -webkit-border-top-right-radius: 8px;
- border-radius: 8px 8px 0 0;
-}
-ul.primary li.active a,
-ul.primary li.active a.active,
-ul.primary li.active a:active,
-ul.primary li.active a:visited {
- background-color: #fff;
- border-color: #c9cac4;
-}
-ul.primary li a:hover {
- color: #fff;
-}
-ul.primary li.active a:hover {
- color: #000;
-}
-.tabs-secondary {
- clear: both;
-}
-ul.secondary {
- float: right; /* LTR */
- font-size: 0.923em;
- padding: 0 3px 5px;
- line-height: 1.385em;
- overflow: hidden;
- background-color: #fff;
-}
-ul.secondary li {
- margin: 0 5px;
- float: none; /* LTR */
-}
-ul.secondary li a {
- background-color: #ddd;
- color: #000;
- display: inline-block;
-}
-ul.secondary li a,
-ul.secondary li a:hover,
-ul.secondary li.active a,
-ul.secondary li.active a.active {
- padding: 2px 10px;
- -moz-border-radius: 7px;
- -webkit-border-radius: 7px;
- border-radius: 7px;
-}
-ul.secondary li a:hover,
-ul.secondary li.active a,
-ul.secondary li.active a.active {
- color: #fff;
- background: #666;
-}
-#content {
- clear: left;
-}
-
-/**
- * Page layout.
- */
-#page {
- padding: 20px 0 40px 0; /* LTR */
- margin-right: 40px; /* LTR */
- margin-left: 40px; /* LTR */
- background: #fff;
- position: relative;
- color: #333;
-}
-#secondary-links ul.links li {
- padding: 0 10px 10px 0; /* LTR */
-}
-#secondary-links ul.links li a {
- font-size: 0.923em;
- background: #777;
- color: #fff;
- text-align: center;
- padding: 5px;
- height: 55px;
- width: 80px;
- overflow: hidden;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
-}
-#secondary-links ul.links li a:hover {
- background: #999;
-}
-ul.links li,
-ul.inline li {
- padding-right: 1em; /* LTR */
-}
-ul.inline li {
- display: inline;
-}
-#secondary-links ul.links li.active-trail a,
-#secondary-links ul.links li a.active {
- background: #333;
-}
-ul.admin-list li {
- position: relative;
- padding-left: 30px; /* LTR */
- padding-top: 9px;
- border-top: 1px solid #ccc;
- margin-left: 0; /* LTR */
- margin-bottom: 10px;
- background: url(images/list-item.png) no-repeat 0 11px; /* LTR */
- list-style-type: none;
- list-style-image: none;
-}
-.admin-panel .item-list ul,
-ul.admin-list {
- margin: 0;
- padding: 0;
-}
-.admin-panel .item-list ul,
-ul.admin-list.compact {
- margin: 8px 0;
-}
-.admin-panel .item-list li,
-ul.admin-list.compact li {
- border: none;
- background: none;
- margin: 0 0 0.75em;
- line-height: 1;
- padding: 0;
-}
-ul.admin-list li:last-child {
- border-bottom: none;
-}
-ul.admin-list li a {
- margin-left: -30px; /* LTR */
- padding: 0 0 4px 30px; /* LTR */
- min-height: 0;
-}
-ul.admin-list.compact li a {
- margin-left: 0; /* LTR */
- padding: 0;
-}
-ul.admin-list li div.description a {
- margin-left: 0; /* LTR */
- padding: 0;
- min-height: inherit;
-}
-div.submitted {
- color: #898989;
-}
-
-/**
- * Tables.
- */
-table {
- width: 100%;
- font-size: 0.923em;
- margin: 0 0 10px;
- border: 1px solid #bebfb9;
-}
-table td,
-table th {
- vertical-align: middle;
- padding: 8px 10px;
- border: 0;
- color: #000;
-}
-tr.even,
-tr.odd {
- border-width: 0 1px 0 1px;
- border-style: solid;
- border-color: #bebfb9;
- background: #f3f4ee;
-}
-tr.odd {
- background: #fff;
-}
-tr.drag {
- background: #fe7;
-}
-tr.drag-previous {
- background: #ffb;
-}
-table th {
- text-transform: uppercase;
- background: #e1e2dc;
- font-weight: normal;
- border-width: 1px;
- border-style: solid;
- border-color: #bebfb9;
- padding: 3px 10px;
-}
-/**
- * Force browsers to calculate the width of a 'select all' TH element.
- */
-table th.select-all {
- width: 1px;
-}
-table th.active {
- background: #bdbeb9;
-}
-table th a {
- display: block;
- position: relative;
-}
-table th.active a {
- padding: 0 25px 0 0; /* LTR */
-}
-table th.active img {
- position: absolute;
- top: 3px;
- right: 3px; /* LTR */
-}
-table td.active {
- background: #e9e9dd;
-}
-table tr.odd td.active {
- background: #f3f4ee;
-}
-table tr.selected td.active,
-table tr.selected td {
- background: #ffc;
- border-color: #eeb;
-}
-table.system-status-report tr {
- border-bottom: 1px solid #ccc;
-}
-table.system-status-report tr.ok {
- color: #255b1e;
- background-color: #e5ffe2;
-}
-table.system-status-report tr.info {
- color: #040f37;
- background-color: #bdf;
-}
-table.system-status-report tr.warning {
- color: #840;
- background-color: #fffce5;
-}
-table.system-status-report tr.error {
- color: #8c2e0b;
- background-color: #fef5f1;
-}
-/**
- * Exception for webkit bug with the right border of the last cell
- * in some tables, since it's webkit only, we can use :last-child
- */
-tr td:last-child {
- border-right: 1px solid #bebfb9; /* LTR */
-}
-
-
-/**
- * Fieldsets.
- *
- * Fieldset legends are displayed like containers in Seven. However, several
- * browsers do not support styling of LEGEND elements. To achieve the desired
- * styling:
- * - All fieldsets use 'position: relative'.
- * - All legend labels are wrapped in a single span.fieldset-legend that uses
- * 'position: absolute', which means that the LEGEND element itself is not
- * rendered by browsers.
- * - Due to using 'position: absolute', collapsed fieldsets do not have a
- * height; the fieldset requires a 'padding-top' to make the absolute
- * positioned .fieldset-legend appear as though it would have a height.
- * - Various browsers are positioning the legend differently if there is a
- * 'padding-left'/'padding-right' applied on a fieldset and inherit the
- * positioning even to absolute positioned elements within; we therefore have
- * to apply all padding to the inner .fieldset-wrapper instead.
- */
-fieldset {
- border: 1px solid #ccc;
- padding: 2.5em 0 0 0; /* LTR */
- position: relative;
- margin: 1em 0;
-}
-fieldset .fieldset-legend {
- margin-top: 0.5em;
- padding-left: 15px; /* LTR */
- position: absolute;
- text-transform: uppercase;
-}
-fieldset .fieldset-wrapper {
- padding: 0 13px 13px 15px; /* LTR */
-}
-fieldset.collapsed {
- background-color: transparent;
-}
-html.js fieldset.collapsed {
- border-width: 1px;
- height: auto;
-}
-fieldset fieldset {
- background-color: #fff;
-}
-fieldset fieldset fieldset {
- background-color: #f8f8f8;
-}
-
-/**
- * Form elements.
- */
-.form-item {
- padding: 9px 0;
- margin: 0 0 10px;
-}
-.filter-wrapper .form-item,
-div.teaser-checkbox .form-item,
-.form-item .form-item {
- padding: 5px 0;
- margin: 0;
- border: 0;
-}
-.form-type-checkbox {
- padding: 0;
-}
-.text-format-wrapper .form-item {
- padding-bottom: 0;
-}
-.form-item label {
- margin: 0;
- padding: 0;
-}
-.form-item label.option {
- font-size: 0.923em;
- text-transform: none;
-}
-.form-item label.option input {
- vertical-align: middle;
-}
-.form-disabled input.form-autocomplete,
-.form-disabled input.form-text,
-.form-disabled input.form-file,
-.form-disabled textarea.form-textarea,
-.form-disabled select.form-select {
- background-color: #eee;
- color: #777;
-}
-
-/* Filter */
-.filter-wrapper {
- border-top: 0;
- padding: 10px 2px;
-}
-.filter-wrapper .fieldset-wrapper {
- padding: 0 6px;
-}
-.filter-wrapper .form-item,
-.filter-wrapper .filter-guidelines,
-.filter-wrapper .filter-help {
- font-size: 0.923em;
- padding: 2px 0 0 0; /* LTR */
-}
-ul.tips,
-div.description,
-.form-item div.description {
- margin: 5px 0;
- line-height: 1.231em;
- font-size: 0.923em;
- color: #666;
-}
-ul.tips li {
- margin: 0.25em 0 0.25em 1.5em; /* LTR */
-}
-body div.form-type-radio div.description,
-body div.form-type-checkbox div.description {
- margin-left: 1.5em; /* LTR */
-}
-input.form-submit,
-a.button {
- cursor: pointer;
- padding: 4px 17px;
- margin-bottom: 1em;
- margin-right: 1em; /* LTR */
- color: #5a5a5a;
- text-align: center;
- font-weight: normal;
- font-size: 1.077em;
- font-family: "Lucida Grande", Verdana, sans-serif;
- border: 1px solid #e4e4e4;
- border-bottom: 1px solid #b4b4b4;
- border-left-color: #d2d2d2;
- border-right-color: #d2d2d2;
- background: url(images/buttons.png) 0 0 repeat-x;
- -moz-border-radius: 20px;
- -webkit-border-radius: 20px;
- border-radius: 20px;
-}
-a.button:link,
-a.button:visited,
-a.button:hover,
-a.button:active {
- text-decoration: none;
- color: #5a5a5a;
-}
-input.form-submit:active {
- background: #666;
- color: #fff;
- border-color: #555;
- text-shadow: #222 0 -1px 0;
-}
-input.form-button-disabled,
-input.form-button-disabled:active {
- background: #eee none;
- border-color: #eee;
- text-shadow: none;
- color: #999;
-}
-input.form-autocomplete,
-input.form-text,
-input.form-file,
-textarea.form-textarea,
-select.form-select {
- padding: 2px;
- border: 1px solid #ccc;
- border-top-color: #999;
- background: #fff;
- color: #333;
-}
-input.form-text:focus,
-input.form-file:focus,
-textarea.form-textarea:focus,
-select.form-select:focus {
- color: #000;
- border-color: #ace;
-}
-
-ul.action-links {
- margin: 1em 0;
- padding: 0 20px 0 20px; /* LTR */
- list-style-type: none;
- overflow: hidden;
-}
-ul.action-links li {
- float: left; /* LTR */
- margin: 0 1em 0 0; /* LTR */
-}
-ul.action-links a {
- padding-left: 15px; /* LTR */
- background: transparent url(images/add.png) no-repeat 0 center;
- line-height: 30px;
-}
-
-/* Exceptions */
-#diff-inline-form select,
-div.filter-options select {
- padding: 0;
-}
-
-/**
- * System.
- */
-div.admin .right,
-div.admin .left {
- width: 49%;
- margin: 0;
-}
-div.admin-panel,
-div.admin-panel .body {
- padding: 0;
- clear: left;
-}
-div.admin-panel {
- margin: 0 0 20px;
- padding: 9px;
- background: #f8f8f8;
- border: 1px solid #ccc;
-}
-div.admin-panel h3 {
- font-size: 0.923em;
- text-transform: uppercase;
- margin: 0;
- padding-bottom: 9px;
-}
-
-/* admin/appearance */
-#system-themes-page h2 {
- font-weight: normal;
- text-transform: uppercase;
-}
-.theme-selector h3 {
- font-weight: normal;
-}
-.theme-default h3 {
- font-weight: bold;
-}
-.system-themes-list-enabled .theme-selector h3 {
- margin-top: 0;
-}
-
-/* Update options. */
-div.admin-options {
- background: #f8f8f8;
- line-height: 30px;
- height: 30px;
- padding: 9px;
- border: 1px solid #ccc;
- margin: 0 0 10px;
-}
-div.admin-options label {
- text-transform: uppercase;
- font: 0.846em/1.875em Lucida Grande, Lucida Sans Unicode, sans-serif;
-}
-div.admin-options label,
-div.admin-options div.form-item {
- margin-right: 10px; /* LTR */
- float: left; /* LTR */
-}
-div.admin-options div.form-item {
- padding: 0;
- border: 0;
-}
-
-/* Update status */
-.versions table.version {
- border: none;
-}
-
-/* Maintenance theming */
-body.in-maintenance #sidebar-first {
- float: left; /* LTR */
- width: 200px;
-}
-body.in-maintenance #content {
- float: right; /* LTR */
- width: 550px;
- padding-right: 20px; /* LTR */
- clear: none;
-}
-body.in-maintenance #page {
- overflow: auto;
- width: 770px;
- margin: 0 auto;
- padding-top: 2em;
-}
-body.in-maintenance #branding h1 {
- width: 770px;
- margin: 0 auto;
- float: none;
-}
-body.in-maintenance .form-radios .form-type-radio {
- padding: 2px 0;
-}
-body.in-maintenance div.form-item:after {
- content: "";
- display: none;
- clear: none;
-}
-body.in-maintenance .form-submit {
- display: block;
-}
-body.in-maintenance #logo {
- margin-bottom: 1.5em;
- max-width: 180px;
-}
-ol.task-list {
- margin-left: 0; /* LTR */
- list-style-type: none;
- list-style-image: none;
-}
-ol.task-list li {
- padding: 0.5em 1em 0.5em 20px; /* LTR */
- color: #adadad;
-}
-ol.task-list li.active {
- background: transparent url(images/task-item.png) no-repeat 3px 50%; /* LTR */
- padding: 0.5em 1em 0.5em 20px; /* LTR */
- color: #000;
-}
-ol.task-list li.done {
- background: transparent url(images/task-check.png) no-repeat 0 50%;
- color: green;
-}
-
-/* Overlay theming */
-.overlay #branding {
- background-color: #fff;
- padding-top: 15px;
-}
-.overlay #branding h1.page-title,
-.overlay #left,
-.overlay #footer {
- display: none;
-}
-.overlay #page {
- margin: 0;
- padding: 0 20px;
-}
-.overlay #branding div.breadcrumb {
- float: left; /* LTR */
- position: relative;
- z-index: 10;
-}
-#overlay-tabs {
- bottom: -1px;
- font-size: 1.54em;
- line-height: 1.54em;
- margin: 0;
-}
-#overlay-tabs li {
- margin: 0 -2px;
-}
-.overlay ul.secondary {
- background: transparent none;
- margin: -1.4em 0 0.3em 0; /* LTR */
- overflow: visible;
-}
-.overlay #content {
- padding: 0;
-}
-h1#overlay-title {
- font-weight: normal;
-}
-
-/* Shortcut theming */
-div.add-or-remove-shortcuts {
- float: left; /* LTR */
- padding-top: 6px;
- padding-left: 6px; /* LTR */
-}
-
-/* Dashboard */
-#dashboard .dashboard-region div.block h2 {
- background: #E0E0D8;
-}
-#dashboard div.block h2 {
- margin: 0;
- font-size: 1em;
- padding: 3px 10px;
-}
-#dashboard div.block div.content {
- padding: 10px 5px 5px 5px; /* LTR */
-}
-#dashboard div.block div.content ul.menu {
- margin-left: 20px; /* LTR */
-}
-#dashboard .dashboard-region .block {
- border: #ccc 1px solid;
-}
-
-/* Field UI */
-
-#field-display-overview input.field-formatter-settings-edit {
- margin: 0;
- padding: 1px 8px;
-}
-#field-display-overview tr.field-formatter-settings-changed {
- background: #FFFFBB;
-}
-#field-display-overview tr.drag {
- background: #FFEE77;
-}
-#field-display-overview tr.field-formatter-settings-editing {
- background: #D5E9F2;
-}
-#field-display-overview .field-formatter-settings-edit-form .form-item {
- margin: 10px 0;
-}
-#field-display-overview .field-formatter-settings-edit-form .form-submit {
- margin-bottom: 0;
-}
-
-/* Recent content block */
-#dashboard div#block-node-recent div.content {
- padding: 0;
-}
-#block-node-recent table,
-#block-node-recent tr {
- border: none;
-}
-#block-node-recent .more-link {
- padding: 0 5px 5px 0; /* LTR */
-}
-
-/* User login block */
-#user-login-form .openid-links {
- margin-left: 0; /* LTR */
-}
-#user-login-form .openid-links .user-link {
- margin-left: 1.5em; /* LTR */
-}
-
-/* Disable overlay message */
-#overlay-disable-message {
- background-color: #addafc;
-}
-#overlay-disable-message a,
-#overlay-disable-message a:visited {
- color: #000;
-}
-#overlay-disable-message a:focus,
-#overlay-disable-message a:active {
- outline: none;
- text-decoration: underline;
-}
-.overlay-disable-message-focused a {
- padding: 0.4em 0.6em;
-}
-.overlay-disable-message-focused #overlay-dismiss-message {
- background-color: #59a0d8;
- color: #fff;
- -moz-border-radius: 8px;
- -webkit-border-radius: 8px;
- border-radius: 8px;
-}
diff --git a/themes/seven/template.php b/themes/seven/template.php
deleted file mode 100644
index 5c086fa..0000000
--- a/themes/seven/template.php
+++ /dev/null
@@ -1,118 +0,0 @@
- CSS_THEME, 'browsers' => array('IE' => 'lte IE 8', '!IE' => FALSE), 'weight' => 999, 'preprocess' => FALSE));
- // Add conditional CSS for IE7 and below.
- drupal_add_css(path_to_theme() . '/ie7.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 7', '!IE' => FALSE), 'weight' => 999, 'preprocess' => FALSE));
- // Add conditional CSS for IE6.
- drupal_add_css(path_to_theme() . '/ie6.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 6', '!IE' => FALSE), 'weight' => 999, 'preprocess' => FALSE));
-}
-
-/**
- * Override or insert variables into the page template.
- */
-function seven_preprocess_page(&$vars) {
- $vars['primary_local_tasks'] = $vars['tabs'];
- unset($vars['primary_local_tasks']['#secondary']);
- $vars['secondary_local_tasks'] = array(
- '#theme' => 'menu_local_tasks',
- '#secondary' => $vars['tabs']['#secondary'],
- );
-}
-
-/**
- * Display the list of available node types for node creation.
- */
-function seven_node_add_list($variables) {
- $content = $variables['content'];
- $output = '';
- if ($content) {
- $output = '';
- }
- else {
- $output = '' . t('You have not created any content types yet. Go to the content type creation page to add a new content type.', array('@create-content' => url('admin/structure/types/add'))) . '
';
- }
- return $output;
-}
-
-/**
- * Overrides theme_admin_block_content().
- *
- * Use unordered list markup in both compact and extended mode.
- */
-function seven_admin_block_content($variables) {
- $content = $variables['content'];
- $output = '';
- if (!empty($content)) {
- $output = system_admin_compact_mode() ? '' : '';
- }
- return $output;
-}
-
-/**
- * Override of theme_tablesort_indicator().
- *
- * Use our own image versions, so they show up as black and not gray on gray.
- */
-function seven_tablesort_indicator($variables) {
- $style = $variables['style'];
- $theme_path = drupal_get_path('theme', 'seven');
- if ($style == 'asc') {
- return theme('image', array('path' => $theme_path . '/images/arrow-asc.png', 'alt' => t('sort ascending'), 'width' => 13, 'height' => 13, 'title' => t('sort ascending')));
- }
- else {
- return theme('image', array('path' => $theme_path . '/images/arrow-desc.png', 'alt' => t('sort descending'), 'width' => 13, 'height' => 13, 'title' => t('sort descending')));
- }
-}
-
-/**
- * Implements hook_css_alter().
- */
-function seven_css_alter(&$css) {
- // Use Seven's vertical tabs style instead of the default one.
- if (isset($css['misc/vertical-tabs.css'])) {
- $css['misc/vertical-tabs.css']['data'] = drupal_get_path('theme', 'seven') . '/vertical-tabs.css';
- $css['misc/vertical-tabs.css']['type'] = 'file';
- }
- if (isset($css['misc/vertical-tabs-rtl.css'])) {
- $css['misc/vertical-tabs-rtl.css']['data'] = drupal_get_path('theme', 'seven') . '/vertical-tabs-rtl.css';
- $css['misc/vertical-tabs-rtl.css']['type'] = 'file';
- }
- // Use Seven's jQuery UI theme style instead of the default one.
- if (isset($css['misc/ui/jquery.ui.theme.css'])) {
- $css['misc/ui/jquery.ui.theme.css']['data'] = drupal_get_path('theme', 'seven') . '/jquery.ui.theme.css';
- $css['misc/ui/jquery.ui.theme.css']['type'] = 'file';
- }
-}
diff --git a/themes/seven/vertical-tabs-rtl.css b/themes/seven/vertical-tabs-rtl.css
deleted file mode 100644
index a9598c3..0000000
--- a/themes/seven/vertical-tabs-rtl.css
+++ /dev/null
@@ -1,21 +0,0 @@
-
-/**
- * Override of misc/vertical-tabs-rtl.css.
- */
-div.vertical-tabs {
- background: #fff url(images/fc-rtl.png) repeat-y right 0;
-}
-div.vertical-tabs .vertical-tabs-list {
- float: right;
- margin: 0 0 -1px -100%;
-}
-div.vertical-tabs ul li.selected a,
-div.vertical-tabs ul li.selected a:hover,
-div.vertical-tabs ul li.selected a:focus,
-div.vertical-tabs ul li.selected a:active {
- border-left-color: #fff;
-}
-div.vertical-tabs .vertical-tabs-panes {
- margin: 0 265px 0 0;
- padding: 10px 0 10px 15px;
-}
diff --git a/themes/seven/vertical-tabs.css b/themes/seven/vertical-tabs.css
deleted file mode 100644
index 31d21d4..0000000
--- a/themes/seven/vertical-tabs.css
+++ /dev/null
@@ -1,96 +0,0 @@
-
-/**
- * Override of misc/vertical-tabs.css.
- */
-div.vertical-tabs {
- background: #fff url(images/fc.png) repeat-y 0 0; /* LTR */
- border: 1px solid #ccc;
- margin: 10px 0;
- position: relative;
-}
-fieldset.vertical-tabs-pane {
- border: 0;
- padding: 0;
- margin: 0;
-}
-div.vertical-tabs .vertical-tabs-list {
- border-bottom: 1px solid #ccc;
- float: left; /* LTR */
- font-size: 1em;
- line-height: 1;
- margin: 0 -100% -1px 0; /* LTR */
- padding: 0;
- width: 240px;
-}
-div.vertical-tabs ul li.vertical-tab-button {
- list-style: none;
- list-style-image: none;
- margin: 0;
-}
-div.vertical-tabs ul li.vertical-tab-button a {
- border-top: 1px solid #ccc;
- display: block;
- padding: 10px;
-}
-div.vertical-tabs ul li.first a {
- border-top: 0;
-}
-div.vertical-tabs ul li.vertical-tab-button strong {
- font-size: 0.923em;
-}
-div.vertical-tabs ul li.vertical-tab-button .summary {
- color: #666;
- display: block;
- font-size: 0.846em;
- padding-top: 0.4em;
-}
-div.vertical-tabs ul li.vertical-tab-button a:hover,
-div.vertical-tabs ul li.vertical-tab-button a:focus {
- background: #d5d5d5;
- text-decoration: none;
- outline: 0;
-}
-div.vertical-tabs ul li.selected a,
-div.vertical-tabs ul li.selected a:hover,
-div.vertical-tabs ul li.selected a:focus,
-div.vertical-tabs ul li.selected a:active {
- background: #fff;
- border-right-color: #fff; /* LTR */
- border-top: 1px solid #ccc;
-}
-div.vertical-tabs ul li.first.selected a,
-div.vertical-tabs ul li.first.selected a:hover {
- border-top: 0;
-}
-div.vertical-tabs ul li.selected a:focus strong {
- text-decoration: underline;
-}
-div.vertical-tabs .vertical-tabs-panes {
- margin: 0 0 0 265px; /* LTR */
- padding: 10px 15px 10px 0; /* LTR */
-}
-fieldset.vertical-tabs-pane legend {
- display: none;
-}
-fieldset.vertical-tabs-pane fieldset legend {
- display: block;
-}
-.vertical-tabs-pane .fieldset-wrapper > div:first-child {
- padding-top: 5px;
-}
-
-/**
- * Prevent text inputs from overflowing when container is too narrow. "width" is
- * applied to override hardcoded cols or size attributes and used in conjunction
- * with "box-sizing" to prevent box model issues from occurring in most browsers.
-*/
-.vertical-tabs .form-type-textfield input {
- width: 100%;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
-}
-* html .vertical-tabs .form-type-textfield,
-* html .vertical-tabs .form-textarea-wrapper {
- width: 95%; /* IE6 */
-}
diff --git a/themes/stark/README.txt b/themes/stark/README.txt
deleted file mode 100644
index e7af281..0000000
--- a/themes/stark/README.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-
-ABOUT STARK
------------
-
-The Stark theme is provided for demonstration purposes; it uses Drupal's default
-HTML markup and CSS styles. It can be used as a troubleshooting tool to
-determine whether module-related CSS and JavaScript are interfering with a more
-complex theme, and can be used by designers interested in studying Drupal's
-default markup without the interference of changes commonly made by more complex
-themes.
-
-To avoid obscuring CSS added to the page by Drupal or a contrib module, the
-Stark theme itself has no styling, except just enough CSS to arrange the page in
-a traditional "Header, sidebars, content, and footer" layout. See the layout.css
-file for more information.
-
-
-ABOUT DRUPAL THEMING
---------------------
-
-To learn how to build your own custom theme and override Drupal's default code,
-see the Theming Guide: http://drupal.org/theme-guide
-
-See the sites/all/themes/README.txt for more information on where to place your
-custom themes to ensure easy maintenance and upgrades.
diff --git a/themes/stark/layout.css b/themes/stark/layout.css
deleted file mode 100644
index 43bb93f..0000000
--- a/themes/stark/layout.css
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/**
- * @file
- * Stark layout method
- *
- * To avoid obscuring CSS added to the page by Drupal or a contrib module, the
- * Stark theme itself has no styling, except just enough CSS to arrange the page
- * in a traditional "Header, sidebars, content, and footer" layout.
- *
- * This layout method works reasonably well, but shouldn't be used on a
- * production site because it can break. For example, if an over-large image
- * (one that is wider than 20% of the viewport) is in the left sidebar, the
- * image will overlap with the #content to the right. The exception to this
- * is IE6 which will just hide the navigation block completely in these
- * instances due to a positioning bug.
- */
-
-#content,
-#sidebar-first,
-#sidebar-second {
- float: left;
- display: inline;
- position: relative;
-}
-
-#content {
- width: 100%;
-}
-body.sidebar-first #content {
- width: 80%;
- left: 20%; /* LTR */
-}
-body.sidebar-second #content {
- width: 80%;
-}
-body.two-sidebars #content {
- width: 60%;
- left: 20%;
-}
-
-#sidebar-first {
- width: 20%;
- left: -80%; /* LTR */
-}
-
-body.two-sidebars #sidebar-first {
- left: -60%; /* LTR */
-}
-
-#sidebar-second {
- float: right; /* LTR */
- width: 20%;
-}
-
-.section {
- margin: 10px;
-}
diff --git a/themes/stark/logo.png b/themes/stark/logo.png
deleted file mode 100644
index 32332cf..0000000
Binary files a/themes/stark/logo.png and /dev/null differ
diff --git a/themes/stark/screenshot.png b/themes/stark/screenshot.png
deleted file mode 100644
index 6fe457f..0000000
Binary files a/themes/stark/screenshot.png and /dev/null differ
diff --git a/themes/stark/stark.info b/themes/stark/stark.info
deleted file mode 100644
index f9b88df..0000000
--- a/themes/stark/stark.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Stark
-description = This theme demonstrates Drupal's default HTML markup and CSS styles. To learn how to build your own theme and override Drupal's default code, see the Theming Guide .
-package = Core
-version = VERSION
-core = 7.x
-stylesheets[all][] = layout.css
diff --git a/update.php b/update.php
deleted file mode 100644
index d792703..0000000
--- a/update.php
+++ /dev/null
@@ -1,511 +0,0 @@
- TRUE,
- '#type' => 'fieldset',
- '#collapsed' => TRUE,
- '#collapsible' => TRUE,
- );
-
- // Ensure system.module's updates appear first.
- $form['start']['system'] = array();
-
- $updates = update_get_update_list();
- $starting_updates = array();
- $incompatible_updates_exist = FALSE;
- foreach ($updates as $module => $update) {
- if (!isset($update['start'])) {
- $form['start'][$module] = array(
- '#type' => 'item',
- '#title' => $module . ' module',
- '#markup' => $update['warning'],
- '#prefix' => '',
- '#suffix' => '
',
- );
- $incompatible_updates_exist = TRUE;
- continue;
- }
- if (!empty($update['pending'])) {
- $starting_updates[$module] = $update['start'];
- $form['start'][$module] = array(
- '#type' => 'hidden',
- '#value' => $update['start'],
- );
- $form['start'][$module . '_updates'] = array(
- '#theme' => 'item_list',
- '#items' => $update['pending'],
- '#title' => $module . ' module',
- );
- }
- if (isset($update['pending'])) {
- $count = $count + count($update['pending']);
- }
- }
-
- // Find and label any incompatible updates.
- foreach (update_resolve_dependencies($starting_updates) as $function => $data) {
- if (!$data['allowed']) {
- $incompatible_updates_exist = TRUE;
- $incompatible_count++;
- $module_update_key = $data['module'] . '_updates';
- if (isset($form['start'][$module_update_key]['#items'][$data['number']])) {
- $text = $data['missing_dependencies'] ? 'This update will been skipped due to the following missing dependencies: ' . implode(', ', $data['missing_dependencies']) . ' ' : "This update will be skipped due to an error in the module's code.";
- $form['start'][$module_update_key]['#items'][$data['number']] .= '' . $text . '
';
- }
- // Move the module containing this update to the top of the list.
- $form['start'] = array($module_update_key => $form['start'][$module_update_key]) + $form['start'];
- }
- }
-
- // Warn the user if any updates were incompatible.
- if ($incompatible_updates_exist) {
- drupal_set_message('Some of the pending updates cannot be applied because their dependencies were not met.', 'warning');
- }
-
- if (empty($count)) {
- drupal_set_message(t('No pending updates.'));
- unset($form);
- $form['links'] = array(
- '#markup' => theme('item_list', array('items' => update_helpful_links())),
- );
-
- // No updates to run, so caches won't get flushed later. Clear them now.
- drupal_flush_all_caches();
- }
- else {
- $form['help'] = array(
- '#markup' => 'The version of Drupal you are updating from has been automatically detected.
',
- '#weight' => -5,
- );
- if ($incompatible_count) {
- $form['start']['#title'] = format_plural(
- $count,
- '1 pending update (@number_applied to be applied, @number_incompatible skipped)',
- '@count pending updates (@number_applied to be applied, @number_incompatible skipped)',
- array('@number_applied' => $count - $incompatible_count, '@number_incompatible' => $incompatible_count)
- );
- }
- else {
- $form['start']['#title'] = format_plural($count, '1 pending update', '@count pending updates');
- }
- $form['has_js'] = array(
- '#type' => 'hidden',
- '#default_value' => FALSE,
- );
- $form['actions'] = array('#type' => 'actions');
- $form['actions']['submit'] = array(
- '#type' => 'submit',
- '#value' => 'Apply pending updates',
- );
- }
- return $form;
-}
-
-/**
- * Provides links to the homepage and administration pages.
- */
-function update_helpful_links() {
- $links[] = 'Front page ';
- if (user_access('access administration pages')) {
- $links[] = 'Administration pages ';
- }
- return $links;
-}
-
-/**
- * Displays results of the update script with any accompanying errors.
- */
-function update_results_page() {
- drupal_set_title('Drupal database update');
- $links = update_helpful_links();
-
- update_task_list();
- // Report end result.
- if (module_exists('dblog') && user_access('access site reports')) {
- $log_message = ' All errors have been logged .';
- }
- else {
- $log_message = ' All errors have been logged.';
- }
-
- if ($_SESSION['update_success']) {
- $output = 'Updates were attempted. If you see no failures below, you may proceed happily back to your site . Otherwise, you may need to update your database manually.' . $log_message . '
';
- }
- else {
- $updates_remaining = reset($_SESSION['updates_remaining']);
- list($module, $version) = array_pop($updates_remaining);
- $output = 'The update process was aborted prematurely while running update #' . $version . ' in ' . $module . '.module .' . $log_message;
- if (module_exists('dblog')) {
- $output .= ' You may need to check the watchdog
database table manually.';
- }
- $output .= '
';
- }
-
- if (!empty($GLOBALS['update_free_access'])) {
- $output .= "Reminder: don't forget to set the \$update_free_access
value in your settings.php
file back to FALSE
.
";
- }
-
- $output .= theme('item_list', array('items' => $links));
-
- // Output a list of queries executed.
- if (!empty($_SESSION['update_results'])) {
- $all_messages = '';
- foreach ($_SESSION['update_results'] as $module => $updates) {
- if ($module != '#abort') {
- $module_has_message = FALSE;
- $query_messages = '';
- foreach ($updates as $number => $queries) {
- $messages = array();
- foreach ($queries as $query) {
- // If there is no message for this update, don't show anything.
- if (empty($query['query'])) {
- continue;
- }
-
- if ($query['success']) {
- $messages[] = '' . $query['query'] . ' ';
- }
- else {
- $messages[] = 'Failed: ' . $query['query'] . ' ';
- }
- }
-
- if ($messages) {
- $module_has_message = TRUE;
- $query_messages .= 'Update #' . $number . " \n";
- $query_messages .= '' . implode("\n", $messages) . " \n";
- }
- }
-
- // If there were any messages in the queries then prefix them with the
- // module name and add it to the global message list.
- if ($module_has_message) {
- $all_messages .= '' . $module . " module \n" . $query_messages;
- }
- }
- }
- if ($all_messages) {
- $output .= '
The following updates returned messages ';
- $output .= $all_messages;
- $output .= '';
- }
- }
- unset($_SESSION['update_results']);
- unset($_SESSION['update_success']);
-
- return $output;
-}
-
-/**
- * Provides an overview of the Drupal database update.
- *
- * This page provides cautionary suggestions that should happen before
- * proceeding with the update to ensure data integrity.
- *
- * @return
- * Rendered HTML form.
- */
-function update_info_page() {
- // Change query-strings on css/js files to enforce reload for all users.
- _drupal_flush_css_js();
- // Flush the cache of all data for the update status module.
- if (db_table_exists('cache_update')) {
- cache_clear_all('*', 'cache_update', TRUE);
- }
-
- update_task_list('info');
- drupal_set_title('Drupal database update');
- $token = drupal_get_token('update');
- $output = 'Use this utility to update your database whenever a new release of Drupal or a module is installed.
For more detailed information, see the upgrading handbook . If you are unsure what these terms mean you should probably contact your hosting provider.
';
- $output .= "\n";
- $output .= "Back up your database . This process will change your database values and in case of emergency you may need to revert to a backup. \n";
- $output .= "Back up your code . Hint: when backing up module code, do not leave that backup in the 'modules' or 'sites/*/modules' directories as this may confuse Drupal's auto-discovery mechanism. \n";
- $output .= 'Put your site into maintenance mode . ' . "\n";
- $output .= "Install your new files in the appropriate location, as described in the handbook. \n";
- $output .= " \n";
- $output .= "When you have performed the steps above, you may proceed.
\n";
- $form_action = check_url(drupal_current_script_url(array('op' => 'selection', 'token' => $token)));
- $output .= ' ';
- $output .= "\n";
- return $output;
-}
-
-/**
- * Renders a 403 access denied page for update.php.
- *
- * @return
- * Rendered HTML warning with 403 status.
- */
-function update_access_denied_page() {
- drupal_add_http_header('Status', '403 Forbidden');
- watchdog('access denied', 'update.php', NULL, WATCHDOG_WARNING);
- drupal_set_title('Access denied');
- return 'Access denied. You are not authorized to access this page. Log in using either an account with the administer software updates permission or the site maintenance account (the account you created during installation). If you cannot log in, you will have to edit settings.php
to bypass this access check. To do this:
-
- With a text editor find the settings.php file on your system. From the main Drupal directory that you installed all the files into, go to sites/your_site_name
if such directory exists, or else to sites/default
which applies otherwise.
- There is a line inside your settings.php file that says $update_free_access = FALSE;
. Change it to $update_free_access = TRUE;
.
- As soon as the update.php script is done, you must change the settings.php file back to its original form with $update_free_access = FALSE;
.
- To avoid having this problem in the future, remember to log in to your website using either an account with the administer software updates permission or the site maintenance account (the account you created during installation) before you backup your database at the beginning of the update process.
- ';
-}
-
-/**
- * Determines if the current user is allowed to run update.php.
- *
- * @return
- * TRUE if the current user should be granted access, or FALSE otherwise.
- */
-function update_access_allowed() {
- global $update_free_access, $user;
-
- // Allow the global variable in settings.php to override the access check.
- if (!empty($update_free_access)) {
- return TRUE;
- }
- // Calls to user_access() might fail during the Drupal 6 to 7 update process,
- // so we fall back on requiring that the user be logged in as user #1.
- try {
- require_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'user') . '/user.module';
- return user_access('administer software updates');
- }
- catch (Exception $e) {
- return ($user->uid == 1);
- }
-}
-
-/**
- * Adds the update task list to the current page.
- */
-function update_task_list($active = NULL) {
- // Default list of tasks.
- $tasks = array(
- 'requirements' => 'Verify requirements',
- 'info' => 'Overview',
- 'select' => 'Review updates',
- 'run' => 'Run updates',
- 'finished' => 'Review log',
- );
-
- drupal_add_region_content('sidebar_first', theme('task_list', array('items' => $tasks, 'active' => $active)));
-}
-
-/**
- * Returns and stores extra requirements that apply during the update process.
- */
-function update_extra_requirements($requirements = NULL) {
- static $extra_requirements = array();
- if (isset($requirements)) {
- $extra_requirements += $requirements;
- }
- return $extra_requirements;
-}
-
-/**
- * Checks update requirements and reports errors and (optionally) warnings.
- *
- * @param $skip_warnings
- * (optional) If set to TRUE, requirement warnings will be ignored, and a
- * report will only be issued if there are requirement errors. Defaults to
- * FALSE.
- */
-function update_check_requirements($skip_warnings = FALSE) {
- // Check requirements of all loaded modules.
- $requirements = module_invoke_all('requirements', 'update');
- $requirements += update_extra_requirements();
- $severity = drupal_requirements_severity($requirements);
-
- // If there are errors, always display them. If there are only warnings, skip
- // them if the caller has indicated they should be skipped.
- if ($severity == REQUIREMENT_ERROR || ($severity == REQUIREMENT_WARNING && !$skip_warnings)) {
- update_task_list('requirements');
- drupal_set_title('Requirements problem');
- $status_report = theme('status_report', array('requirements' => $requirements));
- $status_report .= 'Check the error messages and try again .';
- print theme('update_page', array('content' => $status_report));
- exit();
- }
-}
-
-// Some unavoidable errors happen because the database is not yet up-to-date.
-// Our custom error handler is not yet installed, so we just suppress them.
-ini_set('display_errors', FALSE);
-
-// We prepare a minimal bootstrap for the update requirements check to avoid
-// reaching the PHP memory limit.
-require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
-require_once DRUPAL_ROOT . '/includes/update.inc';
-require_once DRUPAL_ROOT . '/includes/common.inc';
-require_once DRUPAL_ROOT . '/includes/file.inc';
-require_once DRUPAL_ROOT . '/includes/entity.inc';
-require_once DRUPAL_ROOT . '/includes/unicode.inc';
-update_prepare_d7_bootstrap();
-
-// Temporarily disable configurable timezones so the upgrade process uses the
-// site-wide timezone. This prevents a PHP notice during session initlization
-// and before offsets have been converted in user_update_7002().
-$configurable_timezones = variable_get('configurable_timezones', 1);
-$conf['configurable_timezones'] = 0;
-
-// Determine if the current user has access to run update.php.
-drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);
-
-// Reset configurable timezones.
-$conf['configurable_timezones'] = $configurable_timezones;
-
-// Only allow the requirements check to proceed if the current user has access
-// to run updates (since it may expose sensitive information about the site's
-// configuration).
-$op = isset($_REQUEST['op']) ? $_REQUEST['op'] : '';
-if (empty($op) && update_access_allowed()) {
- require_once DRUPAL_ROOT . '/includes/install.inc';
- require_once DRUPAL_ROOT . '/modules/system/system.install';
-
- // Load module basics.
- include_once DRUPAL_ROOT . '/includes/module.inc';
- $module_list['system']['filename'] = 'modules/system/system.module';
- module_list(TRUE, FALSE, FALSE, $module_list);
- drupal_load('module', 'system');
-
- // Reset the module_implements() cache so that any new hook implementations
- // in updated code are picked up.
- module_implements('', FALSE, TRUE);
-
- // Set up $language, since the installer components require it.
- drupal_language_initialize();
-
- // Set up theme system for the maintenance page.
- drupal_maintenance_theme();
-
- // Check the update requirements for Drupal. Only report on errors at this
- // stage, since the real requirements check happens further down.
- update_check_requirements(TRUE);
-
- // Redirect to the update information page if all requirements were met.
- install_goto('update.php?op=info');
-}
-
-// update_fix_d7_requirements() needs to run before bootstrapping beyond path.
-// So bootstrap to DRUPAL_BOOTSTRAP_LANGUAGE then include unicode.inc.
-
-drupal_bootstrap(DRUPAL_BOOTSTRAP_LANGUAGE);
-include_once DRUPAL_ROOT . '/includes/unicode.inc';
-
-update_fix_d7_requirements();
-
-// Now proceed with a full bootstrap.
-
-drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
-drupal_maintenance_theme();
-
-// Turn error reporting back on. From now on, only fatal errors (which are
-// not passed through the error handler) will cause a message to be printed.
-ini_set('display_errors', TRUE);
-
-// Only proceed with updates if the user is allowed to run them.
-if (update_access_allowed()) {
-
- include_once DRUPAL_ROOT . '/includes/install.inc';
- include_once DRUPAL_ROOT . '/includes/batch.inc';
- drupal_load_updates();
-
- update_fix_compatibility();
-
- // Check the update requirements for all modules. If there are warnings, but
- // no errors, skip reporting them if the user has provided a URL parameter
- // acknowledging the warnings and indicating a desire to continue anyway. See
- // drupal_requirements_url().
- $skip_warnings = !empty($_GET['continue']);
- update_check_requirements($skip_warnings);
-
- $op = isset($_REQUEST['op']) ? $_REQUEST['op'] : '';
- switch ($op) {
- // update.php ops.
-
- case 'selection':
- if (isset($_GET['token']) && drupal_valid_token($_GET['token'], 'update')) {
- $output = update_selection_page();
- break;
- }
-
- case 'Apply pending updates':
- if (isset($_GET['token']) && drupal_valid_token($_GET['token'], 'update')) {
- // Generate absolute URLs for the batch processing (using $base_root),
- // since the batch API will pass them to url() which does not handle
- // update.php correctly by default.
- $batch_url = $base_root . drupal_current_script_url();
- $redirect_url = $base_root . drupal_current_script_url(array('op' => 'results'));
- update_batch($_POST['start'], $redirect_url, $batch_url);
- break;
- }
-
- case 'info':
- $output = update_info_page();
- break;
-
- case 'results':
- $output = update_results_page();
- break;
-
- // Regular batch ops : defer to batch processing API.
- default:
- update_task_list('run');
- $output = _batch_page();
- break;
- }
-}
-else {
- $output = update_access_denied_page();
-}
-if (isset($output) && $output) {
- // Explicitly start a session so that the update.php token will be accepted.
- drupal_session_start();
- // We defer the display of messages until all updates are done.
- $progress_page = ($batch = batch_get()) && isset($batch['running']);
- print theme('update_page', array('content' => $output, 'show_messages' => !$progress_page));
-}
diff --git a/web.config b/web.config
deleted file mode 100644
index 09983d9..0000000
--- a/web.config
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/wp-activate.php b/wp-activate.php
new file mode 100644
index 0000000..a796cc5
--- /dev/null
+++ b/wp-activate.php
@@ -0,0 +1,131 @@
+cache_enabled = false;
+
+// Fix for page title
+$wp_query->is_404 = false;
+
+/**
+ * Fires before the Site Activation page is loaded.
+ *
+ * @since 3.0.0
+ */
+do_action( 'activate_header' );
+
+/**
+ * Adds an action hook specific to this page that fires on wp_head
+ *
+ * @since MU
+ */
+function do_activate_header() {
+ /**
+ * Fires before the Site Activation page is loaded, but on the wp_head action.
+ *
+ * @since 3.0.0
+ */
+ do_action( 'activate_wp_head' );
+}
+add_action( 'wp_head', 'do_activate_header' );
+
+/**
+ * Loads styles specific to this page.
+ *
+ * @since MU
+ */
+function wpmu_activate_stylesheet() {
+ ?>
+
+
+
+
+
+
+
+
+
+ get_error_code() || 'blog_taken' == $result->get_error_code() ) {
+ $signup = $result->get_error_data();
+ ?>
+
+ ';
+ if ( $signup->domain . $signup->path == '' ) {
+ printf( __('Your account has been activated. You may now
log in to the site using your chosen username of “%2$s”. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can
reset your password .'), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, wp_lostpassword_url() );
+ } else {
+ printf( __('Your site at
%2$s is active. You may now log in to your site using your chosen username of “%3$s”. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can
reset your password .'), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, wp_lostpassword_url() );
+ }
+ echo '';
+ } else {
+ ?>
+
+ '.$result->get_error_message().'';
+ }
+ } else {
+ $url = isset( $result['blog_id'] ) ? get_blogaddress_by_id( (int) $result['blog_id'] ) : '';
+ $user = get_userdata( (int) $result['user_id'] );
+ ?>
+
+
+
+
+
+
View your site or Log in '), $url, $url . 'wp-login.php' ); ?>
+
+
Log in or go back to the homepage .' ), network_site_url('wp-login.php', 'login'), network_home_url() ); ?>
+
+
+
+ includes_url( 'js/mediaelement/', 'relative' ),
+ 'pauseOtherPlayers' => ''
+) );
+
+$title = __( 'About' );
+
+list( $display_version ) = explode( '-', $wp_version );
+
+include( ABSPATH . 'wp-admin/admin-header.php' );
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Version %1$s addressed %2$s bug.',
+ 'Version %1$s addressed %2$s bugs.', 21 ), '4.1.1', number_format_i18n( 21 ) ); ?>
+ the release notes.' ), 'http://codex.wordpress.org/Version_4.1.1' ); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
Google’s Noto font family.' ), 'https://www.google.com/get/noto/' ); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
distraction-free writing mode. When you start typing, all the distractions will fade away, letting you focus solely on your writing. All your editing tools instantly return when you need them.' ); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
' . 40 . '';
+ $string = __( 'Right now, WordPress %1$s is already translated into %2$s languages, with more always in progress. You can switch to any translation on the General Settings screen.' );
+ if ( ! current_user_can( 'manage_options' ) ) {
+ $string = strip_tags( $string );
+ }
+ echo sprintf( $string, $display_version, $count, admin_url( 'options-general.php' ) );
+ ?>
+
+
+
+
+
+
full list of supported embeds.' ), 'http://codex.wordpress.org/Embeds' ); ?>
+
+
+
+
+
+
your profile and log out everywhere.' ), get_edit_profile_url() ); ?>
+
+
+
+
+
+
plugin installer suggests plugins for you to try. Recommendations are based on the plugins you and other users have installed.' );
+ if ( ! current_user_can( 'install_plugins' ) ) {
+ $string = strip_tags( $string );
+ }
+ echo sprintf( $string, network_admin_url( 'plugin-install.php?tab=recommended' ) );
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
A AND ( B OR C )' ); ?>
+
+
+
+
+
+
" tag */
+ printf( __( '%s tags in themes' ), '<title>
' );
+ ?>
+
add_theme_support( 'title-tag' )" );
+ ?>
+
+
+
developer reference more complete than ever.' ), 'https://developer.wordpress.org/reference/' ); ?>
+
+
+
+
+
+
+
+
+
+
+
+Version %1$s addressed a security issue.',
+ 'Version %1$s addressed some security issues.' );
+
+/* translators: 1: WordPress version number, 2: plural number of bugs. */
+_n_noop( 'Version %1$s addressed %2$s bug.',
+ 'Version %1$s addressed %2$s bugs.' );
+
+/* translators: 1: WordPress version number, 2: plural number of bugs. Singular security issue. */
+_n_noop( 'Version %1$s addressed a security issue and fixed %2$s bug.',
+ 'Version %1$s addressed a security issue and fixed %2$s bugs.' );
+
+/* translators: 1: WordPress version number, 2: plural number of bugs. More than one security issue. */
+_n_noop( 'Version %1$s addressed some security issues and fixed %2$s bug.',
+ 'Version %1$s addressed some security issues and fixed %2$s bugs.' );
+
+__( 'For more information, see the release notes .' );
diff --git a/wp-admin/admin-ajax.php b/wp-admin/admin-ajax.php
new file mode 100644
index 0000000..a3571af
--- /dev/null
+++ b/wp-admin/admin-ajax.php
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php
new file mode 100644
index 0000000..11bd30c
--- /dev/null
+++ b/wp-admin/admin-functions.php
@@ -0,0 +1,15 @@
+site_name ) );
+elseif ( is_user_admin() )
+ $admin_title = sprintf( __( 'Global Dashboard: %s' ), esc_html( get_current_site()->site_name ) );
+else
+ $admin_title = get_bloginfo( 'name' );
+
+if ( $admin_title == $title )
+ $admin_title = sprintf( __( '%1$s — WordPress' ), $title );
+else
+ $admin_title = sprintf( __( '%1$s ‹ %2$s — WordPress' ), $title, $admin_title );
+
+/**
+ * Filter the title tag content for an admin page.
+ *
+ * @since 3.1.0
+ *
+ * @param string $admin_title The page title, with extra context added.
+ * @param string $title The original page title.
+ */
+$admin_title = apply_filters( 'admin_title', $admin_title, $title );
+
+wp_user_settings();
+
+_wp_admin_html_begin();
+?>
+
+
+
+
+post_type )
+ $admin_body_class .= ' post-type-' . $current_screen->post_type;
+
+if ( $current_screen->taxonomy )
+ $admin_body_class .= ' taxonomy-' . $current_screen->taxonomy;
+
+$admin_body_class .= ' branch-' . str_replace( array( '.', ',' ), '-', floatval( $wp_version ) );
+$admin_body_class .= ' version-' . str_replace( '.', '-', preg_replace( '/^([.0-9]+).*/', '$1', $wp_version ) );
+$admin_body_class .= ' admin-color-' . sanitize_html_class( get_user_option( 'admin_color' ), 'fresh' );
+$admin_body_class .= ' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) );
+
+if ( wp_is_mobile() )
+ $admin_body_class .= ' mobile';
+
+if ( is_multisite() )
+ $admin_body_class .= ' multisite';
+
+if ( is_network_admin() )
+ $admin_body_class .= ' network-admin';
+
+$admin_body_class .= ' no-customize-support no-svg';
+
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set_parentage( $parent_file );
+
+?>
+
+
+render_screen_meta();
+
+if ( is_network_admin() ) {
+ /**
+ * Print network admin screen notices.
+ *
+ * @since 3.1.0
+ */
+ do_action( 'network_admin_notices' );
+} elseif ( is_user_admin() ) {
+ /**
+ * Print user admin screen notices.
+ *
+ * @since 3.1.0
+ */
+ do_action( 'user_admin_notices' );
+} else {
+ /**
+ * Print admin screen notices.
+ *
+ * @since 3.1.0
+ */
+ do_action( 'admin_notices' );
+}
+
+/**
+ * Print generic admin screen notices.
+ *
+ * @since 3.1.0
+ */
+do_action( 'all_admin_notices' );
+
+if ( $parent_file == 'options-general.php' )
+ require(ABSPATH . 'wp-admin/options-head.php');
diff --git a/wp-admin/admin-post.php b/wp-admin/admin-post.php
new file mode 100644
index 0000000..cb92699
--- /dev/null
+++ b/wp-admin/admin-post.php
@@ -0,0 +1,71 @@
+ 50 && mt_rand( 0, (int)( $c / 50 ) ) == 1 ) ) {
+ require_once( ABSPATH . WPINC . '/http.php' );
+ $response = wp_remote_get( admin_url( 'upgrade.php?step=1' ), array( 'timeout' => 120, 'httpversion' => '1.1' ) );
+ /** This action is documented in wp-admin/network/upgrade.php */
+ do_action( 'after_mu_upgrade', $response );
+ unset($response);
+ }
+ unset($c);
+ }
+}
+
+require_once(ABSPATH . 'wp-admin/includes/admin.php');
+
+auth_redirect();
+
+// Schedule trash collection
+if ( !wp_next_scheduled('wp_scheduled_delete') && !defined('WP_INSTALLING') )
+ wp_schedule_event(time(), 'daily', 'wp_scheduled_delete');
+
+set_screen_options();
+
+$date_format = get_option('date_format');
+$time_format = get_option('time_format');
+
+wp_enqueue_script( 'common' );
+
+$editing = false;
+
+if ( isset($_GET['page']) ) {
+ $plugin_page = wp_unslash( $_GET['page'] );
+ $plugin_page = plugin_basename($plugin_page);
+}
+
+if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) )
+ $typenow = $_REQUEST['post_type'];
+else
+ $typenow = '';
+
+if ( isset( $_REQUEST['taxonomy'] ) && taxonomy_exists( $_REQUEST['taxonomy'] ) )
+ $taxnow = $_REQUEST['taxonomy'];
+else
+ $taxnow = '';
+
+if ( WP_NETWORK_ADMIN )
+ require(ABSPATH . 'wp-admin/network/menu.php');
+elseif ( WP_USER_ADMIN )
+ require(ABSPATH . 'wp-admin/user/menu.php');
+else
+ require(ABSPATH . 'wp-admin/menu.php');
+
+if ( current_user_can( 'manage_options' ) ) {
+ /**
+ * Filter the maximum memory limit available for administration screens.
+ *
+ * This only applies to administrators, who may require more memory for tasks like updates.
+ * Memory limits when processing images (uploaded or edited by users of any role) are
+ * handled separately.
+ *
+ * The WP_MAX_MEMORY_LIMIT constant specifically defines the maximum memory limit available
+ * when in the administration back-end. The default is 256M, or 256 megabytes of memory.
+ *
+ * @since 3.0.0
+ *
+ * @param string 'WP_MAX_MEMORY_LIMIT' The maximum WordPress memory limit. Default 256M.
+ */
+ @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) );
+}
+
+/**
+ * Fires as an admin screen or script is being initialized.
+ *
+ * Note, this does not just run on user-facing admin screens.
+ * It runs on admin-ajax.php and admin-post.php as well.
+ *
+ * This is roughly analgous to the more general 'init' hook, which fires earlier.
+ *
+ * @since 2.5.0
+ */
+do_action( 'admin_init' );
+
+if ( isset($plugin_page) ) {
+ if ( !empty($typenow) )
+ $the_parent = $pagenow . '?post_type=' . $typenow;
+ else
+ $the_parent = $pagenow;
+ if ( ! $page_hook = get_plugin_page_hook($plugin_page, $the_parent) ) {
+ $page_hook = get_plugin_page_hook($plugin_page, $plugin_page);
+
+ // Backwards compatibility for plugins using add_management_page().
+ if ( empty( $page_hook ) && 'edit.php' == $pagenow && '' != get_plugin_page_hook($plugin_page, 'tools.php') ) {
+ // There could be plugin specific params on the URL, so we need the whole query string
+ if ( !empty($_SERVER[ 'QUERY_STRING' ]) )
+ $query_string = $_SERVER[ 'QUERY_STRING' ];
+ else
+ $query_string = 'page=' . $plugin_page;
+ wp_redirect( admin_url('tools.php?' . $query_string) );
+ exit;
+ }
+ }
+ unset($the_parent);
+}
+
+$hook_suffix = '';
+if ( isset($page_hook) )
+ $hook_suffix = $page_hook;
+else if ( isset($plugin_page) )
+ $hook_suffix = $plugin_page;
+else if ( isset($pagenow) )
+ $hook_suffix = $pagenow;
+
+set_current_screen();
+
+// Handle plugin admin pages.
+if ( isset($plugin_page) ) {
+ if ( $page_hook ) {
+ /**
+ * Fires before a particular screen is loaded.
+ *
+ * The load-* hook fires in a number of contexts. This hook is for plugin screens
+ * where a callback is provided when the screen is registered.
+ *
+ * The dynamic portion of the hook name, `$page_hook`, refers to a mixture of plugin
+ * page information including:
+ * 1. The page type. If the plugin page is registered as a submenu page, such as for
+ * Settings, the page type would be 'settings'. Otherwise the type is 'toplevel'.
+ * 2. A separator of '_page_'.
+ * 3. The plugin basename minus the file extension.
+ *
+ * Together, the three parts form the `$page_hook`. Citing the example above,
+ * the hook name used would be 'load-settings_page_pluginbasename'.
+ *
+ * @see get_plugin_page_hook()
+ *
+ * @since 2.1.0
+ */
+ do_action( 'load-' . $page_hook );
+ if (! isset($_GET['noheader']))
+ require_once(ABSPATH . 'wp-admin/admin-header.php');
+
+ /**
+ * Used to call the registered callback for a plugin screen.
+ *
+ * @internal
+ * @since 1.5.0
+ */
+ do_action( $page_hook );
+ } else {
+ if ( validate_file($plugin_page) )
+ wp_die(__('Invalid plugin page'));
+
+ if ( !( file_exists(WP_PLUGIN_DIR . "/$plugin_page") && is_file(WP_PLUGIN_DIR . "/$plugin_page") ) && !( file_exists(WPMU_PLUGIN_DIR . "/$plugin_page") && is_file(WPMU_PLUGIN_DIR . "/$plugin_page") ) )
+ wp_die(sprintf(__('Cannot load %s.'), htmlentities($plugin_page)));
+
+ /**
+ * Fires before a particular screen is loaded.
+ *
+ * The load-* hook fires in a number of contexts. This hook is for plugin screens
+ * where the file to load is directly included, rather than the use of a function.
+ *
+ * The dynamic portion of the hook name, `$plugin_page`, refers to the plugin basename.
+ *
+ * @see plugin_basename()
+ *
+ * @since 1.5.0
+ */
+ do_action( 'load-' . $plugin_page );
+
+ if ( !isset($_GET['noheader']))
+ require_once(ABSPATH . 'wp-admin/admin-header.php');
+
+ if ( file_exists(WPMU_PLUGIN_DIR . "/$plugin_page") )
+ include(WPMU_PLUGIN_DIR . "/$plugin_page");
+ else
+ include(WP_PLUGIN_DIR . "/$plugin_page");
+ }
+
+ include(ABSPATH . 'wp-admin/admin-footer.php');
+
+ exit();
+} else if (isset($_GET['import'])) {
+
+ $importer = $_GET['import'];
+
+ if ( ! current_user_can('import') )
+ wp_die(__('You are not allowed to import.'));
+
+ if ( validate_file($importer) ) {
+ wp_redirect( admin_url( 'import.php?invalid=' . $importer ) );
+ exit;
+ }
+
+ if ( ! isset($wp_importers[$importer]) || ! is_callable($wp_importers[$importer][2]) ) {
+ wp_redirect( admin_url( 'import.php?invalid=' . $importer ) );
+ exit;
+ }
+
+ /**
+ * Fires before an importer screen is loaded.
+ *
+ * The dynamic portion of the hook name, `$importer`, refers to the importer slug.
+ *
+ * @since 3.5.0
+ */
+ do_action( 'load-importer-' . $importer );
+
+ $parent_file = 'tools.php';
+ $submenu_file = 'import.php';
+ $title = __('Import');
+
+ if (! isset($_GET['noheader']))
+ require_once(ABSPATH . 'wp-admin/admin-header.php');
+
+ require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
+
+ define('WP_IMPORTING', true);
+
+ /**
+ * Whether to filter imported data through kses on import.
+ *
+ * Multisite uses this hook to filter all data through kses by default,
+ * as a super administrator may be assisting an untrusted user.
+ *
+ * @since 3.1.0
+ *
+ * @param bool false Whether to force data to be filtered through kses. Default false.
+ */
+ if ( apply_filters( 'force_filtered_html_on_import', false ) ) {
+ kses_init_filters(); // Always filter imported data with kses on multisite.
+ }
+
+ call_user_func($wp_importers[$importer][2]);
+
+ include(ABSPATH . 'wp-admin/admin-footer.php');
+
+ // Make sure rules are flushed
+ flush_rewrite_rules(false);
+
+ exit();
+} else {
+ /**
+ * Fires before a particular screen is loaded.
+ *
+ * The load-* hook fires in a number of contexts. This hook is for core screens.
+ *
+ * The dynamic portion of the hook name, `$pagenow`, is a global variable
+ * referring to the filename of the current page, such as 'admin.php',
+ * 'post-new.php' etc. A complete hook for the latter would be
+ * 'load-post-new.php'.
+ *
+ * @since 2.1.0
+ */
+ do_action( 'load-' . $pagenow );
+
+ /*
+ * The following hooks are fired to ensure backward compatibility.
+ * In all other cases, 'load-' . $pagenow should be used instead.
+ */
+ if ( $typenow == 'page' ) {
+ if ( $pagenow == 'post-new.php' )
+ do_action( 'load-page-new.php' );
+ elseif ( $pagenow == 'post.php' )
+ do_action( 'load-page.php' );
+ } elseif ( $pagenow == 'edit-tags.php' ) {
+ if ( $taxnow == 'category' )
+ do_action( 'load-categories.php' );
+ elseif ( $taxnow == 'link_category' )
+ do_action( 'load-edit-link-categories.php' );
+ }
+}
+
+if ( ! empty( $_REQUEST['action'] ) ) {
+ /**
+ * Fires when an 'action' request variable is sent.
+ *
+ * The dynamic portion of the hook name, `$_REQUEST['action']`,
+ * refers to the action derived from the `GET` or `POST` request.
+ *
+ * @since 2.6.0
+ */
+ do_action( 'admin_action_' . $_REQUEST['action'] );
+}
diff --git a/wp-admin/async-upload.php b/wp-admin/async-upload.php
new file mode 100644
index 0000000..4a18aa1
--- /dev/null
+++ b/wp-admin/async-upload.php
@@ -0,0 +1,115 @@
+post_type )
+ wp_die( __( 'Unknown post type.' ) );
+ if ( ! current_user_can( 'edit_post', $id ) )
+ wp_die( __( 'You are not allowed to edit this item.' ) );
+
+ switch ( $_REQUEST['fetch'] ) {
+ case 3 :
+ if ( $thumb_url = wp_get_attachment_image_src( $id, 'thumbnail', true ) )
+ echo '
';
+ echo '
' . _x( 'Edit', 'media item' ) . ' ';
+ $title = $post->post_title ? $post->post_title : wp_basename( $post->guid ); // title shouldn't ever be empty, but use filename just in cas.e
+ echo '
' . esc_html( wp_html_excerpt( $title, 60, '…' ) ) . '
';
+ break;
+ case 2 :
+ add_filter('attachment_fields_to_edit', 'media_single_attachment_fields_to_edit', 10, 2);
+ echo get_media_item($id, array( 'send' => false, 'delete' => true ));
+ break;
+ default:
+ add_filter('attachment_fields_to_edit', 'media_post_single_attachment_fields_to_edit', 10, 2);
+ echo get_media_item($id);
+ break;
+ }
+ exit;
+}
+
+check_admin_referer('media-form');
+
+$post_id = 0;
+if ( isset( $_REQUEST['post_id'] ) ) {
+ $post_id = absint( $_REQUEST['post_id'] );
+ if ( ! get_post( $post_id ) || ! current_user_can( 'edit_post', $post_id ) )
+ $post_id = 0;
+}
+
+$id = media_handle_upload( 'async-upload', $post_id );
+if ( is_wp_error($id) ) {
+ echo '
+
' . __('Dismiss') . '
+
' . sprintf(__('“%s” has failed to upload due to an error'), esc_html($_FILES['async-upload']['name']) ) . ' ' .
+ esc_html($id->get_error_message()) . '
';
+ exit;
+}
+
+if ( $_REQUEST['short'] ) {
+ // Short form response - attachment ID only.
+ echo $id;
+} else {
+ // Long form response - big chunk o html.
+ $type = $_REQUEST['type'];
+
+ /**
+ * Filter the returned ID of an uploaded attachment.
+ *
+ * The dynamic portion of the hook name, `$type`, refers to the attachment type,
+ * such as 'image', 'audio', 'video', 'file', etc.
+ *
+ * @since 2.5.0
+ *
+ * @param int $id Uploaded attachment ID.
+ */
+ echo apply_filters( "async_upload_{$type}", $id );
+}
diff --git a/wp-admin/comment.php b/wp-admin/comment.php
new file mode 100644
index 0000000..1c46b0a
--- /dev/null
+++ b/wp-admin/comment.php
@@ -0,0 +1,299 @@
+
$msg
";
+ include( ABSPATH . 'wp-admin/admin-footer.php' );
+ die;
+}
+
+switch( $action ) {
+
+case 'editcomment' :
+ $title = __('Edit Comment');
+
+ get_current_screen()->add_help_tab( array(
+ 'id' => 'overview',
+ 'title' => __('Overview'),
+ 'content' =>
+ '
' . __( 'You can edit the information left in a comment if needed. This is often useful when you notice that a commenter has made a typographical error.' ) . '
' .
+ '
' . __( 'You can also moderate the comment from this screen using the Status box, where you can also change the timestamp of the comment.' ) . '
'
+ ) );
+
+ get_current_screen()->set_help_sidebar(
+ '
' . __( 'For more information:' ) . '
' .
+ '
' . __( 'Documentation on Comments ' ) . '
' .
+ '
' . __( 'Support Forums ' ) . '
'
+ );
+
+ wp_enqueue_script('comment');
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+ $comment_id = absint( $_GET['c'] );
+
+ if ( !$comment = get_comment( $comment_id ) )
+ comment_footer_die( __('Oops, no comment with this ID.') . sprintf('
' . __('Go back') . ' .', 'javascript:history.go(-1)') );
+
+ if ( !current_user_can( 'edit_comment', $comment_id ) )
+ comment_footer_die( __('You are not allowed to edit this comment.') );
+
+ if ( 'trash' == $comment->comment_approved )
+ comment_footer_die( __('This comment is in the Trash. Please move it out of the Trash if you want to edit it.') );
+
+ $comment = get_comment_to_edit( $comment_id );
+
+ include( ABSPATH . 'wp-admin/edit-form-comment.php' );
+
+ break;
+
+case 'delete' :
+case 'approve' :
+case 'trash' :
+case 'spam' :
+
+ $title = __('Moderate Comment');
+
+ $comment_id = absint( $_GET['c'] );
+
+ if ( !$comment = get_comment_to_edit( $comment_id ) ) {
+ wp_redirect( admin_url('edit-comments.php?error=1') );
+ die();
+ }
+
+ if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) {
+ wp_redirect( admin_url('edit-comments.php?error=2') );
+ die();
+ }
+
+ // No need to re-approve/re-trash/re-spam a comment.
+ if ( $action == str_replace( '1', 'approve', $comment->comment_approved ) ) {
+ wp_redirect( admin_url( 'edit-comments.php?same=' . $comment_id ) );
+ die();
+ }
+
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+ $formaction = $action . 'comment';
+ $nonce_action = 'approve' == $action ? 'approve-comment_' : 'delete-comment_';
+ $nonce_action .= $comment_id;
+
+?>
+
+
+
+
+
+
+comment_approved != '0' ) { // if not unapproved
+ $message = '';
+ switch ( $comment->comment_approved ) {
+ case '1' :
+ $message = __('This comment is currently approved.');
+ break;
+ case 'spam' :
+ $message = __('This comment is currently marked as spam.');
+ break;
+ case 'trash' :
+ $message = __('This comment is currently in the Trash.');
+ break;
+ }
+ if ( $message )
+ echo '
';
+}
+?>
+
+
+
+
+
+
+
+
+
+
+' . __('Go back') . '.', 'edit-comments.php') );
+ if ( !current_user_can( 'edit_comment', $comment->comment_ID ) )
+ comment_footer_die( __('You are not allowed to edit comments on this post.') );
+
+ if ( '' != wp_get_referer() && ! $noredir && false === strpos(wp_get_referer(), 'comment.php') )
+ $redir = wp_get_referer();
+ elseif ( '' != wp_get_original_referer() && ! $noredir )
+ $redir = wp_get_original_referer();
+ elseif ( in_array( $action, array( 'approvecomment', 'unapprovecomment' ) ) )
+ $redir = admin_url('edit-comments.php?p=' . absint( $comment->comment_post_ID ) );
+ else
+ $redir = admin_url('edit-comments.php');
+
+ $redir = remove_query_arg( array('spammed', 'unspammed', 'trashed', 'untrashed', 'deleted', 'ids', 'approved', 'unapproved'), $redir );
+
+ switch ( $action ) {
+ case 'deletecomment' :
+ wp_delete_comment( $comment_id );
+ $redir = add_query_arg( array('deleted' => '1'), $redir );
+ break;
+ case 'trashcomment' :
+ wp_trash_comment($comment_id);
+ $redir = add_query_arg( array('trashed' => '1', 'ids' => $comment_id), $redir );
+ break;
+ case 'untrashcomment' :
+ wp_untrash_comment($comment_id);
+ $redir = add_query_arg( array('untrashed' => '1'), $redir );
+ break;
+ case 'spamcomment' :
+ wp_spam_comment($comment_id);
+ $redir = add_query_arg( array('spammed' => '1', 'ids' => $comment_id), $redir );
+ break;
+ case 'unspamcomment' :
+ wp_unspam_comment($comment_id);
+ $redir = add_query_arg( array('unspammed' => '1'), $redir );
+ break;
+ case 'approvecomment' :
+ wp_set_comment_status( $comment_id, 'approve' );
+ $redir = add_query_arg( array( 'approved' => 1 ), $redir );
+ break;
+ case 'unapprovecomment' :
+ wp_set_comment_status( $comment_id, 'hold' );
+ $redir = add_query_arg( array( 'unapproved' => 1 ), $redir );
+ break;
+ }
+
+ wp_redirect( $redir );
+ die;
+
+case 'editedcomment' :
+
+ $comment_id = absint( $_POST['comment_ID'] );
+ $comment_post_id = absint( $_POST['comment_post_ID'] );
+
+ check_admin_referer( 'update-comment_' . $comment_id );
+
+ edit_comment();
+
+ $location = ( empty( $_POST['referredby'] ) ? "edit-comments.php?p=$comment_post_id" : $_POST['referredby'] ) . '#comment-' . $comment_id;
+
+ /**
+ * Filter the URI the user is redirected to after editing a comment in the admin.
+ *
+ * @since 2.1.0
+ *
+ * @param string $location The URI the user will be redirected to.
+ * @param int $comment_id The ID of the comment being edited.
+ */
+ $location = apply_filters( 'comment_edit_redirect', $location, $comment_id );
+ wp_redirect( $location );
+
+ exit();
+
+default:
+ wp_die( __('Unknown action.') );
+
+} // end switch
+
+include( ABSPATH . 'wp-admin/admin-footer.php' );
diff --git a/wp-admin/credits.php b/wp-admin/credits.php
new file mode 100644
index 0000000..d7cbc19
--- /dev/null
+++ b/wp-admin/credits.php
@@ -0,0 +1,192 @@
+' . esc_html( $display_name ) . '';
+}
+
+/**
+ * Retrieve the link to an external library used in WordPress.
+ *
+ * @access private
+ * @since 3.2.0
+ *
+ * @param string &$data External library data, passed by reference.
+ * @return string Link to the external library.
+ */
+function _wp_credits_build_object_link( &$data ) {
+ $data = '
' . $data[0] . ' ';
+}
+
+list( $display_version ) = explode( '-', $wp_version );
+
+include( ABSPATH . 'wp-admin/admin-header.php' );
+?>
+
+
+
+
+
+
+
+
+
+
+' . sprintf( __( 'WordPress is created by a
worldwide team of passionate individuals.
Get involved in WordPress .' ),
+ 'https://wordpress.org/about/',
+ /* translators: Url to the codex documentation on contributing to WordPress used on the credits page */
+ __( 'http://codex.wordpress.org/Contributing_to_WordPress' ) ) . '';
+ include( ABSPATH . 'wp-admin/admin-footer.php' );
+ exit;
+}
+
+echo '
' . __( 'WordPress is created by a worldwide team of passionate individuals.' ) . "
\n";
+
+$gravatar = is_ssl() ? 'https://secure.gravatar.com/avatar/' : 'http://0.gravatar.com/avatar/';
+
+foreach ( $credits['groups'] as $group_slug => $group_data ) {
+ if ( $group_data['name'] ) {
+ if ( 'Translators' == $group_data['name'] ) {
+ // Considered a special slug in the API response. (Also, will never be returned for en_US.)
+ $title = _x( 'Translators', 'Translate this to be the equivalent of English Translators in your language for the credits page Translators section' );
+ } elseif ( isset( $group_data['placeholders'] ) ) {
+ $title = vsprintf( translate( $group_data['name'] ), $group_data['placeholders'] );
+ } else {
+ $title = translate( $group_data['name'] );
+ }
+
+ echo '
' . $title . " \n";
+ }
+
+ if ( ! empty( $group_data['shuffle'] ) )
+ shuffle( $group_data['data'] ); // We were going to sort by ability to pronounce "hierarchical," but that wouldn't be fair to Matt.
+
+ switch ( $group_data['type'] ) {
+ case 'list' :
+ array_walk( $group_data['data'], '_wp_credits_add_profile_link', $credits['data']['profiles'] );
+ echo '
' . wp_sprintf( '%l.', $group_data['data'] ) . "
\n\n";
+ break;
+ case 'libraries' :
+ array_walk( $group_data['data'], '_wp_credits_build_object_link' );
+ echo '
' . wp_sprintf( '%l.', $group_data['data'] ) . "
\n\n";
+ break;
+ default:
+ $compact = 'compact' == $group_data['type'];
+ $classes = 'wp-people-group ' . ( $compact ? 'compact' : '' );
+ echo '
\n";
+ break;
+ }
+}
+
+?>
+
Get involved in WordPress.' ),
+ /* translators: URL to the Make WordPress 'Get Involved' landing page used on the credits page */
+ __( 'https://make.wordpress.org/' ) ); ?>
+
+
+ div {
+ position: relative;
+ width: 47.6%;
+ margin-left: 4.799999999%;
+ float: right;
+}
+
+.about-wrap .three-col > div {
+ position: relative;
+ width: 29.95%;
+ margin-left: 4.999999999%;
+ float: right;
+}
+
+.about-wrap .col .last-feature {
+ margin-left: 0;
+}
+
+/* 1.3 - Point Releases */
+
+.about-wrap .point-releases {
+ margin-top: 5px;
+ border-bottom: 1px solid #dfdfdf;
+}
+
+.about-wrap .changelog.point-releases h3 {
+ padding-top: 35px;
+}
+
+.about-wrap .changelog.point-releases h3:first-child {
+ padding-top: 7px;
+}
+
+/*------------------------------------------------------------------------------
+ 2.0 - About Page
+------------------------------------------------------------------------------*/
+
+/* 2.1 - Typography */
+
+.about-wrap .headline-feature h2 {
+ margin: 1.1em 0 0.2em;
+ font-size: 2.4em;
+ font-weight: 300;
+ line-height: 1.3;
+ text-align: center;
+}
+
+.about-wrap .feature-list h2 {
+ margin: 30px 0 15px;
+ text-align: center;
+}
+
+.about-wrap .dfw h3 {
+ margin-top: 1em;
+ text-align: center;
+}
+
+.about-wrap .feature-section h4 {
+ margin: 1.4em 0 0.6em 0;
+ font-size: 1.2em;
+}
+
+.about-wrap .feature-section p {
+ margin-top: 0.6em;
+}
+
+.about-wrap .dfw p {
+ max-width: 68%;
+ margin: 0 auto 20px;
+}
+
+/* 2.2 - Structure */
+
+.about-wrap .featured-image {
+ text-align: center;
+}
+
+.about-wrap .feature-section {
+ overflow: hidden;
+ padding-bottom: 20px;
+}
+
+.about-wrap .headline-feature .feature-section {
+ margin: 0 auto;
+ max-width: 82%;
+}
+
+.about-wrap .headline-feature .feature-section .col:first-child {
+ float: right;
+ margin: 15px 0 0 5%;
+ width: 55%;
+}
+
+.about-wrap .headline-feature .feature-section .col:last-child {
+ float: left;
+ margin: 15px 0 40px;
+ width: 40%;
+}
+
+.about-wrap .feature-list .feature-section {
+ margin-top: 0;
+}
+
+.about-wrap .dfw .feature-section {
+ overflow: visible;
+}
+
+.about-wrap .dfw-container {
+ position: relative;
+ overflow: hidden;
+ margin-top: 50px;
+ -webkit-box-shadow: 0 0 10px rgba( 0, 0, 0, 0.25 );
+ box-shadow: 0 0 10px rgba( 0, 0, 0, 0.25 );
+}
+
+.about-wrap .dfw-container .overlay-image {
+ position: absolute;
+ top: 0;
+ right: 0;
+ /* Cubic Bezier to speed up the slide-out of the full-width sidebar image */
+ -webkit-transition: 0.8s -webkit-transform cubic-bezier(.9,.03,1,.61),
+ 0.65s opacity linear;
+ transition: 0.8s transform cubic-bezier(.9,.03,1,.61),
+ 0.65s opacity linear;
+}
+
+.about-wrap .dfw-container .overlay-image.fade-in {
+ opacity: 0;
+}
+
+.about-wrap .dfw-container .overlay-image.from-left {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+}
+
+.about-wrap .dfw-container:hover .overlay-image {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ /* Cubic Bezier to speed up the slide-in of the full-width sidebar image */
+ -webkit-transition: 0.7s -webkit-transform cubic-bezier( 0, 0.8, 0.8, 1 ),
+ 0.8s opacity linear;
+ transition: 0.7s transform cubic-bezier( 0, 0.8, 0.8, 1 ),
+ 0.8s opacity linear;
+}
+
+/* Return to Dashboard Home link */
+
+.about-wrap .return-to-dashboard {
+ margin: 30px -5px 0 0;
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.about-wrap .return-to-dashboard a {
+ text-decoration: none;
+ padding: 0 5px;
+}
+
+/* SVGs */
+.about-wrap .feature-list svg {
+ float: right;
+ clear: right;
+ margin: 15px 0 0 15px ;
+ height: 90px;
+ width: 90px;
+ background-color: #cccccc;
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ fill: #999;
+ border: 1px solid #c1c1c1;
+}
+
+.about-wrap .feature-list.finer-points h4,
+.about-wrap .feature-list.finer-points p {
+ margin-right: 115px;
+}
+
+/*------------------------------------------------------------------------------
+ 3.0 - Credits & Freedoms Pages
+------------------------------------------------------------------------------*/
+
+/* Credits */
+
+.about-wrap h4.wp-people-group {
+ margin-top: 2.6em;
+ font-size: 16px;
+}
+
+.about-wrap ul.wp-people-group {
+ overflow: hidden;
+ padding: 0 5px;
+ margin: 0 -5px 0 -15px;
+}
+
+.about-wrap ul.compact {
+ margin-bottom: 0
+}
+
+.about-wrap li.wp-person {
+ display: inline-block;
+ vertical-align: top;
+ margin-left: 10px;
+ padding-bottom: 15px;
+ height: 70px;
+ width: 280px;
+}
+
+.about-wrap ul.compact li.wp-person {
+ height: auto;
+ width: 180px;
+ padding-bottom: 0;
+ margin-bottom: 0;
+}
+
+.about-wrap li.wp-person img.gravatar {
+ float: right;
+ margin: 0 0 10px 10px;
+ padding: 2px;
+ width: 60px;
+ height: 60px;
+}
+
+.about-wrap ul.compact li.wp-person img.gravatar {
+ width: 30px;
+ height: 30px;
+}
+
+.about-wrap li.wp-person a.web {
+ display: block;
+ margin: 6px 0 2px;
+ font-size: 16px;
+ font-weight: normal;
+ line-height: 1.6em;
+ text-decoration: none;
+}
+
+.about-wrap #wp-people-group-validators + p.wp-credits-list {
+ margin-top: 0;
+}
+
+.about-wrap p.wp-credits-list a {
+ white-space: nowrap;
+}
+
+/* Freedoms */
+
+.freedoms-php .about-wrap ol {
+ margin: 40px 60px;
+}
+
+.freedoms-php .about-wrap ol li {
+ list-style-type: decimal;
+ font-weight: bold;
+}
+
+.freedoms-php .about-wrap ol p {
+ font-weight: normal;
+ margin: 0.6em 0;
+}
+
+/*------------------------------------------------------------------------------
+ 4.0 - Media Queries
+------------------------------------------------------------------------------*/
+
+@media screen and ( max-width: 782px ) {
+ .about-wrap .one-col > div,
+ .about-wrap .two-col > div,
+ .about-wrap .three-col > div {
+ width: 100%;
+ margin: 0 0 40px;
+ padding: 0 0 40px;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+ }
+
+ .about-wrap .feature-list div,
+ .about-wrap .col > div.last-feature {
+ margin: 0;
+ padding: 0;
+ border-bottom: none;
+ }
+
+ .about-wrap .headline-feature .feature-section {
+ max-width: 100%;
+ }
+
+ .about-wrap .feature-list .feature-section {
+ padding: 0 0 40px;
+ }
+}
+
+@media only screen and (max-width: 500px) {
+ .about-wrap {
+ margin-left: 20px;
+ margin-right: 10px;
+ }
+
+ .about-wrap h1,
+ .about-wrap .about-text {
+ margin-left: 0;
+ }
+
+ .about-wrap .about-text {
+ margin-bottom: 0.25em;
+ }
+
+ .about-wrap .wp-badge {
+ position: relative;
+ margin-bottom: 1.5em;
+ width: 100%;
+ }
+
+ .about-wrap h2.nav-tab-wrapper {
+ padding-right: 0;
+ border-bottom: 0;
+ }
+
+ .about-wrap h2 .nav-tab {
+ margin-top: 10px;
+ margin-left: 10px;
+ border-bottom: 1px solid #ccc;
+ }
+
+ .about-wrap .three-col div,
+ .about-wrap .headline-feature .feature-section div {
+ width: 100% !important;
+ float: none !important;
+ }
+
+ .about-wrap .dfw p {
+ max-width: 90%;
+ }
+}
+
+@media only screen and (max-width: 400px) {
+ .about-wrap .feature-list svg {
+ margin-top: 15px;
+ height: 65px;
+ width: 65px;
+ }
+ .about-wrap .feature-list.finer-points h4,
+ .about-wrap .feature-list.finer-points p {
+ margin-right: 80px;
+ }
+}
diff --git a/wp-admin/css/about.css b/wp-admin/css/about.css
new file mode 100644
index 0000000..09f1b21
--- /dev/null
+++ b/wp-admin/css/about.css
@@ -0,0 +1,480 @@
+/*------------------------------------------------------------------------------
+ 22.0 - About Pages
+
+ 1.0 Global: About, Credits, Freedoms
+ 1.1 Typography
+ 1.2 Structure
+ 1.3 Point Releases
+ 2.0 About Page
+ 2.1 Typography
+ 2.2 Structure
+ 3.0 Credits & Freedoms Pages
+------------------------------------------------------------------------------*/
+
+/*------------------------------------------------------------------------------
+ 1.0 - Global: About, Credits, Freedoms
+------------------------------------------------------------------------------*/
+
+.about-wrap {
+ position: relative;
+ margin: 25px 40px 0 20px;
+ max-width: 1050px; /* readability */
+ font-size: 15px;
+}
+
+.about-wrap div.updated,
+.about-wrap div.error {
+ display: none !important;
+}
+
+.about-wrap hr {
+ border: 0;
+ height: 0;
+ margin: 0;
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
+}
+
+.about-wrap img {
+ margin: 0;
+ max-width: 100%;
+ height: auto;
+ vertical-align: middle;
+}
+
+/* WordPress Version Badge */
+
+.wp-badge {
+ background: #0074a2 url(../images/w-logo-white.png?ver=20131202) no-repeat;
+ background-position: center 24px;
+ -webkit-background-size: 85px 85px;
+ background-size: 85px 85px;
+ color: #78c8e6;
+ font-size: 14px;
+ text-align: center;
+ font-weight: 600;
+ margin: 5px 0 0;
+ padding-top: 120px;
+ height: 40px;
+ display: inline-block;
+ width: 150px;
+ text-rendering: optimizeLegibility;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.2);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.2);
+}
+
+.svg .wp-badge {
+ background-image: url(../images/wordpress-logo-white.svg?ver=20131110);
+}
+
+.about-wrap .wp-badge {
+ position: absolute;
+ top: 0;
+ right: 0;
+}
+
+/* Tabs */
+
+.about-wrap h2.nav-tab-wrapper {
+ padding-left: 6px;
+}
+
+.about-wrap h2 .nav-tab {
+ padding: 4px 15px 6px;
+ margin: 0 3px -1px 0;
+ font-size: 18px;
+ vertical-align: top;
+ border-width: 1px;
+ white-space: nowrap;
+}
+
+/* 1.1 - Typography */
+
+.about-wrap p {
+ line-height: 1.6em;
+ font-size: 14px;
+}
+
+.about-wrap h1 {
+ margin: 0.2em 200px 0 0;
+ color: #333;
+ line-height: 1.2em;
+ font-size: 2.8em;
+ font-weight: 400;
+}
+
+.about-wrap h3 {
+ margin: 2em 0 .6em;
+ font-size: 1.25em;
+ line-height: 1.5em;
+}
+
+.about-wrap h4 {
+ color: #222;
+}
+
+.about-wrap code,
+.about-wrap ol li p {
+ font-size: 14px;
+}
+
+.about-wrap .about-description,
+.about-wrap .about-text {
+ margin-top: 1.4em;
+ font-weight: normal;
+ line-height: 1.6em;
+ font-size: 19px;
+}
+
+.about-wrap .about-text {
+ margin: 1em 200px 1em 0;
+ min-height: 60px;
+ color: #777;
+}
+
+/* 1.2 - Structure */
+
+.about-wrap .two-col > div {
+ position: relative;
+ width: 47.6%;
+ margin-right: 4.799999999%;
+ float: left;
+}
+
+.about-wrap .three-col > div {
+ position: relative;
+ width: 29.95%;
+ margin-right: 4.999999999%;
+ float: left;
+}
+
+.about-wrap .col .last-feature {
+ margin-right: 0;
+}
+
+/* 1.3 - Point Releases */
+
+.about-wrap .point-releases {
+ margin-top: 5px;
+ border-bottom: 1px solid #dfdfdf;
+}
+
+.about-wrap .changelog.point-releases h3 {
+ padding-top: 35px;
+}
+
+.about-wrap .changelog.point-releases h3:first-child {
+ padding-top: 7px;
+}
+
+/*------------------------------------------------------------------------------
+ 2.0 - About Page
+------------------------------------------------------------------------------*/
+
+/* 2.1 - Typography */
+
+.about-wrap .headline-feature h2 {
+ margin: 1.1em 0 0.2em;
+ font-size: 2.4em;
+ font-weight: 300;
+ line-height: 1.3;
+ text-align: center;
+}
+
+.about-wrap .feature-list h2 {
+ margin: 30px 0 15px;
+ text-align: center;
+}
+
+.about-wrap .dfw h3 {
+ margin-top: 1em;
+ text-align: center;
+}
+
+.about-wrap .feature-section h4 {
+ margin: 1.4em 0 0.6em 0;
+ font-size: 1.2em;
+}
+
+.about-wrap .feature-section p {
+ margin-top: 0.6em;
+}
+
+.about-wrap .dfw p {
+ max-width: 68%;
+ margin: 0 auto 20px;
+}
+
+/* 2.2 - Structure */
+
+.about-wrap .featured-image {
+ text-align: center;
+}
+
+.about-wrap .feature-section {
+ overflow: hidden;
+ padding-bottom: 20px;
+}
+
+.about-wrap .headline-feature .feature-section {
+ margin: 0 auto;
+ max-width: 82%;
+}
+
+.about-wrap .headline-feature .feature-section .col:first-child {
+ float: left;
+ margin: 15px 5% 0 0;
+ width: 55%;
+}
+
+.about-wrap .headline-feature .feature-section .col:last-child {
+ float: right;
+ margin: 15px 0 40px;
+ width: 40%;
+}
+
+.about-wrap .feature-list .feature-section {
+ margin-top: 0;
+}
+
+.about-wrap .dfw .feature-section {
+ overflow: visible;
+}
+
+.about-wrap .dfw-container {
+ position: relative;
+ overflow: hidden;
+ margin-top: 50px;
+ -webkit-box-shadow: 0 0 10px rgba( 0, 0, 0, 0.25 );
+ box-shadow: 0 0 10px rgba( 0, 0, 0, 0.25 );
+}
+
+.about-wrap .dfw-container .overlay-image {
+ position: absolute;
+ top: 0;
+ left: 0;
+ /* Cubic Bezier to speed up the slide-out of the full-width sidebar image */
+ -webkit-transition: 0.8s -webkit-transform cubic-bezier(.9,.03,1,.61),
+ 0.65s opacity linear;
+ transition: 0.8s transform cubic-bezier(.9,.03,1,.61),
+ 0.65s opacity linear;
+}
+
+.about-wrap .dfw-container .overlay-image.fade-in {
+ opacity: 0;
+}
+
+.about-wrap .dfw-container .overlay-image.from-left {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+}
+
+.about-wrap .dfw-container:hover .overlay-image {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ /* Cubic Bezier to speed up the slide-in of the full-width sidebar image */
+ -webkit-transition: 0.7s -webkit-transform cubic-bezier( 0, 0.8, 0.8, 1 ),
+ 0.8s opacity linear;
+ transition: 0.7s transform cubic-bezier( 0, 0.8, 0.8, 1 ),
+ 0.8s opacity linear;
+}
+
+/* Return to Dashboard Home link */
+
+.about-wrap .return-to-dashboard {
+ margin: 30px 0 0 -5px;
+ font-size: 14px;
+ font-weight: bold;
+}
+
+.about-wrap .return-to-dashboard a {
+ text-decoration: none;
+ padding: 0 5px;
+}
+
+/* SVGs */
+.about-wrap .feature-list svg {
+ float: left;
+ clear: left;
+ margin: 15px 15px 0 0 ;
+ height: 90px;
+ width: 90px;
+ background-color: #cccccc;
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ fill: #999;
+ border: 1px solid #c1c1c1;
+}
+
+.about-wrap .feature-list.finer-points h4,
+.about-wrap .feature-list.finer-points p {
+ margin-left: 115px;
+}
+
+/*------------------------------------------------------------------------------
+ 3.0 - Credits & Freedoms Pages
+------------------------------------------------------------------------------*/
+
+/* Credits */
+
+.about-wrap h4.wp-people-group {
+ margin-top: 2.6em;
+ font-size: 16px;
+}
+
+.about-wrap ul.wp-people-group {
+ overflow: hidden;
+ padding: 0 5px;
+ margin: 0 -15px 0 -5px;
+}
+
+.about-wrap ul.compact {
+ margin-bottom: 0
+}
+
+.about-wrap li.wp-person {
+ display: inline-block;
+ vertical-align: top;
+ margin-right: 10px;
+ padding-bottom: 15px;
+ height: 70px;
+ width: 280px;
+}
+
+.about-wrap ul.compact li.wp-person {
+ height: auto;
+ width: 180px;
+ padding-bottom: 0;
+ margin-bottom: 0;
+}
+
+.about-wrap li.wp-person img.gravatar {
+ float: left;
+ margin: 0 10px 10px 0;
+ padding: 2px;
+ width: 60px;
+ height: 60px;
+}
+
+.about-wrap ul.compact li.wp-person img.gravatar {
+ width: 30px;
+ height: 30px;
+}
+
+.about-wrap li.wp-person a.web {
+ display: block;
+ margin: 6px 0 2px;
+ font-size: 16px;
+ font-weight: normal;
+ line-height: 1.6em;
+ text-decoration: none;
+}
+
+.about-wrap #wp-people-group-validators + p.wp-credits-list {
+ margin-top: 0;
+}
+
+.about-wrap p.wp-credits-list a {
+ white-space: nowrap;
+}
+
+/* Freedoms */
+
+.freedoms-php .about-wrap ol {
+ margin: 40px 60px;
+}
+
+.freedoms-php .about-wrap ol li {
+ list-style-type: decimal;
+ font-weight: bold;
+}
+
+.freedoms-php .about-wrap ol p {
+ font-weight: normal;
+ margin: 0.6em 0;
+}
+
+/*------------------------------------------------------------------------------
+ 4.0 - Media Queries
+------------------------------------------------------------------------------*/
+
+@media screen and ( max-width: 782px ) {
+ .about-wrap .one-col > div,
+ .about-wrap .two-col > div,
+ .about-wrap .three-col > div {
+ width: 100%;
+ margin: 0 0 40px;
+ padding: 0 0 40px;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+ }
+
+ .about-wrap .feature-list div,
+ .about-wrap .col > div.last-feature {
+ margin: 0;
+ padding: 0;
+ border-bottom: none;
+ }
+
+ .about-wrap .headline-feature .feature-section {
+ max-width: 100%;
+ }
+
+ .about-wrap .feature-list .feature-section {
+ padding: 0 0 40px;
+ }
+}
+
+@media only screen and (max-width: 500px) {
+ .about-wrap {
+ margin-right: 20px;
+ margin-left: 10px;
+ }
+
+ .about-wrap h1,
+ .about-wrap .about-text {
+ margin-right: 0;
+ }
+
+ .about-wrap .about-text {
+ margin-bottom: 0.25em;
+ }
+
+ .about-wrap .wp-badge {
+ position: relative;
+ margin-bottom: 1.5em;
+ width: 100%;
+ }
+
+ .about-wrap h2.nav-tab-wrapper {
+ padding-left: 0;
+ border-bottom: 0;
+ }
+
+ .about-wrap h2 .nav-tab {
+ margin-top: 10px;
+ margin-right: 10px;
+ border-bottom: 1px solid #ccc;
+ }
+
+ .about-wrap .three-col div,
+ .about-wrap .headline-feature .feature-section div {
+ width: 100% !important;
+ float: none !important;
+ }
+
+ .about-wrap .dfw p {
+ max-width: 90%;
+ }
+}
+
+@media only screen and (max-width: 400px) {
+ .about-wrap .feature-list svg {
+ margin-top: 15px;
+ height: 65px;
+ width: 65px;
+ }
+ .about-wrap .feature-list.finer-points h4,
+ .about-wrap .feature-list.finer-points p {
+ margin-left: 80px;
+ }
+}
diff --git a/wp-admin/css/admin-menu-rtl.css b/wp-admin/css/admin-menu-rtl.css
new file mode 100644
index 0000000..f18ead9
--- /dev/null
+++ b/wp-admin/css/admin-menu-rtl.css
@@ -0,0 +1,922 @@
+#adminmenuback,
+#adminmenuwrap,
+#adminmenu,
+#adminmenu .wp-submenu {
+ width: 160px;
+ background-color: #222;
+}
+
+#adminmenuback {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ z-index: -1;
+}
+
+#adminmenu {
+ clear: right;
+ margin: 12px 0;
+ padding: 0;
+ list-style: none;
+}
+
+.folded #adminmenuback,
+.folded #adminmenuwrap,
+.folded #adminmenu,
+.folded #adminmenu li.menu-top {
+ width: 36px;
+}
+
+.icon16 {
+ height: 18px;
+ width: 18px;
+ padding: 6px 6px;
+ margin: -6px -8px 0 0;
+ float: right;
+}
+
+/* New Menu icons */
+
+.icon16:before {
+ color: #999;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ padding: 6px 0;
+ height: 34px;
+ width: 20px;
+ display: inline-block;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+.icon16.icon-dashboard:before {
+ content: '\f226';
+}
+
+.icon16.icon-post:before {
+ content: '\f109';
+}
+
+.icon16.icon-media:before {
+ content: '\f104';
+}
+
+.icon16.icon-links:before {
+ content: '\f103';
+}
+
+.icon16.icon-page:before {
+ content: '\f105';
+}
+
+.icon16.icon-comments:before {
+ content: '\f101';
+ margin-top: 1px;
+}
+
+.icon16.icon-appearance:before {
+ content: '\f100';
+}
+
+.icon16.icon-plugins:before {
+ content: '\f106';
+}
+
+.icon16.icon-users:before {
+ content: '\f110';
+}
+
+.icon16.icon-tools:before {
+ content: '\f107';
+}
+
+.icon16.icon-settings:before {
+ content: '\f108';
+}
+
+.icon16.icon-site:before {
+ content: '\f112'
+}
+
+.icon16.icon-generic:before {
+ content: '\f111';
+}
+
+/* hide background-image for icons above */
+.icon16.icon-dashboard,
+.menu-icon-dashboard div.wp-menu-image,
+.icon16.icon-post,
+.menu-icon-post div.wp-menu-image,
+.icon16.icon-media,
+.menu-icon-media div.wp-menu-image,
+.icon16.icon-links,
+.menu-icon-links div.wp-menu-image,
+.icon16.icon-page,
+.menu-icon-page div.wp-menu-image,
+.icon16.icon-comments,
+.menu-icon-comments div.wp-menu-image,
+.icon16.icon-appearance,
+.menu-icon-appearance div.wp-menu-image,
+.icon16.icon-plugins,
+.menu-icon-plugins div.wp-menu-image,
+.icon16.icon-users,
+.menu-icon-users div.wp-menu-image,
+.icon16.icon-tools,
+.menu-icon-tools div.wp-menu-image,
+.icon16.icon-settings,
+.menu-icon-settings div.wp-menu-image,
+.icon16.icon-site,
+.menu-icon-site div.wp-menu-image,
+.icon16.icon-generic,
+.menu-icon-generic div.wp-menu-image {
+ background-image: none !important;
+}
+
+/*------------------------------------------------------------------------------
+ 7.0 - Main Navigation (Left Menu)
+------------------------------------------------------------------------------*/
+
+#adminmenuwrap {
+ position: relative;
+ float: right;
+ z-index: 9990;
+}
+
+/* side admin menu */
+#adminmenu * {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#adminmenu li {
+ margin: 0;
+ padding: 0;
+ cursor: pointer;
+}
+
+#adminmenu a {
+ display: block;
+ line-height: 18px;
+ padding: 2px 5px;
+ color: #eee;
+}
+
+#adminmenu .wp-submenu a {
+ color: #bbb;
+}
+
+#adminmenu .wp-submenu a:hover,
+#adminmenu .wp-submenu a:focus {
+ background: none;
+}
+
+#adminmenu a:hover,
+#adminmenu li.menu-top > a:focus,
+#adminmenu .wp-submenu a:hover,
+#adminmenu .wp-submenu a:focus {
+ color: #45bbe6;
+}
+
+#adminmenu li.menu-top {
+ border: none;
+ min-height: 34px;
+ position: relative;
+}
+
+#adminmenu .wp-submenu {
+ list-style: none;
+ position: absolute;
+ top: -1000em;
+ right: 160px;
+ overflow: visible;
+ word-wrap: break-word;
+}
+
+#adminmenu .wp-submenu,
+.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu {
+ padding: 7px 0 8px;
+ z-index: 9999;
+ background-color: #333;
+ -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2);
+ box-shadow: 0 3px 5px rgba(0,0,0,0.2);
+}
+
+.js #adminmenu .sub-open,
+.js #adminmenu .opensub .wp-submenu,
+#adminmenu a.menu-top:focus + .wp-submenu,
+.no-js li.wp-has-submenu:hover .wp-submenu {
+ top: -1px;
+}
+
+#adminmenu .wp-has-current-submenu .wp-submenu,
+.no-js li.wp-has-current-submenu:hover .wp-submenu,
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,
+#adminmenu .wp-has-current-submenu.opensub .wp-submenu {
+ position: relative;
+ z-index: 3;
+ top: auto;
+ right: auto;
+ left: auto;
+ bottom: auto;
+ border: 0 none;
+ margin-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background-color: #333;
+}
+
+/* ensure that wp-submenu's box shadow doesn't appear on top of the focused menu item's background. */
+#adminmenu li.menu-top:hover,
+#adminmenu li.opensub > a.menu-top,
+#adminmenu li > a.menu-top:focus {
+ position: relative;
+ background-color: #111;
+}
+
+.folded #adminmenu li.menu-top:hover,
+.folded #adminmenu li.opensub > a.menu-top,
+.folded #adminmenu li > a.menu-top:focus {
+ z-index: 10000;
+}
+
+#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,
+#adminmenu li.current a.menu-top,
+.folded #adminmenu li.wp-has-current-submenu,
+.folded #adminmenu li.current.menu-top,
+#adminmenu .wp-menu-arrow,
+#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,
+#adminmenu .wp-menu-arrow div {
+ background: #0074a2;
+ color: #fff;
+}
+
+.folded #adminmenu .wp-submenu.sub-open,
+.folded #adminmenu .opensub .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,
+.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu,
+.folded #adminmenu a.menu-top:focus + .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu,
+.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu {
+ top: 0;
+ right: 36px;
+}
+
+.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu {
+ position: absolute;
+ top: -1000em;
+}
+
+#adminmenu .wp-not-current-submenu .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu {
+ min-width: 160px;
+ width: auto;
+}
+
+#adminmenu .wp-submenu a {
+ font-size: 13px;
+ line-height: 1.2;
+ margin: 0;
+ padding: 6px 0;
+}
+
+#adminmenu .wp-submenu li.current,
+#adminmenu .wp-submenu li.current a,
+#adminmenu .opensub .wp-submenu li.current a,
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a,
+#adminmenu .wp-submenu li.current a:hover,
+#adminmenu .wp-submenu li.current a:focus {
+ color: #fff;
+}
+
+#adminmenu .wp-not-current-submenu li > a,
+.folded #adminmenu .wp-has-current-submenu li > a {
+ padding-left: 16px;
+ padding-right: 14px;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+#adminmenu .wp-has-current-submenu ul > li > a,
+.folded #adminmenu li.menu-top .wp-submenu > li > a {
+ padding: 6px 12px;
+}
+
+#adminmenu a.menu-top,
+#adminmenu .wp-submenu-head {
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 18px;
+ padding: 0;
+}
+
+#adminmenu .wp-submenu-head,
+.folded #adminmenu .wp-menu-name {
+ display: none;
+}
+
+.folded #adminmenu .wp-submenu-head {
+ display: block;
+}
+
+#adminmenu .wp-submenu li {
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+}
+
+#adminmenu .wp-menu-image img {
+ padding: 9px 0 0 0;
+ opacity: 0.6;
+ filter: alpha(opacity=60);
+}
+
+#adminmenu div.wp-menu-name {
+ padding: 8px 0;
+}
+
+#adminmenu div.wp-menu-image {
+ float: right;
+ width: 36px;
+ height: 34px;
+ margin: 0;
+ text-align: center;
+}
+
+#adminmenu div.wp-menu-image.svg {
+ background-repeat: no-repeat;
+ background-position: center;
+ -webkit-background-size: 20px auto;
+ background-size: 20px auto;
+}
+
+div.wp-menu-image:before {
+ color: #999;
+ padding: 7px 0;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+#adminmenu div.wp-menu-image:before {
+ color: #999;
+}
+
+#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before,
+#adminmenu .wp-has-current-submenu div.wp-menu-image:before,
+#adminmenu .current div.wp-menu-image:before,
+#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,
+#adminmenu a.current:hover div.wp-menu-image:before {
+ color: #fff;
+}
+
+#adminmenu li:hover div.wp-menu-image:before {
+ color: #45bbe6;
+}
+
+.folded #adminmenu div.wp-menu-image {
+ width: 35px;
+ height: 30px;
+ position: absolute;
+ z-index: 25;
+}
+
+.folded #adminmenu a.menu-top {
+ height: 34px;
+}
+
+/* No @font-face support */
+.no-font-face #adminmenu .wp-menu-image {
+ display: none;
+}
+
+.no-font-face #adminmenu div.wp-menu-name {
+ padding: 8px 12px;
+}
+
+.no-font-face.auto-fold #adminmenu .wp-menu-name {
+ margin-right: 0;
+}
+/* End no @font-face support */
+
+/* Sticky admin menu */
+.sticky-menu #adminmenuwrap {
+ position: fixed;
+}
+
+/* A new arrow */
+
+.wp-menu-arrow {
+ display: none !important;
+}
+
+ul#adminmenu a.wp-has-current-submenu {
+ position: relative;
+}
+
+ul#adminmenu a.wp-has-current-submenu:after,
+ul#adminmenu > li.current > a.current:after {
+ left: 0;
+ border: solid 8px transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-left-color: #f1f1f1;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.folded ul#adminmenu li:hover a.wp-has-current-submenu:after {
+ display: none;
+}
+
+.folded ul#adminmenu a.wp-has-current-submenu:after,
+.folded ul#adminmenu > li a.current:after {
+ border-width: 4px;
+ margin-top: -4px;
+}
+
+/* flyout menu arrow */
+#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after {
+ left: 0;
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-width: 8px;
+ top: 10px;
+ z-index: 10000;
+}
+
+.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after {
+ border-width: 4px;
+ margin-top: -4px;
+ top: 18px;
+}
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-left-color: #333;
+}
+
+#adminmenu li.menu-top:hover .wp-menu-image img,
+#adminmenu li.wp-has-current-submenu .wp-menu-image img {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+#adminmenu li.wp-menu-separator {
+ height: 5px;
+ padding: 0;
+ margin: 0 0 6px 0;
+ cursor: inherit;
+}
+
+/* @todo: is this even needed given that it's nested beneath the above li.wp-menu-separator? */
+#adminmenu div.separator {
+ height: 2px;
+ padding: 0;
+}
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #fff;
+ font-weight: 400;
+ font-size: 14px;
+ padding: 8px 11px 8px 4px;
+ margin: -7px 0px 4px;
+}
+
+#adminmenu li.current,
+.folded #adminmenu li.wp-menu-open {
+ border: 0 none;
+}
+
+#adminmenu .awaiting-mod,
+#adminmenu .update-plugins,
+#sidemenu li a span.update-plugins {
+ display: inline-block;
+ background-color: #d54e21;
+ color: #fff;
+ font-size: 9px;
+ line-height: 17px;
+ font-weight: 600;
+ margin: 1px 2px 0 0;
+ vertical-align: top;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+ z-index: 26;
+}
+
+#adminmenu li .awaiting-mod span,
+#adminmenu li span.update-plugins span,
+#sidemenu li a span.update-plugins span {
+ display: block;
+ padding: 0 6px;
+}
+
+#adminmenu li.current a .awaiting-mod,
+#adminmenu li a.wp-has-current-submenu .update-plugins {
+ background-color: #45bbe6;
+ color: #fff;
+}
+
+#adminmenu li span.count-0,
+#sidemenu li a .count-0 {
+ display: none;
+}
+
+#collapse-menu {
+ font-size: 13px;
+ line-height: 34px;
+ margin-top: 10px;
+ color: #aaa;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+#collapse-menu:hover,
+#collapse-menu:hover #collapse-button div:after {
+ color: #45bbe6;
+}
+
+.folded #collapse-menu span {
+ display: none;
+}
+
+#collapse-button,
+#collapse-button div {
+ width: 15px;
+ height: 15px;
+}
+
+#collapse-button {
+ float: right;
+ height: 15px;
+ margin: 10px 11px 10px 8px;
+ width: 15px;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+}
+
+#wpwrap #collapse-button div {
+ padding: 0;
+}
+
+#collapse-button div:after {
+ content: '\f148';
+ display: block;
+ line-height: 15px;
+ right: -3px;
+ top: -3px;
+ color: #aaa;
+ font: normal 20px/1 'dashicons' !important;
+ speak: none;
+ margin: 0 auto;
+ padding: 0 !important;
+ position: relative;
+ text-align: center;
+ width: 20px;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.folded #collapse-button div:after,
+.rtl #collapse-button div:after {
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.rtl.folded #collapse-button div:after {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+}
+
+/**
+ * Toolbar menu toggle
+ */
+li#wp-admin-bar-menu-toggle {
+ display: none;
+}
+
+/* Hide-if-customize for items we can't add classes to */
+.customize-support #menu-appearance a[href="themes.php?page=custom-header"],
+.customize-support #menu-appearance a[href="themes.php?page=custom-background"] {
+ display: none;
+}
+
+/* Auto-folding of the admin menu */
+@media only screen and (max-width: 960px) {
+ .auto-fold #wpcontent,
+ .auto-fold #wpfooter {
+ margin-right: 36px;
+ }
+
+ .auto-fold #adminmenuback,
+ .auto-fold #adminmenuwrap,
+ .auto-fold #adminmenu,
+ .auto-fold #adminmenu li.menu-top {
+ width: 36px;
+ }
+
+ .auto-fold #adminmenu .wp-submenu.sub-open,
+ .auto-fold #adminmenu .opensub .wp-submenu,
+ .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,
+ .auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu,
+ .auto-fold #adminmenu a.menu-top:focus + .wp-submenu,
+ .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu {
+ top: 0px;
+ right: 36px;
+ }
+
+ .auto-fold #adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+ .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu {
+ position: absolute;
+ top: -1000em;
+ margin-left: -1px;
+ padding: 7px 0 8px;
+ z-index: 9999;
+ }
+
+ .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu {
+ min-width: 150px;
+ width: auto;
+ }
+
+ .auto-fold #adminmenu .wp-has-current-submenu li > a {
+ padding-left: 16px;
+ padding-right: 14px;
+ }
+
+
+ .auto-fold #adminmenu li.menu-top .wp-submenu > li > a {
+ padding-right: 12px;
+ }
+
+ .auto-fold #adminmenu .wp-menu-name {
+ display: none;
+ }
+
+ .auto-fold #adminmenu .wp-submenu-head {
+ display: block;
+ }
+
+ .auto-fold #adminmenu div.wp-menu-image {
+ height: 30px;
+ width: 34px;
+ position: absolute;
+ z-index: 25;
+ }
+
+ .auto-fold #adminmenu a.menu-top {
+ height: 34px;
+ }
+
+ .auto-fold #adminmenu li.wp-menu-open {
+ border: 0 none;
+ }
+
+ .auto-fold #adminmenu .wp-has-current-submenu.menu-top-last {
+ margin-bottom: 0;
+ }
+
+ .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after {
+ display: none;
+ }
+
+ .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after {
+ border-width: 4px;
+ margin-top: -4px;
+ top: 16px;
+ }
+
+ .auto-fold ul#adminmenu a.wp-has-current-submenu:after,
+ .auto-fold ul#adminmenu > li a.current:after {
+ border-width: 4px;
+ margin-top: -4px;
+ }
+
+ .auto-fold #adminmenu li.menu-top:hover,
+ .auto-fold #adminmenu li.opensub > a.menu-top,
+ .auto-fold #adminmenu li > a.menu-top:focus {
+ z-index: 10000;
+ }
+
+ .auto-fold #collapse-menu span {
+ display: none;
+ }
+
+ .auto-fold #collapse-button div {
+ background: none;
+ }
+
+ .auto-fold #collapse-button div:after {
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+ }
+
+ .rtl.auto-fold #collapse-button div:after {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+ }
+
+}
+
+@media screen and ( max-width: 782px ) {
+ .auto-fold #wpcontent {
+ position: relative;
+ margin-right: 0;
+ padding-right: 10px;
+ }
+
+ .sticky-menu #adminmenuwrap {
+ position: relative;
+ z-index: auto;
+ top: 0;
+ }
+
+ /* Sidebar Adjustments */
+ .auto-fold #adminmenu,
+ .auto-fold #adminmenuback,
+ .auto-fold #adminmenuwrap {
+ position: absolute;
+ width: 190px;
+ z-index: 100;
+ }
+
+ .auto-fold #adminmenuback,
+ .auto-fold #adminmenuwrap {
+ display: none;
+ }
+
+ .auto-fold .wp-responsive-open #adminmenuback,
+ .auto-fold .wp-responsive-open #adminmenuwrap {
+ display: block;
+ }
+
+ .auto-fold #adminmenu li.menu-top {
+ width: 100%;
+ }
+
+ /* Resize the admin menu items to a comfortable touch size */
+ .auto-fold #adminmenu li a {
+ font-size: 16px;
+ padding: 5px;
+ }
+
+ .auto-fold #adminmenu li.menu-top .wp-submenu > li > a {
+ padding: 10px 20px 10px 10px;
+ }
+
+ /* Restore the menu names */
+ .auto-fold #adminmenu .wp-menu-name {
+ display: block;
+ margin-right: 35px;
+ }
+
+ /* Switch the arrow side */
+ .auto-fold ul#adminmenu a.wp-has-current-submenu:after,
+ .auto-fold ul#adminmenu > li.current > a.current:after {
+ border-width: 8px;
+ margin-top: -8px;
+ }
+
+ .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after {
+ display: none;
+ }
+
+ /* Make the submenus appear correctly when tapped. */
+ #adminmenu .wp-submenu {
+ position: relative;
+ display: none;
+ }
+
+ .auto-fold #adminmenu .selected .wp-submenu,
+ .auto-fold #adminmenu .wp-menu-open .wp-submenu {
+ position: relative;
+ display: block;
+ top: 0;
+ right: -1px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ .auto-fold #adminmenu .selected .wp-submenu:after,
+ .auto-fold #adminmenu .wp-menu-open .wp-submenu:after {
+ display: none;
+ }
+
+ .auto-fold #adminmenu .opensub .wp-submenu {
+ display: none;
+ }
+
+ .auto-fold #adminmenu .selected .wp-submenu {
+ display: block;
+ }
+
+ .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after {
+ display: block;
+ }
+
+ .auto-fold #adminmenu a.menu-top:focus + .wp-submenu,
+ .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu {
+ position: relative;
+ right: -1px;
+ left: 0;
+ top: 0;
+ }
+
+ /* Remove submenu headers and adjust sub meu*/
+ #adminmenu .wp-submenu .wp-submenu-head {
+ display: none;
+ }
+
+ /* Toolbar menu toggle */
+ #wp-responsive-toggle {
+ position: fixed;
+ top: 5px;
+ right: 4px;
+ padding-left: 10px;
+ z-index: 99999;
+ border: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ #wpadminbar #wp-admin-bar-menu-toggle a {
+ display: block;
+ padding: 0;
+ overflow: hidden;
+ outline: none;
+ text-decoration: none;
+ border: 1px solid transparent;
+ background: none;
+ height: 44px;
+ margin-right: -1px;
+ }
+
+ .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #333;
+ }
+
+ li#wp-admin-bar-menu-toggle {
+ display: block;
+ }
+
+ #wpadminbar #wp-admin-bar-menu-toggle a:hover {
+ border: 1px solid transparent;
+ }
+
+ #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before {
+ content: '\f228';
+ display: inline-block;
+ float: right;
+ font: normal 40px/45px 'Dashicons';
+ vertical-align: middle;
+ outline: none;
+ margin: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ height: 44px;
+ width: 50px;
+ padding: 0;
+ border: none;
+ text-align: center;
+ text-decoration: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+}
+
+/* Smartphone */
+@media screen and (max-width: 600px) {
+ #adminmenuwrap,
+ #adminmenuback {
+ display: none;
+ }
+
+ .wp-responsive-open #adminmenuwrap,
+ .wp-responsive-open #adminmenuback {
+ display: block;
+ }
+
+ .auto-fold #adminmenu {
+ top: 46px;
+ }
+}
+
diff --git a/wp-admin/css/admin-menu.css b/wp-admin/css/admin-menu.css
new file mode 100644
index 0000000..b8bf6b2
--- /dev/null
+++ b/wp-admin/css/admin-menu.css
@@ -0,0 +1,922 @@
+#adminmenuback,
+#adminmenuwrap,
+#adminmenu,
+#adminmenu .wp-submenu {
+ width: 160px;
+ background-color: #222;
+}
+
+#adminmenuback {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ z-index: -1;
+}
+
+#adminmenu {
+ clear: left;
+ margin: 12px 0;
+ padding: 0;
+ list-style: none;
+}
+
+.folded #adminmenuback,
+.folded #adminmenuwrap,
+.folded #adminmenu,
+.folded #adminmenu li.menu-top {
+ width: 36px;
+}
+
+.icon16 {
+ height: 18px;
+ width: 18px;
+ padding: 6px 6px;
+ margin: -6px 0 0 -8px;
+ float: left;
+}
+
+/* New Menu icons */
+
+.icon16:before {
+ color: #999;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ padding: 6px 0;
+ height: 34px;
+ width: 20px;
+ display: inline-block;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+.icon16.icon-dashboard:before {
+ content: '\f226';
+}
+
+.icon16.icon-post:before {
+ content: '\f109';
+}
+
+.icon16.icon-media:before {
+ content: '\f104';
+}
+
+.icon16.icon-links:before {
+ content: '\f103';
+}
+
+.icon16.icon-page:before {
+ content: '\f105';
+}
+
+.icon16.icon-comments:before {
+ content: '\f101';
+ margin-top: 1px;
+}
+
+.icon16.icon-appearance:before {
+ content: '\f100';
+}
+
+.icon16.icon-plugins:before {
+ content: '\f106';
+}
+
+.icon16.icon-users:before {
+ content: '\f110';
+}
+
+.icon16.icon-tools:before {
+ content: '\f107';
+}
+
+.icon16.icon-settings:before {
+ content: '\f108';
+}
+
+.icon16.icon-site:before {
+ content: '\f112'
+}
+
+.icon16.icon-generic:before {
+ content: '\f111';
+}
+
+/* hide background-image for icons above */
+.icon16.icon-dashboard,
+.menu-icon-dashboard div.wp-menu-image,
+.icon16.icon-post,
+.menu-icon-post div.wp-menu-image,
+.icon16.icon-media,
+.menu-icon-media div.wp-menu-image,
+.icon16.icon-links,
+.menu-icon-links div.wp-menu-image,
+.icon16.icon-page,
+.menu-icon-page div.wp-menu-image,
+.icon16.icon-comments,
+.menu-icon-comments div.wp-menu-image,
+.icon16.icon-appearance,
+.menu-icon-appearance div.wp-menu-image,
+.icon16.icon-plugins,
+.menu-icon-plugins div.wp-menu-image,
+.icon16.icon-users,
+.menu-icon-users div.wp-menu-image,
+.icon16.icon-tools,
+.menu-icon-tools div.wp-menu-image,
+.icon16.icon-settings,
+.menu-icon-settings div.wp-menu-image,
+.icon16.icon-site,
+.menu-icon-site div.wp-menu-image,
+.icon16.icon-generic,
+.menu-icon-generic div.wp-menu-image {
+ background-image: none !important;
+}
+
+/*------------------------------------------------------------------------------
+ 7.0 - Main Navigation (Left Menu)
+------------------------------------------------------------------------------*/
+
+#adminmenuwrap {
+ position: relative;
+ float: left;
+ z-index: 9990;
+}
+
+/* side admin menu */
+#adminmenu * {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#adminmenu li {
+ margin: 0;
+ padding: 0;
+ cursor: pointer;
+}
+
+#adminmenu a {
+ display: block;
+ line-height: 18px;
+ padding: 2px 5px;
+ color: #eee;
+}
+
+#adminmenu .wp-submenu a {
+ color: #bbb;
+}
+
+#adminmenu .wp-submenu a:hover,
+#adminmenu .wp-submenu a:focus {
+ background: none;
+}
+
+#adminmenu a:hover,
+#adminmenu li.menu-top > a:focus,
+#adminmenu .wp-submenu a:hover,
+#adminmenu .wp-submenu a:focus {
+ color: #45bbe6;
+}
+
+#adminmenu li.menu-top {
+ border: none;
+ min-height: 34px;
+ position: relative;
+}
+
+#adminmenu .wp-submenu {
+ list-style: none;
+ position: absolute;
+ top: -1000em;
+ left: 160px;
+ overflow: visible;
+ word-wrap: break-word;
+}
+
+#adminmenu .wp-submenu,
+.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu {
+ padding: 7px 0 8px;
+ z-index: 9999;
+ background-color: #333;
+ -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2);
+ box-shadow: 0 3px 5px rgba(0,0,0,0.2);
+}
+
+.js #adminmenu .sub-open,
+.js #adminmenu .opensub .wp-submenu,
+#adminmenu a.menu-top:focus + .wp-submenu,
+.no-js li.wp-has-submenu:hover .wp-submenu {
+ top: -1px;
+}
+
+#adminmenu .wp-has-current-submenu .wp-submenu,
+.no-js li.wp-has-current-submenu:hover .wp-submenu,
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,
+#adminmenu .wp-has-current-submenu.opensub .wp-submenu {
+ position: relative;
+ z-index: 3;
+ top: auto;
+ left: auto;
+ right: auto;
+ bottom: auto;
+ border: 0 none;
+ margin-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background-color: #333;
+}
+
+/* ensure that wp-submenu's box shadow doesn't appear on top of the focused menu item's background. */
+#adminmenu li.menu-top:hover,
+#adminmenu li.opensub > a.menu-top,
+#adminmenu li > a.menu-top:focus {
+ position: relative;
+ background-color: #111;
+}
+
+.folded #adminmenu li.menu-top:hover,
+.folded #adminmenu li.opensub > a.menu-top,
+.folded #adminmenu li > a.menu-top:focus {
+ z-index: 10000;
+}
+
+#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,
+#adminmenu li.current a.menu-top,
+.folded #adminmenu li.wp-has-current-submenu,
+.folded #adminmenu li.current.menu-top,
+#adminmenu .wp-menu-arrow,
+#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,
+#adminmenu .wp-menu-arrow div {
+ background: #0074a2;
+ color: #fff;
+}
+
+.folded #adminmenu .wp-submenu.sub-open,
+.folded #adminmenu .opensub .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,
+.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu,
+.folded #adminmenu a.menu-top:focus + .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu,
+.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu {
+ top: 0;
+ left: 36px;
+}
+
+.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu {
+ position: absolute;
+ top: -1000em;
+}
+
+#adminmenu .wp-not-current-submenu .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu {
+ min-width: 160px;
+ width: auto;
+}
+
+#adminmenu .wp-submenu a {
+ font-size: 13px;
+ line-height: 1.2;
+ margin: 0;
+ padding: 6px 0;
+}
+
+#adminmenu .wp-submenu li.current,
+#adminmenu .wp-submenu li.current a,
+#adminmenu .opensub .wp-submenu li.current a,
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a,
+#adminmenu .wp-submenu li.current a:hover,
+#adminmenu .wp-submenu li.current a:focus {
+ color: #fff;
+}
+
+#adminmenu .wp-not-current-submenu li > a,
+.folded #adminmenu .wp-has-current-submenu li > a {
+ padding-right: 16px;
+ padding-left: 14px;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+#adminmenu .wp-has-current-submenu ul > li > a,
+.folded #adminmenu li.menu-top .wp-submenu > li > a {
+ padding: 6px 12px;
+}
+
+#adminmenu a.menu-top,
+#adminmenu .wp-submenu-head {
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 18px;
+ padding: 0;
+}
+
+#adminmenu .wp-submenu-head,
+.folded #adminmenu .wp-menu-name {
+ display: none;
+}
+
+.folded #adminmenu .wp-submenu-head {
+ display: block;
+}
+
+#adminmenu .wp-submenu li {
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+}
+
+#adminmenu .wp-menu-image img {
+ padding: 9px 0 0 0;
+ opacity: 0.6;
+ filter: alpha(opacity=60);
+}
+
+#adminmenu div.wp-menu-name {
+ padding: 8px 0;
+}
+
+#adminmenu div.wp-menu-image {
+ float: left;
+ width: 36px;
+ height: 34px;
+ margin: 0;
+ text-align: center;
+}
+
+#adminmenu div.wp-menu-image.svg {
+ background-repeat: no-repeat;
+ background-position: center;
+ -webkit-background-size: 20px auto;
+ background-size: 20px auto;
+}
+
+div.wp-menu-image:before {
+ color: #999;
+ padding: 7px 0;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+#adminmenu div.wp-menu-image:before {
+ color: #999;
+}
+
+#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before,
+#adminmenu .wp-has-current-submenu div.wp-menu-image:before,
+#adminmenu .current div.wp-menu-image:before,
+#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,
+#adminmenu a.current:hover div.wp-menu-image:before {
+ color: #fff;
+}
+
+#adminmenu li:hover div.wp-menu-image:before {
+ color: #45bbe6;
+}
+
+.folded #adminmenu div.wp-menu-image {
+ width: 35px;
+ height: 30px;
+ position: absolute;
+ z-index: 25;
+}
+
+.folded #adminmenu a.menu-top {
+ height: 34px;
+}
+
+/* No @font-face support */
+.no-font-face #adminmenu .wp-menu-image {
+ display: none;
+}
+
+.no-font-face #adminmenu div.wp-menu-name {
+ padding: 8px 12px;
+}
+
+.no-font-face.auto-fold #adminmenu .wp-menu-name {
+ margin-left: 0;
+}
+/* End no @font-face support */
+
+/* Sticky admin menu */
+.sticky-menu #adminmenuwrap {
+ position: fixed;
+}
+
+/* A new arrow */
+
+.wp-menu-arrow {
+ display: none !important;
+}
+
+ul#adminmenu a.wp-has-current-submenu {
+ position: relative;
+}
+
+ul#adminmenu a.wp-has-current-submenu:after,
+ul#adminmenu > li.current > a.current:after {
+ right: 0;
+ border: solid 8px transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-right-color: #f1f1f1;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.folded ul#adminmenu li:hover a.wp-has-current-submenu:after {
+ display: none;
+}
+
+.folded ul#adminmenu a.wp-has-current-submenu:after,
+.folded ul#adminmenu > li a.current:after {
+ border-width: 4px;
+ margin-top: -4px;
+}
+
+/* flyout menu arrow */
+#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after {
+ right: 0;
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-width: 8px;
+ top: 10px;
+ z-index: 10000;
+}
+
+.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after {
+ border-width: 4px;
+ margin-top: -4px;
+ top: 18px;
+}
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: #333;
+}
+
+#adminmenu li.menu-top:hover .wp-menu-image img,
+#adminmenu li.wp-has-current-submenu .wp-menu-image img {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+#adminmenu li.wp-menu-separator {
+ height: 5px;
+ padding: 0;
+ margin: 0 0 6px 0;
+ cursor: inherit;
+}
+
+/* @todo: is this even needed given that it's nested beneath the above li.wp-menu-separator? */
+#adminmenu div.separator {
+ height: 2px;
+ padding: 0;
+}
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #fff;
+ font-weight: 400;
+ font-size: 14px;
+ padding: 8px 4px 8px 11px;
+ margin: -7px 0px 4px;
+}
+
+#adminmenu li.current,
+.folded #adminmenu li.wp-menu-open {
+ border: 0 none;
+}
+
+#adminmenu .awaiting-mod,
+#adminmenu .update-plugins,
+#sidemenu li a span.update-plugins {
+ display: inline-block;
+ background-color: #d54e21;
+ color: #fff;
+ font-size: 9px;
+ line-height: 17px;
+ font-weight: 600;
+ margin: 1px 0 0 2px;
+ vertical-align: top;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+ z-index: 26;
+}
+
+#adminmenu li .awaiting-mod span,
+#adminmenu li span.update-plugins span,
+#sidemenu li a span.update-plugins span {
+ display: block;
+ padding: 0 6px;
+}
+
+#adminmenu li.current a .awaiting-mod,
+#adminmenu li a.wp-has-current-submenu .update-plugins {
+ background-color: #45bbe6;
+ color: #fff;
+}
+
+#adminmenu li span.count-0,
+#sidemenu li a .count-0 {
+ display: none;
+}
+
+#collapse-menu {
+ font-size: 13px;
+ line-height: 34px;
+ margin-top: 10px;
+ color: #aaa;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+#collapse-menu:hover,
+#collapse-menu:hover #collapse-button div:after {
+ color: #45bbe6;
+}
+
+.folded #collapse-menu span {
+ display: none;
+}
+
+#collapse-button,
+#collapse-button div {
+ width: 15px;
+ height: 15px;
+}
+
+#collapse-button {
+ float: left;
+ height: 15px;
+ margin: 10px 8px 10px 11px;
+ width: 15px;
+ -webkit-border-radius: 10px;
+ border-radius: 10px;
+}
+
+#wpwrap #collapse-button div {
+ padding: 0;
+}
+
+#collapse-button div:after {
+ content: '\f148';
+ display: block;
+ line-height: 15px;
+ left: -3px;
+ top: -3px;
+ color: #aaa;
+ font: normal 20px/1 'dashicons' !important;
+ speak: none;
+ margin: 0 auto;
+ padding: 0 !important;
+ position: relative;
+ text-align: center;
+ width: 20px;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.folded #collapse-button div:after,
+.rtl #collapse-button div:after {
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.rtl.folded #collapse-button div:after {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+}
+
+/**
+ * Toolbar menu toggle
+ */
+li#wp-admin-bar-menu-toggle {
+ display: none;
+}
+
+/* Hide-if-customize for items we can't add classes to */
+.customize-support #menu-appearance a[href="themes.php?page=custom-header"],
+.customize-support #menu-appearance a[href="themes.php?page=custom-background"] {
+ display: none;
+}
+
+/* Auto-folding of the admin menu */
+@media only screen and (max-width: 960px) {
+ .auto-fold #wpcontent,
+ .auto-fold #wpfooter {
+ margin-left: 36px;
+ }
+
+ .auto-fold #adminmenuback,
+ .auto-fold #adminmenuwrap,
+ .auto-fold #adminmenu,
+ .auto-fold #adminmenu li.menu-top {
+ width: 36px;
+ }
+
+ .auto-fold #adminmenu .wp-submenu.sub-open,
+ .auto-fold #adminmenu .opensub .wp-submenu,
+ .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,
+ .auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu,
+ .auto-fold #adminmenu a.menu-top:focus + .wp-submenu,
+ .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu {
+ top: 0px;
+ left: 36px;
+ }
+
+ .auto-fold #adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+ .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu {
+ position: absolute;
+ top: -1000em;
+ margin-right: -1px;
+ padding: 7px 0 8px;
+ z-index: 9999;
+ }
+
+ .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu {
+ min-width: 150px;
+ width: auto;
+ }
+
+ .auto-fold #adminmenu .wp-has-current-submenu li > a {
+ padding-right: 16px;
+ padding-left: 14px;
+ }
+
+
+ .auto-fold #adminmenu li.menu-top .wp-submenu > li > a {
+ padding-left: 12px;
+ }
+
+ .auto-fold #adminmenu .wp-menu-name {
+ display: none;
+ }
+
+ .auto-fold #adminmenu .wp-submenu-head {
+ display: block;
+ }
+
+ .auto-fold #adminmenu div.wp-menu-image {
+ height: 30px;
+ width: 34px;
+ position: absolute;
+ z-index: 25;
+ }
+
+ .auto-fold #adminmenu a.menu-top {
+ height: 34px;
+ }
+
+ .auto-fold #adminmenu li.wp-menu-open {
+ border: 0 none;
+ }
+
+ .auto-fold #adminmenu .wp-has-current-submenu.menu-top-last {
+ margin-bottom: 0;
+ }
+
+ .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after {
+ display: none;
+ }
+
+ .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after {
+ border-width: 4px;
+ margin-top: -4px;
+ top: 16px;
+ }
+
+ .auto-fold ul#adminmenu a.wp-has-current-submenu:after,
+ .auto-fold ul#adminmenu > li a.current:after {
+ border-width: 4px;
+ margin-top: -4px;
+ }
+
+ .auto-fold #adminmenu li.menu-top:hover,
+ .auto-fold #adminmenu li.opensub > a.menu-top,
+ .auto-fold #adminmenu li > a.menu-top:focus {
+ z-index: 10000;
+ }
+
+ .auto-fold #collapse-menu span {
+ display: none;
+ }
+
+ .auto-fold #collapse-button div {
+ background: none;
+ }
+
+ .auto-fold #collapse-button div:after {
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+ }
+
+ .rtl.auto-fold #collapse-button div:after {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+ }
+
+}
+
+@media screen and ( max-width: 782px ) {
+ .auto-fold #wpcontent {
+ position: relative;
+ margin-left: 0;
+ padding-left: 10px;
+ }
+
+ .sticky-menu #adminmenuwrap {
+ position: relative;
+ z-index: auto;
+ top: 0;
+ }
+
+ /* Sidebar Adjustments */
+ .auto-fold #adminmenu,
+ .auto-fold #adminmenuback,
+ .auto-fold #adminmenuwrap {
+ position: absolute;
+ width: 190px;
+ z-index: 100;
+ }
+
+ .auto-fold #adminmenuback,
+ .auto-fold #adminmenuwrap {
+ display: none;
+ }
+
+ .auto-fold .wp-responsive-open #adminmenuback,
+ .auto-fold .wp-responsive-open #adminmenuwrap {
+ display: block;
+ }
+
+ .auto-fold #adminmenu li.menu-top {
+ width: 100%;
+ }
+
+ /* Resize the admin menu items to a comfortable touch size */
+ .auto-fold #adminmenu li a {
+ font-size: 16px;
+ padding: 5px;
+ }
+
+ .auto-fold #adminmenu li.menu-top .wp-submenu > li > a {
+ padding: 10px 10px 10px 20px;
+ }
+
+ /* Restore the menu names */
+ .auto-fold #adminmenu .wp-menu-name {
+ display: block;
+ margin-left: 35px;
+ }
+
+ /* Switch the arrow side */
+ .auto-fold ul#adminmenu a.wp-has-current-submenu:after,
+ .auto-fold ul#adminmenu > li.current > a.current:after {
+ border-width: 8px;
+ margin-top: -8px;
+ }
+
+ .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after {
+ display: none;
+ }
+
+ /* Make the submenus appear correctly when tapped. */
+ #adminmenu .wp-submenu {
+ position: relative;
+ display: none;
+ }
+
+ .auto-fold #adminmenu .selected .wp-submenu,
+ .auto-fold #adminmenu .wp-menu-open .wp-submenu {
+ position: relative;
+ display: block;
+ top: 0;
+ left: -1px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ .auto-fold #adminmenu .selected .wp-submenu:after,
+ .auto-fold #adminmenu .wp-menu-open .wp-submenu:after {
+ display: none;
+ }
+
+ .auto-fold #adminmenu .opensub .wp-submenu {
+ display: none;
+ }
+
+ .auto-fold #adminmenu .selected .wp-submenu {
+ display: block;
+ }
+
+ .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after {
+ display: block;
+ }
+
+ .auto-fold #adminmenu a.menu-top:focus + .wp-submenu,
+ .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu {
+ position: relative;
+ left: -1px;
+ right: 0;
+ top: 0;
+ }
+
+ /* Remove submenu headers and adjust sub meu*/
+ #adminmenu .wp-submenu .wp-submenu-head {
+ display: none;
+ }
+
+ /* Toolbar menu toggle */
+ #wp-responsive-toggle {
+ position: fixed;
+ top: 5px;
+ left: 4px;
+ padding-right: 10px;
+ z-index: 99999;
+ border: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ #wpadminbar #wp-admin-bar-menu-toggle a {
+ display: block;
+ padding: 0;
+ overflow: hidden;
+ outline: none;
+ text-decoration: none;
+ border: 1px solid transparent;
+ background: none;
+ height: 44px;
+ margin-left: -1px;
+ }
+
+ .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #333;
+ }
+
+ li#wp-admin-bar-menu-toggle {
+ display: block;
+ }
+
+ #wpadminbar #wp-admin-bar-menu-toggle a:hover {
+ border: 1px solid transparent;
+ }
+
+ #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before {
+ content: '\f228';
+ display: inline-block;
+ float: left;
+ font: normal 40px/45px 'Dashicons';
+ vertical-align: middle;
+ outline: none;
+ margin: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ height: 44px;
+ width: 50px;
+ padding: 0;
+ border: none;
+ text-align: center;
+ text-decoration: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+}
+
+/* Smartphone */
+@media screen and (max-width: 600px) {
+ #adminmenuwrap,
+ #adminmenuback {
+ display: none;
+ }
+
+ .wp-responsive-open #adminmenuwrap,
+ .wp-responsive-open #adminmenuback {
+ display: block;
+ }
+
+ .auto-fold #adminmenu {
+ top: 46px;
+ }
+}
+
diff --git a/wp-admin/css/color-picker-rtl.css b/wp-admin/css/color-picker-rtl.css
new file mode 100644
index 0000000..257ad53
--- /dev/null
+++ b/wp-admin/css/color-picker-rtl.css
@@ -0,0 +1,127 @@
+.wp-color-picker {
+ width: 80px;
+}
+
+.wp-picker-container .hidden {
+ display: none;
+}
+
+.wp-color-result {
+ background-color: #f7f7f7;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ cursor: pointer;
+ display: inline-block;
+ height: 22px;
+ margin: 0 0px 6px 6px;
+ position: relative;
+ top: 1px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ vertical-align: bottom;
+ display: inline-block;
+ padding-right: 30px;
+ -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.08);
+ box-shadow: 0 1px 0 rgba(0,0,0,.08);
+}
+
+.wp-color-result:after {
+ background: #f7f7f7;
+ -webkit-border-radius: 2px 0 0 2px;
+ border-radius: 2px 0 0 2px;
+ border-right: 1px solid #ccc;
+ color: #555;
+ content: attr( title );
+ display: block;
+ font-size: 11px;
+ line-height: 22px;
+ padding: 0 6px;
+ position: relative;
+ left: 0;
+ text-align: center;
+ top: 0;
+ -webkit-box-shadow: inset 0 1px 0 #fff;
+ box-shadow: inset 0 1px 0 #fff;
+}
+
+.wp-color-result:hover,
+.wp-color-result:focus {
+ background: #fafafa;
+ border-color: #999;
+ color: #222;
+}
+
+.wp-color-result:hover:after,
+.wp-color-result:focus:after {
+ color: #222;
+ border-color: #aaa;
+ border-right: 1px solid #999;
+}
+
+.wp-color-result {
+ top: 0;
+}
+
+.wp-color-result.wp-picker-open:after {
+ content: attr( data-current );
+}
+
+.wp-picker-container, .wp-picker-container:active {
+ display: inline-block;
+ outline: 0;
+}
+
+.wp-color-result:focus {
+ -webkit-box-shadow:
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba( 30, 140, 190, 0.8 );
+ box-shadow:
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba( 30, 140, 190, 0.8 );
+}
+
+.wp-picker-open + .wp-picker-input-wrap {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.wp-picker-container .button {
+ margin-right: 6px;
+}
+
+.wp-picker-container .iris-square-slider .ui-slider-handle:focus {
+ background-color: #555
+}
+
+.wp-picker-container .iris-picker {
+ -webkit-border-radius: 0;
+ border-radius: 0;
+ border-color: #dfdfdf;
+ margin-top: 6px;
+}
+
+.wp-picker-container input[type="text"].wp-color-picker {
+ width: 65px;
+ font-size: 12px;
+ font-family: monospace;
+ text-align: center;
+ line-height: 16px;
+ margin: 0;
+}
+
+.wp-picker-container input[type="text"].wp-color-picker:focus::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.wp-picker-container input[type="text"].wp-color-picker:-moz-placeholder {
+ color: #999;
+}
+
+.wp-picker-container input[type="text"].iris-error {
+ background-color: #ffebe8;
+ border-color: #c00;
+ color: #000;
+}
diff --git a/wp-admin/css/color-picker-rtl.min.css b/wp-admin/css/color-picker-rtl.min.css
new file mode 100644
index 0000000..ee70a9d
--- /dev/null
+++ b/wp-admin/css/color-picker-rtl.min.css
@@ -0,0 +1 @@
+.wp-color-picker{width:80px}.wp-picker-container .hidden{display:none}.wp-color-result{background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;cursor:pointer;height:22px;margin:0 0 6px 6px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:bottom;display:inline-block;padding-right:30px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.08);box-shadow:0 1px 0 rgba(0,0,0,.08)}.wp-color-result:after{background:#f7f7f7;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px;border-right:1px solid #ccc;color:#555;content:attr(title);display:block;font-size:11px;line-height:22px;padding:0 6px;position:relative;left:0;text-align:center;top:0;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.wp-color-result:focus,.wp-color-result:hover{background:#fafafa;border-color:#999;color:#222}.wp-color-result:focus:after,.wp-color-result:hover:after{color:#222;border-color:#aaa;border-right:1px solid #999}.wp-color-result{top:0}.wp-color-result.wp-picker-open:after{content:attr(data-current)}.wp-picker-container,.wp-picker-container:active{display:inline-block;outline:0}.wp-color-result:focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-picker-open+.wp-picker-input-wrap{display:inline-block;vertical-align:top}.wp-picker-container .button{margin-right:6px}.wp-picker-container .iris-square-slider .ui-slider-handle:focus{background-color:#555}.wp-picker-container .iris-picker{-webkit-border-radius:0;border-radius:0;border-color:#dfdfdf;margin-top:6px}.wp-picker-container input[type=text].wp-color-picker{width:65px;font-size:12px;font-family:monospace;text-align:center;line-height:16px;margin:0}.wp-picker-container input[type=text].wp-color-picker:focus::-webkit-input-placeholder{color:transparent}.wp-picker-container input[type=text].wp-color-picker:-moz-placeholder{color:#999}.wp-picker-container input[type=text].iris-error{background-color:#ffebe8;border-color:#c00;color:#000}
\ No newline at end of file
diff --git a/wp-admin/css/color-picker.css b/wp-admin/css/color-picker.css
new file mode 100644
index 0000000..4229402
--- /dev/null
+++ b/wp-admin/css/color-picker.css
@@ -0,0 +1,127 @@
+.wp-color-picker {
+ width: 80px;
+}
+
+.wp-picker-container .hidden {
+ display: none;
+}
+
+.wp-color-result {
+ background-color: #f7f7f7;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ cursor: pointer;
+ display: inline-block;
+ height: 22px;
+ margin: 0 6px 6px 0px;
+ position: relative;
+ top: 1px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ vertical-align: bottom;
+ display: inline-block;
+ padding-left: 30px;
+ -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.08);
+ box-shadow: 0 1px 0 rgba(0,0,0,.08);
+}
+
+.wp-color-result:after {
+ background: #f7f7f7;
+ -webkit-border-radius: 0 2px 2px 0;
+ border-radius: 0 2px 2px 0;
+ border-left: 1px solid #ccc;
+ color: #555;
+ content: attr( title );
+ display: block;
+ font-size: 11px;
+ line-height: 22px;
+ padding: 0 6px;
+ position: relative;
+ right: 0;
+ text-align: center;
+ top: 0;
+ -webkit-box-shadow: inset 0 1px 0 #fff;
+ box-shadow: inset 0 1px 0 #fff;
+}
+
+.wp-color-result:hover,
+.wp-color-result:focus {
+ background: #fafafa;
+ border-color: #999;
+ color: #222;
+}
+
+.wp-color-result:hover:after,
+.wp-color-result:focus:after {
+ color: #222;
+ border-color: #aaa;
+ border-left: 1px solid #999;
+}
+
+.wp-color-result {
+ top: 0;
+}
+
+.wp-color-result.wp-picker-open:after {
+ content: attr( data-current );
+}
+
+.wp-picker-container, .wp-picker-container:active {
+ display: inline-block;
+ outline: 0;
+}
+
+.wp-color-result:focus {
+ -webkit-box-shadow:
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba( 30, 140, 190, 0.8 );
+ box-shadow:
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba( 30, 140, 190, 0.8 );
+}
+
+.wp-picker-open + .wp-picker-input-wrap {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.wp-picker-container .button {
+ margin-left: 6px;
+}
+
+.wp-picker-container .iris-square-slider .ui-slider-handle:focus {
+ background-color: #555
+}
+
+.wp-picker-container .iris-picker {
+ -webkit-border-radius: 0;
+ border-radius: 0;
+ border-color: #dfdfdf;
+ margin-top: 6px;
+}
+
+.wp-picker-container input[type="text"].wp-color-picker {
+ width: 65px;
+ font-size: 12px;
+ font-family: monospace;
+ text-align: center;
+ line-height: 16px;
+ margin: 0;
+}
+
+.wp-picker-container input[type="text"].wp-color-picker:focus::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.wp-picker-container input[type="text"].wp-color-picker:-moz-placeholder {
+ color: #999;
+}
+
+.wp-picker-container input[type="text"].iris-error {
+ background-color: #ffebe8;
+ border-color: #c00;
+ color: #000;
+}
diff --git a/wp-admin/css/color-picker.min.css b/wp-admin/css/color-picker.min.css
new file mode 100644
index 0000000..362cb2a
--- /dev/null
+++ b/wp-admin/css/color-picker.min.css
@@ -0,0 +1 @@
+.wp-color-picker{width:80px}.wp-picker-container .hidden{display:none}.wp-color-result{background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;cursor:pointer;height:22px;margin:0 6px 6px 0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:bottom;display:inline-block;padding-left:30px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.08);box-shadow:0 1px 0 rgba(0,0,0,.08)}.wp-color-result:after{background:#f7f7f7;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;border-left:1px solid #ccc;color:#555;content:attr(title);display:block;font-size:11px;line-height:22px;padding:0 6px;position:relative;right:0;text-align:center;top:0;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.wp-color-result:focus,.wp-color-result:hover{background:#fafafa;border-color:#999;color:#222}.wp-color-result:focus:after,.wp-color-result:hover:after{color:#222;border-color:#aaa;border-left:1px solid #999}.wp-color-result{top:0}.wp-color-result.wp-picker-open:after{content:attr(data-current)}.wp-picker-container,.wp-picker-container:active{display:inline-block;outline:0}.wp-color-result:focus{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-picker-open+.wp-picker-input-wrap{display:inline-block;vertical-align:top}.wp-picker-container .button{margin-left:6px}.wp-picker-container .iris-square-slider .ui-slider-handle:focus{background-color:#555}.wp-picker-container .iris-picker{-webkit-border-radius:0;border-radius:0;border-color:#dfdfdf;margin-top:6px}.wp-picker-container input[type=text].wp-color-picker{width:65px;font-size:12px;font-family:monospace;text-align:center;line-height:16px;margin:0}.wp-picker-container input[type=text].wp-color-picker:focus::-webkit-input-placeholder{color:transparent}.wp-picker-container input[type=text].wp-color-picker:-moz-placeholder{color:#999}.wp-picker-container input[type=text].iris-error{background-color:#ffebe8;border-color:#c00;color:#000}
\ No newline at end of file
diff --git a/wp-admin/css/colors/_admin.scss b/wp-admin/css/colors/_admin.scss
new file mode 100644
index 0000000..d83ff23
--- /dev/null
+++ b/wp-admin/css/colors/_admin.scss
@@ -0,0 +1,527 @@
+
+@import 'variables';
+@import 'mixins';
+
+
+html {
+ background: $body-background;
+}
+
+
+/* Links */
+
+a {
+ color: $link;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: $link-focus;
+ }
+}
+
+#media-upload a.del-link:hover,
+div.dashboard-widget-submit input:hover,
+.subsubsub a:hover,
+.subsubsub a.current:hover {
+ color: $link-focus;
+}
+
+
+/* Forms */
+
+input[type=checkbox]:checked:before {
+ color: $form-checked;
+}
+
+input[type=radio]:checked:before {
+ background: $form-checked;
+}
+
+.wp-core-ui input[type="reset"]:hover,
+.wp-core-ui input[type="reset"]:active {
+ color: $link-focus;
+}
+
+
+/* Core UI */
+
+.wp-core-ui {
+ .button-primary {
+ @include button( $button-color );
+ }
+
+ .wp-ui-primary {
+ color: $text-color;
+ background-color: $base-color;
+ }
+ .wp-ui-text-primary {
+ color: $base-color;
+ }
+
+ .wp-ui-highlight {
+ color: $menu-highlight-text;
+ background-color: $menu-highlight-background;
+ }
+ .wp-ui-text-highlight {
+ color: $menu-highlight-background;
+ }
+
+ .wp-ui-notification {
+ color: $menu-bubble-text;
+ background-color: $menu-bubble-background;
+ }
+ .wp-ui-text-notification {
+ color: $menu-bubble-background;
+ }
+
+ .wp-ui-text-icon {
+ color: $menu-icon;
+ }
+}
+
+
+/* List tables */
+
+.wrap .add-new-h2:hover,
+#add-new-comment a:hover,
+.tablenav .tablenav-pages a:hover,
+.tablenav .tablenav-pages a:focus {
+ color: $menu-text;
+ background-color: $menu-background;
+}
+
+.view-switch a.current:before {
+ color: $menu-background;
+}
+
+.view-switch a:hover:before {
+ color: $menu-bubble-background;
+}
+
+.post-com-count:hover:after {
+ border-top-color: $menu-background;
+}
+.post-com-count:hover span {
+ color: $menu-text;
+ background-color: $menu-background;
+}
+
+strong .post-com-count:after {
+ border-top-color: $menu-bubble-background;
+}
+strong .post-com-count span {
+ background-color: $menu-bubble-background;
+}
+
+
+/* Admin Menu */
+
+#adminmenuback,
+#adminmenuwrap,
+#adminmenu {
+ background: $menu-background;
+}
+
+#adminmenu a {
+ color: $menu-text;
+}
+
+#adminmenu div.wp-menu-image:before {
+ color: $menu-icon;
+}
+
+#adminmenu a:hover,
+#adminmenu li.menu-top:hover,
+#adminmenu li.opensub > a.menu-top,
+#adminmenu li > a.menu-top:focus {
+ color: $menu-highlight-text;
+ background-color: $menu-highlight-background;
+}
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before,
+#adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: $menu-highlight-icon;
+}
+
+
+/* Active tabs use a bottom border color that matches the page background color. */
+
+.about-wrap h2 .nav-tab-active,
+.nav-tab-active,
+.nav-tab-active:hover {
+ background-color: $body-background;
+ border-bottom-color: $body-background;
+}
+
+
+/* Admin Menu: submenu */
+
+#adminmenu .wp-submenu,
+#adminmenu .wp-has-current-submenu .wp-submenu,
+#adminmenu .wp-has-current-submenu.opensub .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu,
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: $menu-submenu-background;
+}
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: $menu-submenu-background;
+}
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: $menu-submenu-text;
+}
+
+#adminmenu .wp-submenu a,
+#adminmenu .wp-has-current-submenu .wp-submenu a,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu a,
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a,
+#adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: $menu-submenu-text;
+
+ &:focus, &:hover {
+ color: $menu-submenu-focus-text;
+ }
+}
+
+
+/* Admin Menu: current */
+
+#adminmenu .wp-submenu li.current a,
+#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a,
+#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: $menu-submenu-current-text;
+
+ &:hover, &:focus {
+ color: $menu-submenu-focus-text;
+ }
+}
+
+ul#adminmenu a.wp-has-current-submenu:after,
+ul#adminmenu > li.current > a.current:after {
+ border-right-color: $body-background;
+}
+
+#adminmenu li.current a.menu-top,
+#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,
+#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,
+.folded #adminmenu li.current.menu-top {
+ color: $menu-current-text;
+ background: $menu-current-background;
+}
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: $menu-current-icon;
+}
+
+
+/* Admin Menu: bubble */
+
+#adminmenu .awaiting-mod,
+#adminmenu .update-plugins {
+ color: $menu-bubble-text;
+ background: $menu-bubble-background;
+}
+
+#adminmenu li.current a .awaiting-mod,
+#adminmenu li a.wp-has-current-submenu .update-plugins,
+#adminmenu li:hover a .awaiting-mod,
+#adminmenu li.menu-top:hover > a .update-plugins {
+ color: $menu-bubble-current-text;
+ background: $menu-bubble-current-background;
+}
+
+
+/* Admin Menu: collapse button */
+
+#collapse-menu {
+ color: $menu-collapse-text;
+}
+
+#collapse-menu:hover {
+ color: $menu-collapse-focus-text;
+}
+
+#collapse-button div:after {
+ color: $menu-collapse-icon;
+}
+
+#collapse-menu:hover #collapse-button div:after {
+ color: $menu-collapse-focus-icon;
+}
+
+
+/* Admin Bar */
+
+#wpadminbar {
+ color: $menu-text;
+ background: $menu-background;
+}
+
+#wpadminbar .ab-item,
+#wpadminbar a.ab-item,
+#wpadminbar > #wp-toolbar span.ab-label,
+#wpadminbar > #wp-toolbar span.noticon {
+ color: $menu-text;
+}
+
+#wpadminbar .ab-icon,
+#wpadminbar .ab-icon:before,
+#wpadminbar .ab-item:before,
+#wpadminbar .ab-item:after {
+ color: $menu-icon;
+}
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item,
+#wpadminbar .ab-top-menu > li.hover > .ab-item,
+#wpadminbar .ab-top-menu > li > .ab-item:focus,
+#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus,
+#wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item,
+#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: $menu-submenu-focus-text;
+ background: $menu-submenu-background;
+}
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label,
+#wpadminbar > #wp-toolbar li.hover span.ab-label,
+#wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: $menu-submenu-focus-text;
+}
+
+#wpadminbar li:hover .ab-icon:before,
+#wpadminbar li:hover .ab-item:before,
+#wpadminbar li:hover .ab-item:after,
+#wpadminbar li:hover #adminbarsearch:before {
+ color: $menu-highlight-icon;
+}
+
+
+/* Admin Bar: submenu */
+
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: $menu-submenu-background;
+}
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: $menu-submenu-background-alt;
+}
+
+#wpadminbar .ab-submenu .ab-item,
+#wpadminbar .quicklinks .menupop ul li a,
+#wpadminbar .quicklinks .menupop.hover ul li a,
+#wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: $menu-submenu-text;
+}
+
+#wpadminbar .quicklinks li .blavatar,
+#wpadminbar .menupop .menupop > .ab-item:before {
+ color: $menu-icon;
+}
+
+#wpadminbar .quicklinks .menupop ul li a:hover,
+#wpadminbar .quicklinks .menupop ul li a:focus,
+#wpadminbar .quicklinks .menupop ul li a:hover strong,
+#wpadminbar .quicklinks .menupop ul li a:focus strong,
+#wpadminbar .quicklinks .menupop.hover ul li a:hover,
+#wpadminbar .quicklinks .menupop.hover ul li a:focus,
+#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,
+#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,
+#wpadminbar li:hover .ab-icon:before,
+#wpadminbar li:hover .ab-item:before,
+#wpadminbar li a:focus .ab-icon:before,
+#wpadminbar li .ab-item:focus:before,
+#wpadminbar li.hover .ab-icon:before,
+#wpadminbar li.hover .ab-item:before,
+#wpadminbar li:hover .ab-item:after,
+#wpadminbar li.hover .ab-item:after,
+#wpadminbar li:hover #adminbarsearch:before {
+ color: $menu-submenu-focus-text;
+}
+
+#wpadminbar .quicklinks li a:hover .blavatar,
+#wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: $menu-submenu-focus-text;
+}
+
+
+/* Admin Bar: search */
+
+#wpadminbar #adminbarsearch:before {
+ color: $menu-icon;
+}
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: $menu-text;
+ background: $adminbar-input-background;
+}
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { color: $menu-text; opacity: .7; }
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { color: $menu-text; opacity: .7; }
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { color: $menu-text; opacity: .7; }
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { color: $menu-text; opacity: .7; }
+
+
+/* Admin Bar: my account */
+
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: $adminbar-avatar-frame;
+ background-color: $adminbar-avatar-frame;
+}
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: $menu-text;
+}
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: $menu-submenu-focus-text;
+}
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: $menu-submenu-text;
+}
+
+
+/* Pointers */
+
+.wp-pointer .wp-pointer-content h3 {
+ background-color: $highlight-color;
+ border-color: darken( $highlight-color, 5% );
+}
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: $highlight-color;
+}
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow,
+.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,
+.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,
+.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: $highlight-color;
+}
+
+
+/* Media */
+
+.media-item .bar,
+.media-progress-bar div {
+ background-color: $highlight-color;
+}
+
+.details.attachment {
+ box-shadow:
+ inset 0 0 0 3px #fff,
+ inset 0 0 0 7px $highlight-color;
+}
+
+.attachment.details .check {
+ background-color: $highlight-color;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px $highlight-color;
+}
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow:
+ 0px 0px 0px 1px #fff,
+ 0px 0px 0px 3px $highlight-color;
+ box-shadow:
+ 0px 0px 0px 1px #fff,
+ 0px 0px 0px 3px $highlight-color;
+}
+
+
+/* Themes */
+
+.theme-browser .theme.active .theme-name,
+.theme-browser .theme.add-new-theme:hover:after {
+ background: $highlight-color;
+}
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: $highlight-color;
+}
+
+.theme-section.current,
+.theme-filter.current {
+ border-bottom-color: $menu-background;
+}
+
+body.more-filters-opened .more-filters {
+ color: $menu-text;
+ background-color: $menu-background;
+}
+
+body.more-filters-opened .more-filters:before {
+ color: $menu-text;
+}
+
+body.more-filters-opened .more-filters:hover,
+body.more-filters-opened .more-filters:focus {
+ background-color: $menu-highlight-background;
+ color: $menu-highlight-text;
+}
+
+body.more-filters-opened .more-filters:hover:before,
+body.more-filters-opened .more-filters:focus:before {
+ color: $menu-highlight-text;
+}
+
+/* Widgets */
+
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: $menu-highlight-background;
+ color: $menu-highlight-text;
+}
+
+.widgets-chooser li.widgets-chooser-selected:before,
+.widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: $menu-highlight-text;
+}
+
+/* Customize */
+
+#customize-theme-controls .widget-area-select .selected {
+ background-color: $menu-highlight-background;
+ color: $menu-highlight-text;
+}
+
+/* jQuery UI Slider */
+
+.wp-slider .ui-slider-handle,
+.wp-slider .ui-slider-handle.ui-state-hover,
+.wp-slider .ui-slider-handle.focus {
+ background: $button-color;
+ border-color: darken( $button-color, 10% );
+ box-shadow: inset 0 1px 0 lighten( $button-color, 15% ), 0 1px 0 rgba(0,0,0,.15);
+}
+
+/* Thickbox: Plugin information */
+
+#sidemenu a.current {
+ background: $body-background;
+ border-bottom-color: $body-background;
+}
+
+#plugin-information .action-button {
+ background: $button-color;
+}
+
+/* Responsive Component */
+
+div#wp-responsive-toggle a:before {
+ color: $menu-icon;
+}
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ // ToDo: make inset border
+ border-color: transparent;
+ background: $menu-highlight-background;
+}
+
+.star-rating .star {
+ color: $highlight-color;
+}
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: $menu-submenu-background;
+}
diff --git a/wp-admin/css/colors/_mixins.scss b/wp-admin/css/colors/_mixins.scss
new file mode 100644
index 0000000..9c196e0
--- /dev/null
+++ b/wp-admin/css/colors/_mixins.scss
@@ -0,0 +1,43 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+@mixin button( $button-color, $text-color: white ) {
+ background: $button-color;
+ border-color: darken( $button-color, 10% );
+ color: $text-color;
+ box-shadow: inset 0 1px 0 lighten( $button-color, 15% ), 0 1px 0 rgba(0,0,0,.15);
+
+ &:hover,
+ &:focus {
+ background: darken( $button-color, 5% );
+ border-color: darken( $button-color, 15% );
+ color: $text-color;
+ box-shadow: inset 0 1px 0 lighten( $button-color, 10% );
+ }
+
+ &:focus {
+ box-shadow: inset 0 1px 0 lighten( $button-color, 10% ),
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba( 30, 140, 190, .8 );
+ }
+
+ &:active {
+ background: darken( $button-color, 10% );
+ border-color: darken( $button-color, 15% );
+ color: $text-color;
+ box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ),
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba( 30, 140, 190, .8 );
+ }
+
+ &[disabled],
+ &:disabled,
+ &.button-primary-disabled,
+ &.disabled {
+ color: hsl( hue( $button-color ), 10%, 80% ) !important;
+ background: darken( $button-color, 8% ) !important;
+ border-color: darken( $button-color, 15% ) !important;
+ text-shadow: none !important;
+ }
+}
diff --git a/wp-admin/css/colors/_variables.scss b/wp-admin/css/colors/_variables.scss
new file mode 100644
index 0000000..05e46ba
--- /dev/null
+++ b/wp-admin/css/colors/_variables.scss
@@ -0,0 +1,58 @@
+// assign default value to all undefined variables
+
+
+// core variables
+
+$text-color: #fff !default;
+$base-color: #222 !default;
+$icon-color: hsl( hue( $base-color ), 7%, 95% ) !default;
+$highlight-color: #0074a2 !default;
+$notification-color: #d54e21 !default;
+
+
+// global
+
+$body-background: #f1f1f1 !default;
+
+$link: #0074a2 !default;
+$link-focus: lighten( $link, 10% ) !default;
+
+$button-color: $highlight-color !default;
+$form-checked: $highlight-color !default;
+
+
+// admin menu & admin-bar
+
+$menu-text: $text-color !default;
+$menu-icon: $icon-color !default;
+$menu-background: $base-color !default;
+
+$menu-highlight-text: $text-color !default;
+$menu-highlight-icon: $text-color !default;
+$menu-highlight-background: $highlight-color !default;
+
+$menu-current-text: $menu-highlight-text !default;
+$menu-current-icon: $menu-highlight-icon !default;
+$menu-current-background: $menu-highlight-background !default;
+
+$menu-submenu-text: mix( $base-color, $text-color, 30% ) !default;
+$menu-submenu-background: darken( $base-color, 7% ) !default;
+$menu-submenu-background-alt: desaturate( lighten( $menu-background, 7% ), 7% ) !default;
+
+$menu-submenu-focus-text: $highlight-color !default;
+$menu-submenu-current-text: $text-color !default;
+
+$menu-bubble-text: $text-color !default;
+$menu-bubble-background: $notification-color !default;
+$menu-bubble-current-text: $text-color !default;
+$menu-bubble-current-background: $menu-submenu-background !default;
+
+$menu-collapse-text: $menu-icon !default;
+$menu-collapse-icon: $menu-icon !default;
+$menu-collapse-focus-text: $text-color !default;
+$menu-collapse-focus-icon: $menu-highlight-icon !default;
+
+$adminbar-avatar-frame: lighten( $menu-background, 7% ) !default;
+$adminbar-input-background: lighten( $menu-background, 7% ) !default;
+
+$menu-customizer-text: mix( $base-color, $text-color, 40% ) !default;
diff --git a/wp-admin/css/colors/blue/colors-rtl.css b/wp-admin/css/colors/blue/colors-rtl.css
new file mode 100644
index 0000000..37ea16a
--- /dev/null
+++ b/wp-admin/css/colors/blue/colors-rtl.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #096484; }
+
+input[type=radio]:checked:before {
+ background: #096484; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #e1a948;
+ border-color: #d39323;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #dd9f32;
+ border-color: #bd831f;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e8be74;
+ box-shadow: inset 0 1px 0 #e8be74; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #e8be74, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #e8be74, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #d39323;
+ border-color: #bd831f;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #d1cdc7 !important;
+ background: #db9925 !important;
+ border-color: #bd831f !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #52accc; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #52accc; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #096484; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #096484; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #e1a948; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #e1a948; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #e5f8ff; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #52accc; }
+
+.view-switch a.current:before {
+ color: #52accc; }
+
+.view-switch a:hover:before {
+ color: #e1a948; }
+
+.post-com-count:hover:after {
+ border-top-color: #52accc; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #52accc; }
+
+strong .post-com-count:after {
+ border-top-color: #e1a948; }
+
+strong .post-com-count span {
+ background-color: #e1a948; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #52accc; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #e5f8ff; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #096484; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #4796b3; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-left-color: #4796b3; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #e2ecf1; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #e2ecf1; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #fff; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #fff; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-left-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #096484; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #e1a948; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #4796b3; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #e5f8ff; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #e5f8ff; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #52accc; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #e5f8ff; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #fff;
+ background: #4796b3; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #fff; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #4796b3; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #74b6ce; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #e2ecf1; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #e5f8ff; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #fff; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #e5f8ff; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #6eb9d4; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #6eb9d4;
+ background-color: #6eb9d4; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #e2ecf1; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #096484;
+ border-color: #07526c; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #096484; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #096484; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #096484; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #096484;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #096484; }
+
+.attachment.details .check {
+ background-color: #096484;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #096484;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #096484; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #096484; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #096484; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #52accc; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #52accc; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #096484;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #096484;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #096484;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #e1a948;
+ border-color: #d39323;
+ -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #e1a948; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #e5f8ff; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #096484; }
+
+.star-rating .star {
+ color: #096484; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #4796b3; }
diff --git a/wp-admin/css/colors/blue/colors-rtl.min.css b/wp-admin/css/colors/blue/colors-rtl.min.css
new file mode 100644
index 0000000..5afa920
--- /dev/null
+++ b/wp-admin/css/colors/blue/colors-rtl.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#096484}input[type=radio]:checked:before{background:#096484}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#dd9f32;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74;box-shadow:inset 0 1px 0 #e8be74}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #e8be74,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #e8be74,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#d39323;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cdc7!important;background:#db9925!important;border-color:#bd831f!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#52accc}.wp-core-ui .wp-ui-text-primary{color:#52accc}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#096484}.wp-core-ui .wp-ui-text-highlight{color:#096484}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#e1a948}.wp-core-ui .wp-ui-text-notification{color:#e1a948}.wp-core-ui .wp-ui-text-icon{color:#e5f8ff}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#52accc}.view-switch a.current:before{color:#52accc}.view-switch a:hover:before{color:#e1a948}.post-com-count:hover:after{border-top-color:#52accc}.post-com-count:hover span{color:#fff;background-color:#52accc}strong .post-com-count:after{border-top-color:#e1a948}strong .post-com-count span{background-color:#e1a948}#adminmenu,#adminmenuback,#adminmenuwrap{background:#52accc}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#e5f8ff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#096484}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#4796b3}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#4796b3}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#e2ecf1}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#fff}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#096484}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#e1a948}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#4796b3}#collapse-menu{color:#e5f8ff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#e5f8ff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#52accc}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#e5f8ff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#fff;background:#4796b3}#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4796b3}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#74b6ce}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#e2ecf1}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#e5f8ff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#fff}#wpadminbar #adminbarsearch:before{color:#e5f8ff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6eb9d4}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6eb9d4;background-color:#6eb9d4}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info .username{color:#e2ecf1}.wp-pointer .wp-pointer-content h3{background-color:#096484;border-color:#07526c}.wp-pointer .wp-pointer-content h3:before{color:#096484}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#096484}.media-item .bar,.media-progress-bar div{background-color:#096484}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #096484;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #096484}.attachment.details .check{background-color:#096484;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #096484;box-shadow:0 0 0 1px #fff,0 0 0 2px #096484}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #096484;box-shadow:0 0 0 1px #fff,0 0 0 3px #096484}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#096484}.theme-browser .theme.add-new-theme:hover span:after{color:#096484}.theme-filter.current,.theme-section.current{border-bottom-color:#52accc}body.more-filters-opened .more-filters{color:#fff;background-color:#52accc}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#096484;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#096484;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#096484;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#e1a948;border-color:#d39323;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e1a948}div#wp-responsive-toggle a:before{color:#e5f8ff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#096484}.star-rating .star{color:#096484}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4796b3}
\ No newline at end of file
diff --git a/wp-admin/css/colors/blue/colors.css b/wp-admin/css/colors/blue/colors.css
new file mode 100644
index 0000000..09fbaeb
--- /dev/null
+++ b/wp-admin/css/colors/blue/colors.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #096484; }
+
+input[type=radio]:checked:before {
+ background: #096484; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #e1a948;
+ border-color: #d39323;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #dd9f32;
+ border-color: #bd831f;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e8be74;
+ box-shadow: inset 0 1px 0 #e8be74; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #e8be74, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #e8be74, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #d39323;
+ border-color: #bd831f;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #d1cdc7 !important;
+ background: #db9925 !important;
+ border-color: #bd831f !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #52accc; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #52accc; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #096484; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #096484; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #e1a948; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #e1a948; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #e5f8ff; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #52accc; }
+
+.view-switch a.current:before {
+ color: #52accc; }
+
+.view-switch a:hover:before {
+ color: #e1a948; }
+
+.post-com-count:hover:after {
+ border-top-color: #52accc; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #52accc; }
+
+strong .post-com-count:after {
+ border-top-color: #e1a948; }
+
+strong .post-com-count span {
+ background-color: #e1a948; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #52accc; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #e5f8ff; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #096484; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #4796b3; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: #4796b3; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #e2ecf1; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #e2ecf1; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #fff; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #fff; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-right-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #096484; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #e1a948; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #4796b3; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #e5f8ff; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #e5f8ff; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #52accc; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #e5f8ff; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #fff;
+ background: #4796b3; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #fff; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #4796b3; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #74b6ce; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #e2ecf1; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #e5f8ff; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #fff; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #e5f8ff; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #6eb9d4; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #6eb9d4;
+ background-color: #6eb9d4; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #e2ecf1; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #096484;
+ border-color: #07526c; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #096484; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #096484; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #096484; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #096484;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #096484; }
+
+.attachment.details .check {
+ background-color: #096484;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #096484;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #096484; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #096484; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #096484; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #52accc; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #52accc; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #096484;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #096484;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #096484;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #e1a948;
+ border-color: #d39323;
+ -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #e1a948; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #e5f8ff; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #096484; }
+
+.star-rating .star {
+ color: #096484; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #4796b3; }
diff --git a/wp-admin/css/colors/blue/colors.min.css b/wp-admin/css/colors/blue/colors.min.css
new file mode 100644
index 0000000..eec8884
--- /dev/null
+++ b/wp-admin/css/colors/blue/colors.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#096484}input[type=radio]:checked:before{background:#096484}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#dd9f32;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74;box-shadow:inset 0 1px 0 #e8be74}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #e8be74,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #e8be74,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#d39323;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cdc7!important;background:#db9925!important;border-color:#bd831f!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#52accc}.wp-core-ui .wp-ui-text-primary{color:#52accc}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#096484}.wp-core-ui .wp-ui-text-highlight{color:#096484}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#e1a948}.wp-core-ui .wp-ui-text-notification{color:#e1a948}.wp-core-ui .wp-ui-text-icon{color:#e5f8ff}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#52accc}.view-switch a.current:before{color:#52accc}.view-switch a:hover:before{color:#e1a948}.post-com-count:hover:after{border-top-color:#52accc}.post-com-count:hover span{color:#fff;background-color:#52accc}strong .post-com-count:after{border-top-color:#e1a948}strong .post-com-count span{background-color:#e1a948}#adminmenu,#adminmenuback,#adminmenuwrap{background:#52accc}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#e5f8ff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#096484}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#4796b3}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#4796b3}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#e2ecf1}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#fff}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#096484}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#e1a948}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#4796b3}#collapse-menu{color:#e5f8ff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#e5f8ff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#52accc}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#e5f8ff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#fff;background:#4796b3}#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4796b3}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#74b6ce}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#e2ecf1}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#e5f8ff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#fff}#wpadminbar #adminbarsearch:before{color:#e5f8ff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6eb9d4}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6eb9d4;background-color:#6eb9d4}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info .username{color:#e2ecf1}.wp-pointer .wp-pointer-content h3{background-color:#096484;border-color:#07526c}.wp-pointer .wp-pointer-content h3:before{color:#096484}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#096484}.media-item .bar,.media-progress-bar div{background-color:#096484}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #096484;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #096484}.attachment.details .check{background-color:#096484;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #096484;box-shadow:0 0 0 1px #fff,0 0 0 2px #096484}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #096484;box-shadow:0 0 0 1px #fff,0 0 0 3px #096484}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#096484}.theme-browser .theme.add-new-theme:hover span:after{color:#096484}.theme-filter.current,.theme-section.current{border-bottom-color:#52accc}body.more-filters-opened .more-filters{color:#fff;background-color:#52accc}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#096484;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#096484;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#096484;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#e1a948;border-color:#d39323;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e1a948}div#wp-responsive-toggle a:before{color:#e5f8ff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#096484}.star-rating .star{color:#096484}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4796b3}
\ No newline at end of file
diff --git a/wp-admin/css/colors/blue/colors.scss b/wp-admin/css/colors/blue/colors.scss
new file mode 100644
index 0000000..b254d73
--- /dev/null
+++ b/wp-admin/css/colors/blue/colors.scss
@@ -0,0 +1,11 @@
+$base-color: #52accc;
+$icon-color: #e5f8ff;
+$highlight-color: #096484;
+$notification-color: #e1a948;
+$button-color: #e1a948;
+
+$menu-submenu-text: #e2ecf1;
+$menu-submenu-focus-text: #fff;
+$menu-submenu-background: #4796b3;
+
+@import "../_admin.scss";
diff --git a/wp-admin/css/colors/coffee/colors-rtl.css b/wp-admin/css/colors/coffee/colors-rtl.css
new file mode 100644
index 0000000..b8cbaa3
--- /dev/null
+++ b/wp-admin/css/colors/coffee/colors-rtl.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #59524c; }
+
+input[type=radio]:checked:before {
+ background: #59524c; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #c7a589;
+ border-color: #b78b66;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #bf9878;
+ border-color: #ae7d55;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #d7bfac;
+ box-shadow: inset 0 1px 0 #d7bfac; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #d7bfac, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #d7bfac, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #b78b66;
+ border-color: #ae7d55;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #d1ccc7 !important;
+ background: #ba906d !important;
+ border-color: #ae7d55 !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #59524c; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #59524c; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #c7a589; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #c7a589; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #9ea476; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #9ea476; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #f3f2f1; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #59524c; }
+
+.view-switch a.current:before {
+ color: #59524c; }
+
+.view-switch a:hover:before {
+ color: #9ea476; }
+
+.post-com-count:hover:after {
+ border-top-color: #59524c; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #59524c; }
+
+strong .post-com-count:after {
+ border-top-color: #9ea476; }
+
+strong .post-com-count span {
+ background-color: #9ea476; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #59524c; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #f3f2f1; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #c7a589; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #46403c; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-left-color: #46403c; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #cdcbc9; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #cdcbc9; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #c7a589; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #c7a589; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-left-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #c7a589; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #9ea476; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #46403c; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #f3f2f1; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #f3f2f1; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #59524c; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #f3f2f1; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #c7a589;
+ background: #46403c; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #c7a589; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #46403c; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #656463; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #cdcbc9; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #f3f2f1; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #c7a589; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #c7a589; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #f3f2f1; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #6c645c; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #6c645c;
+ background-color: #6c645c; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #c7a589; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #cdcbc9; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #c7a589;
+ border-color: #bf9878; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #c7a589; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #c7a589; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #c7a589; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #c7a589;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #c7a589; }
+
+.attachment.details .check {
+ background-color: #c7a589;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #c7a589;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #c7a589; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #c7a589; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #c7a589; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #59524c; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #59524c; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #c7a589;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #c7a589;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #c7a589;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #c7a589;
+ border-color: #b78b66;
+ -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #c7a589; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #f3f2f1; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #c7a589; }
+
+.star-rating .star {
+ color: #c7a589; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #46403c; }
diff --git a/wp-admin/css/colors/coffee/colors-rtl.min.css b/wp-admin/css/colors/coffee/colors-rtl.min.css
new file mode 100644
index 0000000..ed82075
--- /dev/null
+++ b/wp-admin/css/colors/coffee/colors-rtl.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#59524c}input[type=radio]:checked:before{background:#59524c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#c7a589;border-color:#b78b66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#bf9878;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac;box-shadow:inset 0 1px 0 #d7bfac}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #d7bfac,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#b78b66;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1ccc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#59524c}.wp-core-ui .wp-ui-text-primary{color:#59524c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#c7a589}.wp-core-ui .wp-ui-text-highlight{color:#c7a589}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#9ea476}.wp-core-ui .wp-ui-text-notification{color:#9ea476}.wp-core-ui .wp-ui-text-icon{color:#f3f2f1}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#59524c}.view-switch a.current:before{color:#59524c}.view-switch a:hover:before{color:#9ea476}.post-com-count:hover:after{border-top-color:#59524c}.post-com-count:hover span{color:#fff;background-color:#59524c}strong .post-com-count:after{border-top-color:#9ea476}strong .post-com-count span{background-color:#9ea476}#adminmenu,#adminmenuback,#adminmenuwrap{background:#59524c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f2f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#c7a589}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#46403c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#46403c}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cdcbc9}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#c7a589}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#c7a589}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#c7a589}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#9ea476}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#46403c}#collapse-menu{color:#f3f2f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f2f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#59524c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f3f2f1}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#c7a589;background:#46403c}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#c7a589}#wpadminbar .menupop .ab-sub-wrapper{background:#46403c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#656463}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cdcbc9}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f2f1}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#c7a589}#wpadminbar #adminbarsearch:before{color:#f3f2f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6c645c}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6c645c;background-color:#6c645c}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#c7a589}#wpadminbar #wp-admin-bar-user-info .username{color:#cdcbc9}.wp-pointer .wp-pointer-content h3{background-color:#c7a589;border-color:#bf9878}.wp-pointer .wp-pointer-content h3:before{color:#c7a589}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#c7a589}.media-item .bar,.media-progress-bar div{background-color:#c7a589}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #c7a589;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #c7a589}.attachment.details .check{background-color:#c7a589;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589;box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #c7a589;box-shadow:0 0 0 1px #fff,0 0 0 3px #c7a589}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#c7a589}.theme-browser .theme.add-new-theme:hover span:after{color:#c7a589}.theme-filter.current,.theme-section.current{border-bottom-color:#59524c}body.more-filters-opened .more-filters{color:#fff;background-color:#59524c}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#c7a589;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#c7a589;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#c7a589;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#c7a589;border-color:#b78b66;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#c7a589}div#wp-responsive-toggle a:before{color:#f3f2f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#c7a589}.star-rating .star{color:#c7a589}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#46403c}
\ No newline at end of file
diff --git a/wp-admin/css/colors/coffee/colors.css b/wp-admin/css/colors/coffee/colors.css
new file mode 100644
index 0000000..d5fa9a7
--- /dev/null
+++ b/wp-admin/css/colors/coffee/colors.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #59524c; }
+
+input[type=radio]:checked:before {
+ background: #59524c; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #c7a589;
+ border-color: #b78b66;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #bf9878;
+ border-color: #ae7d55;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #d7bfac;
+ box-shadow: inset 0 1px 0 #d7bfac; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #d7bfac, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #d7bfac, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #b78b66;
+ border-color: #ae7d55;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #d1ccc7 !important;
+ background: #ba906d !important;
+ border-color: #ae7d55 !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #59524c; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #59524c; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #c7a589; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #c7a589; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #9ea476; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #9ea476; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #f3f2f1; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #59524c; }
+
+.view-switch a.current:before {
+ color: #59524c; }
+
+.view-switch a:hover:before {
+ color: #9ea476; }
+
+.post-com-count:hover:after {
+ border-top-color: #59524c; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #59524c; }
+
+strong .post-com-count:after {
+ border-top-color: #9ea476; }
+
+strong .post-com-count span {
+ background-color: #9ea476; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #59524c; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #f3f2f1; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #c7a589; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #46403c; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: #46403c; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #cdcbc9; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #cdcbc9; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #c7a589; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #c7a589; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-right-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #c7a589; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #9ea476; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #46403c; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #f3f2f1; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #f3f2f1; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #59524c; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #f3f2f1; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #c7a589;
+ background: #46403c; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #c7a589; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #46403c; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #656463; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #cdcbc9; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #f3f2f1; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #c7a589; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #c7a589; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #f3f2f1; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #6c645c; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #6c645c;
+ background-color: #6c645c; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #c7a589; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #cdcbc9; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #c7a589;
+ border-color: #bf9878; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #c7a589; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #c7a589; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #c7a589; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #c7a589;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #c7a589; }
+
+.attachment.details .check {
+ background-color: #c7a589;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #c7a589;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #c7a589; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #c7a589; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #c7a589; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #59524c; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #59524c; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #c7a589;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #c7a589;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #c7a589;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #c7a589;
+ border-color: #b78b66;
+ -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #c7a589; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #f3f2f1; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #c7a589; }
+
+.star-rating .star {
+ color: #c7a589; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #46403c; }
diff --git a/wp-admin/css/colors/coffee/colors.min.css b/wp-admin/css/colors/coffee/colors.min.css
new file mode 100644
index 0000000..966267c
--- /dev/null
+++ b/wp-admin/css/colors/coffee/colors.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#59524c}input[type=radio]:checked:before{background:#59524c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#c7a589;border-color:#b78b66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#bf9878;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac;box-shadow:inset 0 1px 0 #d7bfac}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #d7bfac,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#b78b66;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1ccc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#59524c}.wp-core-ui .wp-ui-text-primary{color:#59524c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#c7a589}.wp-core-ui .wp-ui-text-highlight{color:#c7a589}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#9ea476}.wp-core-ui .wp-ui-text-notification{color:#9ea476}.wp-core-ui .wp-ui-text-icon{color:#f3f2f1}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#59524c}.view-switch a.current:before{color:#59524c}.view-switch a:hover:before{color:#9ea476}.post-com-count:hover:after{border-top-color:#59524c}.post-com-count:hover span{color:#fff;background-color:#59524c}strong .post-com-count:after{border-top-color:#9ea476}strong .post-com-count span{background-color:#9ea476}#adminmenu,#adminmenuback,#adminmenuwrap{background:#59524c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f2f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#c7a589}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#46403c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#46403c}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cdcbc9}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#c7a589}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#c7a589}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#c7a589}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#9ea476}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#46403c}#collapse-menu{color:#f3f2f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f2f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#59524c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f3f2f1}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#c7a589;background:#46403c}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#c7a589}#wpadminbar .menupop .ab-sub-wrapper{background:#46403c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#656463}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cdcbc9}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f2f1}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#c7a589}#wpadminbar #adminbarsearch:before{color:#f3f2f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6c645c}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6c645c;background-color:#6c645c}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#c7a589}#wpadminbar #wp-admin-bar-user-info .username{color:#cdcbc9}.wp-pointer .wp-pointer-content h3{background-color:#c7a589;border-color:#bf9878}.wp-pointer .wp-pointer-content h3:before{color:#c7a589}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#c7a589}.media-item .bar,.media-progress-bar div{background-color:#c7a589}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #c7a589;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #c7a589}.attachment.details .check{background-color:#c7a589;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589;box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #c7a589;box-shadow:0 0 0 1px #fff,0 0 0 3px #c7a589}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#c7a589}.theme-browser .theme.add-new-theme:hover span:after{color:#c7a589}.theme-filter.current,.theme-section.current{border-bottom-color:#59524c}body.more-filters-opened .more-filters{color:#fff;background-color:#59524c}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#c7a589;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#c7a589;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#c7a589;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#c7a589;border-color:#b78b66;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#c7a589}div#wp-responsive-toggle a:before{color:#f3f2f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#c7a589}.star-rating .star{color:#c7a589}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#46403c}
\ No newline at end of file
diff --git a/wp-admin/css/colors/coffee/colors.scss b/wp-admin/css/colors/coffee/colors.scss
new file mode 100644
index 0000000..49bee9b
--- /dev/null
+++ b/wp-admin/css/colors/coffee/colors.scss
@@ -0,0 +1,7 @@
+$base-color: #59524c;
+$highlight-color: #c7a589;
+$notification-color: #9ea476;
+
+$form-checked: $base-color;
+
+@import "../_admin.scss";
diff --git a/wp-admin/css/colors/ectoplasm/colors-rtl.css b/wp-admin/css/colors/ectoplasm/colors-rtl.css
new file mode 100644
index 0000000..ae66a62
--- /dev/null
+++ b/wp-admin/css/colors/ectoplasm/colors-rtl.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #523f6d; }
+
+input[type=radio]:checked:before {
+ background: #523f6d; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #a3b745;
+ border-color: #829237;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #bfcd7b, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #bfcd7b, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #93a43e;
+ border-color: #727f30;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #b6c669;
+ box-shadow: inset 0 1px 0 #b6c669; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #b6c669, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #b6c669, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #829237;
+ border-color: #727f30;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #cfd1c7 !important;
+ background: #89993a !important;
+ border-color: #727f30 !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #523f6d; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #523f6d; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #a3b745; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #a3b745; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #d46f15; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #d46f15; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #ece6f6; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #523f6d; }
+
+.view-switch a.current:before {
+ color: #523f6d; }
+
+.view-switch a:hover:before {
+ color: #d46f15; }
+
+.post-com-count:hover:after {
+ border-top-color: #523f6d; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #523f6d; }
+
+strong .post-com-count:after {
+ border-top-color: #d46f15; }
+
+strong .post-com-count span {
+ background-color: #d46f15; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #523f6d; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #ece6f6; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #a3b745; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #413256; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-left-color: #413256; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #cbc5d3; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #cbc5d3; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #a3b745; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #a3b745; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-left-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #a3b745; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #d46f15; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #413256; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #ece6f6; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #ece6f6; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #523f6d; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #ece6f6; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #a3b745;
+ background: #413256; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #a3b745; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #413256; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #64537c; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #cbc5d3; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #ece6f6; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #a3b745; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #a3b745; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #ece6f6; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #634c84; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #634c84;
+ background-color: #634c84; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #a3b745; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #cbc5d3; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #a3b745;
+ border-color: #93a43e; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #a3b745; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #a3b745; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #a3b745; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #a3b745;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #a3b745; }
+
+.attachment.details .check {
+ background-color: #a3b745;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #a3b745;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #a3b745; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #a3b745; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #a3b745; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #523f6d; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #523f6d; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #a3b745;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #a3b745;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #a3b745;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #a3b745;
+ border-color: #829237;
+ -webkit-box-shadow: inset 0 1px 0 #bfcd7b, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #bfcd7b, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #a3b745; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #ece6f6; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #a3b745; }
+
+.star-rating .star {
+ color: #a3b745; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #413256; }
diff --git a/wp-admin/css/colors/ectoplasm/colors-rtl.min.css b/wp-admin/css/colors/ectoplasm/colors-rtl.min.css
new file mode 100644
index 0000000..7fd8469
--- /dev/null
+++ b/wp-admin/css/colors/ectoplasm/colors-rtl.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#523f6d}input[type=radio]:checked:before{background:#523f6d}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#a3b745;border-color:#829237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#93a43e;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b6c669;box-shadow:inset 0 1px 0 #b6c669}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #b6c669,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #b6c669,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#829237;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#523f6d}.wp-core-ui .wp-ui-text-primary{color:#523f6d}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#a3b745}.wp-core-ui .wp-ui-text-highlight{color:#a3b745}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d46f15}.wp-core-ui .wp-ui-text-notification{color:#d46f15}.wp-core-ui .wp-ui-text-icon{color:#ece6f6}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#523f6d}.view-switch a.current:before{color:#523f6d}.view-switch a:hover:before{color:#d46f15}.post-com-count:hover:after{border-top-color:#523f6d}.post-com-count:hover span{color:#fff;background-color:#523f6d}strong .post-com-count:after{border-top-color:#d46f15}strong .post-com-count span{background-color:#d46f15}#adminmenu,#adminmenuback,#adminmenuwrap{background:#523f6d}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#ece6f6}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#a3b745}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#413256}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#413256}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cbc5d3}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#a3b745}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#a3b745}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#a3b745}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d46f15}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#413256}#collapse-menu{color:#ece6f6}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#ece6f6}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#523f6d}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#ece6f6}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#a3b745;background:#413256}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#a3b745}#wpadminbar .menupop .ab-sub-wrapper{background:#413256}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#64537c}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cbc5d3}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#ece6f6}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#a3b745}#wpadminbar #adminbarsearch:before{color:#ece6f6}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#634c84}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#634c84;background-color:#634c84}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#a3b745}#wpadminbar #wp-admin-bar-user-info .username{color:#cbc5d3}.wp-pointer .wp-pointer-content h3{background-color:#a3b745;border-color:#93a43e}.wp-pointer .wp-pointer-content h3:before{color:#a3b745}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#a3b745}.media-item .bar,.media-progress-bar div{background-color:#a3b745}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #a3b745;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #a3b745}.attachment.details .check{background-color:#a3b745;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745;box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #a3b745;box-shadow:0 0 0 1px #fff,0 0 0 3px #a3b745}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#a3b745}.theme-browser .theme.add-new-theme:hover span:after{color:#a3b745}.theme-filter.current,.theme-section.current{border-bottom-color:#523f6d}body.more-filters-opened .more-filters{color:#fff;background-color:#523f6d}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#a3b745;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#a3b745;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#a3b745;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#a3b745;border-color:#829237;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#a3b745}div#wp-responsive-toggle a:before{color:#ece6f6}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#a3b745}.star-rating .star{color:#a3b745}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#413256}
\ No newline at end of file
diff --git a/wp-admin/css/colors/ectoplasm/colors.css b/wp-admin/css/colors/ectoplasm/colors.css
new file mode 100644
index 0000000..cd87f4d
--- /dev/null
+++ b/wp-admin/css/colors/ectoplasm/colors.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #523f6d; }
+
+input[type=radio]:checked:before {
+ background: #523f6d; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #a3b745;
+ border-color: #829237;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #bfcd7b, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #bfcd7b, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #93a43e;
+ border-color: #727f30;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #b6c669;
+ box-shadow: inset 0 1px 0 #b6c669; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #b6c669, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #b6c669, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #829237;
+ border-color: #727f30;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #cfd1c7 !important;
+ background: #89993a !important;
+ border-color: #727f30 !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #523f6d; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #523f6d; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #a3b745; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #a3b745; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #d46f15; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #d46f15; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #ece6f6; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #523f6d; }
+
+.view-switch a.current:before {
+ color: #523f6d; }
+
+.view-switch a:hover:before {
+ color: #d46f15; }
+
+.post-com-count:hover:after {
+ border-top-color: #523f6d; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #523f6d; }
+
+strong .post-com-count:after {
+ border-top-color: #d46f15; }
+
+strong .post-com-count span {
+ background-color: #d46f15; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #523f6d; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #ece6f6; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #a3b745; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #413256; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: #413256; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #cbc5d3; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #cbc5d3; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #a3b745; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #a3b745; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-right-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #a3b745; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #d46f15; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #413256; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #ece6f6; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #ece6f6; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #523f6d; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #ece6f6; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #a3b745;
+ background: #413256; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #a3b745; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #413256; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #64537c; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #cbc5d3; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #ece6f6; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #a3b745; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #a3b745; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #ece6f6; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #634c84; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #634c84;
+ background-color: #634c84; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #a3b745; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #cbc5d3; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #a3b745;
+ border-color: #93a43e; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #a3b745; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #a3b745; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #a3b745; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #a3b745;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #a3b745; }
+
+.attachment.details .check {
+ background-color: #a3b745;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #a3b745;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #a3b745; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #a3b745; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #a3b745; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #523f6d; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #523f6d; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #a3b745;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #a3b745;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #a3b745;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #a3b745;
+ border-color: #829237;
+ -webkit-box-shadow: inset 0 1px 0 #bfcd7b, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #bfcd7b, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #a3b745; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #ece6f6; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #a3b745; }
+
+.star-rating .star {
+ color: #a3b745; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #413256; }
diff --git a/wp-admin/css/colors/ectoplasm/colors.min.css b/wp-admin/css/colors/ectoplasm/colors.min.css
new file mode 100644
index 0000000..e910953
--- /dev/null
+++ b/wp-admin/css/colors/ectoplasm/colors.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#523f6d}input[type=radio]:checked:before{background:#523f6d}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#a3b745;border-color:#829237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#93a43e;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b6c669;box-shadow:inset 0 1px 0 #b6c669}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #b6c669,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #b6c669,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#829237;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#523f6d}.wp-core-ui .wp-ui-text-primary{color:#523f6d}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#a3b745}.wp-core-ui .wp-ui-text-highlight{color:#a3b745}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d46f15}.wp-core-ui .wp-ui-text-notification{color:#d46f15}.wp-core-ui .wp-ui-text-icon{color:#ece6f6}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#523f6d}.view-switch a.current:before{color:#523f6d}.view-switch a:hover:before{color:#d46f15}.post-com-count:hover:after{border-top-color:#523f6d}.post-com-count:hover span{color:#fff;background-color:#523f6d}strong .post-com-count:after{border-top-color:#d46f15}strong .post-com-count span{background-color:#d46f15}#adminmenu,#adminmenuback,#adminmenuwrap{background:#523f6d}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#ece6f6}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#a3b745}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#413256}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#413256}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cbc5d3}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#a3b745}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#a3b745}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#a3b745}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d46f15}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#413256}#collapse-menu{color:#ece6f6}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#ece6f6}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#523f6d}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#ece6f6}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#a3b745;background:#413256}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#a3b745}#wpadminbar .menupop .ab-sub-wrapper{background:#413256}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#64537c}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cbc5d3}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#ece6f6}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#a3b745}#wpadminbar #adminbarsearch:before{color:#ece6f6}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#634c84}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#634c84;background-color:#634c84}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#a3b745}#wpadminbar #wp-admin-bar-user-info .username{color:#cbc5d3}.wp-pointer .wp-pointer-content h3{background-color:#a3b745;border-color:#93a43e}.wp-pointer .wp-pointer-content h3:before{color:#a3b745}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#a3b745}.media-item .bar,.media-progress-bar div{background-color:#a3b745}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #a3b745;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #a3b745}.attachment.details .check{background-color:#a3b745;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745;box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #a3b745;box-shadow:0 0 0 1px #fff,0 0 0 3px #a3b745}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#a3b745}.theme-browser .theme.add-new-theme:hover span:after{color:#a3b745}.theme-filter.current,.theme-section.current{border-bottom-color:#523f6d}body.more-filters-opened .more-filters{color:#fff;background-color:#523f6d}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#a3b745;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#a3b745;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#a3b745;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#a3b745;border-color:#829237;-webkit-box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bfcd7b,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#a3b745}div#wp-responsive-toggle a:before{color:#ece6f6}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#a3b745}.star-rating .star{color:#a3b745}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#413256}
\ No newline at end of file
diff --git a/wp-admin/css/colors/ectoplasm/colors.scss b/wp-admin/css/colors/ectoplasm/colors.scss
new file mode 100644
index 0000000..8d14570
--- /dev/null
+++ b/wp-admin/css/colors/ectoplasm/colors.scss
@@ -0,0 +1,8 @@
+$base-color: #523f6d;
+$icon-color: #ece6f6;
+$highlight-color: #a3b745;
+$notification-color: #d46f15;
+
+$form-checked: $base-color;
+
+@import "../_admin.scss";
diff --git a/wp-admin/css/colors/light/colors-rtl.css b/wp-admin/css/colors/light/colors-rtl.css
new file mode 100644
index 0000000..a806ff2
--- /dev/null
+++ b/wp-admin/css/colors/light/colors-rtl.css
@@ -0,0 +1,349 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f5f5f5; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #04a4cc; }
+
+input[type=radio]:checked:before {
+ background: #04a4cc; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #04a4cc;
+ border-color: #037c9a;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #0490b3;
+ border-color: #036881;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #09cafa;
+ box-shadow: inset 0 1px 0 #09cafa; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #09cafa, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #09cafa, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #037c9a;
+ border-color: #036881;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #c7cfd1 !important;
+ background: #0384a4 !important;
+ border-color: #036881 !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #333;
+ background-color: #e5e5e5; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #e5e5e5; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #888; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #888; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #d64e07; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #d64e07; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #999; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #333;
+ background-color: #e5e5e5; }
+
+.view-switch a.current:before {
+ color: #e5e5e5; }
+
+.view-switch a:hover:before {
+ color: #d64e07; }
+
+.post-com-count:hover:after {
+ border-top-color: #e5e5e5; }
+
+.post-com-count:hover span {
+ color: #333;
+ background-color: #e5e5e5; }
+
+strong .post-com-count:after {
+ border-top-color: #d64e07; }
+
+strong .post-com-count span {
+ background-color: #d64e07; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #e5e5e5; }
+
+#adminmenu a {
+ color: #333; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #999; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #888; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #ccc; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f5f5f5;
+ border-bottom-color: #f5f5f5; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #fff; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-left-color: #fff; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #686868; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #686868; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #04a4cc; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #333; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #04a4cc; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-left-color: #f5f5f5; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #888; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #ccc; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #d64e07; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #333;
+ background: #fff; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #777; }
+
+#collapse-menu:hover {
+ color: #333; }
+
+#collapse-button div:after {
+ color: #999; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #555; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #333;
+ background: #e5e5e5; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #333; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #999; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #04a4cc;
+ background: #fff; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #04a4cc; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #ccc; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #fff; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #f6f7f7; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #686868; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #999; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #04a4cc; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #04a4cc; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #999; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #333;
+ background: #f7f7f7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #333;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #333;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #333;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #333;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #f7f7f7;
+ background-color: #f7f7f7; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #333; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #04a4cc; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #686868; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #04a4cc;
+ border-color: #0490b3; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #04a4cc; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #04a4cc; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #04a4cc; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #04a4cc;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #04a4cc; }
+
+.attachment.details .check {
+ background-color: #04a4cc;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #04a4cc;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #04a4cc; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #04a4cc; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #04a4cc; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #e5e5e5; }
+
+body.more-filters-opened .more-filters {
+ color: #333;
+ background-color: #e5e5e5; }
+
+body.more-filters-opened .more-filters:before {
+ color: #333; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #888;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #888;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #888;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #04a4cc;
+ border-color: #037c9a;
+ -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f5f5f5;
+ border-bottom-color: #f5f5f5; }
+
+#plugin-information .action-button {
+ background: #04a4cc; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #999; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #888; }
+
+.star-rating .star {
+ color: #04a4cc; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #fff; }
+
+/* temporary fix for admin-bar hover color */
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label, #wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #333; }
+
+/* Override the theme filter highlight color for this scheme */
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #04a4cc; }
diff --git a/wp-admin/css/colors/light/colors-rtl.min.css b/wp-admin/css/colors/light/colors-rtl.min.css
new file mode 100644
index 0000000..d71aa20
--- /dev/null
+++ b/wp-admin/css/colors/light/colors-rtl.min.css
@@ -0,0 +1 @@
+html{background:#f5f5f5}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#04a4cc}input[type=radio]:checked:before{background:#04a4cc}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#0490b3;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa;box-shadow:inset 0 1px 0 #09cafa}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #09cafa,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #09cafa,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#037c9a;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#333;background-color:#e5e5e5}.wp-core-ui .wp-ui-text-primary{color:#e5e5e5}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#888}.wp-core-ui .wp-ui-text-highlight{color:#888}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d64e07}.wp-core-ui .wp-ui-text-notification{color:#d64e07}.wp-core-ui .wp-ui-text-icon{color:#999}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#333;background-color:#e5e5e5}.view-switch a.current:before{color:#e5e5e5}.view-switch a:hover:before{color:#d64e07}.post-com-count:hover:after{border-top-color:#e5e5e5}.post-com-count:hover span{color:#333;background-color:#e5e5e5}strong .post-com-count:after{border-top-color:#d64e07}strong .post-com-count span{background-color:#d64e07}#adminmenu,#adminmenuback,#adminmenuwrap{background:#e5e5e5}#adminmenu a{color:#333}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#888}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#ccc}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f5f5f5;border-bottom-color:#f5f5f5}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#fff}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#fff}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#686868}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#04a4cc}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#333}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#04a4cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f5f5f5}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#888}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#ccc}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d64e07}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#333;background:#fff}#collapse-menu{color:#777}#collapse-menu:hover{color:#333}#collapse-button div:after{color:#999}#collapse-menu:hover #collapse-button div:after{color:#555}#wpadminbar{color:#333;background:#e5e5e5}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#333}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#999}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{background:#fff}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#04a4cc}#wpadminbar .menupop .ab-sub-wrapper{background:#fff}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#f6f7f7}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#686868}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#999}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#04a4cc}#wpadminbar #adminbarsearch:before{color:#999}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#333;background:#f7f7f7}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#333;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#f7f7f7;background-color:#f7f7f7}#wpadminbar #wp-admin-bar-user-info .display-name{color:#333}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#04a4cc}#wpadminbar #wp-admin-bar-user-info .username{color:#686868}.wp-pointer .wp-pointer-content h3{background-color:#04a4cc;border-color:#0490b3}.wp-pointer .wp-pointer-content h3:before{color:#04a4cc}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#04a4cc}.media-item .bar,.media-progress-bar div{background-color:#04a4cc}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #04a4cc;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #04a4cc}.attachment.details .check{background-color:#04a4cc;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 3px #04a4cc}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#04a4cc}.theme-browser .theme.add-new-theme:hover span:after{color:#04a4cc}body.more-filters-opened .more-filters{color:#333;background-color:#e5e5e5}body.more-filters-opened .more-filters:before{color:#333}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#888;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#888;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#888;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#04a4cc;border-color:#037c9a;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f5f5f5;border-bottom-color:#f5f5f5}#plugin-information .action-button{background:#04a4cc}div#wp-responsive-toggle a:before{color:#999}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#888}.star-rating .star{color:#04a4cc}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#fff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default li:hover span.ab-label,#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary li.hover span.ab-label{color:#333}.theme-filter.current,.theme-section.current{border-bottom-color:#04a4cc}
\ No newline at end of file
diff --git a/wp-admin/css/colors/light/colors.css b/wp-admin/css/colors/light/colors.css
new file mode 100644
index 0000000..171ac68
--- /dev/null
+++ b/wp-admin/css/colors/light/colors.css
@@ -0,0 +1,349 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f5f5f5; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #04a4cc; }
+
+input[type=radio]:checked:before {
+ background: #04a4cc; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #04a4cc;
+ border-color: #037c9a;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #0490b3;
+ border-color: #036881;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #09cafa;
+ box-shadow: inset 0 1px 0 #09cafa; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #09cafa, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #09cafa, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #037c9a;
+ border-color: #036881;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #c7cfd1 !important;
+ background: #0384a4 !important;
+ border-color: #036881 !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #333;
+ background-color: #e5e5e5; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #e5e5e5; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #888; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #888; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #d64e07; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #d64e07; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #999; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #333;
+ background-color: #e5e5e5; }
+
+.view-switch a.current:before {
+ color: #e5e5e5; }
+
+.view-switch a:hover:before {
+ color: #d64e07; }
+
+.post-com-count:hover:after {
+ border-top-color: #e5e5e5; }
+
+.post-com-count:hover span {
+ color: #333;
+ background-color: #e5e5e5; }
+
+strong .post-com-count:after {
+ border-top-color: #d64e07; }
+
+strong .post-com-count span {
+ background-color: #d64e07; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #e5e5e5; }
+
+#adminmenu a {
+ color: #333; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #999; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #888; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #ccc; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f5f5f5;
+ border-bottom-color: #f5f5f5; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #fff; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: #fff; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #686868; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #686868; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #04a4cc; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #333; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #04a4cc; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-right-color: #f5f5f5; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #888; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #ccc; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #d64e07; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #333;
+ background: #fff; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #777; }
+
+#collapse-menu:hover {
+ color: #333; }
+
+#collapse-button div:after {
+ color: #999; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #555; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #333;
+ background: #e5e5e5; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #333; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #999; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #04a4cc;
+ background: #fff; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #04a4cc; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #ccc; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #fff; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #f6f7f7; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #686868; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #999; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #04a4cc; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #04a4cc; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #999; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #333;
+ background: #f7f7f7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #333;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #333;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #333;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #333;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #f7f7f7;
+ background-color: #f7f7f7; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #333; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #04a4cc; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #686868; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #04a4cc;
+ border-color: #0490b3; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #04a4cc; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #04a4cc; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #04a4cc; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #04a4cc;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #04a4cc; }
+
+.attachment.details .check {
+ background-color: #04a4cc;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #04a4cc;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #04a4cc; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #04a4cc; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #04a4cc; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #e5e5e5; }
+
+body.more-filters-opened .more-filters {
+ color: #333;
+ background-color: #e5e5e5; }
+
+body.more-filters-opened .more-filters:before {
+ color: #333; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #888;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #888;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #888;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #04a4cc;
+ border-color: #037c9a;
+ -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f5f5f5;
+ border-bottom-color: #f5f5f5; }
+
+#plugin-information .action-button {
+ background: #04a4cc; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #999; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #888; }
+
+.star-rating .star {
+ color: #04a4cc; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #fff; }
+
+/* temporary fix for admin-bar hover color */
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label, #wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #333; }
+
+/* Override the theme filter highlight color for this scheme */
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #04a4cc; }
diff --git a/wp-admin/css/colors/light/colors.min.css b/wp-admin/css/colors/light/colors.min.css
new file mode 100644
index 0000000..1ba957c
--- /dev/null
+++ b/wp-admin/css/colors/light/colors.min.css
@@ -0,0 +1 @@
+html{background:#f5f5f5}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#04a4cc}input[type=radio]:checked:before{background:#04a4cc}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#0490b3;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa;box-shadow:inset 0 1px 0 #09cafa}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #09cafa,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #09cafa,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#037c9a;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#333;background-color:#e5e5e5}.wp-core-ui .wp-ui-text-primary{color:#e5e5e5}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#888}.wp-core-ui .wp-ui-text-highlight{color:#888}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d64e07}.wp-core-ui .wp-ui-text-notification{color:#d64e07}.wp-core-ui .wp-ui-text-icon{color:#999}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#333;background-color:#e5e5e5}.view-switch a.current:before{color:#e5e5e5}.view-switch a:hover:before{color:#d64e07}.post-com-count:hover:after{border-top-color:#e5e5e5}.post-com-count:hover span{color:#333;background-color:#e5e5e5}strong .post-com-count:after{border-top-color:#d64e07}strong .post-com-count span{background-color:#d64e07}#adminmenu,#adminmenuback,#adminmenuwrap{background:#e5e5e5}#adminmenu a{color:#333}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#888}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#ccc}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f5f5f5;border-bottom-color:#f5f5f5}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#fff}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#fff}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#686868}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#04a4cc}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#333}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#04a4cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f5f5f5}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#888}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#ccc}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d64e07}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#333;background:#fff}#collapse-menu{color:#777}#collapse-menu:hover{color:#333}#collapse-button div:after{color:#999}#collapse-menu:hover #collapse-button div:after{color:#555}#wpadminbar{color:#333;background:#e5e5e5}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#333}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#999}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{background:#fff}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#04a4cc}#wpadminbar .menupop .ab-sub-wrapper{background:#fff}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#f6f7f7}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#686868}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#999}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#04a4cc}#wpadminbar #adminbarsearch:before{color:#999}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#333;background:#f7f7f7}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#333;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#f7f7f7;background-color:#f7f7f7}#wpadminbar #wp-admin-bar-user-info .display-name{color:#333}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#04a4cc}#wpadminbar #wp-admin-bar-user-info .username{color:#686868}.wp-pointer .wp-pointer-content h3{background-color:#04a4cc;border-color:#0490b3}.wp-pointer .wp-pointer-content h3:before{color:#04a4cc}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#04a4cc}.media-item .bar,.media-progress-bar div{background-color:#04a4cc}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #04a4cc;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #04a4cc}.attachment.details .check{background-color:#04a4cc;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 3px #04a4cc}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#04a4cc}.theme-browser .theme.add-new-theme:hover span:after{color:#04a4cc}body.more-filters-opened .more-filters{color:#333;background-color:#e5e5e5}body.more-filters-opened .more-filters:before{color:#333}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#888;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#888;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#888;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#04a4cc;border-color:#037c9a;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f5f5f5;border-bottom-color:#f5f5f5}#plugin-information .action-button{background:#04a4cc}div#wp-responsive-toggle a:before{color:#999}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#888}.star-rating .star{color:#04a4cc}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#fff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default li:hover span.ab-label,#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary li.hover span.ab-label{color:#333}.theme-filter.current,.theme-section.current{border-bottom-color:#04a4cc}
\ No newline at end of file
diff --git a/wp-admin/css/colors/light/colors.scss b/wp-admin/css/colors/light/colors.scss
new file mode 100644
index 0000000..b12774c
--- /dev/null
+++ b/wp-admin/css/colors/light/colors.scss
@@ -0,0 +1,38 @@
+$base-color: #e5e5e5;
+$icon-color: #999;
+$text-color: #333;
+$highlight-color: #04a4cc;
+$notification-color: #d64e07;
+
+$body-background: #f5f5f5;
+
+$menu-highlight-text: #fff;
+$menu-highlight-icon: #ccc;
+$menu-highlight-background: #888;
+
+$menu-bubble-text: #fff;
+$menu-avatar-frame: #aaa;
+$menu-submenu-background: #fff;
+
+$menu-collapse-text: #777;
+$menu-collapse-focus-icon: #555;
+
+@import "../_admin.scss";
+
+/* temporary fix for admin-bar hover color */
+#wpadminbar .ab-top-menu > li:hover > .ab-item,
+#wpadminbar .ab-top-menu > li.hover > .ab-item,
+#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label,
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label,
+#wpadminbar .ab-top-menu > li > .ab-item:focus,
+#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus,
+#wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item,
+#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: $text-color;
+}
+
+/* Override the theme filter highlight color for this scheme */
+.theme-section.current,
+.theme-filter.current {
+ border-bottom-color: $highlight-color;
+}
diff --git a/wp-admin/css/colors/midnight/colors-rtl.css b/wp-admin/css/colors/midnight/colors-rtl.css
new file mode 100644
index 0000000..d199f9d
--- /dev/null
+++ b/wp-admin/css/colors/midnight/colors-rtl.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #e14d43; }
+
+input[type=radio]:checked:before {
+ background: #e14d43; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #e14d43;
+ border-color: #d02c21;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #ec8b85, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #ec8b85, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #dd382d;
+ border-color: #ba281e;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e8776f;
+ box-shadow: inset 0 1px 0 #e8776f; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #e8776f, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #e8776f, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #d02c21;
+ border-color: #ba281e;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #d1c8c7 !important;
+ background: #d92e23 !important;
+ border-color: #ba281e !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #363b3f; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #363b3f; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #e14d43; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #e14d43; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #69a8bb; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #69a8bb; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #f1f2f3; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #363b3f; }
+
+.view-switch a.current:before {
+ color: #363b3f; }
+
+.view-switch a:hover:before {
+ color: #69a8bb; }
+
+.post-com-count:hover:after {
+ border-top-color: #363b3f; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #363b3f; }
+
+strong .post-com-count:after {
+ border-top-color: #69a8bb; }
+
+strong .post-com-count span {
+ background-color: #69a8bb; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #363b3f; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #f1f2f3; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #e14d43; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #26292c; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-left-color: #26292c; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #c2c4c5; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #c2c4c5; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #e14d43; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #e14d43; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-left-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #e14d43; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #69a8bb; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #26292c; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #f1f2f3; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #f1f2f3; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #363b3f; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #f1f2f3; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #e14d43;
+ background: #26292c; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #e14d43; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #26292c; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #4c4c4d; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #c2c4c5; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #f1f2f3; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #e14d43; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #e14d43; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #f1f2f3; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #464d52; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #464d52;
+ background-color: #464d52; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #e14d43; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #c2c4c5; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #e14d43;
+ border-color: #dd382d; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #e14d43; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #e14d43; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #e14d43; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #e14d43;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #e14d43; }
+
+.attachment.details .check {
+ background-color: #e14d43;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #e14d43;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #e14d43; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #e14d43; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #e14d43; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #363b3f; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #363b3f; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #e14d43;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #e14d43;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #e14d43;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #e14d43;
+ border-color: #d02c21;
+ -webkit-box-shadow: inset 0 1px 0 #ec8b85, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #ec8b85, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #e14d43; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #f1f2f3; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #e14d43; }
+
+.star-rating .star {
+ color: #e14d43; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #26292c; }
diff --git a/wp-admin/css/colors/midnight/colors-rtl.min.css b/wp-admin/css/colors/midnight/colors-rtl.min.css
new file mode 100644
index 0000000..cd4b9ea
--- /dev/null
+++ b/wp-admin/css/colors/midnight/colors-rtl.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#e14d43}input[type=radio]:checked:before{background:#e14d43}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#e14d43;border-color:#d02c21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#dd382d;border-color:#ba281e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8776f;box-shadow:inset 0 1px 0 #e8776f}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #e8776f,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #e8776f,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#d02c21;border-color:#ba281e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1c8c7!important;background:#d92e23!important;border-color:#ba281e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#363b3f}.wp-core-ui .wp-ui-text-primary{color:#363b3f}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#e14d43}.wp-core-ui .wp-ui-text-highlight{color:#e14d43}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#69a8bb}.wp-core-ui .wp-ui-text-notification{color:#69a8bb}.wp-core-ui .wp-ui-text-icon{color:#f1f2f3}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#363b3f}.view-switch a.current:before{color:#363b3f}.view-switch a:hover:before{color:#69a8bb}.post-com-count:hover:after{border-top-color:#363b3f}.post-com-count:hover span{color:#fff;background-color:#363b3f}strong .post-com-count:after{border-top-color:#69a8bb}strong .post-com-count span{background-color:#69a8bb}#adminmenu,#adminmenuback,#adminmenuwrap{background:#363b3f}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f2f3}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#e14d43}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#26292c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#26292c}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c2c4c5}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#e14d43}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#e14d43}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#e14d43}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#69a8bb}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#26292c}#collapse-menu{color:#f1f2f3}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f1f2f3}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#363b3f}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f2f3}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#e14d43;background:#26292c}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#e14d43}#wpadminbar .menupop .ab-sub-wrapper{background:#26292c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4c4c4d}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#c2c4c5}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f2f3}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#e14d43}#wpadminbar #adminbarsearch:before{color:#f1f2f3}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#464d52}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#464d52;background-color:#464d52}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#e14d43}#wpadminbar #wp-admin-bar-user-info .username{color:#c2c4c5}.wp-pointer .wp-pointer-content h3{background-color:#e14d43;border-color:#dd382d}.wp-pointer .wp-pointer-content h3:before{color:#e14d43}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#e14d43}.media-item .bar,.media-progress-bar div{background-color:#e14d43}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #e14d43;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #e14d43}.attachment.details .check{background-color:#e14d43;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43;box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #e14d43;box-shadow:0 0 0 1px #fff,0 0 0 3px #e14d43}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#e14d43}.theme-browser .theme.add-new-theme:hover span:after{color:#e14d43}.theme-filter.current,.theme-section.current{border-bottom-color:#363b3f}body.more-filters-opened .more-filters{color:#fff;background-color:#363b3f}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#e14d43;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#e14d43;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#e14d43;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#e14d43;border-color:#d02c21;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e14d43}div#wp-responsive-toggle a:before{color:#f1f2f3}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#e14d43}.star-rating .star{color:#e14d43}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#26292c}
\ No newline at end of file
diff --git a/wp-admin/css/colors/midnight/colors.css b/wp-admin/css/colors/midnight/colors.css
new file mode 100644
index 0000000..4bcf999
--- /dev/null
+++ b/wp-admin/css/colors/midnight/colors.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #e14d43; }
+
+input[type=radio]:checked:before {
+ background: #e14d43; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #e14d43;
+ border-color: #d02c21;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #ec8b85, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #ec8b85, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #dd382d;
+ border-color: #ba281e;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e8776f;
+ box-shadow: inset 0 1px 0 #e8776f; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #e8776f, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #e8776f, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #d02c21;
+ border-color: #ba281e;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #d1c8c7 !important;
+ background: #d92e23 !important;
+ border-color: #ba281e !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #363b3f; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #363b3f; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #e14d43; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #e14d43; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #69a8bb; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #69a8bb; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #f1f2f3; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #363b3f; }
+
+.view-switch a.current:before {
+ color: #363b3f; }
+
+.view-switch a:hover:before {
+ color: #69a8bb; }
+
+.post-com-count:hover:after {
+ border-top-color: #363b3f; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #363b3f; }
+
+strong .post-com-count:after {
+ border-top-color: #69a8bb; }
+
+strong .post-com-count span {
+ background-color: #69a8bb; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #363b3f; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #f1f2f3; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #e14d43; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #26292c; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: #26292c; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #c2c4c5; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #c2c4c5; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #e14d43; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #e14d43; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-right-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #e14d43; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #69a8bb; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #26292c; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #f1f2f3; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #f1f2f3; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #363b3f; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #f1f2f3; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #e14d43;
+ background: #26292c; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #e14d43; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #26292c; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #4c4c4d; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #c2c4c5; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #f1f2f3; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #e14d43; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #e14d43; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #f1f2f3; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #464d52; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #464d52;
+ background-color: #464d52; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #e14d43; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #c2c4c5; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #e14d43;
+ border-color: #dd382d; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #e14d43; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #e14d43; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #e14d43; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #e14d43;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #e14d43; }
+
+.attachment.details .check {
+ background-color: #e14d43;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #e14d43;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #e14d43; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #e14d43; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #e14d43; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #363b3f; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #363b3f; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #e14d43;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #e14d43;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #e14d43;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #e14d43;
+ border-color: #d02c21;
+ -webkit-box-shadow: inset 0 1px 0 #ec8b85, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #ec8b85, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #e14d43; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #f1f2f3; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #e14d43; }
+
+.star-rating .star {
+ color: #e14d43; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #26292c; }
diff --git a/wp-admin/css/colors/midnight/colors.min.css b/wp-admin/css/colors/midnight/colors.min.css
new file mode 100644
index 0000000..b347537
--- /dev/null
+++ b/wp-admin/css/colors/midnight/colors.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#e14d43}input[type=radio]:checked:before{background:#e14d43}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#e14d43;border-color:#d02c21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#dd382d;border-color:#ba281e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8776f;box-shadow:inset 0 1px 0 #e8776f}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #e8776f,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #e8776f,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#d02c21;border-color:#ba281e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1c8c7!important;background:#d92e23!important;border-color:#ba281e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#363b3f}.wp-core-ui .wp-ui-text-primary{color:#363b3f}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#e14d43}.wp-core-ui .wp-ui-text-highlight{color:#e14d43}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#69a8bb}.wp-core-ui .wp-ui-text-notification{color:#69a8bb}.wp-core-ui .wp-ui-text-icon{color:#f1f2f3}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#363b3f}.view-switch a.current:before{color:#363b3f}.view-switch a:hover:before{color:#69a8bb}.post-com-count:hover:after{border-top-color:#363b3f}.post-com-count:hover span{color:#fff;background-color:#363b3f}strong .post-com-count:after{border-top-color:#69a8bb}strong .post-com-count span{background-color:#69a8bb}#adminmenu,#adminmenuback,#adminmenuwrap{background:#363b3f}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f2f3}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#e14d43}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#26292c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#26292c}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c2c4c5}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#e14d43}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#e14d43}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#e14d43}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#69a8bb}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#26292c}#collapse-menu{color:#f1f2f3}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f1f2f3}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#363b3f}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f2f3}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#e14d43;background:#26292c}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#e14d43}#wpadminbar .menupop .ab-sub-wrapper{background:#26292c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4c4c4d}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#c2c4c5}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f2f3}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#e14d43}#wpadminbar #adminbarsearch:before{color:#f1f2f3}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#464d52}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#464d52;background-color:#464d52}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#e14d43}#wpadminbar #wp-admin-bar-user-info .username{color:#c2c4c5}.wp-pointer .wp-pointer-content h3{background-color:#e14d43;border-color:#dd382d}.wp-pointer .wp-pointer-content h3:before{color:#e14d43}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#e14d43}.media-item .bar,.media-progress-bar div{background-color:#e14d43}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #e14d43;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #e14d43}.attachment.details .check{background-color:#e14d43;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43;box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #e14d43;box-shadow:0 0 0 1px #fff,0 0 0 3px #e14d43}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#e14d43}.theme-browser .theme.add-new-theme:hover span:after{color:#e14d43}.theme-filter.current,.theme-section.current{border-bottom-color:#363b3f}body.more-filters-opened .more-filters{color:#fff;background-color:#363b3f}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#e14d43;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#e14d43;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#e14d43;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#e14d43;border-color:#d02c21;-webkit-box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8b85,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e14d43}div#wp-responsive-toggle a:before{color:#f1f2f3}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#e14d43}.star-rating .star{color:#e14d43}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#26292c}
\ No newline at end of file
diff --git a/wp-admin/css/colors/midnight/colors.scss b/wp-admin/css/colors/midnight/colors.scss
new file mode 100644
index 0000000..591232b
--- /dev/null
+++ b/wp-admin/css/colors/midnight/colors.scss
@@ -0,0 +1,5 @@
+$base-color: #363b3f;
+$highlight-color: #e14d43;
+$notification-color: #69a8bb;
+
+@import "../_admin.scss";
diff --git a/wp-admin/css/colors/ocean/colors-rtl.css b/wp-admin/css/colors/ocean/colors-rtl.css
new file mode 100644
index 0000000..709e7fc
--- /dev/null
+++ b/wp-admin/css/colors/ocean/colors-rtl.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #738e96; }
+
+input[type=radio]:checked:before {
+ background: #738e96; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #9ebaa0;
+ border-color: #80a583;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #8faf91;
+ border-color: #719a74;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #bccfbd;
+ box-shadow: inset 0 1px 0 #bccfbd; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #bccfbd, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #bccfbd, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #80a583;
+ border-color: #719a74;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #c7d1c8 !important;
+ background: #86a989 !important;
+ border-color: #719a74 !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #738e96; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #738e96; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #9ebaa0; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #9ebaa0; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #aa9d88; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #aa9d88; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #f2fcff; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #738e96; }
+
+.view-switch a.current:before {
+ color: #738e96; }
+
+.view-switch a:hover:before {
+ color: #aa9d88; }
+
+.post-com-count:hover:after {
+ border-top-color: #738e96; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #738e96; }
+
+strong .post-com-count:after {
+ border-top-color: #aa9d88; }
+
+strong .post-com-count span {
+ background-color: #aa9d88; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #738e96; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #f2fcff; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #9ebaa0; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #627c83; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-left-color: #627c83; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #d5dddf; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #d5dddf; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #9ebaa0; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #9ebaa0; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-left-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #9ebaa0; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #aa9d88; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #627c83; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #f2fcff; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #f2fcff; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #738e96; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #f2fcff; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #9ebaa0;
+ background: #627c83; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #9ebaa0; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #627c83; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #8f9a9e; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #d5dddf; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #f2fcff; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #9ebaa0; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #9ebaa0; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #f2fcff; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #879ea5; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #879ea5;
+ background-color: #879ea5; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #9ebaa0; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #d5dddf; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #9ebaa0;
+ border-color: #8faf91; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #9ebaa0; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #9ebaa0; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #9ebaa0; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #9ebaa0;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #9ebaa0; }
+
+.attachment.details .check {
+ background-color: #9ebaa0;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #9ebaa0;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #9ebaa0; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #9ebaa0; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #9ebaa0; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #738e96; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #738e96; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #9ebaa0;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #9ebaa0;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #9ebaa0;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #9ebaa0;
+ border-color: #80a583;
+ -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #9ebaa0; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #f2fcff; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #9ebaa0; }
+
+.star-rating .star {
+ color: #9ebaa0; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #627c83; }
diff --git a/wp-admin/css/colors/ocean/colors-rtl.min.css b/wp-admin/css/colors/ocean/colors-rtl.min.css
new file mode 100644
index 0000000..14c1d40
--- /dev/null
+++ b/wp-admin/css/colors/ocean/colors-rtl.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#738e96}input[type=radio]:checked:before{background:#738e96}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#8faf91;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd;box-shadow:inset 0 1px 0 #bccfbd}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #bccfbd,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#80a583;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1c8!important;background:#86a989!important;border-color:#719a74!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#738e96}.wp-core-ui .wp-ui-text-primary{color:#738e96}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#9ebaa0}.wp-core-ui .wp-ui-text-highlight{color:#9ebaa0}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#aa9d88}.wp-core-ui .wp-ui-text-notification{color:#aa9d88}.wp-core-ui .wp-ui-text-icon{color:#f2fcff}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#738e96}.view-switch a.current:before{color:#738e96}.view-switch a:hover:before{color:#aa9d88}.post-com-count:hover:after{border-top-color:#738e96}.post-com-count:hover span{color:#fff;background-color:#738e96}strong .post-com-count:after{border-top-color:#aa9d88}strong .post-com-count span{background-color:#aa9d88}#adminmenu,#adminmenuback,#adminmenuwrap{background:#738e96}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f2fcff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#9ebaa0}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#627c83}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#627c83}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#d5dddf}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#9ebaa0}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#9ebaa0}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#9ebaa0}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#aa9d88}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#627c83}#collapse-menu{color:#f2fcff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f2fcff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#738e96}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f2fcff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#9ebaa0;background:#627c83}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#9ebaa0}#wpadminbar .menupop .ab-sub-wrapper{background:#627c83}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#8f9a9e}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#d5dddf}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f2fcff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#9ebaa0}#wpadminbar #adminbarsearch:before{color:#f2fcff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#879ea5}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#879ea5;background-color:#879ea5}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#9ebaa0}#wpadminbar #wp-admin-bar-user-info .username{color:#d5dddf}.wp-pointer .wp-pointer-content h3{background-color:#9ebaa0;border-color:#8faf91}.wp-pointer .wp-pointer-content h3:before{color:#9ebaa0}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#9ebaa0}.media-item .bar,.media-progress-bar div{background-color:#9ebaa0}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #9ebaa0;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #9ebaa0}.attachment.details .check{background-color:#9ebaa0;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 3px #9ebaa0}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#9ebaa0}.theme-browser .theme.add-new-theme:hover span:after{color:#9ebaa0}.theme-filter.current,.theme-section.current{border-bottom-color:#738e96}body.more-filters-opened .more-filters{color:#fff;background-color:#738e96}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#9ebaa0;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#9ebaa0;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#9ebaa0;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#9ebaa0;border-color:#80a583;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#9ebaa0}div#wp-responsive-toggle a:before{color:#f2fcff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#9ebaa0}.star-rating .star{color:#9ebaa0}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#627c83}
\ No newline at end of file
diff --git a/wp-admin/css/colors/ocean/colors.css b/wp-admin/css/colors/ocean/colors.css
new file mode 100644
index 0000000..cd1d7e3
--- /dev/null
+++ b/wp-admin/css/colors/ocean/colors.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #738e96; }
+
+input[type=radio]:checked:before {
+ background: #738e96; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #9ebaa0;
+ border-color: #80a583;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #8faf91;
+ border-color: #719a74;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #bccfbd;
+ box-shadow: inset 0 1px 0 #bccfbd; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #bccfbd, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #bccfbd, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #80a583;
+ border-color: #719a74;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #c7d1c8 !important;
+ background: #86a989 !important;
+ border-color: #719a74 !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #738e96; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #738e96; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #9ebaa0; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #9ebaa0; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #aa9d88; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #aa9d88; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #f2fcff; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #738e96; }
+
+.view-switch a.current:before {
+ color: #738e96; }
+
+.view-switch a:hover:before {
+ color: #aa9d88; }
+
+.post-com-count:hover:after {
+ border-top-color: #738e96; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #738e96; }
+
+strong .post-com-count:after {
+ border-top-color: #aa9d88; }
+
+strong .post-com-count span {
+ background-color: #aa9d88; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #738e96; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #f2fcff; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #9ebaa0; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #627c83; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: #627c83; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #d5dddf; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #d5dddf; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #9ebaa0; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #9ebaa0; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-right-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #9ebaa0; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #aa9d88; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #627c83; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #f2fcff; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #f2fcff; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #738e96; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #f2fcff; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #9ebaa0;
+ background: #627c83; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #9ebaa0; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #627c83; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #8f9a9e; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #d5dddf; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #f2fcff; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #9ebaa0; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #9ebaa0; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #f2fcff; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #879ea5; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #879ea5;
+ background-color: #879ea5; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #9ebaa0; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #d5dddf; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #9ebaa0;
+ border-color: #8faf91; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #9ebaa0; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #9ebaa0; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #9ebaa0; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #9ebaa0;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #9ebaa0; }
+
+.attachment.details .check {
+ background-color: #9ebaa0;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #9ebaa0;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #9ebaa0; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #9ebaa0; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #9ebaa0; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #738e96; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #738e96; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #9ebaa0;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #9ebaa0;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #9ebaa0;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #9ebaa0;
+ border-color: #80a583;
+ -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #9ebaa0; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #f2fcff; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #9ebaa0; }
+
+.star-rating .star {
+ color: #9ebaa0; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #627c83; }
diff --git a/wp-admin/css/colors/ocean/colors.min.css b/wp-admin/css/colors/ocean/colors.min.css
new file mode 100644
index 0000000..8f72018
--- /dev/null
+++ b/wp-admin/css/colors/ocean/colors.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#738e96}input[type=radio]:checked:before{background:#738e96}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#8faf91;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd;box-shadow:inset 0 1px 0 #bccfbd}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #bccfbd,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#80a583;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1c8!important;background:#86a989!important;border-color:#719a74!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#738e96}.wp-core-ui .wp-ui-text-primary{color:#738e96}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#9ebaa0}.wp-core-ui .wp-ui-text-highlight{color:#9ebaa0}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#aa9d88}.wp-core-ui .wp-ui-text-notification{color:#aa9d88}.wp-core-ui .wp-ui-text-icon{color:#f2fcff}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#738e96}.view-switch a.current:before{color:#738e96}.view-switch a:hover:before{color:#aa9d88}.post-com-count:hover:after{border-top-color:#738e96}.post-com-count:hover span{color:#fff;background-color:#738e96}strong .post-com-count:after{border-top-color:#aa9d88}strong .post-com-count span{background-color:#aa9d88}#adminmenu,#adminmenuback,#adminmenuwrap{background:#738e96}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f2fcff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#9ebaa0}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#627c83}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#627c83}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#d5dddf}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#9ebaa0}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#9ebaa0}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#9ebaa0}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#aa9d88}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#627c83}#collapse-menu{color:#f2fcff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f2fcff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#738e96}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f2fcff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#9ebaa0;background:#627c83}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#9ebaa0}#wpadminbar .menupop .ab-sub-wrapper{background:#627c83}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#8f9a9e}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#d5dddf}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f2fcff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#9ebaa0}#wpadminbar #adminbarsearch:before{color:#f2fcff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#879ea5}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#879ea5;background-color:#879ea5}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#9ebaa0}#wpadminbar #wp-admin-bar-user-info .username{color:#d5dddf}.wp-pointer .wp-pointer-content h3{background-color:#9ebaa0;border-color:#8faf91}.wp-pointer .wp-pointer-content h3:before{color:#9ebaa0}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#9ebaa0}.media-item .bar,.media-progress-bar div{background-color:#9ebaa0}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #9ebaa0;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #9ebaa0}.attachment.details .check{background-color:#9ebaa0;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 3px #9ebaa0}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#9ebaa0}.theme-browser .theme.add-new-theme:hover span:after{color:#9ebaa0}.theme-filter.current,.theme-section.current{border-bottom-color:#738e96}body.more-filters-opened .more-filters{color:#fff;background-color:#738e96}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#9ebaa0;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#9ebaa0;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#9ebaa0;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#9ebaa0;border-color:#80a583;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#9ebaa0}div#wp-responsive-toggle a:before{color:#f2fcff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#9ebaa0}.star-rating .star{color:#9ebaa0}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#627c83}
\ No newline at end of file
diff --git a/wp-admin/css/colors/ocean/colors.scss b/wp-admin/css/colors/ocean/colors.scss
new file mode 100644
index 0000000..d52339c
--- /dev/null
+++ b/wp-admin/css/colors/ocean/colors.scss
@@ -0,0 +1,8 @@
+$base-color: #738e96;
+$icon-color: #f2fcff;
+$highlight-color: #9ebaa0;
+$notification-color: #aa9d88;
+
+$form-checked: $base-color;
+
+@import "../_admin.scss";
diff --git a/wp-admin/css/colors/sunrise/colors-rtl.css b/wp-admin/css/colors/sunrise/colors-rtl.css
new file mode 100644
index 0000000..2cdf11f
--- /dev/null
+++ b/wp-admin/css/colors/sunrise/colors-rtl.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #dd823b; }
+
+input[type=radio]:checked:before {
+ background: #dd823b; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #dd823b;
+ border-color: #c36922;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e8ac7c, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #e8ac7c, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #d97426;
+ border-color: #ad5d1e;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e59e66;
+ box-shadow: inset 0 1px 0 #e59e66; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #e59e66, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #e59e66, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #c36922;
+ border-color: #ad5d1e;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #d1cbc7 !important;
+ background: #cc6d23 !important;
+ border-color: #ad5d1e !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #cf4944; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #cf4944; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #dd823b; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #dd823b; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #ccaf0b; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #ccaf0b; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #f3f1f1; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #cf4944; }
+
+.view-switch a.current:before {
+ color: #cf4944; }
+
+.view-switch a:hover:before {
+ color: #ccaf0b; }
+
+.post-com-count:hover:after {
+ border-top-color: #cf4944; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #cf4944; }
+
+strong .post-com-count:after {
+ border-top-color: #ccaf0b; }
+
+strong .post-com-count span {
+ background-color: #ccaf0b; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #cf4944; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #f3f1f1; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #dd823b; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #be3631; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-left-color: #be3631; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #f0c8c6; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #f0c8c6; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #f7e3d3; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #f7e3d3; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-left-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #dd823b; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #ccaf0b; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #be3631; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #f3f1f1; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #f3f1f1; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #cf4944; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #f3f1f1; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #f7e3d3;
+ background: #be3631; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #f7e3d3; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #be3631; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #cf6b67; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #f0c8c6; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #f3f1f1; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #f7e3d3; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #f7e3d3; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #f3f1f1; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #d66560; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #d66560;
+ background-color: #d66560; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #f7e3d3; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #f0c8c6; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #dd823b;
+ border-color: #d97426; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #dd823b; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #dd823b; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #dd823b; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #dd823b;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #dd823b; }
+
+.attachment.details .check {
+ background-color: #dd823b;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #dd823b;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #dd823b; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #dd823b; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #dd823b; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #cf4944; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #cf4944; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #dd823b;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #dd823b;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #dd823b;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #dd823b;
+ border-color: #c36922;
+ -webkit-box-shadow: inset 0 1px 0 #e8ac7c, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #e8ac7c, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #dd823b; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #f3f1f1; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #dd823b; }
+
+.star-rating .star {
+ color: #dd823b; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #be3631; }
diff --git a/wp-admin/css/colors/sunrise/colors-rtl.min.css b/wp-admin/css/colors/sunrise/colors-rtl.min.css
new file mode 100644
index 0000000..9441bba
--- /dev/null
+++ b/wp-admin/css/colors/sunrise/colors-rtl.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#dd823b}input[type=radio]:checked:before{background:#dd823b}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#dd823b;border-color:#c36922;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#d97426;border-color:#ad5d1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59e66;box-shadow:inset 0 1px 0 #e59e66}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #e59e66,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #e59e66,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#c36922;border-color:#ad5d1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cbc7!important;background:#cc6d23!important;border-color:#ad5d1e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#cf4944}.wp-core-ui .wp-ui-text-primary{color:#cf4944}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#dd823b}.wp-core-ui .wp-ui-text-highlight{color:#dd823b}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#ccaf0b}.wp-core-ui .wp-ui-text-notification{color:#ccaf0b}.wp-core-ui .wp-ui-text-icon{color:#f3f1f1}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#cf4944}.view-switch a.current:before{color:#cf4944}.view-switch a:hover:before{color:#ccaf0b}.post-com-count:hover:after{border-top-color:#cf4944}.post-com-count:hover span{color:#fff;background-color:#cf4944}strong .post-com-count:after{border-top-color:#ccaf0b}strong .post-com-count span{background-color:#ccaf0b}#adminmenu,#adminmenuback,#adminmenuwrap{background:#cf4944}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f1f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#dd823b}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#be3631}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#be3631}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#f0c8c6}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#f7e3d3}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#f7e3d3}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#dd823b}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#ccaf0b}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#be3631}#collapse-menu{color:#f3f1f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f1f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#cf4944}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f3f1f1}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#f7e3d3;background:#be3631}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#f7e3d3}#wpadminbar .menupop .ab-sub-wrapper{background:#be3631}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#cf6b67}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#f0c8c6}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f1f1}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#f7e3d3}#wpadminbar #adminbarsearch:before{color:#f3f1f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#d66560}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#d66560;background-color:#d66560}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#f7e3d3}#wpadminbar #wp-admin-bar-user-info .username{color:#f0c8c6}.wp-pointer .wp-pointer-content h3{background-color:#dd823b;border-color:#d97426}.wp-pointer .wp-pointer-content h3:before{color:#dd823b}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#dd823b}.media-item .bar,.media-progress-bar div{background-color:#dd823b}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #dd823b;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #dd823b}.attachment.details .check{background-color:#dd823b;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b;box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #dd823b;box-shadow:0 0 0 1px #fff,0 0 0 3px #dd823b}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#dd823b}.theme-browser .theme.add-new-theme:hover span:after{color:#dd823b}.theme-filter.current,.theme-section.current{border-bottom-color:#cf4944}body.more-filters-opened .more-filters{color:#fff;background-color:#cf4944}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#dd823b;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#dd823b;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#dd823b;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#dd823b;border-color:#c36922;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#dd823b}div#wp-responsive-toggle a:before{color:#f3f1f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#dd823b}.star-rating .star{color:#dd823b}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#be3631}
\ No newline at end of file
diff --git a/wp-admin/css/colors/sunrise/colors.css b/wp-admin/css/colors/sunrise/colors.css
new file mode 100644
index 0000000..2328f3f
--- /dev/null
+++ b/wp-admin/css/colors/sunrise/colors.css
@@ -0,0 +1,341 @@
+/*
+ * Button mixin- creates 3d-ish button effect with correct
+ * highlights/shadows, based on a base color.
+ */
+html {
+ background: #f1f1f1; }
+
+/* Links */
+a {
+ color: #0074a2; }
+ a:hover, a:active, a:focus {
+ color: #0099d5; }
+
+#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover {
+ color: #0099d5; }
+
+/* Forms */
+input[type=checkbox]:checked:before {
+ color: #dd823b; }
+
+input[type=radio]:checked:before {
+ background: #dd823b; }
+
+.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active {
+ color: #0099d5; }
+
+/* Core UI */
+.wp-core-ui .button-primary {
+ background: #dd823b;
+ border-color: #c36922;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e8ac7c, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #e8ac7c, 0 1px 0 rgba(0, 0, 0, 0.15); }
+ .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus {
+ background: #d97426;
+ border-color: #ad5d1e;
+ color: white;
+ -webkit-box-shadow: inset 0 1px 0 #e59e66;
+ box-shadow: inset 0 1px 0 #e59e66; }
+ .wp-core-ui .button-primary:focus {
+ -webkit-box-shadow: inset 0 1px 0 #e59e66, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 1px 0 #e59e66, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary:active {
+ background: #c36922;
+ border-color: #ad5d1e;
+ color: white;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8); }
+ .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled {
+ color: #d1cbc7 !important;
+ background: #cc6d23 !important;
+ border-color: #ad5d1e !important;
+ text-shadow: none !important; }
+.wp-core-ui .wp-ui-primary {
+ color: #fff;
+ background-color: #cf4944; }
+.wp-core-ui .wp-ui-text-primary {
+ color: #cf4944; }
+.wp-core-ui .wp-ui-highlight {
+ color: #fff;
+ background-color: #dd823b; }
+.wp-core-ui .wp-ui-text-highlight {
+ color: #dd823b; }
+.wp-core-ui .wp-ui-notification {
+ color: #fff;
+ background-color: #ccaf0b; }
+.wp-core-ui .wp-ui-text-notification {
+ color: #ccaf0b; }
+.wp-core-ui .wp-ui-text-icon {
+ color: #f3f1f1; }
+
+/* List tables */
+.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background-color: #cf4944; }
+
+.view-switch a.current:before {
+ color: #cf4944; }
+
+.view-switch a:hover:before {
+ color: #ccaf0b; }
+
+.post-com-count:hover:after {
+ border-top-color: #cf4944; }
+
+.post-com-count:hover span {
+ color: #fff;
+ background-color: #cf4944; }
+
+strong .post-com-count:after {
+ border-top-color: #ccaf0b; }
+
+strong .post-com-count span {
+ background-color: #ccaf0b; }
+
+/* Admin Menu */
+#adminmenuback, #adminmenuwrap, #adminmenu {
+ background: #cf4944; }
+
+#adminmenu a {
+ color: #fff; }
+
+#adminmenu div.wp-menu-image:before {
+ color: #f3f1f1; }
+
+#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus {
+ color: #fff;
+ background-color: #dd823b; }
+
+#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+ color: #fff; }
+
+/* Active tabs use a bottom border color that matches the page background color. */
+.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover {
+ background-color: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+/* Admin Menu: submenu */
+#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu {
+ background: #be3631; }
+
+#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after {
+ border-right-color: #be3631; }
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ color: #f0c8c6; }
+
+#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a {
+ color: #f0c8c6; }
+ #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover {
+ color: #f7e3d3; }
+
+/* Admin Menu: current */
+#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a {
+ color: #fff; }
+ #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus {
+ color: #f7e3d3; }
+
+ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after {
+ border-right-color: #f1f1f1; }
+
+#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top {
+ color: #fff;
+ background: #dd823b; }
+
+#adminmenu li.wp-has-current-submenu div.wp-menu-image:before {
+ color: #fff; }
+
+/* Admin Menu: bubble */
+#adminmenu .awaiting-mod, #adminmenu .update-plugins {
+ color: #fff;
+ background: #ccaf0b; }
+
+#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins {
+ color: #fff;
+ background: #be3631; }
+
+/* Admin Menu: collapse button */
+#collapse-menu {
+ color: #f3f1f1; }
+
+#collapse-menu:hover {
+ color: #fff; }
+
+#collapse-button div:after {
+ color: #f3f1f1; }
+
+#collapse-menu:hover #collapse-button div:after {
+ color: #fff; }
+
+/* Admin Bar */
+#wpadminbar {
+ color: #fff;
+ background: #cf4944; }
+
+#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon {
+ color: #fff; }
+
+#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after {
+ color: #f3f1f1; }
+
+#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item {
+ color: #f7e3d3;
+ background: #be3631; }
+
+#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label {
+ color: #f7e3d3; }
+
+#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #fff; }
+
+/* Admin Bar: submenu */
+#wpadminbar .menupop .ab-sub-wrapper {
+ background: #be3631; }
+
+#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu {
+ background: #cf6b67; }
+
+#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a {
+ color: #f0c8c6; }
+
+#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before {
+ color: #f3f1f1; }
+
+#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before {
+ color: #f7e3d3; }
+
+#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before {
+ color: #f7e3d3; }
+
+/* Admin Bar: search */
+#wpadminbar #adminbarsearch:before {
+ color: #f3f1f1; }
+
+#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus {
+ color: #fff;
+ background: #d66560; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder {
+ color: #fff;
+ opacity: 0.7; }
+
+/* Admin Bar: my account */
+#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img {
+ border-color: #d66560;
+ background-color: #d66560; }
+
+#wpadminbar #wp-admin-bar-user-info .display-name {
+ color: #fff; }
+
+#wpadminbar #wp-admin-bar-user-info a:hover .display-name {
+ color: #f7e3d3; }
+
+#wpadminbar #wp-admin-bar-user-info .username {
+ color: #f0c8c6; }
+
+/* Pointers */
+.wp-pointer .wp-pointer-content h3 {
+ background-color: #dd823b;
+ border-color: #d97426; }
+
+.wp-pointer .wp-pointer-content h3:before {
+ color: #dd823b; }
+
+.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-top .wp-pointer-arrow-inner, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner {
+ border-bottom-color: #dd823b; }
+
+/* Media */
+.media-item .bar, .media-progress-bar div {
+ background-color: #dd823b; }
+
+.details.attachment {
+ -webkit-box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #dd823b;
+ box-shadow: inset 0 0 0 3px #fff, inset 0 0 0 7px #dd823b; }
+
+.attachment.details .check {
+ background-color: #dd823b;
+ -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b;
+ box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b; }
+
+.media-selection .attachment.selection.details .thumbnail {
+ -webkit-box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #dd823b;
+ box-shadow: 0px 0px 0px 1px #fff, 0px 0px 0px 3px #dd823b; }
+
+/* Themes */
+.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after {
+ background: #dd823b; }
+
+.theme-browser .theme.add-new-theme:hover span:after {
+ color: #dd823b; }
+
+.theme-section.current, .theme-filter.current {
+ border-bottom-color: #cf4944; }
+
+body.more-filters-opened .more-filters {
+ color: #fff;
+ background-color: #cf4944; }
+
+body.more-filters-opened .more-filters:before {
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus {
+ background-color: #dd823b;
+ color: #fff; }
+
+body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before {
+ color: #fff; }
+
+/* Widgets */
+.widgets-chooser li.widgets-chooser-selected {
+ background-color: #dd823b;
+ color: #fff; }
+
+.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before {
+ color: #fff; }
+
+/* Customize */
+#customize-theme-controls .widget-area-select .selected {
+ background-color: #dd823b;
+ color: #fff; }
+
+/* jQuery UI Slider */
+.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus {
+ background: #dd823b;
+ border-color: #c36922;
+ -webkit-box-shadow: inset 0 1px 0 #e8ac7c, 0 1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 1px 0 #e8ac7c, 0 1px 0 rgba(0, 0, 0, 0.15); }
+
+/* Thickbox: Plugin information */
+#sidemenu a.current {
+ background: #f1f1f1;
+ border-bottom-color: #f1f1f1; }
+
+#plugin-information .action-button {
+ background: #dd823b; }
+
+/* Responsive Component */
+div#wp-responsive-toggle a:before {
+ color: #f3f1f1; }
+
+.wp-responsive-open div#wp-responsive-toggle a {
+ border-color: transparent;
+ background: #dd823b; }
+
+.star-rating .star {
+ color: #dd823b; }
+
+.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a {
+ background: #be3631; }
diff --git a/wp-admin/css/colors/sunrise/colors.min.css b/wp-admin/css/colors/sunrise/colors.min.css
new file mode 100644
index 0000000..e0d887e
--- /dev/null
+++ b/wp-admin/css/colors/sunrise/colors.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#dd823b}input[type=radio]:checked:before{background:#dd823b}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#dd823b;border-color:#c36922;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#d97426;border-color:#ad5d1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59e66;box-shadow:inset 0 1px 0 #e59e66}.wp-core-ui .button-primary:focus{-webkit-box-shadow:inset 0 1px 0 #e59e66,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 1px 0 #e59e66,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary:active{background:#c36922;border-color:#ad5d1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cbc7!important;background:#cc6d23!important;border-color:#ad5d1e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#cf4944}.wp-core-ui .wp-ui-text-primary{color:#cf4944}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#dd823b}.wp-core-ui .wp-ui-text-highlight{color:#dd823b}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#ccaf0b}.wp-core-ui .wp-ui-text-notification{color:#ccaf0b}.wp-core-ui .wp-ui-text-icon{color:#f3f1f1}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#cf4944}.view-switch a.current:before{color:#cf4944}.view-switch a:hover:before{color:#ccaf0b}.post-com-count:hover:after{border-top-color:#cf4944}.post-com-count:hover span{color:#fff;background-color:#cf4944}strong .post-com-count:after{border-top-color:#ccaf0b}strong .post-com-count span{background-color:#ccaf0b}#adminmenu,#adminmenuback,#adminmenuwrap{background:#cf4944}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f1f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#dd823b}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#be3631}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#be3631}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#f0c8c6}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#f7e3d3}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#f7e3d3}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#dd823b}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#ccaf0b}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#be3631}#collapse-menu{color:#f3f1f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f1f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#cf4944}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f3f1f1}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#f7e3d3;background:#be3631}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#f7e3d3}#wpadminbar .menupop .ab-sub-wrapper{background:#be3631}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#cf6b67}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#f0c8c6}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f1f1}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#f7e3d3}#wpadminbar #adminbarsearch:before{color:#f3f1f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#d66560}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#d66560;background-color:#d66560}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#f7e3d3}#wpadminbar #wp-admin-bar-user-info .username{color:#f0c8c6}.wp-pointer .wp-pointer-content h3{background-color:#dd823b;border-color:#d97426}.wp-pointer .wp-pointer-content h3:before{color:#dd823b}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow-inner{border-bottom-color:#dd823b}.media-item .bar,.media-progress-bar div{background-color:#dd823b}.details.attachment{-webkit-box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #dd823b;box-shadow:inset 0 0 0 3px #fff,inset 0 0 0 7px #dd823b}.attachment.details .check{background-color:#dd823b;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b;box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b}.media-selection .attachment.selection.details .thumbnail{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #dd823b;box-shadow:0 0 0 1px #fff,0 0 0 3px #dd823b}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#dd823b}.theme-browser .theme.add-new-theme:hover span:after{color:#dd823b}.theme-filter.current,.theme-section.current{border-bottom-color:#cf4944}body.more-filters-opened .more-filters{color:#fff;background-color:#cf4944}body.more-filters-opened .more-filters:before{color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:hover{background-color:#dd823b;color:#fff}body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover:before{color:#fff}.widgets-chooser li.widgets-chooser-selected{background-color:#dd823b;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#dd823b;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#dd823b;border-color:#c36922;-webkit-box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ac7c,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#dd823b}div#wp-responsive-toggle a:before{color:#f3f1f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#dd823b}.star-rating .star{color:#dd823b}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#be3631}
\ No newline at end of file
diff --git a/wp-admin/css/colors/sunrise/colors.scss b/wp-admin/css/colors/sunrise/colors.scss
new file mode 100644
index 0000000..5dd8d82
--- /dev/null
+++ b/wp-admin/css/colors/sunrise/colors.scss
@@ -0,0 +1,6 @@
+$base-color: #cf4944;
+$highlight-color: #dd823b;
+$notification-color: #ccaf0b;
+$menu-submenu-focus-text: lighten( $highlight-color, 35% );
+
+@import "../_admin.scss";
diff --git a/wp-admin/css/common-rtl.css b/wp-admin/css/common-rtl.css
new file mode 100644
index 0000000..7e973cb
--- /dev/null
+++ b/wp-admin/css/common-rtl.css
@@ -0,0 +1,3255 @@
+/* 2 column liquid layout */
+#wpwrap {
+ height: auto;
+ min-height: 100%;
+ width: 100%;
+ position: relative;
+ -webkit-font-smoothing: subpixel-antialiased;
+}
+
+#wpcontent {
+ height: 100%;
+ padding-right: 20px;
+}
+
+#wpcontent,
+#wpfooter {
+ margin-right: 160px;
+}
+
+.folded #wpcontent,
+.folded #wpfooter {
+ margin-right: 36px;
+}
+
+#wpbody-content {
+ padding-bottom: 65px;
+ float: right;
+ width: 100%;
+ overflow: visible !important;
+}
+
+/* inner 2 column liquid layout */
+
+.inner-sidebar {
+ float: left;
+ clear: left;
+ display: none;
+ width: 281px;
+ position: relative;
+}
+
+.columns-2 .inner-sidebar {
+ margin-left: auto;
+ width: 286px;
+ display: block;
+}
+
+.inner-sidebar #side-sortables,
+.columns-2 .inner-sidebar #side-sortables {
+ min-height: 300px;
+ width: 280px;
+ padding: 0;
+}
+
+.has-right-sidebar .inner-sidebar {
+ display: block;
+}
+
+.has-right-sidebar #post-body {
+ float: right;
+ clear: right;
+ width: 100%;
+ margin-left: -2000px;
+}
+
+.has-right-sidebar #post-body-content {
+ margin-left: 300px;
+ float: none;
+ width: auto;
+}
+
+/* 2 columns main area */
+
+#col-container,
+#col-left,
+#col-right {
+ overflow: hidden;
+ padding: 0;
+ margin: 0;
+}
+
+#col-left {
+ width: 35%;
+}
+
+#col-right {
+ float: left;
+ clear: left;
+ width: 65%;
+}
+
+.col-wrap {
+ padding: 0 7px;
+}
+
+/* utility classes */
+.alignleft {
+ float: right;
+}
+
+.alignright {
+ float: left;
+}
+
+.textleft {
+ text-align: right;
+}
+
+.textright {
+ text-align: left;
+}
+
+.clear {
+ clear: both;
+}
+
+/* Hide visually but not from screen readers */
+.screen-reader-text,
+.screen-reader-text span,
+.ui-helper-hidden-accessible {
+ position: absolute;
+ margin: -1px;
+ padding: 0;
+ height: 1px;
+ width: 1px;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
+ border: 0;
+}
+
+.screen-reader-shortcut {
+ position: absolute;
+ top: -1000em;
+}
+
+.screen-reader-shortcut:focus {
+ right: 6px;
+ top: -25px;
+ height: auto;
+ width: auto;
+ display: block;
+ font-size: 14px;
+ font-weight: 600;
+ padding: 15px 23px 14px;
+ background: #f1f1f1;
+ color: #21759b;
+ z-index: 100000;
+ line-height: normal;
+ -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6);
+ box-shadow: 0 0 2px 2px rgba(0,0,0,.6);
+ text-decoration: none;
+ outline: none;
+}
+
+.hidden,
+.js .closed .inside,
+.js .hide-if-js,
+.no-js .hide-if-no-js,
+.js.wp-core-ui .hide-if-js,
+.js .wp-core-ui .hide-if-js,
+.no-js.wp-core-ui .hide-if-no-js,
+.no-js .wp-core-ui .hide-if-no-js {
+ display: none;
+}
+
+/* @todo: Take a second look. Large chunks of shared color, from the colors.css merge */
+.widget-top,
+.menu-item-handle,
+.widget-inside,
+#menu-settings-column .accordion-container,
+#menu-management .menu-edit,
+.manage-menus,
+table.widefat,
+.stuffbox,
+p.popular-tags,
+.widgets-holder-wrap,
+.wp-editor-container,
+.popular-tags,
+.feature-filter,
+.imgedit-group {
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+}
+
+table.widefat,
+.wp-editor-container,
+.stuffbox,
+p.popular-tags,
+.widgets-holder-wrap,
+.popular-tags,
+.feature-filter,
+.imgedit-group {
+ background: #fff;
+}
+
+/* general */
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+
+html {
+ background: #f1f1f1;
+}
+
+body {
+ color: #444;
+ font-family: "Open Sans", sans-serif;
+ font-size: 13px;
+ line-height: 1.4em;
+ min-width: 600px;
+}
+
+body.iframe {
+ min-width: 0;
+ padding-top: 1px;
+}
+
+body.modal-open {
+ overflow: hidden;
+}
+
+body.mobile.modal-open #wpwrap {
+ overflow: hidden;
+ height: 100%;
+}
+
+iframe,
+img {
+ border: 0;
+}
+
+td {
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+ line-height: inherit;
+}
+
+a {
+ color: #0074a2;
+ -webkit-transition-property: border, background, color;
+ transition-property: border, background, color;
+ -webkit-transition-duration: .05s;
+ transition-duration: .05s;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+a,
+div {
+ outline: 0;
+}
+
+a:hover,
+a:active {
+ color: #2ea2cc;
+}
+
+a:focus {
+ color: #124964;
+ -webkit-box-shadow:
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba(30, 140, 190, .8);
+ box-shadow:
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba(30, 140, 190, .8);
+}
+
+.ie8 a:focus {
+ outline: #5b9dd9 solid 1px;
+}
+
+#adminmenu a:focus,
+.screen-reader-text:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ outline: none;
+}
+
+blockquote,
+q {
+ quotes: none;
+}
+
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: '';
+ content: none;
+}
+
+p {
+ font-size: 13px;
+ line-height: 1.5;
+ margin: 1em 0;
+}
+
+blockquote {
+ margin: 1em;
+}
+
+li,
+dd {
+ margin-bottom: 6px;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ display: block;
+ font-weight: 600;
+}
+
+h1 {
+ font-size: 2em;
+ margin: .67em 0;
+}
+
+h2 {
+ color: #222;
+ font-size: 1.5em;
+ margin: .83em 0;
+ font-weight: 400;
+}
+
+h3 {
+ color: #222;
+ font-size: 1.3em;
+ margin: 1em 0;
+}
+
+h4 {
+ font-size: 1em;
+ margin: 1.33em 0;
+}
+
+h5 {
+ font-size: 0.83em;
+ margin: 1.67em 0;
+}
+
+h6 {
+ font-size: 0.67em;
+ margin: 2.33em 0;
+}
+
+ul,
+ol {
+ padding: 0;
+}
+
+ul {
+ list-style: none;
+}
+
+ol {
+ list-style-type: decimal;
+ margin-right: 2em;
+}
+
+ul.ul-disc {
+ list-style: disc outside;
+}
+
+ul.ul-square {
+ list-style: square outside;
+}
+
+ol.ol-decimal {
+ list-style: decimal outside;
+}
+
+ul.ul-disc,
+ul.ul-square,
+ol.ol-decimal {
+ margin-right: 1.8em;
+}
+
+ul.ul-disc > li,
+ul.ul-square > li,
+ol.ol-decimal > li {
+ margin: 0 0 0.5em;
+}
+
+/* @noflip */
+.ltr {
+ direction: ltr;
+}
+
+/* @noflip */
+.code,
+code {
+ font-family: Consolas, Monaco, monospace;
+ direction: ltr;
+ unicode-bidi: embed;
+}
+
+kbd,
+code {
+ padding: 3px 5px 2px 5px;
+ margin: 0 1px;
+ background: #eaeaea;
+ background: rgba(0,0,0,0.07);
+ font-size: 13px;
+}
+
+.subsubsub {
+ list-style: none;
+ margin: 8px 0 0;
+ padding: 0;
+ font-size: 13px;
+ float: right;
+ color: #666;
+}
+
+.subsubsub a {
+ line-height: 2;
+ padding: .2em;
+ text-decoration: none;
+}
+
+.subsubsub a .count,
+.subsubsub a.current .count {
+ color: #999;
+ font-weight: normal;
+}
+
+.subsubsub a.current {
+ font-weight: 600;
+ border: none;
+}
+
+.subsubsub li {
+ display: inline-block;
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+
+/* .widefat - main style for tables */
+.widefat {
+ border-spacing: 0;
+ width: 100%;
+ clear: both;
+ margin: 0;
+}
+
+.widefat * {
+ word-wrap: break-word;
+}
+
+.widefat a {
+ text-decoration: none;
+}
+
+.widefat td,
+.widefat th {
+ padding: 8px 10px;
+}
+
+.widefat thead th {
+ border-bottom: 1px solid #e1e1e1;
+}
+
+.widefat tfoot th {
+ border-top: 1px solid #e1e1e1;
+ border-bottom: none;
+}
+
+.widefat .no-items td {
+ border-bottom-width: 0;
+}
+
+.widefat td {
+ vertical-align: top;
+}
+
+.widefat td,
+.widefat td p,
+.widefat td ol,
+.widefat td ul {
+ font-size: 13px;
+ line-height: 1.5em;
+}
+
+.widefat th {
+ text-align: right;
+ line-height: 1.3em;
+ font-size: 14px;
+}
+
+.widefat th input {
+ margin: 0 8px 0 0;
+ padding: 0;
+ vertical-align: text-top;
+}
+
+.widefat .check-column {
+ width: 2.2em;
+ padding: 6px 0 25px;
+ vertical-align: top;
+}
+
+.widefat th input[type=checkbox] {
+ margin-top: -1px;
+}
+
+.widefat tbody th.check-column {
+ padding: 9px 0 22px;
+}
+
+.widefat.media .check-column {
+ padding-top: 8px;
+}
+
+.widefat thead th.check-column,
+.widefat tbody th.check-column,
+.widefat tfoot th.check-column {
+ padding: 11px 3px 0 0;
+}
+
+.widefat thead th.check-column {
+ padding-top: 10px;
+}
+
+.update-php div.updated,
+.update-php div.error {
+ margin-right: 0;
+}
+
+.no-js .widefat thead .check-column input,
+.no-js .widefat tfoot .check-column input {
+ display: none;
+}
+
+.widefat .num,
+.column-comments,
+.column-links,
+.column-posts {
+ text-align: center;
+}
+
+.widefat th#comments {
+ vertical-align: middle;
+}
+
+.wrap {
+ margin: 10px 2px 0 20px;
+}
+
+.attention {
+ color: #2ea2cc;
+}
+
+.wrap h2,
+.subtitle {
+ font-weight: normal;
+ margin: 0;
+}
+
+.wrap h2 {
+ font-size: 23px;
+ font-weight: 400;
+ padding: 9px 0 4px 15px;
+ line-height: 29px;
+}
+
+.subtitle {
+ color: #777;
+ font-size: 14px;
+ padding-right: 25px;
+}
+
+.wrap .add-new-h2,
+.wrap .add-new-h2:active {
+ margin-right: 4px;
+ padding: 4px 8px;
+ position: relative;
+ top: -3px;
+ text-decoration: none;
+ border: none;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ background: #e0e0e0;
+ text-shadow: none;
+ font-weight: 600;
+ font-size: 13px;
+}
+
+.wrap .add-new-h2:hover {
+ background: #2ea2cc;
+ color: #fff;
+}
+
+.wrap h2.long-header {
+ padding-left: 0;
+}
+
+.wp-dialog {
+ background-color: #fff;
+}
+
+.widgets-chooser ul,
+#widgets-left .widget-in-question .widget-top,
+#available-widgets .widget-top:hover,
+div#widgets-right .widget-top:hover,
+#widgets-left .widget-top:hover {
+ border-color: #999;
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+}
+
+.sorthelper {
+ background-color: #ccf3fa;
+}
+
+.ac_match,
+.subsubsub a.current {
+ color: #000;
+}
+
+.alternate,
+.alt {
+ background-color: #f9f9f9;
+}
+
+.bar {
+ background-color: #e8e8e8;
+ border-left-color: #99d;
+}
+
+.media-upload-form label.form-help,
+td.help {
+ color: #9a9a9a;
+}
+
+/* Helper classes for plugins to leverage the active WordPress color scheme */
+
+.highlight {
+ background-color: #e4f2fd;
+ color: #000;
+}
+
+.wp-ui-primary {
+ color: #fff;
+ background-color: #333;
+}
+.wp-ui-text-primary {
+ color: #333;
+}
+
+.wp-ui-highlight {
+ color: white;
+ background-color: #1e8cbe;
+}
+.wp-ui-text-highlight {
+ color: #1e8cbe;
+}
+
+.wp-ui-notification {
+ color: #fff;
+ background-color: #d54e21;
+}
+.wp-ui-text-notification {
+ color: #d54e21;
+}
+
+.wp-ui-text-icon {
+ color: #999;
+}
+
+/*------------------------------------------------------------------------------
+ 1.0 - Text Styles
+------------------------------------------------------------------------------*/
+
+.widget .widget-top,
+.postbox .hndle,
+.stuffbox .hndle,
+.control-section .accordion-section-title,
+.sidebar-name,
+#nav-menu-header,
+#nav-menu-footer,
+.menu-item-handle,
+.checkbox,
+.side-info,
+#your-profile #rich_editing,
+.widefat thead th,
+.widefat tfoot th {
+ line-height: 1.4em;
+}
+
+.widget .widget-top,
+.menu-item-handle {
+ background: #fafafa;
+ color: #222;
+}
+
+.postbox .hndle,
+.stuffbox .hndle {
+ border-bottom: 1px solid #eee;
+}
+
+.quicktags,
+.search {
+ background-color: #ccc;
+ color: #000;
+ font-size: 12px;
+}
+
+.icon32 {
+ display: none;
+}
+
+/* @todo can we combine these into a class or use an existing dashicon one? */
+#welcome-panel.welcome-panel .welcome-panel-close:before,
+.tagchecklist span a:before,
+#bulk-titles div a:before {
+ background: none;
+ color: #bbb;
+ content: '\f153';
+ display: block !important;
+ font: normal 16px/1 'dashicons';
+ speak: none;
+ height: 20px;
+ text-align: center;
+ width: 20px;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+#welcome-panel.welcome-panel .welcome-panel-close:before {
+ margin: 0;
+}
+
+.tagchecklist span a:before,
+#bulk-titles div a:before {
+ margin: 2px 0;
+}
+
+#welcome-panel.welcome-panel .welcome-panel-close:hover:before,
+.tagchecklist span a:hover:before,
+#bulk-titles div a:hover:before {
+ color: #c00;
+}
+
+.key-labels label {
+ line-height: 24px;
+}
+
+strong, b {
+ font-weight: 600;
+}
+
+.pre {
+ /* https://developer.mozilla.org/en-US/docs/CSS/white-space */
+ white-space: pre-wrap; /* css-3 */
+ word-wrap: break-word; /* IE 5.5 - 7 */
+}
+
+.howto {
+ color: #666;
+ font-style: italic;
+ display: block;
+}
+
+p.install-help {
+ margin: 8px 0;
+ font-style: italic;
+}
+
+.no-break {
+ white-space: nowrap;
+}
+
+hr {
+ border: 0;
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #fafafa;
+}
+
+.row-actions span.delete a,
+.row-actions span.trash a,
+.row-actions span.spam a,
+.plugins a.delete,
+#all-plugins-table .plugins a.delete,
+#search-plugins-table .plugins a.delete,
+.submitbox .submitdelete,
+#media-items a.delete,
+#media-items a.delete-permanently,
+#nav-menu-footer .menu-delete {
+ color: #a00;
+}
+
+abbr.required,
+.file-error,
+.widget-control-remove:hover,
+.row-actions .delete a:hover,
+.row-actions .trash a:hover,
+.row-actions .spam a:hover,
+.plugins a.delete:hover,
+#all-plugins-table .plugins a.delete:hover,
+#search-plugins-table .plugins a.delete:hover,
+.submitbox .submitdelete:hover,
+#media-items a.delete:hover,
+#media-items a.delete-permanently:hover,
+#nav-menu-footer .menu-delete:hover {
+ color: #f00;
+ text-decoration: none;
+ border: none;
+}
+
+/*------------------------------------------------------------------------------
+ 3.0 - Actions
+------------------------------------------------------------------------------*/
+
+#major-publishing-actions {
+ padding: 10px;
+ clear: both;
+ border-top: 1px solid #ddd;
+ background: #f5f5f5;
+}
+
+#delete-action {
+ line-height: 28px;
+ vertical-align: middle;
+ text-align: right;
+ float: right;
+}
+
+#publishing-action {
+ text-align: left;
+ float: left;
+ line-height: 23px;
+}
+
+#publishing-action .spinner {
+ float: right;
+}
+
+#misc-publishing-actions {
+ padding: 6px 0 0;
+}
+
+.misc-pub-section {
+ padding: 6px 10px 8px;
+}
+
+#minor-publishing-actions {
+ padding: 10px 10px 0 10px;
+ text-align: left;
+}
+
+#save-post {
+ float: right;
+}
+
+.preview {
+ float: left;
+}
+
+#sticky-span {
+ margin-right: 18px;
+}
+
+.side-info {
+ margin: 0;
+ padding: 4px;
+ font-size: 11px;
+}
+
+.side-info h5 {
+ padding-bottom: 7px;
+ font-size: 14px;
+ margin: 12px 2px 5px;
+ border-bottom: 1px solid #dadada;
+}
+
+.side-info ul {
+ margin: 0;
+ padding-right: 18px;
+ list-style: square;
+ color: #666;
+}
+
+.approve,
+.unapproved .unapprove {
+ display: none;
+}
+
+.unapproved .approve,
+.spam .approve,
+.trash .approve {
+ display: inline;
+}
+
+td.action-links,
+th.action-links {
+ text-align: left;
+}
+
+/* Filter bar */
+.wp-filter {
+ display: inline-block;
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 12px 0 25px;
+ padding: 0 20px;
+ width: 100%;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ border: 1px solid #e5e5e5;
+ background: #fff;
+ color: #555;
+ font-size: 13px;
+}
+
+.wp-filter a {
+ text-decoration: none;
+}
+
+.filter-count {
+ display: inline-block;
+ vertical-align: middle;
+ min-width: 4em;
+}
+
+.title-count,
+.filter-count .count {
+ display: inline-block;
+ position: relative;
+ top: -1px;
+ padding: 4px 10px;
+ -webkit-border-radius: 30px;
+ border-radius: 30px;
+ background: #777;
+ color: #fff;
+ font-size: 14px;
+ font-weight: 600;
+}
+
+/* not a part of filter bar, but derived from it, so here for now */
+.title-count {
+ display: inline;
+ top: -3px;
+ margin-right: 5px;
+ margin-left: 20px;
+}
+
+.filter-items {
+ float: right;
+}
+
+.filter-links {
+ display: inline-block;
+ margin: 0;
+}
+
+.filter-links li {
+ display: inline-block;
+ margin: 0;
+}
+
+.filter-links li > a {
+ display: inline-block;
+ margin: 0 10px;
+ padding: 15px 0;
+ border-bottom: 4px solid #fff;
+ color: #666;
+ cursor: pointer;
+}
+
+.filter-links .current {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border-bottom: 4px solid #666;
+ color: #222;
+}
+
+.filter-links li > a:hover,
+.filter-links li > a:focus,
+.show-filters .filter-links a.current:hover,
+.show-filters .filter-links a.current:focus {
+ color: #2ea2cc;
+}
+
+.wp-filter .search-form {
+ float: left;
+ margin: 10px 0;
+}
+
+.wp-filter .search-form input[type="search"] {
+ margin: 0;
+ padding: 3px 5px;
+ width: 280px;
+ max-width: 100%;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.5;
+}
+
+.wp-filter .search-form select {
+ margin: 0;
+ height: 32px;
+ vertical-align: top;
+}
+
+.wp-filter .search-form.search-plugins {
+ display: inline-block;
+}
+
+.wp-filter .drawer-toggle {
+ display: inline-block;
+ margin: 0 10px;
+ padding: 4px 6px;
+ color: #666;
+ cursor: pointer;
+}
+
+.wp-filter .drawer-toggle:before {
+ display: inline-block;
+ vertical-align: top;
+ content: "\f111";
+ margin: 0 0 0 5px;
+ width: 16px;
+ height: 16px;
+ color: #777;
+ -webkit-transition: color .1s ease-in 0;
+ transition: color .1s ease-in 0;
+ font-family: "dashicons";
+ font-size: 16px;
+ line-height: 1;
+ text-align: center;
+ text-decoration: inherit;
+ font-weight: normal;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+}
+
+.wp-filter .drawer-toggle:hover,
+.wp-filter .drawer-toggle:hover:before {
+ color: #2ea2cc;
+}
+
+.wp-filter .drawer-toggle.current:before {
+ color: #fff;
+}
+
+.filter-drawer {
+ display: none;
+ margin: 0 -20px;
+ padding: 20px;
+ border-top: 1px solid #eee;
+ background: #fafafa;
+}
+
+.show-filters .filter-drawer {
+ display: block;
+ overflow: hidden;
+ width: 100%;
+}
+
+.show-filters .wp-filter .drawer-toggle:hover,
+.show-filters .wp-filter .drawer-toggle:focus {
+ background: rgb(46, 162, 204);
+}
+
+.show-filters .filter-links a.current {
+ border-bottom: none;
+}
+
+.show-filters .wp-filter .drawer-toggle {
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ border: none;
+ background: #777;
+ color: #fff;
+}
+
+.show-filters .wp-filter .drawer-toggle:before {
+ color: #fff;
+}
+
+.filter-group {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ float: right;
+ margin: 0 0 0 1%;
+ padding: 10px;
+ width: 24%;
+ background: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+}
+
+.filter-group h4 {
+ position: relative;
+ margin: 0;
+}
+
+.filter-drawer ol {
+ margin: 20px 0 0;
+ list-style-type: none;
+ font-size: 12px;
+}
+
+.filter-drawer li {
+ display: inline-block;
+ vertical-align: top;
+ margin: 5px 0;
+ padding-left: 25px;
+ width: 160px;
+ list-style-type: none;
+}
+
+.filter-drawer .buttons {
+ margin-bottom: 20px;
+}
+
+.filter-drawer .buttons .button span {
+ display: inline-block;
+ opacity: 0.8;
+ font-size: 12px;
+ text-indent: 10px;
+}
+
+.wp-filter .button.clear-filters {
+ display: none;
+ margin: 0 10px 20px 0;
+}
+
+.filtered-by {
+ display: none;
+ margin: 0;
+}
+
+.filtered-by > span {
+ font-weight: 600;
+}
+
+.filtered-by a {
+ margin-right: 10px;
+}
+
+.filtered-by .tags {
+ display: inline;
+}
+
+.filtered-by .tag {
+ margin: 0 5px;
+ padding: 4px 8px;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ background: #fff;
+ font-size: 11px;
+}
+
+.filters-applied .filter-group,
+.filters-applied .filter-drawer .buttons,
+.filters-applied .filter-drawer br {
+ display: none !important;
+}
+
+.filters-applied .filtered-by {
+ display: block;
+}
+
+.filters-applied .filter-drawer {
+ padding: 20px;
+}
+
+.show-filters .content-filterable,
+.show-filters.filters-applied.loading-content .content-filterable,
+.loading-content .content-filterable,
+.error .content-filterable {
+ display: none;
+}
+
+.show-filters.filters-applied .content-filterable {
+ display: block;
+}
+
+.loading-content .spinner {
+ display: block;
+ margin: 40px auto 0;
+ float: none;
+}
+
+@media only screen and (max-width: 1120px) {
+ .filter-drawer {
+ border-bottom: 1px solid #eee;
+ }
+
+ .filter-group {
+ margin-bottom: 0;
+ margin-top: 5px;
+ width: 100%;
+ }
+
+ .filter-group li {
+ margin: 10px 0;
+ }
+}
+
+@media only screen and (max-width: 1000px) {
+ .filter-items {
+ float: none;
+ }
+
+ .wp-filter .media-toolbar-primary,
+ .wp-filter .media-toolbar-secondary,
+ .wp-filter .search-form {
+ float: none; /* Remove float from media-views.css */
+ position: relative;
+ max-width: 100%;
+ }
+}
+
+@media only screen and (max-width: 782px) {
+ .filter-group li {
+ padding: 0;
+ width: 50%;
+ }
+}
+
+@media only screen and (max-width: 320px) {
+ .filter-count {
+ display: none;
+ }
+
+ .wp-filter .drawer-toggle {
+ margin: 10px 0;
+ }
+
+ .filter-group li,
+ .wp-filter .search-form input[type="search"] {
+ width: 100%;
+ }
+}
+
+/*------------------------------------------------------------------------------
+ 4.0 - Notifications
+------------------------------------------------------------------------------*/
+
+.notice,
+div.updated,
+div.error {
+ background: #fff;
+ border-right: 4px solid #fff;
+ -webkit-box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
+ box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
+ margin: 5px 15px 2px;
+ padding: 1px 12px;
+}
+
+.notice p,
+div.updated p,
+div.error p,
+.form-table td .notice p {
+ margin: 0.5em 0;
+ padding: 2px;
+}
+
+.notice-success,
+div.updated {
+ border-color: #7ad03a;
+}
+
+.notice-warning {
+ border-color: #ffba00;
+}
+
+.notice-error,
+div.error {
+ border-color: #dd3d36;
+}
+
+.notice-info {
+ border-color: #2ea2cc;
+}
+
+.wrap .notice,
+.wrap div.updated,
+.wrap div.error,
+.media-upload-form .notice,
+.media-upload-form div.error {
+ margin: 5px 0 15px;
+}
+
+#update-nag,
+.update-nag {
+ display: inline-block;
+ line-height: 19px;
+ padding: 11px 15px;
+ font-size: 14px;
+ text-align: right;
+ margin: 25px 2px 0 20px;
+ background-color: #fff;
+ border-right: 4px solid #ffba00;
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+}
+
+.update-message {
+ color: #000;
+}
+
+ul#dismissed-updates {
+ display: none;
+}
+
+form.upgrade {
+ margin-top: 8px;
+}
+
+form.upgrade .hint {
+ font-style: italic;
+ font-size: 85%;
+ margin: -0.5em 0 2em 0;
+}
+
+.update-php .spinner {
+ float: none;
+ margin: -4px 0;
+}
+
+#ajax-loading,
+.ajax-loading,
+.ajax-feedback,
+.imgedit-wait-spin,
+.list-ajax-loading { /* deprecated */
+ visibility: hidden;
+}
+
+#ajax-response.alignleft {
+ margin-right: 2em;
+}
+
+/* @todo: this does not need its own section anymore */
+/*------------------------------------------------------------------------------
+ 6.0 - Admin Header
+------------------------------------------------------------------------------*/
+#adminmenu a,
+#sidemenu a,
+#taglist a,
+#catlist a {
+ text-decoration: none;
+}
+
+/*------------------------------------------------------------------------------
+ 6.1 - Screen Options Tabs
+------------------------------------------------------------------------------*/
+
+#screen-options-wrap,
+#contextual-help-wrap {
+ margin: 0;
+ padding: 8px 20px 12px;
+ position: relative;
+}
+
+#contextual-help-wrap {
+ overflow: auto;
+ margin-right: 0 !important;
+}
+
+#screen-meta .screen-reader-text {
+ visibility: hidden;
+}
+
+#screen-meta-links {
+ margin: 0 0 0 20px;
+}
+
+#screen-meta-links a {
+ padding: 3px 16px 3px 6px;
+}
+
+#screen-meta-links a:focus {
+ outline: none;
+}
+
+/* screen options and help tabs revert */
+#screen-meta {
+ display: none;
+ margin: 0 0px -1px 20px;
+ position: relative;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-top: none;
+ -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.025);
+ box-shadow: 0 1px 0 rgba(0,0,0,.025);
+}
+
+#screen-options-link-wrap,
+#contextual-help-link-wrap {
+ float: left;
+ height: 28px;
+ margin: 0 6px 0 0;
+ border: 1px solid #ddd;
+ border-top: none;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1);
+}
+
+#screen-meta-links .screen-meta-toggle {
+ position: relative;
+ top: 0;
+}
+
+#screen-meta-links a {
+ color: #777;
+}
+
+#screen-meta-links a:hover,
+#screen-meta-links a:active,
+#screen-meta-links a:focus {
+ color: #333;
+}
+
+#screen-meta-links a.show-settings {
+ display: block;
+ font-size: 13px;
+ height: 22px;
+ line-height: 22px;
+ text-decoration: none;
+ z-index: 1;
+}
+
+#screen-meta-links a:after {
+ left: 0;
+ content: '\f140';
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0 0 0 5px;
+ bottom: 2px;
+ position: relative;
+ vertical-align: bottom;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #bbb;
+}
+
+#screen-meta-links a.screen-meta-active:after {
+ content: '\f142';
+}
+
+#screen-meta-links a.show-settings:hover {
+ text-decoration: none;
+}
+/* end screen options and help tabs */
+
+.toggle-arrow {
+ background-repeat: no-repeat;
+ background-position: top right;
+ background-color: transparent;
+ height: 22px;
+ line-height: 22px;
+ display: block;
+}
+
+.toggle-arrow-active {
+ background-position: bottom right;
+}
+
+#screen-options-wrap h5,
+#contextual-help-wrap h5 {
+ margin: 8px 0;
+ font-size: 13px;
+}
+
+.metabox-prefs label {
+ display: inline-block;
+ padding-left: 15px;
+ line-height: 30px;
+}
+
+.metabox-prefs label input[type=checkbox] {
+ margin-top: -4px;
+ margin-left: 6px;
+}
+
+.metabox-prefs label input {
+ margin: 0 2px 0 5px;
+}
+
+.metabox-prefs .columns-prefs label input {
+ margin: 0 2px;
+}
+
+.metabox-prefs label a {
+ display: none;
+}
+
+/*------------------------------------------------------------------------------
+ 6.2 - Help Menu
+------------------------------------------------------------------------------*/
+
+#contextual-help-wrap {
+ padding: 0;
+}
+
+#contextual-help-columns {
+ position: relative;
+}
+
+#contextual-help-back {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 150px;
+ left: 170px;
+ border: 1px solid #e1e1e1;
+ border-top: none;
+ border-bottom: none;
+ background: #f6fbfd;
+}
+
+#contextual-help-wrap.no-sidebar #contextual-help-back {
+ left: 0;
+ border-left-width: 0;
+ -webkit-border-bottom-left-radius: 2px;
+ border-bottom-left-radius: 2px;
+}
+
+.contextual-help-tabs {
+ float: right;
+ width: 150px;
+ margin: 0;
+}
+
+.contextual-help-tabs ul {
+ margin: 1em 0;
+}
+
+.contextual-help-tabs li {
+ margin-bottom: 0;
+ list-style-type: none;
+ border-style: solid;
+ border-width: 0 2px 0 0;
+ border-color: transparent;
+}
+
+.contextual-help-tabs a {
+ display: block;
+ padding: 5px 12px 5px 5px;
+ line-height: 18px;
+ text-decoration: none;
+ border: 1px solid transparent;
+ border-left: none;
+ border-right: none;
+}
+
+.contextual-help-tabs a:hover {
+ color: #333;
+}
+
+.contextual-help-tabs .active {
+ padding: 0;
+ margin: 0 0 0 -1px;
+ border-right: 2px solid #2ea2cc;
+ background: #f6fbfd;
+ -webkit-box-shadow: 0 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02);
+ box-shadow: 0 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02);
+}
+
+.contextual-help-tabs .active a {
+ border-color: #e1e1e1;
+ color: #333;
+}
+
+.contextual-help-tabs-wrap {
+ padding: 0 20px;
+ overflow: auto;
+}
+
+.help-tab-content {
+ display: none;
+ margin: 0 0 12px 22px;
+ line-height: 1.6em;
+}
+
+.help-tab-content.active {
+ display: block;
+}
+
+.help-tab-content ul li {
+ list-style-type: disc;
+ margin-right: 18px;
+}
+
+.contextual-help-sidebar {
+ width: 150px;
+ float: left;
+ padding: 0 12px 0 8px;
+ overflow: auto;
+}
+
+/*------------------------------------------------------------------------------
+ 8.0 - Layout Blocks
+------------------------------------------------------------------------------*/
+
+html.wp-toolbar {
+ padding-top: 32px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.narrow {
+ width: 70%;
+ margin-bottom: 40px;
+}
+
+.narrow p {
+ line-height: 150%;
+}
+
+.widefat th,
+.widefat td {
+ overflow: hidden;
+ color: #555;
+}
+
+.widefat th {
+ font-weight: normal;
+}
+
+.widefat thead tr th,
+.widefat tfoot tr th {
+ color: #333;
+}
+
+.widefat td p {
+ margin: 2px 0 0.8em;
+}
+
+.widefat p,
+.widefat ol,
+.widefat ul {
+ color: #333;
+}
+
+.widefat .column-comment p {
+ margin: 0.6em 0;
+}
+
+/* Screens with postboxes */
+.postbox-container {
+ float: right;
+}
+
+.postbox-container .meta-box-sortables {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+#wpbody-content .metabox-holder {
+ padding-top: 10px;
+}
+
+.metabox-holder .postbox-container .empty-container {
+ border: 3px dashed #bbb;
+ height: 250px;
+}
+
+.metabox-holder.columns-1 .postbox-container .empty-container,
+.columns-2 #postbox-container-3 .empty-container,
+.columns-2 #postbox-container-4 .empty-container,
+.columns-3 #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+}
+
+#post-body-content {
+ width: 100%;
+ min-width: 463px;
+ float: right;
+}
+
+#post-body.columns-2 #postbox-container-1 {
+ float: left;
+ margin-left: -300px;
+ width: 280px;
+}
+
+#post-body.columns-2 #side-sortables {
+ min-height: 250px;
+}
+
+/* one column on the dash */
+@media only screen and (max-width: 799px) {
+ #wpbody-content .metabox-holder .postbox-container .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+}
+
+.js .widget .widget-top,
+.js .postbox .hndle {
+ cursor: move;
+}
+
+.hndle a {
+ font-size: 11px;
+ font-weight: normal;
+}
+
+.postbox .handlediv {
+ float: left;
+ width: 27px;
+ height: 30px;
+}
+
+.js .postbox .handlediv {
+ cursor: pointer;
+}
+
+.sortable-placeholder {
+ border: 1px dashed #bbb;
+ margin-bottom: 20px;
+}
+
+.postbox,
+.stuffbox {
+ margin-bottom: 20px;
+ padding: 0;
+ line-height: 1;
+}
+
+/* user-select is not a part of the CSS standard - may change behavior in the future */
+.postbox .hndle,
+.stuffbox .hndle {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.postbox .inside,
+.stuffbox .inside {
+ padding: 0 12px 12px;
+ line-height: 1.4em;
+ font-size: 13px;
+}
+
+.postbox .inside {
+ margin: 11px 0;
+ position: relative;
+}
+
+.postbox .inside > p:last-child,
+.rss-widget ul li:last-child {
+ margin-bottom: 1px !important;
+}
+
+.postbox.closed h3 {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.postbox table.form-table {
+ margin-bottom: 0;
+}
+
+.postbox table.widefat {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.temp-border {
+ border: 1px dotted #ccc;
+}
+
+.columns-prefs label {
+ padding: 0 5px;
+}
+
+/* @todo: what is this doing here */
+#dashboard_right_now .versions .b,
+#post-status-display,
+#post-visibility-display,
+#adminmenu .wp-submenu li.current,
+#adminmenu .wp-submenu li.current a,
+#adminmenu .wp-submenu li.current a:hover,
+.media-item .percent,
+.plugins .name,
+#pass-strength-result.strong,
+#pass-strength-result.short,
+#ed_reply_toolbar #ed_reply_strong,
+.item-controls .item-order a,
+.feature-filter .feature-name {
+ font-weight: 600;
+}
+
+/*------------------------------------------------------------------------------
+ 21.0 - Admin Footer
+------------------------------------------------------------------------------*/
+
+#wpfooter {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ padding: 10px 20px;
+ color: #777;
+}
+
+#wpfooter p {
+ font-size: 13px;
+ margin: 0;
+ line-height: 20px;
+}
+
+#footer-thankyou {
+ font-style: italic;
+}
+
+#wpfooter a {
+ text-decoration: none;
+}
+
+#wpfooter a:hover {
+ text-decoration: underline;
+}
+
+/*------------------------------------------------------------------------------
+ 25.0 - Tabbed Admin Screen Interface (Experimental)
+------------------------------------------------------------------------------*/
+
+.nav-tab {
+ border: 1px solid #ccc;
+ border-bottom: none;
+ background: #e4e4e4;
+ color: #555;
+ font-size: 12px;
+ line-height: 16px;
+ display: inline-block;
+ padding: 4px 14px 6px;
+ text-decoration: none;
+ margin: -4px 0 -1px 4px;
+}
+
+.nav-tab:hover {
+ background-color: #fff;
+ color: #464646;
+}
+
+.nav-tab-active {
+ color: #464646;
+}
+
+.nav-tab-active,
+.nav-tab-active:hover {
+ border-bottom: 1px solid #f1f1f1;
+ background: #f1f1f1;
+ color: #000;
+}
+
+h2.nav-tab-wrapper,
+h3.nav-tab-wrapper {
+ border-bottom: 1px solid #ccc;
+ padding-bottom: 0;
+ padding-right: 10px;
+}
+
+h2 .nav-tab {
+ padding: 6px 10px;
+ font-weight: bold;
+ font-size: 15px;
+ line-height: 24px;
+}
+
+
+/*------------------------------------------------------------------------------
+ 26.0 - Misc
+------------------------------------------------------------------------------*/
+
+.spinner {
+ background: url(../images/spinner.gif) no-repeat;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+ display: none;
+ float: left;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ width: 20px;
+ height: 20px;
+ margin: 2px 5px 0;
+}
+
+#template div {
+ margin-left: 190px;
+}
+
+.metabox-holder h3 {
+ font-size: 14px;
+ padding: 8px 12px;
+ margin: 0;
+ line-height: 1.4;
+}
+
+#templateside ul li a {
+ text-decoration: none;
+}
+
+#sidemenu {
+ margin: -30px 315px 0 15px;
+ list-style: none;
+ position: relative;
+ float: left;
+ padding-right: 10px;
+ font-size: 12px;
+}
+
+#sidemenu a {
+ padding: 0 7px;
+ display: block;
+ float: right;
+ line-height: 28px;
+ border-top: 1px solid #f9f9f9;
+ border-bottom: 1px solid #dfdfdf;
+ background-color: #f9f9f9;
+ -webkit-transition: none;
+ transition: none;
+}
+
+#sidemenu li {
+ display: inline;
+ line-height: 200%;
+ list-style: none;
+ text-align: center;
+ white-space: nowrap;
+ margin: 0;
+ padding: 0;
+}
+
+/* @todo: remove border radius */
+#sidemenu a.current {
+ font-weight: normal;
+ padding-right: 6px;
+ padding-left: 6px;
+ -webkit-border-top-right-radius: 3px;
+ border-top-right-radius: 3px;
+ -webkit-border-top-left-radius: 3px;
+ border-top-left-radius: 3px;
+ border: 1px solid #dfdfdf;
+ border-bottom-color: #f1f1f1;
+ background-color: #f1f1f1;
+ color: #000;
+}
+
+#sidemenu li a .count-0 {
+ display: none;
+}
+
+.plugin-install #description,
+.plugin-install-network #description {
+ width: 60%;
+}
+
+table .vers,
+table .column-visible,
+table .column-rating {
+ text-align: right;
+}
+
+.error-message {
+ color: red;
+ font-weight: 600;
+}
+
+/* Scrollbar fix for bulk upgrade iframe */
+body.iframe {
+ height: 98%;
+}
+
+/* Upgrader styles, Specific to Language Packs */
+.lp-show-latest p {
+ display: none;
+}
+.lp-show-latest p:last-child,
+.lp-show-latest .lp-error p {
+ display: block;
+}
+
+/* - Only used once or twice in all of WP - deprecate for global style
+------------------------------------------------------------------------------*/
+td.media-icon {
+ text-align: center;
+ width: 80px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+
+td.media-icon img {
+ max-width: 80px;
+ max-height: 60px;
+ width: auto;
+ height: auto;
+}
+
+td.image-icon img {
+ border: 1px solid rgba(0, 0, 0, 0.07);
+}
+
+#howto {
+ font-size: 11px;
+ margin: 0 5px;
+ display: block;
+}
+
+.importers td {
+ padding-left: 14px;
+}
+
+.importers {
+ font-size: 16px;
+ width: auto;
+}
+
+#post-body #post-body-content #namediv h3 {
+ margin-top: 0;
+}
+
+#namediv h3 label {
+ vertical-align: baseline;
+}
+
+#namediv table {
+ width: 100%;
+}
+
+#namediv td.first {
+ width: 10px;
+ white-space: nowrap;
+}
+
+#namediv input {
+ width: 98%;
+}
+
+#namediv p {
+ margin: 10px 0;
+}
+
+#submitdiv h3 {
+ margin-bottom: 0 !important;
+}
+
+/* - Used - but could/should be deprecated with a CSS reset
+------------------------------------------------------------------------------*/
+.zerosize {
+ height: 0;
+ width: 0;
+ margin: 0;
+ border: 0;
+ padding: 0;
+ overflow: hidden;
+ position: absolute;
+}
+
+br.clear {
+ height: 2px;
+ line-height: 2px;
+}
+
+.checkbox {
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+fieldset {
+ border: 0;
+ padding: 0;
+ margin: 0;
+}
+
+.post-categories {
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+
+.post-categories li {
+ display: inline;
+}
+
+/* Star Ratings - Back-compat for pre-3.8 */
+div.star-holder {
+ position: relative;
+ height: 17px;
+ width: 100px;
+ background: url(../images/stars.png?ver=20121108) repeat-x bottom right;
+}
+
+div.star-holder .star-rating {
+ background: url(../images/stars.png?ver=20121108) repeat-x top right;
+ height: 17px;
+ float: right;
+}
+
+/* Star Ratings */
+.star-rating {
+ white-space: nowrap;
+}
+.star-rating .star {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ -webkit-font-smoothing: antialiased;
+ font-size: 20px;
+ line-height: 1;
+ font-family: 'dashicons';
+ text-decoration: inherit;
+ font-weight: normal;
+ font-style: normal;
+ vertical-align: top;
+ -webkit-transition: color .1s ease-in 0;
+ transition: color .1s ease-in 0;
+ text-align: center;
+ color: #0074a2;
+}
+
+.star-rating .star-full:before {
+ content:'\f155';
+}
+
+.star-rating .star-half:before {
+ content:'\f459';
+}
+
+.rtl .star-rating .star-half {
+ -webkit-transform: rotateY(180deg);
+ -ms-transform: rotateY(180deg);
+ transform: rotateY(180deg);
+}
+
+.star-rating .star-empty:before {
+ content:'\f154';
+}
+
+div.action-links {
+ font-weight: normal;
+ margin: 6px 0 0;
+}
+
+/* Plugin install thickbox */
+#plugin-information {
+ background: #fff;
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ height: 100%;
+ padding: 0;
+}
+
+#plugin-information-scrollable {
+ overflow: auto;
+ height: 100%;
+}
+
+#plugin-information-title {
+ padding: 0 20px;
+ background: #f5f5f5;
+ font-size: 22px;
+ font-weight: 600;
+ line-height: 56px;
+ position: relative;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 56px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+#plugin-information-title.with-banner {
+ margin-left: 0;
+ height: 250px;
+ bottom: 250px;
+ -webkit-background-size: 100% auto;
+ background-size: 100% auto;
+}
+
+#plugin-information-title h2 {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 0;
+ margin: 0;
+ max-width: 680px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+#plugin-information-title.with-banner h2 {
+ font-family: "Helvetica Neue", sans-serif;
+ display: inline-block;
+ font-size: 30px;
+ line-height: 50px;
+ padding: 0 15px;
+ margin: 174px 10px 0 0;
+ color: #fff;
+ background: rgba( 30, 30, 30, 0.9 );
+ text-shadow: 0 1px 3px rgba( 0, 0, 0, 0.4 );
+ -webkit-box-shadow: 0 0 30px rgba( 255, 255, 255, 0.1 );
+ box-shadow: 0 0 30px rgba( 255, 255, 255, 0.1 );
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+}
+
+#plugin-information-title div.vignette {
+ display: none;
+}
+
+#plugin-information-title.with-banner div.vignette {
+ display: block;
+ float: left;
+ top: 0;
+ height: 250px;
+ width: 772px;
+ margin: 0 -20px;
+ background: transparent;
+ -webkit-box-shadow: inset 0 0 50px 4px rgba( 0, 0, 0, 0.2 ), inset 0 -1px 0 rgba( 0, 0, 0, 0.1 );
+ box-shadow: inset 0 0 50px 4px rgba( 0, 0, 0, 0.2 ), inset 0 -1px 0 rgba( 0, 0, 0, 0.1 );
+}
+
+#plugin-information-tabs {
+ padding: 0 16px;
+ position: relative;
+ left: 0;
+ right: 0;
+ height: 36px;
+ z-index: 1;
+ border-bottom: 1px solid #ddd;
+ background: #f3f3f3;
+}
+
+#plugin-information-tabs a {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin: 0;
+ height: 18px;
+ line-height: 18px;
+ font-size: 14px;
+ text-decoration: none;
+ -webkit-transition: none;
+ transition: none;
+}
+
+#plugin-information-tabs a.current {
+ margin: 0 -1px 0;
+ background: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: #fff;
+ padding-top: 8px;
+ color: #333;
+}
+
+#plugin-information-tabs.with-banner a.current {
+ border-top: none;
+ padding-top: 9px;
+}
+
+#plugin-information-tabs a:active,
+#plugin-information-tabs a:focus {
+ outline: none;
+}
+
+#plugin-information-content {
+ overflow: hidden; /* equal height column trick */
+ background: #fff;
+ position: relative;
+ top: 0;
+ left: 0;
+ right: 0;
+ min-height: 100%;
+ /* Height of title + tabs + install now */
+ min-height: -webkit-calc( 100% - 152px );
+ min-height: calc( 100% - 152px );
+}
+
+#plugin-information-content.with-banner {
+ /* Height of banner + tabs + install now */
+ min-height: -webkit-calc( 100% - 346px );
+ min-height: calc( 100% - 346px );
+}
+
+#section-holder {
+ position: relative;
+ top: 0;
+ left: 250px;
+ bottom: 0;
+ right: 0;
+ margin-left: 250px; /* FYI box */
+ padding: 10px 26px;
+ margin-bottom: -99930px; /* a bit less than the padding below to accommodate footer */
+ padding-bottom: 99999px; /* equal height column trick */
+}
+
+#section-holder .updated {
+ margin: 16px 0;
+}
+
+#plugin-information .fyi {
+ display: block;
+ float: left;
+ position: relative;
+ top: 0;
+ left: 0;
+ padding: 16px;
+ margin-bottom: -99930px; /* slightly less than the padding below to accommodate footer */
+ padding-bottom: 99999px; /* equal height column trick */
+ width: 217px;
+ border-right: 1px solid #ddd;
+ background: #f3f3f3;
+ color: #666;
+}
+
+#plugin-information .fyi strong {
+ color: #464646;
+}
+
+#plugin-information .fyi h3 {
+ font-weight: bold;
+ text-transform: uppercase;
+ font-size: 12px;
+ color: #666;
+ margin: 24px 0 8px;
+}
+
+#plugin-information .fyi h2 {
+ font-size: 0.9em;
+ margin-bottom: 0;
+ margin-left: 0;
+}
+
+#plugin-information .fyi ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+#plugin-information .fyi li {
+ margin: 0 0 10px;
+}
+
+#plugin-information .counter-container {
+ margin: 3px 0;
+}
+
+#plugin-information .counter-label {
+ float: right;
+ margin-left: 5px;
+ min-width: 55px;
+}
+
+#plugin-information .counter-back {
+ height: 17px;
+ width: 92px;
+ background-color: #ececec;
+ float: right;
+}
+
+#plugin-information .counter-bar {
+ height: 17px;
+ background-color: #fddb5a;
+ float: right;
+}
+
+#plugin-information .counter-count {
+ margin-right: 5px;
+}
+
+#plugin-information .fyi ul.contributors {
+ margin-top: 10px;
+}
+
+#plugin-information .fyi ul.contributors li {
+ display: inline-block;
+ margin-left: 8px;
+ vertical-align: middle;
+}
+
+#plugin-information .fyi ul.contributors li {
+ display: inline-block;
+ margin-left: 8px;
+ vertical-align: middle;
+}
+
+#plugin-information .fyi ul.contributors li img {
+ vertical-align: middle;
+ margin-left: 4px;
+}
+
+#plugin-information-footer {
+ padding: 15px 16px;
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ height: 28px;
+ border-top: 1px solid #ddd;
+ background: #f3f3f3;
+}
+
+/* @noflip */
+#plugin-information .section {
+ direction: ltr;
+}
+
+/* @noflip */
+#plugin-information .section ul,
+#plugin-information .section ol {
+ list-style-type: disc;
+ margin-left: 24px;
+}
+
+#plugin-information .section,
+#plugin-information .section p {
+ font-size: 14px;
+ line-height: 1.7;
+}
+
+#plugin-information #section-screenshots ol {
+ list-style: none;
+ margin: 0;
+}
+
+#plugin-information #section-screenshots li img {
+ vertical-align: text-top;
+ margin-top: 16px;
+ max-width: 100%;
+ width: auto;
+ height: auto;
+ -webkit-box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 );
+ box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 );
+}
+
+/* @noflip */
+#plugin-information #section-screenshots li p {
+ font-style: italic;
+ padding-left: 20px;
+}
+
+#plugin-information pre {
+ padding: 7px;
+ overflow: auto;
+ border: 1px solid #ccc;
+}
+
+/* @noflip */
+#plugin-information .review {
+ overflow: hidden; /* clearfix */
+ width: 100%;
+ margin-bottom: 20px;
+ border-bottom: 1px solid #e6e6e6;
+}
+
+#plugin-information .review-title-section {
+ overflow: hidden; /* clearfix */
+}
+
+/* @noflip */
+#plugin-information .review-title-section h4 {
+ display: inline-block;
+ float: left;
+ margin: 0 6px 0 0;
+}
+
+#plugin-information .reviewer-info p {
+ clear: both;
+ margin: 0;
+ padding-top: 2px;
+}
+
+/* @noflip */
+#plugin-information .reviewer-info .avatar {
+ float: left;
+ margin: 4px 6px 0 0;
+}
+
+/* @noflip */
+#plugin-information .reviewer-info .star-rating {
+ float: left;
+}
+
+/* @noflip */
+#plugin-information .review-meta {
+ float: left;
+ margin-left: 0.75em;
+}
+
+/* @noflip */
+#plugin-information .review-body {
+ float: left;
+ width: 100%;
+}
+
+.plugin-version-author-uri {
+ font-size: 13px;
+}
+
+@media screen and ( max-width: 771px ) {
+ #plugin-information-title.with-banner {
+ height: 100px;
+ bottom: 100px;
+ }
+
+ #plugin-information-title.with-banner h2 {
+ margin-top: 30px;
+ font-size: 20px;
+ line-height: 40px;
+ max-width: 85%;
+ }
+
+ #plugin-information-title.with-banner div.vignette {
+ height: 100px;
+ bottom: 100px;
+ width: 800%;
+ }
+
+ #plugin-information-tabs {
+ overflow: hidden; /* clearfix */
+ padding: 0;
+ height: auto; /* let tabs wrap */
+ }
+
+ #plugin-information-tabs a.current {
+ margin-bottom: 0;
+ border-bottom: none;
+ }
+
+ #plugin-information .fyi {
+ float: none;
+ border: 1px solid #ddd;
+ position: static;
+ width: auto;
+ margin: 26px 26px 0;
+ padding-bottom: 0; /* reset from the two column height fix */
+ }
+
+ #section-holder {
+ position: static;
+ margin: 0;
+ padding-bottom: 70px; /* reset from the two column height fix, plus accomodate footer */
+ }
+
+ #plugin-information .fyi h3,
+ #plugin-information .fyi small {
+ display: none;
+ }
+
+ #plugin-information-footer {
+ padding: 12px 16px 0;
+ height: 46px;
+ }
+}
+
+/* Thickbox for Plugin Install screen */
+body.plugin-install-php #TB_window,
+body.import-php #TB_window,
+body.plugins-php #TB_window,
+body.update-core-php #TB_window,
+body.index-php #TB_window {
+ background: #fcfcfc url( ../images/spinner.gif ) no-repeat center;
+}
+
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+
+ body.plugin-install-php #TB_window,
+ body.import-php #TB_window,
+ body.plugins-php #TB_window,
+ body.update-core-php #TB_window,
+ body.index-php #TB_window {
+ background: #fcfcfc url( ../images/spinner-2x.gif ) no-repeat center;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+ }
+}
+
+body.plugin-install-php #TB_title,
+body.import-php #TB_title,
+body.plugins-php #TB_title,
+body.update-core-php #TB_title,
+body.index-php #TB_title {
+ float: right;
+ height: 1px;
+}
+
+body.plugin-install-php #TB_ajaxWindowTitle,
+body.import-php #TB_ajaxWindowTitle,
+body.plugins-php #TB_ajaxWindowTitle,
+body.update-core-php #TB_ajaxWindowTitle,
+body.index-php #TB_ajaxWindowTitle {
+ display: none;
+}
+
+body.plugin-install-php .tb-close-icon,
+body.import-php .tb-close-icon,
+body.plugins-php .tb-close-icon,
+body.update-core-php .tb-close-icon,
+body.index-php .tb-close-icon {
+ right: auto;
+ left: -30px;
+ color: #eee;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+body.plugin-install-php #TB_closeWindowButton:focus,
+body.plugin-install-php #TB_closeWindowButton:focus .tb-close-icon,
+body.plugin-install-php .tb-close-icon:focus,
+body.plugin-install-php .tb-close-icon:hover,
+body.import-php #TB_closeWindowButton:focus,
+body.import-php #TB_closeWindowButton:focus .tb-close-icon,
+body.import-php .tb-close-icon:focus,
+body.import-php .tb-close-icon:hover,
+body.plugins-php #TB_closeWindowButton:focus,
+body.plugins-php #TB_closeWindowButton:focus .tb-close-icon,
+body.plugins-php .tb-close-icon:focus,
+body.plugins-php .tb-close-icon:hover,
+body.update-core-php #TB_closeWindowButton:focus,
+body.update-core-php #TB_closeWindowButton:focus .tb-close-icon,
+body.update-core-php .tb-close-icon:focus,
+body.update-core-php .tb-close-icon:hover,
+body.index-php #TB_closeWindowButton:focus,
+body.index-php #TB_closeWindowButton:focus .tb-close-icon,
+body.index-php .tb-close-icon:focus,
+body.index-php .tb-close-icon:hover {
+ color: #2ea2cc;
+ outline: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+body.plugin-install-php .tb-close-icon:before,
+body.import-php .tb-close-icon:before,
+body.plugins-php .tb-close-icon:before,
+body.update-core-php .tb-close-icon:before,
+body.index-php .tb-close-icon:before {
+ content: "\f335";
+ font-size: 32px;
+}
+
+/* move plugin install close icon to top on narrow screens */
+@media screen and ( max-width: 830px ) {
+ body.plugin-install-php .tb-close-icon,
+ body.import-php .tb-close-icon,
+ body.plugins-php .tb-close-icon,
+ body.update-core-php .tb-close-icon,
+ body.index-php .tb-close-icon {
+ left: 0;
+ top: -30px;
+ }
+}
+
+/* @todo: move this. */
+img {
+ border: none;
+}
+
+/* Header */
+/* @todo: are these also specific to Press This? */
+#wphead {
+ border-bottom: 1px solid #dfdfdf;
+}
+
+#wphead h1 a {
+ color: #464646;
+}
+
+/* @todo: these seem misplaced */
+.js .meta-box-sortables .postbox:hover .handlediv {
+ margin-left: 0 !important;
+}
+
+/* Metabox collapse arrow indicators */
+.js .sidebar-name .sidebar-name-arrow:before,
+.js .meta-box-sortables .postbox .handlediv:before {
+ left: 12px;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 8px 10px;
+ top: 0;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+}
+
+.js #widgets-left .sidebar-name .sidebar-name-arrow {
+ display: none;
+}
+
+.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow,
+.js #widgets-left .sidebar-name:hover .sidebar-name-arrow {
+ display: block;
+}
+
+/* Show the arrow only on hover */
+.js .sidebar-name .sidebar-name-arrow:before,
+.js .meta-box-sortables .postbox .handlediv:before {
+ content: '\f142';
+}
+
+.js .widgets-holder-wrap.closed .sidebar-name-arrow:before,
+.js .meta-box-sortables .postbox.closed .handlediv:before {
+ content: '\f140';
+}
+
+.error a {
+ text-decoration: underline;
+}
+
+.updated a {
+ text-decoration: none;
+ padding-bottom: 2px;
+}
+
+/* @todo: appears to be Press This only and overridden */
+#photo-add-url-div input[type="text"] {
+ width: 300px;
+}
+
+/* Theme/Plugin Editor */
+.alignleft h3 {
+ margin: 0;
+}
+
+#template textarea {
+ font-family: Consolas, Monaco, monospace;
+ font-size: 13px;
+ width: 97%;
+ background: #f9f9f9;
+ outline: none;
+}
+
+/* @noflip */
+#template textarea,
+#docs-list {
+ direction: ltr;
+}
+
+#template p {
+ width: 97%;
+}
+
+#templateside {
+ float: left;
+ width: 190px;
+ word-wrap: break-word;
+}
+
+#templateside h3,
+#postcustomstuff p.submit {
+ margin: 0;
+}
+
+#templateside h4 {
+ margin: 1em 0 0;
+}
+
+#templateside ol,
+#templateside ul {
+ margin: .5em 0;
+ padding: 0;
+}
+
+#templateside li {
+ margin: 4px 0;
+}
+
+#templateside li a,
+.theme-editor-php .highlight {
+ display: block;
+ padding: 3px 12px 3px 3px;
+ text-decoration: none;
+}
+
+.theme-editor-php .highlight {
+ margin: -3px -12px -3px 3px;
+}
+
+#templateside .highlight {
+ border: none;
+ font-weight: bold;
+}
+
+.nonessential {
+ color: #666;
+ font-size: 11px;
+ font-style: italic;
+ padding-right: 12px;
+}
+
+#documentation {
+ margin-top: 10px;
+}
+
+#documentation label {
+ line-height: 22px;
+ vertical-align: baseline;
+ font-weight: 600;
+}
+
+.fileedit-sub {
+ padding: 10px 0 8px;
+ line-height: 180%;
+}
+
+/* @todo: can we use a common class for these? */
+.nav-menus-php .item-edit:before,
+.widget-top a.widget-action:after,
+.control-section .accordion-section-title:after,
+.accordion-section-title:after {
+ left: 0;
+ content: '\f140';
+ border: none;
+ background: none;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+}
+
+.widget-action,
+.handlediv,
+.item-edit,
+.sidebar-name-arrow,
+.accordion-section-title:after {
+ color: #aaa;
+}
+
+.widget-action:hover,
+.handlediv:hover,
+.item-edit:hover,
+.sidebar-name:hover .sidebar-name-arrow,
+.accordion-section-title:hover:after {
+ color: #777;
+}
+
+.widget-top a.widget-action:after {
+ padding: 12px 12px 11px;
+}
+
+.widget-top a.widget-action:focus:after {
+ -webkit-box-shadow: 0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);
+ box-shadow: 0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);
+}
+
+.nav-menus-php .item-edit:before {
+ line-height: 2.1;
+}
+
+.control-section .accordion-section-title:after,
+.accordion-section-title:after {
+ float: left;
+ left: 20px;
+ top: -2px;
+}
+
+.control-section.open .accordion-section-title:after,
+#customize-info.open .accordion-section-title:after,
+.nav-menus-php .menu-item-edit-active .item-edit:before,
+.widget.open .widget-top a.widget-action:after {
+ content: '\f142';
+}
+
+/*!
+ * jQuery UI Draggable/Sortable 1.11.2
+ * http://jqueryui.com
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+.ui-draggable-handle,
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+/* Accordion */
+.accordion-section {
+ border-bottom: 1px solid #dfdfdf;
+ margin: 0;
+}
+
+.accordion-section.open .accordion-section-content,
+.no-js .accordion-section .accordion-section-content {
+ display: block;
+}
+
+.accordion-section.open:hover {
+ border-bottom-color: #dfdfdf;
+}
+
+.accordion-section-content {
+ display: none;
+ padding: 10px 20px 15px;
+ overflow: hidden;
+ background: #fff;
+}
+
+.accordion-section-title {
+ margin: 0;
+ padding: 12px 15px 15px;
+ position: relative;
+ border-right: 1px solid #dfdfdf;
+ border-left: 1px solid #dfdfdf;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.js .accordion-section-title {
+ cursor: pointer;
+}
+
+.js .accordion-section-title:after {
+ position: absolute;
+ top: 12px;
+ left: 10px;
+ z-index: 1;
+}
+
+.accordion-section-title:focus {
+ outline: none;
+}
+
+.accordion-section-title:hover:after,
+.accordion-section-title:focus:after {
+ border-color: #aaa transparent;
+}
+
+.cannot-expand .accordion-section-title {
+ cursor: auto;
+}
+
+.cannot-expand .accordion-section-title:after {
+ display: none;
+}
+
+.control-section .accordion-section-title {
+ border-right: none;
+ border-left: none;
+ padding: 10px 14px 11px 10px;
+ line-height: 21px;
+ background: #fff;
+}
+
+.control-section .accordion-section-title:after {
+ top: 11px;
+}
+
+.js .control-section:hover .accordion-section-title,
+.js .control-section .accordion-section-title:hover,
+.js .control-section.open .accordion-section-title,
+.js .control-section .accordion-section-title:focus {
+ color: #222;
+ background: #f5f5f5;
+}
+
+.control-section.open .accordion-section-title {
+ /* When expanded */
+ border-bottom: 1px solid #dfdfdf;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/* @todo: de-duplication */
+@media only screen and (min-width: 769px) {
+ /* categories */
+ #col-left {
+ width: 35%;
+ }
+
+ #col-right {
+ width: 65%;
+ }
+}
+
+@media only screen and (max-width: 860px) {
+
+ /* categories */
+ #col-left {
+ width: 35%;
+ }
+
+ #col-right {
+ width: 65%;
+ }
+}
+
+@media only screen and (min-width: 980px) {
+
+ /* categories */
+ #col-left {
+ width: 35%;
+ }
+
+ #col-right {
+ width: 65%;
+ }
+}
+
+@media only screen and (max-width: 768px) {
+ /* categories */
+ #col-left {
+ width: 100%;
+ }
+
+ #col-right {
+ width: 100%;
+ }
+}
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ /* Back-compat for pre-3.8 */
+ div.star-holder,
+ div.star-holder .star-rating {
+ background: url(../images/stars-2x.png?ver=20121108) repeat-x bottom right;
+ -webkit-background-size: 21px 37px;
+ background-size: 21px 37px;
+ }
+
+ .spinner {
+ background-image: url(../images/spinner-2x.gif);
+ }
+
+ /* @todo: evaluate - most of these were likely replaced by dashicons */
+ .curtime #timestamp,
+ #screen-meta-links a.show-settings,
+ .widget-top a.widget-action,
+ .widget-top a.widget-action:hover,
+ .sidebar-name-arrow,
+ .sidebar-name:hover .sidebar-name-arrow,
+ .meta-box-sortables .postbox:hover .handlediv,
+ .tagchecklist span a,
+ #bulk-titles div a,
+ .tagchecklist span a:hover,
+ #bulk-titles div a:hover {
+ background: none !important;
+ }
+
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+@media screen and ( max-width: 782px ) {
+ html.wp-toolbar {
+ padding-top: 46px;
+ }
+
+ body {
+ min-width: 240px;
+ overflow-x: hidden;
+ }
+
+ body * {
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
+ }
+
+ #wpcontent {
+ position: relative;
+ margin-right: 0;
+ padding-right: 10px;
+ }
+
+ #wpbody-content {
+ padding-bottom: 100px;
+ }
+
+ .wrap {
+ margin-left: 12px;
+ margin-right: 0;
+ }
+
+ .col-wrap {
+ padding: 0;
+ }
+
+ /* Hidden Elements */
+ #screen-meta,
+ #screen-meta-links,
+ #collapse-menu,
+ .post-format-select {
+ display: none !important;
+ }
+
+ .wrap .add-new-h2, .wrap .add-new-h2:active {
+ padding: 10px 15px;
+ font-size: 14px;
+ }
+
+ .wp-color-result {
+ height: auto;
+ padding-right: 45px;
+ }
+
+ .wp-color-result:after {
+ font-size: 14px;
+ height: auto;
+ padding: 6px 14px;
+ }
+
+ /* Feedback Messages */
+ .wrap div.updated, .wrap div.error, .media-upload-form div.error {
+ margin: 20px 0 10px 0;
+ padding: 5px 10px;
+ font-size: 14px;
+ line-height: 175%;
+ }
+
+ .wrap .icon32 + h2 {
+ margin-top: -2px;
+ }
+
+ .wp-responsive-open #wpbody {
+ left: -190px;
+ }
+
+ code {
+ word-wrap: break-word;
+ }
+
+ /* General Metabox */
+ .postbox {
+ font-size: 14px;
+ }
+
+ .metabox-holder h3 {
+ padding: 12px;
+ }
+
+ .postbox .handlediv {
+ margin-top: 3px;
+ }
+
+ /* Subsubsub Nav */
+ .subsubsub {
+ font-size: 16px;
+ text-align: center;
+ margin-bottom: 15px;
+ }
+
+ /* Theme/Plugin File Editor */
+ #templateside {
+ float: none;
+ width: auto;
+ }
+
+ #templateside li {
+ margin: 0;
+ }
+
+ #templateside li a {
+ display: block;
+ padding: 5px;
+ }
+
+ #templateside .highlight {
+ padding: 5px;
+ margin-right: -5px;
+ margin-top: -5px;
+ }
+
+ #template div {
+ float: none;
+ margin: 0;
+ width: auto;
+ }
+
+ #template textarea {
+ width: 100%;
+ }
+
+ .fileedit-sub .alignright {
+ margin-top: 15px;
+ }
+
+ #wpfooter {
+ display: none;
+ }
+
+ #comments-form .checkforspam {
+ display: none;
+ }
+}
+
+/* Smartphone */
+@media screen and (max-width: 600px) {
+ /* Disable horizontal scroll when responsive menu is open
+ since we push the main content off to the right. */
+ #wpwrap.wp-responsive-open {
+ overflow-x: hidden;
+ }
+
+ html.wp-toolbar {
+ padding-top: 0;
+ }
+
+ #wpbody {
+ padding-top: 46px;
+ }
+
+ /* Keep full-width boxes on Edit Post page from causing horizontal scroll */
+ div#post-body.metabox-holder.columns-1 {
+ overflow-x: hidden;
+ }
+}
diff --git a/wp-admin/css/common.css b/wp-admin/css/common.css
new file mode 100644
index 0000000..969cc5f
--- /dev/null
+++ b/wp-admin/css/common.css
@@ -0,0 +1,3255 @@
+/* 2 column liquid layout */
+#wpwrap {
+ height: auto;
+ min-height: 100%;
+ width: 100%;
+ position: relative;
+ -webkit-font-smoothing: subpixel-antialiased;
+}
+
+#wpcontent {
+ height: 100%;
+ padding-left: 20px;
+}
+
+#wpcontent,
+#wpfooter {
+ margin-left: 160px;
+}
+
+.folded #wpcontent,
+.folded #wpfooter {
+ margin-left: 36px;
+}
+
+#wpbody-content {
+ padding-bottom: 65px;
+ float: left;
+ width: 100%;
+ overflow: visible !important;
+}
+
+/* inner 2 column liquid layout */
+
+.inner-sidebar {
+ float: right;
+ clear: right;
+ display: none;
+ width: 281px;
+ position: relative;
+}
+
+.columns-2 .inner-sidebar {
+ margin-right: auto;
+ width: 286px;
+ display: block;
+}
+
+.inner-sidebar #side-sortables,
+.columns-2 .inner-sidebar #side-sortables {
+ min-height: 300px;
+ width: 280px;
+ padding: 0;
+}
+
+.has-right-sidebar .inner-sidebar {
+ display: block;
+}
+
+.has-right-sidebar #post-body {
+ float: left;
+ clear: left;
+ width: 100%;
+ margin-right: -2000px;
+}
+
+.has-right-sidebar #post-body-content {
+ margin-right: 300px;
+ float: none;
+ width: auto;
+}
+
+/* 2 columns main area */
+
+#col-container,
+#col-left,
+#col-right {
+ overflow: hidden;
+ padding: 0;
+ margin: 0;
+}
+
+#col-left {
+ width: 35%;
+}
+
+#col-right {
+ float: right;
+ clear: right;
+ width: 65%;
+}
+
+.col-wrap {
+ padding: 0 7px;
+}
+
+/* utility classes */
+.alignleft {
+ float: left;
+}
+
+.alignright {
+ float: right;
+}
+
+.textleft {
+ text-align: left;
+}
+
+.textright {
+ text-align: right;
+}
+
+.clear {
+ clear: both;
+}
+
+/* Hide visually but not from screen readers */
+.screen-reader-text,
+.screen-reader-text span,
+.ui-helper-hidden-accessible {
+ position: absolute;
+ margin: -1px;
+ padding: 0;
+ height: 1px;
+ width: 1px;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
+ border: 0;
+}
+
+.screen-reader-shortcut {
+ position: absolute;
+ top: -1000em;
+}
+
+.screen-reader-shortcut:focus {
+ left: 6px;
+ top: -25px;
+ height: auto;
+ width: auto;
+ display: block;
+ font-size: 14px;
+ font-weight: 600;
+ padding: 15px 23px 14px;
+ background: #f1f1f1;
+ color: #21759b;
+ z-index: 100000;
+ line-height: normal;
+ -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6);
+ box-shadow: 0 0 2px 2px rgba(0,0,0,.6);
+ text-decoration: none;
+ outline: none;
+}
+
+.hidden,
+.js .closed .inside,
+.js .hide-if-js,
+.no-js .hide-if-no-js,
+.js.wp-core-ui .hide-if-js,
+.js .wp-core-ui .hide-if-js,
+.no-js.wp-core-ui .hide-if-no-js,
+.no-js .wp-core-ui .hide-if-no-js {
+ display: none;
+}
+
+/* @todo: Take a second look. Large chunks of shared color, from the colors.css merge */
+.widget-top,
+.menu-item-handle,
+.widget-inside,
+#menu-settings-column .accordion-container,
+#menu-management .menu-edit,
+.manage-menus,
+table.widefat,
+.stuffbox,
+p.popular-tags,
+.widgets-holder-wrap,
+.wp-editor-container,
+.popular-tags,
+.feature-filter,
+.imgedit-group {
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+}
+
+table.widefat,
+.wp-editor-container,
+.stuffbox,
+p.popular-tags,
+.widgets-holder-wrap,
+.popular-tags,
+.feature-filter,
+.imgedit-group {
+ background: #fff;
+}
+
+/* general */
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+
+html {
+ background: #f1f1f1;
+}
+
+body {
+ color: #444;
+ font-family: "Open Sans", sans-serif;
+ font-size: 13px;
+ line-height: 1.4em;
+ min-width: 600px;
+}
+
+body.iframe {
+ min-width: 0;
+ padding-top: 1px;
+}
+
+body.modal-open {
+ overflow: hidden;
+}
+
+body.mobile.modal-open #wpwrap {
+ overflow: hidden;
+ height: 100%;
+}
+
+iframe,
+img {
+ border: 0;
+}
+
+td {
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+ line-height: inherit;
+}
+
+a {
+ color: #0074a2;
+ -webkit-transition-property: border, background, color;
+ transition-property: border, background, color;
+ -webkit-transition-duration: .05s;
+ transition-duration: .05s;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+a,
+div {
+ outline: 0;
+}
+
+a:hover,
+a:active {
+ color: #2ea2cc;
+}
+
+a:focus {
+ color: #124964;
+ -webkit-box-shadow:
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba(30, 140, 190, .8);
+ box-shadow:
+ 0 0 0 1px #5b9dd9,
+ 0 0 2px 1px rgba(30, 140, 190, .8);
+}
+
+.ie8 a:focus {
+ outline: #5b9dd9 solid 1px;
+}
+
+#adminmenu a:focus,
+.screen-reader-text:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ outline: none;
+}
+
+blockquote,
+q {
+ quotes: none;
+}
+
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: '';
+ content: none;
+}
+
+p {
+ font-size: 13px;
+ line-height: 1.5;
+ margin: 1em 0;
+}
+
+blockquote {
+ margin: 1em;
+}
+
+li,
+dd {
+ margin-bottom: 6px;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ display: block;
+ font-weight: 600;
+}
+
+h1 {
+ font-size: 2em;
+ margin: .67em 0;
+}
+
+h2 {
+ color: #222;
+ font-size: 1.5em;
+ margin: .83em 0;
+ font-weight: 400;
+}
+
+h3 {
+ color: #222;
+ font-size: 1.3em;
+ margin: 1em 0;
+}
+
+h4 {
+ font-size: 1em;
+ margin: 1.33em 0;
+}
+
+h5 {
+ font-size: 0.83em;
+ margin: 1.67em 0;
+}
+
+h6 {
+ font-size: 0.67em;
+ margin: 2.33em 0;
+}
+
+ul,
+ol {
+ padding: 0;
+}
+
+ul {
+ list-style: none;
+}
+
+ol {
+ list-style-type: decimal;
+ margin-left: 2em;
+}
+
+ul.ul-disc {
+ list-style: disc outside;
+}
+
+ul.ul-square {
+ list-style: square outside;
+}
+
+ol.ol-decimal {
+ list-style: decimal outside;
+}
+
+ul.ul-disc,
+ul.ul-square,
+ol.ol-decimal {
+ margin-left: 1.8em;
+}
+
+ul.ul-disc > li,
+ul.ul-square > li,
+ol.ol-decimal > li {
+ margin: 0 0 0.5em;
+}
+
+/* @noflip */
+.ltr {
+ direction: ltr;
+}
+
+/* @noflip */
+.code,
+code {
+ font-family: Consolas, Monaco, monospace;
+ direction: ltr;
+ unicode-bidi: embed;
+}
+
+kbd,
+code {
+ padding: 3px 5px 2px 5px;
+ margin: 0 1px;
+ background: #eaeaea;
+ background: rgba(0,0,0,0.07);
+ font-size: 13px;
+}
+
+.subsubsub {
+ list-style: none;
+ margin: 8px 0 0;
+ padding: 0;
+ font-size: 13px;
+ float: left;
+ color: #666;
+}
+
+.subsubsub a {
+ line-height: 2;
+ padding: .2em;
+ text-decoration: none;
+}
+
+.subsubsub a .count,
+.subsubsub a.current .count {
+ color: #999;
+ font-weight: normal;
+}
+
+.subsubsub a.current {
+ font-weight: 600;
+ border: none;
+}
+
+.subsubsub li {
+ display: inline-block;
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+
+/* .widefat - main style for tables */
+.widefat {
+ border-spacing: 0;
+ width: 100%;
+ clear: both;
+ margin: 0;
+}
+
+.widefat * {
+ word-wrap: break-word;
+}
+
+.widefat a {
+ text-decoration: none;
+}
+
+.widefat td,
+.widefat th {
+ padding: 8px 10px;
+}
+
+.widefat thead th {
+ border-bottom: 1px solid #e1e1e1;
+}
+
+.widefat tfoot th {
+ border-top: 1px solid #e1e1e1;
+ border-bottom: none;
+}
+
+.widefat .no-items td {
+ border-bottom-width: 0;
+}
+
+.widefat td {
+ vertical-align: top;
+}
+
+.widefat td,
+.widefat td p,
+.widefat td ol,
+.widefat td ul {
+ font-size: 13px;
+ line-height: 1.5em;
+}
+
+.widefat th {
+ text-align: left;
+ line-height: 1.3em;
+ font-size: 14px;
+}
+
+.widefat th input {
+ margin: 0 0 0 8px;
+ padding: 0;
+ vertical-align: text-top;
+}
+
+.widefat .check-column {
+ width: 2.2em;
+ padding: 6px 0 25px;
+ vertical-align: top;
+}
+
+.widefat th input[type=checkbox] {
+ margin-top: -1px;
+}
+
+.widefat tbody th.check-column {
+ padding: 9px 0 22px;
+}
+
+.widefat.media .check-column {
+ padding-top: 8px;
+}
+
+.widefat thead th.check-column,
+.widefat tbody th.check-column,
+.widefat tfoot th.check-column {
+ padding: 11px 0 0 3px;
+}
+
+.widefat thead th.check-column {
+ padding-top: 10px;
+}
+
+.update-php div.updated,
+.update-php div.error {
+ margin-left: 0;
+}
+
+.no-js .widefat thead .check-column input,
+.no-js .widefat tfoot .check-column input {
+ display: none;
+}
+
+.widefat .num,
+.column-comments,
+.column-links,
+.column-posts {
+ text-align: center;
+}
+
+.widefat th#comments {
+ vertical-align: middle;
+}
+
+.wrap {
+ margin: 10px 20px 0 2px;
+}
+
+.attention {
+ color: #2ea2cc;
+}
+
+.wrap h2,
+.subtitle {
+ font-weight: normal;
+ margin: 0;
+}
+
+.wrap h2 {
+ font-size: 23px;
+ font-weight: 400;
+ padding: 9px 15px 4px 0;
+ line-height: 29px;
+}
+
+.subtitle {
+ color: #777;
+ font-size: 14px;
+ padding-left: 25px;
+}
+
+.wrap .add-new-h2,
+.wrap .add-new-h2:active {
+ margin-left: 4px;
+ padding: 4px 8px;
+ position: relative;
+ top: -3px;
+ text-decoration: none;
+ border: none;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ background: #e0e0e0;
+ text-shadow: none;
+ font-weight: 600;
+ font-size: 13px;
+}
+
+.wrap .add-new-h2:hover {
+ background: #2ea2cc;
+ color: #fff;
+}
+
+.wrap h2.long-header {
+ padding-right: 0;
+}
+
+.wp-dialog {
+ background-color: #fff;
+}
+
+.widgets-chooser ul,
+#widgets-left .widget-in-question .widget-top,
+#available-widgets .widget-top:hover,
+div#widgets-right .widget-top:hover,
+#widgets-left .widget-top:hover {
+ border-color: #999;
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+}
+
+.sorthelper {
+ background-color: #ccf3fa;
+}
+
+.ac_match,
+.subsubsub a.current {
+ color: #000;
+}
+
+.alternate,
+.alt {
+ background-color: #f9f9f9;
+}
+
+.bar {
+ background-color: #e8e8e8;
+ border-right-color: #99d;
+}
+
+.media-upload-form label.form-help,
+td.help {
+ color: #9a9a9a;
+}
+
+/* Helper classes for plugins to leverage the active WordPress color scheme */
+
+.highlight {
+ background-color: #e4f2fd;
+ color: #000;
+}
+
+.wp-ui-primary {
+ color: #fff;
+ background-color: #333;
+}
+.wp-ui-text-primary {
+ color: #333;
+}
+
+.wp-ui-highlight {
+ color: white;
+ background-color: #1e8cbe;
+}
+.wp-ui-text-highlight {
+ color: #1e8cbe;
+}
+
+.wp-ui-notification {
+ color: #fff;
+ background-color: #d54e21;
+}
+.wp-ui-text-notification {
+ color: #d54e21;
+}
+
+.wp-ui-text-icon {
+ color: #999;
+}
+
+/*------------------------------------------------------------------------------
+ 1.0 - Text Styles
+------------------------------------------------------------------------------*/
+
+.widget .widget-top,
+.postbox .hndle,
+.stuffbox .hndle,
+.control-section .accordion-section-title,
+.sidebar-name,
+#nav-menu-header,
+#nav-menu-footer,
+.menu-item-handle,
+.checkbox,
+.side-info,
+#your-profile #rich_editing,
+.widefat thead th,
+.widefat tfoot th {
+ line-height: 1.4em;
+}
+
+.widget .widget-top,
+.menu-item-handle {
+ background: #fafafa;
+ color: #222;
+}
+
+.postbox .hndle,
+.stuffbox .hndle {
+ border-bottom: 1px solid #eee;
+}
+
+.quicktags,
+.search {
+ background-color: #ccc;
+ color: #000;
+ font-size: 12px;
+}
+
+.icon32 {
+ display: none;
+}
+
+/* @todo can we combine these into a class or use an existing dashicon one? */
+#welcome-panel.welcome-panel .welcome-panel-close:before,
+.tagchecklist span a:before,
+#bulk-titles div a:before {
+ background: none;
+ color: #bbb;
+ content: '\f153';
+ display: block !important;
+ font: normal 16px/1 'dashicons';
+ speak: none;
+ height: 20px;
+ text-align: center;
+ width: 20px;
+ -webkit-font-smoothing: antialiased !important;
+}
+
+#welcome-panel.welcome-panel .welcome-panel-close:before {
+ margin: 0;
+}
+
+.tagchecklist span a:before,
+#bulk-titles div a:before {
+ margin: 2px 0;
+}
+
+#welcome-panel.welcome-panel .welcome-panel-close:hover:before,
+.tagchecklist span a:hover:before,
+#bulk-titles div a:hover:before {
+ color: #c00;
+}
+
+.key-labels label {
+ line-height: 24px;
+}
+
+strong, b {
+ font-weight: 600;
+}
+
+.pre {
+ /* https://developer.mozilla.org/en-US/docs/CSS/white-space */
+ white-space: pre-wrap; /* css-3 */
+ word-wrap: break-word; /* IE 5.5 - 7 */
+}
+
+.howto {
+ color: #666;
+ font-style: italic;
+ display: block;
+}
+
+p.install-help {
+ margin: 8px 0;
+ font-style: italic;
+}
+
+.no-break {
+ white-space: nowrap;
+}
+
+hr {
+ border: 0;
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #fafafa;
+}
+
+.row-actions span.delete a,
+.row-actions span.trash a,
+.row-actions span.spam a,
+.plugins a.delete,
+#all-plugins-table .plugins a.delete,
+#search-plugins-table .plugins a.delete,
+.submitbox .submitdelete,
+#media-items a.delete,
+#media-items a.delete-permanently,
+#nav-menu-footer .menu-delete {
+ color: #a00;
+}
+
+abbr.required,
+.file-error,
+.widget-control-remove:hover,
+.row-actions .delete a:hover,
+.row-actions .trash a:hover,
+.row-actions .spam a:hover,
+.plugins a.delete:hover,
+#all-plugins-table .plugins a.delete:hover,
+#search-plugins-table .plugins a.delete:hover,
+.submitbox .submitdelete:hover,
+#media-items a.delete:hover,
+#media-items a.delete-permanently:hover,
+#nav-menu-footer .menu-delete:hover {
+ color: #f00;
+ text-decoration: none;
+ border: none;
+}
+
+/*------------------------------------------------------------------------------
+ 3.0 - Actions
+------------------------------------------------------------------------------*/
+
+#major-publishing-actions {
+ padding: 10px;
+ clear: both;
+ border-top: 1px solid #ddd;
+ background: #f5f5f5;
+}
+
+#delete-action {
+ line-height: 28px;
+ vertical-align: middle;
+ text-align: left;
+ float: left;
+}
+
+#publishing-action {
+ text-align: right;
+ float: right;
+ line-height: 23px;
+}
+
+#publishing-action .spinner {
+ float: left;
+}
+
+#misc-publishing-actions {
+ padding: 6px 0 0;
+}
+
+.misc-pub-section {
+ padding: 6px 10px 8px;
+}
+
+#minor-publishing-actions {
+ padding: 10px 10px 0 10px;
+ text-align: right;
+}
+
+#save-post {
+ float: left;
+}
+
+.preview {
+ float: right;
+}
+
+#sticky-span {
+ margin-left: 18px;
+}
+
+.side-info {
+ margin: 0;
+ padding: 4px;
+ font-size: 11px;
+}
+
+.side-info h5 {
+ padding-bottom: 7px;
+ font-size: 14px;
+ margin: 12px 2px 5px;
+ border-bottom: 1px solid #dadada;
+}
+
+.side-info ul {
+ margin: 0;
+ padding-left: 18px;
+ list-style: square;
+ color: #666;
+}
+
+.approve,
+.unapproved .unapprove {
+ display: none;
+}
+
+.unapproved .approve,
+.spam .approve,
+.trash .approve {
+ display: inline;
+}
+
+td.action-links,
+th.action-links {
+ text-align: right;
+}
+
+/* Filter bar */
+.wp-filter {
+ display: inline-block;
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 12px 0 25px;
+ padding: 0 20px;
+ width: 100%;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ border: 1px solid #e5e5e5;
+ background: #fff;
+ color: #555;
+ font-size: 13px;
+}
+
+.wp-filter a {
+ text-decoration: none;
+}
+
+.filter-count {
+ display: inline-block;
+ vertical-align: middle;
+ min-width: 4em;
+}
+
+.title-count,
+.filter-count .count {
+ display: inline-block;
+ position: relative;
+ top: -1px;
+ padding: 4px 10px;
+ -webkit-border-radius: 30px;
+ border-radius: 30px;
+ background: #777;
+ color: #fff;
+ font-size: 14px;
+ font-weight: 600;
+}
+
+/* not a part of filter bar, but derived from it, so here for now */
+.title-count {
+ display: inline;
+ top: -3px;
+ margin-left: 5px;
+ margin-right: 20px;
+}
+
+.filter-items {
+ float: left;
+}
+
+.filter-links {
+ display: inline-block;
+ margin: 0;
+}
+
+.filter-links li {
+ display: inline-block;
+ margin: 0;
+}
+
+.filter-links li > a {
+ display: inline-block;
+ margin: 0 10px;
+ padding: 15px 0;
+ border-bottom: 4px solid #fff;
+ color: #666;
+ cursor: pointer;
+}
+
+.filter-links .current {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border-bottom: 4px solid #666;
+ color: #222;
+}
+
+.filter-links li > a:hover,
+.filter-links li > a:focus,
+.show-filters .filter-links a.current:hover,
+.show-filters .filter-links a.current:focus {
+ color: #2ea2cc;
+}
+
+.wp-filter .search-form {
+ float: right;
+ margin: 10px 0;
+}
+
+.wp-filter .search-form input[type="search"] {
+ margin: 0;
+ padding: 3px 5px;
+ width: 280px;
+ max-width: 100%;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.5;
+}
+
+.wp-filter .search-form select {
+ margin: 0;
+ height: 32px;
+ vertical-align: top;
+}
+
+.wp-filter .search-form.search-plugins {
+ display: inline-block;
+}
+
+.wp-filter .drawer-toggle {
+ display: inline-block;
+ margin: 0 10px;
+ padding: 4px 6px;
+ color: #666;
+ cursor: pointer;
+}
+
+.wp-filter .drawer-toggle:before {
+ display: inline-block;
+ vertical-align: top;
+ content: "\f111";
+ margin: 0 5px 0 0;
+ width: 16px;
+ height: 16px;
+ color: #777;
+ -webkit-transition: color .1s ease-in 0;
+ transition: color .1s ease-in 0;
+ font-family: "dashicons";
+ font-size: 16px;
+ line-height: 1;
+ text-align: center;
+ text-decoration: inherit;
+ font-weight: normal;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+}
+
+.wp-filter .drawer-toggle:hover,
+.wp-filter .drawer-toggle:hover:before {
+ color: #2ea2cc;
+}
+
+.wp-filter .drawer-toggle.current:before {
+ color: #fff;
+}
+
+.filter-drawer {
+ display: none;
+ margin: 0 -20px;
+ padding: 20px;
+ border-top: 1px solid #eee;
+ background: #fafafa;
+}
+
+.show-filters .filter-drawer {
+ display: block;
+ overflow: hidden;
+ width: 100%;
+}
+
+.show-filters .wp-filter .drawer-toggle:hover,
+.show-filters .wp-filter .drawer-toggle:focus {
+ background: rgb(46, 162, 204);
+}
+
+.show-filters .filter-links a.current {
+ border-bottom: none;
+}
+
+.show-filters .wp-filter .drawer-toggle {
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ border: none;
+ background: #777;
+ color: #fff;
+}
+
+.show-filters .wp-filter .drawer-toggle:before {
+ color: #fff;
+}
+
+.filter-group {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ float: left;
+ margin: 0 1% 0 0;
+ padding: 10px;
+ width: 24%;
+ background: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+}
+
+.filter-group h4 {
+ position: relative;
+ margin: 0;
+}
+
+.filter-drawer ol {
+ margin: 20px 0 0;
+ list-style-type: none;
+ font-size: 12px;
+}
+
+.filter-drawer li {
+ display: inline-block;
+ vertical-align: top;
+ margin: 5px 0;
+ padding-right: 25px;
+ width: 160px;
+ list-style-type: none;
+}
+
+.filter-drawer .buttons {
+ margin-bottom: 20px;
+}
+
+.filter-drawer .buttons .button span {
+ display: inline-block;
+ opacity: 0.8;
+ font-size: 12px;
+ text-indent: 10px;
+}
+
+.wp-filter .button.clear-filters {
+ display: none;
+ margin: 0 0 20px 10px;
+}
+
+.filtered-by {
+ display: none;
+ margin: 0;
+}
+
+.filtered-by > span {
+ font-weight: 600;
+}
+
+.filtered-by a {
+ margin-left: 10px;
+}
+
+.filtered-by .tags {
+ display: inline;
+}
+
+.filtered-by .tag {
+ margin: 0 5px;
+ padding: 4px 8px;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ background: #fff;
+ font-size: 11px;
+}
+
+.filters-applied .filter-group,
+.filters-applied .filter-drawer .buttons,
+.filters-applied .filter-drawer br {
+ display: none !important;
+}
+
+.filters-applied .filtered-by {
+ display: block;
+}
+
+.filters-applied .filter-drawer {
+ padding: 20px;
+}
+
+.show-filters .content-filterable,
+.show-filters.filters-applied.loading-content .content-filterable,
+.loading-content .content-filterable,
+.error .content-filterable {
+ display: none;
+}
+
+.show-filters.filters-applied .content-filterable {
+ display: block;
+}
+
+.loading-content .spinner {
+ display: block;
+ margin: 40px auto 0;
+ float: none;
+}
+
+@media only screen and (max-width: 1120px) {
+ .filter-drawer {
+ border-bottom: 1px solid #eee;
+ }
+
+ .filter-group {
+ margin-bottom: 0;
+ margin-top: 5px;
+ width: 100%;
+ }
+
+ .filter-group li {
+ margin: 10px 0;
+ }
+}
+
+@media only screen and (max-width: 1000px) {
+ .filter-items {
+ float: none;
+ }
+
+ .wp-filter .media-toolbar-primary,
+ .wp-filter .media-toolbar-secondary,
+ .wp-filter .search-form {
+ float: none; /* Remove float from media-views.css */
+ position: relative;
+ max-width: 100%;
+ }
+}
+
+@media only screen and (max-width: 782px) {
+ .filter-group li {
+ padding: 0;
+ width: 50%;
+ }
+}
+
+@media only screen and (max-width: 320px) {
+ .filter-count {
+ display: none;
+ }
+
+ .wp-filter .drawer-toggle {
+ margin: 10px 0;
+ }
+
+ .filter-group li,
+ .wp-filter .search-form input[type="search"] {
+ width: 100%;
+ }
+}
+
+/*------------------------------------------------------------------------------
+ 4.0 - Notifications
+------------------------------------------------------------------------------*/
+
+.notice,
+div.updated,
+div.error {
+ background: #fff;
+ border-left: 4px solid #fff;
+ -webkit-box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
+ box-shadow: 0 1px 1px 0 rgba( 0, 0, 0, 0.1 );
+ margin: 5px 15px 2px;
+ padding: 1px 12px;
+}
+
+.notice p,
+div.updated p,
+div.error p,
+.form-table td .notice p {
+ margin: 0.5em 0;
+ padding: 2px;
+}
+
+.notice-success,
+div.updated {
+ border-color: #7ad03a;
+}
+
+.notice-warning {
+ border-color: #ffba00;
+}
+
+.notice-error,
+div.error {
+ border-color: #dd3d36;
+}
+
+.notice-info {
+ border-color: #2ea2cc;
+}
+
+.wrap .notice,
+.wrap div.updated,
+.wrap div.error,
+.media-upload-form .notice,
+.media-upload-form div.error {
+ margin: 5px 0 15px;
+}
+
+#update-nag,
+.update-nag {
+ display: inline-block;
+ line-height: 19px;
+ padding: 11px 15px;
+ font-size: 14px;
+ text-align: left;
+ margin: 25px 20px 0 2px;
+ background-color: #fff;
+ border-left: 4px solid #ffba00;
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+}
+
+.update-message {
+ color: #000;
+}
+
+ul#dismissed-updates {
+ display: none;
+}
+
+form.upgrade {
+ margin-top: 8px;
+}
+
+form.upgrade .hint {
+ font-style: italic;
+ font-size: 85%;
+ margin: -0.5em 0 2em 0;
+}
+
+.update-php .spinner {
+ float: none;
+ margin: -4px 0;
+}
+
+#ajax-loading,
+.ajax-loading,
+.ajax-feedback,
+.imgedit-wait-spin,
+.list-ajax-loading { /* deprecated */
+ visibility: hidden;
+}
+
+#ajax-response.alignleft {
+ margin-left: 2em;
+}
+
+/* @todo: this does not need its own section anymore */
+/*------------------------------------------------------------------------------
+ 6.0 - Admin Header
+------------------------------------------------------------------------------*/
+#adminmenu a,
+#sidemenu a,
+#taglist a,
+#catlist a {
+ text-decoration: none;
+}
+
+/*------------------------------------------------------------------------------
+ 6.1 - Screen Options Tabs
+------------------------------------------------------------------------------*/
+
+#screen-options-wrap,
+#contextual-help-wrap {
+ margin: 0;
+ padding: 8px 20px 12px;
+ position: relative;
+}
+
+#contextual-help-wrap {
+ overflow: auto;
+ margin-left: 0 !important;
+}
+
+#screen-meta .screen-reader-text {
+ visibility: hidden;
+}
+
+#screen-meta-links {
+ margin: 0 20px 0 0;
+}
+
+#screen-meta-links a {
+ padding: 3px 6px 3px 16px;
+}
+
+#screen-meta-links a:focus {
+ outline: none;
+}
+
+/* screen options and help tabs revert */
+#screen-meta {
+ display: none;
+ margin: 0 20px -1px 0px;
+ position: relative;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-top: none;
+ -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.025);
+ box-shadow: 0 1px 0 rgba(0,0,0,.025);
+}
+
+#screen-options-link-wrap,
+#contextual-help-link-wrap {
+ float: right;
+ height: 28px;
+ margin: 0 0 0 6px;
+ border: 1px solid #ddd;
+ border-top: none;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1);
+}
+
+#screen-meta-links .screen-meta-toggle {
+ position: relative;
+ top: 0;
+}
+
+#screen-meta-links a {
+ color: #777;
+}
+
+#screen-meta-links a:hover,
+#screen-meta-links a:active,
+#screen-meta-links a:focus {
+ color: #333;
+}
+
+#screen-meta-links a.show-settings {
+ display: block;
+ font-size: 13px;
+ height: 22px;
+ line-height: 22px;
+ text-decoration: none;
+ z-index: 1;
+}
+
+#screen-meta-links a:after {
+ right: 0;
+ content: '\f140';
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0 5px 0 0;
+ bottom: 2px;
+ position: relative;
+ vertical-align: bottom;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #bbb;
+}
+
+#screen-meta-links a.screen-meta-active:after {
+ content: '\f142';
+}
+
+#screen-meta-links a.show-settings:hover {
+ text-decoration: none;
+}
+/* end screen options and help tabs */
+
+.toggle-arrow {
+ background-repeat: no-repeat;
+ background-position: top left;
+ background-color: transparent;
+ height: 22px;
+ line-height: 22px;
+ display: block;
+}
+
+.toggle-arrow-active {
+ background-position: bottom left;
+}
+
+#screen-options-wrap h5,
+#contextual-help-wrap h5 {
+ margin: 8px 0;
+ font-size: 13px;
+}
+
+.metabox-prefs label {
+ display: inline-block;
+ padding-right: 15px;
+ line-height: 30px;
+}
+
+.metabox-prefs label input[type=checkbox] {
+ margin-top: -4px;
+ margin-right: 6px;
+}
+
+.metabox-prefs label input {
+ margin: 0 5px 0 2px;
+}
+
+.metabox-prefs .columns-prefs label input {
+ margin: 0 2px;
+}
+
+.metabox-prefs label a {
+ display: none;
+}
+
+/*------------------------------------------------------------------------------
+ 6.2 - Help Menu
+------------------------------------------------------------------------------*/
+
+#contextual-help-wrap {
+ padding: 0;
+}
+
+#contextual-help-columns {
+ position: relative;
+}
+
+#contextual-help-back {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 150px;
+ right: 170px;
+ border: 1px solid #e1e1e1;
+ border-top: none;
+ border-bottom: none;
+ background: #f6fbfd;
+}
+
+#contextual-help-wrap.no-sidebar #contextual-help-back {
+ right: 0;
+ border-right-width: 0;
+ -webkit-border-bottom-right-radius: 2px;
+ border-bottom-right-radius: 2px;
+}
+
+.contextual-help-tabs {
+ float: left;
+ width: 150px;
+ margin: 0;
+}
+
+.contextual-help-tabs ul {
+ margin: 1em 0;
+}
+
+.contextual-help-tabs li {
+ margin-bottom: 0;
+ list-style-type: none;
+ border-style: solid;
+ border-width: 0 0 0 2px;
+ border-color: transparent;
+}
+
+.contextual-help-tabs a {
+ display: block;
+ padding: 5px 5px 5px 12px;
+ line-height: 18px;
+ text-decoration: none;
+ border: 1px solid transparent;
+ border-right: none;
+ border-left: none;
+}
+
+.contextual-help-tabs a:hover {
+ color: #333;
+}
+
+.contextual-help-tabs .active {
+ padding: 0;
+ margin: 0 -1px 0 0;
+ border-left: 2px solid #2ea2cc;
+ background: #f6fbfd;
+ -webkit-box-shadow: 0 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02);
+ box-shadow: 0 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02);
+}
+
+.contextual-help-tabs .active a {
+ border-color: #e1e1e1;
+ color: #333;
+}
+
+.contextual-help-tabs-wrap {
+ padding: 0 20px;
+ overflow: auto;
+}
+
+.help-tab-content {
+ display: none;
+ margin: 0 22px 12px 0;
+ line-height: 1.6em;
+}
+
+.help-tab-content.active {
+ display: block;
+}
+
+.help-tab-content ul li {
+ list-style-type: disc;
+ margin-left: 18px;
+}
+
+.contextual-help-sidebar {
+ width: 150px;
+ float: right;
+ padding: 0 8px 0 12px;
+ overflow: auto;
+}
+
+/*------------------------------------------------------------------------------
+ 8.0 - Layout Blocks
+------------------------------------------------------------------------------*/
+
+html.wp-toolbar {
+ padding-top: 32px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.narrow {
+ width: 70%;
+ margin-bottom: 40px;
+}
+
+.narrow p {
+ line-height: 150%;
+}
+
+.widefat th,
+.widefat td {
+ overflow: hidden;
+ color: #555;
+}
+
+.widefat th {
+ font-weight: normal;
+}
+
+.widefat thead tr th,
+.widefat tfoot tr th {
+ color: #333;
+}
+
+.widefat td p {
+ margin: 2px 0 0.8em;
+}
+
+.widefat p,
+.widefat ol,
+.widefat ul {
+ color: #333;
+}
+
+.widefat .column-comment p {
+ margin: 0.6em 0;
+}
+
+/* Screens with postboxes */
+.postbox-container {
+ float: left;
+}
+
+.postbox-container .meta-box-sortables {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+#wpbody-content .metabox-holder {
+ padding-top: 10px;
+}
+
+.metabox-holder .postbox-container .empty-container {
+ border: 3px dashed #bbb;
+ height: 250px;
+}
+
+.metabox-holder.columns-1 .postbox-container .empty-container,
+.columns-2 #postbox-container-3 .empty-container,
+.columns-2 #postbox-container-4 .empty-container,
+.columns-3 #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+}
+
+#post-body-content {
+ width: 100%;
+ min-width: 463px;
+ float: left;
+}
+
+#post-body.columns-2 #postbox-container-1 {
+ float: right;
+ margin-right: -300px;
+ width: 280px;
+}
+
+#post-body.columns-2 #side-sortables {
+ min-height: 250px;
+}
+
+/* one column on the dash */
+@media only screen and (max-width: 799px) {
+ #wpbody-content .metabox-holder .postbox-container .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+}
+
+.js .widget .widget-top,
+.js .postbox .hndle {
+ cursor: move;
+}
+
+.hndle a {
+ font-size: 11px;
+ font-weight: normal;
+}
+
+.postbox .handlediv {
+ float: right;
+ width: 27px;
+ height: 30px;
+}
+
+.js .postbox .handlediv {
+ cursor: pointer;
+}
+
+.sortable-placeholder {
+ border: 1px dashed #bbb;
+ margin-bottom: 20px;
+}
+
+.postbox,
+.stuffbox {
+ margin-bottom: 20px;
+ padding: 0;
+ line-height: 1;
+}
+
+/* user-select is not a part of the CSS standard - may change behavior in the future */
+.postbox .hndle,
+.stuffbox .hndle {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.postbox .inside,
+.stuffbox .inside {
+ padding: 0 12px 12px;
+ line-height: 1.4em;
+ font-size: 13px;
+}
+
+.postbox .inside {
+ margin: 11px 0;
+ position: relative;
+}
+
+.postbox .inside > p:last-child,
+.rss-widget ul li:last-child {
+ margin-bottom: 1px !important;
+}
+
+.postbox.closed h3 {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.postbox table.form-table {
+ margin-bottom: 0;
+}
+
+.postbox table.widefat {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.temp-border {
+ border: 1px dotted #ccc;
+}
+
+.columns-prefs label {
+ padding: 0 5px;
+}
+
+/* @todo: what is this doing here */
+#dashboard_right_now .versions .b,
+#post-status-display,
+#post-visibility-display,
+#adminmenu .wp-submenu li.current,
+#adminmenu .wp-submenu li.current a,
+#adminmenu .wp-submenu li.current a:hover,
+.media-item .percent,
+.plugins .name,
+#pass-strength-result.strong,
+#pass-strength-result.short,
+#ed_reply_toolbar #ed_reply_strong,
+.item-controls .item-order a,
+.feature-filter .feature-name {
+ font-weight: 600;
+}
+
+/*------------------------------------------------------------------------------
+ 21.0 - Admin Footer
+------------------------------------------------------------------------------*/
+
+#wpfooter {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding: 10px 20px;
+ color: #777;
+}
+
+#wpfooter p {
+ font-size: 13px;
+ margin: 0;
+ line-height: 20px;
+}
+
+#footer-thankyou {
+ font-style: italic;
+}
+
+#wpfooter a {
+ text-decoration: none;
+}
+
+#wpfooter a:hover {
+ text-decoration: underline;
+}
+
+/*------------------------------------------------------------------------------
+ 25.0 - Tabbed Admin Screen Interface (Experimental)
+------------------------------------------------------------------------------*/
+
+.nav-tab {
+ border: 1px solid #ccc;
+ border-bottom: none;
+ background: #e4e4e4;
+ color: #555;
+ font-size: 12px;
+ line-height: 16px;
+ display: inline-block;
+ padding: 4px 14px 6px;
+ text-decoration: none;
+ margin: -4px 4px -1px 0;
+}
+
+.nav-tab:hover {
+ background-color: #fff;
+ color: #464646;
+}
+
+.nav-tab-active {
+ color: #464646;
+}
+
+.nav-tab-active,
+.nav-tab-active:hover {
+ border-bottom: 1px solid #f1f1f1;
+ background: #f1f1f1;
+ color: #000;
+}
+
+h2.nav-tab-wrapper,
+h3.nav-tab-wrapper {
+ border-bottom: 1px solid #ccc;
+ padding-bottom: 0;
+ padding-left: 10px;
+}
+
+h2 .nav-tab {
+ padding: 6px 10px;
+ font-weight: bold;
+ font-size: 15px;
+ line-height: 24px;
+}
+
+
+/*------------------------------------------------------------------------------
+ 26.0 - Misc
+------------------------------------------------------------------------------*/
+
+.spinner {
+ background: url(../images/spinner.gif) no-repeat;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+ display: none;
+ float: right;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ width: 20px;
+ height: 20px;
+ margin: 2px 5px 0;
+}
+
+#template div {
+ margin-right: 190px;
+}
+
+.metabox-holder h3 {
+ font-size: 14px;
+ padding: 8px 12px;
+ margin: 0;
+ line-height: 1.4;
+}
+
+#templateside ul li a {
+ text-decoration: none;
+}
+
+#sidemenu {
+ margin: -30px 15px 0 315px;
+ list-style: none;
+ position: relative;
+ float: right;
+ padding-left: 10px;
+ font-size: 12px;
+}
+
+#sidemenu a {
+ padding: 0 7px;
+ display: block;
+ float: left;
+ line-height: 28px;
+ border-top: 1px solid #f9f9f9;
+ border-bottom: 1px solid #dfdfdf;
+ background-color: #f9f9f9;
+ -webkit-transition: none;
+ transition: none;
+}
+
+#sidemenu li {
+ display: inline;
+ line-height: 200%;
+ list-style: none;
+ text-align: center;
+ white-space: nowrap;
+ margin: 0;
+ padding: 0;
+}
+
+/* @todo: remove border radius */
+#sidemenu a.current {
+ font-weight: normal;
+ padding-left: 6px;
+ padding-right: 6px;
+ -webkit-border-top-left-radius: 3px;
+ border-top-left-radius: 3px;
+ -webkit-border-top-right-radius: 3px;
+ border-top-right-radius: 3px;
+ border: 1px solid #dfdfdf;
+ border-bottom-color: #f1f1f1;
+ background-color: #f1f1f1;
+ color: #000;
+}
+
+#sidemenu li a .count-0 {
+ display: none;
+}
+
+.plugin-install #description,
+.plugin-install-network #description {
+ width: 60%;
+}
+
+table .vers,
+table .column-visible,
+table .column-rating {
+ text-align: left;
+}
+
+.error-message {
+ color: red;
+ font-weight: 600;
+}
+
+/* Scrollbar fix for bulk upgrade iframe */
+body.iframe {
+ height: 98%;
+}
+
+/* Upgrader styles, Specific to Language Packs */
+.lp-show-latest p {
+ display: none;
+}
+.lp-show-latest p:last-child,
+.lp-show-latest .lp-error p {
+ display: block;
+}
+
+/* - Only used once or twice in all of WP - deprecate for global style
+------------------------------------------------------------------------------*/
+td.media-icon {
+ text-align: center;
+ width: 80px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+
+td.media-icon img {
+ max-width: 80px;
+ max-height: 60px;
+ width: auto;
+ height: auto;
+}
+
+td.image-icon img {
+ border: 1px solid rgba(0, 0, 0, 0.07);
+}
+
+#howto {
+ font-size: 11px;
+ margin: 0 5px;
+ display: block;
+}
+
+.importers td {
+ padding-right: 14px;
+}
+
+.importers {
+ font-size: 16px;
+ width: auto;
+}
+
+#post-body #post-body-content #namediv h3 {
+ margin-top: 0;
+}
+
+#namediv h3 label {
+ vertical-align: baseline;
+}
+
+#namediv table {
+ width: 100%;
+}
+
+#namediv td.first {
+ width: 10px;
+ white-space: nowrap;
+}
+
+#namediv input {
+ width: 98%;
+}
+
+#namediv p {
+ margin: 10px 0;
+}
+
+#submitdiv h3 {
+ margin-bottom: 0 !important;
+}
+
+/* - Used - but could/should be deprecated with a CSS reset
+------------------------------------------------------------------------------*/
+.zerosize {
+ height: 0;
+ width: 0;
+ margin: 0;
+ border: 0;
+ padding: 0;
+ overflow: hidden;
+ position: absolute;
+}
+
+br.clear {
+ height: 2px;
+ line-height: 2px;
+}
+
+.checkbox {
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+fieldset {
+ border: 0;
+ padding: 0;
+ margin: 0;
+}
+
+.post-categories {
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+
+.post-categories li {
+ display: inline;
+}
+
+/* Star Ratings - Back-compat for pre-3.8 */
+div.star-holder {
+ position: relative;
+ height: 17px;
+ width: 100px;
+ background: url(../images/stars.png?ver=20121108) repeat-x bottom left;
+}
+
+div.star-holder .star-rating {
+ background: url(../images/stars.png?ver=20121108) repeat-x top left;
+ height: 17px;
+ float: left;
+}
+
+/* Star Ratings */
+.star-rating {
+ white-space: nowrap;
+}
+.star-rating .star {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ -webkit-font-smoothing: antialiased;
+ font-size: 20px;
+ line-height: 1;
+ font-family: 'dashicons';
+ text-decoration: inherit;
+ font-weight: normal;
+ font-style: normal;
+ vertical-align: top;
+ -webkit-transition: color .1s ease-in 0;
+ transition: color .1s ease-in 0;
+ text-align: center;
+ color: #0074a2;
+}
+
+.star-rating .star-full:before {
+ content:'\f155';
+}
+
+.star-rating .star-half:before {
+ content:'\f459';
+}
+
+.rtl .star-rating .star-half {
+ -webkit-transform: rotateY(180deg);
+ -ms-transform: rotateY(180deg);
+ transform: rotateY(180deg);
+}
+
+.star-rating .star-empty:before {
+ content:'\f154';
+}
+
+div.action-links {
+ font-weight: normal;
+ margin: 6px 0 0;
+}
+
+/* Plugin install thickbox */
+#plugin-information {
+ background: #fff;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 100%;
+ padding: 0;
+}
+
+#plugin-information-scrollable {
+ overflow: auto;
+ height: 100%;
+}
+
+#plugin-information-title {
+ padding: 0 20px;
+ background: #f5f5f5;
+ font-size: 22px;
+ font-weight: 600;
+ line-height: 56px;
+ position: relative;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 56px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+#plugin-information-title.with-banner {
+ margin-right: 0;
+ height: 250px;
+ bottom: 250px;
+ -webkit-background-size: 100% auto;
+ background-size: 100% auto;
+}
+
+#plugin-information-title h2 {
+ font-size: 1em;
+ font-weight: bold;
+ padding: 0;
+ margin: 0;
+ max-width: 680px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+#plugin-information-title.with-banner h2 {
+ font-family: "Helvetica Neue", sans-serif;
+ display: inline-block;
+ font-size: 30px;
+ line-height: 50px;
+ padding: 0 15px;
+ margin: 174px 0 0 10px;
+ color: #fff;
+ background: rgba( 30, 30, 30, 0.9 );
+ text-shadow: 0 1px 3px rgba( 0, 0, 0, 0.4 );
+ -webkit-box-shadow: 0 0 30px rgba( 255, 255, 255, 0.1 );
+ box-shadow: 0 0 30px rgba( 255, 255, 255, 0.1 );
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+}
+
+#plugin-information-title div.vignette {
+ display: none;
+}
+
+#plugin-information-title.with-banner div.vignette {
+ display: block;
+ float: right;
+ top: 0;
+ height: 250px;
+ width: 772px;
+ margin: 0 -20px;
+ background: transparent;
+ -webkit-box-shadow: inset 0 0 50px 4px rgba( 0, 0, 0, 0.2 ), inset 0 -1px 0 rgba( 0, 0, 0, 0.1 );
+ box-shadow: inset 0 0 50px 4px rgba( 0, 0, 0, 0.2 ), inset 0 -1px 0 rgba( 0, 0, 0, 0.1 );
+}
+
+#plugin-information-tabs {
+ padding: 0 16px;
+ position: relative;
+ right: 0;
+ left: 0;
+ height: 36px;
+ z-index: 1;
+ border-bottom: 1px solid #ddd;
+ background: #f3f3f3;
+}
+
+#plugin-information-tabs a {
+ position: relative;
+ float: left;
+ padding: 9px 10px;
+ margin: 0;
+ height: 18px;
+ line-height: 18px;
+ font-size: 14px;
+ text-decoration: none;
+ -webkit-transition: none;
+ transition: none;
+}
+
+#plugin-information-tabs a.current {
+ margin: 0 -1px 0;
+ background: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: #fff;
+ padding-top: 8px;
+ color: #333;
+}
+
+#plugin-information-tabs.with-banner a.current {
+ border-top: none;
+ padding-top: 9px;
+}
+
+#plugin-information-tabs a:active,
+#plugin-information-tabs a:focus {
+ outline: none;
+}
+
+#plugin-information-content {
+ overflow: hidden; /* equal height column trick */
+ background: #fff;
+ position: relative;
+ top: 0;
+ right: 0;
+ left: 0;
+ min-height: 100%;
+ /* Height of title + tabs + install now */
+ min-height: -webkit-calc( 100% - 152px );
+ min-height: calc( 100% - 152px );
+}
+
+#plugin-information-content.with-banner {
+ /* Height of banner + tabs + install now */
+ min-height: -webkit-calc( 100% - 346px );
+ min-height: calc( 100% - 346px );
+}
+
+#section-holder {
+ position: relative;
+ top: 0;
+ right: 250px;
+ bottom: 0;
+ left: 0;
+ margin-right: 250px; /* FYI box */
+ padding: 10px 26px;
+ margin-bottom: -99930px; /* a bit less than the padding below to accommodate footer */
+ padding-bottom: 99999px; /* equal height column trick */
+}
+
+#section-holder .updated {
+ margin: 16px 0;
+}
+
+#plugin-information .fyi {
+ display: block;
+ float: right;
+ position: relative;
+ top: 0;
+ right: 0;
+ padding: 16px;
+ margin-bottom: -99930px; /* slightly less than the padding below to accommodate footer */
+ padding-bottom: 99999px; /* equal height column trick */
+ width: 217px;
+ border-left: 1px solid #ddd;
+ background: #f3f3f3;
+ color: #666;
+}
+
+#plugin-information .fyi strong {
+ color: #464646;
+}
+
+#plugin-information .fyi h3 {
+ font-weight: bold;
+ text-transform: uppercase;
+ font-size: 12px;
+ color: #666;
+ margin: 24px 0 8px;
+}
+
+#plugin-information .fyi h2 {
+ font-size: 0.9em;
+ margin-bottom: 0;
+ margin-right: 0;
+}
+
+#plugin-information .fyi ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+#plugin-information .fyi li {
+ margin: 0 0 10px;
+}
+
+#plugin-information .counter-container {
+ margin: 3px 0;
+}
+
+#plugin-information .counter-label {
+ float: left;
+ margin-right: 5px;
+ min-width: 55px;
+}
+
+#plugin-information .counter-back {
+ height: 17px;
+ width: 92px;
+ background-color: #ececec;
+ float: left;
+}
+
+#plugin-information .counter-bar {
+ height: 17px;
+ background-color: #fddb5a;
+ float: left;
+}
+
+#plugin-information .counter-count {
+ margin-left: 5px;
+}
+
+#plugin-information .fyi ul.contributors {
+ margin-top: 10px;
+}
+
+#plugin-information .fyi ul.contributors li {
+ display: inline-block;
+ margin-right: 8px;
+ vertical-align: middle;
+}
+
+#plugin-information .fyi ul.contributors li {
+ display: inline-block;
+ margin-right: 8px;
+ vertical-align: middle;
+}
+
+#plugin-information .fyi ul.contributors li img {
+ vertical-align: middle;
+ margin-right: 4px;
+}
+
+#plugin-information-footer {
+ padding: 15px 16px;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 28px;
+ border-top: 1px solid #ddd;
+ background: #f3f3f3;
+}
+
+/* @noflip */
+#plugin-information .section {
+ direction: ltr;
+}
+
+/* @noflip */
+#plugin-information .section ul,
+#plugin-information .section ol {
+ list-style-type: disc;
+ margin-left: 24px;
+}
+
+#plugin-information .section,
+#plugin-information .section p {
+ font-size: 14px;
+ line-height: 1.7;
+}
+
+#plugin-information #section-screenshots ol {
+ list-style: none;
+ margin: 0;
+}
+
+#plugin-information #section-screenshots li img {
+ vertical-align: text-top;
+ margin-top: 16px;
+ max-width: 100%;
+ width: auto;
+ height: auto;
+ -webkit-box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 );
+ box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 );
+}
+
+/* @noflip */
+#plugin-information #section-screenshots li p {
+ font-style: italic;
+ padding-left: 20px;
+}
+
+#plugin-information pre {
+ padding: 7px;
+ overflow: auto;
+ border: 1px solid #ccc;
+}
+
+/* @noflip */
+#plugin-information .review {
+ overflow: hidden; /* clearfix */
+ width: 100%;
+ margin-bottom: 20px;
+ border-bottom: 1px solid #e6e6e6;
+}
+
+#plugin-information .review-title-section {
+ overflow: hidden; /* clearfix */
+}
+
+/* @noflip */
+#plugin-information .review-title-section h4 {
+ display: inline-block;
+ float: left;
+ margin: 0 6px 0 0;
+}
+
+#plugin-information .reviewer-info p {
+ clear: both;
+ margin: 0;
+ padding-top: 2px;
+}
+
+/* @noflip */
+#plugin-information .reviewer-info .avatar {
+ float: left;
+ margin: 4px 6px 0 0;
+}
+
+/* @noflip */
+#plugin-information .reviewer-info .star-rating {
+ float: left;
+}
+
+/* @noflip */
+#plugin-information .review-meta {
+ float: left;
+ margin-left: 0.75em;
+}
+
+/* @noflip */
+#plugin-information .review-body {
+ float: left;
+ width: 100%;
+}
+
+.plugin-version-author-uri {
+ font-size: 13px;
+}
+
+@media screen and ( max-width: 771px ) {
+ #plugin-information-title.with-banner {
+ height: 100px;
+ bottom: 100px;
+ }
+
+ #plugin-information-title.with-banner h2 {
+ margin-top: 30px;
+ font-size: 20px;
+ line-height: 40px;
+ max-width: 85%;
+ }
+
+ #plugin-information-title.with-banner div.vignette {
+ height: 100px;
+ bottom: 100px;
+ width: 800%;
+ }
+
+ #plugin-information-tabs {
+ overflow: hidden; /* clearfix */
+ padding: 0;
+ height: auto; /* let tabs wrap */
+ }
+
+ #plugin-information-tabs a.current {
+ margin-bottom: 0;
+ border-bottom: none;
+ }
+
+ #plugin-information .fyi {
+ float: none;
+ border: 1px solid #ddd;
+ position: static;
+ width: auto;
+ margin: 26px 26px 0;
+ padding-bottom: 0; /* reset from the two column height fix */
+ }
+
+ #section-holder {
+ position: static;
+ margin: 0;
+ padding-bottom: 70px; /* reset from the two column height fix, plus accomodate footer */
+ }
+
+ #plugin-information .fyi h3,
+ #plugin-information .fyi small {
+ display: none;
+ }
+
+ #plugin-information-footer {
+ padding: 12px 16px 0;
+ height: 46px;
+ }
+}
+
+/* Thickbox for Plugin Install screen */
+body.plugin-install-php #TB_window,
+body.import-php #TB_window,
+body.plugins-php #TB_window,
+body.update-core-php #TB_window,
+body.index-php #TB_window {
+ background: #fcfcfc url( ../images/spinner.gif ) no-repeat center;
+}
+
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+
+ body.plugin-install-php #TB_window,
+ body.import-php #TB_window,
+ body.plugins-php #TB_window,
+ body.update-core-php #TB_window,
+ body.index-php #TB_window {
+ background: #fcfcfc url( ../images/spinner-2x.gif ) no-repeat center;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+ }
+}
+
+body.plugin-install-php #TB_title,
+body.import-php #TB_title,
+body.plugins-php #TB_title,
+body.update-core-php #TB_title,
+body.index-php #TB_title {
+ float: left;
+ height: 1px;
+}
+
+body.plugin-install-php #TB_ajaxWindowTitle,
+body.import-php #TB_ajaxWindowTitle,
+body.plugins-php #TB_ajaxWindowTitle,
+body.update-core-php #TB_ajaxWindowTitle,
+body.index-php #TB_ajaxWindowTitle {
+ display: none;
+}
+
+body.plugin-install-php .tb-close-icon,
+body.import-php .tb-close-icon,
+body.plugins-php .tb-close-icon,
+body.update-core-php .tb-close-icon,
+body.index-php .tb-close-icon {
+ left: auto;
+ right: -30px;
+ color: #eee;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+body.plugin-install-php #TB_closeWindowButton:focus,
+body.plugin-install-php #TB_closeWindowButton:focus .tb-close-icon,
+body.plugin-install-php .tb-close-icon:focus,
+body.plugin-install-php .tb-close-icon:hover,
+body.import-php #TB_closeWindowButton:focus,
+body.import-php #TB_closeWindowButton:focus .tb-close-icon,
+body.import-php .tb-close-icon:focus,
+body.import-php .tb-close-icon:hover,
+body.plugins-php #TB_closeWindowButton:focus,
+body.plugins-php #TB_closeWindowButton:focus .tb-close-icon,
+body.plugins-php .tb-close-icon:focus,
+body.plugins-php .tb-close-icon:hover,
+body.update-core-php #TB_closeWindowButton:focus,
+body.update-core-php #TB_closeWindowButton:focus .tb-close-icon,
+body.update-core-php .tb-close-icon:focus,
+body.update-core-php .tb-close-icon:hover,
+body.index-php #TB_closeWindowButton:focus,
+body.index-php #TB_closeWindowButton:focus .tb-close-icon,
+body.index-php .tb-close-icon:focus,
+body.index-php .tb-close-icon:hover {
+ color: #2ea2cc;
+ outline: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+body.plugin-install-php .tb-close-icon:before,
+body.import-php .tb-close-icon:before,
+body.plugins-php .tb-close-icon:before,
+body.update-core-php .tb-close-icon:before,
+body.index-php .tb-close-icon:before {
+ content: "\f335";
+ font-size: 32px;
+}
+
+/* move plugin install close icon to top on narrow screens */
+@media screen and ( max-width: 830px ) {
+ body.plugin-install-php .tb-close-icon,
+ body.import-php .tb-close-icon,
+ body.plugins-php .tb-close-icon,
+ body.update-core-php .tb-close-icon,
+ body.index-php .tb-close-icon {
+ right: 0;
+ top: -30px;
+ }
+}
+
+/* @todo: move this. */
+img {
+ border: none;
+}
+
+/* Header */
+/* @todo: are these also specific to Press This? */
+#wphead {
+ border-bottom: 1px solid #dfdfdf;
+}
+
+#wphead h1 a {
+ color: #464646;
+}
+
+/* @todo: these seem misplaced */
+.js .meta-box-sortables .postbox:hover .handlediv {
+ margin-right: 0 !important;
+}
+
+/* Metabox collapse arrow indicators */
+.js .sidebar-name .sidebar-name-arrow:before,
+.js .meta-box-sortables .postbox .handlediv:before {
+ right: 12px;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 8px 10px;
+ top: 0;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+}
+
+.js #widgets-left .sidebar-name .sidebar-name-arrow {
+ display: none;
+}
+
+.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow,
+.js #widgets-left .sidebar-name:hover .sidebar-name-arrow {
+ display: block;
+}
+
+/* Show the arrow only on hover */
+.js .sidebar-name .sidebar-name-arrow:before,
+.js .meta-box-sortables .postbox .handlediv:before {
+ content: '\f142';
+}
+
+.js .widgets-holder-wrap.closed .sidebar-name-arrow:before,
+.js .meta-box-sortables .postbox.closed .handlediv:before {
+ content: '\f140';
+}
+
+.error a {
+ text-decoration: underline;
+}
+
+.updated a {
+ text-decoration: none;
+ padding-bottom: 2px;
+}
+
+/* @todo: appears to be Press This only and overridden */
+#photo-add-url-div input[type="text"] {
+ width: 300px;
+}
+
+/* Theme/Plugin Editor */
+.alignleft h3 {
+ margin: 0;
+}
+
+#template textarea {
+ font-family: Consolas, Monaco, monospace;
+ font-size: 13px;
+ width: 97%;
+ background: #f9f9f9;
+ outline: none;
+}
+
+/* @noflip */
+#template textarea,
+#docs-list {
+ direction: ltr;
+}
+
+#template p {
+ width: 97%;
+}
+
+#templateside {
+ float: right;
+ width: 190px;
+ word-wrap: break-word;
+}
+
+#templateside h3,
+#postcustomstuff p.submit {
+ margin: 0;
+}
+
+#templateside h4 {
+ margin: 1em 0 0;
+}
+
+#templateside ol,
+#templateside ul {
+ margin: .5em 0;
+ padding: 0;
+}
+
+#templateside li {
+ margin: 4px 0;
+}
+
+#templateside li a,
+.theme-editor-php .highlight {
+ display: block;
+ padding: 3px 3px 3px 12px;
+ text-decoration: none;
+}
+
+.theme-editor-php .highlight {
+ margin: -3px 3px -3px -12px;
+}
+
+#templateside .highlight {
+ border: none;
+ font-weight: bold;
+}
+
+.nonessential {
+ color: #666;
+ font-size: 11px;
+ font-style: italic;
+ padding-left: 12px;
+}
+
+#documentation {
+ margin-top: 10px;
+}
+
+#documentation label {
+ line-height: 22px;
+ vertical-align: baseline;
+ font-weight: 600;
+}
+
+.fileedit-sub {
+ padding: 10px 0 8px;
+ line-height: 180%;
+}
+
+/* @todo: can we use a common class for these? */
+.nav-menus-php .item-edit:before,
+.widget-top a.widget-action:after,
+.control-section .accordion-section-title:after,
+.accordion-section-title:after {
+ right: 0;
+ content: '\f140';
+ border: none;
+ background: none;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+}
+
+.widget-action,
+.handlediv,
+.item-edit,
+.sidebar-name-arrow,
+.accordion-section-title:after {
+ color: #aaa;
+}
+
+.widget-action:hover,
+.handlediv:hover,
+.item-edit:hover,
+.sidebar-name:hover .sidebar-name-arrow,
+.accordion-section-title:hover:after {
+ color: #777;
+}
+
+.widget-top a.widget-action:after {
+ padding: 12px 12px 11px;
+}
+
+.widget-top a.widget-action:focus:after {
+ -webkit-box-shadow: 0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);
+ box-shadow: 0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);
+}
+
+.nav-menus-php .item-edit:before {
+ line-height: 2.1;
+}
+
+.control-section .accordion-section-title:after,
+.accordion-section-title:after {
+ float: right;
+ right: 20px;
+ top: -2px;
+}
+
+.control-section.open .accordion-section-title:after,
+#customize-info.open .accordion-section-title:after,
+.nav-menus-php .menu-item-edit-active .item-edit:before,
+.widget.open .widget-top a.widget-action:after {
+ content: '\f142';
+}
+
+/*!
+ * jQuery UI Draggable/Sortable 1.11.2
+ * http://jqueryui.com
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+.ui-draggable-handle,
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+/* Accordion */
+.accordion-section {
+ border-bottom: 1px solid #dfdfdf;
+ margin: 0;
+}
+
+.accordion-section.open .accordion-section-content,
+.no-js .accordion-section .accordion-section-content {
+ display: block;
+}
+
+.accordion-section.open:hover {
+ border-bottom-color: #dfdfdf;
+}
+
+.accordion-section-content {
+ display: none;
+ padding: 10px 20px 15px;
+ overflow: hidden;
+ background: #fff;
+}
+
+.accordion-section-title {
+ margin: 0;
+ padding: 12px 15px 15px;
+ position: relative;
+ border-left: 1px solid #dfdfdf;
+ border-right: 1px solid #dfdfdf;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.js .accordion-section-title {
+ cursor: pointer;
+}
+
+.js .accordion-section-title:after {
+ position: absolute;
+ top: 12px;
+ right: 10px;
+ z-index: 1;
+}
+
+.accordion-section-title:focus {
+ outline: none;
+}
+
+.accordion-section-title:hover:after,
+.accordion-section-title:focus:after {
+ border-color: #aaa transparent;
+}
+
+.cannot-expand .accordion-section-title {
+ cursor: auto;
+}
+
+.cannot-expand .accordion-section-title:after {
+ display: none;
+}
+
+.control-section .accordion-section-title {
+ border-left: none;
+ border-right: none;
+ padding: 10px 10px 11px 14px;
+ line-height: 21px;
+ background: #fff;
+}
+
+.control-section .accordion-section-title:after {
+ top: 11px;
+}
+
+.js .control-section:hover .accordion-section-title,
+.js .control-section .accordion-section-title:hover,
+.js .control-section.open .accordion-section-title,
+.js .control-section .accordion-section-title:focus {
+ color: #222;
+ background: #f5f5f5;
+}
+
+.control-section.open .accordion-section-title {
+ /* When expanded */
+ border-bottom: 1px solid #dfdfdf;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/* @todo: de-duplication */
+@media only screen and (min-width: 769px) {
+ /* categories */
+ #col-left {
+ width: 35%;
+ }
+
+ #col-right {
+ width: 65%;
+ }
+}
+
+@media only screen and (max-width: 860px) {
+
+ /* categories */
+ #col-left {
+ width: 35%;
+ }
+
+ #col-right {
+ width: 65%;
+ }
+}
+
+@media only screen and (min-width: 980px) {
+
+ /* categories */
+ #col-left {
+ width: 35%;
+ }
+
+ #col-right {
+ width: 65%;
+ }
+}
+
+@media only screen and (max-width: 768px) {
+ /* categories */
+ #col-left {
+ width: 100%;
+ }
+
+ #col-right {
+ width: 100%;
+ }
+}
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ /* Back-compat for pre-3.8 */
+ div.star-holder,
+ div.star-holder .star-rating {
+ background: url(../images/stars-2x.png?ver=20121108) repeat-x bottom left;
+ -webkit-background-size: 21px 37px;
+ background-size: 21px 37px;
+ }
+
+ .spinner {
+ background-image: url(../images/spinner-2x.gif);
+ }
+
+ /* @todo: evaluate - most of these were likely replaced by dashicons */
+ .curtime #timestamp,
+ #screen-meta-links a.show-settings,
+ .widget-top a.widget-action,
+ .widget-top a.widget-action:hover,
+ .sidebar-name-arrow,
+ .sidebar-name:hover .sidebar-name-arrow,
+ .meta-box-sortables .postbox:hover .handlediv,
+ .tagchecklist span a,
+ #bulk-titles div a,
+ .tagchecklist span a:hover,
+ #bulk-titles div a:hover {
+ background: none !important;
+ }
+
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+@media screen and ( max-width: 782px ) {
+ html.wp-toolbar {
+ padding-top: 46px;
+ }
+
+ body {
+ min-width: 240px;
+ overflow-x: hidden;
+ }
+
+ body * {
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
+ }
+
+ #wpcontent {
+ position: relative;
+ margin-left: 0;
+ padding-left: 10px;
+ }
+
+ #wpbody-content {
+ padding-bottom: 100px;
+ }
+
+ .wrap {
+ margin-right: 12px;
+ margin-left: 0;
+ }
+
+ .col-wrap {
+ padding: 0;
+ }
+
+ /* Hidden Elements */
+ #screen-meta,
+ #screen-meta-links,
+ #collapse-menu,
+ .post-format-select {
+ display: none !important;
+ }
+
+ .wrap .add-new-h2, .wrap .add-new-h2:active {
+ padding: 10px 15px;
+ font-size: 14px;
+ }
+
+ .wp-color-result {
+ height: auto;
+ padding-left: 45px;
+ }
+
+ .wp-color-result:after {
+ font-size: 14px;
+ height: auto;
+ padding: 6px 14px;
+ }
+
+ /* Feedback Messages */
+ .wrap div.updated, .wrap div.error, .media-upload-form div.error {
+ margin: 20px 0 10px 0;
+ padding: 5px 10px;
+ font-size: 14px;
+ line-height: 175%;
+ }
+
+ .wrap .icon32 + h2 {
+ margin-top: -2px;
+ }
+
+ .wp-responsive-open #wpbody {
+ right: -190px;
+ }
+
+ code {
+ word-wrap: break-word;
+ }
+
+ /* General Metabox */
+ .postbox {
+ font-size: 14px;
+ }
+
+ .metabox-holder h3 {
+ padding: 12px;
+ }
+
+ .postbox .handlediv {
+ margin-top: 3px;
+ }
+
+ /* Subsubsub Nav */
+ .subsubsub {
+ font-size: 16px;
+ text-align: center;
+ margin-bottom: 15px;
+ }
+
+ /* Theme/Plugin File Editor */
+ #templateside {
+ float: none;
+ width: auto;
+ }
+
+ #templateside li {
+ margin: 0;
+ }
+
+ #templateside li a {
+ display: block;
+ padding: 5px;
+ }
+
+ #templateside .highlight {
+ padding: 5px;
+ margin-left: -5px;
+ margin-top: -5px;
+ }
+
+ #template div {
+ float: none;
+ margin: 0;
+ width: auto;
+ }
+
+ #template textarea {
+ width: 100%;
+ }
+
+ .fileedit-sub .alignright {
+ margin-top: 15px;
+ }
+
+ #wpfooter {
+ display: none;
+ }
+
+ #comments-form .checkforspam {
+ display: none;
+ }
+}
+
+/* Smartphone */
+@media screen and (max-width: 600px) {
+ /* Disable horizontal scroll when responsive menu is open
+ since we push the main content off to the right. */
+ #wpwrap.wp-responsive-open {
+ overflow-x: hidden;
+ }
+
+ html.wp-toolbar {
+ padding-top: 0;
+ }
+
+ #wpbody {
+ padding-top: 46px;
+ }
+
+ /* Keep full-width boxes on Edit Post page from causing horizontal scroll */
+ div#post-body.metabox-holder.columns-1 {
+ overflow-x: hidden;
+ }
+}
diff --git a/wp-admin/css/customize-controls-rtl.css b/wp-admin/css/customize-controls-rtl.css
new file mode 100644
index 0000000..10861ce
--- /dev/null
+++ b/wp-admin/css/customize-controls-rtl.css
@@ -0,0 +1,850 @@
+body {
+ overflow: hidden;
+}
+
+#customize-controls a {
+ text-decoration: none;
+}
+
+#customize-controls h3 {
+ font-size: 14px;
+}
+
+#customize-controls img {
+ max-width: 100%;
+}
+
+#customize-controls .submit {
+ text-align: center;
+}
+
+#customize-controls .description {
+ color: #666666;
+}
+
+#customize-header-actions .button-primary {
+ float: left;
+ margin-top: 9px;
+}
+
+#customize-header-actions .spinner {
+ margin-top: 16px;
+ margin-left: 4px;
+}
+
+.saving #customize-header-actions .spinner {
+ display: block;
+}
+
+#customize-header-actions {
+ border-bottom: 1px solid #ddd;
+}
+
+#customize-controls .wp-full-overlay-sidebar-content {
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+#customize-info {
+ border: none;
+ border-top: 1px solid #ddd;
+}
+
+#customize-info .accordion-section-title {
+ background-color: #fff;
+ color: #666666;
+ border-right: none;
+ border-left: none;
+ border-bottom: 1px solid #eeeeee;
+}
+
+#customize-info.open .accordion-section-title:after,
+#customize-info .accordion-section-title:hover:after,
+#customize-info .accordion-section-title:focus:after {
+ color: #555555;
+}
+
+#customize-info .preview-notice {
+ font-size: 13px;
+ line-height: 24px;
+}
+
+#customize-info .theme-name {
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 24px;
+ display: block;
+}
+
+#customize-info .theme-screenshot {
+ width: 258px;
+}
+
+#customize-info .theme-description {
+ margin-top: 1em;
+ color: #666666;
+ line-height: 20px;
+}
+
+#customize-theme-controls .control-section {
+ border: none;
+}
+
+#customize-theme-controls .accordion-section-title {
+ color: #555555;
+ background-color: #fff;
+ border-bottom: 1px solid #eeeeee;
+}
+
+#customize-theme-controls .accordion-section-content {
+ color: #555555;
+ background: #fff;
+}
+
+#customize-info.open .accordion-section-title,
+#customize-info .accordion-section-title:hover,
+#customize-info .accordion-section-title:focus,
+#customize-theme-controls .control-section:hover > .accordion-section-title,
+#customize-theme-controls .control-section .accordion-section-title:hover,
+#customize-theme-controls .control-section.open .accordion-section-title,
+#customize-theme-controls .control-section .accordion-section-title:focus {
+ color: #222;
+ background: #f5f5f5;
+}
+
+.js .control-section:hover .accordion-section-title,
+.js .control-section .accordion-section-title:hover,
+.js .control-section.open .accordion-section-title,
+.js .control-section .accordion-section-title:focus {
+ background: #f5f5f5;
+}
+
+#customize-theme-controls .control-section:hover > .accordion-section-title:after,
+#customize-theme-controls .control-section .accordion-section-title:hover:after,
+#customize-theme-controls .control-section.open .accordion-section-title:after,
+#customize-theme-controls .control-section .accordion-section-title:focus:after {
+ color: #555;
+}
+
+#customize-info.open,
+#customize-theme-controls .control-section.open {
+ border-bottom: 1px solid #eeeeee;
+}
+
+#customize-theme-controls .control-section.open .accordion-section-title {
+ border-bottom-color: #eeeeee !important;
+}
+
+#customize-theme-controls .control-section:last-of-type.open,
+#customize-theme-controls .control-section:last-of-type > .accordion-section-title {
+ border-bottom-color: #ddd;
+}
+
+#customize-theme-controls > ul,
+#customize-theme-controls .accordion-section-content {
+ margin: 0;
+}
+
+.control-section.control-panel > .accordion-section-title {
+ padding-left: 54px;
+}
+
+.control-section.control-panel > .accordion-section-title:after {
+ content: "\f345";
+ background: #f5f5f5;
+ color: #555;
+ width: 38px;
+ height: 100%;
+ margin: -11px 0 -11px -10px; /* compensate for positioning */
+ line-height: 45px;
+ padding-right: 5px;
+ border-right: 1px solid #eee;
+ z-index: 0;
+}
+
+.rtl .control-section.control-panel > .accordion-section-title:after {
+ content: "\f341";
+}
+
+#customize-theme-controls .control-section.control-panel > h3.accordion-section-title:focus:after,
+#customize-theme-controls .control-section.control-panel > h3.accordion-section-title:hover:after {
+ background: #ddd;
+ color: #000;
+ border: 1px solid #d9d9d9;
+ border-left: none;
+ margin-top: -12px;
+ line-height: 44px;
+ z-index: 1;
+}
+
+.accordion-sub-container.control-panel-content {
+ display: none;
+ position: absolute;
+ right: 300px;
+ top: 0;
+ width: 300px;
+ border-top: 1px solid #ddd;
+ -webkit-transition: right ease-in-out .18s;
+ transition: right ease-in-out .18s;
+}
+
+.accordion-sub-container.control-panel-content.animating {
+ display: block;
+}
+
+.current-panel .accordion-sub-container.control-panel-content {
+ width: 100%;
+}
+
+.customize-controls-close {
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 45px;
+ height: 45px;
+ padding-left: 2px;
+ background: #eee;
+ border-left: 1px solid #ddd;
+ color: #444;
+ cursor: pointer;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.control-panel-back {
+ display: block;
+ position: fixed;
+ top: 0;
+ z-index: 99;
+ right: -48px;
+ width: 45px;
+ height: 45px;
+ padding-left: 2px;
+ background: #eee;
+ border-left: 1px solid #ddd;
+ cursor: pointer;
+ -webkit-transition: right .18s ease-in-out, color .1s ease-in-out, background .1s ease-in-out;
+ transition: right .18s ease-in-out, color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.collapsed .control-panel-back {
+ display: none;
+}
+
+.customize-controls-close:focus,
+.customize-controls-close:hover,
+.control-panel-back:focus,
+.control-panel-back:hover {
+ background: #ddd;
+ border-color: #ccc;
+ color: #000;
+ outline: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.customize-controls-close:before {
+ font: normal 22px/1 dashicons;
+ content: "\f335";
+ position: relative;
+ top: 7px;
+ right: 13px;
+}
+
+.control-panel-back:before {
+ font: normal 20px/1 dashicons;
+ content: "\f341";
+ position: relative;
+ top: 7px;
+ right: 13px;
+}
+
+.rtl .control-panel-back:before {
+ content: "\f345";
+}
+
+.in-sub-panel .control-panel-back {
+ right: 0;
+}
+
+.current-panel > .accordion-section-title {
+ height: 22px;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-header {
+ -webkit-transition: padding ease-in-out .18s;
+ transition: padding ease-in-out .18s;
+}
+
+.in-sub-panel .wp-full-overlay-sidebar .wp-full-overlay-header {
+ padding-right: 62px;
+}
+
+#customize-info,
+#customize-theme-controls > ul > .accordion-section {
+ position: relative;
+ right: 0;
+ -webkit-transition: right ease-in-out .18s;
+ transition: right ease-in-out .18s;
+}
+
+.in-sub-panel #customize-info,
+.in-sub-panel #customize-theme-controls > ul > .accordion-section {
+ right: -300px;
+ width: 300px;
+}
+
+.in-sub-panel #customize-theme-controls .accordion-section.current-panel {
+ width: 100%;
+}
+
+#customize-theme-controls .control-section.current-panel {
+ padding: 0;
+}
+
+#customize-theme-controls .control-section > h3.accordion-section-title {
+ position: relative;
+ right: 0;
+}
+
+#customize-theme-controls .control-section.current-panel > h3.accordion-section-title {
+ right: -300px;
+ -webkit-transition: right ease-in-out .18s;
+ transition: right ease-in-out .18s;
+}
+
+.control-section.control-panel .accordion-section-title .panel-title {
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 24px;
+ display: block;
+ border: none;
+}
+
+.control-section.control-panel .preview-notice {
+ font-size: 13px;
+ line-height: 24px;
+}
+
+p.customize-section-description {
+ font-style: normal;
+}
+
+.customize-control {
+ width: 100%;
+ float: right;
+ clear: both;
+ margin-bottom: 8px;
+}
+
+.customize-control select,
+.customize-control input[type="radio"],
+.customize-control input[type="checkbox"] {
+ line-height: 28px;
+}
+
+.customize-control input[type="text"],
+.customize-control input[type="password"],
+.customize-control input[type="email"],
+.customize-control input[type="number"],
+.customize-control input[type="search"],
+.customize-control input[type="tel"],
+.customize-control input[type="url"] {
+ width: 98%;
+ line-height: 18px;
+ margin: 0;
+}
+
+.customize-control-textarea textarea {
+ width: 100%;
+ resize: vertical;
+}
+
+.customize-control select {
+ min-width: 50%;
+ max-width: 100%;
+ height: 28px;
+ line-height: 28px;
+}
+
+.customize-control select[multiple] {
+ height: auto;
+}
+
+.customize-control-title {
+ display: block;
+ font-size: 14px;
+ line-height: 24px;
+ font-weight: 600;
+ margin-bottom: 5px;
+}
+
+.customize-control-description {
+ display: block;
+ font-style: italic;
+ line-height: 18px;
+ margin-bottom: 5px;
+}
+
+.customize-control-color .color-picker,
+.customize-control-checkbox label,
+.customize-control-upload div {
+ line-height: 28px;
+}
+
+.customize-control-checkbox input {
+ margin-left: 5px;
+}
+
+.customize-control-radio {
+ padding: 5px 0 10px;
+}
+
+.customize-control-radio .customize-control-title {
+ margin-bottom: 0;
+ line-height: 22px;
+}
+
+.customize-control-radio .customize-control-title + .customize-control-description {
+ margin-top: 7px;
+}
+
+.customize-control-radio label {
+ line-height: 32px;
+}
+
+.customize-control-radio input {
+ margin-left: 5px;
+}
+
+.customize-control .attachment-thumb.type-icon {
+ float: right;
+ margin: 10px;
+ width: auto;
+}
+
+.customize-control .attachment-title {
+ font-weight: bold;
+ margin: 0;
+ padding: 5px 10px;
+}
+
+.customize-control .attachment-meta {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin: 0;
+ padding: 5px 10px 0;
+}
+
+.customize-control .attachment-meta-title {
+ padding-top: 7px;
+}
+
+.customize-control .thumbnail-image {
+ line-height: 0;
+}
+
+.customize-control .thumbnail-image img {
+ cursor: pointer;
+}
+
+#customize-preview iframe {
+ width: 100%;
+ height: 100%;
+}
+
+.wp-full-overlay-sidebar {
+ background: #eeeeee;
+ border-left: 1px solid #ddd;
+}
+
+.collapse-sidebar {
+ background-color: transparent !important;
+ border: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ -webkit-border-radius: 0 !important;
+ border-radius: 0 !important;
+}
+
+
+.collapse-sidebar:active,
+.collapse-sidebar:active .collapse-sidebar-label,
+.collapse-sidebar:active .collapse-sidebar-arrow:before {
+ text-shadow: none;
+}
+
+.collapsed .collapse-sidebar-arrow:before {
+ color: #888;
+}
+
+/* Style for custom settings */
+
+/*
+ * Dropdowns
+ */
+.accordion-section .dropdown {
+ float: right;
+ display: block;
+ position: relative;
+ cursor: pointer;
+}
+
+.accordion-section .dropdown-content {
+ overflow: hidden;
+ float: right;
+ min-width: 30px;
+ height: 16px;
+ line-height: 16px;
+ margin-left: 16px;
+ padding: 4px 5px;
+ border: 2px solid #eeeeee;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.customize-control .dropdown-arrow {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 20px;
+ background: #eeeeee;
+}
+
+.customize-control .dropdown-arrow:after {
+ content: "\f140";
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #333;
+}
+
+.customize-control .dropdown-status {
+ color: #333;
+ background: #eeeeee;
+ display: none;
+ max-width: 112px;
+}
+
+/* Color Picker */
+.customize-control-color .color-picker-hex {
+ display: none;
+}
+
+.customize-control-color.open .color-picker-hex {
+ display: block;
+}
+
+.customize-control-color .dropdown {
+ margin-left: 5px;
+ margin-bottom: 5px;
+}
+
+.customize-control-color .dropdown .dropdown-content {
+ background-color: #555555;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+.customize-control-color .dropdown:hover .dropdown-content {
+ border-color: rgba(0, 0, 0, 0.25);
+}
+
+/**
+ * iOS can't scroll iframes,
+ * instead it expands the iframe size to match the size of the content
+ */
+.ios .wp-full-overlay {
+ position: relative;
+}
+
+.ios #customize-preview {
+ position: relative;
+}
+
+.ios #customize-controls .wp-full-overlay-sidebar-content {
+ -webkit-overflow-scrolling: touch;
+}
+
+/** Header control **/
+
+.customize-control-upload .current,
+.customize-control-image .current,
+.customize-control-background .current,
+.customize-control-header .current {
+ margin-bottom: 8px;
+}
+
+.customize-control-header .uploaded {
+ margin-bottom: 18px;
+}
+
+.customize-control-header .uploaded button:not(.random),
+.customize-control-header .default button:not(.random) {
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ background: none;
+ border: none;
+ color: inherit;
+ cursor: pointer;
+}
+
+.customize-control-header button img {
+ display: block;
+}
+
+.customize-control-upload .remove-button,
+.customize-control-upload .default-button,
+.customize-control-upload .upload-button,
+.customize-control-image .remove-button,
+.customize-control-image .default-button,
+.customize-control-image .upload-button,
+.customize-control-background .remove-button,
+.customize-control-background .default-button,
+.customize-control-background .upload-button,
+.customize-control-header button.new,
+.customize-control-header button.remove {
+ white-space: normal;
+ width: 48%;
+ height: auto;
+}
+
+.customize-control-upload .current .container,
+.customize-control-image .current .container,
+.customize-control-background .current .container,
+.customize-control-header .current .container {
+ overflow: hidden;
+ -webkit-border-radius: 2px;
+ border: 1px solid #eee;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+}
+
+.customize-control-upload .current .container,
+.customize-control-background .current .container,
+.customize-control-image .current .container {
+ min-height: 40px;
+}
+
+.customize-control-upload .placeholder,
+.customize-control-image .placeholder,
+.customize-control-background .placeholder,
+.customize-control-header .placeholder {
+ width: 100%;
+ position: relative;
+ text-align: center;
+ cursor: default;
+}
+
+.customize-control-upload .inner,
+.customize-control-image .inner,
+.customize-control-background .inner,
+.customize-control-header .inner {
+ display: none;
+ position: absolute;
+ width: 100%;
+ color: #555;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.customize-control-upload .inner,
+.customize-control-background .inner,
+.customize-control-image .inner {
+ display: block;
+ min-height: 40px;
+}
+
+.customize-control-upload .inner,
+.customize-control-image .inner,
+.customize-control-background .inner,
+.customize-control-header .inner,
+.customize-control-header .inner .dashicons {
+ line-height: 20px;
+ top: 10px;
+}
+
+.customize-control-header .list .inner,
+.customize-control-header .list .inner .dashicons {
+ top: 9px;
+}
+
+.customize-control-header .header-view {
+ position: relative;
+ width: 100%;
+ margin-bottom: 5px;
+}
+
+.customize-control-header .header-view:last-child {
+ margin-bottom: 0px;
+}
+
+/* Convoluted, but 'outline' support isn't good enough yet */
+.customize-control-header .header-view:after {
+ border: 0;
+}
+.customize-control-header .header-view.selected:after {
+ content: '';
+ position: absolute;
+ height: auto;
+ top: 0; right: 0; bottom: 0; left: 0;
+ border: 4px solid #2ea2cc;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+}
+.customize-control-header .header-view.button.selected {
+ border: 0;
+}
+
+/* Header control: overlay "close" button */
+
+.customize-control-header .uploaded .header-view .close {
+ font-size: 2em;
+ color: grey;
+ position: absolute;
+ visibility: hidden;
+ top: 10px;
+ left: 10px;
+ z-index: 1;
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+}
+
+.customize-control-header .uploaded .header-view .close:hover {
+ color: black;
+ text-shadow:
+ -1px -1px 0 #fff,
+ 1px -1px 0 #fff,
+ -1px 1px 0 #fff,
+ 1px 1px 0 #fff;
+}
+
+.customize-control-header .header-view:hover .close {
+ visibility: visible;
+}
+
+/* Header control: randomiz(s)er */
+
+.customize-control-header .random.placeholder {
+ cursor: pointer;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ height: 40px;
+}
+
+.customize-control-header button.random {
+ width: 100%;
+ height: auto;
+ min-height: 40px;
+ white-space: normal;
+}
+
+.customize-control-header button.random .dice {
+ margin-top: 4px;
+}
+
+.customize-control-header .placeholder:hover .dice,
+.customize-control-header .header-view:hover > button.random .dice {
+ -webkit-animation: dice-color-change 3s infinite;
+ -ms-animation: dice-color-change 3s infinite;
+ animation: dice-color-change 3s infinite;
+}
+
+@-webkit-keyframes dice-color-change {
+ 0% { color: #d4b146; }
+ 50% { color: #ef54b0; }
+ 75% { color: #7190d3; }
+ 100% { color: #d4b146; }
+}
+
+@-ms-keyframes dice-color-change {
+ 0% { color: #d4b146; }
+ 50% { color: #ef54b0; }
+ 75% { color: #7190d3; }
+ 100% { color: #d4b146; }
+}
+
+@keyframes dice-color-change {
+ 0% { color: #d4b146; }
+ 50% { color: #ef54b0; }
+ 75% { color: #7190d3; }
+ 100% { color: #d4b146; }
+}
+
+.customize-control-upload .actions,
+.customize-control-image .actions,
+.customize-control-background .actions,
+.customize-control-header .actions {
+ margin-bottom: 32px;
+}
+
+.customize-control-header .choice {
+ position: relative;
+ display: block;
+ margin-bottom: 9px;
+}
+
+.customize-control-header .uploaded div:last-child > .choice {
+ margin-bottom: 0;
+}
+
+.customize-control-upload img,
+.customize-control-image img,
+.customize-control-background img,
+.customize-control-header img {
+ width: 100%;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+}
+
+.customize-control-upload .remove-button,
+.customize-control-upload .default-button,
+.customize-control-image .remove-button,
+.customize-control-image .default-button,
+.customize-control-background .remove-button,
+.customize-control-background .default-button,
+.customize-control-header .remove {
+ float: right;
+ margin-left: 3px;
+}
+
+.customize-control-upload .upload-button,
+.customize-control-image .upload-button,
+.customize-control-background .upload-button,
+.customize-control-header .new {
+ float: left;
+}
+
+
+/** Handle cheaters. */
+body.cheatin {
+ font-size: medium;
+ height: auto;
+ background: #fff;
+ margin: 50px auto 2em;
+ padding: 1em 2em;
+ max-width: 700px;
+ min-width: 0;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+}
+
+body.cheatin p {
+ font-size: 14px;
+ line-height: 1.5;
+ margin: 25px 0 20px;
+}
diff --git a/wp-admin/css/customize-controls-rtl.min.css b/wp-admin/css/customize-controls-rtl.min.css
new file mode 100644
index 0000000..1227e07
--- /dev/null
+++ b/wp-admin/css/customize-controls-rtl.min.css
@@ -0,0 +1 @@
+body{overflow:hidden}#customize-controls a{text-decoration:none}#customize-controls h3{font-size:14px}#customize-controls img{max-width:100%}#customize-controls .submit{text-align:center}#customize-controls .description{color:#666}#customize-header-actions .button-primary{float:left;margin-top:9px}#customize-header-actions .spinner{margin-top:16px;margin-left:4px}.saving #customize-header-actions .spinner{display:block}#customize-header-actions{border-bottom:1px solid #ddd}#customize-controls .wp-full-overlay-sidebar-content{overflow-y:auto;overflow-x:hidden}#customize-info{border:none;border-top:1px solid #ddd}#customize-info .accordion-section-title{background-color:#fff;color:#666;border-right:none;border-left:none;border-bottom:1px solid #eee}#customize-info .accordion-section-title:focus:after,#customize-info .accordion-section-title:hover:after,#customize-info.open .accordion-section-title:after{color:#555}#customize-info .preview-notice{font-size:13px;line-height:24px}#customize-info .theme-name{font-size:20px;font-weight:200;line-height:24px;display:block}#customize-info .theme-screenshot{width:258px}#customize-info .theme-description{margin-top:1em;color:#666;line-height:20px}#customize-theme-controls .control-section{border:none}#customize-theme-controls .accordion-section-title{color:#555;background-color:#fff;border-bottom:1px solid #eee}#customize-theme-controls .accordion-section-content{color:#555;background:#fff}#customize-info .accordion-section-title:focus,#customize-info .accordion-section-title:hover,#customize-info.open .accordion-section-title,#customize-theme-controls .control-section .accordion-section-title:focus,#customize-theme-controls .control-section .accordion-section-title:hover,#customize-theme-controls .control-section.open .accordion-section-title,#customize-theme-controls .control-section:hover>.accordion-section-title{color:#222;background:#f5f5f5}.js .control-section .accordion-section-title:focus,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section:hover .accordion-section-title{background:#f5f5f5}#customize-theme-controls .control-section .accordion-section-title:focus:after,#customize-theme-controls .control-section .accordion-section-title:hover:after,#customize-theme-controls .control-section.open .accordion-section-title:after,#customize-theme-controls .control-section:hover>.accordion-section-title:after{color:#555}#customize-info.open,#customize-theme-controls .control-section.open{border-bottom:1px solid #eee}#customize-theme-controls .control-section.open .accordion-section-title{border-bottom-color:#eee!important}#customize-theme-controls .control-section:last-of-type.open,#customize-theme-controls .control-section:last-of-type>.accordion-section-title{border-bottom-color:#ddd}#customize-theme-controls .accordion-section-content,#customize-theme-controls>ul{margin:0}.control-section.control-panel>.accordion-section-title{padding-left:54px}.control-section.control-panel>.accordion-section-title:after{content:"\f345";background:#f5f5f5;color:#555;width:38px;height:100%;margin:-11px 0 -11px -10px;line-height:45px;padding-right:5px;border-right:1px solid #eee;z-index:0}.rtl .control-section.control-panel>.accordion-section-title:after{content:"\f341"}#customize-theme-controls .control-section.control-panel>h3.accordion-section-title:focus:after,#customize-theme-controls .control-section.control-panel>h3.accordion-section-title:hover:after{background:#ddd;color:#000;border:1px solid #d9d9d9;border-left:none;margin-top:-12px;line-height:44px;z-index:1}.accordion-sub-container.control-panel-content{display:none;position:absolute;right:300px;top:0;width:300px;border-top:1px solid #ddd;-webkit-transition:right ease-in-out .18s;transition:right ease-in-out .18s}.accordion-sub-container.control-panel-content.animating{display:block}.current-panel .accordion-sub-container.control-panel-content{width:100%}.customize-controls-close{display:block;position:absolute;top:0;right:0;width:45px;height:45px;padding-left:2px;background:#eee;border-left:1px solid #ddd;color:#444;cursor:pointer;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.control-panel-back{display:block;position:fixed;top:0;z-index:99;right:-48px;width:45px;height:45px;padding-left:2px;background:#eee;border-left:1px solid #ddd;cursor:pointer;-webkit-transition:right .18s ease-in-out,color .1s ease-in-out,background .1s ease-in-out;transition:right .18s ease-in-out,color .1s ease-in-out,background .1s ease-in-out}.collapsed .control-panel-back{display:none}.control-panel-back:focus,.control-panel-back:hover,.customize-controls-close:focus,.customize-controls-close:hover{background:#ddd;border-color:#ccc;color:#000;outline:0;-webkit-box-shadow:none;box-shadow:none}.customize-controls-close:before{font:400 22px/1 dashicons;content:"\f335";position:relative;top:7px;right:13px}.control-panel-back:before{font:400 20px/1 dashicons;content:"\f341";position:relative;top:7px;right:13px}.rtl .control-panel-back:before{content:"\f345"}.in-sub-panel .control-panel-back{right:0}.current-panel>.accordion-section-title{height:22px}.wp-full-overlay-sidebar .wp-full-overlay-header{-webkit-transition:padding ease-in-out .18s;transition:padding ease-in-out .18s}.in-sub-panel .wp-full-overlay-sidebar .wp-full-overlay-header{padding-right:62px}#customize-info,#customize-theme-controls>ul>.accordion-section{position:relative;right:0;-webkit-transition:right ease-in-out .18s;transition:right ease-in-out .18s}.in-sub-panel #customize-info,.in-sub-panel #customize-theme-controls>ul>.accordion-section{right:-300px;width:300px}.in-sub-panel #customize-theme-controls .accordion-section.current-panel{width:100%}#customize-theme-controls .control-section.current-panel{padding:0}#customize-theme-controls .control-section>h3.accordion-section-title{position:relative;right:0}#customize-theme-controls .control-section.current-panel>h3.accordion-section-title{right:-300px;-webkit-transition:right ease-in-out .18s;transition:right ease-in-out .18s}.control-section.control-panel .accordion-section-title .panel-title{font-size:20px;font-weight:200;line-height:24px;display:block;border:none}.control-section.control-panel .preview-notice{font-size:13px;line-height:24px}p.customize-section-description{font-style:normal}.customize-control{width:100%;float:right;clear:both;margin-bottom:8px}.customize-control input[type=checkbox],.customize-control input[type=radio],.customize-control select{line-height:28px}.customize-control input[type=email],.customize-control input[type=number],.customize-control input[type=password],.customize-control input[type=search],.customize-control input[type=tel],.customize-control input[type=text],.customize-control input[type=url]{width:98%;line-height:18px;margin:0}.customize-control-textarea textarea{width:100%;resize:vertical}.customize-control select{min-width:50%;max-width:100%;height:28px;line-height:28px}.customize-control select[multiple]{height:auto}.customize-control-title{display:block;font-size:14px;line-height:24px;font-weight:600;margin-bottom:5px}.customize-control-description{display:block;font-style:italic;line-height:18px;margin-bottom:5px}.customize-control-checkbox label,.customize-control-color .color-picker,.customize-control-upload div{line-height:28px}.customize-control-checkbox input{margin-left:5px}.customize-control-radio{padding:5px 0 10px}.customize-control-radio .customize-control-title{margin-bottom:0;line-height:22px}.customize-control-radio .customize-control-title+.customize-control-description{margin-top:7px}.customize-control-radio label{line-height:32px}.customize-control-radio input{margin-left:5px}.customize-control .attachment-thumb.type-icon{float:right;margin:10px;width:auto}.customize-control .attachment-title{font-weight:700;margin:0;padding:5px 10px}.customize-control .attachment-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;padding:5px 10px 0}.customize-control .attachment-meta-title{padding-top:7px}.customize-control .thumbnail-image{line-height:0}.customize-control .thumbnail-image img{cursor:pointer}#customize-preview iframe{width:100%;height:100%}.wp-full-overlay-sidebar{background:#eee;border-left:1px solid #ddd}.collapse-sidebar{background-color:transparent!important;border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;-webkit-border-radius:0!important;border-radius:0!important}.collapse-sidebar:active,.collapse-sidebar:active .collapse-sidebar-arrow:before,.collapse-sidebar:active .collapse-sidebar-label{text-shadow:none}.collapsed .collapse-sidebar-arrow:before{color:#888}.accordion-section .dropdown{float:right;display:block;position:relative;cursor:pointer}.accordion-section .dropdown-content{overflow:hidden;float:right;min-width:30px;height:16px;line-height:16px;margin-left:16px;padding:4px 5px;border:2px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.customize-control .dropdown-arrow{position:absolute;top:0;bottom:0;left:0;width:20px;background:#eee}.customize-control .dropdown-arrow:after{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#333}.customize-control .dropdown-status{color:#333;background:#eee;display:none;max-width:112px}.customize-control-color .color-picker-hex{display:none}.customize-control-color.open .color-picker-hex{display:block}.customize-control-color .dropdown{margin-left:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#555;border:1px solid rgba(0,0,0,.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,.25)}.ios #customize-preview,.ios .wp-full-overlay{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}.customize-control-background .current,.customize-control-header .current,.customize-control-image .current,.customize-control-upload .current{margin-bottom:8px}.customize-control-header .uploaded{margin-bottom:18px}.customize-control-header .default button:not(.random),.customize-control-header .uploaded button:not(.random){width:100%;padding:0;margin:0;background:0 0;border:none;color:inherit;cursor:pointer}.customize-control-header button img{display:block}.customize-control-background .default-button,.customize-control-background .remove-button,.customize-control-background .upload-button,.customize-control-header button.new,.customize-control-header button.remove,.customize-control-image .default-button,.customize-control-image .remove-button,.customize-control-image .upload-button,.customize-control-upload .default-button,.customize-control-upload .remove-button,.customize-control-upload .upload-button{white-space:normal;width:48%;height:auto}.customize-control-background .current .container,.customize-control-header .current .container,.customize-control-image .current .container,.customize-control-upload .current .container{overflow:hidden;border:1px solid #eee;-webkit-border-radius:2px;border-radius:2px}.customize-control-background .current .container,.customize-control-image .current .container,.customize-control-upload .current .container{min-height:40px}.customize-control-background .placeholder,.customize-control-header .placeholder,.customize-control-image .placeholder,.customize-control-upload .placeholder{width:100%;position:relative;text-align:center;cursor:default}.customize-control-background .inner,.customize-control-header .inner,.customize-control-image .inner,.customize-control-upload .inner{display:none;position:absolute;width:100%;color:#555;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.customize-control-background .inner,.customize-control-image .inner,.customize-control-upload .inner{display:block;min-height:40px}.customize-control-background .inner,.customize-control-header .inner,.customize-control-header .inner .dashicons,.customize-control-image .inner,.customize-control-upload .inner{line-height:20px;top:10px}.customize-control-header .list .inner,.customize-control-header .list .inner .dashicons{top:9px}.customize-control-header .header-view{position:relative;width:100%;margin-bottom:5px}.customize-control-header .header-view:last-child{margin-bottom:0}.customize-control-header .header-view:after{border:0}.customize-control-header .header-view.selected:after{content:'';position:absolute;height:auto;top:0;right:0;bottom:0;left:0;border:4px solid #2ea2cc;-webkit-border-radius:2px;border-radius:2px}.customize-control-header .header-view.button.selected{border:0}.customize-control-header .uploaded .header-view .close{font-size:2em;color:grey;position:absolute;visibility:hidden;top:10px;left:10px;z-index:1;width:20px;height:20px;cursor:pointer}.customize-control-header .uploaded .header-view .close:hover{color:#000;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}.customize-control-header .header-view:hover .close{visibility:visible}.customize-control-header .random.placeholder{cursor:pointer;-webkit-border-radius:2px;border-radius:2px;height:40px}.customize-control-header button.random{width:100%;height:auto;min-height:40px;white-space:normal}.customize-control-header button.random .dice{margin-top:4px}.customize-control-header .header-view:hover>button.random .dice,.customize-control-header .placeholder:hover .dice{-webkit-animation:dice-color-change 3s infinite;-ms-animation:dice-color-change 3s infinite;animation:dice-color-change 3s infinite}@-webkit-keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}@-ms-keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}@keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}.customize-control-background .actions,.customize-control-header .actions,.customize-control-image .actions,.customize-control-upload .actions{margin-bottom:32px}.customize-control-header .choice{position:relative;display:block;margin-bottom:9px}.customize-control-header .uploaded div:last-child>.choice{margin-bottom:0}.customize-control-background img,.customize-control-header img,.customize-control-image img,.customize-control-upload img{width:100%;-webkit-border-radius:2px;border-radius:2px}.customize-control-background .default-button,.customize-control-background .remove-button,.customize-control-header .remove,.customize-control-image .default-button,.customize-control-image .remove-button,.customize-control-upload .default-button,.customize-control-upload .remove-button{float:right;margin-left:3px}.customize-control-background .upload-button,.customize-control-header .new,.customize-control-image .upload-button,.customize-control-upload .upload-button{float:left}body.cheatin{font-size:medium;height:auto;background:#fff;margin:50px auto 2em;padding:1em 2em;max-width:700px;min-width:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.cheatin p{font-size:14px;line-height:1.5;margin:25px 0 20px}
\ No newline at end of file
diff --git a/wp-admin/css/customize-controls.css b/wp-admin/css/customize-controls.css
new file mode 100644
index 0000000..599fdac
--- /dev/null
+++ b/wp-admin/css/customize-controls.css
@@ -0,0 +1,850 @@
+body {
+ overflow: hidden;
+}
+
+#customize-controls a {
+ text-decoration: none;
+}
+
+#customize-controls h3 {
+ font-size: 14px;
+}
+
+#customize-controls img {
+ max-width: 100%;
+}
+
+#customize-controls .submit {
+ text-align: center;
+}
+
+#customize-controls .description {
+ color: #666666;
+}
+
+#customize-header-actions .button-primary {
+ float: right;
+ margin-top: 9px;
+}
+
+#customize-header-actions .spinner {
+ margin-top: 16px;
+ margin-right: 4px;
+}
+
+.saving #customize-header-actions .spinner {
+ display: block;
+}
+
+#customize-header-actions {
+ border-bottom: 1px solid #ddd;
+}
+
+#customize-controls .wp-full-overlay-sidebar-content {
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+#customize-info {
+ border: none;
+ border-top: 1px solid #ddd;
+}
+
+#customize-info .accordion-section-title {
+ background-color: #fff;
+ color: #666666;
+ border-left: none;
+ border-right: none;
+ border-bottom: 1px solid #eeeeee;
+}
+
+#customize-info.open .accordion-section-title:after,
+#customize-info .accordion-section-title:hover:after,
+#customize-info .accordion-section-title:focus:after {
+ color: #555555;
+}
+
+#customize-info .preview-notice {
+ font-size: 13px;
+ line-height: 24px;
+}
+
+#customize-info .theme-name {
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 24px;
+ display: block;
+}
+
+#customize-info .theme-screenshot {
+ width: 258px;
+}
+
+#customize-info .theme-description {
+ margin-top: 1em;
+ color: #666666;
+ line-height: 20px;
+}
+
+#customize-theme-controls .control-section {
+ border: none;
+}
+
+#customize-theme-controls .accordion-section-title {
+ color: #555555;
+ background-color: #fff;
+ border-bottom: 1px solid #eeeeee;
+}
+
+#customize-theme-controls .accordion-section-content {
+ color: #555555;
+ background: #fff;
+}
+
+#customize-info.open .accordion-section-title,
+#customize-info .accordion-section-title:hover,
+#customize-info .accordion-section-title:focus,
+#customize-theme-controls .control-section:hover > .accordion-section-title,
+#customize-theme-controls .control-section .accordion-section-title:hover,
+#customize-theme-controls .control-section.open .accordion-section-title,
+#customize-theme-controls .control-section .accordion-section-title:focus {
+ color: #222;
+ background: #f5f5f5;
+}
+
+.js .control-section:hover .accordion-section-title,
+.js .control-section .accordion-section-title:hover,
+.js .control-section.open .accordion-section-title,
+.js .control-section .accordion-section-title:focus {
+ background: #f5f5f5;
+}
+
+#customize-theme-controls .control-section:hover > .accordion-section-title:after,
+#customize-theme-controls .control-section .accordion-section-title:hover:after,
+#customize-theme-controls .control-section.open .accordion-section-title:after,
+#customize-theme-controls .control-section .accordion-section-title:focus:after {
+ color: #555;
+}
+
+#customize-info.open,
+#customize-theme-controls .control-section.open {
+ border-bottom: 1px solid #eeeeee;
+}
+
+#customize-theme-controls .control-section.open .accordion-section-title {
+ border-bottom-color: #eeeeee !important;
+}
+
+#customize-theme-controls .control-section:last-of-type.open,
+#customize-theme-controls .control-section:last-of-type > .accordion-section-title {
+ border-bottom-color: #ddd;
+}
+
+#customize-theme-controls > ul,
+#customize-theme-controls .accordion-section-content {
+ margin: 0;
+}
+
+.control-section.control-panel > .accordion-section-title {
+ padding-right: 54px;
+}
+
+.control-section.control-panel > .accordion-section-title:after {
+ content: "\f345";
+ background: #f5f5f5;
+ color: #555;
+ width: 38px;
+ height: 100%;
+ margin: -11px -10px -11px 0; /* compensate for positioning */
+ line-height: 45px;
+ padding-left: 5px;
+ border-left: 1px solid #eee;
+ z-index: 0;
+}
+
+.rtl .control-section.control-panel > .accordion-section-title:after {
+ content: "\f341";
+}
+
+#customize-theme-controls .control-section.control-panel > h3.accordion-section-title:focus:after,
+#customize-theme-controls .control-section.control-panel > h3.accordion-section-title:hover:after {
+ background: #ddd;
+ color: #000;
+ border: 1px solid #d9d9d9;
+ border-right: none;
+ margin-top: -12px;
+ line-height: 44px;
+ z-index: 1;
+}
+
+.accordion-sub-container.control-panel-content {
+ display: none;
+ position: absolute;
+ left: 300px;
+ top: 0;
+ width: 300px;
+ border-top: 1px solid #ddd;
+ -webkit-transition: left ease-in-out .18s;
+ transition: left ease-in-out .18s;
+}
+
+.accordion-sub-container.control-panel-content.animating {
+ display: block;
+}
+
+.current-panel .accordion-sub-container.control-panel-content {
+ width: 100%;
+}
+
+.customize-controls-close {
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 45px;
+ height: 45px;
+ padding-right: 2px;
+ background: #eee;
+ border-right: 1px solid #ddd;
+ color: #444;
+ cursor: pointer;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.control-panel-back {
+ display: block;
+ position: fixed;
+ top: 0;
+ z-index: 99;
+ left: -48px;
+ width: 45px;
+ height: 45px;
+ padding-right: 2px;
+ background: #eee;
+ border-right: 1px solid #ddd;
+ cursor: pointer;
+ -webkit-transition: left .18s ease-in-out, color .1s ease-in-out, background .1s ease-in-out;
+ transition: left .18s ease-in-out, color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.collapsed .control-panel-back {
+ display: none;
+}
+
+.customize-controls-close:focus,
+.customize-controls-close:hover,
+.control-panel-back:focus,
+.control-panel-back:hover {
+ background: #ddd;
+ border-color: #ccc;
+ color: #000;
+ outline: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.customize-controls-close:before {
+ font: normal 22px/1 dashicons;
+ content: "\f335";
+ position: relative;
+ top: 7px;
+ left: 13px;
+}
+
+.control-panel-back:before {
+ font: normal 20px/1 dashicons;
+ content: "\f341";
+ position: relative;
+ top: 7px;
+ left: 13px;
+}
+
+.rtl .control-panel-back:before {
+ content: "\f345";
+}
+
+.in-sub-panel .control-panel-back {
+ left: 0;
+}
+
+.current-panel > .accordion-section-title {
+ height: 22px;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-header {
+ -webkit-transition: padding ease-in-out .18s;
+ transition: padding ease-in-out .18s;
+}
+
+.in-sub-panel .wp-full-overlay-sidebar .wp-full-overlay-header {
+ padding-left: 62px;
+}
+
+#customize-info,
+#customize-theme-controls > ul > .accordion-section {
+ position: relative;
+ left: 0;
+ -webkit-transition: left ease-in-out .18s;
+ transition: left ease-in-out .18s;
+}
+
+.in-sub-panel #customize-info,
+.in-sub-panel #customize-theme-controls > ul > .accordion-section {
+ left: -300px;
+ width: 300px;
+}
+
+.in-sub-panel #customize-theme-controls .accordion-section.current-panel {
+ width: 100%;
+}
+
+#customize-theme-controls .control-section.current-panel {
+ padding: 0;
+}
+
+#customize-theme-controls .control-section > h3.accordion-section-title {
+ position: relative;
+ left: 0;
+}
+
+#customize-theme-controls .control-section.current-panel > h3.accordion-section-title {
+ left: -300px;
+ -webkit-transition: left ease-in-out .18s;
+ transition: left ease-in-out .18s;
+}
+
+.control-section.control-panel .accordion-section-title .panel-title {
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 24px;
+ display: block;
+ border: none;
+}
+
+.control-section.control-panel .preview-notice {
+ font-size: 13px;
+ line-height: 24px;
+}
+
+p.customize-section-description {
+ font-style: normal;
+}
+
+.customize-control {
+ width: 100%;
+ float: left;
+ clear: both;
+ margin-bottom: 8px;
+}
+
+.customize-control select,
+.customize-control input[type="radio"],
+.customize-control input[type="checkbox"] {
+ line-height: 28px;
+}
+
+.customize-control input[type="text"],
+.customize-control input[type="password"],
+.customize-control input[type="email"],
+.customize-control input[type="number"],
+.customize-control input[type="search"],
+.customize-control input[type="tel"],
+.customize-control input[type="url"] {
+ width: 98%;
+ line-height: 18px;
+ margin: 0;
+}
+
+.customize-control-textarea textarea {
+ width: 100%;
+ resize: vertical;
+}
+
+.customize-control select {
+ min-width: 50%;
+ max-width: 100%;
+ height: 28px;
+ line-height: 28px;
+}
+
+.customize-control select[multiple] {
+ height: auto;
+}
+
+.customize-control-title {
+ display: block;
+ font-size: 14px;
+ line-height: 24px;
+ font-weight: 600;
+ margin-bottom: 5px;
+}
+
+.customize-control-description {
+ display: block;
+ font-style: italic;
+ line-height: 18px;
+ margin-bottom: 5px;
+}
+
+.customize-control-color .color-picker,
+.customize-control-checkbox label,
+.customize-control-upload div {
+ line-height: 28px;
+}
+
+.customize-control-checkbox input {
+ margin-right: 5px;
+}
+
+.customize-control-radio {
+ padding: 5px 0 10px;
+}
+
+.customize-control-radio .customize-control-title {
+ margin-bottom: 0;
+ line-height: 22px;
+}
+
+.customize-control-radio .customize-control-title + .customize-control-description {
+ margin-top: 7px;
+}
+
+.customize-control-radio label {
+ line-height: 32px;
+}
+
+.customize-control-radio input {
+ margin-right: 5px;
+}
+
+.customize-control .attachment-thumb.type-icon {
+ float: left;
+ margin: 10px;
+ width: auto;
+}
+
+.customize-control .attachment-title {
+ font-weight: bold;
+ margin: 0;
+ padding: 5px 10px;
+}
+
+.customize-control .attachment-meta {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ margin: 0;
+ padding: 5px 10px 0;
+}
+
+.customize-control .attachment-meta-title {
+ padding-top: 7px;
+}
+
+.customize-control .thumbnail-image {
+ line-height: 0;
+}
+
+.customize-control .thumbnail-image img {
+ cursor: pointer;
+}
+
+#customize-preview iframe {
+ width: 100%;
+ height: 100%;
+}
+
+.wp-full-overlay-sidebar {
+ background: #eeeeee;
+ border-right: 1px solid #ddd;
+}
+
+.collapse-sidebar {
+ background-color: transparent !important;
+ border: none !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ -webkit-border-radius: 0 !important;
+ border-radius: 0 !important;
+}
+
+
+.collapse-sidebar:active,
+.collapse-sidebar:active .collapse-sidebar-label,
+.collapse-sidebar:active .collapse-sidebar-arrow:before {
+ text-shadow: none;
+}
+
+.collapsed .collapse-sidebar-arrow:before {
+ color: #888;
+}
+
+/* Style for custom settings */
+
+/*
+ * Dropdowns
+ */
+.accordion-section .dropdown {
+ float: left;
+ display: block;
+ position: relative;
+ cursor: pointer;
+}
+
+.accordion-section .dropdown-content {
+ overflow: hidden;
+ float: left;
+ min-width: 30px;
+ height: 16px;
+ line-height: 16px;
+ margin-right: 16px;
+ padding: 4px 5px;
+ border: 2px solid #eeeeee;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.customize-control .dropdown-arrow {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ width: 20px;
+ background: #eeeeee;
+}
+
+.customize-control .dropdown-arrow:after {
+ content: "\f140";
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #333;
+}
+
+.customize-control .dropdown-status {
+ color: #333;
+ background: #eeeeee;
+ display: none;
+ max-width: 112px;
+}
+
+/* Color Picker */
+.customize-control-color .color-picker-hex {
+ display: none;
+}
+
+.customize-control-color.open .color-picker-hex {
+ display: block;
+}
+
+.customize-control-color .dropdown {
+ margin-right: 5px;
+ margin-bottom: 5px;
+}
+
+.customize-control-color .dropdown .dropdown-content {
+ background-color: #555555;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+.customize-control-color .dropdown:hover .dropdown-content {
+ border-color: rgba(0, 0, 0, 0.25);
+}
+
+/**
+ * iOS can't scroll iframes,
+ * instead it expands the iframe size to match the size of the content
+ */
+.ios .wp-full-overlay {
+ position: relative;
+}
+
+.ios #customize-preview {
+ position: relative;
+}
+
+.ios #customize-controls .wp-full-overlay-sidebar-content {
+ -webkit-overflow-scrolling: touch;
+}
+
+/** Header control **/
+
+.customize-control-upload .current,
+.customize-control-image .current,
+.customize-control-background .current,
+.customize-control-header .current {
+ margin-bottom: 8px;
+}
+
+.customize-control-header .uploaded {
+ margin-bottom: 18px;
+}
+
+.customize-control-header .uploaded button:not(.random),
+.customize-control-header .default button:not(.random) {
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ background: none;
+ border: none;
+ color: inherit;
+ cursor: pointer;
+}
+
+.customize-control-header button img {
+ display: block;
+}
+
+.customize-control-upload .remove-button,
+.customize-control-upload .default-button,
+.customize-control-upload .upload-button,
+.customize-control-image .remove-button,
+.customize-control-image .default-button,
+.customize-control-image .upload-button,
+.customize-control-background .remove-button,
+.customize-control-background .default-button,
+.customize-control-background .upload-button,
+.customize-control-header button.new,
+.customize-control-header button.remove {
+ white-space: normal;
+ width: 48%;
+ height: auto;
+}
+
+.customize-control-upload .current .container,
+.customize-control-image .current .container,
+.customize-control-background .current .container,
+.customize-control-header .current .container {
+ overflow: hidden;
+ -webkit-border-radius: 2px;
+ border: 1px solid #eee;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+}
+
+.customize-control-upload .current .container,
+.customize-control-background .current .container,
+.customize-control-image .current .container {
+ min-height: 40px;
+}
+
+.customize-control-upload .placeholder,
+.customize-control-image .placeholder,
+.customize-control-background .placeholder,
+.customize-control-header .placeholder {
+ width: 100%;
+ position: relative;
+ text-align: center;
+ cursor: default;
+}
+
+.customize-control-upload .inner,
+.customize-control-image .inner,
+.customize-control-background .inner,
+.customize-control-header .inner {
+ display: none;
+ position: absolute;
+ width: 100%;
+ color: #555;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.customize-control-upload .inner,
+.customize-control-background .inner,
+.customize-control-image .inner {
+ display: block;
+ min-height: 40px;
+}
+
+.customize-control-upload .inner,
+.customize-control-image .inner,
+.customize-control-background .inner,
+.customize-control-header .inner,
+.customize-control-header .inner .dashicons {
+ line-height: 20px;
+ top: 10px;
+}
+
+.customize-control-header .list .inner,
+.customize-control-header .list .inner .dashicons {
+ top: 9px;
+}
+
+.customize-control-header .header-view {
+ position: relative;
+ width: 100%;
+ margin-bottom: 5px;
+}
+
+.customize-control-header .header-view:last-child {
+ margin-bottom: 0px;
+}
+
+/* Convoluted, but 'outline' support isn't good enough yet */
+.customize-control-header .header-view:after {
+ border: 0;
+}
+.customize-control-header .header-view.selected:after {
+ content: '';
+ position: absolute;
+ height: auto;
+ top: 0; left: 0; bottom: 0; right: 0;
+ border: 4px solid #2ea2cc;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+}
+.customize-control-header .header-view.button.selected {
+ border: 0;
+}
+
+/* Header control: overlay "close" button */
+
+.customize-control-header .uploaded .header-view .close {
+ font-size: 2em;
+ color: grey;
+ position: absolute;
+ visibility: hidden;
+ top: 10px;
+ right: 10px;
+ z-index: 1;
+ width: 20px;
+ height: 20px;
+ cursor: pointer;
+}
+
+.customize-control-header .uploaded .header-view .close:hover {
+ color: black;
+ text-shadow:
+ -1px -1px 0 #fff,
+ 1px -1px 0 #fff,
+ -1px 1px 0 #fff,
+ 1px 1px 0 #fff;
+}
+
+.customize-control-header .header-view:hover .close {
+ visibility: visible;
+}
+
+/* Header control: randomiz(s)er */
+
+.customize-control-header .random.placeholder {
+ cursor: pointer;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ height: 40px;
+}
+
+.customize-control-header button.random {
+ width: 100%;
+ height: auto;
+ min-height: 40px;
+ white-space: normal;
+}
+
+.customize-control-header button.random .dice {
+ margin-top: 4px;
+}
+
+.customize-control-header .placeholder:hover .dice,
+.customize-control-header .header-view:hover > button.random .dice {
+ -webkit-animation: dice-color-change 3s infinite;
+ -ms-animation: dice-color-change 3s infinite;
+ animation: dice-color-change 3s infinite;
+}
+
+@-webkit-keyframes dice-color-change {
+ 0% { color: #d4b146; }
+ 50% { color: #ef54b0; }
+ 75% { color: #7190d3; }
+ 100% { color: #d4b146; }
+}
+
+@-ms-keyframes dice-color-change {
+ 0% { color: #d4b146; }
+ 50% { color: #ef54b0; }
+ 75% { color: #7190d3; }
+ 100% { color: #d4b146; }
+}
+
+@keyframes dice-color-change {
+ 0% { color: #d4b146; }
+ 50% { color: #ef54b0; }
+ 75% { color: #7190d3; }
+ 100% { color: #d4b146; }
+}
+
+.customize-control-upload .actions,
+.customize-control-image .actions,
+.customize-control-background .actions,
+.customize-control-header .actions {
+ margin-bottom: 32px;
+}
+
+.customize-control-header .choice {
+ position: relative;
+ display: block;
+ margin-bottom: 9px;
+}
+
+.customize-control-header .uploaded div:last-child > .choice {
+ margin-bottom: 0;
+}
+
+.customize-control-upload img,
+.customize-control-image img,
+.customize-control-background img,
+.customize-control-header img {
+ width: 100%;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+}
+
+.customize-control-upload .remove-button,
+.customize-control-upload .default-button,
+.customize-control-image .remove-button,
+.customize-control-image .default-button,
+.customize-control-background .remove-button,
+.customize-control-background .default-button,
+.customize-control-header .remove {
+ float: left;
+ margin-right: 3px;
+}
+
+.customize-control-upload .upload-button,
+.customize-control-image .upload-button,
+.customize-control-background .upload-button,
+.customize-control-header .new {
+ float: right;
+}
+
+
+/** Handle cheaters. */
+body.cheatin {
+ font-size: medium;
+ height: auto;
+ background: #fff;
+ margin: 50px auto 2em;
+ padding: 1em 2em;
+ max-width: 700px;
+ min-width: 0;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+}
+
+body.cheatin p {
+ font-size: 14px;
+ line-height: 1.5;
+ margin: 25px 0 20px;
+}
diff --git a/wp-admin/css/customize-controls.min.css b/wp-admin/css/customize-controls.min.css
new file mode 100644
index 0000000..483c49a
--- /dev/null
+++ b/wp-admin/css/customize-controls.min.css
@@ -0,0 +1 @@
+body{overflow:hidden}#customize-controls a{text-decoration:none}#customize-controls h3{font-size:14px}#customize-controls img{max-width:100%}#customize-controls .submit{text-align:center}#customize-controls .description{color:#666}#customize-header-actions .button-primary{float:right;margin-top:9px}#customize-header-actions .spinner{margin-top:16px;margin-right:4px}.saving #customize-header-actions .spinner{display:block}#customize-header-actions{border-bottom:1px solid #ddd}#customize-controls .wp-full-overlay-sidebar-content{overflow-y:auto;overflow-x:hidden}#customize-info{border:none;border-top:1px solid #ddd}#customize-info .accordion-section-title{background-color:#fff;color:#666;border-left:none;border-right:none;border-bottom:1px solid #eee}#customize-info .accordion-section-title:focus:after,#customize-info .accordion-section-title:hover:after,#customize-info.open .accordion-section-title:after{color:#555}#customize-info .preview-notice{font-size:13px;line-height:24px}#customize-info .theme-name{font-size:20px;font-weight:200;line-height:24px;display:block}#customize-info .theme-screenshot{width:258px}#customize-info .theme-description{margin-top:1em;color:#666;line-height:20px}#customize-theme-controls .control-section{border:none}#customize-theme-controls .accordion-section-title{color:#555;background-color:#fff;border-bottom:1px solid #eee}#customize-theme-controls .accordion-section-content{color:#555;background:#fff}#customize-info .accordion-section-title:focus,#customize-info .accordion-section-title:hover,#customize-info.open .accordion-section-title,#customize-theme-controls .control-section .accordion-section-title:focus,#customize-theme-controls .control-section .accordion-section-title:hover,#customize-theme-controls .control-section.open .accordion-section-title,#customize-theme-controls .control-section:hover>.accordion-section-title{color:#222;background:#f5f5f5}.js .control-section .accordion-section-title:focus,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section:hover .accordion-section-title{background:#f5f5f5}#customize-theme-controls .control-section .accordion-section-title:focus:after,#customize-theme-controls .control-section .accordion-section-title:hover:after,#customize-theme-controls .control-section.open .accordion-section-title:after,#customize-theme-controls .control-section:hover>.accordion-section-title:after{color:#555}#customize-info.open,#customize-theme-controls .control-section.open{border-bottom:1px solid #eee}#customize-theme-controls .control-section.open .accordion-section-title{border-bottom-color:#eee!important}#customize-theme-controls .control-section:last-of-type.open,#customize-theme-controls .control-section:last-of-type>.accordion-section-title{border-bottom-color:#ddd}#customize-theme-controls .accordion-section-content,#customize-theme-controls>ul{margin:0}.control-section.control-panel>.accordion-section-title{padding-right:54px}.control-section.control-panel>.accordion-section-title:after{content:"\f345";background:#f5f5f5;color:#555;width:38px;height:100%;margin:-11px -10px -11px 0;line-height:45px;padding-left:5px;border-left:1px solid #eee;z-index:0}.rtl .control-section.control-panel>.accordion-section-title:after{content:"\f341"}#customize-theme-controls .control-section.control-panel>h3.accordion-section-title:focus:after,#customize-theme-controls .control-section.control-panel>h3.accordion-section-title:hover:after{background:#ddd;color:#000;border:1px solid #d9d9d9;border-right:none;margin-top:-12px;line-height:44px;z-index:1}.accordion-sub-container.control-panel-content{display:none;position:absolute;left:300px;top:0;width:300px;border-top:1px solid #ddd;-webkit-transition:left ease-in-out .18s;transition:left ease-in-out .18s}.accordion-sub-container.control-panel-content.animating{display:block}.current-panel .accordion-sub-container.control-panel-content{width:100%}.customize-controls-close{display:block;position:absolute;top:0;left:0;width:45px;height:45px;padding-right:2px;background:#eee;border-right:1px solid #ddd;color:#444;cursor:pointer;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.control-panel-back{display:block;position:fixed;top:0;z-index:99;left:-48px;width:45px;height:45px;padding-right:2px;background:#eee;border-right:1px solid #ddd;cursor:pointer;-webkit-transition:left .18s ease-in-out,color .1s ease-in-out,background .1s ease-in-out;transition:left .18s ease-in-out,color .1s ease-in-out,background .1s ease-in-out}.collapsed .control-panel-back{display:none}.control-panel-back:focus,.control-panel-back:hover,.customize-controls-close:focus,.customize-controls-close:hover{background:#ddd;border-color:#ccc;color:#000;outline:0;-webkit-box-shadow:none;box-shadow:none}.customize-controls-close:before{font:400 22px/1 dashicons;content:"\f335";position:relative;top:7px;left:13px}.control-panel-back:before{font:400 20px/1 dashicons;content:"\f341";position:relative;top:7px;left:13px}.rtl .control-panel-back:before{content:"\f345"}.in-sub-panel .control-panel-back{left:0}.current-panel>.accordion-section-title{height:22px}.wp-full-overlay-sidebar .wp-full-overlay-header{-webkit-transition:padding ease-in-out .18s;transition:padding ease-in-out .18s}.in-sub-panel .wp-full-overlay-sidebar .wp-full-overlay-header{padding-left:62px}#customize-info,#customize-theme-controls>ul>.accordion-section{position:relative;left:0;-webkit-transition:left ease-in-out .18s;transition:left ease-in-out .18s}.in-sub-panel #customize-info,.in-sub-panel #customize-theme-controls>ul>.accordion-section{left:-300px;width:300px}.in-sub-panel #customize-theme-controls .accordion-section.current-panel{width:100%}#customize-theme-controls .control-section.current-panel{padding:0}#customize-theme-controls .control-section>h3.accordion-section-title{position:relative;left:0}#customize-theme-controls .control-section.current-panel>h3.accordion-section-title{left:-300px;-webkit-transition:left ease-in-out .18s;transition:left ease-in-out .18s}.control-section.control-panel .accordion-section-title .panel-title{font-size:20px;font-weight:200;line-height:24px;display:block;border:none}.control-section.control-panel .preview-notice{font-size:13px;line-height:24px}p.customize-section-description{font-style:normal}.customize-control{width:100%;float:left;clear:both;margin-bottom:8px}.customize-control input[type=checkbox],.customize-control input[type=radio],.customize-control select{line-height:28px}.customize-control input[type=email],.customize-control input[type=number],.customize-control input[type=password],.customize-control input[type=search],.customize-control input[type=tel],.customize-control input[type=text],.customize-control input[type=url]{width:98%;line-height:18px;margin:0}.customize-control-textarea textarea{width:100%;resize:vertical}.customize-control select{min-width:50%;max-width:100%;height:28px;line-height:28px}.customize-control select[multiple]{height:auto}.customize-control-title{display:block;font-size:14px;line-height:24px;font-weight:600;margin-bottom:5px}.customize-control-description{display:block;font-style:italic;line-height:18px;margin-bottom:5px}.customize-control-checkbox label,.customize-control-color .color-picker,.customize-control-upload div{line-height:28px}.customize-control-checkbox input{margin-right:5px}.customize-control-radio{padding:5px 0 10px}.customize-control-radio .customize-control-title{margin-bottom:0;line-height:22px}.customize-control-radio .customize-control-title+.customize-control-description{margin-top:7px}.customize-control-radio label{line-height:32px}.customize-control-radio input{margin-right:5px}.customize-control .attachment-thumb.type-icon{float:left;margin:10px;width:auto}.customize-control .attachment-title{font-weight:700;margin:0;padding:5px 10px}.customize-control .attachment-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;padding:5px 10px 0}.customize-control .attachment-meta-title{padding-top:7px}.customize-control .thumbnail-image{line-height:0}.customize-control .thumbnail-image img{cursor:pointer}#customize-preview iframe{width:100%;height:100%}.wp-full-overlay-sidebar{background:#eee;border-right:1px solid #ddd}.collapse-sidebar{background-color:transparent!important;border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;-webkit-border-radius:0!important;border-radius:0!important}.collapse-sidebar:active,.collapse-sidebar:active .collapse-sidebar-arrow:before,.collapse-sidebar:active .collapse-sidebar-label{text-shadow:none}.collapsed .collapse-sidebar-arrow:before{color:#888}.accordion-section .dropdown{float:left;display:block;position:relative;cursor:pointer}.accordion-section .dropdown-content{overflow:hidden;float:left;min-width:30px;height:16px;line-height:16px;margin-right:16px;padding:4px 5px;border:2px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.customize-control .dropdown-arrow{position:absolute;top:0;bottom:0;right:0;width:20px;background:#eee}.customize-control .dropdown-arrow:after{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#333}.customize-control .dropdown-status{color:#333;background:#eee;display:none;max-width:112px}.customize-control-color .color-picker-hex{display:none}.customize-control-color.open .color-picker-hex{display:block}.customize-control-color .dropdown{margin-right:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#555;border:1px solid rgba(0,0,0,.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,.25)}.ios #customize-preview,.ios .wp-full-overlay{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}.customize-control-background .current,.customize-control-header .current,.customize-control-image .current,.customize-control-upload .current{margin-bottom:8px}.customize-control-header .uploaded{margin-bottom:18px}.customize-control-header .default button:not(.random),.customize-control-header .uploaded button:not(.random){width:100%;padding:0;margin:0;background:0 0;border:none;color:inherit;cursor:pointer}.customize-control-header button img{display:block}.customize-control-background .default-button,.customize-control-background .remove-button,.customize-control-background .upload-button,.customize-control-header button.new,.customize-control-header button.remove,.customize-control-image .default-button,.customize-control-image .remove-button,.customize-control-image .upload-button,.customize-control-upload .default-button,.customize-control-upload .remove-button,.customize-control-upload .upload-button{white-space:normal;width:48%;height:auto}.customize-control-background .current .container,.customize-control-header .current .container,.customize-control-image .current .container,.customize-control-upload .current .container{overflow:hidden;border:1px solid #eee;-webkit-border-radius:2px;border-radius:2px}.customize-control-background .current .container,.customize-control-image .current .container,.customize-control-upload .current .container{min-height:40px}.customize-control-background .placeholder,.customize-control-header .placeholder,.customize-control-image .placeholder,.customize-control-upload .placeholder{width:100%;position:relative;text-align:center;cursor:default}.customize-control-background .inner,.customize-control-header .inner,.customize-control-image .inner,.customize-control-upload .inner{display:none;position:absolute;width:100%;color:#555;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.customize-control-background .inner,.customize-control-image .inner,.customize-control-upload .inner{display:block;min-height:40px}.customize-control-background .inner,.customize-control-header .inner,.customize-control-header .inner .dashicons,.customize-control-image .inner,.customize-control-upload .inner{line-height:20px;top:10px}.customize-control-header .list .inner,.customize-control-header .list .inner .dashicons{top:9px}.customize-control-header .header-view{position:relative;width:100%;margin-bottom:5px}.customize-control-header .header-view:last-child{margin-bottom:0}.customize-control-header .header-view:after{border:0}.customize-control-header .header-view.selected:after{content:'';position:absolute;height:auto;top:0;left:0;bottom:0;right:0;border:4px solid #2ea2cc;-webkit-border-radius:2px;border-radius:2px}.customize-control-header .header-view.button.selected{border:0}.customize-control-header .uploaded .header-view .close{font-size:2em;color:grey;position:absolute;visibility:hidden;top:10px;right:10px;z-index:1;width:20px;height:20px;cursor:pointer}.customize-control-header .uploaded .header-view .close:hover{color:#000;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}.customize-control-header .header-view:hover .close{visibility:visible}.customize-control-header .random.placeholder{cursor:pointer;-webkit-border-radius:2px;border-radius:2px;height:40px}.customize-control-header button.random{width:100%;height:auto;min-height:40px;white-space:normal}.customize-control-header button.random .dice{margin-top:4px}.customize-control-header .header-view:hover>button.random .dice,.customize-control-header .placeholder:hover .dice{-webkit-animation:dice-color-change 3s infinite;-ms-animation:dice-color-change 3s infinite;animation:dice-color-change 3s infinite}@-webkit-keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}@-ms-keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}@keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}.customize-control-background .actions,.customize-control-header .actions,.customize-control-image .actions,.customize-control-upload .actions{margin-bottom:32px}.customize-control-header .choice{position:relative;display:block;margin-bottom:9px}.customize-control-header .uploaded div:last-child>.choice{margin-bottom:0}.customize-control-background img,.customize-control-header img,.customize-control-image img,.customize-control-upload img{width:100%;-webkit-border-radius:2px;border-radius:2px}.customize-control-background .default-button,.customize-control-background .remove-button,.customize-control-header .remove,.customize-control-image .default-button,.customize-control-image .remove-button,.customize-control-upload .default-button,.customize-control-upload .remove-button{float:left;margin-right:3px}.customize-control-background .upload-button,.customize-control-header .new,.customize-control-image .upload-button,.customize-control-upload .upload-button{float:right}body.cheatin{font-size:medium;height:auto;background:#fff;margin:50px auto 2em;padding:1em 2em;max-width:700px;min-width:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.cheatin p{font-size:14px;line-height:1.5;margin:25px 0 20px}
\ No newline at end of file
diff --git a/wp-admin/css/customize-widgets-rtl.css b/wp-admin/css/customize-widgets-rtl.css
new file mode 100644
index 0000000..d0cf8ad
--- /dev/null
+++ b/wp-admin/css/customize-widgets-rtl.css
@@ -0,0 +1,603 @@
+.wp-full-overlay-sidebar {
+ overflow: visible;
+}
+
+/**
+ * Hide all sidebar sections by default, only show them (via JS) once the
+ * preview loads and we know whether the sidebars are used in the template.
+ */
+
+.control-section.control-section-sidebar,
+.customize-control-sidebar_widgets label,
+.customize-control-sidebar_widgets .hide-if-js {
+ /* The link in .customize-control-sidebar_widgets .hide-if-js will fail if it ever gets used. */
+ display: none;
+}
+
+.customize-control-widget_form .widget-top {
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s;
+}
+
+.customize-control-widget_form:not(.widget-rendered) .widget-top {
+ opacity: 0.5;
+}
+
+.customize-control-widget_form .widget-control-save,
+.customize-control-widget_form .spinner {
+ display: none;
+}
+
+.customize-control-widget_form.previewer-loading .spinner {
+ display: inline;
+}
+
+.customize-control-widget_form.widget-form-disabled .widget-content {
+ opacity: 0.7;
+ pointer-events: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.customize-control-widget_form .widget {
+ margin-bottom: 0;
+}
+
+.customize-control-widget_form.wide-widget-control .widget-inside {
+ position: fixed;
+ right: 299px;
+ top: 25%;
+ border: 1px solid rgb(229, 229, 229);
+ overflow: auto;
+}
+.customize-control-widget_form.wide-widget-control .widget-inside > .form {
+ padding: 20px;
+}
+
+.customize-control-widget_form.wide-widget-control .widget-top {
+ -webkit-transition: background-color 0.4s;
+ transition: background-color 0.4s;
+}
+.customize-control-widget_form.wide-widget-control.expanding .widget-top,
+.customize-control-widget_form.wide-widget-control.expanded:not(.collapsing) .widget-top {
+ background-color: rgb(227, 227, 227);
+}
+
+.widget-inside {
+ padding: 1px 10px 10px 10px;
+ border-top: none;
+ line-height: 16px;
+}
+
+.widget-top {
+ cursor: move;
+}
+
+.customize-control-widget_form.expanded a.widget-action:after {
+ content: "\f142";
+}
+
+.customize-control-widget_form.wide-widget-control a.widget-action:after {
+ content: "\f139";
+}
+
+.customize-control-widget_form.wide-widget-control.expanded a.widget-action:after {
+ content: "\f141";
+}
+
+.widget-title-action {
+ cursor: pointer;
+}
+
+.customize-control-widget_form .widget .customize-control-title {
+ cursor: move;
+}
+
+.control-section.accordion-section.highlighted > .accordion-section-title,
+.customize-control-widget_form.highlighted {
+ outline: none;
+ -webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8);
+ box-shadow: 0 0 2px rgba(30,140,190,0.8);
+ position: relative;
+ z-index: 1;
+}
+
+#widget-customizer-control-templates {
+ display: none;
+}
+
+/**
+* Widget reordering styles
+**/
+
+.reorder-toggle {
+ float: left;
+ padding: 5px 8px;
+ text-decoration: none;
+ cursor: pointer;
+ outline: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.reorder-toggle:focus {
+ outline: 1px dotted;
+}
+
+.reorder-done,
+.reordering .reorder {
+ display: none;
+}
+
+.reordering .reorder-done {
+ display: block;
+ color: #aa0000;
+}
+
+#customize-theme-controls .reordering .add-new-widget {
+ opacity: 0.2;
+ pointer-events: none;
+ cursor: not-allowed;
+}
+
+#customize-theme-controls .widget-reorder-nav {
+ display: none;
+ float: left;
+ background-color: #fafafa;
+}
+
+.widget-reorder-nav span {
+ position: relative;
+ overflow: hidden;
+ float: right;
+ display: block;
+ width: 33px; /* was 42px for mobile */
+ height: 43px;
+ color: #888;
+ text-indent: -9999px;
+ cursor: pointer;
+ outline: none;
+}
+
+.widget-reorder-nav span:before {
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ font: normal 20px/43px 'dashicons';
+ text-align: center;
+ text-indent: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.widget-reorder-nav span:hover,
+.widget-reorder-nav span:focus {
+ color: #444;
+ background: #eee;
+}
+
+.move-widget:before {
+ content: '\f504';
+}
+
+.move-widget-down:before {
+ content: '\f347';
+}
+
+.move-widget-up:before {
+ content: '\f343';
+}
+
+#customize-theme-controls .first-widget .move-widget-up,
+#customize-theme-controls .last-widget .move-widget-down {
+ color: #d5d5d5;
+ cursor: default;
+}
+
+#customize-theme-controls .move-widget-area {
+ display: none;
+ background: #fff;
+ border: 1px solid #dedede;
+ border-top: none;
+ cursor: auto;
+}
+
+#customize-theme-controls .reordering .move-widget-area.active {
+ display: block;
+}
+
+#customize-theme-controls .move-widget-area .description {
+ margin: 0;
+ padding: 15px 20px;
+ font-weight: 400;
+}
+
+#customize-theme-controls .widget-area-select {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+#customize-theme-controls .widget-area-select li {
+ position: relative;
+ margin: 0;
+ padding: 13px 42px 15px 15px;
+ color: #555;
+ border-top: 1px solid #eee;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#customize-theme-controls .widget-area-select li:before {
+ display: none;
+ content: '\f147';
+ position: absolute;
+ top: 12px;
+ right: 10px;
+ font: normal 20px/1 'dashicons';
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+#customize-theme-controls .widget-area-select li:last-child {
+ border-bottom: 1px solid #eee;
+}
+
+#customize-theme-controls .widget-area-select .selected {
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.4);
+ background: #2ea2cc;
+}
+
+#customize-theme-controls .widget-area-select .selected:before {
+ display: block;
+}
+
+#customize-theme-controls .move-widget-actions {
+ text-align: left;
+ padding: 12px;
+}
+
+#customize-theme-controls .reordering .widget-title-action {
+ display: none;
+}
+
+#customize-theme-controls .reordering .widget-reorder-nav {
+ display: block;
+}
+
+
+/**
+ * Styles for new widget addition panel
+ */
+.wp-full-overlay-main {
+ left: auto; /* this overrides a right: 0; which causes the preview to resize, I'd rather have it go off screen at the normal size. */
+ width: 100%;
+}
+
+#customize-theme-controls .add-new-widget {
+ cursor: pointer;
+ float: left;
+ margin-right: 10px;
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ outline: none;
+}
+
+.add-new-widget:before {
+ content: "\f132";
+ display: inline-block;
+ position: relative;
+ right: -2px;
+ top: -1px;
+ font: normal 20px/1 'dashicons';
+ vertical-align: middle;
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+body.adding-widget .add-new-widget,
+body.adding-widget .add-new-widget:hover {
+ background: #eee;
+ border-color: #999;
+ color: #333;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
+}
+body.adding-widget .add-new-widget:before {
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+#available-widgets .widget {
+ position: static;
+}
+
+/* override widgets admin page rules in wp-admin/css/wp-admin.css */
+#widgets-left #available-widgets .widget {
+ float: none !important;
+ width: auto !important;
+}
+
+#available-widgets {
+ position: absolute;
+ overflow: auto;
+ top: 0;
+ bottom: 0;
+ right: -301px;
+ width: 300px;
+ margin: 0;
+ z-index: 1;
+ background: #fff;
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+ border-left: 1px solid #dddddd;
+}
+
+#available-widgets-filter {
+ padding: 8px 13px 7px 17px;
+ border-bottom: 1px solid #e4e4e4;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+#available-widgets-filter input {
+ padding: 5px 10px 2px 10px;
+ width: 100%;
+}
+
+#available-widgets .widget-tpl {
+ position: relative;
+ padding: 20px 60px 20px 15px;
+ border-bottom: 1px solid #e4e4e4;
+ cursor: pointer;
+ display: none;
+}
+
+#available-widgets .widget-tpl:hover,
+#available-widgets .widget-tpl.selected {
+ background: #fafafa;
+}
+
+#available-widgets .widget-top,
+#available-widgets .widget-top:hover {
+ border: none;
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#available-widgets .widget-title h4 {
+ padding: 0 0 5px;
+ font-size: 14px;
+}
+
+#available-widgets .widget .widget-description {
+ padding: 0;
+ color: #777;
+}
+
+#customize-preview {
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+}
+
+body.adding-widget #available-widgets {
+ right: 0;
+}
+
+body.adding-widget .wp-full-overlay-main {
+ right: 300px;
+}
+
+body.adding-widget #customize-preview {
+ opacity: 0.4;
+}
+
+
+/**
+ * Widget Icon styling
+ * No plurals in naming.
+ * Ordered from lowest to highest specificity.
+ **/
+#available-widgets .widget-title {
+ position: relative;
+}
+
+#available-widgets .widget-title:before {
+ content: "\f132";
+ position: absolute;
+ top: -3px;
+ left: 100%;
+ margin-left: 20px;
+ width: 20px;
+ height: 20px;
+ color: #333;
+ font: normal 20px/1 'dashicons';
+ text-align: center;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* smiley */
+#available-widgets [class*="easy"] .widget-title:before { content: "\f328"; top: -4px; }
+
+/* star-filled */
+#available-widgets [class*="super"] .widget-title:before,
+#available-widgets [class*="like"] .widget-title:before { content: "\f155"; top: -4px; }
+
+/* wordpress */
+#available-widgets [class*="meta"] .widget-title:before { content: "\f120"; }
+
+/* archive-box */
+#available-widgets [class*="archives"] .widget-title:before { content: "\f480"; top: -4px; }
+
+/* category */
+#available-widgets [class*="categor"] .widget-title:before { content: "\f318"; top: -4px; }
+
+/* comments */
+#available-widgets [class*="comment"] .widget-title:before,
+#available-widgets [class*="testimonial"] .widget-title:before,
+#available-widgets [class*="chat"] .widget-title:before { content: "\f101"; }
+
+/* post */
+#available-widgets [class*="post"] .widget-title:before { content: "\f109"; }
+
+/* admin-page */
+#available-widgets [class*="page"] .widget-title:before { content: "\f105"; }
+
+/* text */
+#available-widgets [class*="text"] .widget-title:before { content: "\f478"; }
+
+/* links */
+#available-widgets [class*="link"] .widget-title:before { content: "\f103"; }
+
+/* search */
+#available-widgets [class*="search"] .widget-title:before { content: "\f179"; }
+
+/* menu */
+#available-widgets [class*="menu"] .widget-title:before,
+#available-widgets [class*="nav"] .widget-title:before { content: "\f333"; }
+
+/* tag-cloud */
+#available-widgets [class*="tag"] .widget-title:before { content: "\f479"; }
+
+/* rss */
+#available-widgets [class*="rss"] .widget-title:before { content: "\f303"; top: -6px; }
+
+/* calendar */
+#available-widgets [class*="event"] .widget-title:before,
+#available-widgets [class*="calendar"] .widget-title:before { content: "\f145"; top: -4px;}
+
+/* format-image */
+#available-widgets [class*="image"] .widget-title:before,
+#available-widgets [class*="photo"] .widget-title:before,
+#available-widgets [class*="slide"] .widget-title:before,
+#available-widgets [class*="instagram"] .widget-title:before { content: "\f128"; }
+
+/* format-gallery */
+#available-widgets [class*="album"] .widget-title:before,
+#available-widgets [class*="galler"] .widget-title:before { content: "\f161"; }
+
+/* format-video */
+#available-widgets [class*="video"] .widget-title:before,
+#available-widgets [class*="tube"] .widget-title:before { content: "\f126"; }
+
+/* format-audio */
+#available-widgets [class*="music"] .widget-title:before,
+#available-widgets [class*="radio"] .widget-title:before,
+#available-widgets [class*="audio"] .widget-title:before { content: "\f127"; }
+
+/* admin-users */
+#available-widgets [class*="login"] .widget-title:before,
+#available-widgets [class*="user"] .widget-title:before,
+#available-widgets [class*="member"] .widget-title:before,
+#available-widgets [class*="avatar"] .widget-title:before,
+#available-widgets [class*="subscriber"] .widget-title:before,
+#available-widgets [class*="profile"] .widget-title:before,
+#available-widgets [class*="grofile"] .widget-title:before { content: "\f110"; }
+
+/* cart */
+#available-widgets [class*="commerce"] .widget-title:before,
+#available-widgets [class*="shop"] .widget-title:before,
+#available-widgets [class*="cart"] .widget-title:before { content: "\f174"; top: -4px; }
+
+/* shield */
+#available-widgets [class*="secur"] .widget-title:before,
+#available-widgets [class*="firewall"] .widget-title:before { content: "\f332"; }
+
+/* chart-bar */
+#available-widgets [class*="analytic"] .widget-title:before,
+#available-widgets [class*="stat"] .widget-title:before,
+#available-widgets [class*="poll"] .widget-title:before { content: "\f185"; }
+
+/* feedback */
+#available-widgets [class*="form"] .widget-title:before { content: "\f175"; }
+
+/* email-alt */
+#available-widgets [class*="subscribe"] .widget-title:before,
+#available-widgets [class*="news"] .widget-title:before,
+#available-widgets [class*="contact"] .widget-title:before,
+#available-widgets [class*="mail"] .widget-title:before { content: "\f466"; }
+
+/* share */
+#available-widgets [class*="share"] .widget-title:before,
+#available-widgets [class*="socia"] .widget-title:before { content: "\f237"; }
+
+/* translation */
+#available-widgets [class*="lang"] .widget-title:before,
+#available-widgets [class*="translat"] .widget-title:before { content: "\f326"; }
+
+/* location-alt */
+#available-widgets [class*="locat"] .widget-title:before,
+#available-widgets [class*="map"] .widget-title:before { content: "\f231"; }
+
+/* download */
+#available-widgets [class*="download"] .widget-title:before { content: "\f316"; }
+
+/* cloud */
+#available-widgets [class*="weather"] .widget-title:before { content: "\f176"; top: -4px;}
+
+/* facebook */
+#available-widgets [class*="facebook"] .widget-title:before { content: "\f304"; }
+
+/* twitter */
+#available-widgets [class*="tweet"] .widget-title:before,
+#available-widgets [class*="twitter"] .widget-title:before { content: "\f301"; }
+
+
+@media screen and (max-height: 700px) and (min-width: 981px) {
+ .customize-control {
+ margin-bottom: 0;
+ }
+ .widget-top {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ margin-top: -1px;
+ }
+ .widget-top:hover {
+ position: relative;
+ z-index: 1;
+ }
+ .last-widget {
+ margin-bottom: 15px;
+ }
+ .widget-title h4 {
+ padding: 13px 15px;
+ }
+ .widget-top a.widget-action:after {
+ padding-top: 9px;
+ }
+ .widget-reorder-nav span {
+ height: 39px;
+ }
+ .widget-reorder-nav span:before {
+ line-height: 39px;
+ }
+ #customize-theme-controls .widget-area-select li {
+ padding: 9px 42px 11px 15px;
+ }
+ #customize-theme-controls .widget-area-select li:before {
+ top: 8px;
+ }
+}
diff --git a/wp-admin/css/customize-widgets-rtl.min.css b/wp-admin/css/customize-widgets-rtl.min.css
new file mode 100644
index 0000000..d73a818
--- /dev/null
+++ b/wp-admin/css/customize-widgets-rtl.min.css
@@ -0,0 +1 @@
+.wp-full-overlay-sidebar{overflow:visible}.control-section.control-section-sidebar,.customize-control-sidebar_widgets .hide-if-js,.customize-control-sidebar_widgets label{display:none}.customize-control-widget_form .widget-top{-webkit-transition:opacity .5s;transition:opacity .5s}.customize-control-widget_form:not(.widget-rendered) .widget-top{opacity:.5}.customize-control-widget_form .spinner,.customize-control-widget_form .widget-control-save{display:none}.customize-control-widget_form.previewer-loading .spinner{display:inline}.customize-control-widget_form.widget-form-disabled .widget-content{opacity:.7;pointer-events:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.customize-control-widget_form .widget{margin-bottom:0}.customize-control-widget_form.wide-widget-control .widget-inside{position:fixed;right:299px;top:25%;border:1px solid #e5e5e5;overflow:auto}.customize-control-widget_form.wide-widget-control .widget-inside>.form{padding:20px}.customize-control-widget_form.wide-widget-control .widget-top{-webkit-transition:background-color .4s;transition:background-color .4s}.customize-control-widget_form.wide-widget-control.expanded:not(.collapsing) .widget-top,.customize-control-widget_form.wide-widget-control.expanding .widget-top{background-color:#e3e3e3}.widget-inside{padding:1px 10px 10px;border-top:none;line-height:16px}.widget-top{cursor:move}.customize-control-widget_form.expanded a.widget-action:after{content:"\f142"}.customize-control-widget_form.wide-widget-control a.widget-action:after{content:"\f139"}.customize-control-widget_form.wide-widget-control.expanded a.widget-action:after{content:"\f141"}.widget-title-action{cursor:pointer}.customize-control-widget_form .widget .customize-control-title{cursor:move}.control-section.accordion-section.highlighted>.accordion-section-title,.customize-control-widget_form.highlighted{outline:0;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8);position:relative;z-index:1}#widget-customizer-control-templates{display:none}.reorder-toggle{float:left;padding:5px 8px;text-decoration:none;cursor:pointer;outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.reorder-toggle:focus{outline:dotted 1px}.reorder-done,.reordering .reorder{display:none}.reordering .reorder-done{display:block;color:#a00}#customize-theme-controls .reordering .add-new-widget{opacity:.2;pointer-events:none;cursor:not-allowed}#customize-theme-controls .widget-reorder-nav{display:none;float:left;background-color:#fafafa}.widget-reorder-nav span{position:relative;overflow:hidden;float:right;display:block;width:33px;height:43px;color:#888;text-indent:-9999px;cursor:pointer;outline:0}.widget-reorder-nav span:before{display:inline-block;position:absolute;top:0;left:0;width:100%;height:100%;font:400 20px/43px dashicons;text-align:center;text-indent:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.widget-reorder-nav span:focus,.widget-reorder-nav span:hover{color:#444;background:#eee}.move-widget:before{content:'\f504'}.move-widget-down:before{content:'\f347'}.move-widget-up:before{content:'\f343'}#customize-theme-controls .first-widget .move-widget-up,#customize-theme-controls .last-widget .move-widget-down{color:#d5d5d5;cursor:default}#customize-theme-controls .move-widget-area{display:none;background:#fff;border:1px solid #dedede;border-top:none;cursor:auto}#customize-theme-controls .reordering .move-widget-area.active{display:block}#customize-theme-controls .move-widget-area .description{margin:0;padding:15px 20px;font-weight:400}#customize-theme-controls .widget-area-select{margin:0;padding:0;list-style:none}#customize-theme-controls .widget-area-select li{position:relative;margin:0;padding:13px 42px 15px 15px;color:#555;border-top:1px solid #eee;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#customize-theme-controls .widget-area-select li:before{display:none;content:'\f147';position:absolute;top:12px;right:10px;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#customize-theme-controls .widget-area-select li:last-child{border-bottom:1px solid #eee}#customize-theme-controls .widget-area-select .selected{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.4);background:#2ea2cc}#customize-theme-controls .widget-area-select .selected:before{display:block}#customize-theme-controls .move-widget-actions{text-align:left;padding:12px}#customize-theme-controls .reordering .widget-title-action{display:none}#customize-theme-controls .reordering .widget-reorder-nav{display:block}.wp-full-overlay-main{left:auto;width:100%}#customize-theme-controls .add-new-widget{cursor:pointer;float:left;margin-right:10px;-webkit-transition:all .2s;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.add-new-widget:before{content:"\f132";display:inline-block;position:relative;right:-2px;top:-1px;font:400 20px/1 dashicons;vertical-align:middle;-webkit-transition:all .2s;transition:all .2s;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.adding-widget .add-new-widget,body.adding-widget .add-new-widget:hover{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}body.adding-widget .add-new-widget:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}#available-widgets .widget{position:static}#widgets-left #available-widgets .widget{float:none!important;width:auto!important}#available-widgets{position:absolute;overflow:auto;top:0;bottom:0;right:-301px;width:300px;margin:0;z-index:1;background:#fff;-webkit-transition:all .2s;transition:all .2s;border-left:1px solid #ddd}#available-widgets-filter{padding:8px 13px 7px 17px;border-bottom:1px solid #e4e4e4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#available-widgets-filter input{padding:5px 10px 2px;width:100%}#available-widgets .widget-tpl{position:relative;padding:20px 60px 20px 15px;border-bottom:1px solid #e4e4e4;cursor:pointer;display:none}#available-widgets .widget-tpl.selected,#available-widgets .widget-tpl:hover{background:#fafafa}#available-widgets .widget-top,#available-widgets .widget-top:hover{border:none;background:0 0;-webkit-box-shadow:none;box-shadow:none}#available-widgets .widget-title h4{padding:0 0 5px;font-size:14px}#available-widgets .widget .widget-description{padding:0;color:#777}#customize-preview{-webkit-transition:all .2s;transition:all .2s}body.adding-widget #available-widgets{right:0}body.adding-widget .wp-full-overlay-main{right:300px}body.adding-widget #customize-preview{opacity:.4}#available-widgets .widget-title{position:relative}#available-widgets .widget-title:before{content:"\f132";position:absolute;top:-3px;left:100%;margin-left:20px;width:20px;height:20px;color:#333;font:400 20px/1 dashicons;text-align:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#available-widgets [class*=easy] .widget-title:before{content:"\f328";top:-4px}#available-widgets [class*=like] .widget-title:before,#available-widgets [class*=super] .widget-title:before{content:"\f155";top:-4px}#available-widgets [class*=meta] .widget-title:before{content:"\f120"}#available-widgets [class*=archives] .widget-title:before{content:"\f480";top:-4px}#available-widgets [class*=categor] .widget-title:before{content:"\f318";top:-4px}#available-widgets [class*=chat] .widget-title:before,#available-widgets [class*=comment] .widget-title:before,#available-widgets [class*=testimonial] .widget-title:before{content:"\f101"}#available-widgets [class*=post] .widget-title:before{content:"\f109"}#available-widgets [class*=page] .widget-title:before{content:"\f105"}#available-widgets [class*=text] .widget-title:before{content:"\f478"}#available-widgets [class*=link] .widget-title:before{content:"\f103"}#available-widgets [class*=search] .widget-title:before{content:"\f179"}#available-widgets [class*=menu] .widget-title:before,#available-widgets [class*=nav] .widget-title:before{content:"\f333"}#available-widgets [class*=tag] .widget-title:before{content:"\f479"}#available-widgets [class*=rss] .widget-title:before{content:"\f303";top:-6px}#available-widgets [class*=calendar] .widget-title:before,#available-widgets [class*=event] .widget-title:before{content:"\f145";top:-4px}#available-widgets [class*=image] .widget-title:before,#available-widgets [class*=instagram] .widget-title:before,#available-widgets [class*=photo] .widget-title:before,#available-widgets [class*=slide] .widget-title:before{content:"\f128"}#available-widgets [class*=album] .widget-title:before,#available-widgets [class*=galler] .widget-title:before{content:"\f161"}#available-widgets [class*=tube] .widget-title:before,#available-widgets [class*=video] .widget-title:before{content:"\f126"}#available-widgets [class*=audio] .widget-title:before,#available-widgets [class*=music] .widget-title:before,#available-widgets [class*=radio] .widget-title:before{content:"\f127"}#available-widgets [class*=avatar] .widget-title:before,#available-widgets [class*=grofile] .widget-title:before,#available-widgets [class*=login] .widget-title:before,#available-widgets [class*=member] .widget-title:before,#available-widgets [class*=profile] .widget-title:before,#available-widgets [class*=subscriber] .widget-title:before,#available-widgets [class*=user] .widget-title:before{content:"\f110"}#available-widgets [class*=cart] .widget-title:before,#available-widgets [class*=commerce] .widget-title:before,#available-widgets [class*=shop] .widget-title:before{content:"\f174";top:-4px}#available-widgets [class*=firewall] .widget-title:before,#available-widgets [class*=secur] .widget-title:before{content:"\f332"}#available-widgets [class*=analytic] .widget-title:before,#available-widgets [class*=poll] .widget-title:before,#available-widgets [class*=stat] .widget-title:before{content:"\f185"}#available-widgets [class*=form] .widget-title:before{content:"\f175"}#available-widgets [class*=contact] .widget-title:before,#available-widgets [class*=mail] .widget-title:before,#available-widgets [class*=news] .widget-title:before,#available-widgets [class*=subscribe] .widget-title:before{content:"\f466"}#available-widgets [class*=share] .widget-title:before,#available-widgets [class*=socia] .widget-title:before{content:"\f237"}#available-widgets [class*=lang] .widget-title:before,#available-widgets [class*=translat] .widget-title:before{content:"\f326"}#available-widgets [class*=locat] .widget-title:before,#available-widgets [class*=map] .widget-title:before{content:"\f231"}#available-widgets [class*=download] .widget-title:before{content:"\f316"}#available-widgets [class*=weather] .widget-title:before{content:"\f176";top:-4px}#available-widgets [class*=facebook] .widget-title:before{content:"\f304"}#available-widgets [class*=tweet] .widget-title:before,#available-widgets [class*=twitter] .widget-title:before{content:"\f301"}@media screen and (max-height:700px) and (min-width:981px){.customize-control{margin-bottom:0}.widget-top{-webkit-box-shadow:none;box-shadow:none;margin-top:-1px}.widget-top:hover{position:relative;z-index:1}.last-widget{margin-bottom:15px}.widget-title h4{padding:13px 15px}.widget-top a.widget-action:after{padding-top:9px}.widget-reorder-nav span{height:39px}.widget-reorder-nav span:before{line-height:39px}#customize-theme-controls .widget-area-select li{padding:9px 42px 11px 15px}#customize-theme-controls .widget-area-select li:before{top:8px}}
\ No newline at end of file
diff --git a/wp-admin/css/customize-widgets.css b/wp-admin/css/customize-widgets.css
new file mode 100644
index 0000000..20a8a69
--- /dev/null
+++ b/wp-admin/css/customize-widgets.css
@@ -0,0 +1,603 @@
+.wp-full-overlay-sidebar {
+ overflow: visible;
+}
+
+/**
+ * Hide all sidebar sections by default, only show them (via JS) once the
+ * preview loads and we know whether the sidebars are used in the template.
+ */
+
+.control-section.control-section-sidebar,
+.customize-control-sidebar_widgets label,
+.customize-control-sidebar_widgets .hide-if-js {
+ /* The link in .customize-control-sidebar_widgets .hide-if-js will fail if it ever gets used. */
+ display: none;
+}
+
+.customize-control-widget_form .widget-top {
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s;
+}
+
+.customize-control-widget_form:not(.widget-rendered) .widget-top {
+ opacity: 0.5;
+}
+
+.customize-control-widget_form .widget-control-save,
+.customize-control-widget_form .spinner {
+ display: none;
+}
+
+.customize-control-widget_form.previewer-loading .spinner {
+ display: inline;
+}
+
+.customize-control-widget_form.widget-form-disabled .widget-content {
+ opacity: 0.7;
+ pointer-events: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.customize-control-widget_form .widget {
+ margin-bottom: 0;
+}
+
+.customize-control-widget_form.wide-widget-control .widget-inside {
+ position: fixed;
+ left: 299px;
+ top: 25%;
+ border: 1px solid rgb(229, 229, 229);
+ overflow: auto;
+}
+.customize-control-widget_form.wide-widget-control .widget-inside > .form {
+ padding: 20px;
+}
+
+.customize-control-widget_form.wide-widget-control .widget-top {
+ -webkit-transition: background-color 0.4s;
+ transition: background-color 0.4s;
+}
+.customize-control-widget_form.wide-widget-control.expanding .widget-top,
+.customize-control-widget_form.wide-widget-control.expanded:not(.collapsing) .widget-top {
+ background-color: rgb(227, 227, 227);
+}
+
+.widget-inside {
+ padding: 1px 10px 10px 10px;
+ border-top: none;
+ line-height: 16px;
+}
+
+.widget-top {
+ cursor: move;
+}
+
+.customize-control-widget_form.expanded a.widget-action:after {
+ content: "\f142";
+}
+
+.customize-control-widget_form.wide-widget-control a.widget-action:after {
+ content: "\f139";
+}
+
+.customize-control-widget_form.wide-widget-control.expanded a.widget-action:after {
+ content: "\f141";
+}
+
+.widget-title-action {
+ cursor: pointer;
+}
+
+.customize-control-widget_form .widget .customize-control-title {
+ cursor: move;
+}
+
+.control-section.accordion-section.highlighted > .accordion-section-title,
+.customize-control-widget_form.highlighted {
+ outline: none;
+ -webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8);
+ box-shadow: 0 0 2px rgba(30,140,190,0.8);
+ position: relative;
+ z-index: 1;
+}
+
+#widget-customizer-control-templates {
+ display: none;
+}
+
+/**
+* Widget reordering styles
+**/
+
+.reorder-toggle {
+ float: right;
+ padding: 5px 8px;
+ text-decoration: none;
+ cursor: pointer;
+ outline: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.reorder-toggle:focus {
+ outline: 1px dotted;
+}
+
+.reorder-done,
+.reordering .reorder {
+ display: none;
+}
+
+.reordering .reorder-done {
+ display: block;
+ color: #aa0000;
+}
+
+#customize-theme-controls .reordering .add-new-widget {
+ opacity: 0.2;
+ pointer-events: none;
+ cursor: not-allowed;
+}
+
+#customize-theme-controls .widget-reorder-nav {
+ display: none;
+ float: right;
+ background-color: #fafafa;
+}
+
+.widget-reorder-nav span {
+ position: relative;
+ overflow: hidden;
+ float: left;
+ display: block;
+ width: 33px; /* was 42px for mobile */
+ height: 43px;
+ color: #888;
+ text-indent: -9999px;
+ cursor: pointer;
+ outline: none;
+}
+
+.widget-reorder-nav span:before {
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 100%;
+ height: 100%;
+ font: normal 20px/43px 'dashicons';
+ text-align: center;
+ text-indent: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.widget-reorder-nav span:hover,
+.widget-reorder-nav span:focus {
+ color: #444;
+ background: #eee;
+}
+
+.move-widget:before {
+ content: '\f504';
+}
+
+.move-widget-down:before {
+ content: '\f347';
+}
+
+.move-widget-up:before {
+ content: '\f343';
+}
+
+#customize-theme-controls .first-widget .move-widget-up,
+#customize-theme-controls .last-widget .move-widget-down {
+ color: #d5d5d5;
+ cursor: default;
+}
+
+#customize-theme-controls .move-widget-area {
+ display: none;
+ background: #fff;
+ border: 1px solid #dedede;
+ border-top: none;
+ cursor: auto;
+}
+
+#customize-theme-controls .reordering .move-widget-area.active {
+ display: block;
+}
+
+#customize-theme-controls .move-widget-area .description {
+ margin: 0;
+ padding: 15px 20px;
+ font-weight: 400;
+}
+
+#customize-theme-controls .widget-area-select {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+#customize-theme-controls .widget-area-select li {
+ position: relative;
+ margin: 0;
+ padding: 13px 15px 15px 42px;
+ color: #555;
+ border-top: 1px solid #eee;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#customize-theme-controls .widget-area-select li:before {
+ display: none;
+ content: '\f147';
+ position: absolute;
+ top: 12px;
+ left: 10px;
+ font: normal 20px/1 'dashicons';
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+#customize-theme-controls .widget-area-select li:last-child {
+ border-bottom: 1px solid #eee;
+}
+
+#customize-theme-controls .widget-area-select .selected {
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.4);
+ background: #2ea2cc;
+}
+
+#customize-theme-controls .widget-area-select .selected:before {
+ display: block;
+}
+
+#customize-theme-controls .move-widget-actions {
+ text-align: right;
+ padding: 12px;
+}
+
+#customize-theme-controls .reordering .widget-title-action {
+ display: none;
+}
+
+#customize-theme-controls .reordering .widget-reorder-nav {
+ display: block;
+}
+
+
+/**
+ * Styles for new widget addition panel
+ */
+.wp-full-overlay-main {
+ right: auto; /* this overrides a right: 0; which causes the preview to resize, I'd rather have it go off screen at the normal size. */
+ width: 100%;
+}
+
+#customize-theme-controls .add-new-widget {
+ cursor: pointer;
+ float: right;
+ margin-left: 10px;
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ outline: none;
+}
+
+.add-new-widget:before {
+ content: "\f132";
+ display: inline-block;
+ position: relative;
+ left: -2px;
+ top: -1px;
+ font: normal 20px/1 'dashicons';
+ vertical-align: middle;
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+body.adding-widget .add-new-widget,
+body.adding-widget .add-new-widget:hover {
+ background: #eee;
+ border-color: #999;
+ color: #333;
+ -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
+ box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
+}
+body.adding-widget .add-new-widget:before {
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+#available-widgets .widget {
+ position: static;
+}
+
+/* override widgets admin page rules in wp-admin/css/wp-admin.css */
+#widgets-left #available-widgets .widget {
+ float: none !important;
+ width: auto !important;
+}
+
+#available-widgets {
+ position: absolute;
+ overflow: auto;
+ top: 0;
+ bottom: 0;
+ left: -301px;
+ width: 300px;
+ margin: 0;
+ z-index: 1;
+ background: #fff;
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+ border-right: 1px solid #dddddd;
+}
+
+#available-widgets-filter {
+ padding: 8px 17px 7px 13px;
+ border-bottom: 1px solid #e4e4e4;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+#available-widgets-filter input {
+ padding: 5px 10px 2px 10px;
+ width: 100%;
+}
+
+#available-widgets .widget-tpl {
+ position: relative;
+ padding: 20px 15px 20px 60px;
+ border-bottom: 1px solid #e4e4e4;
+ cursor: pointer;
+ display: none;
+}
+
+#available-widgets .widget-tpl:hover,
+#available-widgets .widget-tpl.selected {
+ background: #fafafa;
+}
+
+#available-widgets .widget-top,
+#available-widgets .widget-top:hover {
+ border: none;
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#available-widgets .widget-title h4 {
+ padding: 0 0 5px;
+ font-size: 14px;
+}
+
+#available-widgets .widget .widget-description {
+ padding: 0;
+ color: #777;
+}
+
+#customize-preview {
+ -webkit-transition: all 0.2s;
+ transition: all 0.2s;
+}
+
+body.adding-widget #available-widgets {
+ left: 0;
+}
+
+body.adding-widget .wp-full-overlay-main {
+ left: 300px;
+}
+
+body.adding-widget #customize-preview {
+ opacity: 0.4;
+}
+
+
+/**
+ * Widget Icon styling
+ * No plurals in naming.
+ * Ordered from lowest to highest specificity.
+ **/
+#available-widgets .widget-title {
+ position: relative;
+}
+
+#available-widgets .widget-title:before {
+ content: "\f132";
+ position: absolute;
+ top: -3px;
+ right: 100%;
+ margin-right: 20px;
+ width: 20px;
+ height: 20px;
+ color: #333;
+ font: normal 20px/1 'dashicons';
+ text-align: center;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* smiley */
+#available-widgets [class*="easy"] .widget-title:before { content: "\f328"; top: -4px; }
+
+/* star-filled */
+#available-widgets [class*="super"] .widget-title:before,
+#available-widgets [class*="like"] .widget-title:before { content: "\f155"; top: -4px; }
+
+/* wordpress */
+#available-widgets [class*="meta"] .widget-title:before { content: "\f120"; }
+
+/* archive-box */
+#available-widgets [class*="archives"] .widget-title:before { content: "\f480"; top: -4px; }
+
+/* category */
+#available-widgets [class*="categor"] .widget-title:before { content: "\f318"; top: -4px; }
+
+/* comments */
+#available-widgets [class*="comment"] .widget-title:before,
+#available-widgets [class*="testimonial"] .widget-title:before,
+#available-widgets [class*="chat"] .widget-title:before { content: "\f101"; }
+
+/* post */
+#available-widgets [class*="post"] .widget-title:before { content: "\f109"; }
+
+/* admin-page */
+#available-widgets [class*="page"] .widget-title:before { content: "\f105"; }
+
+/* text */
+#available-widgets [class*="text"] .widget-title:before { content: "\f478"; }
+
+/* links */
+#available-widgets [class*="link"] .widget-title:before { content: "\f103"; }
+
+/* search */
+#available-widgets [class*="search"] .widget-title:before { content: "\f179"; }
+
+/* menu */
+#available-widgets [class*="menu"] .widget-title:before,
+#available-widgets [class*="nav"] .widget-title:before { content: "\f333"; }
+
+/* tag-cloud */
+#available-widgets [class*="tag"] .widget-title:before { content: "\f479"; }
+
+/* rss */
+#available-widgets [class*="rss"] .widget-title:before { content: "\f303"; top: -6px; }
+
+/* calendar */
+#available-widgets [class*="event"] .widget-title:before,
+#available-widgets [class*="calendar"] .widget-title:before { content: "\f145"; top: -4px;}
+
+/* format-image */
+#available-widgets [class*="image"] .widget-title:before,
+#available-widgets [class*="photo"] .widget-title:before,
+#available-widgets [class*="slide"] .widget-title:before,
+#available-widgets [class*="instagram"] .widget-title:before { content: "\f128"; }
+
+/* format-gallery */
+#available-widgets [class*="album"] .widget-title:before,
+#available-widgets [class*="galler"] .widget-title:before { content: "\f161"; }
+
+/* format-video */
+#available-widgets [class*="video"] .widget-title:before,
+#available-widgets [class*="tube"] .widget-title:before { content: "\f126"; }
+
+/* format-audio */
+#available-widgets [class*="music"] .widget-title:before,
+#available-widgets [class*="radio"] .widget-title:before,
+#available-widgets [class*="audio"] .widget-title:before { content: "\f127"; }
+
+/* admin-users */
+#available-widgets [class*="login"] .widget-title:before,
+#available-widgets [class*="user"] .widget-title:before,
+#available-widgets [class*="member"] .widget-title:before,
+#available-widgets [class*="avatar"] .widget-title:before,
+#available-widgets [class*="subscriber"] .widget-title:before,
+#available-widgets [class*="profile"] .widget-title:before,
+#available-widgets [class*="grofile"] .widget-title:before { content: "\f110"; }
+
+/* cart */
+#available-widgets [class*="commerce"] .widget-title:before,
+#available-widgets [class*="shop"] .widget-title:before,
+#available-widgets [class*="cart"] .widget-title:before { content: "\f174"; top: -4px; }
+
+/* shield */
+#available-widgets [class*="secur"] .widget-title:before,
+#available-widgets [class*="firewall"] .widget-title:before { content: "\f332"; }
+
+/* chart-bar */
+#available-widgets [class*="analytic"] .widget-title:before,
+#available-widgets [class*="stat"] .widget-title:before,
+#available-widgets [class*="poll"] .widget-title:before { content: "\f185"; }
+
+/* feedback */
+#available-widgets [class*="form"] .widget-title:before { content: "\f175"; }
+
+/* email-alt */
+#available-widgets [class*="subscribe"] .widget-title:before,
+#available-widgets [class*="news"] .widget-title:before,
+#available-widgets [class*="contact"] .widget-title:before,
+#available-widgets [class*="mail"] .widget-title:before { content: "\f466"; }
+
+/* share */
+#available-widgets [class*="share"] .widget-title:before,
+#available-widgets [class*="socia"] .widget-title:before { content: "\f237"; }
+
+/* translation */
+#available-widgets [class*="lang"] .widget-title:before,
+#available-widgets [class*="translat"] .widget-title:before { content: "\f326"; }
+
+/* location-alt */
+#available-widgets [class*="locat"] .widget-title:before,
+#available-widgets [class*="map"] .widget-title:before { content: "\f231"; }
+
+/* download */
+#available-widgets [class*="download"] .widget-title:before { content: "\f316"; }
+
+/* cloud */
+#available-widgets [class*="weather"] .widget-title:before { content: "\f176"; top: -4px;}
+
+/* facebook */
+#available-widgets [class*="facebook"] .widget-title:before { content: "\f304"; }
+
+/* twitter */
+#available-widgets [class*="tweet"] .widget-title:before,
+#available-widgets [class*="twitter"] .widget-title:before { content: "\f301"; }
+
+
+@media screen and (max-height: 700px) and (min-width: 981px) {
+ .customize-control {
+ margin-bottom: 0;
+ }
+ .widget-top {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ margin-top: -1px;
+ }
+ .widget-top:hover {
+ position: relative;
+ z-index: 1;
+ }
+ .last-widget {
+ margin-bottom: 15px;
+ }
+ .widget-title h4 {
+ padding: 13px 15px;
+ }
+ .widget-top a.widget-action:after {
+ padding-top: 9px;
+ }
+ .widget-reorder-nav span {
+ height: 39px;
+ }
+ .widget-reorder-nav span:before {
+ line-height: 39px;
+ }
+ #customize-theme-controls .widget-area-select li {
+ padding: 9px 15px 11px 42px;
+ }
+ #customize-theme-controls .widget-area-select li:before {
+ top: 8px;
+ }
+}
diff --git a/wp-admin/css/customize-widgets.min.css b/wp-admin/css/customize-widgets.min.css
new file mode 100644
index 0000000..d3bafd1
--- /dev/null
+++ b/wp-admin/css/customize-widgets.min.css
@@ -0,0 +1 @@
+.wp-full-overlay-sidebar{overflow:visible}.control-section.control-section-sidebar,.customize-control-sidebar_widgets .hide-if-js,.customize-control-sidebar_widgets label{display:none}.customize-control-widget_form .widget-top{-webkit-transition:opacity .5s;transition:opacity .5s}.customize-control-widget_form:not(.widget-rendered) .widget-top{opacity:.5}.customize-control-widget_form .spinner,.customize-control-widget_form .widget-control-save{display:none}.customize-control-widget_form.previewer-loading .spinner{display:inline}.customize-control-widget_form.widget-form-disabled .widget-content{opacity:.7;pointer-events:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.customize-control-widget_form .widget{margin-bottom:0}.customize-control-widget_form.wide-widget-control .widget-inside{position:fixed;left:299px;top:25%;border:1px solid #e5e5e5;overflow:auto}.customize-control-widget_form.wide-widget-control .widget-inside>.form{padding:20px}.customize-control-widget_form.wide-widget-control .widget-top{-webkit-transition:background-color .4s;transition:background-color .4s}.customize-control-widget_form.wide-widget-control.expanded:not(.collapsing) .widget-top,.customize-control-widget_form.wide-widget-control.expanding .widget-top{background-color:#e3e3e3}.widget-inside{padding:1px 10px 10px;border-top:none;line-height:16px}.widget-top{cursor:move}.customize-control-widget_form.expanded a.widget-action:after{content:"\f142"}.customize-control-widget_form.wide-widget-control a.widget-action:after{content:"\f139"}.customize-control-widget_form.wide-widget-control.expanded a.widget-action:after{content:"\f141"}.widget-title-action{cursor:pointer}.customize-control-widget_form .widget .customize-control-title{cursor:move}.control-section.accordion-section.highlighted>.accordion-section-title,.customize-control-widget_form.highlighted{outline:0;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8);position:relative;z-index:1}#widget-customizer-control-templates{display:none}.reorder-toggle{float:right;padding:5px 8px;text-decoration:none;cursor:pointer;outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.reorder-toggle:focus{outline:dotted 1px}.reorder-done,.reordering .reorder{display:none}.reordering .reorder-done{display:block;color:#a00}#customize-theme-controls .reordering .add-new-widget{opacity:.2;pointer-events:none;cursor:not-allowed}#customize-theme-controls .widget-reorder-nav{display:none;float:right;background-color:#fafafa}.widget-reorder-nav span{position:relative;overflow:hidden;float:left;display:block;width:33px;height:43px;color:#888;text-indent:-9999px;cursor:pointer;outline:0}.widget-reorder-nav span:before{display:inline-block;position:absolute;top:0;right:0;width:100%;height:100%;font:400 20px/43px dashicons;text-align:center;text-indent:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.widget-reorder-nav span:focus,.widget-reorder-nav span:hover{color:#444;background:#eee}.move-widget:before{content:'\f504'}.move-widget-down:before{content:'\f347'}.move-widget-up:before{content:'\f343'}#customize-theme-controls .first-widget .move-widget-up,#customize-theme-controls .last-widget .move-widget-down{color:#d5d5d5;cursor:default}#customize-theme-controls .move-widget-area{display:none;background:#fff;border:1px solid #dedede;border-top:none;cursor:auto}#customize-theme-controls .reordering .move-widget-area.active{display:block}#customize-theme-controls .move-widget-area .description{margin:0;padding:15px 20px;font-weight:400}#customize-theme-controls .widget-area-select{margin:0;padding:0;list-style:none}#customize-theme-controls .widget-area-select li{position:relative;margin:0;padding:13px 15px 15px 42px;color:#555;border-top:1px solid #eee;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#customize-theme-controls .widget-area-select li:before{display:none;content:'\f147';position:absolute;top:12px;left:10px;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#customize-theme-controls .widget-area-select li:last-child{border-bottom:1px solid #eee}#customize-theme-controls .widget-area-select .selected{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.4);background:#2ea2cc}#customize-theme-controls .widget-area-select .selected:before{display:block}#customize-theme-controls .move-widget-actions{text-align:right;padding:12px}#customize-theme-controls .reordering .widget-title-action{display:none}#customize-theme-controls .reordering .widget-reorder-nav{display:block}.wp-full-overlay-main{right:auto;width:100%}#customize-theme-controls .add-new-widget{cursor:pointer;float:right;margin-left:10px;-webkit-transition:all .2s;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.add-new-widget:before{content:"\f132";display:inline-block;position:relative;left:-2px;top:-1px;font:400 20px/1 dashicons;vertical-align:middle;-webkit-transition:all .2s;transition:all .2s;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.adding-widget .add-new-widget,body.adding-widget .add-new-widget:hover{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}body.adding-widget .add-new-widget:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}#available-widgets .widget{position:static}#widgets-left #available-widgets .widget{float:none!important;width:auto!important}#available-widgets{position:absolute;overflow:auto;top:0;bottom:0;left:-301px;width:300px;margin:0;z-index:1;background:#fff;-webkit-transition:all .2s;transition:all .2s;border-right:1px solid #ddd}#available-widgets-filter{padding:8px 17px 7px 13px;border-bottom:1px solid #e4e4e4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#available-widgets-filter input{padding:5px 10px 2px;width:100%}#available-widgets .widget-tpl{position:relative;padding:20px 15px 20px 60px;border-bottom:1px solid #e4e4e4;cursor:pointer;display:none}#available-widgets .widget-tpl.selected,#available-widgets .widget-tpl:hover{background:#fafafa}#available-widgets .widget-top,#available-widgets .widget-top:hover{border:none;background:0 0;-webkit-box-shadow:none;box-shadow:none}#available-widgets .widget-title h4{padding:0 0 5px;font-size:14px}#available-widgets .widget .widget-description{padding:0;color:#777}#customize-preview{-webkit-transition:all .2s;transition:all .2s}body.adding-widget #available-widgets{left:0}body.adding-widget .wp-full-overlay-main{left:300px}body.adding-widget #customize-preview{opacity:.4}#available-widgets .widget-title{position:relative}#available-widgets .widget-title:before{content:"\f132";position:absolute;top:-3px;right:100%;margin-right:20px;width:20px;height:20px;color:#333;font:400 20px/1 dashicons;text-align:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#available-widgets [class*=easy] .widget-title:before{content:"\f328";top:-4px}#available-widgets [class*=like] .widget-title:before,#available-widgets [class*=super] .widget-title:before{content:"\f155";top:-4px}#available-widgets [class*=meta] .widget-title:before{content:"\f120"}#available-widgets [class*=archives] .widget-title:before{content:"\f480";top:-4px}#available-widgets [class*=categor] .widget-title:before{content:"\f318";top:-4px}#available-widgets [class*=chat] .widget-title:before,#available-widgets [class*=comment] .widget-title:before,#available-widgets [class*=testimonial] .widget-title:before{content:"\f101"}#available-widgets [class*=post] .widget-title:before{content:"\f109"}#available-widgets [class*=page] .widget-title:before{content:"\f105"}#available-widgets [class*=text] .widget-title:before{content:"\f478"}#available-widgets [class*=link] .widget-title:before{content:"\f103"}#available-widgets [class*=search] .widget-title:before{content:"\f179"}#available-widgets [class*=menu] .widget-title:before,#available-widgets [class*=nav] .widget-title:before{content:"\f333"}#available-widgets [class*=tag] .widget-title:before{content:"\f479"}#available-widgets [class*=rss] .widget-title:before{content:"\f303";top:-6px}#available-widgets [class*=calendar] .widget-title:before,#available-widgets [class*=event] .widget-title:before{content:"\f145";top:-4px}#available-widgets [class*=image] .widget-title:before,#available-widgets [class*=instagram] .widget-title:before,#available-widgets [class*=photo] .widget-title:before,#available-widgets [class*=slide] .widget-title:before{content:"\f128"}#available-widgets [class*=album] .widget-title:before,#available-widgets [class*=galler] .widget-title:before{content:"\f161"}#available-widgets [class*=tube] .widget-title:before,#available-widgets [class*=video] .widget-title:before{content:"\f126"}#available-widgets [class*=audio] .widget-title:before,#available-widgets [class*=music] .widget-title:before,#available-widgets [class*=radio] .widget-title:before{content:"\f127"}#available-widgets [class*=avatar] .widget-title:before,#available-widgets [class*=grofile] .widget-title:before,#available-widgets [class*=login] .widget-title:before,#available-widgets [class*=member] .widget-title:before,#available-widgets [class*=profile] .widget-title:before,#available-widgets [class*=subscriber] .widget-title:before,#available-widgets [class*=user] .widget-title:before{content:"\f110"}#available-widgets [class*=cart] .widget-title:before,#available-widgets [class*=commerce] .widget-title:before,#available-widgets [class*=shop] .widget-title:before{content:"\f174";top:-4px}#available-widgets [class*=firewall] .widget-title:before,#available-widgets [class*=secur] .widget-title:before{content:"\f332"}#available-widgets [class*=analytic] .widget-title:before,#available-widgets [class*=poll] .widget-title:before,#available-widgets [class*=stat] .widget-title:before{content:"\f185"}#available-widgets [class*=form] .widget-title:before{content:"\f175"}#available-widgets [class*=contact] .widget-title:before,#available-widgets [class*=mail] .widget-title:before,#available-widgets [class*=news] .widget-title:before,#available-widgets [class*=subscribe] .widget-title:before{content:"\f466"}#available-widgets [class*=share] .widget-title:before,#available-widgets [class*=socia] .widget-title:before{content:"\f237"}#available-widgets [class*=lang] .widget-title:before,#available-widgets [class*=translat] .widget-title:before{content:"\f326"}#available-widgets [class*=locat] .widget-title:before,#available-widgets [class*=map] .widget-title:before{content:"\f231"}#available-widgets [class*=download] .widget-title:before{content:"\f316"}#available-widgets [class*=weather] .widget-title:before{content:"\f176";top:-4px}#available-widgets [class*=facebook] .widget-title:before{content:"\f304"}#available-widgets [class*=tweet] .widget-title:before,#available-widgets [class*=twitter] .widget-title:before{content:"\f301"}@media screen and (max-height:700px) and (min-width:981px){.customize-control{margin-bottom:0}.widget-top{-webkit-box-shadow:none;box-shadow:none;margin-top:-1px}.widget-top:hover{position:relative;z-index:1}.last-widget{margin-bottom:15px}.widget-title h4{padding:13px 15px}.widget-top a.widget-action:after{padding-top:9px}.widget-reorder-nav span{height:39px}.widget-reorder-nav span:before{line-height:39px}#customize-theme-controls .widget-area-select li{padding:9px 15px 11px 42px}#customize-theme-controls .widget-area-select li:before{top:8px}}
\ No newline at end of file
diff --git a/wp-admin/css/dashboard-rtl.css b/wp-admin/css/dashboard-rtl.css
new file mode 100644
index 0000000..286d0cc
--- /dev/null
+++ b/wp-admin/css/dashboard-rtl.css
@@ -0,0 +1,1116 @@
+#wpbody-content #dashboard-widgets.columns-1 .postbox-container {
+ width: 100%;
+}
+
+#wpbody-content #dashboard-widgets.columns-2 .postbox-container {
+ width: 49.5%;
+}
+
+#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,
+#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,
+#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4 {
+ float: left;
+ width: 50.5%;
+}
+
+#wpbody-content #dashboard-widgets.columns-3 .postbox-container {
+ width: 33.5%;
+}
+
+#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1 {
+ width: 33%;
+}
+
+#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,
+#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4 {
+ float: left;
+}
+
+#wpbody-content #dashboard-widgets.columns-4 .postbox-container {
+ width: 25%;
+}
+
+#dashboard-widgets .postbox-container {
+ width: 25%;
+}
+
+#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container {
+ border: none !important;
+}
+
+.ie8 #wpbody-content #dashboard-widgets .postbox-container {
+ width: 49.5%;
+}
+
+.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,
+.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,
+.ie8 #wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: left;
+ width: 50.5%;
+}
+
+.ie8 #dashboard-widgets #postbox-container-3 .empty-container,
+.ie8 #dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+}
+
+/*------------------------------------------------------------------------------
+ 9.0 - Dashboard
+------------------------------------------------------------------------------*/
+
+#dashboard-widgets-wrap {
+ overflow: hidden;
+ margin: 0 -8px;
+}
+
+#dashboard-widgets .postbox .inside {
+ margin-bottom: 0;
+}
+
+#dashboard-widgets .meta-box-sortables {
+ margin: 0 8px;
+ min-height: 100px;
+}
+
+/* @todo: this was originally in this section, but likely belongs elsewhere */
+#the-comment-list td.comment p.comment-author {
+ margin-top: 0;
+ margin-right: 0;
+}
+
+#the-comment-list p.comment-author img {
+ float: right;
+ margin-left: 8px;
+}
+
+#the-comment-list p.comment-author strong a {
+ border: none;
+}
+
+#the-comment-list td {
+ vertical-align: top;
+}
+
+#the-comment-list td.comment {
+ word-wrap: break-word;
+}
+
+#the-comment-list td.comment img {
+ max-width: 100%;
+}
+
+/* Welcome Panel */
+.welcome-panel {
+ position: relative;
+ overflow: auto;
+ margin: 16px 0;
+ padding: 23px 10px 0;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ background: #fff;
+ font-size: 13px;
+ line-height: 2.1em;
+}
+
+.welcome-panel h3 {
+ margin: 0;
+ font-size: 21px;
+ font-weight: normal;
+ line-height: 1.2;
+}
+
+.welcome-panel h4 {
+ margin: 1.33em 0 0;
+ font-size: 16px;
+}
+
+.welcome-panel li {
+ font-size: 14px;
+}
+
+.welcome-panel p {
+ color: #777;
+}
+
+.welcome-panel a {
+ text-decoration: none;
+}
+
+.welcome-panel .about-description {
+ font-size: 16px;
+ margin: 0;
+}
+
+.welcome-panel .welcome-panel-close {
+ position: absolute;
+ top: 5px;
+ left: 10px;
+ padding: 20px 3px 0 15px;
+ font-size: 13px;
+ text-decoration: none;
+ line-height: 1;
+}
+
+#welcome-panel.welcome-panel .welcome-panel-close:before {
+ position: absolute;
+ right: -18px;
+ margin-top: -2px;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+.wp-core-ui .welcome-panel .button.button-hero {
+ margin: 15px 0 3px 13px;
+ padding: 12px 36px;
+ height: auto;
+ line-height: 1.4285714;
+ white-space: normal;
+}
+
+.welcome-panel-content {
+ margin-right: 13px;
+ max-width: 1500px;
+}
+
+.welcome-panel .welcome-panel-column-container {
+ clear: both;
+ overflow: hidden;
+ position: relative;
+}
+
+.welcome-panel .welcome-panel-column {
+ width: 32%;
+ min-width: 200px;
+ float: right;
+}
+
+.ie8 .welcome-panel .welcome-panel-column {
+ min-width: 230px;
+}
+
+.welcome-panel .welcome-panel-column:first-child {
+ width: 36%;
+}
+
+.welcome-panel-column p.hide-if-no-customize {
+ margin-top: 10px;
+}
+
+.welcome-panel-column p {
+ margin-top: 7px;
+ color: #464646;
+}
+
+.welcome-panel .welcome-icon {
+ display: block;
+ padding: 0 0 8px;
+ background: transparent !important;
+}
+
+.welcome-panel .welcome-icon:before {
+ color: #888;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0 0 0 10px;
+ top: -1px;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ vertical-align: top;
+}
+
+.welcome-panel .welcome-write-blog:before,
+.welcome-panel .welcome-edit-page:before {
+ content:'\f119';
+ top: -3px;
+}
+
+.welcome-panel .welcome-add-page:before {
+ content:'\f132';
+}
+
+.welcome-panel .welcome-view-site:before {
+ content:'\f115';
+ top: -2px;
+}
+
+.welcome-panel .welcome-widgets-menus:before {
+ content:'\f116';
+ top: -2px;
+}
+
+.welcome-panel .welcome-comments:before {
+ content:'\f117';
+ top: -1px;
+}
+
+.welcome-panel .welcome-learn-more:before {
+ content:'\f118';
+ top: -1px;
+}
+
+.welcome-panel .welcome-widgets-menus {
+ line-height: 16px;
+}
+
+.welcome-panel .welcome-panel-column ul {
+ margin: 0.8em 0 1em 1em;
+}
+
+.welcome-panel .welcome-panel-column li {
+ line-height: 16px;
+ list-style-type: none;
+}
+
+/* Dashboard WordPress news */
+
+#dashboard_primary .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#dashboard_primary .widget-loading,
+#dashboard_primary .dashboard-widget-control-form {
+ padding: 12px 12px 0;
+}
+
+body #dashboard-widgets .postbox form .submit {
+ margin: 0;
+}
+
+.dashboard-widget-control-form {
+ overflow: hidden;
+}
+
+.dashboard-widget-control-form p {
+ margin-top: 0;
+}
+
+.rssSummary {
+ color: #777;
+ margin-top: 4px;
+}
+
+#dashboard_primary .rss-widget {
+ border-bottom: 1px solid #eee;
+ font-size: 13px;
+ padding: 8px 12px 10px;
+}
+
+#dashboard_primary .rss-widget:last-child {
+ border-bottom: none;
+ padding-bottom: 8px;
+}
+
+#dashboard_primary .rss-widget a {
+ font-weight: normal;
+}
+
+#dashboard_primary .rss-widget span,
+#dashboard_primary .rss-widget span.rss-date {
+ color: #777;
+}
+
+#dashboard_primary .rss-widget span.rss-date {
+ margin-right: 12px;
+}
+
+#dashboard_primary .rss-widget ul li {
+ margin-bottom: 8px;
+}
+
+/* Dashboard right now */
+
+#dashboard_right_now ul {
+ margin: 0;
+ overflow: hidden;
+}
+
+#dashboard_right_now li {
+ width: 50%;
+ float: right;
+ margin-bottom: 10px;
+}
+
+#dashboard_right_now .inside {
+ overflow: hidden;
+ padding: 0;
+}
+
+#dashboard_right_now .main {
+ overflow: hidden;
+ padding: 0 12px 11px;
+}
+
+#dashboard_right_now .main p {
+ margin: 0;
+}
+
+#dashboard_right_now #wp-version-message .button {
+ clear: left;
+ float: left;
+ position: relative;
+ top: -5px;
+}
+
+.mu-storage {
+ overflow: hidden;
+}
+
+#dashboard-widgets h4.mu-storage {
+ margin-bottom: 10px;
+}
+
+/* Dashboard right now - Colors */
+
+#dashboard_right_now li a:before,
+#dashboard_right_now li span:before {
+ color: #888;
+}
+
+#dashboard_right_now .sub {
+ color: #777;
+ background: #f5f5f5;
+ border-top: 1px solid #eee;
+ padding: 10px 12px 6px 12px;
+}
+
+#dashboard_right_now .sub h4 {
+ color: #555;
+}
+
+#dashboard_right_now .sub p {
+ margin: 0 0 1em;
+}
+
+#dashboard_right_now .warning a:before,
+#dashboard_right_now .warning span:before {
+ color: #d54e21;
+}
+
+/* Dashboard right now - Icons */
+#dashboard_right_now li a:before,
+#dashboard_right_now li span:before {
+ content: '\f159';
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ float: right;
+ margin: 0 0 0 5px;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ text-decoration: none !important;
+}
+
+#dashboard_right_now .page-count a:before,
+#dashboard_right_now .page-count span:before {
+ content: '\f105';
+}
+
+#dashboard_right_now .post-count a:before,
+#dashboard_right_now .post-count span:before {
+ content: '\f109';
+}
+
+#dashboard_right_now .comment-count a:before {
+ content: '\f101';
+}
+
+#dashboard_right_now .comment-mod-count a:before {
+ content: '\f125';
+}
+
+#dashboard_right_now .storage-count a:before {
+ content: '\f104';
+}
+
+#dashboard_right_now .storage-count.warning a:before {
+ content: '\f153';
+}
+
+/* Dashboard Quick Draft */
+
+#dashboard_quick_press .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#dashboard_quick_press div.updated {
+ margin-bottom: 10px;
+ border: 1px solid #eee;
+ border-width: 1px 0 1px 1px;
+}
+
+#dashboard_quick_press form {
+ overflow: hidden;
+ margin: 12px;
+}
+
+#dashboard_quick_press .drafts,
+#dashboard_quick_press .easy-blogging {
+ padding: 10px 0 0;
+}
+
+/* Dashboard Quick Draft - Form styling */
+
+input#save-post {
+ float: right;
+}
+
+form.initial-form.quickpress-open label.prompt {
+ font-style: normal;
+}
+
+form.initial-form.quickpress-open input#title {
+ height: auto;
+}
+
+#dashboard_quick_press input,
+#dashboard_quick_press textarea {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 0;
+}
+
+#dashboard_quick_press textarea {
+ resize: vertical;
+}
+
+#dashboard-widgets .postbox form .submit {
+ margin: -39px 0;
+ float: left;
+}
+
+#description-wrap {
+ margin-top: 12px;
+}
+
+#title-wrap #title-prompt-text,
+.textarea-wrap #content-prompt-text {
+ color: #777;
+}
+
+#title-wrap #title-prompt-text {
+ font-size: 1.1em;
+ padding: 7px 8px;
+}
+
+.input-text-wrap,
+.textarea-wrap {
+ position: relative;
+}
+
+.input-text-wrap .prompt,
+.textarea-wrap .prompt {
+ position: absolute;
+}
+
+.textarea-wrap #content-prompt-text {
+ font-size: 1.1em;
+ padding: 7px 8px;
+}
+
+.textarea-wrap textarea#content {
+ margin: 0 0 8px;
+ padding: 6px 7px;
+}
+
+#quick-press textarea#content {
+ min-height: 90px;
+ max-height: 1300px;
+ resize: none;
+}
+
+/* Dashboard Quick Draft - Drafts list */
+
+.js #dashboard_quick_press .drafts {
+ border-top: 1px solid #eee;
+}
+
+#dashboard_quick_press .drafts abbr {
+ border: none;
+}
+
+#dashboard_quick_press .drafts h4 {
+ margin: 0 12px 8px;
+ font-weight: normal;
+}
+
+#dashboard_quick_press .drafts .view-all {
+ float: left;
+ margin: 0 0 0 12px;
+}
+
+#dashboard_primary a.rsswidget {
+ font-weight: normal;
+}
+
+#dashboard_quick_press .drafts ul {
+ margin: 0 12px;
+}
+
+#dashboard_quick_press .drafts li {
+ margin-bottom: 1em;
+}
+#dashboard_quick_press .drafts li time {
+ color: #777;
+}
+
+#dashboard_quick_press .drafts p {
+ margin: 0;
+ word-wrap: break-word;
+}
+
+#dashboard_quick_press .draft-title {
+ overflow: hidden;
+}
+
+#dashboard_quick_press .draft-title a,
+#dashboard_quick_press .draft-title time {
+ float: right;
+ margin: 0 0 0 5px;
+}
+
+/* Dashboard activity widget */
+
+#dashboard-widgets #dashboard_activity h4 {
+ margin: 0 12px 8px 0;
+ font-weight: normal;
+}
+
+#dashboard-widgets #dashboard_activity h4.comment-meta {
+ margin: 0;
+}
+
+#dashboard_activity h4.comment-meta {
+ margin-bottom: 4px;
+}
+
+#dashboard_activity ul {
+ padding: 0 12px;
+}
+
+#dashboard_activity .comment-meta span.approve:before {
+ content: '\f227';
+ font: 20px/.5 "dashicons";
+ margin-right: 12px;
+ vertical-align: middle;
+ position: relative;
+ top: -1px;
+ margin-left: 2px;
+}
+
+#dashboard_activity .inside {
+ padding: 0;
+ margin: 0;
+}
+
+#dashboard_activity .no-activity {
+ overflow: hidden;
+ padding: 0 12px 12px;
+ text-align: center;
+}
+
+#dashboard_activity .no-activity p {
+ color: #999;
+ font-size: 16px;
+}
+
+#dashboard_activity .no-activity .smiley {
+ margin-top: 0;
+}
+
+#dashboard_activity .no-activity .smiley:before {
+ content: '\f328';
+ font: normal 120px/1 'dashicons';
+ speak: none;
+ display: block;
+ margin: 0 0 0 5px;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ text-decoration: none !important;
+}
+
+#dashboard_activity .subsubsub {
+ float: none;
+ border-top: 1px solid #eeeeee;
+ margin-top: 0;
+ padding: 8px 12px 4px;
+}
+
+#future-posts ul,
+#published-posts ul {
+ clear: both;
+ margin-bottom: 0;
+}
+
+#future-posts li,
+#published-posts li {
+ overflow: hidden;
+ margin-bottom: 8px;
+}
+
+#future-posts ul span,
+#published-posts ul span {
+ color: #777;
+ float: right;
+ margin-left: 8px;
+ min-width: 150px;
+}
+
+.activity-block {
+ border-bottom: 1px solid #eee;
+ overflow: hidden;
+ padding: 8px 0 4px;
+}
+
+.activity-block:last-child {
+ border-bottom: none;
+}
+
+.activity-block .subsubsub li {
+ color: #ddd;
+}
+
+/* Dashboard activity widget - Comments */
+/* @todo: needs serious de-duplication */
+
+#activity-widget #the-comment-list tr.undo,
+#activity-widget #the-comment-list div.undo {
+ background: none;
+ padding: 6px 0;
+ margin-right: 12px;
+}
+
+#activity-widget #the-comment-list .alternate,
+#activity-widget #the-comment-list .alt {
+ background: none;
+}
+
+#activity-widget #the-comment-list .comment-item {
+ background: #fafafa;
+ padding: 12px;
+ position: relative;
+}
+
+#activity-widget #the-comment-list img {
+ position: absolute;
+ top: 13px;
+}
+
+#activity-widget #the-comment-list .dashboard-comment-wrap {
+ padding-right: 63px;
+}
+
+#activity-widget #the-comment-list .dashboard-comment-wrap blockquote {
+ margin: 1em 0;
+}
+
+#activity-widget #the-comment-list .comment-item h4 {
+ font-size: 13px;
+ color: #999;
+}
+
+#activity-widget #the-comment-list .comment-item p.row-actions {
+ margin: 4px 0 0 0;
+}
+
+#activity-widget #the-comment-list .comment-item:first-child {
+ border-top: 1px solid #eeeeee;
+}
+
+#activity-widget #the-comment-list .unapproved {
+ background-color: #fef7f1;
+}
+
+#activity-widget #the-comment-list .unapproved:before {
+ content: "";
+ display: block;
+ position: absolute;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ background: #d54e21;
+ width: 4px;
+}
+
+#activity-widget #the-comment-list .spam-undo-inside .avatar,
+#activity-widget #the-comment-list .trash-undo-inside .avatar {
+ position: relative;
+ top: 0;
+}
+
+/* Browse happy box */
+
+#dashboard-widgets #dashboard_browser_nag.postbox .inside {
+ margin: 10px;
+}
+
+.edit-box {
+ display: none;
+}
+
+h3:hover .edit-box {
+ display: inline;
+}
+
+#dashboard-widgets form .input-text-wrap input {
+ width: 100%;
+}
+
+#dashboard-widgets form .textarea-wrap textarea {
+ width: 100%;
+}
+
+#dashboard-widgets .postbox form .submit {
+ float: none;
+ margin: .5em 0 0;
+ padding: 0;
+ border: none;
+}
+
+#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish {
+ min-width: 0;
+}
+
+#dashboard-widgets a {
+ text-decoration: none;
+}
+
+#dashboard-widgets h3 a {
+ text-decoration: underline;
+}
+
+#dashboard-widgets h3 .postbox-title-action {
+ position: absolute;
+ left: 10px;
+ padding: 0;
+ top: 5px;
+}
+
+.js #dashboard-widgets h3 .postbox-title-action {
+ left: 33px;
+}
+
+#dashboard-widgets h4 {
+ color: #222;
+ font-weight: normal;
+ font-size: 14px;
+ margin: 0 0 .2em;
+ padding: 0;
+}
+
+#dashboard_plugins h5 {
+ font-size: 14px;
+}
+
+/* Recent Comments */
+
+#latest-comments #the-comment-list {
+ position: relative;
+}
+
+#activity-widget #the-comment-list .comment,
+#activity-widget #the-comment-list .pingback {
+ -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06);
+ box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06);
+}
+
+#activity-widget .comments #the-comment-list .alt {
+ background-color: transparent;
+}
+
+#activity-widget #latest-comments #the-comment-list .comment-item {
+ padding: 1em 12px;
+}
+
+#latest-comments #the-comment-list .pingback {
+ padding-right: 12px !important;
+}
+
+#latest-comments #the-comment-list .comment-item:first-child {
+ border-top: none;
+}
+
+#latest-comments #the-comment-list .comment-item h4 {
+ line-height: 1.5em;
+ margin-top: 0;
+ color: #666;
+}
+
+#latest-comments #the-comment-list .comment-item h4 cite {
+ font-style: normal;
+ font-weight: normal;
+}
+
+#latest-comments #the-comment-list .comment-item blockquote,
+#latest-comments #the-comment-list .comment-item blockquote p {
+ margin: 0;
+ padding: 0;
+ display: inline;
+}
+
+#latest-comments #the-comment-list .comment-item p.row-actions {
+ margin: 3px 0 0;
+ padding: 0;
+ font-size: 13px;
+}
+
+/* QuickDraft */
+
+#title-wrap label,
+#description-wrap label {
+ cursor: text;
+}
+
+#title-wrap #title {
+ padding: 2px 6px;
+ font-size: 1.3em;
+ outline: none;
+}
+
+#title-wrap #title-prompt-text {
+ font-size: 1.1em;
+ padding: 5px 8px;
+}
+
+/* Feeds */
+.rss-widget ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+a.rsswidget {
+ font-size: 14px;
+ font-weight: 600;
+ line-height: 1.7em;
+}
+
+.rss-widget ul li {
+ line-height: 1.5em;
+ margin-bottom: 12px;
+}
+
+.rss-widget span.rss-date {
+ color: #999;
+ font-size: 13px;
+ margin-right: 3px;
+}
+
+.rss-widget cite {
+ display: block;
+ text-align: left;
+ margin: 0 0 1em;
+ padding: 0;
+}
+
+.rss-widget cite:before {
+ content: '\2014';
+}
+
+.dashboard-comment-wrap {
+ overflow: hidden;
+ word-wrap: break-word;
+}
+
+/* Browser Nag */
+#dashboard_browser_nag a.update-browser-link {
+ font-size: 1.2em;
+ font-weight: 600;
+}
+
+#dashboard_browser_nag a {
+ text-decoration: underline;
+}
+
+#dashboard_browser_nag p.browser-update-nag.has-browser-icon {
+ padding-left: 125px;
+}
+
+#dashboard_browser_nag .browser-icon {
+ margin-top: -35px;
+}
+
+#dashboard_browser_nag.postbox.browser-insecure {
+ background-color: #ac1b1b;
+ border-color: #ac1b1b;
+}
+
+#dashboard_browser_nag.postbox {
+ background-color: #e29808;
+ background-image: none;
+ border-color: #edc048;
+ color: #fff;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#dashboard_browser_nag.postbox.browser-insecure h3 {
+ border-bottom-color: #cd5a5a;
+ color: #fff;
+}
+
+#dashboard_browser_nag.postbox h3 {
+ border-bottom-color: #f6e2ac;
+ background: transparent none;
+ color: #fff;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#dashboard_browser_nag a {
+ color: #fff;
+}
+
+/* Make the browser nags easier to read with Open Sans */
+
+#dashboard_browser_nag h3.hndle {
+ border: none;
+ font-weight: 600;
+ font-size: 20px;
+ padding-top: 10px;
+}
+
+.postbox#dashboard_browser_nag p a.dismiss {
+ font-size: 14px;
+}
+
+.postbox#dashboard_browser_nag p,
+.postbox#dashboard_browser_nag a,
+.postbox#dashboard_browser_nag p.browser-update-nag {
+ font-size: 16px;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/* one column on the dash */
+@media only screen and (max-width: 799px) {
+ #wpbody-content #dashboard-widgets .postbox-container {
+ width: 100%;
+ }
+}
+
+/* two columns on the dash, but keep the setting if one is selected */
+@media only screen and (min-width: 800px) and (max-width: 1499px) {
+ #wpbody-content #dashboard-widgets .postbox-container {
+ width: 49.5%;
+ }
+
+ #wpbody-content #dashboard-widgets #postbox-container-2,
+ #wpbody-content #dashboard-widgets #postbox-container-3,
+ #wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: left;
+ width: 50.5%;
+ }
+
+ #dashboard-widgets #postbox-container-3 .empty-container,
+ #dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+
+ #wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container {
+ width: 100%;
+ }
+
+ #wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+
+ /* show the radio buttons for column prefs only for one or two columns */
+ .index-php .screen-layout,
+ .index-php .columns-prefs {
+ display: block;
+ }
+
+ .columns-prefs .columns-prefs-3,
+ .columns-prefs .columns-prefs-4 {
+ display: none;
+ }
+}
+
+/* three columns on the dash */
+@media only screen and (min-width: 1500px) and (max-width: 1800px) {
+ #wpbody-content #dashboard-widgets .postbox-container {
+ width: 33.5%;
+ }
+
+ #wpbody-content #dashboard-widgets #postbox-container-1 {
+ width: 33%;
+ }
+
+ #wpbody-content #dashboard-widgets #postbox-container-3,
+ #wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: left;
+ }
+
+ #dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+}
+
+@media screen and (max-width: 870px) {
+ .welcome-panel .welcome-panel-column,
+ .welcome-panel .welcome-panel-column:first-child {
+ display: block;
+ float: none;
+ width: 100%;
+ }
+
+ .welcome-panel .welcome-panel-column li {
+ display: inline-block;
+ margin-left: 13px;
+ }
+
+ .welcome-panel .welcome-panel-column ul {
+ margin: 0.4em 0 0;
+ }
+
+}
+
+@media screen and ( max-width: 782px ) {
+ #dashboard_recent_comments #the-comment-list .comment-item .avatar {
+ height: 30px;
+ width: 30px;
+ margin: 4px 0 5px 10px;
+ }
+}
+
+/* Smartphone */
+@media screen and (max-width: 600px) {
+ /* Keep the close icon from overlapping the Welcome text. */
+ .welcome-panel .welcome-panel-close {
+ overflow: hidden;
+ text-indent: 100%;
+ white-space: nowrap;
+ width: 20px;
+ height: 20px;
+ left: 0;
+ padding: 5px;
+ }
+
+ /* Make the close icon larger for tappability. */
+ #welcome-panel.welcome-panel .welcome-panel-close:before {
+ font-size: 20px;
+ margin: 0;
+ }
+}
diff --git a/wp-admin/css/dashboard.css b/wp-admin/css/dashboard.css
new file mode 100644
index 0000000..fbf0795
--- /dev/null
+++ b/wp-admin/css/dashboard.css
@@ -0,0 +1,1116 @@
+#wpbody-content #dashboard-widgets.columns-1 .postbox-container {
+ width: 100%;
+}
+
+#wpbody-content #dashboard-widgets.columns-2 .postbox-container {
+ width: 49.5%;
+}
+
+#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,
+#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,
+#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4 {
+ float: right;
+ width: 50.5%;
+}
+
+#wpbody-content #dashboard-widgets.columns-3 .postbox-container {
+ width: 33.5%;
+}
+
+#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1 {
+ width: 33%;
+}
+
+#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,
+#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4 {
+ float: right;
+}
+
+#wpbody-content #dashboard-widgets.columns-4 .postbox-container {
+ width: 25%;
+}
+
+#dashboard-widgets .postbox-container {
+ width: 25%;
+}
+
+#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container {
+ border: none !important;
+}
+
+.ie8 #wpbody-content #dashboard-widgets .postbox-container {
+ width: 49.5%;
+}
+
+.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,
+.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,
+.ie8 #wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: right;
+ width: 50.5%;
+}
+
+.ie8 #dashboard-widgets #postbox-container-3 .empty-container,
+.ie8 #dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+}
+
+/*------------------------------------------------------------------------------
+ 9.0 - Dashboard
+------------------------------------------------------------------------------*/
+
+#dashboard-widgets-wrap {
+ overflow: hidden;
+ margin: 0 -8px;
+}
+
+#dashboard-widgets .postbox .inside {
+ margin-bottom: 0;
+}
+
+#dashboard-widgets .meta-box-sortables {
+ margin: 0 8px;
+ min-height: 100px;
+}
+
+/* @todo: this was originally in this section, but likely belongs elsewhere */
+#the-comment-list td.comment p.comment-author {
+ margin-top: 0;
+ margin-left: 0;
+}
+
+#the-comment-list p.comment-author img {
+ float: left;
+ margin-right: 8px;
+}
+
+#the-comment-list p.comment-author strong a {
+ border: none;
+}
+
+#the-comment-list td {
+ vertical-align: top;
+}
+
+#the-comment-list td.comment {
+ word-wrap: break-word;
+}
+
+#the-comment-list td.comment img {
+ max-width: 100%;
+}
+
+/* Welcome Panel */
+.welcome-panel {
+ position: relative;
+ overflow: auto;
+ margin: 16px 0;
+ padding: 23px 10px 0;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ background: #fff;
+ font-size: 13px;
+ line-height: 2.1em;
+}
+
+.welcome-panel h3 {
+ margin: 0;
+ font-size: 21px;
+ font-weight: normal;
+ line-height: 1.2;
+}
+
+.welcome-panel h4 {
+ margin: 1.33em 0 0;
+ font-size: 16px;
+}
+
+.welcome-panel li {
+ font-size: 14px;
+}
+
+.welcome-panel p {
+ color: #777;
+}
+
+.welcome-panel a {
+ text-decoration: none;
+}
+
+.welcome-panel .about-description {
+ font-size: 16px;
+ margin: 0;
+}
+
+.welcome-panel .welcome-panel-close {
+ position: absolute;
+ top: 5px;
+ right: 10px;
+ padding: 20px 15px 0 3px;
+ font-size: 13px;
+ text-decoration: none;
+ line-height: 1;
+}
+
+#welcome-panel.welcome-panel .welcome-panel-close:before {
+ position: absolute;
+ left: -18px;
+ margin-top: -2px;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+.wp-core-ui .welcome-panel .button.button-hero {
+ margin: 15px 13px 3px 0;
+ padding: 12px 36px;
+ height: auto;
+ line-height: 1.4285714;
+ white-space: normal;
+}
+
+.welcome-panel-content {
+ margin-left: 13px;
+ max-width: 1500px;
+}
+
+.welcome-panel .welcome-panel-column-container {
+ clear: both;
+ overflow: hidden;
+ position: relative;
+}
+
+.welcome-panel .welcome-panel-column {
+ width: 32%;
+ min-width: 200px;
+ float: left;
+}
+
+.ie8 .welcome-panel .welcome-panel-column {
+ min-width: 230px;
+}
+
+.welcome-panel .welcome-panel-column:first-child {
+ width: 36%;
+}
+
+.welcome-panel-column p.hide-if-no-customize {
+ margin-top: 10px;
+}
+
+.welcome-panel-column p {
+ margin-top: 7px;
+ color: #464646;
+}
+
+.welcome-panel .welcome-icon {
+ display: block;
+ padding: 0 0 8px;
+ background: transparent !important;
+}
+
+.welcome-panel .welcome-icon:before {
+ color: #888;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0 10px 0 0;
+ top: -1px;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ vertical-align: top;
+}
+
+.welcome-panel .welcome-write-blog:before,
+.welcome-panel .welcome-edit-page:before {
+ content:'\f119';
+ top: -3px;
+}
+
+.welcome-panel .welcome-add-page:before {
+ content:'\f132';
+}
+
+.welcome-panel .welcome-view-site:before {
+ content:'\f115';
+ top: -2px;
+}
+
+.welcome-panel .welcome-widgets-menus:before {
+ content:'\f116';
+ top: -2px;
+}
+
+.welcome-panel .welcome-comments:before {
+ content:'\f117';
+ top: -1px;
+}
+
+.welcome-panel .welcome-learn-more:before {
+ content:'\f118';
+ top: -1px;
+}
+
+.welcome-panel .welcome-widgets-menus {
+ line-height: 16px;
+}
+
+.welcome-panel .welcome-panel-column ul {
+ margin: 0.8em 1em 1em 0;
+}
+
+.welcome-panel .welcome-panel-column li {
+ line-height: 16px;
+ list-style-type: none;
+}
+
+/* Dashboard WordPress news */
+
+#dashboard_primary .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#dashboard_primary .widget-loading,
+#dashboard_primary .dashboard-widget-control-form {
+ padding: 12px 12px 0;
+}
+
+body #dashboard-widgets .postbox form .submit {
+ margin: 0;
+}
+
+.dashboard-widget-control-form {
+ overflow: hidden;
+}
+
+.dashboard-widget-control-form p {
+ margin-top: 0;
+}
+
+.rssSummary {
+ color: #777;
+ margin-top: 4px;
+}
+
+#dashboard_primary .rss-widget {
+ border-bottom: 1px solid #eee;
+ font-size: 13px;
+ padding: 8px 12px 10px;
+}
+
+#dashboard_primary .rss-widget:last-child {
+ border-bottom: none;
+ padding-bottom: 8px;
+}
+
+#dashboard_primary .rss-widget a {
+ font-weight: normal;
+}
+
+#dashboard_primary .rss-widget span,
+#dashboard_primary .rss-widget span.rss-date {
+ color: #777;
+}
+
+#dashboard_primary .rss-widget span.rss-date {
+ margin-left: 12px;
+}
+
+#dashboard_primary .rss-widget ul li {
+ margin-bottom: 8px;
+}
+
+/* Dashboard right now */
+
+#dashboard_right_now ul {
+ margin: 0;
+ overflow: hidden;
+}
+
+#dashboard_right_now li {
+ width: 50%;
+ float: left;
+ margin-bottom: 10px;
+}
+
+#dashboard_right_now .inside {
+ overflow: hidden;
+ padding: 0;
+}
+
+#dashboard_right_now .main {
+ overflow: hidden;
+ padding: 0 12px 11px;
+}
+
+#dashboard_right_now .main p {
+ margin: 0;
+}
+
+#dashboard_right_now #wp-version-message .button {
+ clear: right;
+ float: right;
+ position: relative;
+ top: -5px;
+}
+
+.mu-storage {
+ overflow: hidden;
+}
+
+#dashboard-widgets h4.mu-storage {
+ margin-bottom: 10px;
+}
+
+/* Dashboard right now - Colors */
+
+#dashboard_right_now li a:before,
+#dashboard_right_now li span:before {
+ color: #888;
+}
+
+#dashboard_right_now .sub {
+ color: #777;
+ background: #f5f5f5;
+ border-top: 1px solid #eee;
+ padding: 10px 12px 6px 12px;
+}
+
+#dashboard_right_now .sub h4 {
+ color: #555;
+}
+
+#dashboard_right_now .sub p {
+ margin: 0 0 1em;
+}
+
+#dashboard_right_now .warning a:before,
+#dashboard_right_now .warning span:before {
+ color: #d54e21;
+}
+
+/* Dashboard right now - Icons */
+#dashboard_right_now li a:before,
+#dashboard_right_now li span:before {
+ content: '\f159';
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ float: left;
+ margin: 0 5px 0 0;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ text-decoration: none !important;
+}
+
+#dashboard_right_now .page-count a:before,
+#dashboard_right_now .page-count span:before {
+ content: '\f105';
+}
+
+#dashboard_right_now .post-count a:before,
+#dashboard_right_now .post-count span:before {
+ content: '\f109';
+}
+
+#dashboard_right_now .comment-count a:before {
+ content: '\f101';
+}
+
+#dashboard_right_now .comment-mod-count a:before {
+ content: '\f125';
+}
+
+#dashboard_right_now .storage-count a:before {
+ content: '\f104';
+}
+
+#dashboard_right_now .storage-count.warning a:before {
+ content: '\f153';
+}
+
+/* Dashboard Quick Draft */
+
+#dashboard_quick_press .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#dashboard_quick_press div.updated {
+ margin-bottom: 10px;
+ border: 1px solid #eee;
+ border-width: 1px 1px 1px 0;
+}
+
+#dashboard_quick_press form {
+ overflow: hidden;
+ margin: 12px;
+}
+
+#dashboard_quick_press .drafts,
+#dashboard_quick_press .easy-blogging {
+ padding: 10px 0 0;
+}
+
+/* Dashboard Quick Draft - Form styling */
+
+input#save-post {
+ float: left;
+}
+
+form.initial-form.quickpress-open label.prompt {
+ font-style: normal;
+}
+
+form.initial-form.quickpress-open input#title {
+ height: auto;
+}
+
+#dashboard_quick_press input,
+#dashboard_quick_press textarea {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 0;
+}
+
+#dashboard_quick_press textarea {
+ resize: vertical;
+}
+
+#dashboard-widgets .postbox form .submit {
+ margin: -39px 0;
+ float: right;
+}
+
+#description-wrap {
+ margin-top: 12px;
+}
+
+#title-wrap #title-prompt-text,
+.textarea-wrap #content-prompt-text {
+ color: #777;
+}
+
+#title-wrap #title-prompt-text {
+ font-size: 1.1em;
+ padding: 7px 8px;
+}
+
+.input-text-wrap,
+.textarea-wrap {
+ position: relative;
+}
+
+.input-text-wrap .prompt,
+.textarea-wrap .prompt {
+ position: absolute;
+}
+
+.textarea-wrap #content-prompt-text {
+ font-size: 1.1em;
+ padding: 7px 8px;
+}
+
+.textarea-wrap textarea#content {
+ margin: 0 0 8px;
+ padding: 6px 7px;
+}
+
+#quick-press textarea#content {
+ min-height: 90px;
+ max-height: 1300px;
+ resize: none;
+}
+
+/* Dashboard Quick Draft - Drafts list */
+
+.js #dashboard_quick_press .drafts {
+ border-top: 1px solid #eee;
+}
+
+#dashboard_quick_press .drafts abbr {
+ border: none;
+}
+
+#dashboard_quick_press .drafts h4 {
+ margin: 0 12px 8px;
+ font-weight: normal;
+}
+
+#dashboard_quick_press .drafts .view-all {
+ float: right;
+ margin: 0 12px 0 0;
+}
+
+#dashboard_primary a.rsswidget {
+ font-weight: normal;
+}
+
+#dashboard_quick_press .drafts ul {
+ margin: 0 12px;
+}
+
+#dashboard_quick_press .drafts li {
+ margin-bottom: 1em;
+}
+#dashboard_quick_press .drafts li time {
+ color: #777;
+}
+
+#dashboard_quick_press .drafts p {
+ margin: 0;
+ word-wrap: break-word;
+}
+
+#dashboard_quick_press .draft-title {
+ overflow: hidden;
+}
+
+#dashboard_quick_press .draft-title a,
+#dashboard_quick_press .draft-title time {
+ float: left;
+ margin: 0 5px 0 0;
+}
+
+/* Dashboard activity widget */
+
+#dashboard-widgets #dashboard_activity h4 {
+ margin: 0 0 8px 12px;
+ font-weight: normal;
+}
+
+#dashboard-widgets #dashboard_activity h4.comment-meta {
+ margin: 0;
+}
+
+#dashboard_activity h4.comment-meta {
+ margin-bottom: 4px;
+}
+
+#dashboard_activity ul {
+ padding: 0 12px;
+}
+
+#dashboard_activity .comment-meta span.approve:before {
+ content: '\f227';
+ font: 20px/.5 "dashicons";
+ margin-left: 12px;
+ vertical-align: middle;
+ position: relative;
+ top: -1px;
+ margin-right: 2px;
+}
+
+#dashboard_activity .inside {
+ padding: 0;
+ margin: 0;
+}
+
+#dashboard_activity .no-activity {
+ overflow: hidden;
+ padding: 0 12px 12px;
+ text-align: center;
+}
+
+#dashboard_activity .no-activity p {
+ color: #999;
+ font-size: 16px;
+}
+
+#dashboard_activity .no-activity .smiley {
+ margin-top: 0;
+}
+
+#dashboard_activity .no-activity .smiley:before {
+ content: '\f328';
+ font: normal 120px/1 'dashicons';
+ speak: none;
+ display: block;
+ margin: 0 5px 0 0;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ text-decoration: none !important;
+}
+
+#dashboard_activity .subsubsub {
+ float: none;
+ border-top: 1px solid #eeeeee;
+ margin-top: 0;
+ padding: 8px 12px 4px;
+}
+
+#future-posts ul,
+#published-posts ul {
+ clear: both;
+ margin-bottom: 0;
+}
+
+#future-posts li,
+#published-posts li {
+ overflow: hidden;
+ margin-bottom: 8px;
+}
+
+#future-posts ul span,
+#published-posts ul span {
+ color: #777;
+ float: left;
+ margin-right: 8px;
+ min-width: 150px;
+}
+
+.activity-block {
+ border-bottom: 1px solid #eee;
+ overflow: hidden;
+ padding: 8px 0 4px;
+}
+
+.activity-block:last-child {
+ border-bottom: none;
+}
+
+.activity-block .subsubsub li {
+ color: #ddd;
+}
+
+/* Dashboard activity widget - Comments */
+/* @todo: needs serious de-duplication */
+
+#activity-widget #the-comment-list tr.undo,
+#activity-widget #the-comment-list div.undo {
+ background: none;
+ padding: 6px 0;
+ margin-left: 12px;
+}
+
+#activity-widget #the-comment-list .alternate,
+#activity-widget #the-comment-list .alt {
+ background: none;
+}
+
+#activity-widget #the-comment-list .comment-item {
+ background: #fafafa;
+ padding: 12px;
+ position: relative;
+}
+
+#activity-widget #the-comment-list img {
+ position: absolute;
+ top: 13px;
+}
+
+#activity-widget #the-comment-list .dashboard-comment-wrap {
+ padding-left: 63px;
+}
+
+#activity-widget #the-comment-list .dashboard-comment-wrap blockquote {
+ margin: 1em 0;
+}
+
+#activity-widget #the-comment-list .comment-item h4 {
+ font-size: 13px;
+ color: #999;
+}
+
+#activity-widget #the-comment-list .comment-item p.row-actions {
+ margin: 4px 0 0 0;
+}
+
+#activity-widget #the-comment-list .comment-item:first-child {
+ border-top: 1px solid #eeeeee;
+}
+
+#activity-widget #the-comment-list .unapproved {
+ background-color: #fef7f1;
+}
+
+#activity-widget #the-comment-list .unapproved:before {
+ content: "";
+ display: block;
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ background: #d54e21;
+ width: 4px;
+}
+
+#activity-widget #the-comment-list .spam-undo-inside .avatar,
+#activity-widget #the-comment-list .trash-undo-inside .avatar {
+ position: relative;
+ top: 0;
+}
+
+/* Browse happy box */
+
+#dashboard-widgets #dashboard_browser_nag.postbox .inside {
+ margin: 10px;
+}
+
+.edit-box {
+ display: none;
+}
+
+h3:hover .edit-box {
+ display: inline;
+}
+
+#dashboard-widgets form .input-text-wrap input {
+ width: 100%;
+}
+
+#dashboard-widgets form .textarea-wrap textarea {
+ width: 100%;
+}
+
+#dashboard-widgets .postbox form .submit {
+ float: none;
+ margin: .5em 0 0;
+ padding: 0;
+ border: none;
+}
+
+#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish {
+ min-width: 0;
+}
+
+#dashboard-widgets a {
+ text-decoration: none;
+}
+
+#dashboard-widgets h3 a {
+ text-decoration: underline;
+}
+
+#dashboard-widgets h3 .postbox-title-action {
+ position: absolute;
+ right: 10px;
+ padding: 0;
+ top: 5px;
+}
+
+.js #dashboard-widgets h3 .postbox-title-action {
+ right: 33px;
+}
+
+#dashboard-widgets h4 {
+ color: #222;
+ font-weight: normal;
+ font-size: 14px;
+ margin: 0 0 .2em;
+ padding: 0;
+}
+
+#dashboard_plugins h5 {
+ font-size: 14px;
+}
+
+/* Recent Comments */
+
+#latest-comments #the-comment-list {
+ position: relative;
+}
+
+#activity-widget #the-comment-list .comment,
+#activity-widget #the-comment-list .pingback {
+ -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06);
+ box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06);
+}
+
+#activity-widget .comments #the-comment-list .alt {
+ background-color: transparent;
+}
+
+#activity-widget #latest-comments #the-comment-list .comment-item {
+ padding: 1em 12px;
+}
+
+#latest-comments #the-comment-list .pingback {
+ padding-left: 12px !important;
+}
+
+#latest-comments #the-comment-list .comment-item:first-child {
+ border-top: none;
+}
+
+#latest-comments #the-comment-list .comment-item h4 {
+ line-height: 1.5em;
+ margin-top: 0;
+ color: #666;
+}
+
+#latest-comments #the-comment-list .comment-item h4 cite {
+ font-style: normal;
+ font-weight: normal;
+}
+
+#latest-comments #the-comment-list .comment-item blockquote,
+#latest-comments #the-comment-list .comment-item blockquote p {
+ margin: 0;
+ padding: 0;
+ display: inline;
+}
+
+#latest-comments #the-comment-list .comment-item p.row-actions {
+ margin: 3px 0 0;
+ padding: 0;
+ font-size: 13px;
+}
+
+/* QuickDraft */
+
+#title-wrap label,
+#description-wrap label {
+ cursor: text;
+}
+
+#title-wrap #title {
+ padding: 2px 6px;
+ font-size: 1.3em;
+ outline: none;
+}
+
+#title-wrap #title-prompt-text {
+ font-size: 1.1em;
+ padding: 5px 8px;
+}
+
+/* Feeds */
+.rss-widget ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+a.rsswidget {
+ font-size: 14px;
+ font-weight: 600;
+ line-height: 1.7em;
+}
+
+.rss-widget ul li {
+ line-height: 1.5em;
+ margin-bottom: 12px;
+}
+
+.rss-widget span.rss-date {
+ color: #999;
+ font-size: 13px;
+ margin-left: 3px;
+}
+
+.rss-widget cite {
+ display: block;
+ text-align: right;
+ margin: 0 0 1em;
+ padding: 0;
+}
+
+.rss-widget cite:before {
+ content: '\2014';
+}
+
+.dashboard-comment-wrap {
+ overflow: hidden;
+ word-wrap: break-word;
+}
+
+/* Browser Nag */
+#dashboard_browser_nag a.update-browser-link {
+ font-size: 1.2em;
+ font-weight: 600;
+}
+
+#dashboard_browser_nag a {
+ text-decoration: underline;
+}
+
+#dashboard_browser_nag p.browser-update-nag.has-browser-icon {
+ padding-right: 125px;
+}
+
+#dashboard_browser_nag .browser-icon {
+ margin-top: -35px;
+}
+
+#dashboard_browser_nag.postbox.browser-insecure {
+ background-color: #ac1b1b;
+ border-color: #ac1b1b;
+}
+
+#dashboard_browser_nag.postbox {
+ background-color: #e29808;
+ background-image: none;
+ border-color: #edc048;
+ color: #fff;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#dashboard_browser_nag.postbox.browser-insecure h3 {
+ border-bottom-color: #cd5a5a;
+ color: #fff;
+}
+
+#dashboard_browser_nag.postbox h3 {
+ border-bottom-color: #f6e2ac;
+ background: transparent none;
+ color: #fff;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#dashboard_browser_nag a {
+ color: #fff;
+}
+
+/* Make the browser nags easier to read with Open Sans */
+
+#dashboard_browser_nag h3.hndle {
+ border: none;
+ font-weight: 600;
+ font-size: 20px;
+ padding-top: 10px;
+}
+
+.postbox#dashboard_browser_nag p a.dismiss {
+ font-size: 14px;
+}
+
+.postbox#dashboard_browser_nag p,
+.postbox#dashboard_browser_nag a,
+.postbox#dashboard_browser_nag p.browser-update-nag {
+ font-size: 16px;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/* one column on the dash */
+@media only screen and (max-width: 799px) {
+ #wpbody-content #dashboard-widgets .postbox-container {
+ width: 100%;
+ }
+}
+
+/* two columns on the dash, but keep the setting if one is selected */
+@media only screen and (min-width: 800px) and (max-width: 1499px) {
+ #wpbody-content #dashboard-widgets .postbox-container {
+ width: 49.5%;
+ }
+
+ #wpbody-content #dashboard-widgets #postbox-container-2,
+ #wpbody-content #dashboard-widgets #postbox-container-3,
+ #wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: right;
+ width: 50.5%;
+ }
+
+ #dashboard-widgets #postbox-container-3 .empty-container,
+ #dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+
+ #wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container {
+ width: 100%;
+ }
+
+ #wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+
+ /* show the radio buttons for column prefs only for one or two columns */
+ .index-php .screen-layout,
+ .index-php .columns-prefs {
+ display: block;
+ }
+
+ .columns-prefs .columns-prefs-3,
+ .columns-prefs .columns-prefs-4 {
+ display: none;
+ }
+}
+
+/* three columns on the dash */
+@media only screen and (min-width: 1500px) and (max-width: 1800px) {
+ #wpbody-content #dashboard-widgets .postbox-container {
+ width: 33.5%;
+ }
+
+ #wpbody-content #dashboard-widgets #postbox-container-1 {
+ width: 33%;
+ }
+
+ #wpbody-content #dashboard-widgets #postbox-container-3,
+ #wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: right;
+ }
+
+ #dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+}
+
+@media screen and (max-width: 870px) {
+ .welcome-panel .welcome-panel-column,
+ .welcome-panel .welcome-panel-column:first-child {
+ display: block;
+ float: none;
+ width: 100%;
+ }
+
+ .welcome-panel .welcome-panel-column li {
+ display: inline-block;
+ margin-right: 13px;
+ }
+
+ .welcome-panel .welcome-panel-column ul {
+ margin: 0.4em 0 0;
+ }
+
+}
+
+@media screen and ( max-width: 782px ) {
+ #dashboard_recent_comments #the-comment-list .comment-item .avatar {
+ height: 30px;
+ width: 30px;
+ margin: 4px 10px 5px 0;
+ }
+}
+
+/* Smartphone */
+@media screen and (max-width: 600px) {
+ /* Keep the close icon from overlapping the Welcome text. */
+ .welcome-panel .welcome-panel-close {
+ overflow: hidden;
+ text-indent: 100%;
+ white-space: nowrap;
+ width: 20px;
+ height: 20px;
+ right: 0;
+ padding: 5px;
+ }
+
+ /* Make the close icon larger for tappability. */
+ #welcome-panel.welcome-panel .welcome-panel-close:before {
+ font-size: 20px;
+ margin: 0;
+ }
+}
diff --git a/wp-admin/css/deprecated-media-rtl.css b/wp-admin/css/deprecated-media-rtl.css
new file mode 100644
index 0000000..ed90138
--- /dev/null
+++ b/wp-admin/css/deprecated-media-rtl.css
@@ -0,0 +1,371 @@
+/* Styles for the media library iframe (not used on the Library screen) */
+
+div#media-upload-header {
+ margin: 0;
+ padding: 5px 5px 0;
+ font-weight: bold;
+ position: relative;
+ border-bottom: 1px solid #dfdfdf;
+ background: #f9f9f9;
+}
+
+body#media-upload ul#sidemenu {
+ font-weight: normal;
+ margin: 0 5px;
+ right: 0;
+ bottom: -1px;
+ float: none;
+ overflow: hidden;
+}
+
+#media-upload:after { /* clearfix */
+ content: "";
+ display: table;
+ clear: both;
+}
+
+#media-upload .slidetoggle {
+ border-top-color: #dfdfdf;
+}
+
+#media-upload input[type="radio"] {
+ padding: 0;
+}
+
+form {
+ margin: 1em;
+}
+
+#search-filter {
+ text-align: left;
+}
+
+th {
+ position: relative;
+}
+
+.media-upload-form label.form-help, td.help {
+ font-family: sans-serif;
+ font-style: italic;
+ font-weight: normal;
+}
+
+.media-upload-form p.help {
+ margin: 0;
+ padding: 0;
+}
+
+.media-upload-form fieldset {
+ width: 100%;
+ border: none;
+ text-align: justify;
+ margin: 0 0 1em 0;
+ padding: 0;
+}
+
+/* specific to the image upload form */
+
+.image-align-none-label {
+ background: url(../images/align-none.png) no-repeat center right;
+}
+
+.image-align-left-label {
+ background: url(../images/align-left.png) no-repeat center right;
+}
+
+.image-align-center-label {
+ background: url(../images/align-center.png) no-repeat center right;
+}
+
+.image-align-right-label {
+ background: url(../images/align-right.png) no-repeat center right;
+}
+
+tr.image-size td {
+ width: 460px;
+}
+
+tr.image-size div.image-size-item {
+ margin: 0 0 5px;
+}
+
+#library-form .progress,
+#gallery-form .progress,
+.insert-gallery,
+.describe.startopen,
+.describe.startclosed {
+ display: none;
+}
+
+.media-item .thumbnail {
+ max-width: 128px;
+ max-height: 128px;
+}
+
+thead.media-item-info tr {
+ background-color: transparent;
+}
+
+.form-table thead.media-item-info {
+ border: 8px solid #fff;
+}
+
+abbr.required {
+ text-decoration: none;
+ border: none;
+}
+
+.describe label {
+ display: inline;
+}
+
+.describe td.error {
+ padding: 2px 8px;
+}
+
+.describe td.A1 {
+ width: 132px;
+}
+
+.describe input[type="text"],
+.describe textarea {
+ width: 460px;
+ border-width: 1px;
+ border-style: solid;
+}
+
+/* Specific to Uploader */
+
+#media-upload p.ml-submit {
+ padding: 1em 0;
+}
+
+#media-upload p.help,
+#media-upload label.help {
+ font-family: sans-serif;
+ font-style: italic;
+ font-weight: normal;
+}
+
+#media-upload .ui-sortable .media-item {
+ cursor: move;
+}
+
+#media-upload tr.image-size {
+ margin-bottom: 1em;
+ height: 3em;
+}
+
+#media-upload #filter {
+ width: 623px;
+}
+
+#media-upload #filter .subsubsub {
+ margin: 8px 0;
+}
+
+#filter .tablenav select {
+ border-style: solid;
+ border-width: 1px;
+ padding: 2px;
+ vertical-align: top;
+ width: auto;
+}
+
+#media-upload .del-attachment {
+ display: none;
+ margin: 5px 0;
+}
+
+.menu_order {
+ float: left;
+ font-size: 11px;
+ margin: 8px 10px 0;
+}
+
+.menu_order_input {
+ border: 1px solid #ddd;
+ font-size: 10px;
+ padding: 1px;
+ width: 23px;
+}
+
+.ui-sortable-helper {
+ background-color: #fff;
+ border: 1px solid #aaa;
+ opacity: 0.6;
+ filter: alpha(opacity=60);
+}
+
+#media-upload th.order-head {
+ width: 20%;
+ text-align: center;
+}
+
+#media-upload th.actions-head {
+ width: 25%;
+ text-align: center;
+}
+
+#media-upload a.wp-post-thumbnail {
+ margin: 0 20px;
+}
+
+#media-upload .widefat {
+ border-style: solid solid none;
+}
+
+.sorthelper {
+ height: 37px;
+ width: 623px;
+ display: block;
+}
+
+#gallery-settings th.label {
+ width: 160px;
+}
+
+#gallery-settings #basic th.label {
+ padding: 5px 0 5px 5px;
+}
+
+#gallery-settings .title {
+ clear: both;
+ padding: 0 0 3px;
+ font-size: 1.6em;
+ border-bottom: 1px solid #DADADA;
+}
+
+h3.media-title {
+ font-size: 1.6em;
+}
+
+h4.media-sub-title {
+ border-bottom: 1px solid #DADADA;
+ font-size: 1.3em;
+ margin: 12px;
+ padding: 0 0 3px;
+}
+
+#gallery-settings .title,
+h3.media-title,
+h4.media-sub-title {
+ font-family: Georgia,"Times New Roman",Times,serif;
+ font-weight: normal;
+ color: #5A5A5A;
+}
+
+#gallery-settings .describe td {
+ vertical-align: middle;
+ height: 3em;
+}
+
+#gallery-settings .describe th.label {
+ padding-top: .5em;
+ text-align: right;
+}
+
+#gallery-settings .describe {
+ padding: 5px;
+ width: 100%;
+ clear: both;
+ cursor: default;
+ background: #fff;
+}
+
+#gallery-settings .describe select {
+ width: 15em;
+}
+
+#gallery-settings .describe select option,
+#gallery-settings .describe td {
+ padding: 0;
+}
+
+#gallery-settings label,
+#gallery-settings legend {
+ font-size: 13px;
+ color: #464646;
+ margin-left: 15px;
+}
+
+#gallery-settings .align .field label {
+ margin: 0 3px 0 1em;
+}
+
+#gallery-settings p.ml-submit {
+ border-top: 1px solid #dfdfdf;
+}
+
+#gallery-settings select#columns {
+ width: 6em;
+}
+
+#sort-buttons {
+ font-size: 0.8em;
+ margin: 3px 0 -8px 25px;
+ text-align: left;
+ max-width: 625px;
+}
+
+#sort-buttons a {
+ text-decoration: none;
+}
+
+#sort-buttons #asc,
+#sort-buttons #showall {
+ padding-right: 5px;
+}
+
+#sort-buttons span {
+ margin-left: 25px;
+}
+
+p.media-types {
+ padding: 1em;
+}
+
+tr.not-image {
+ display: none;
+}
+
+table.not-image tr.not-image {
+ display: table-row;
+}
+
+table.not-image tr.image-only {
+ display: none;
+}
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+
+ .image-align-none-label {
+ background-image: url(../images/align-none-2x.png?ver=20120916);
+ -webkit-background-size: 21px 15px;
+ background-size: 21px 15px;
+ }
+
+ .image-align-left-label {
+ background-image: url(../images/align-left-2x.png?ver=20120916);
+ -webkit-background-size: 22px 15px;
+ background-size: 22px 15px;
+ }
+
+ .image-align-center-label {
+ background-image: url(../images/align-center-2x.png?ver=20120916);
+ -webkit-background-size: 21px 15px;
+ background-size: 21px 15px;
+ }
+
+ .image-align-right-label {
+ background-image: url(../images/align-right-2x.png?ver=20120916);
+ -webkit-background-size: 22px 15px;
+ background-size: 22px 15px;
+ }
+}
diff --git a/wp-admin/css/deprecated-media-rtl.min.css b/wp-admin/css/deprecated-media-rtl.min.css
new file mode 100644
index 0000000..695a09f
--- /dev/null
+++ b/wp-admin/css/deprecated-media-rtl.min.css
@@ -0,0 +1 @@
+div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:700;position:relative;border-bottom:1px solid #dfdfdf;background:#f9f9f9}body#media-upload ul#sidemenu{font-weight:400;margin:0 5px;right:0;bottom:-1px;float:none;overflow:hidden}#media-upload:after{content:"";display:table;clear:both}#media-upload .slidetoggle{border-top-color:#dfdfdf}#media-upload input[type=radio]{padding:0}form{margin:1em}#search-filter{text-align:left}th{position:relative}.media-upload-form label.form-help,td.help{font-family:sans-serif;font-style:italic;font-weight:400}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:none;text-align:justify;margin:0 0 1em;padding:0}.image-align-none-label{background:url(../images/align-none.png) center right no-repeat}.image-align-left-label{background:url(../images/align-left.png) center right no-repeat}.image-align-center-label{background:url(../images/align-center.png) center right no-repeat}.image-align-right-label{background:url(../images/align-right.png) center right no-repeat}tr.image-size td{width:460px}tr.image-size div.image-size-item{margin:0 0 5px}#gallery-form .progress,#library-form .progress,.describe.startclosed,.describe.startopen,.insert-gallery{display:none}.media-item .thumbnail{max-width:128px;max-height:128px}thead.media-item-info tr{background-color:transparent}.form-table thead.media-item-info{border:8px solid #fff}abbr.required{text-decoration:none;border:none}.describe label{display:inline}.describe td.error{padding:2px 8px}.describe td.A1{width:132px}.describe input[type=text],.describe textarea{width:460px;border-width:1px;border-style:solid}#media-upload p.ml-submit{padding:1em 0}#media-upload label.help,#media-upload p.help{font-family:sans-serif;font-style:italic;font-weight:400}#media-upload .ui-sortable .media-item{cursor:move}#media-upload tr.image-size{margin-bottom:1em;height:3em}#media-upload #filter{width:623px}#media-upload #filter .subsubsub{margin:8px 0}#filter .tablenav select{border-style:solid;border-width:1px;padding:2px;vertical-align:top;width:auto}#media-upload .del-attachment{display:none;margin:5px 0}.menu_order{float:left;font-size:11px;margin:8px 10px 0}.menu_order_input{border:1px solid #ddd;font-size:10px;padding:1px;width:23px}.ui-sortable-helper{background-color:#fff;border:1px solid #aaa;opacity:.6;filter:alpha(opacity=60)}#media-upload th.order-head{width:20%;text-align:center}#media-upload th.actions-head{width:25%;text-align:center}#media-upload a.wp-post-thumbnail{margin:0 20px}#media-upload .widefat{border-style:solid solid none}.sorthelper{height:37px;width:623px;display:block}#gallery-settings th.label{width:160px}#gallery-settings #basic th.label{padding:5px 0 5px 5px}#gallery-settings .title{clear:both;padding:0 0 3px;font-size:1.6em;border-bottom:1px solid #DADADA}h3.media-title{font-size:1.6em}h4.media-sub-title{border-bottom:1px solid #DADADA;font-size:1.3em;margin:12px;padding:0 0 3px}#gallery-settings .title,h3.media-title,h4.media-sub-title{font-family:Georgia,"Times New Roman",Times,serif;font-weight:400;color:#5A5A5A}#gallery-settings .describe td{vertical-align:middle;height:3em}#gallery-settings .describe th.label{padding-top:.5em;text-align:right}#gallery-settings .describe{padding:5px;width:100%;clear:both;cursor:default;background:#fff}#gallery-settings .describe select{width:15em}#gallery-settings .describe select option,#gallery-settings .describe td{padding:0}#gallery-settings label,#gallery-settings legend{font-size:13px;color:#464646;margin-left:15px}#gallery-settings .align .field label{margin:0 3px 0 1em}#gallery-settings p.ml-submit{border-top:1px solid #dfdfdf}#gallery-settings select#columns{width:6em}#sort-buttons{font-size:.8em;margin:3px 0 -8px 25px;text-align:left;max-width:625px}#sort-buttons a{text-decoration:none}#sort-buttons #asc,#sort-buttons #showall{padding-right:5px}#sort-buttons span{margin-left:25px}p.media-types{padding:1em}tr.not-image{display:none}table.not-image tr.not-image{display:table-row}table.not-image tr.image-only{display:none}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.image-align-none-label{background-image:url(../images/align-none-2x.png?ver=20120916);-webkit-background-size:21px 15px;background-size:21px 15px}.image-align-left-label{background-image:url(../images/align-left-2x.png?ver=20120916);-webkit-background-size:22px 15px;background-size:22px 15px}.image-align-center-label{background-image:url(../images/align-center-2x.png?ver=20120916);-webkit-background-size:21px 15px;background-size:21px 15px}.image-align-right-label{background-image:url(../images/align-right-2x.png?ver=20120916);-webkit-background-size:22px 15px;background-size:22px 15px}}
\ No newline at end of file
diff --git a/wp-admin/css/deprecated-media.css b/wp-admin/css/deprecated-media.css
new file mode 100644
index 0000000..ee7c08f
--- /dev/null
+++ b/wp-admin/css/deprecated-media.css
@@ -0,0 +1,371 @@
+/* Styles for the media library iframe (not used on the Library screen) */
+
+div#media-upload-header {
+ margin: 0;
+ padding: 5px 5px 0;
+ font-weight: bold;
+ position: relative;
+ border-bottom: 1px solid #dfdfdf;
+ background: #f9f9f9;
+}
+
+body#media-upload ul#sidemenu {
+ font-weight: normal;
+ margin: 0 5px;
+ left: 0;
+ bottom: -1px;
+ float: none;
+ overflow: hidden;
+}
+
+#media-upload:after { /* clearfix */
+ content: "";
+ display: table;
+ clear: both;
+}
+
+#media-upload .slidetoggle {
+ border-top-color: #dfdfdf;
+}
+
+#media-upload input[type="radio"] {
+ padding: 0;
+}
+
+form {
+ margin: 1em;
+}
+
+#search-filter {
+ text-align: right;
+}
+
+th {
+ position: relative;
+}
+
+.media-upload-form label.form-help, td.help {
+ font-family: sans-serif;
+ font-style: italic;
+ font-weight: normal;
+}
+
+.media-upload-form p.help {
+ margin: 0;
+ padding: 0;
+}
+
+.media-upload-form fieldset {
+ width: 100%;
+ border: none;
+ text-align: justify;
+ margin: 0 0 1em 0;
+ padding: 0;
+}
+
+/* specific to the image upload form */
+
+.image-align-none-label {
+ background: url(../images/align-none.png) no-repeat center left;
+}
+
+.image-align-left-label {
+ background: url(../images/align-left.png) no-repeat center left;
+}
+
+.image-align-center-label {
+ background: url(../images/align-center.png) no-repeat center left;
+}
+
+.image-align-right-label {
+ background: url(../images/align-right.png) no-repeat center left;
+}
+
+tr.image-size td {
+ width: 460px;
+}
+
+tr.image-size div.image-size-item {
+ margin: 0 0 5px;
+}
+
+#library-form .progress,
+#gallery-form .progress,
+.insert-gallery,
+.describe.startopen,
+.describe.startclosed {
+ display: none;
+}
+
+.media-item .thumbnail {
+ max-width: 128px;
+ max-height: 128px;
+}
+
+thead.media-item-info tr {
+ background-color: transparent;
+}
+
+.form-table thead.media-item-info {
+ border: 8px solid #fff;
+}
+
+abbr.required {
+ text-decoration: none;
+ border: none;
+}
+
+.describe label {
+ display: inline;
+}
+
+.describe td.error {
+ padding: 2px 8px;
+}
+
+.describe td.A1 {
+ width: 132px;
+}
+
+.describe input[type="text"],
+.describe textarea {
+ width: 460px;
+ border-width: 1px;
+ border-style: solid;
+}
+
+/* Specific to Uploader */
+
+#media-upload p.ml-submit {
+ padding: 1em 0;
+}
+
+#media-upload p.help,
+#media-upload label.help {
+ font-family: sans-serif;
+ font-style: italic;
+ font-weight: normal;
+}
+
+#media-upload .ui-sortable .media-item {
+ cursor: move;
+}
+
+#media-upload tr.image-size {
+ margin-bottom: 1em;
+ height: 3em;
+}
+
+#media-upload #filter {
+ width: 623px;
+}
+
+#media-upload #filter .subsubsub {
+ margin: 8px 0;
+}
+
+#filter .tablenav select {
+ border-style: solid;
+ border-width: 1px;
+ padding: 2px;
+ vertical-align: top;
+ width: auto;
+}
+
+#media-upload .del-attachment {
+ display: none;
+ margin: 5px 0;
+}
+
+.menu_order {
+ float: right;
+ font-size: 11px;
+ margin: 8px 10px 0;
+}
+
+.menu_order_input {
+ border: 1px solid #ddd;
+ font-size: 10px;
+ padding: 1px;
+ width: 23px;
+}
+
+.ui-sortable-helper {
+ background-color: #fff;
+ border: 1px solid #aaa;
+ opacity: 0.6;
+ filter: alpha(opacity=60);
+}
+
+#media-upload th.order-head {
+ width: 20%;
+ text-align: center;
+}
+
+#media-upload th.actions-head {
+ width: 25%;
+ text-align: center;
+}
+
+#media-upload a.wp-post-thumbnail {
+ margin: 0 20px;
+}
+
+#media-upload .widefat {
+ border-style: solid solid none;
+}
+
+.sorthelper {
+ height: 37px;
+ width: 623px;
+ display: block;
+}
+
+#gallery-settings th.label {
+ width: 160px;
+}
+
+#gallery-settings #basic th.label {
+ padding: 5px 5px 5px 0;
+}
+
+#gallery-settings .title {
+ clear: both;
+ padding: 0 0 3px;
+ font-size: 1.6em;
+ border-bottom: 1px solid #DADADA;
+}
+
+h3.media-title {
+ font-size: 1.6em;
+}
+
+h4.media-sub-title {
+ border-bottom: 1px solid #DADADA;
+ font-size: 1.3em;
+ margin: 12px;
+ padding: 0 0 3px;
+}
+
+#gallery-settings .title,
+h3.media-title,
+h4.media-sub-title {
+ font-family: Georgia,"Times New Roman",Times,serif;
+ font-weight: normal;
+ color: #5A5A5A;
+}
+
+#gallery-settings .describe td {
+ vertical-align: middle;
+ height: 3em;
+}
+
+#gallery-settings .describe th.label {
+ padding-top: .5em;
+ text-align: left;
+}
+
+#gallery-settings .describe {
+ padding: 5px;
+ width: 100%;
+ clear: both;
+ cursor: default;
+ background: #fff;
+}
+
+#gallery-settings .describe select {
+ width: 15em;
+}
+
+#gallery-settings .describe select option,
+#gallery-settings .describe td {
+ padding: 0;
+}
+
+#gallery-settings label,
+#gallery-settings legend {
+ font-size: 13px;
+ color: #464646;
+ margin-right: 15px;
+}
+
+#gallery-settings .align .field label {
+ margin: 0 1em 0 3px;
+}
+
+#gallery-settings p.ml-submit {
+ border-top: 1px solid #dfdfdf;
+}
+
+#gallery-settings select#columns {
+ width: 6em;
+}
+
+#sort-buttons {
+ font-size: 0.8em;
+ margin: 3px 25px -8px 0;
+ text-align: right;
+ max-width: 625px;
+}
+
+#sort-buttons a {
+ text-decoration: none;
+}
+
+#sort-buttons #asc,
+#sort-buttons #showall {
+ padding-left: 5px;
+}
+
+#sort-buttons span {
+ margin-right: 25px;
+}
+
+p.media-types {
+ padding: 1em;
+}
+
+tr.not-image {
+ display: none;
+}
+
+table.not-image tr.not-image {
+ display: table-row;
+}
+
+table.not-image tr.image-only {
+ display: none;
+}
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+
+ .image-align-none-label {
+ background-image: url(../images/align-none-2x.png?ver=20120916);
+ -webkit-background-size: 21px 15px;
+ background-size: 21px 15px;
+ }
+
+ .image-align-left-label {
+ background-image: url(../images/align-left-2x.png?ver=20120916);
+ -webkit-background-size: 22px 15px;
+ background-size: 22px 15px;
+ }
+
+ .image-align-center-label {
+ background-image: url(../images/align-center-2x.png?ver=20120916);
+ -webkit-background-size: 21px 15px;
+ background-size: 21px 15px;
+ }
+
+ .image-align-right-label {
+ background-image: url(../images/align-right-2x.png?ver=20120916);
+ -webkit-background-size: 22px 15px;
+ background-size: 22px 15px;
+ }
+}
diff --git a/wp-admin/css/deprecated-media.min.css b/wp-admin/css/deprecated-media.min.css
new file mode 100644
index 0000000..556a70e
--- /dev/null
+++ b/wp-admin/css/deprecated-media.min.css
@@ -0,0 +1 @@
+div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:700;position:relative;border-bottom:1px solid #dfdfdf;background:#f9f9f9}body#media-upload ul#sidemenu{font-weight:400;margin:0 5px;left:0;bottom:-1px;float:none;overflow:hidden}#media-upload:after{content:"";display:table;clear:both}#media-upload .slidetoggle{border-top-color:#dfdfdf}#media-upload input[type=radio]{padding:0}form{margin:1em}#search-filter{text-align:right}th{position:relative}.media-upload-form label.form-help,td.help{font-family:sans-serif;font-style:italic;font-weight:400}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:none;text-align:justify;margin:0 0 1em;padding:0}.image-align-none-label{background:url(../images/align-none.png) center left no-repeat}.image-align-left-label{background:url(../images/align-left.png) center left no-repeat}.image-align-center-label{background:url(../images/align-center.png) center left no-repeat}.image-align-right-label{background:url(../images/align-right.png) center left no-repeat}tr.image-size td{width:460px}tr.image-size div.image-size-item{margin:0 0 5px}#gallery-form .progress,#library-form .progress,.describe.startclosed,.describe.startopen,.insert-gallery{display:none}.media-item .thumbnail{max-width:128px;max-height:128px}thead.media-item-info tr{background-color:transparent}.form-table thead.media-item-info{border:8px solid #fff}abbr.required{text-decoration:none;border:none}.describe label{display:inline}.describe td.error{padding:2px 8px}.describe td.A1{width:132px}.describe input[type=text],.describe textarea{width:460px;border-width:1px;border-style:solid}#media-upload p.ml-submit{padding:1em 0}#media-upload label.help,#media-upload p.help{font-family:sans-serif;font-style:italic;font-weight:400}#media-upload .ui-sortable .media-item{cursor:move}#media-upload tr.image-size{margin-bottom:1em;height:3em}#media-upload #filter{width:623px}#media-upload #filter .subsubsub{margin:8px 0}#filter .tablenav select{border-style:solid;border-width:1px;padding:2px;vertical-align:top;width:auto}#media-upload .del-attachment{display:none;margin:5px 0}.menu_order{float:right;font-size:11px;margin:8px 10px 0}.menu_order_input{border:1px solid #ddd;font-size:10px;padding:1px;width:23px}.ui-sortable-helper{background-color:#fff;border:1px solid #aaa;opacity:.6;filter:alpha(opacity=60)}#media-upload th.order-head{width:20%;text-align:center}#media-upload th.actions-head{width:25%;text-align:center}#media-upload a.wp-post-thumbnail{margin:0 20px}#media-upload .widefat{border-style:solid solid none}.sorthelper{height:37px;width:623px;display:block}#gallery-settings th.label{width:160px}#gallery-settings #basic th.label{padding:5px 5px 5px 0}#gallery-settings .title{clear:both;padding:0 0 3px;font-size:1.6em;border-bottom:1px solid #DADADA}h3.media-title{font-size:1.6em}h4.media-sub-title{border-bottom:1px solid #DADADA;font-size:1.3em;margin:12px;padding:0 0 3px}#gallery-settings .title,h3.media-title,h4.media-sub-title{font-family:Georgia,"Times New Roman",Times,serif;font-weight:400;color:#5A5A5A}#gallery-settings .describe td{vertical-align:middle;height:3em}#gallery-settings .describe th.label{padding-top:.5em;text-align:left}#gallery-settings .describe{padding:5px;width:100%;clear:both;cursor:default;background:#fff}#gallery-settings .describe select{width:15em}#gallery-settings .describe select option,#gallery-settings .describe td{padding:0}#gallery-settings label,#gallery-settings legend{font-size:13px;color:#464646;margin-right:15px}#gallery-settings .align .field label{margin:0 1em 0 3px}#gallery-settings p.ml-submit{border-top:1px solid #dfdfdf}#gallery-settings select#columns{width:6em}#sort-buttons{font-size:.8em;margin:3px 25px -8px 0;text-align:right;max-width:625px}#sort-buttons a{text-decoration:none}#sort-buttons #asc,#sort-buttons #showall{padding-left:5px}#sort-buttons span{margin-right:25px}p.media-types{padding:1em}tr.not-image{display:none}table.not-image tr.not-image{display:table-row}table.not-image tr.image-only{display:none}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.image-align-none-label{background-image:url(../images/align-none-2x.png?ver=20120916);-webkit-background-size:21px 15px;background-size:21px 15px}.image-align-left-label{background-image:url(../images/align-left-2x.png?ver=20120916);-webkit-background-size:22px 15px;background-size:22px 15px}.image-align-center-label{background-image:url(../images/align-center-2x.png?ver=20120916);-webkit-background-size:21px 15px;background-size:21px 15px}.image-align-right-label{background-image:url(../images/align-right-2x.png?ver=20120916);-webkit-background-size:22px 15px;background-size:22px 15px}}
\ No newline at end of file
diff --git a/wp-admin/css/edit-rtl.css b/wp-admin/css/edit-rtl.css
new file mode 100644
index 0000000..bbe0fab
--- /dev/null
+++ b/wp-admin/css/edit-rtl.css
@@ -0,0 +1,1617 @@
+#poststuff {
+ padding-top: 10px;
+ min-width: 763px;
+}
+
+#poststuff #post-body {
+ padding: 0;
+}
+
+#poststuff .postbox-container {
+ width: 100%;
+}
+
+#poststuff #post-body.columns-2 {
+ margin-left: 300px;
+}
+
+/*------------------------------------------------------------------------------
+ 11.0 - Write/Edit Post Screen
+------------------------------------------------------------------------------*/
+
+#show-comments {
+ overflow: hidden;
+}
+
+#save-action .spinner,
+#show-comments a,
+#show-comments .spinner {
+ float: right;
+}
+
+#lost-connection-notice .spinner {
+ display: block;
+ float: right;
+ margin: 0 0 0 5px;
+}
+
+#titlediv {
+ position: relative;
+}
+
+#titlediv label {
+ cursor: text;
+}
+
+#titlediv div.inside {
+ margin: 0;
+}
+
+#poststuff #titlewrap {
+ border: 0;
+ padding: 0;
+}
+
+#titlediv #title {
+ padding: 3px 8px;
+ font-size: 1.7em;
+ line-height: 100%;
+ height: 1.7em;
+ width: 100%;
+ outline: none;
+ margin: 0;
+ background-color: #fff;
+}
+
+#titlediv #title-prompt-text {
+ color: #777;
+ position: absolute;
+ font-size: 1.7em;
+ padding: 11px 10px;
+}
+
+#wp-fullscreen-save .fs-saved {
+ color: #999;
+ float: left;
+ margin-top: 4px;
+}
+
+#poststuff .inside-submitbox,
+#side-sortables .inside-submitbox {
+ margin: 0 3px;
+ font-size: 11px;
+}
+
+input#link_description,
+input#link_url {
+ width: 98%;
+}
+
+#pending {
+ background: 0 none;
+ border: 0 none;
+ padding: 0;
+ font-size: 11px;
+ margin-top: -1px;
+}
+
+#edit-slug-box {
+ line-height: 24px;
+ min-height: 25px; /* Yes, line-height + 1 */
+ margin-top: 5px;
+ padding: 0 10px;
+ color: #666;
+}
+
+#edit-slug-box .cancel {
+ margin-left: 10px;
+ font-size: 11px;
+}
+
+#editable-post-name-full {
+ display: none;
+}
+
+#editable-post-name {
+ background-color: #fffbcc;
+}
+
+#editable-post-name input {
+ font-size: 13px;
+ height: 22px;
+ margin: 0;
+ width: 16em;
+}
+
+.postarea h3 label {
+ float: right;
+}
+
+.submitbox .submit {
+ text-align: right;
+ padding: 12px 10px 10px;
+ font-size: 11px;
+ background-color: #464646;
+ color: #ccc;
+}
+
+.submitbox .submitdelete {
+ text-decoration: none;
+ padding: 1px 2px;
+}
+
+/* @todo: do we really need this? word on the street is we don't and this
+stray rule may actually be compensated for elsewhere. */
+#normal-sortables .submitbox .submitdelete:hover {
+ color: #000;
+ background-color: #f00;
+ border-bottom-color: #f00;
+}
+
+.submitbox .submit a:hover {
+ text-decoration: underline;
+}
+
+.submitbox .submit input {
+ margin-bottom: 8px;
+ margin-left: 4px;
+ padding: 6px;
+}
+
+.inside-submitbox #post_status {
+ margin: 2px -2px 2px 0;
+}
+
+#post-status-select {
+ margin-top: 3px;
+}
+
+/* Post Screen */
+#post-body #normal-sortables {
+ min-height: 50px;
+}
+
+.postbox {
+ position: relative;
+ min-width: 255px;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ background: #fff;
+}
+
+#trackback_url {
+ width: 99%;
+}
+
+#normal-sortables .postbox .submit {
+ background: transparent none;
+ border: 0 none;
+ float: left;
+ padding: 0 12px;
+ margin:0;
+}
+
+.category-add input[type="text"],
+.category-add select {
+ width: 100%;
+ max-width: 260px;
+ vertical-align: baseline;
+}
+
+#side-sortables .category-add input[type="text"],
+#side-sortables .category-add select {
+ margin: 0 0 1em;
+}
+
+ul.category-tabs li,
+#side-sortables .add-menu-item-tabs li,
+.wp-tab-bar li {
+ display: inline;
+ line-height: 1.35em;
+}
+
+.no-js .category-tabs li.hide-if-no-js {
+ display: none;
+}
+
+.category-tabs a,
+#side-sortables .add-menu-item-tabs a,
+.wp-tab-bar a {
+ text-decoration: none;
+}
+
+/* @todo: do these really need to be so specific? */
+#side-sortables .category-tabs .tabs a,
+#side-sortables .add-menu-item-tabs .tabs a,
+.wp-tab-bar .wp-tab-active a,
+#post-body ul.category-tabs li.tabs a,
+#post-body ul.add-menu-item-tabs li.tabs a {
+ color: #333;
+}
+
+.category-tabs {
+ margin: 8px 0 5px;
+}
+
+#category-adder h4 {
+ margin: 10px 0;
+}
+
+#side-sortables .add-menu-item-tabs,
+.wp-tab-bar {
+ margin-bottom: 3px;
+}
+
+#normal-sortables .postbox #replyrow .submit {
+ float: none;
+ margin: 0;
+ padding: 0 7px 5px;
+}
+
+#side-sortables .submitbox .submit input,
+#side-sortables .submitbox .submit .preview,
+#side-sortables .submitbox .submit a.preview:hover {
+ border: 0 none;
+}
+
+#side-sortables .inside-submitbox .insidebox,
+.stuffbox .insidebox {
+ margin: 11px 0;
+}
+
+/* @todo: make this a more generic class */
+ul.category-tabs,
+ul.add-menu-item-tabs,
+ul.wp-tab-bar {
+ margin-top: 12px;
+}
+
+ul.category-tabs li,
+ul.add-menu-item-tabs li {
+ border: solid 1px transparent;
+ position: relative;
+}
+
+ul.category-tabs li.tabs,
+ul.add-menu-item-tabs li.tabs,
+.wp-tab-active {
+ border: 1px solid #dfdfdf;
+ border-bottom-color: #fdfdfd;
+ background-color: #fdfdfd;
+}
+
+ul.category-tabs li,
+ul.add-menu-item-tabs li,
+ul.wp-tab-bar li {
+ padding: 3px 5px 5px;
+}
+
+#postimagediv .inside img {
+ max-width: 100%;
+ height: auto;
+ width: auto;
+}
+
+form#tags-filter {
+ position: relative;
+}
+
+/* Edit posts */
+td.post-title strong,
+td.plugin-title strong {
+ display: block;
+ margin-bottom: .2em;
+ font-size: 14px;
+}
+
+td.post-title p,
+td.plugin-title p {
+ margin: 6px 0;
+}
+
+/* Global classes */
+.wp-hidden-children .wp-hidden-child,
+.ui-tabs-hide {
+ display: none;
+}
+
+#post-body .tagsdiv #newtag {
+ margin-left: 5px;
+ width: 16em;
+}
+
+#side-sortables input#post_password {
+ width: 94%
+}
+
+#side-sortables .tagsdiv #newtag {
+ width: 68%;
+}
+
+#post-status-info {
+ width: 100%;
+ border-spacing: 0;
+ border: 1px solid #e5e5e5;
+ border-top: none;
+ background-color: #f7f7f7;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ z-index: 999;
+}
+
+#post-status-info td {
+ font-size: 12px;
+}
+
+.autosave-info {
+ padding: 2px 10px;
+ text-align: left;
+}
+
+#editorcontent #post-status-info {
+ border: none;
+}
+
+#content-resize-handle {
+ background: transparent url(../images/resize.gif) no-repeat scroll left bottom;
+ width: 12px;
+ cursor: row-resize;
+}
+
+.rtl #content-resize-handle {
+ background: transparent url(../images/resize-rtl.gif) no-repeat scroll right bottom;
+}
+
+.wp-editor-expand #content-resize-handle {
+ display: none;
+}
+
+#postdivrich #content {
+ resize: none;
+}
+
+#wp-word-count {
+ display: block;
+ padding: 2px 10px;
+}
+
+#wp-content-editor-container {
+ position: relative;
+}
+
+#content-textarea-clone {
+ z-index: -1;
+ position: absolute;
+ top: 0;
+ visibility: hidden;
+ overflow: hidden;
+ max-width: 100%;
+ border: 1px solid transparent;
+}
+
+.wp-fullscreen-wrap #content-textarea-clone {
+ display: none;
+}
+
+/* editor-expand.js override */
+.wp-fullscreen-wrap {
+ padding-top: 0 !important;
+}
+
+.wp-fullscreen-wrap .wp-editor-area {
+ margin-top: 0 !important;
+}
+
+.wp-fullscreen-wrap .mce-edit-area {
+ padding-top: 0 !important;
+}
+/* end editor-expand.js override */
+
+.wp-editor-expand #wp-content-editor-tools {
+ z-index: 1000;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.wp-editor-expand #wp-content-editor-container {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ margin-top: -1px;
+}
+
+.wp-editor-expand #wp-content-editor-container {
+ border-bottom: 0 none;
+}
+
+.wp-editor-expand div.mce-statusbar {
+ z-index: 1;
+}
+
+.wp-editor-expand #post-status-info {
+ border-top: 1px solid #e5e5e5;
+}
+
+.wp-editor-expand div.mce-toolbar-grp {
+ z-index: 999;
+}
+
+/* TinyMCE native fullscreen mode override */
+.mce-fullscreen #wp-content-wrap .mce-menubar,
+.mce-fullscreen #wp-content-wrap .mce-toolbar-grp,
+.mce-fullscreen #wp-content-wrap .mce-edit-area,
+.mce-fullscreen #wp-content-wrap .mce-statusbar {
+ position: static !important;
+ width: auto !important;
+ padding: 0 !important;
+}
+
+.mce-fullscreen #wp-content-wrap .mce-statusbar {
+ visibility: visible !important;
+}
+
+.post-php.mce-fullscreen #wpadminbar,
+.mce-fullscreen #wp-content-wrap .mce-wp-dfw {
+ display: none;
+}
+/* End TinyMCE native fullscreen mode override */
+
+#wp-content-editor-tools {
+ background-color: #f1f1f1;
+ padding-top: 20px;
+}
+
+#poststuff #post-body.columns-2 #side-sortables {
+ width: 280px;
+}
+
+#timestampdiv select {
+ height: 21px;
+ line-height: 14px;
+ padding: 0;
+ vertical-align: top;
+ font-size: 12px;
+}
+
+#aa, #jj, #hh, #mn {
+ padding: 1px;
+ font-size: 12px;
+}
+
+#jj, #hh, #mn {
+ width: 2em;
+}
+
+#aa {
+ width: 3.4em;
+}
+
+.curtime #timestamp {
+ padding: 2px 0 1px 0;
+ display: inline !important;
+ height: auto !important;
+}
+
+#misc-publishing-actions label[for="post_status"]:before,
+#post-body #visibility:before,
+.curtime #timestamp:before,
+#post-body .misc-pub-revisions:before,
+span.wp-media-buttons-icon:before {
+ color: #888;
+}
+
+#post-body #visibility:before,
+.curtime #timestamp:before,
+#post-body .misc-pub-revisions:before {
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0 0 0 2px;
+ top: 0;
+ right: -1px;
+ position: relative;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+}
+
+#post-body #visibility:before {
+ content: '\f177';
+}
+
+.curtime #timestamp:before {
+ content: '\f145';
+ top: -1px;
+}
+
+#post-body .misc-pub-revisions:before {
+ content: '\f321';
+}
+
+#timestampdiv {
+ padding-top: 5px;
+ line-height: 23px;
+}
+
+#timestampdiv p {
+ margin: 8px 0 6px;
+}
+
+#timestampdiv input {
+ border-width: 1px;
+ border-style: solid;
+}
+
+.notification-dialog {
+ position: fixed;
+ top: 30%;
+ right: 50%;
+ width: 450px;
+ margin-right: -225px;
+ background: #fff;
+ -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
+ box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
+ line-height: 1.5;
+ z-index: 1000005;
+}
+
+.notification-dialog-background {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+ background: #000;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ z-index: 1000000;
+}
+
+#post-lock-dialog .post-locked-message,
+#post-lock-dialog .post-taken-over {
+ margin: 25px;
+}
+
+#post-lock-dialog .post-locked-message a.button {
+ margin-left: 10px;
+}
+
+#post-lock-dialog .post-locked-avatar {
+ float: right;
+ margin: 0 0 20px 20px;
+}
+
+#post-lock-dialog .wp-tab-first {
+ outline: 0;
+}
+
+#post-lock-dialog .locked-saving img {
+ float: right;
+ margin-left: 3px;
+}
+
+#post-lock-dialog.saving .locked-saving,
+#post-lock-dialog.saved .locked-saved {
+ display: inline;
+}
+
+#excerpt,
+.attachmentlinks {
+ margin: 0;
+ height: 4em;
+ width: 98%;
+}
+
+.tagchecklist {
+ margin-right: 14px;
+ font-size: 12px;
+ overflow: auto;
+}
+
+.tagchecklist br {
+ display: none;
+}
+
+.tagchecklist strong {
+ margin-right: -8px;
+ position: absolute;
+}
+
+.tagchecklist span {
+ margin-left: 25px;
+ display: block;
+ float: right;
+ font-size: 13px;
+ line-height: 1.8em;
+ white-space: nowrap;
+ cursor: default;
+}
+
+.tagchecklist span a {
+ margin: 1px -17px 0 0;
+ cursor: pointer;
+ width: 20px;
+ height: 20px;
+ display: block;
+ float: right;
+ text-indent: 0;
+ overflow: hidden;
+ position: absolute;
+}
+
+#poststuff h2 {
+ margin-top: 20px;
+ font-size: 1.5em;
+ margin-bottom: 15px;
+ padding: 0 0 3px;
+ clear: right;
+}
+
+#poststuff h3 {
+ font-size: 14px;
+ padding: 8px 12px;
+ margin: 0;
+ line-height: 1.4;
+}
+
+#poststuff .inside {
+ margin: 6px 0 0 0;
+}
+
+#poststuff .inside #parent_id,
+#poststuff .inside #page_template {
+ max-width: 100%;
+}
+
+#poststuff .inside label.spam,
+#poststuff .inside label.deleted {
+ color: red;
+}
+
+#poststuff .inside label.waiting {
+ color: orange;
+}
+
+#poststuff .inside label.approved {
+ color: green;
+}
+
+.ie8 #poststuff .inside #parent_id,
+.ie8 #poststuff .inside #page_template {
+ width: 250px;
+}
+
+#post-visibility-select {
+ line-height: 1.5em;
+ margin-top: 3px;
+}
+
+#poststuff #submitdiv .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#post-body-content,
+.edit-form-section {
+ margin-bottom: 20px;
+}
+
+/*------------------------------------------------------------------------------
+ 11.1 - Custom Fields
+------------------------------------------------------------------------------*/
+
+#postcustomstuff thead th {
+ padding: 5px 8px 8px;
+ background-color: #f1f1f1;
+}
+
+#postcustom #postcustomstuff .submit {
+ border: 0 none;
+ float: none;
+ padding: 0 8px 8px;
+}
+
+#side-sortables #postcustom #postcustomstuff .submit {
+ margin: 0;
+ padding: 0;
+}
+
+#side-sortables #postcustom #postcustomstuff #the-list textarea {
+ height: 85px;
+}
+
+#side-sortables #postcustom #postcustomstuff td.left input,
+#side-sortables #postcustom #postcustomstuff td.left select,
+#side-sortables #postcustomstuff #newmetaleft a {
+ margin: 3px 3px 0;
+}
+
+#postcustomstuff table {
+ margin: 0;
+ width: 100%;
+ border: 1px solid #dfdfdf;
+ border-spacing: 0;
+ background-color: #f9f9f9;
+}
+
+#postcustomstuff tr {
+ vertical-align: top;
+}
+
+#postcustomstuff table input,
+#postcustomstuff table select,
+#postcustomstuff table textarea {
+ width: 96%;
+ margin: 8px;
+}
+
+#side-sortables #postcustomstuff table input,
+#side-sortables #postcustomstuff table select,
+#side-sortables #postcustomstuff table textarea {
+ margin: 3px;
+}
+
+#postcustomstuff th.left,
+#postcustomstuff td.left {
+ width: 38%;
+}
+
+#postcustomstuff .submit input {
+ margin: 0;
+ width: auto;
+}
+
+#postcustomstuff #newmetaleft a {
+ display: inline-block;
+ margin: 0 8px 8px;
+ text-decoration: none;
+}
+
+.no-js #postcustomstuff #enternew {
+ display: none;
+}
+
+#post-body-content .compat-attachment-fields {
+ margin-bottom: 20px;
+}
+
+.compat-attachment-fields th {
+ padding-top: 5px;
+ padding-left: 10px;
+}
+
+/*------------------------------------------------------------------------------
+ 11.3 - Featured Images
+------------------------------------------------------------------------------*/
+
+#select-featured-image {
+ padding: 4px 0;
+ overflow: hidden;
+}
+
+#select-featured-image img {
+ max-width: 100%;
+ height: auto;
+ margin-bottom: 10px;
+}
+
+#select-featured-image a {
+ float: right;
+ clear: both;
+}
+
+#select-featured-image .remove {
+ display: none;
+ margin-top: 10px;
+}
+
+.js #select-featured-image.has-featured-image .remove {
+ display: inline-block;
+}
+
+.no-js #select-featured-image .choose {
+ display: none;
+}
+
+/*------------------------------------------------------------------------------
+ 11.4 - Post formats
+------------------------------------------------------------------------------*/
+
+.post-state-format {
+ overflow: hidden;
+ display: inline-block;
+ vertical-align: middle;
+ height: 20px;
+ width: 20px;
+ margin-left: 5px;
+ margin-top: -4px;
+}
+
+.post-state-format:before {
+ display: block;
+ height: 20px;
+ width: 20px;
+ font: normal 20px/1 'dashicons' !important;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.post-state-format:before,
+.post-format-icon:before {
+ color: #ddd;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+a.post-state-format:hover:before,
+a.post-format-icon:hover:before {
+ color: #2ea2cc;
+}
+
+#post-formats-select {
+ line-height: 2em;
+}
+
+#post-formats-select .post-format-icon:before {
+ top: 5px;
+}
+
+input.post-format {
+ margin-top: 1px;
+}
+
+label.post-format-icon {
+ margin-right: 0px;
+ padding: 2px 0px 2px 0;
+}
+
+.post-format-icon:before {
+ position: relative;
+ display: inline-block;
+ margin-left: 7px;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.post-state-format.post-format-standard:before,
+.post-format-icon.post-format-standard:before,
+a.post-state-format.format-standard:before {
+ content: '\f109';
+}
+
+.post-state-format.post-format-image:before,
+.post-format-icon.post-format-image:before,
+a.post-state-format.format-image:before {
+ content: '\f128';
+}
+
+.post-state-format.post-format-gallery:before,
+.post-format-icon.post-format-gallery:before,
+a.post-state-format.format-gallery:before {
+ content: '\f161';
+}
+
+.post-state-format.post-format-audio:before,
+.post-format-icon.post-format-audio:before,
+a.post-state-format.format-audio:before {
+ content: '\f127';
+}
+
+.post-state-format.post-format-video:before,
+.post-format-icon.post-format-video:before,
+a.post-state-format.format-video:before {
+ content: '\f126';
+}
+
+.post-state-format.post-format-chat:before,
+.post-format-icon.post-format-chat:before,
+a.post-state-format.format-chat:before {
+ content: '\f125';
+}
+
+.post-state-format.post-format-status:before,
+.post-format-icon.post-format-status:before,
+a.post-state-format.format-status:before {
+ content: '\f130';
+}
+
+.post-state-format.post-format-aside:before,
+.post-format-icon.post-format-aside:before,
+a.post-state-format.format-aside:before {
+ content: '\f123';
+}
+
+.post-state-format.post-format-quote:before,
+.post-format-icon.post-format-quote:before,
+a.post-state-format.format-quote:before {
+ content: '\f122';
+}
+
+.post-state-format.post-format-link:before,
+.post-format-icon.post-format-link:before,
+a.post-state-format.format-link:before {
+ content: '\f103';
+}
+
+/*------------------------------------------------------------------------------
+ 12.0 - Categories
+------------------------------------------------------------------------------*/
+
+.category-adder {
+ margin-right: 120px;
+ padding: 4px 0;
+}
+
+.category-adder h4 {
+ margin: 0 0 8px;
+}
+
+#side-sortables .category-adder {
+ margin: 0;
+}
+
+.wp-tab-panel,
+.categorydiv div.tabs-panel,
+.customlinkdiv div.tabs-panel,
+.posttypediv div.tabs-panel,
+.taxonomydiv div.tabs-panel {
+ min-height: 42px;
+ max-height: 200px;
+ overflow: auto;
+ padding: 0 0.9em;
+ border: solid 1px #dfdfdf;
+ background-color: #fdfdfd;
+}
+
+div.tabs-panel-active {
+ display:block;
+}
+
+div.tabs-panel-inactive {
+ display:none;
+}
+
+#front-page-warning,
+#front-static-pages ul,
+ul.export-filters,
+.inline-editor ul.cat-checklist ul,
+.categorydiv ul.categorychecklist ul,
+.customlinkdiv ul.categorychecklist ul,
+.posttypediv ul.categorychecklist ul,
+.taxonomydiv ul.categorychecklist ul {
+ margin-right: 18px;
+}
+
+ul.categorychecklist li {
+ margin: 0;
+ padding: 0;
+ line-height: 22px;
+ word-wrap: break-word;
+}
+
+.categorydiv .tabs-panel,
+.customlinkdiv .tabs-panel,
+.posttypediv .tabs-panel,
+.taxonomydiv .tabs-panel {
+ border-width: 3px;
+ border-style: solid;
+}
+
+.form-wrap p,
+.form-wrap label {
+ font-size: 11px;
+}
+
+.form-wrap label {
+ display: block;
+ padding: 2px;
+ font-size: 12px;
+}
+
+.form-field input[type="text"],
+.form-field input[type="password"],
+.form-field input[type="email"],
+.form-field input[type="number"],
+.form-field input[type="search"],
+.form-field input[type="tel"],
+.form-field input[type="url"],
+.form-field textarea {
+ border-style: solid;
+ border-width: 1px;
+ width: 95%;
+}
+
+p.description,
+.form-wrap p {
+ margin: 2px 0 5px;
+ color: #666;
+}
+
+p.help,
+p.description,
+span.description,
+.form-wrap p {
+ font-size: 13px;
+ font-style: italic;
+}
+
+.form-wrap .form-field {
+ margin: 0 0 10px;
+ padding: 8px 0;
+}
+
+.form-wrap .form-field #parent {
+ max-width: 100%;
+}
+
+.col-wrap h3 {
+ margin: 12px 0;
+ font-size: 1.1em;
+}
+
+.col-wrap p.submit {
+ margin-top: -10px;
+}
+
+
+/*------------------------------------------------------------------------------
+ 13.0 - Tags
+------------------------------------------------------------------------------*/
+
+.tagsdiv {
+ margin-top: -8px;
+}
+
+#poststuff .taghint {
+ color: #aaa;
+ margin: 15px 12px -24px 0;
+}
+
+#poststuff .tagsdiv .howto {
+ margin: 0 0 6px 0;
+}
+
+.ajaxtag .newtag {
+ position: relative;
+}
+
+.tagsdiv .newtag {
+ width: 180px;
+}
+
+.tagsdiv .the-tags {
+ display: block;
+ height: 60px;
+ margin: 0 auto;
+ overflow: auto;
+ width: 260px;
+}
+
+#post-body-content .tagsdiv .the-tags {
+ margin: 0 5px;
+}
+
+/* tag hints */
+.taghint {
+ color: #aaa;
+ margin: -17px 7px 0 0;
+ visibility: hidden;
+}
+
+input.newtag ~ div.taghint {
+ visibility: visible;
+}
+
+input.newtag:focus ~ div.taghint {
+ visibility: hidden;
+}
+
+p.popular-tags {
+ border: none;
+ line-height: 2em;
+ padding: 8px 12px 12px;
+ text-align: justify;
+}
+
+p.popular-tags a {
+ padding: 0 3px;
+}
+
+.tagcloud {
+ width: 97%;
+ margin: 0 0 40px;
+ text-align: justify;
+}
+
+.tagcloud h3 {
+ margin: 2px 0 12px;
+}
+
+.ac_results {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ position: absolute;
+ z-index: 10000;
+ display: none;
+ border: 1px solid #808080;
+ background-color: #fff;
+}
+
+.wp-customizer .ac_results {
+ z-index: 500000;
+}
+
+.ac_results li {
+ padding: 2px 5px;
+ white-space: nowrap;
+ color: #101010;
+ text-align: right;
+}
+
+.ac_over {
+ background-color: #f0f0b8;
+ cursor: pointer;
+}
+
+.ac_match {
+ text-decoration: underline;
+}
+
+/* Comments */
+
+.comment-php .wp-editor-area {
+ height: 200px;
+}
+
+.comment-ays {
+ margin-bottom: 0;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+}
+
+.comment-ays .alt {
+ background-color: transparent;
+}
+
+.trash-undo-inside,
+.spam-undo-inside {
+ margin: 1px 0 1px 8px;
+ line-height: 16px;
+}
+
+.spam-undo-inside .avatar,
+.trash-undo-inside .avatar {
+ height: 20px;
+ width: 20px;
+ margin-left: 8px;
+ vertical-align: middle;
+}
+
+.stuffbox .editcomment {
+ clear: none;
+}
+
+#comment-status-radio p {
+ margin: 3px 0 5px;
+}
+
+#comment-status-radio input {
+ margin: 2px 0 5px 3px;
+ vertical-align: middle;
+}
+
+#comment-status-radio label {
+ padding: 5px 0;
+}
+
+/* links tables */
+table.links-table {
+ width: 100%;
+ border-spacing: 0;
+}
+
+.links-table th {
+ font-weight: normal;
+ text-align: right;
+ vertical-align: top;
+ min-width: 80px;
+ width: 20%;
+ word-wrap: break-word;
+}
+
+.links-table th,
+.links-table td {
+ padding: 5px 0;
+}
+
+.links-table td label {
+ margin-left: 8px;
+}
+
+.links-table td input[type="text"],
+.links-table td textarea {
+ width: 100%;
+}
+
+.links-table #link_rel {
+ max-width: 280px;
+}
+
+/* DFW 2
+-------------------------------------------------------------- */
+
+#wp-content-wrap .mce-wp-dfw,
+#qt_content_dfw {
+ display: none;
+}
+
+.wp-editor-expand #wp-content-wrap .mce-wp-dfw,
+.wp-editor-expand #qt_content_dfw {
+ display: inline-block;
+}
+
+.focus-on .wrap > h2,
+.focus-on #wpfooter,
+.focus-on .postbox-container > *,
+.focus-on div.updated,
+.focus-on div.error,
+.focus-on div.notice,
+.focus-on #wp-toolbar,
+.focus-on #screen-meta-links,
+.focus-on #screen-meta {
+ opacity: 0;
+ -webkit-transition-duration: 0.6s;
+ transition-duration: 0.6s;
+ -webkit-transition-property: opacity;
+ transition-property: opacity;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+.focus-on #wp-toolbar {
+ opacity: 0.3;
+}
+
+.focus-off .wrap > h2,
+.focus-off #wpfooter,
+.focus-off .postbox-container > *,
+.focus-off div.updated,
+.focus-off div.error,
+.focus-off div.notice,
+.focus-off #wp-toolbar,
+.focus-off #screen-meta-links,
+.focus-off #screen-meta {
+ opacity: 1;
+ -webkit-transition-duration: 0.2s;
+ transition-duration: 0.2s;
+ -webkit-transition-property: opacity;
+ transition-property: opacity;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+.focus-off #wp-toolbar {
+ -webkit-transform: translate(0, 0);
+}
+
+.focus-on #adminmenuback,
+.focus-on #adminmenuwrap {
+ -webkit-transition-duration: 0.6s;
+ transition-duration: 0.6s;
+ -webkit-transition-property: -webkit-transform;
+ transition-property: transform;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+/* @noflip */
+.focus-on #adminmenuback,
+.focus-on #adminmenuwrap {
+ -webkit-transform: translateX( -100% );
+ -ms-transform: translateX( -100% );
+ transform: translateX( -100% );
+}
+
+/* @noflip */
+.rtl.focus-on #adminmenuback,
+.rtl.focus-on #adminmenuwrap {
+ -webkit-transform: translateX( 100% );
+ -ms-transform: translateX( 100% );
+ transform: translateX( 100% );
+}
+
+.focus-off #adminmenuback,
+.focus-off #adminmenuwrap {
+ -webkit-transform: translateX( 0 );
+ -ms-transform: translateX( 0 );
+ transform: translateX( 0 );
+ -webkit-transition-duration: 0.2s;
+ transition-duration: 0.2s;
+ -webkit-transition-property: -webkit-transform;
+ transition-property: transform;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ #content-resize-handle,
+ #post-body .wp_themeSkin .mceStatusbar a.mceResize {
+ background: transparent url(../images/resize-2x.gif) no-repeat scroll left bottom;
+ -webkit-background-size: 11px 11px;
+ background-size: 11px 11px;
+ }
+
+ .rtl #content-resize-handle,
+ .rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize {
+ background: transparent url(../images/resize-rtl-2x.gif) no-repeat scroll left bottom;
+ }
+}
+
+/* one column on the post write/edit screen */
+@media only screen and (max-width: 850px) {
+ #poststuff {
+ min-width: 0;
+ }
+
+ #wpbody-content #poststuff #post-body {
+ margin: 0;
+ }
+
+ #wpbody-content #post-body.columns-2 #postbox-container-1 {
+ margin-left: 0;
+ width: 100%;
+ }
+
+ #poststuff #postbox-container-1 .empty-container,
+ #poststuff #postbox-container-1 #side-sortables:empty {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+
+ #poststuff #post-body.columns-2 #side-sortables {
+ min-height: 0;
+ width: auto;
+ }
+
+ /* hide the radio buttons for column prefs */
+ .screen-layout,
+ .columns-prefs {
+ display: none;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ #post-body-content {
+ min-width: 0;
+ }
+
+ #titlediv #title-prompt-text {
+ padding: 10px 10px;
+ }
+
+ #poststuff h3 {
+ padding: 12px;
+ }
+
+ .post-format-options {
+ padding-left: 0;
+ }
+
+ .post-format-options a {
+ margin-left: 5px;
+ margin-bottom: 5px;
+ min-width: 52px;
+ }
+
+ .post-format-options .post-format-title {
+ font-size: 11px;
+ }
+
+ .post-format-options a div {
+ height: 28px;
+ width: 28px;
+ }
+
+ .post-format-options a div:before {
+ font-size: 26px !important;
+ }
+
+ /* Publish Metabox Options */
+ #post-visibility-select {
+ line-height: 280%;
+ }
+
+ .wp-core-ui .save-post-visibility,
+ .wp-core-ui .save-timestamp {
+ vertical-align: middle;
+ margin-left: 15px;
+ }
+
+ .timestamp-wrap select#mm {
+ display: block;
+ width: 100%;
+ margin-bottom: 10px;
+ }
+
+ .timestamp-wrap #jj,
+ .timestamp-wrap #aa,
+ .timestamp-wrap #hh,
+ .timestamp-wrap #mn {
+ padding: 12px 3px;
+ font-size: 14px;
+ margin-bottom: 5px;
+ width: auto;
+ text-align: center;
+ }
+
+ /* Categories Metabox */
+ ul.category-tabs {
+ margin: 30px 0 15px;
+ }
+
+ ul.category-tabs li.tabs {
+ padding: 15px;
+ }
+
+ ul.categorychecklist li {
+ margin-bottom: 15px;
+ }
+
+ ul.categorychecklist ul {
+ margin-top: 15px;
+ }
+
+ .category-add input[type=text],
+ .category-add select {
+ max-width: none;
+ margin-bottom: 15px;
+ }
+
+ /* Tags Metabox */
+ .tagsdiv .newtag {
+ width: 100%;
+ height: auto;
+ margin-bottom: 15px;
+ }
+
+ .tagchecklist {
+ margin: 25px 10px;
+ }
+
+ .tagchecklist span {
+ font-size: 16px;
+ line-height: 120%;
+ }
+
+ /* Discussion */
+ #commentstatusdiv p {
+ line-height: 2.8;
+ }
+
+ /* TinyMCE Adjustments */
+ .mceToolbar * {
+ white-space: normal !important;
+ }
+
+ .mceToolbar tr,
+ .mceToolbar td {
+ float: right !important;
+ }
+
+ .wp_themeSkin a.mceButton {
+ width: 30px;
+ height: 30px;
+ }
+
+ .wp_themeSkin .mceButton .mceIcon {
+ margin-top: 5px;
+ margin-right: 5px;
+ }
+
+ .wp_themeSkin .mceSplitButton {
+ margin-top: 1px;
+ }
+
+ .wp_themeSkin .mceSplitButton td a.mceAction {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ padding-right: 6px;
+ padding-left: 3px;
+ }
+
+ .wp_themeSkin .mceSplitButton td a.mceOpen,
+ .wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ background-position: 1px 6px;
+ }
+
+ .wp_themeSkin table.mceListBox {
+ margin: 5px;
+ }
+
+ div.quicktags-toolbar input {
+ padding: 10px 20px;
+ }
+
+ button.wp-switch-editor {
+ font-size: 16px;
+ line-height: 1em;
+ margin: 7px 7px 0 0;
+ padding: 8px 12px;
+ }
+
+ #wp-content-media-buttons a {
+ font-size: 16px;
+ line-height: 37px;
+ height: 39px;
+ padding: 0 15px 0 20px;
+ }
+
+ .wp-media-buttons span.wp-media-buttons-icon,
+ .wp-media-buttons span.jetpack-contact-form-icon {
+ width: 22px !important;
+ margin-top: -3px !important;
+ margin-right: -5px !important;
+ }
+
+ .wp-media-buttons .add_media span.wp-media-buttons-icon:before,
+ .wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before {
+ font-size: 20px !important;
+ }
+
+ #content_wp_fullscreen {
+ display: none;
+ }
+
+ .misc-pub-section {
+ padding: 20px 10px 20px;
+ }
+
+ .misc-pub-section > a {
+ float: left;
+ font-size: 16px;
+ }
+
+ #delete-action,
+ #publishing-action {
+ line-height: 47px;
+ }
+
+ /* Moderate Comment */
+ .comment-ays {
+ border-bottom: none;
+ }
+
+ /* Links */
+ .links-table #link_rel {
+ max-width: none;
+ }
+
+ .links-table th,
+ .links-table td {
+ padding: 10px 0;
+ }
+}
+
+@media only screen and (max-width: 500px) {
+ /* Align Add Media + Visual + Text tabs */
+ #wp-content-media-buttons a {
+ font-size: 14px;
+ padding: 0 10px 0 10px;
+ }
+}
diff --git a/wp-admin/css/edit.css b/wp-admin/css/edit.css
new file mode 100644
index 0000000..e0a05b2
--- /dev/null
+++ b/wp-admin/css/edit.css
@@ -0,0 +1,1617 @@
+#poststuff {
+ padding-top: 10px;
+ min-width: 763px;
+}
+
+#poststuff #post-body {
+ padding: 0;
+}
+
+#poststuff .postbox-container {
+ width: 100%;
+}
+
+#poststuff #post-body.columns-2 {
+ margin-right: 300px;
+}
+
+/*------------------------------------------------------------------------------
+ 11.0 - Write/Edit Post Screen
+------------------------------------------------------------------------------*/
+
+#show-comments {
+ overflow: hidden;
+}
+
+#save-action .spinner,
+#show-comments a,
+#show-comments .spinner {
+ float: left;
+}
+
+#lost-connection-notice .spinner {
+ display: block;
+ float: left;
+ margin: 0 5px 0 0;
+}
+
+#titlediv {
+ position: relative;
+}
+
+#titlediv label {
+ cursor: text;
+}
+
+#titlediv div.inside {
+ margin: 0;
+}
+
+#poststuff #titlewrap {
+ border: 0;
+ padding: 0;
+}
+
+#titlediv #title {
+ padding: 3px 8px;
+ font-size: 1.7em;
+ line-height: 100%;
+ height: 1.7em;
+ width: 100%;
+ outline: none;
+ margin: 0;
+ background-color: #fff;
+}
+
+#titlediv #title-prompt-text {
+ color: #777;
+ position: absolute;
+ font-size: 1.7em;
+ padding: 11px 10px;
+}
+
+#wp-fullscreen-save .fs-saved {
+ color: #999;
+ float: right;
+ margin-top: 4px;
+}
+
+#poststuff .inside-submitbox,
+#side-sortables .inside-submitbox {
+ margin: 0 3px;
+ font-size: 11px;
+}
+
+input#link_description,
+input#link_url {
+ width: 98%;
+}
+
+#pending {
+ background: 0 none;
+ border: 0 none;
+ padding: 0;
+ font-size: 11px;
+ margin-top: -1px;
+}
+
+#edit-slug-box {
+ line-height: 24px;
+ min-height: 25px; /* Yes, line-height + 1 */
+ margin-top: 5px;
+ padding: 0 10px;
+ color: #666;
+}
+
+#edit-slug-box .cancel {
+ margin-right: 10px;
+ font-size: 11px;
+}
+
+#editable-post-name-full {
+ display: none;
+}
+
+#editable-post-name {
+ background-color: #fffbcc;
+}
+
+#editable-post-name input {
+ font-size: 13px;
+ height: 22px;
+ margin: 0;
+ width: 16em;
+}
+
+.postarea h3 label {
+ float: left;
+}
+
+.submitbox .submit {
+ text-align: left;
+ padding: 12px 10px 10px;
+ font-size: 11px;
+ background-color: #464646;
+ color: #ccc;
+}
+
+.submitbox .submitdelete {
+ text-decoration: none;
+ padding: 1px 2px;
+}
+
+/* @todo: do we really need this? word on the street is we don't and this
+stray rule may actually be compensated for elsewhere. */
+#normal-sortables .submitbox .submitdelete:hover {
+ color: #000;
+ background-color: #f00;
+ border-bottom-color: #f00;
+}
+
+.submitbox .submit a:hover {
+ text-decoration: underline;
+}
+
+.submitbox .submit input {
+ margin-bottom: 8px;
+ margin-right: 4px;
+ padding: 6px;
+}
+
+.inside-submitbox #post_status {
+ margin: 2px 0 2px -2px;
+}
+
+#post-status-select {
+ margin-top: 3px;
+}
+
+/* Post Screen */
+#post-body #normal-sortables {
+ min-height: 50px;
+}
+
+.postbox {
+ position: relative;
+ min-width: 255px;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ background: #fff;
+}
+
+#trackback_url {
+ width: 99%;
+}
+
+#normal-sortables .postbox .submit {
+ background: transparent none;
+ border: 0 none;
+ float: right;
+ padding: 0 12px;
+ margin:0;
+}
+
+.category-add input[type="text"],
+.category-add select {
+ width: 100%;
+ max-width: 260px;
+ vertical-align: baseline;
+}
+
+#side-sortables .category-add input[type="text"],
+#side-sortables .category-add select {
+ margin: 0 0 1em;
+}
+
+ul.category-tabs li,
+#side-sortables .add-menu-item-tabs li,
+.wp-tab-bar li {
+ display: inline;
+ line-height: 1.35em;
+}
+
+.no-js .category-tabs li.hide-if-no-js {
+ display: none;
+}
+
+.category-tabs a,
+#side-sortables .add-menu-item-tabs a,
+.wp-tab-bar a {
+ text-decoration: none;
+}
+
+/* @todo: do these really need to be so specific? */
+#side-sortables .category-tabs .tabs a,
+#side-sortables .add-menu-item-tabs .tabs a,
+.wp-tab-bar .wp-tab-active a,
+#post-body ul.category-tabs li.tabs a,
+#post-body ul.add-menu-item-tabs li.tabs a {
+ color: #333;
+}
+
+.category-tabs {
+ margin: 8px 0 5px;
+}
+
+#category-adder h4 {
+ margin: 10px 0;
+}
+
+#side-sortables .add-menu-item-tabs,
+.wp-tab-bar {
+ margin-bottom: 3px;
+}
+
+#normal-sortables .postbox #replyrow .submit {
+ float: none;
+ margin: 0;
+ padding: 0 7px 5px;
+}
+
+#side-sortables .submitbox .submit input,
+#side-sortables .submitbox .submit .preview,
+#side-sortables .submitbox .submit a.preview:hover {
+ border: 0 none;
+}
+
+#side-sortables .inside-submitbox .insidebox,
+.stuffbox .insidebox {
+ margin: 11px 0;
+}
+
+/* @todo: make this a more generic class */
+ul.category-tabs,
+ul.add-menu-item-tabs,
+ul.wp-tab-bar {
+ margin-top: 12px;
+}
+
+ul.category-tabs li,
+ul.add-menu-item-tabs li {
+ border: solid 1px transparent;
+ position: relative;
+}
+
+ul.category-tabs li.tabs,
+ul.add-menu-item-tabs li.tabs,
+.wp-tab-active {
+ border: 1px solid #dfdfdf;
+ border-bottom-color: #fdfdfd;
+ background-color: #fdfdfd;
+}
+
+ul.category-tabs li,
+ul.add-menu-item-tabs li,
+ul.wp-tab-bar li {
+ padding: 3px 5px 5px;
+}
+
+#postimagediv .inside img {
+ max-width: 100%;
+ height: auto;
+ width: auto;
+}
+
+form#tags-filter {
+ position: relative;
+}
+
+/* Edit posts */
+td.post-title strong,
+td.plugin-title strong {
+ display: block;
+ margin-bottom: .2em;
+ font-size: 14px;
+}
+
+td.post-title p,
+td.plugin-title p {
+ margin: 6px 0;
+}
+
+/* Global classes */
+.wp-hidden-children .wp-hidden-child,
+.ui-tabs-hide {
+ display: none;
+}
+
+#post-body .tagsdiv #newtag {
+ margin-right: 5px;
+ width: 16em;
+}
+
+#side-sortables input#post_password {
+ width: 94%
+}
+
+#side-sortables .tagsdiv #newtag {
+ width: 68%;
+}
+
+#post-status-info {
+ width: 100%;
+ border-spacing: 0;
+ border: 1px solid #e5e5e5;
+ border-top: none;
+ background-color: #f7f7f7;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ z-index: 999;
+}
+
+#post-status-info td {
+ font-size: 12px;
+}
+
+.autosave-info {
+ padding: 2px 10px;
+ text-align: right;
+}
+
+#editorcontent #post-status-info {
+ border: none;
+}
+
+#content-resize-handle {
+ background: transparent url(../images/resize.gif) no-repeat scroll right bottom;
+ width: 12px;
+ cursor: row-resize;
+}
+
+.rtl #content-resize-handle {
+ background: transparent url(../images/resize-rtl.gif) no-repeat scroll left bottom;
+}
+
+.wp-editor-expand #content-resize-handle {
+ display: none;
+}
+
+#postdivrich #content {
+ resize: none;
+}
+
+#wp-word-count {
+ display: block;
+ padding: 2px 10px;
+}
+
+#wp-content-editor-container {
+ position: relative;
+}
+
+#content-textarea-clone {
+ z-index: -1;
+ position: absolute;
+ top: 0;
+ visibility: hidden;
+ overflow: hidden;
+ max-width: 100%;
+ border: 1px solid transparent;
+}
+
+.wp-fullscreen-wrap #content-textarea-clone {
+ display: none;
+}
+
+/* editor-expand.js override */
+.wp-fullscreen-wrap {
+ padding-top: 0 !important;
+}
+
+.wp-fullscreen-wrap .wp-editor-area {
+ margin-top: 0 !important;
+}
+
+.wp-fullscreen-wrap .mce-edit-area {
+ padding-top: 0 !important;
+}
+/* end editor-expand.js override */
+
+.wp-editor-expand #wp-content-editor-tools {
+ z-index: 1000;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.wp-editor-expand #wp-content-editor-container {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ margin-top: -1px;
+}
+
+.wp-editor-expand #wp-content-editor-container {
+ border-bottom: 0 none;
+}
+
+.wp-editor-expand div.mce-statusbar {
+ z-index: 1;
+}
+
+.wp-editor-expand #post-status-info {
+ border-top: 1px solid #e5e5e5;
+}
+
+.wp-editor-expand div.mce-toolbar-grp {
+ z-index: 999;
+}
+
+/* TinyMCE native fullscreen mode override */
+.mce-fullscreen #wp-content-wrap .mce-menubar,
+.mce-fullscreen #wp-content-wrap .mce-toolbar-grp,
+.mce-fullscreen #wp-content-wrap .mce-edit-area,
+.mce-fullscreen #wp-content-wrap .mce-statusbar {
+ position: static !important;
+ width: auto !important;
+ padding: 0 !important;
+}
+
+.mce-fullscreen #wp-content-wrap .mce-statusbar {
+ visibility: visible !important;
+}
+
+.post-php.mce-fullscreen #wpadminbar,
+.mce-fullscreen #wp-content-wrap .mce-wp-dfw {
+ display: none;
+}
+/* End TinyMCE native fullscreen mode override */
+
+#wp-content-editor-tools {
+ background-color: #f1f1f1;
+ padding-top: 20px;
+}
+
+#poststuff #post-body.columns-2 #side-sortables {
+ width: 280px;
+}
+
+#timestampdiv select {
+ height: 21px;
+ line-height: 14px;
+ padding: 0;
+ vertical-align: top;
+ font-size: 12px;
+}
+
+#aa, #jj, #hh, #mn {
+ padding: 1px;
+ font-size: 12px;
+}
+
+#jj, #hh, #mn {
+ width: 2em;
+}
+
+#aa {
+ width: 3.4em;
+}
+
+.curtime #timestamp {
+ padding: 2px 0 1px 0;
+ display: inline !important;
+ height: auto !important;
+}
+
+#misc-publishing-actions label[for="post_status"]:before,
+#post-body #visibility:before,
+.curtime #timestamp:before,
+#post-body .misc-pub-revisions:before,
+span.wp-media-buttons-icon:before {
+ color: #888;
+}
+
+#post-body #visibility:before,
+.curtime #timestamp:before,
+#post-body .misc-pub-revisions:before {
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0 2px 0 0;
+ top: 0;
+ left: -1px;
+ position: relative;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+}
+
+#post-body #visibility:before {
+ content: '\f177';
+}
+
+.curtime #timestamp:before {
+ content: '\f145';
+ top: -1px;
+}
+
+#post-body .misc-pub-revisions:before {
+ content: '\f321';
+}
+
+#timestampdiv {
+ padding-top: 5px;
+ line-height: 23px;
+}
+
+#timestampdiv p {
+ margin: 8px 0 6px;
+}
+
+#timestampdiv input {
+ border-width: 1px;
+ border-style: solid;
+}
+
+.notification-dialog {
+ position: fixed;
+ top: 30%;
+ left: 50%;
+ width: 450px;
+ margin-left: -225px;
+ background: #fff;
+ -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
+ box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
+ line-height: 1.5;
+ z-index: 1000005;
+}
+
+.notification-dialog-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: #000;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ z-index: 1000000;
+}
+
+#post-lock-dialog .post-locked-message,
+#post-lock-dialog .post-taken-over {
+ margin: 25px;
+}
+
+#post-lock-dialog .post-locked-message a.button {
+ margin-right: 10px;
+}
+
+#post-lock-dialog .post-locked-avatar {
+ float: left;
+ margin: 0 20px 20px 0;
+}
+
+#post-lock-dialog .wp-tab-first {
+ outline: 0;
+}
+
+#post-lock-dialog .locked-saving img {
+ float: left;
+ margin-right: 3px;
+}
+
+#post-lock-dialog.saving .locked-saving,
+#post-lock-dialog.saved .locked-saved {
+ display: inline;
+}
+
+#excerpt,
+.attachmentlinks {
+ margin: 0;
+ height: 4em;
+ width: 98%;
+}
+
+.tagchecklist {
+ margin-left: 14px;
+ font-size: 12px;
+ overflow: auto;
+}
+
+.tagchecklist br {
+ display: none;
+}
+
+.tagchecklist strong {
+ margin-left: -8px;
+ position: absolute;
+}
+
+.tagchecklist span {
+ margin-right: 25px;
+ display: block;
+ float: left;
+ font-size: 13px;
+ line-height: 1.8em;
+ white-space: nowrap;
+ cursor: default;
+}
+
+.tagchecklist span a {
+ margin: 1px 0 0 -17px;
+ cursor: pointer;
+ width: 20px;
+ height: 20px;
+ display: block;
+ float: left;
+ text-indent: 0;
+ overflow: hidden;
+ position: absolute;
+}
+
+#poststuff h2 {
+ margin-top: 20px;
+ font-size: 1.5em;
+ margin-bottom: 15px;
+ padding: 0 0 3px;
+ clear: left;
+}
+
+#poststuff h3 {
+ font-size: 14px;
+ padding: 8px 12px;
+ margin: 0;
+ line-height: 1.4;
+}
+
+#poststuff .inside {
+ margin: 6px 0 0 0;
+}
+
+#poststuff .inside #parent_id,
+#poststuff .inside #page_template {
+ max-width: 100%;
+}
+
+#poststuff .inside label.spam,
+#poststuff .inside label.deleted {
+ color: red;
+}
+
+#poststuff .inside label.waiting {
+ color: orange;
+}
+
+#poststuff .inside label.approved {
+ color: green;
+}
+
+.ie8 #poststuff .inside #parent_id,
+.ie8 #poststuff .inside #page_template {
+ width: 250px;
+}
+
+#post-visibility-select {
+ line-height: 1.5em;
+ margin-top: 3px;
+}
+
+#poststuff #submitdiv .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#post-body-content,
+.edit-form-section {
+ margin-bottom: 20px;
+}
+
+/*------------------------------------------------------------------------------
+ 11.1 - Custom Fields
+------------------------------------------------------------------------------*/
+
+#postcustomstuff thead th {
+ padding: 5px 8px 8px;
+ background-color: #f1f1f1;
+}
+
+#postcustom #postcustomstuff .submit {
+ border: 0 none;
+ float: none;
+ padding: 0 8px 8px;
+}
+
+#side-sortables #postcustom #postcustomstuff .submit {
+ margin: 0;
+ padding: 0;
+}
+
+#side-sortables #postcustom #postcustomstuff #the-list textarea {
+ height: 85px;
+}
+
+#side-sortables #postcustom #postcustomstuff td.left input,
+#side-sortables #postcustom #postcustomstuff td.left select,
+#side-sortables #postcustomstuff #newmetaleft a {
+ margin: 3px 3px 0;
+}
+
+#postcustomstuff table {
+ margin: 0;
+ width: 100%;
+ border: 1px solid #dfdfdf;
+ border-spacing: 0;
+ background-color: #f9f9f9;
+}
+
+#postcustomstuff tr {
+ vertical-align: top;
+}
+
+#postcustomstuff table input,
+#postcustomstuff table select,
+#postcustomstuff table textarea {
+ width: 96%;
+ margin: 8px;
+}
+
+#side-sortables #postcustomstuff table input,
+#side-sortables #postcustomstuff table select,
+#side-sortables #postcustomstuff table textarea {
+ margin: 3px;
+}
+
+#postcustomstuff th.left,
+#postcustomstuff td.left {
+ width: 38%;
+}
+
+#postcustomstuff .submit input {
+ margin: 0;
+ width: auto;
+}
+
+#postcustomstuff #newmetaleft a {
+ display: inline-block;
+ margin: 0 8px 8px;
+ text-decoration: none;
+}
+
+.no-js #postcustomstuff #enternew {
+ display: none;
+}
+
+#post-body-content .compat-attachment-fields {
+ margin-bottom: 20px;
+}
+
+.compat-attachment-fields th {
+ padding-top: 5px;
+ padding-right: 10px;
+}
+
+/*------------------------------------------------------------------------------
+ 11.3 - Featured Images
+------------------------------------------------------------------------------*/
+
+#select-featured-image {
+ padding: 4px 0;
+ overflow: hidden;
+}
+
+#select-featured-image img {
+ max-width: 100%;
+ height: auto;
+ margin-bottom: 10px;
+}
+
+#select-featured-image a {
+ float: left;
+ clear: both;
+}
+
+#select-featured-image .remove {
+ display: none;
+ margin-top: 10px;
+}
+
+.js #select-featured-image.has-featured-image .remove {
+ display: inline-block;
+}
+
+.no-js #select-featured-image .choose {
+ display: none;
+}
+
+/*------------------------------------------------------------------------------
+ 11.4 - Post formats
+------------------------------------------------------------------------------*/
+
+.post-state-format {
+ overflow: hidden;
+ display: inline-block;
+ vertical-align: middle;
+ height: 20px;
+ width: 20px;
+ margin-right: 5px;
+ margin-top: -4px;
+}
+
+.post-state-format:before {
+ display: block;
+ height: 20px;
+ width: 20px;
+ font: normal 20px/1 'dashicons' !important;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.post-state-format:before,
+.post-format-icon:before {
+ color: #ddd;
+ -webkit-transition: all .1s ease-in-out;
+ transition: all .1s ease-in-out;
+}
+
+a.post-state-format:hover:before,
+a.post-format-icon:hover:before {
+ color: #2ea2cc;
+}
+
+#post-formats-select {
+ line-height: 2em;
+}
+
+#post-formats-select .post-format-icon:before {
+ top: 5px;
+}
+
+input.post-format {
+ margin-top: 1px;
+}
+
+label.post-format-icon {
+ margin-left: 0px;
+ padding: 2px 0 2px 0px;
+}
+
+.post-format-icon:before {
+ position: relative;
+ display: inline-block;
+ margin-right: 7px;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.post-state-format.post-format-standard:before,
+.post-format-icon.post-format-standard:before,
+a.post-state-format.format-standard:before {
+ content: '\f109';
+}
+
+.post-state-format.post-format-image:before,
+.post-format-icon.post-format-image:before,
+a.post-state-format.format-image:before {
+ content: '\f128';
+}
+
+.post-state-format.post-format-gallery:before,
+.post-format-icon.post-format-gallery:before,
+a.post-state-format.format-gallery:before {
+ content: '\f161';
+}
+
+.post-state-format.post-format-audio:before,
+.post-format-icon.post-format-audio:before,
+a.post-state-format.format-audio:before {
+ content: '\f127';
+}
+
+.post-state-format.post-format-video:before,
+.post-format-icon.post-format-video:before,
+a.post-state-format.format-video:before {
+ content: '\f126';
+}
+
+.post-state-format.post-format-chat:before,
+.post-format-icon.post-format-chat:before,
+a.post-state-format.format-chat:before {
+ content: '\f125';
+}
+
+.post-state-format.post-format-status:before,
+.post-format-icon.post-format-status:before,
+a.post-state-format.format-status:before {
+ content: '\f130';
+}
+
+.post-state-format.post-format-aside:before,
+.post-format-icon.post-format-aside:before,
+a.post-state-format.format-aside:before {
+ content: '\f123';
+}
+
+.post-state-format.post-format-quote:before,
+.post-format-icon.post-format-quote:before,
+a.post-state-format.format-quote:before {
+ content: '\f122';
+}
+
+.post-state-format.post-format-link:before,
+.post-format-icon.post-format-link:before,
+a.post-state-format.format-link:before {
+ content: '\f103';
+}
+
+/*------------------------------------------------------------------------------
+ 12.0 - Categories
+------------------------------------------------------------------------------*/
+
+.category-adder {
+ margin-left: 120px;
+ padding: 4px 0;
+}
+
+.category-adder h4 {
+ margin: 0 0 8px;
+}
+
+#side-sortables .category-adder {
+ margin: 0;
+}
+
+.wp-tab-panel,
+.categorydiv div.tabs-panel,
+.customlinkdiv div.tabs-panel,
+.posttypediv div.tabs-panel,
+.taxonomydiv div.tabs-panel {
+ min-height: 42px;
+ max-height: 200px;
+ overflow: auto;
+ padding: 0 0.9em;
+ border: solid 1px #dfdfdf;
+ background-color: #fdfdfd;
+}
+
+div.tabs-panel-active {
+ display:block;
+}
+
+div.tabs-panel-inactive {
+ display:none;
+}
+
+#front-page-warning,
+#front-static-pages ul,
+ul.export-filters,
+.inline-editor ul.cat-checklist ul,
+.categorydiv ul.categorychecklist ul,
+.customlinkdiv ul.categorychecklist ul,
+.posttypediv ul.categorychecklist ul,
+.taxonomydiv ul.categorychecklist ul {
+ margin-left: 18px;
+}
+
+ul.categorychecklist li {
+ margin: 0;
+ padding: 0;
+ line-height: 22px;
+ word-wrap: break-word;
+}
+
+.categorydiv .tabs-panel,
+.customlinkdiv .tabs-panel,
+.posttypediv .tabs-panel,
+.taxonomydiv .tabs-panel {
+ border-width: 3px;
+ border-style: solid;
+}
+
+.form-wrap p,
+.form-wrap label {
+ font-size: 11px;
+}
+
+.form-wrap label {
+ display: block;
+ padding: 2px;
+ font-size: 12px;
+}
+
+.form-field input[type="text"],
+.form-field input[type="password"],
+.form-field input[type="email"],
+.form-field input[type="number"],
+.form-field input[type="search"],
+.form-field input[type="tel"],
+.form-field input[type="url"],
+.form-field textarea {
+ border-style: solid;
+ border-width: 1px;
+ width: 95%;
+}
+
+p.description,
+.form-wrap p {
+ margin: 2px 0 5px;
+ color: #666;
+}
+
+p.help,
+p.description,
+span.description,
+.form-wrap p {
+ font-size: 13px;
+ font-style: italic;
+}
+
+.form-wrap .form-field {
+ margin: 0 0 10px;
+ padding: 8px 0;
+}
+
+.form-wrap .form-field #parent {
+ max-width: 100%;
+}
+
+.col-wrap h3 {
+ margin: 12px 0;
+ font-size: 1.1em;
+}
+
+.col-wrap p.submit {
+ margin-top: -10px;
+}
+
+
+/*------------------------------------------------------------------------------
+ 13.0 - Tags
+------------------------------------------------------------------------------*/
+
+.tagsdiv {
+ margin-top: -8px;
+}
+
+#poststuff .taghint {
+ color: #aaa;
+ margin: 15px 0 -24px 12px;
+}
+
+#poststuff .tagsdiv .howto {
+ margin: 0 0 6px 0;
+}
+
+.ajaxtag .newtag {
+ position: relative;
+}
+
+.tagsdiv .newtag {
+ width: 180px;
+}
+
+.tagsdiv .the-tags {
+ display: block;
+ height: 60px;
+ margin: 0 auto;
+ overflow: auto;
+ width: 260px;
+}
+
+#post-body-content .tagsdiv .the-tags {
+ margin: 0 5px;
+}
+
+/* tag hints */
+.taghint {
+ color: #aaa;
+ margin: -17px 0 0 7px;
+ visibility: hidden;
+}
+
+input.newtag ~ div.taghint {
+ visibility: visible;
+}
+
+input.newtag:focus ~ div.taghint {
+ visibility: hidden;
+}
+
+p.popular-tags {
+ border: none;
+ line-height: 2em;
+ padding: 8px 12px 12px;
+ text-align: justify;
+}
+
+p.popular-tags a {
+ padding: 0 3px;
+}
+
+.tagcloud {
+ width: 97%;
+ margin: 0 0 40px;
+ text-align: justify;
+}
+
+.tagcloud h3 {
+ margin: 2px 0 12px;
+}
+
+.ac_results {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ position: absolute;
+ z-index: 10000;
+ display: none;
+ border: 1px solid #808080;
+ background-color: #fff;
+}
+
+.wp-customizer .ac_results {
+ z-index: 500000;
+}
+
+.ac_results li {
+ padding: 2px 5px;
+ white-space: nowrap;
+ color: #101010;
+ text-align: left;
+}
+
+.ac_over {
+ background-color: #f0f0b8;
+ cursor: pointer;
+}
+
+.ac_match {
+ text-decoration: underline;
+}
+
+/* Comments */
+
+.comment-php .wp-editor-area {
+ height: 200px;
+}
+
+.comment-ays {
+ margin-bottom: 0;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+}
+
+.comment-ays .alt {
+ background-color: transparent;
+}
+
+.trash-undo-inside,
+.spam-undo-inside {
+ margin: 1px 8px 1px 0;
+ line-height: 16px;
+}
+
+.spam-undo-inside .avatar,
+.trash-undo-inside .avatar {
+ height: 20px;
+ width: 20px;
+ margin-right: 8px;
+ vertical-align: middle;
+}
+
+.stuffbox .editcomment {
+ clear: none;
+}
+
+#comment-status-radio p {
+ margin: 3px 0 5px;
+}
+
+#comment-status-radio input {
+ margin: 2px 3px 5px 0;
+ vertical-align: middle;
+}
+
+#comment-status-radio label {
+ padding: 5px 0;
+}
+
+/* links tables */
+table.links-table {
+ width: 100%;
+ border-spacing: 0;
+}
+
+.links-table th {
+ font-weight: normal;
+ text-align: left;
+ vertical-align: top;
+ min-width: 80px;
+ width: 20%;
+ word-wrap: break-word;
+}
+
+.links-table th,
+.links-table td {
+ padding: 5px 0;
+}
+
+.links-table td label {
+ margin-right: 8px;
+}
+
+.links-table td input[type="text"],
+.links-table td textarea {
+ width: 100%;
+}
+
+.links-table #link_rel {
+ max-width: 280px;
+}
+
+/* DFW 2
+-------------------------------------------------------------- */
+
+#wp-content-wrap .mce-wp-dfw,
+#qt_content_dfw {
+ display: none;
+}
+
+.wp-editor-expand #wp-content-wrap .mce-wp-dfw,
+.wp-editor-expand #qt_content_dfw {
+ display: inline-block;
+}
+
+.focus-on .wrap > h2,
+.focus-on #wpfooter,
+.focus-on .postbox-container > *,
+.focus-on div.updated,
+.focus-on div.error,
+.focus-on div.notice,
+.focus-on #wp-toolbar,
+.focus-on #screen-meta-links,
+.focus-on #screen-meta {
+ opacity: 0;
+ -webkit-transition-duration: 0.6s;
+ transition-duration: 0.6s;
+ -webkit-transition-property: opacity;
+ transition-property: opacity;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+.focus-on #wp-toolbar {
+ opacity: 0.3;
+}
+
+.focus-off .wrap > h2,
+.focus-off #wpfooter,
+.focus-off .postbox-container > *,
+.focus-off div.updated,
+.focus-off div.error,
+.focus-off div.notice,
+.focus-off #wp-toolbar,
+.focus-off #screen-meta-links,
+.focus-off #screen-meta {
+ opacity: 1;
+ -webkit-transition-duration: 0.2s;
+ transition-duration: 0.2s;
+ -webkit-transition-property: opacity;
+ transition-property: opacity;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+.focus-off #wp-toolbar {
+ -webkit-transform: translate(0, 0);
+}
+
+.focus-on #adminmenuback,
+.focus-on #adminmenuwrap {
+ -webkit-transition-duration: 0.6s;
+ transition-duration: 0.6s;
+ -webkit-transition-property: -webkit-transform;
+ transition-property: transform;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+/* @noflip */
+.focus-on #adminmenuback,
+.focus-on #adminmenuwrap {
+ -webkit-transform: translateX( -100% );
+ -ms-transform: translateX( -100% );
+ transform: translateX( -100% );
+}
+
+/* @noflip */
+.rtl.focus-on #adminmenuback,
+.rtl.focus-on #adminmenuwrap {
+ -webkit-transform: translateX( 100% );
+ -ms-transform: translateX( 100% );
+ transform: translateX( 100% );
+}
+
+.focus-off #adminmenuback,
+.focus-off #adminmenuwrap {
+ -webkit-transform: translateX( 0 );
+ -ms-transform: translateX( 0 );
+ transform: translateX( 0 );
+ -webkit-transition-duration: 0.2s;
+ transition-duration: 0.2s;
+ -webkit-transition-property: -webkit-transform;
+ transition-property: transform;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ #content-resize-handle,
+ #post-body .wp_themeSkin .mceStatusbar a.mceResize {
+ background: transparent url(../images/resize-2x.gif) no-repeat scroll right bottom;
+ -webkit-background-size: 11px 11px;
+ background-size: 11px 11px;
+ }
+
+ .rtl #content-resize-handle,
+ .rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize {
+ background: transparent url(../images/resize-rtl-2x.gif) no-repeat scroll right bottom;
+ }
+}
+
+/* one column on the post write/edit screen */
+@media only screen and (max-width: 850px) {
+ #poststuff {
+ min-width: 0;
+ }
+
+ #wpbody-content #poststuff #post-body {
+ margin: 0;
+ }
+
+ #wpbody-content #post-body.columns-2 #postbox-container-1 {
+ margin-right: 0;
+ width: 100%;
+ }
+
+ #poststuff #postbox-container-1 .empty-container,
+ #poststuff #postbox-container-1 #side-sortables:empty {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+ }
+
+ #poststuff #post-body.columns-2 #side-sortables {
+ min-height: 0;
+ width: auto;
+ }
+
+ /* hide the radio buttons for column prefs */
+ .screen-layout,
+ .columns-prefs {
+ display: none;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ #post-body-content {
+ min-width: 0;
+ }
+
+ #titlediv #title-prompt-text {
+ padding: 10px 10px;
+ }
+
+ #poststuff h3 {
+ padding: 12px;
+ }
+
+ .post-format-options {
+ padding-right: 0;
+ }
+
+ .post-format-options a {
+ margin-right: 5px;
+ margin-bottom: 5px;
+ min-width: 52px;
+ }
+
+ .post-format-options .post-format-title {
+ font-size: 11px;
+ }
+
+ .post-format-options a div {
+ height: 28px;
+ width: 28px;
+ }
+
+ .post-format-options a div:before {
+ font-size: 26px !important;
+ }
+
+ /* Publish Metabox Options */
+ #post-visibility-select {
+ line-height: 280%;
+ }
+
+ .wp-core-ui .save-post-visibility,
+ .wp-core-ui .save-timestamp {
+ vertical-align: middle;
+ margin-right: 15px;
+ }
+
+ .timestamp-wrap select#mm {
+ display: block;
+ width: 100%;
+ margin-bottom: 10px;
+ }
+
+ .timestamp-wrap #jj,
+ .timestamp-wrap #aa,
+ .timestamp-wrap #hh,
+ .timestamp-wrap #mn {
+ padding: 12px 3px;
+ font-size: 14px;
+ margin-bottom: 5px;
+ width: auto;
+ text-align: center;
+ }
+
+ /* Categories Metabox */
+ ul.category-tabs {
+ margin: 30px 0 15px;
+ }
+
+ ul.category-tabs li.tabs {
+ padding: 15px;
+ }
+
+ ul.categorychecklist li {
+ margin-bottom: 15px;
+ }
+
+ ul.categorychecklist ul {
+ margin-top: 15px;
+ }
+
+ .category-add input[type=text],
+ .category-add select {
+ max-width: none;
+ margin-bottom: 15px;
+ }
+
+ /* Tags Metabox */
+ .tagsdiv .newtag {
+ width: 100%;
+ height: auto;
+ margin-bottom: 15px;
+ }
+
+ .tagchecklist {
+ margin: 25px 10px;
+ }
+
+ .tagchecklist span {
+ font-size: 16px;
+ line-height: 120%;
+ }
+
+ /* Discussion */
+ #commentstatusdiv p {
+ line-height: 2.8;
+ }
+
+ /* TinyMCE Adjustments */
+ .mceToolbar * {
+ white-space: normal !important;
+ }
+
+ .mceToolbar tr,
+ .mceToolbar td {
+ float: left !important;
+ }
+
+ .wp_themeSkin a.mceButton {
+ width: 30px;
+ height: 30px;
+ }
+
+ .wp_themeSkin .mceButton .mceIcon {
+ margin-top: 5px;
+ margin-left: 5px;
+ }
+
+ .wp_themeSkin .mceSplitButton {
+ margin-top: 1px;
+ }
+
+ .wp_themeSkin .mceSplitButton td a.mceAction {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ padding-left: 6px;
+ padding-right: 3px;
+ }
+
+ .wp_themeSkin .mceSplitButton td a.mceOpen,
+ .wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ background-position: 1px 6px;
+ }
+
+ .wp_themeSkin table.mceListBox {
+ margin: 5px;
+ }
+
+ div.quicktags-toolbar input {
+ padding: 10px 20px;
+ }
+
+ button.wp-switch-editor {
+ font-size: 16px;
+ line-height: 1em;
+ margin: 7px 0 0 7px;
+ padding: 8px 12px;
+ }
+
+ #wp-content-media-buttons a {
+ font-size: 16px;
+ line-height: 37px;
+ height: 39px;
+ padding: 0 20px 0 15px;
+ }
+
+ .wp-media-buttons span.wp-media-buttons-icon,
+ .wp-media-buttons span.jetpack-contact-form-icon {
+ width: 22px !important;
+ margin-top: -3px !important;
+ margin-left: -5px !important;
+ }
+
+ .wp-media-buttons .add_media span.wp-media-buttons-icon:before,
+ .wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before {
+ font-size: 20px !important;
+ }
+
+ #content_wp_fullscreen {
+ display: none;
+ }
+
+ .misc-pub-section {
+ padding: 20px 10px 20px;
+ }
+
+ .misc-pub-section > a {
+ float: right;
+ font-size: 16px;
+ }
+
+ #delete-action,
+ #publishing-action {
+ line-height: 47px;
+ }
+
+ /* Moderate Comment */
+ .comment-ays {
+ border-bottom: none;
+ }
+
+ /* Links */
+ .links-table #link_rel {
+ max-width: none;
+ }
+
+ .links-table th,
+ .links-table td {
+ padding: 10px 0;
+ }
+}
+
+@media only screen and (max-width: 500px) {
+ /* Align Add Media + Visual + Text tabs */
+ #wp-content-media-buttons a {
+ font-size: 14px;
+ padding: 0 10px 0 10px;
+ }
+}
diff --git a/wp-admin/css/farbtastic-rtl.css b/wp-admin/css/farbtastic-rtl.css
new file mode 100644
index 0000000..b7aebad
--- /dev/null
+++ b/wp-admin/css/farbtastic-rtl.css
@@ -0,0 +1,41 @@
+
+.farbtastic {
+ position: relative;
+}
+
+.farbtastic * {
+ position: absolute;
+ cursor: crosshair;
+}
+
+.farbtastic,
+.farbtastic .wheel {
+ width: 195px;
+ height: 195px;
+}
+
+.farbtastic .color,
+.farbtastic .overlay {
+ top: 47px;
+ right: 47px;
+ width: 101px;
+ height: 101px;
+}
+
+.farbtastic .wheel {
+ background: url(../images/wheel.png) no-repeat;
+ width: 195px;
+ height: 195px;
+}
+
+.farbtastic .overlay {
+ background: url(../images/mask.png) no-repeat;
+}
+
+.farbtastic .marker {
+ width: 17px;
+ height: 17px;
+ margin: -8px -8px 0 0;
+ overflow: hidden;
+ background: url(../images/marker.png) no-repeat;
+}
diff --git a/wp-admin/css/farbtastic.css b/wp-admin/css/farbtastic.css
new file mode 100644
index 0000000..2bb73bf
--- /dev/null
+++ b/wp-admin/css/farbtastic.css
@@ -0,0 +1,41 @@
+
+.farbtastic {
+ position: relative;
+}
+
+.farbtastic * {
+ position: absolute;
+ cursor: crosshair;
+}
+
+.farbtastic,
+.farbtastic .wheel {
+ width: 195px;
+ height: 195px;
+}
+
+.farbtastic .color,
+.farbtastic .overlay {
+ top: 47px;
+ left: 47px;
+ width: 101px;
+ height: 101px;
+}
+
+.farbtastic .wheel {
+ background: url(../images/wheel.png) no-repeat;
+ width: 195px;
+ height: 195px;
+}
+
+.farbtastic .overlay {
+ background: url(../images/mask.png) no-repeat;
+}
+
+.farbtastic .marker {
+ width: 17px;
+ height: 17px;
+ margin: -8px 0 0 -8px;
+ overflow: hidden;
+ background: url(../images/marker.png) no-repeat;
+}
diff --git a/wp-admin/css/forms-rtl.css b/wp-admin/css/forms-rtl.css
new file mode 100644
index 0000000..4802568
--- /dev/null
+++ b/wp-admin/css/forms-rtl.css
@@ -0,0 +1,1040 @@
+/* Include margin and padding in the width calculation of input and textarea. */
+input,
+textarea {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type="text"],
+input[type="password"],
+input[type="checkbox"],
+input[type="color"],
+input[type="date"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="radio"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"],
+select,
+textarea {
+ border: 1px solid #ddd;
+ -webkit-box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.07 );
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.07 );
+ background-color: #fff;
+ color: #333;
+ outline: none;
+ -webkit-transition: 0.05s border-color ease-in-out;
+ transition: 0.05s border-color ease-in-out;
+}
+
+input[type="text"]:focus,
+input[type="password"]:focus,
+input[type="color"]:focus,
+input[type="date"]:focus,
+input[type="datetime"]:focus,
+input[type="datetime-local"]:focus,
+input[type="email"]:focus,
+input[type="month"]:focus,
+input[type="number"]:focus,
+input[type="password"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="text"]:focus,
+input[type="time"]:focus,
+input[type="url"]:focus,
+input[type="week"]:focus,
+input[type="checkbox"]:focus,
+input[type="radio"]:focus,
+select:focus,
+textarea:focus {
+ border-color: #5b9dd9;
+ -webkit-box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+ box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+}
+
+/* @noflip */
+input[type="email"],
+input[type="url"] {
+ direction: ltr;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ border: 1px solid #bbb;
+ background: #fff;
+ color: #555;
+ clear: none;
+ cursor: pointer;
+ display: inline-block;
+ line-height: 0;
+ height: 16px;
+ margin: -4px 0 0 4px;
+ outline: 0;
+ padding: 0 !important;
+ text-align: center;
+ vertical-align: middle;
+ width: 16px;
+ min-width: 16px;
+ -webkit-appearance: none;
+ -webkit-box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.1 );
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.1 );
+ -webkit-transition: .05s border-color ease-in-out;
+ transition: .05s border-color ease-in-out;
+}
+
+input[type="radio"]:checked + label:before {
+ color: #888;
+}
+
+.wp-core-ui input[type="reset"]:hover,
+.wp-core-ui input[type="reset"]:active {
+ color: #2ea2cc;
+}
+
+td > input[type="checkbox"],
+.wp-admin p input[type="checkbox"],
+.wp-admin p input[type="radio"] {
+ margin-top: 0;
+}
+
+.wp-admin p label input[type="checkbox"] {
+ margin-top: -4px;
+}
+
+.wp-admin p label input[type="radio"] {
+ margin-top: -2px;
+}
+
+input[type="radio"] {
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ margin-left: 4px;
+ line-height: 10px;
+}
+
+input[type="checkbox"]:checked:before,
+input[type="radio"]:checked:before {
+ float: right;
+ display: inline-block;
+ vertical-align: middle;
+ width: 16px;
+ font: normal 21px/1 'dashicons';
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+input[type="checkbox"]:checked:before {
+ content: '\f147';
+ margin: -3px -4px 0 0;
+ color: #1e8cbe;
+}
+
+input[type="radio"]:checked:before {
+ content: '\2022';
+ text-indent: -9999px;
+ -webkit-border-radius: 50px;
+ border-radius: 50px;
+ font-size: 24px;
+ width: 6px;
+ height: 6px;
+ margin: 4px;
+ line-height: 16px;
+ background-color: #1e8cbe;
+}
+
+@-moz-document url-prefix() {
+ input[type="checkbox"],
+ input[type="radio"],
+ .form-table input.tog {
+ margin-bottom: -1px;
+ }
+}
+
+/* Search */
+input[type="search"] {
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-decoration {
+ display: none;
+}
+
+.ie8 input[type="password"] {
+ font-family: sans-serif;
+}
+
+textarea,
+input,
+select,
+button {
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+textarea,
+input,
+select {
+ font-size: 14px;
+ padding: 3px 5px;
+ -webkit-border-radius: 0;
+ border-radius: 0; /* Reset mobile webkit's default element styling */
+}
+
+textarea {
+ overflow: auto;
+ padding: 2px 6px;
+ line-height: 1.4;
+}
+
+.wp-admin input[type="file"] {
+ padding: 3px 0;
+}
+
+label {
+ cursor: pointer;
+}
+
+input,
+select {
+ margin: 1px;
+ padding: 3px 5px;
+}
+
+input.code {
+ padding-top: 6px;
+}
+
+textarea.code {
+ line-height: 1.4;
+ padding: 4px 6px 1px 6px;
+}
+
+input.readonly,
+input[readonly],
+textarea.readonly,
+textarea[readonly] {
+ background-color: #eee;
+}
+
+:-moz-placeholder,
+.wp-core-ui :-moz-placeholder {
+ color: #a9a9a9;
+}
+
+.form-invalid {
+ background-color: #ffebe8 !important;
+}
+
+.form-invalid input,
+.form-invalid select {
+ border-color: #c00 !important;
+}
+
+.form-input-tip {
+ color: #666;
+}
+
+input:disabled,
+input.disabled,
+select:disabled,
+select.disabled,
+textarea:disabled,
+textarea.disabled {
+ background: rgba( 255, 255, 255, 0.5 );
+ border-color: rgba( 222, 222, 222, 0.75 );
+ -webkit-box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.04 );
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.04 );
+ color: rgba( 51, 51, 51, 0.5 );
+}
+
+input[type="file"]:disabled,
+input[type="file"].disabled,
+input[type="range"]:disabled,
+input[type="range"].disabled {
+ background: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+input[type="checkbox"]:disabled,
+input[type="checkbox"].disabled,
+input[type="radio"]:disabled,
+input[type="radio"].disabled,
+input[type="checkbox"]:disabled:checked:before,
+input[type="checkbox"].disabled:checked:before,
+input[type="radio"]:disabled:checked:before,
+input[type="radio"].disabled:checked:before {
+ opacity: 0.7;
+}
+
+/*------------------------------------------------------------------------------
+ 2.0 - Forms
+------------------------------------------------------------------------------*/
+
+
+.wp-admin select {
+ padding: 2px;
+ line-height: 28px;
+ height: 28px;
+ vertical-align: middle;
+}
+
+.wp-admin .button-cancel {
+ padding: 0 5px;
+ line-height: 2;
+}
+
+.meta-box-sortables select {
+ max-width: 100%;
+}
+
+.wp-admin select[multiple] {
+ height: auto;
+}
+
+.submit {
+ padding: 1.5em 0;
+ margin: 5px 0;
+ -webkit-border-bottom-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ -webkit-border-bottom-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+ border: none;
+}
+
+form p.submit a.cancel:hover {
+ text-decoration: none;
+}
+
+p.submit {
+ text-align: right;
+ max-width: 100%;
+ margin-top: 20px;
+ padding-top: 10px;
+}
+
+.textright p.submit {
+ border: none;
+ text-align: left;
+}
+
+table.form-table + p.submit,
+table.form-table + input + p.submit,
+table.form-table + input + input + p.submit {
+ border-top: none;
+ padding-top: 0;
+}
+
+#minor-publishing-actions input,
+#major-publishing-actions input,
+#minor-publishing-actions .preview {
+ text-align: center;
+}
+
+textarea.all-options,
+input.all-options {
+ width: 250px;
+}
+
+input.large-text,
+textarea.large-text {
+ width: 99%;
+}
+
+input.regular-text,
+#adduser .form-field input {
+ width: 25em;
+}
+
+input.small-text {
+ width: 50px;
+ padding: 1px 6px;
+}
+
+input[type="number"].small-text {
+ width: 65px;
+}
+
+#doaction,
+#doaction2,
+#post-query-submit {
+ margin: 1px 0 0 8px;
+}
+
+.tablenav #changeit,
+.tablenav #delete_all,
+.tablenav #clear-recent-list,
+.wp-filter #delete_all {
+ margin-top: 1px;
+}
+
+.tablenav .actions select {
+ float: right;
+ margin-left: 6px;
+ max-width: 200px;
+}
+
+.ie8 .tablenav .actions select {
+ width: 155px;
+}
+
+.ie8 .tablenav .actions select#cat {
+ width: 200px;
+}
+
+#timezone_string option {
+ margin-right: 1em;
+}
+
+#upload-form label {
+ color: #777;
+}
+
+label,
+#your-profile label + a {
+ vertical-align: middle;
+}
+
+fieldset label,
+#your-profile label + a {
+ vertical-align: middle;
+}
+
+.options-media-php label[for*="_size_"],
+#misc-publishing-actions label {
+ vertical-align: baseline;
+}
+
+#misc-publishing-actions label[for="post_status"]:before {
+ content: '\f173';
+ display: inline-block;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ right: -1px;
+ padding: 0 0 0 5px;
+ position: relative;
+ top: 0;
+ text-decoration: none !important;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+#pass-strength-result {
+ background-color: #eee;
+ border: 1px solid #ddd;
+ float: right;
+ margin: 13px 1px 5px 5px;
+ padding: 3px 5px;
+ text-align: center;
+ width: 200px;
+ display: none;
+}
+
+#pass-strength-result.short {
+ background-color: #ffa0a0;
+ border-color: #f04040;
+}
+
+#pass-strength-result.bad {
+ background-color: #ffb78c;
+ border-color: #ff853c;
+}
+
+#pass-strength-result.good {
+ background-color: #ffec8b;
+ border-color: #fc0;
+}
+
+#pass-strength-result.strong {
+ background-color: #c3ff88;
+ border-color: #8dff1c;
+}
+
+.indicator-hint {
+ padding-top: 8px;
+}
+
+p.search-box {
+ float: left;
+ margin: 0;
+}
+
+.network-admin.themes-php p.search-box {
+ clear: right;
+}
+
+.search-box input[name="s"],
+.tablenav .search-plugins input[name="s"],
+.tagsdiv .newtag {
+ float: right;
+ height: 28px;
+ margin: 0 0 0 4px;
+}
+
+input[type="text"].ui-autocomplete-loading {
+ background: transparent url(../images/loading.gif) no-repeat left center;
+ visibility: visible;
+}
+
+ul#add-to-blog-users {
+ margin: 0 14px 0 0;
+}
+
+.ui-autocomplete-input.open {
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.ui-autocomplete {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ position: absolute;
+ z-index: 10000;
+ -webkit-border-bottom-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+ -webkit-border-bottom-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ border: 1px solid #aaa;
+ background-color: #efefef;
+}
+
+.ui-autocomplete li {
+ margin-bottom: 0;
+ white-space: nowrap;
+ text-align: right;
+}
+
+.ui-autocomplete li a {
+ display: block;
+ height: 100%;
+ padding: 4px 10px;
+ color: #444;
+}
+
+.ui-autocomplete li a.ui-state-focus {
+ background-color: #ddd;
+ cursor: pointer;
+}
+
+/*------------------------------------------------------------------------------
+ 15.0 - Comments Screen
+------------------------------------------------------------------------------*/
+
+.form-table {
+ border-collapse: collapse;
+ margin-top: 0.5em;
+ width: 100%;
+ clear: both;
+}
+
+.form-table,
+.form-table td,
+.form-table th,
+.form-table td p,
+.form-wrap label {
+ font-size: 14px;
+}
+
+.form-table td {
+ margin-bottom: 9px;
+ padding: 15px 10px;
+ line-height: 1.3;
+ vertical-align: middle;
+}
+
+.form-table th,
+.form-wrap label {
+ color: #222;
+ font-weight: normal;
+ text-shadow: none;
+ vertical-align: baseline;
+}
+
+.form-table th {
+ vertical-align: top;
+ text-align: right;
+ padding: 20px 0 20px 10px;
+ width: 200px;
+ line-height: 1.3;
+ font-weight: 600;
+}
+
+.form-table th.th-full {
+ width: auto;
+ font-weight: 400;
+}
+
+.form-table td p {
+ margin-top: 4px;
+ margin-bottom: 0;
+}
+
+.form-table td fieldset label {
+ margin: 0.25em 0 0.5em !important;
+ display: inline-block;
+}
+
+.form-table td fieldset label,
+.form-table td fieldset p,
+.form-table td fieldset li {
+ line-height: 1.4em;
+}
+
+.form-table input.tog,
+.form-table input[type="radio"] {
+ margin-top: -4px;
+ margin-left: 4px;
+ float: none;
+}
+
+.form-table .pre {
+ padding: 8px;
+ margin: 0;
+}
+
+table.form-table td .updated {
+ font-size: 13px;
+}
+
+table.form-table td .updated p {
+ font-size: 13px;
+ margin: 0.3em 0;
+}
+
+/*------------------------------------------------------------------------------
+ 18.0 - Users
+------------------------------------------------------------------------------*/
+
+#profile-page .form-table textarea {
+ width: 500px;
+ margin-bottom: 6px;
+}
+
+#profile-page .form-table #rich_editing {
+ margin-left: 5px
+}
+
+#your-profile legend {
+ font-size: 22px;
+}
+
+#display_name {
+ width: 15em;
+}
+
+#createuser .form-field input {
+ width: 25em;
+}
+
+.color-option {
+ display: inline-block;
+ width: 24%;
+ padding: 5px 15px 15px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-bottom: 3px;
+}
+
+.color-option:hover,
+.color-option.selected {
+ background: #ddd;
+}
+
+.color-palette {
+ width: 100%;
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+.color-palette td {
+ height: 20px;
+ padding: 0;
+ border: none;
+}
+
+.color-option {
+ cursor: pointer;
+}
+
+/*------------------------------------------------------------------------------
+ 19.0 - Tools
+------------------------------------------------------------------------------*/
+
+.tool-box .title {
+ margin: 8px 0;
+ font-size: 18px;
+ font-weight: normal;
+ line-height: 24px;
+}
+
+.pressthis {
+ margin: 20px 0;
+}
+
+.pressthis a,
+.pressthis a:hover,
+.pressthis a:focus,
+.pressthis a:active {
+ display: inline-block;
+ position: relative;
+ cursor: move;
+ color: #333;
+ background: #e6e6e6;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ border: 1px solid #b4b4b4;
+ font-style: normal;
+ line-height: 16px;
+ font-size: 14px;
+ text-decoration: none;
+}
+
+.pressthis a:active {
+ outline: none;
+}
+
+.pressthis a:hover:after {
+ -webkit-transform: skew(20deg) rotate(9deg);
+ -ms-transform: skew(20deg) rotate(9deg);
+ transform: skew(20deg) rotate(9deg);
+ -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7);
+ box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7);
+}
+
+.pressthis a span {
+ display: inline-block;
+ margin: 0px 0 0;
+ padding: 0px 9px 8px 12px;
+}
+
+.pressthis a span:before {
+ color: #777;
+ font: normal 20px/1 'dashicons';
+ content:'\f157';
+ position: relative;
+ display: inline-block;
+ top: 4px;
+ margin-left: 4px;
+}
+
+.pressthis a:after {
+ content: '';
+ width: 70%;
+ height: 55%;
+ z-index: -1;
+ position: absolute;
+ left: 10px;
+ bottom: 9px;
+ background: transparent;
+ -webkit-transform: skew(20deg) rotate(6deg);
+ -ms-transform: skew(20deg) rotate(6deg);
+ transform: skew(20deg) rotate(6deg);
+ -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6);
+ box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6);
+}
+
+/*------------------------------------------------------------------------------
+ 20.0 - Settings
+------------------------------------------------------------------------------*/
+
+#utc-time, #local-time {
+ padding-right: 25px;
+ font-style: italic;
+}
+
+.defaultavatarpicker .avatar {
+ margin: 2px 0;
+ vertical-align: middle;
+}
+
+.options-general-php .spinner {
+ float: none;
+ margin: -3px 3px;
+}
+
+.settings-php .language-install-spinner,
+.options-general-php .language-install-spinner {
+ display: inline-block;
+ float: none;
+ margin: -3px 5px 0;
+ vertical-align: middle;
+}
+
+/*------------------------------------------------------------------------------
+ 21.0 - Network Admin
+------------------------------------------------------------------------------*/
+
+.form-field #site-address {
+ max-width: 25em;
+}
+
+.form-field #domain {
+ max-width: 22em;
+}
+
+.form-field #site-title,
+.form-field #admin-email,
+.form-field #path,
+.form-field #blog_registered,
+.form-field #blog_last_updated {
+ max-width: 25em;
+}
+
+.form-field #path {
+ margin-bottom: 5px;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@media screen and ( max-width: 782px ) {
+ /* Input Elements */
+ textarea {
+ -webkit-appearance: none;
+ }
+
+ input[type="text"],
+ input[type="email"],
+ input[type="search"],
+ input[type="password"],
+ input[type="number"] {
+ -webkit-appearance: none;
+ padding: 6px 10px;
+ }
+
+ input.code {
+ padding-bottom: 5px;
+ padding-top: 10px;
+ }
+
+ input[type="checkbox"], .widefat th input[type="checkbox"] {
+ -webkit-appearance: none;
+ padding: 10px;
+ }
+
+ .widefat th input[type="checkbox"] {
+ margin-bottom: 8px;
+ }
+
+ input[type="checkbox"]:checked:before, .widefat th input[type="checkbox"]:before {
+ font: normal 30px/1 'Dashicons';
+ margin: -3px -5px;
+ }
+
+ input[type="radio"],
+ input[type="checkbox"] {
+ height: 25px;
+ width: 25px;
+ }
+
+ .wp-admin p input[type="checkbox"],
+ .wp-admin p input[type="radio"] {
+ margin-top: -3px;
+ }
+
+ input[type="radio"]:checked:before {
+ vertical-align: middle;
+ width: 9px;
+ height: 9px;
+ margin: 7px;
+ line-height: 16px;
+ }
+
+ .wp-upload-form input[type="submit"] {
+ margin-top: 10px;
+ }
+
+ #wpbody select {
+ height: 36px;
+ font-size: 16px;
+ }
+
+ .wp-admin .button-cancel {
+ padding: 0;
+ font-size: 14px;
+ }
+
+ #createuser .form-field input {
+ width: 100%;
+ }
+
+ .form-table {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ .form-table th,
+ .form-table td {
+ display: block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .form-table .color-palette td {
+ display: table-cell;
+ width: 15px;
+ }
+
+ .form-table table.color-palette {
+ margin-left: 10px;
+ }
+
+ textarea,
+ input {
+ font-size: 16px;
+ }
+
+ .form-table td input[type="text"],
+ .form-table td input[type="email"],
+ .form-table td input[type="password"],
+ .form-table td select,
+ .form-table td textarea,
+ .form-table span.description,
+ #profile-page .form-table textarea {
+ width: 100%;
+ font-size: 16px;
+ line-height: 1.5;
+ padding: 7px 10px;
+ display: block;
+ max-width: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ #wpbody .form-table td select {
+ height: 40px;
+ }
+
+ input[type="text"].small-text,
+ input[type="search"].small-text,
+ input[type="password"].small-text,
+ input[type="number"].small-text,
+ input[type="number"].small-text,
+ .form-table input[type="text"].small-text {
+ width: auto;
+ max-width: 55px;
+ display: inline;
+ padding: 3px 6px;
+ margin: 0 3px;
+ }
+
+ #pass-strength-result {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 8px;
+ }
+
+ p.search-box {
+ float: none;
+ position: absolute;
+ bottom: 0;
+ width: 98%;
+ height: 90px;
+ margin-bottom: 20px;
+ }
+
+ p.search-box input[name="s"] {
+ height: auto;
+ float: none;
+ width: 100%;
+ margin-bottom: 10px;
+ vertical-align: middle;
+ -webkit-appearance: none;
+ }
+
+ p.search-box input[type="submit"] {
+ margin-bottom: 10px;
+ }
+
+ .form-table span.description {
+ padding: 4px 0 0;
+ line-height: 1.4em;
+ }
+
+ .form-table th {
+ padding-top: 10px;
+ padding-bottom: 0;
+ border-bottom: 0;
+ }
+
+ .form-table td {
+ padding-top: 8px;
+ padding-right: 0;
+ }
+
+ .form-table input.regular-text {
+ width: 100%;
+ }
+
+ .form-table label {
+ font-size: 14px;
+ }
+
+ .form-table fieldset label {
+ display: block;
+ }
+
+ #utc-time {
+ margin-top: 10px;
+ }
+
+ #utc-time,
+ #local-time {
+ display: block;
+ float: none;
+ padding: 0;
+ line-height: 2;
+ }
+
+ .form-field #domain {
+ max-width: none;
+ }
+}
+
+@media only screen and (max-width: 768px) {
+ .form-field input[type="text"],
+ .form-field input[type="email"],
+ .form-field input[type="password"],
+ .form-field select,
+ .form-field textarea {
+ width: 99%;
+ }
+
+ .form-wrap .form-field {
+ padding:0;
+ }
+
+ /* users */
+ #profile-page .form-table textarea {
+ max-width: 400px;
+ width: auto;
+ }
+}
+
+/* Smartphone */
+@media screen and (max-width: 600px) {
+ /* Color Picker Options */
+ .color-option {
+ width: 49%;
+ }
+}
+
diff --git a/wp-admin/css/forms.css b/wp-admin/css/forms.css
new file mode 100644
index 0000000..a5a19e4
--- /dev/null
+++ b/wp-admin/css/forms.css
@@ -0,0 +1,1040 @@
+/* Include margin and padding in the width calculation of input and textarea. */
+input,
+textarea {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type="text"],
+input[type="password"],
+input[type="checkbox"],
+input[type="color"],
+input[type="date"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="email"],
+input[type="month"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="radio"],
+input[type="tel"],
+input[type="text"],
+input[type="time"],
+input[type="url"],
+input[type="week"],
+select,
+textarea {
+ border: 1px solid #ddd;
+ -webkit-box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.07 );
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.07 );
+ background-color: #fff;
+ color: #333;
+ outline: none;
+ -webkit-transition: 0.05s border-color ease-in-out;
+ transition: 0.05s border-color ease-in-out;
+}
+
+input[type="text"]:focus,
+input[type="password"]:focus,
+input[type="color"]:focus,
+input[type="date"]:focus,
+input[type="datetime"]:focus,
+input[type="datetime-local"]:focus,
+input[type="email"]:focus,
+input[type="month"]:focus,
+input[type="number"]:focus,
+input[type="password"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="text"]:focus,
+input[type="time"]:focus,
+input[type="url"]:focus,
+input[type="week"]:focus,
+input[type="checkbox"]:focus,
+input[type="radio"]:focus,
+select:focus,
+textarea:focus {
+ border-color: #5b9dd9;
+ -webkit-box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+ box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+}
+
+/* @noflip */
+input[type="email"],
+input[type="url"] {
+ direction: ltr;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ border: 1px solid #bbb;
+ background: #fff;
+ color: #555;
+ clear: none;
+ cursor: pointer;
+ display: inline-block;
+ line-height: 0;
+ height: 16px;
+ margin: -4px 4px 0 0;
+ outline: 0;
+ padding: 0 !important;
+ text-align: center;
+ vertical-align: middle;
+ width: 16px;
+ min-width: 16px;
+ -webkit-appearance: none;
+ -webkit-box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.1 );
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.1 );
+ -webkit-transition: .05s border-color ease-in-out;
+ transition: .05s border-color ease-in-out;
+}
+
+input[type="radio"]:checked + label:before {
+ color: #888;
+}
+
+.wp-core-ui input[type="reset"]:hover,
+.wp-core-ui input[type="reset"]:active {
+ color: #2ea2cc;
+}
+
+td > input[type="checkbox"],
+.wp-admin p input[type="checkbox"],
+.wp-admin p input[type="radio"] {
+ margin-top: 0;
+}
+
+.wp-admin p label input[type="checkbox"] {
+ margin-top: -4px;
+}
+
+.wp-admin p label input[type="radio"] {
+ margin-top: -2px;
+}
+
+input[type="radio"] {
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ margin-right: 4px;
+ line-height: 10px;
+}
+
+input[type="checkbox"]:checked:before,
+input[type="radio"]:checked:before {
+ float: left;
+ display: inline-block;
+ vertical-align: middle;
+ width: 16px;
+ font: normal 21px/1 'dashicons';
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+input[type="checkbox"]:checked:before {
+ content: '\f147';
+ margin: -3px 0 0 -4px;
+ color: #1e8cbe;
+}
+
+input[type="radio"]:checked:before {
+ content: '\2022';
+ text-indent: -9999px;
+ -webkit-border-radius: 50px;
+ border-radius: 50px;
+ font-size: 24px;
+ width: 6px;
+ height: 6px;
+ margin: 4px;
+ line-height: 16px;
+ background-color: #1e8cbe;
+}
+
+@-moz-document url-prefix() {
+ input[type="checkbox"],
+ input[type="radio"],
+ .form-table input.tog {
+ margin-bottom: -1px;
+ }
+}
+
+/* Search */
+input[type="search"] {
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-decoration {
+ display: none;
+}
+
+.ie8 input[type="password"] {
+ font-family: sans-serif;
+}
+
+textarea,
+input,
+select,
+button {
+ font-family: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+textarea,
+input,
+select {
+ font-size: 14px;
+ padding: 3px 5px;
+ -webkit-border-radius: 0;
+ border-radius: 0; /* Reset mobile webkit's default element styling */
+}
+
+textarea {
+ overflow: auto;
+ padding: 2px 6px;
+ line-height: 1.4;
+}
+
+.wp-admin input[type="file"] {
+ padding: 3px 0;
+}
+
+label {
+ cursor: pointer;
+}
+
+input,
+select {
+ margin: 1px;
+ padding: 3px 5px;
+}
+
+input.code {
+ padding-top: 6px;
+}
+
+textarea.code {
+ line-height: 1.4;
+ padding: 4px 6px 1px 6px;
+}
+
+input.readonly,
+input[readonly],
+textarea.readonly,
+textarea[readonly] {
+ background-color: #eee;
+}
+
+:-moz-placeholder,
+.wp-core-ui :-moz-placeholder {
+ color: #a9a9a9;
+}
+
+.form-invalid {
+ background-color: #ffebe8 !important;
+}
+
+.form-invalid input,
+.form-invalid select {
+ border-color: #c00 !important;
+}
+
+.form-input-tip {
+ color: #666;
+}
+
+input:disabled,
+input.disabled,
+select:disabled,
+select.disabled,
+textarea:disabled,
+textarea.disabled {
+ background: rgba( 255, 255, 255, 0.5 );
+ border-color: rgba( 222, 222, 222, 0.75 );
+ -webkit-box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.04 );
+ box-shadow: inset 0 1px 2px rgba( 0, 0, 0, 0.04 );
+ color: rgba( 51, 51, 51, 0.5 );
+}
+
+input[type="file"]:disabled,
+input[type="file"].disabled,
+input[type="range"]:disabled,
+input[type="range"].disabled {
+ background: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+input[type="checkbox"]:disabled,
+input[type="checkbox"].disabled,
+input[type="radio"]:disabled,
+input[type="radio"].disabled,
+input[type="checkbox"]:disabled:checked:before,
+input[type="checkbox"].disabled:checked:before,
+input[type="radio"]:disabled:checked:before,
+input[type="radio"].disabled:checked:before {
+ opacity: 0.7;
+}
+
+/*------------------------------------------------------------------------------
+ 2.0 - Forms
+------------------------------------------------------------------------------*/
+
+
+.wp-admin select {
+ padding: 2px;
+ line-height: 28px;
+ height: 28px;
+ vertical-align: middle;
+}
+
+.wp-admin .button-cancel {
+ padding: 0 5px;
+ line-height: 2;
+}
+
+.meta-box-sortables select {
+ max-width: 100%;
+}
+
+.wp-admin select[multiple] {
+ height: auto;
+}
+
+.submit {
+ padding: 1.5em 0;
+ margin: 5px 0;
+ -webkit-border-bottom-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+ -webkit-border-bottom-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ border: none;
+}
+
+form p.submit a.cancel:hover {
+ text-decoration: none;
+}
+
+p.submit {
+ text-align: left;
+ max-width: 100%;
+ margin-top: 20px;
+ padding-top: 10px;
+}
+
+.textright p.submit {
+ border: none;
+ text-align: right;
+}
+
+table.form-table + p.submit,
+table.form-table + input + p.submit,
+table.form-table + input + input + p.submit {
+ border-top: none;
+ padding-top: 0;
+}
+
+#minor-publishing-actions input,
+#major-publishing-actions input,
+#minor-publishing-actions .preview {
+ text-align: center;
+}
+
+textarea.all-options,
+input.all-options {
+ width: 250px;
+}
+
+input.large-text,
+textarea.large-text {
+ width: 99%;
+}
+
+input.regular-text,
+#adduser .form-field input {
+ width: 25em;
+}
+
+input.small-text {
+ width: 50px;
+ padding: 1px 6px;
+}
+
+input[type="number"].small-text {
+ width: 65px;
+}
+
+#doaction,
+#doaction2,
+#post-query-submit {
+ margin: 1px 8px 0 0;
+}
+
+.tablenav #changeit,
+.tablenav #delete_all,
+.tablenav #clear-recent-list,
+.wp-filter #delete_all {
+ margin-top: 1px;
+}
+
+.tablenav .actions select {
+ float: left;
+ margin-right: 6px;
+ max-width: 200px;
+}
+
+.ie8 .tablenav .actions select {
+ width: 155px;
+}
+
+.ie8 .tablenav .actions select#cat {
+ width: 200px;
+}
+
+#timezone_string option {
+ margin-left: 1em;
+}
+
+#upload-form label {
+ color: #777;
+}
+
+label,
+#your-profile label + a {
+ vertical-align: middle;
+}
+
+fieldset label,
+#your-profile label + a {
+ vertical-align: middle;
+}
+
+.options-media-php label[for*="_size_"],
+#misc-publishing-actions label {
+ vertical-align: baseline;
+}
+
+#misc-publishing-actions label[for="post_status"]:before {
+ content: '\f173';
+ display: inline-block;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ left: -1px;
+ padding: 0 5px 0 0;
+ position: relative;
+ top: 0;
+ text-decoration: none !important;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+#pass-strength-result {
+ background-color: #eee;
+ border: 1px solid #ddd;
+ float: left;
+ margin: 13px 5px 5px 1px;
+ padding: 3px 5px;
+ text-align: center;
+ width: 200px;
+ display: none;
+}
+
+#pass-strength-result.short {
+ background-color: #ffa0a0;
+ border-color: #f04040;
+}
+
+#pass-strength-result.bad {
+ background-color: #ffb78c;
+ border-color: #ff853c;
+}
+
+#pass-strength-result.good {
+ background-color: #ffec8b;
+ border-color: #fc0;
+}
+
+#pass-strength-result.strong {
+ background-color: #c3ff88;
+ border-color: #8dff1c;
+}
+
+.indicator-hint {
+ padding-top: 8px;
+}
+
+p.search-box {
+ float: right;
+ margin: 0;
+}
+
+.network-admin.themes-php p.search-box {
+ clear: left;
+}
+
+.search-box input[name="s"],
+.tablenav .search-plugins input[name="s"],
+.tagsdiv .newtag {
+ float: left;
+ height: 28px;
+ margin: 0 4px 0 0;
+}
+
+input[type="text"].ui-autocomplete-loading {
+ background: transparent url(../images/loading.gif) no-repeat right center;
+ visibility: visible;
+}
+
+ul#add-to-blog-users {
+ margin: 0 0 0 14px;
+}
+
+.ui-autocomplete-input.open {
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.ui-autocomplete {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ position: absolute;
+ z-index: 10000;
+ -webkit-border-bottom-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ -webkit-border-bottom-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+ border: 1px solid #aaa;
+ background-color: #efefef;
+}
+
+.ui-autocomplete li {
+ margin-bottom: 0;
+ white-space: nowrap;
+ text-align: left;
+}
+
+.ui-autocomplete li a {
+ display: block;
+ height: 100%;
+ padding: 4px 10px;
+ color: #444;
+}
+
+.ui-autocomplete li a.ui-state-focus {
+ background-color: #ddd;
+ cursor: pointer;
+}
+
+/*------------------------------------------------------------------------------
+ 15.0 - Comments Screen
+------------------------------------------------------------------------------*/
+
+.form-table {
+ border-collapse: collapse;
+ margin-top: 0.5em;
+ width: 100%;
+ clear: both;
+}
+
+.form-table,
+.form-table td,
+.form-table th,
+.form-table td p,
+.form-wrap label {
+ font-size: 14px;
+}
+
+.form-table td {
+ margin-bottom: 9px;
+ padding: 15px 10px;
+ line-height: 1.3;
+ vertical-align: middle;
+}
+
+.form-table th,
+.form-wrap label {
+ color: #222;
+ font-weight: normal;
+ text-shadow: none;
+ vertical-align: baseline;
+}
+
+.form-table th {
+ vertical-align: top;
+ text-align: left;
+ padding: 20px 10px 20px 0;
+ width: 200px;
+ line-height: 1.3;
+ font-weight: 600;
+}
+
+.form-table th.th-full {
+ width: auto;
+ font-weight: 400;
+}
+
+.form-table td p {
+ margin-top: 4px;
+ margin-bottom: 0;
+}
+
+.form-table td fieldset label {
+ margin: 0.25em 0 0.5em !important;
+ display: inline-block;
+}
+
+.form-table td fieldset label,
+.form-table td fieldset p,
+.form-table td fieldset li {
+ line-height: 1.4em;
+}
+
+.form-table input.tog,
+.form-table input[type="radio"] {
+ margin-top: -4px;
+ margin-right: 4px;
+ float: none;
+}
+
+.form-table .pre {
+ padding: 8px;
+ margin: 0;
+}
+
+table.form-table td .updated {
+ font-size: 13px;
+}
+
+table.form-table td .updated p {
+ font-size: 13px;
+ margin: 0.3em 0;
+}
+
+/*------------------------------------------------------------------------------
+ 18.0 - Users
+------------------------------------------------------------------------------*/
+
+#profile-page .form-table textarea {
+ width: 500px;
+ margin-bottom: 6px;
+}
+
+#profile-page .form-table #rich_editing {
+ margin-right: 5px
+}
+
+#your-profile legend {
+ font-size: 22px;
+}
+
+#display_name {
+ width: 15em;
+}
+
+#createuser .form-field input {
+ width: 25em;
+}
+
+.color-option {
+ display: inline-block;
+ width: 24%;
+ padding: 5px 15px 15px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-bottom: 3px;
+}
+
+.color-option:hover,
+.color-option.selected {
+ background: #ddd;
+}
+
+.color-palette {
+ width: 100%;
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+.color-palette td {
+ height: 20px;
+ padding: 0;
+ border: none;
+}
+
+.color-option {
+ cursor: pointer;
+}
+
+/*------------------------------------------------------------------------------
+ 19.0 - Tools
+------------------------------------------------------------------------------*/
+
+.tool-box .title {
+ margin: 8px 0;
+ font-size: 18px;
+ font-weight: normal;
+ line-height: 24px;
+}
+
+.pressthis {
+ margin: 20px 0;
+}
+
+.pressthis a,
+.pressthis a:hover,
+.pressthis a:focus,
+.pressthis a:active {
+ display: inline-block;
+ position: relative;
+ cursor: move;
+ color: #333;
+ background: #e6e6e6;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ border: 1px solid #b4b4b4;
+ font-style: normal;
+ line-height: 16px;
+ font-size: 14px;
+ text-decoration: none;
+}
+
+.pressthis a:active {
+ outline: none;
+}
+
+.pressthis a:hover:after {
+ -webkit-transform: skew(20deg) rotate(9deg);
+ -ms-transform: skew(20deg) rotate(9deg);
+ transform: skew(20deg) rotate(9deg);
+ -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7);
+ box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7);
+}
+
+.pressthis a span {
+ display: inline-block;
+ margin: 0px 0 0;
+ padding: 0px 12px 8px 9px;
+}
+
+.pressthis a span:before {
+ color: #777;
+ font: normal 20px/1 'dashicons';
+ content:'\f157';
+ position: relative;
+ display: inline-block;
+ top: 4px;
+ margin-right: 4px;
+}
+
+.pressthis a:after {
+ content: '';
+ width: 70%;
+ height: 55%;
+ z-index: -1;
+ position: absolute;
+ right: 10px;
+ bottom: 9px;
+ background: transparent;
+ -webkit-transform: skew(20deg) rotate(6deg);
+ -ms-transform: skew(20deg) rotate(6deg);
+ transform: skew(20deg) rotate(6deg);
+ -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6);
+ box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6);
+}
+
+/*------------------------------------------------------------------------------
+ 20.0 - Settings
+------------------------------------------------------------------------------*/
+
+#utc-time, #local-time {
+ padding-left: 25px;
+ font-style: italic;
+}
+
+.defaultavatarpicker .avatar {
+ margin: 2px 0;
+ vertical-align: middle;
+}
+
+.options-general-php .spinner {
+ float: none;
+ margin: -3px 3px;
+}
+
+.settings-php .language-install-spinner,
+.options-general-php .language-install-spinner {
+ display: inline-block;
+ float: none;
+ margin: -3px 5px 0;
+ vertical-align: middle;
+}
+
+/*------------------------------------------------------------------------------
+ 21.0 - Network Admin
+------------------------------------------------------------------------------*/
+
+.form-field #site-address {
+ max-width: 25em;
+}
+
+.form-field #domain {
+ max-width: 22em;
+}
+
+.form-field #site-title,
+.form-field #admin-email,
+.form-field #path,
+.form-field #blog_registered,
+.form-field #blog_last_updated {
+ max-width: 25em;
+}
+
+.form-field #path {
+ margin-bottom: 5px;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@media screen and ( max-width: 782px ) {
+ /* Input Elements */
+ textarea {
+ -webkit-appearance: none;
+ }
+
+ input[type="text"],
+ input[type="email"],
+ input[type="search"],
+ input[type="password"],
+ input[type="number"] {
+ -webkit-appearance: none;
+ padding: 6px 10px;
+ }
+
+ input.code {
+ padding-bottom: 5px;
+ padding-top: 10px;
+ }
+
+ input[type="checkbox"], .widefat th input[type="checkbox"] {
+ -webkit-appearance: none;
+ padding: 10px;
+ }
+
+ .widefat th input[type="checkbox"] {
+ margin-bottom: 8px;
+ }
+
+ input[type="checkbox"]:checked:before, .widefat th input[type="checkbox"]:before {
+ font: normal 30px/1 'Dashicons';
+ margin: -3px -5px;
+ }
+
+ input[type="radio"],
+ input[type="checkbox"] {
+ height: 25px;
+ width: 25px;
+ }
+
+ .wp-admin p input[type="checkbox"],
+ .wp-admin p input[type="radio"] {
+ margin-top: -3px;
+ }
+
+ input[type="radio"]:checked:before {
+ vertical-align: middle;
+ width: 9px;
+ height: 9px;
+ margin: 7px;
+ line-height: 16px;
+ }
+
+ .wp-upload-form input[type="submit"] {
+ margin-top: 10px;
+ }
+
+ #wpbody select {
+ height: 36px;
+ font-size: 16px;
+ }
+
+ .wp-admin .button-cancel {
+ padding: 0;
+ font-size: 14px;
+ }
+
+ #createuser .form-field input {
+ width: 100%;
+ }
+
+ .form-table {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ .form-table th,
+ .form-table td {
+ display: block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .form-table .color-palette td {
+ display: table-cell;
+ width: 15px;
+ }
+
+ .form-table table.color-palette {
+ margin-right: 10px;
+ }
+
+ textarea,
+ input {
+ font-size: 16px;
+ }
+
+ .form-table td input[type="text"],
+ .form-table td input[type="email"],
+ .form-table td input[type="password"],
+ .form-table td select,
+ .form-table td textarea,
+ .form-table span.description,
+ #profile-page .form-table textarea {
+ width: 100%;
+ font-size: 16px;
+ line-height: 1.5;
+ padding: 7px 10px;
+ display: block;
+ max-width: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ #wpbody .form-table td select {
+ height: 40px;
+ }
+
+ input[type="text"].small-text,
+ input[type="search"].small-text,
+ input[type="password"].small-text,
+ input[type="number"].small-text,
+ input[type="number"].small-text,
+ .form-table input[type="text"].small-text {
+ width: auto;
+ max-width: 55px;
+ display: inline;
+ padding: 3px 6px;
+ margin: 0 3px;
+ }
+
+ #pass-strength-result {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 8px;
+ }
+
+ p.search-box {
+ float: none;
+ position: absolute;
+ bottom: 0;
+ width: 98%;
+ height: 90px;
+ margin-bottom: 20px;
+ }
+
+ p.search-box input[name="s"] {
+ height: auto;
+ float: none;
+ width: 100%;
+ margin-bottom: 10px;
+ vertical-align: middle;
+ -webkit-appearance: none;
+ }
+
+ p.search-box input[type="submit"] {
+ margin-bottom: 10px;
+ }
+
+ .form-table span.description {
+ padding: 4px 0 0;
+ line-height: 1.4em;
+ }
+
+ .form-table th {
+ padding-top: 10px;
+ padding-bottom: 0;
+ border-bottom: 0;
+ }
+
+ .form-table td {
+ padding-top: 8px;
+ padding-left: 0;
+ }
+
+ .form-table input.regular-text {
+ width: 100%;
+ }
+
+ .form-table label {
+ font-size: 14px;
+ }
+
+ .form-table fieldset label {
+ display: block;
+ }
+
+ #utc-time {
+ margin-top: 10px;
+ }
+
+ #utc-time,
+ #local-time {
+ display: block;
+ float: none;
+ padding: 0;
+ line-height: 2;
+ }
+
+ .form-field #domain {
+ max-width: none;
+ }
+}
+
+@media only screen and (max-width: 768px) {
+ .form-field input[type="text"],
+ .form-field input[type="email"],
+ .form-field input[type="password"],
+ .form-field select,
+ .form-field textarea {
+ width: 99%;
+ }
+
+ .form-wrap .form-field {
+ padding:0;
+ }
+
+ /* users */
+ #profile-page .form-table textarea {
+ max-width: 400px;
+ width: auto;
+ }
+}
+
+/* Smartphone */
+@media screen and (max-width: 600px) {
+ /* Color Picker Options */
+ .color-option {
+ width: 49%;
+ }
+}
+
diff --git a/wp-admin/css/ie-rtl.css b/wp-admin/css/ie-rtl.css
new file mode 100644
index 0000000..590d44e
--- /dev/null
+++ b/wp-admin/css/ie-rtl.css
@@ -0,0 +1,785 @@
+/* Fixes for IE 7 bugs */
+
+#dashboard-widgets form .input-text-wrap input,
+#dashboard-widgets form .textarea-wrap textarea {
+ width: 99%;
+}
+
+#dashboard-widgets form #title {
+ width: 98%;
+}
+
+#wpbody-content #dashboard-widgets .postbox-container {
+ width: 49.5%;
+}
+
+#wpbody-content #dashboard-widgets #postbox-container-2,
+#wpbody-content #dashboard-widgets #postbox-container-3,
+#wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: left;
+ width: 50.5%;
+}
+
+#dashboard-widgets #postbox-container-3 .empty-container,
+#dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+}
+
+.wp-editor-wrap .wp-editor-tools,
+.wp-editor-wrap .wp-switch-editor,
+.wp-editor-wrap .wp-editor-tabs,
+.wp-editor-wrap .wp-editor-container {
+ zoom: 100%;
+}
+
+.wp-editor-wrap .wp-editor-container textarea.wp-editor-area {
+ width: 97%;
+}
+
+#post-body.columns-2 #postbox-container-1 {
+ padding-right: 19px;
+}
+
+.welcome-panel .wp-badge {
+ position: absolute;
+}
+
+.welcome-panel .welcome-panel-column:first-child {
+ width: 35%;
+}
+
+.wp-fullscreen-title {
+ width: 97%;
+}
+
+#wp_mce_fullscreen_ifr {
+ background-color: #f9f9f9;
+}
+
+#wp-fullscreen-tagline {
+ color: #888;
+ font-size: 14px;
+}
+
+#adminmenuback {
+ right: 0;
+ background-image: none;
+}
+
+#adminmenuwrap {
+ position: static;
+}
+
+#adminmenu {
+ position: relative;
+}
+
+#adminmenu,
+#adminmenu a {
+ cursor: pointer;
+}
+
+#adminmenu li.wp-menu-separator,
+#adminmenu li.wp-menu-separator-last {
+ font-size: 1px;
+ line-height: 1;
+}
+
+#adminmenu a.menu-top {
+ border-bottom: 0 none;
+ border-top: 1px solid #ddd;
+}
+
+#adminmenu .separator {
+ font-size: 1px;
+ line-height: 1px;
+}
+
+#adminmenu .wp-submenu {
+ right: 110px;
+}
+
+#adminmenu .wp-submenu ul {
+ margin: 0;
+}
+
+.folded #wpcontent,
+.folded #wpfooter {
+ margin-right: 170px;
+}
+
+.folded #adminmenuback,
+.folded #adminmenuwrap,
+.folded #adminmenu,
+.folded #adminmenu li.menu-top {
+ width: 150px;
+}
+
+.folded #adminmenu .wp-submenu {
+ border-top-color: transparent;
+}
+
+.folded #adminmenu .wp-menu-name {
+ display: block;
+}
+
+.folded #adminmenu .wp-submenu.sub-open,
+.folded #adminmenu .opensub .wp-submenu {
+ right: 110px;
+}
+
+.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu {
+ top: -1px;
+ position: relative;
+}
+
+.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head {
+ background-color: transparent;
+}
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ border-top-color: #ddd;
+}
+
+.folded #adminmenu .wp-submenu ul {
+ margin-right: 5px;
+}
+
+#adminmenu li.menu-top {
+ margin-bottom: -2px;
+}
+
+#adminmenu .wp-menu-arrow {
+ display: none !important;
+}
+
+.js.folded #adminmenu li.menu-top {
+ display: block;
+ zoom: 100%;
+}
+
+ul#adminmenu {
+ z-index: 99;
+}
+
+#adminmenu li.menu-top a.menu-top {
+ min-width: auto;
+ width: auto;
+}
+
+#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu {
+ font-style: normal;
+}
+
+#wpcontent #adminmenu .wp-submenu li {
+ padding: 0;
+}
+
+#adminmenu li.wp-has-current-submenu .wp-submenu {
+ right: -40px;
+}
+
+#adminmenu .wp-menu-image {
+ display: none !important;
+}
+
+#adminmenu a.menu-top .wp-menu-name {
+ padding-right: 8px;
+}
+
+#collapse-menu {
+ line-height: 23px;
+}
+
+#wpadminbar .ab-comments-icon {
+ padding-top: 7px;
+}
+
+
+.theme-browser .theme {
+ width: 30%;
+ margin: 0 0 4% 3%;
+ cursor: auto;
+}
+
+.theme-browser .theme:hover,
+.theme-browser .theme:focus {
+ cursor: auto;
+}
+
+.theme-browser .theme .theme-screenshot {
+ height: 180px;
+}
+
+.theme-browser .theme .theme-actions {
+ position: static;
+ background-color: #e8e8e8;
+}
+
+.theme-browser .theme .more-details {
+ display: none;
+}
+
+.plugins td,
+.plugins th {
+ border-top: 1px solid #ddd;
+}
+
+table.fixed th,
+table.fixed td {
+ border-top: 1px solid #ddd;
+}
+
+#wpbody-content input.button,
+#wpbody-content input.button-primary,
+#wpbody-content input.button-secondary {
+ overflow: visible;
+}
+
+#dashboard-widgets h3 a {
+ height: 14px;
+ line-height: 14px;
+}
+
+#dashboard_browser_nag {
+ color: #fff;
+}
+
+#dashboard_browser_nag .browser-icon {
+ position: relative;
+}
+
+.tablenav-pages .current-page {
+ vertical-align: middle;
+}
+
+#wpbody-content .postbox {
+ border: 1px solid #dfdfdf;
+}
+
+#wpbody-content .postbox .hndle {
+ margin-bottom: -1px;
+}
+
+.major-publishing-actions,
+.wp-submenu,
+.wp-submenu li,
+#template,
+#template div,
+#editcat,
+#addcat {
+ zoom: 100%;
+}
+
+.wp-menu-arrow {
+ height: 28px;
+}
+
+.submitbox {
+ margin-top: 10px;
+}
+
+/* Inline Editor */
+#wpbody-content .quick-edit-row-post .inline-edit-col-left {
+ width: 39%;
+}
+
+#wpbody-content .inline-edit-row-post .inline-edit-col-center {
+ width: 19%;
+}
+
+#wpbody-content .quick-edit-row-page .inline-edit-col-left {
+ width: 49%;
+}
+
+#wpbody-content .bulk-edit-row .inline-edit-col-left {
+ width: 29%;
+}
+
+.inline-edit-row p.submit {
+ zoom: 100%;
+}
+
+.inline-edit-row fieldset label span.title {
+ display: block;
+ float: right;
+ width: 5em;
+}
+
+.inline-edit-row fieldset label span.input-text-wrap {
+ margin-right: 0;
+ zoom: 100%;
+}
+
+#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input {
+ line-height: 130%;
+}
+
+#wpbody-content .inline-edit-row .input-text-wrap input {
+ width: 95%;
+}
+
+#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input {
+ width: 8em;
+}
+/* end Inline Editor */
+
+#titlediv #title {
+ width: 98%;
+}
+
+.button,
+input[type="reset"],
+input[type="button"],
+input[type="submit"] {
+ padding: 0 8px;
+ line-height: 20px;
+ height: auto;
+}
+
+.button.button-large,
+input[type="reset"].button-large,
+input[type="button"].button-large,
+input[type="submit"].button-large {
+ padding: 0 10px;
+ line-height: 24px;
+ height: auto;
+}
+
+.button.button-small,
+input[type="reset"].button-small,
+input[type="button"].button-small,
+input[type="submit"].button-small {
+ padding: 0 6px;
+ line-height: 16px;
+ height: auto;
+}
+
+a.button {
+ margin: 1px;
+ padding: 1px 9px 2px;
+}
+
+a.button.button-large {
+ padding: 1px 11px 2px;
+}
+
+a.button.button-small {
+ padding: 1px 7px 2px;
+}
+
+#screen-options-wrap {
+ overflow: hidden;
+}
+
+#the-comment-list .comment-item,
+#post-status-info,
+#wpwrap,
+#wrap,
+#postdivrich,
+#postdiv,
+#poststuff,
+.metabox-holder,
+#titlediv,
+#post-body,
+#editorcontainer,
+.tablenav,
+.widget-liquid-left,
+.widget-liquid-right,
+#widgets-left,
+.widgets-sortables,
+#dragHelper,
+.widget .widget-top,
+.widget-control-actions,
+.tagchecklist,
+#col-container,
+#col-left,
+#col-right,
+.fileedit-sub {
+ display: block;
+ zoom: 100%;
+}
+
+p.search-box {
+ position: static;
+ float: left;
+ margin: -3px 0 4px;
+}
+
+#widget-list .widget,
+.feature-filter .feature-group li {
+ display: inline;
+}
+
+.feature-filter .feature-group li input {
+ vertical-align: middle;
+}
+
+#editorcontainer #content {
+ overflow: auto;
+ margin: auto;
+ width: 98%;
+}
+
+form#template div {
+ width: 100%;
+}
+
+.wp-editor-container .quicktags-toolbar input {
+ overflow: visible;
+ padding: 0 4px;
+}
+
+#poststuff h2 {
+ font-size: 1.6em;
+}
+
+#poststuff .inside #parent_id,
+#poststuff .inside #page_template,
+.inline-edit-row #post_parent,
+.inline-edit-row select[name="page_template"] {
+ width: 250px;
+}
+
+#submitdiv input,
+#submitdiv select,
+#submitdiv a.button {
+ position: relative;
+}
+
+#bh {
+ margin: 7px 0 0 10px;
+ float: left;
+}
+
+/* without this dashboard widgets appear in one column for some screen widths */
+div#dashboard-widgets {
+ padding-left: 1px;
+}
+
+.tagchecklist span, .tagchecklist span a {
+ display: inline-block;
+ display: block;
+}
+
+.tablenav .button-secondary,
+.nav .button-secondary {
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+.tablenav select {
+ font-size: 13px;
+ display: inline-block;
+ vertical-align: top;
+ margin-top: 2px;
+}
+
+.tablenav .actions select {
+ width: 155px;
+}
+
+.subsubsub li {
+ display: inline;
+}
+
+a.post-state-format {
+ text-indent: 0;
+ line-height: 0;
+ font-size: 0;
+}
+
+table.ie-fixed {
+ table-layout: fixed;
+}
+
+.widefat tr,
+.widefat th {
+ margin-bottom: 0;
+ border-spacing: 0;
+}
+
+.widefat th input {
+ margin: 0 5px 0 0;
+}
+
+.widefat thead .check-column,
+.widefat tfoot .check-column {
+ padding-top: 6px;
+}
+
+.widefat tbody th.check-column,
+.media.widefat tbody th.check-column {
+ padding: 4px 0 0;
+}
+
+.widefat {
+ empty-cells: show;
+ border-collapse: collapse;
+}
+
+.tablenav a.button-secondary {
+ display: inline-block;
+ padding: 2px 5px;
+}
+
+.inactive-sidebar .widgets-sortables {
+ padding-bottom: 8px;
+}
+
+#available-widgets .widget-holder {
+ padding-bottom: 65px;
+}
+
+#widgets-left .inactive {
+ padding-bottom: 10px;
+}
+
+.widget-liquid-right .widget,
+.inactive-sidebar .widget {
+ position: relative;
+}
+
+.inactive-sidebar .widget {
+ display: block;
+ float: right;
+}
+
+#wpcontent .button-primary-disabled {
+ color: #9FD0D5;
+ background: #298CBA;
+}
+
+#the-comment-list .unapproved tr,
+#the-comment-list .unapproved td {
+ background-color: #ffffe0;
+}
+
+.imgedit-submit {
+ width: 300px;
+}
+
+#nav-menus-frame,
+#wpbody,
+.menu li {
+ zoom: 100%;
+}
+
+#update-nav-menu #post-body {
+ overflow:hidden;
+}
+
+.menu li {
+ min-width: 100%;
+}
+
+.menu li.sortable-placeholder {
+ min-width: 400px;
+}
+
+.available-theme {
+ display: inline;
+}
+
+.available-theme ul {
+ margin: 0;
+}
+
+.available-theme .action-links li {
+ padding-left: 7px;
+ margin-left: 7px;
+}
+
+.about-wrap .three-col.about-updates .col-2 {
+ width: 15%;
+}
+
+.about-wrap .about-password-meter input {
+ width: 98%;
+}
+
+.revisions-tickmarks,
+.revisions-tooltip {
+ display: none !important;
+}
+
+.revisions.pinned .revisions-controls {
+ position: relative;
+}
+
+input[type="password"],
+.login form .input {
+ font-family: sans-serif;
+}
+
+/* TinyMCE icons */
+.mce-btn i.mce-i-bold,
+.mce-btn i.mce-i-italic,
+.mce-btn i.mce-i-bullist,
+.mce-btn i.mce-i-numlist,
+.mce-btn i.mce-i-blockquote,
+.mce-btn i.mce-i-alignleft,
+.mce-btn i.mce-i-aligncenter,
+.mce-btn i.mce-i-alignright,
+.mce-btn i.mce-i-link,
+.mce-btn i.mce-i-unlink,
+.mce-btn i.mce-i-wp_more,
+.mce-btn i.mce-i-strikethrough,
+.mce-btn i.mce-i-spellchecker,
+.mce-btn i.mce-i-fullscreen,
+.mce-btn i.mce-i-wp_fullscreen,
+.mce-btn i.mce-i-wp_adv,
+.mce-btn i.mce-i-underline,
+.mce-btn i.mce-i-alignjustify,
+.mce-btn i.mce-i-forecolor,
+.mce-btn i.mce-i-pastetext,
+.mce-btn i.mce-i-pasteword,
+.mce-btn i.mce-i-removeformat,
+.mce-btn i.mce-i-charmap,
+.mce-btn i.mce-i-outdent,
+.mce-btn i.mce-i-indent,
+.mce-btn i.mce-i-undo,
+.mce-btn i.mce-i-redo,
+.mce-btn i.mce-i-help,
+.mce-btn i.mce-i-wp_help,
+.mce-btn i.mce-i-wp-media-library,
+.mce-btn i.mce-i-ltr,
+.mce-btn i.mce-i-wp_page,
+.mce-btn i.mce-i-hr,
+.mce-close {
+ font-family: 'tinymce', Arial;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ font-size: 16px;
+ margin-right: 0;
+ padding-left: 0;
+}
+
+.mce-btn i.mce-i-wp_fullscreen,
+.qt-fullscreen {
+ -ie7-icon: '\e023';
+}
+
+.mce-btn i.mce-i-wp_more,
+.mce-btn i.mce-i-wp_page {
+ -ie7-icon: '\e027';
+}
+
+.mce-btn i.mce-i-wp_adv {
+ background-color: #aaa;
+}
+
+.mce-btn i.mce-i-help,
+.mce-btn i.mce-i-wp_help {
+ -ie7-icon: '\e016';
+}
+
+
+/* IE6 leftovers */
+* html .row-actions {
+ visibility: visible;
+}
+
+* html div.widget-liquid-right,
+* html div.widget-liquid-right {
+ display: block;
+ position: relative;
+}
+
+* html #editorcontainer {
+ padding: 0;
+}
+
+* html #poststuff h2 {
+ margin-right: 0;
+}
+
+* html .stuffbox,
+* html .stuffbox input,
+* html .stuffbox textarea {
+ border: 1px solid #DFDFDF;
+}
+
+* html .feature-filter .feature-group li {
+ width: 145px;
+}
+
+* html div.widget-liquid-left {
+ width: 99%;
+}
+
+* html .widgets-sortables {
+ height: 50px;
+}
+
+* html a#content_resize {
+ left: -2px;
+}
+
+* html .widget-title h4 {
+ width: 205px;
+}
+
+* html #removing-widget .in-widget-title {
+ display: none;
+}
+
+* html .media-item .pinkynail {
+ height: 32px;
+ width: 40px;
+}
+
+* html .describe .field input.text,
+* html .describe .field textarea {
+ width: 440px;
+}
+
+* html input {
+ border: 1px solid #dfdfdf;
+}
+
+* html .edit-box {
+ display: inline;
+}
+
+* html .postbox-container .meta-box-sortables {
+ height: 300px;
+}
+
+* html #wpbody-content #screen-options-link-wrap {
+ display: inline-block;
+ width: 150px;
+ text-align: center;
+}
+
+* html #wpbody-content #contextual-help-link-wrap {
+ display: inline-block;
+ width: 100px;
+ text-align: center;
+}
+
+* html #adminmenu {
+ margin-right: -80px;
+}
+
+* html .folded #adminmenu {
+ margin-right: -22px;
+}
+
+* html #wpcontent #adminmenu li.menu-top {
+ display: inline;
+ padding: 0;
+ margin: 0;
+}
+
+* html #wpfooter {
+ margin: 0;
+}
+
+* html #adminmenu div.wp-menu-image {
+ height: 29px;
+}
diff --git a/wp-admin/css/ie-rtl.min.css b/wp-admin/css/ie-rtl.min.css
new file mode 100644
index 0000000..dee9313
--- /dev/null
+++ b/wp-admin/css/ie-rtl.min.css
@@ -0,0 +1 @@
+#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:99%}#dashboard-widgets form #title{width:98%}#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}.wp-editor-wrap .wp-editor-container,.wp-editor-wrap .wp-editor-tabs,.wp-editor-wrap .wp-editor-tools,.wp-editor-wrap .wp-switch-editor{zoom:100%}.wp-editor-wrap .wp-editor-container textarea.wp-editor-area{width:97%}#post-body.columns-2 #postbox-container-1{padding-right:19px}.welcome-panel .wp-badge{position:absolute}.welcome-panel .welcome-panel-column:first-child{width:35%}.wp-fullscreen-title{width:97%}#wp_mce_fullscreen_ifr{background-color:#f9f9f9}#wp-fullscreen-tagline{color:#888;font-size:14px}#adminmenuback{right:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu,#adminmenu a{cursor:pointer}#adminmenu li.wp-menu-separator,#adminmenu li.wp-menu-separator-last{font-size:1px;line-height:1}#adminmenu a.menu-top{border-bottom:0 none;border-top:1px solid #ddd}#adminmenu .separator{font-size:1px;line-height:1px}#adminmenu .wp-submenu{right:110px}#adminmenu .wp-submenu ul{margin:0}.folded #wpcontent,.folded #wpfooter{margin-right:170px}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:150px}.folded #adminmenu .wp-submenu{border-top-color:transparent}.folded #adminmenu .wp-menu-name{display:block}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open{right:110px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{top:-1px;position:relative}.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:transparent}#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#ddd}.folded #adminmenu .wp-submenu ul{margin-right:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu .wp-menu-arrow{display:none!important}.js.folded #adminmenu li.menu-top{display:block;zoom:100%}ul#adminmenu{z-index:99}#adminmenu li.menu-top a.menu-top{min-width:auto;width:auto}#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu{font-style:normal}#wpcontent #adminmenu .wp-submenu li{padding:0}#adminmenu li.wp-has-current-submenu .wp-submenu{right:-40px}#adminmenu .wp-menu-image{display:none!important}#adminmenu a.menu-top .wp-menu-name{padding-right:8px}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}.theme-browser .theme{width:30%;margin:0 0 4% 3%;cursor:auto}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:auto}.theme-browser .theme .theme-screenshot{height:180px}.theme-browser .theme .theme-actions{position:static;background-color:#e8e8e8}.theme-browser .theme .more-details{display:none}.plugins td,.plugins th,table.fixed td,table.fixed th{border-top:1px solid #ddd}#wpbody-content input.button,#wpbody-content input.button-primary,#wpbody-content input.button-secondary{overflow:visible}#dashboard-widgets h3 a{height:14px;line-height:14px}#dashboard_browser_nag{color:#fff}#dashboard_browser_nag .browser-icon{position:relative}.tablenav-pages .current-page{vertical-align:middle}#wpbody-content .postbox{border:1px solid #dfdfdf}#wpbody-content .postbox .hndle{margin-bottom:-1px}#addcat,#editcat,#template,#template div,.major-publishing-actions,.wp-submenu,.wp-submenu li{zoom:100%}.wp-menu-arrow{height:28px}.submitbox{margin-top:10px}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:19%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:29%}.inline-edit-row p.submit{zoom:100%}.inline-edit-row fieldset label span.title{display:block;float:right;width:5em}.inline-edit-row fieldset label span.input-text-wrap{margin-right:0;zoom:100%}#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input{line-height:130%}#wpbody-content .inline-edit-row .input-text-wrap input{width:95%}#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input{width:8em}#titlediv #title{width:98%}.button,input[type=button],input[type=reset],input[type=submit]{padding:0 8px;line-height:20px;height:auto}.button.button-large,input[type=button].button-large,input[type=reset].button-large,input[type=submit].button-large{padding:0 10px;line-height:24px;height:auto}.button.button-small,input[type=button].button-small,input[type=reset].button-small,input[type=submit].button-small{padding:0 6px;line-height:16px;height:auto}a.button{margin:1px;padding:1px 9px 2px}a.button.button-large{padding:1px 11px 2px}a.button.button-small{padding:1px 7px 2px}#screen-options-wrap{overflow:hidden}#col-container,#col-left,#col-right,#dragHelper,#editorcontainer,#post-body,#post-status-info,#postdiv,#postdivrich,#poststuff,#the-comment-list .comment-item,#titlediv,#widgets-left,#wpwrap,#wrap,.fileedit-sub,.metabox-holder,.tablenav,.tagchecklist,.widget .widget-top,.widget-control-actions,.widget-liquid-left,.widget-liquid-right,.widgets-sortables{display:block;zoom:100%}p.search-box{position:static;float:left;margin:-3px 0 4px}#widget-list .widget,.feature-filter .feature-group li{display:inline}.feature-filter .feature-group li input{vertical-align:middle}#editorcontainer #content{overflow:auto;margin:auto;width:98%}form#template div{width:100%}.wp-editor-container .quicktags-toolbar input{overflow:visible;padding:0 4px}#poststuff h2{font-size:1.6em}#poststuff .inside #page_template,#poststuff .inside #parent_id,.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{width:250px}#submitdiv a.button,#submitdiv input,#submitdiv select{position:relative}#bh{margin:7px 0 0 10px;float:left}div#dashboard-widgets{padding-left:1px}.tagchecklist span,.tagchecklist span a{display:inline-block;display:block}.nav .button-secondary,.tablenav .button-secondary{padding-top:2px;padding-bottom:2px}.tablenav select{font-size:13px;display:inline-block;vertical-align:top;margin-top:2px}.tablenav .actions select{width:155px}.subsubsub li{display:inline}a.post-state-format{text-indent:0;line-height:0;font-size:0}table.ie-fixed{table-layout:fixed}.widefat th,.widefat tr{margin-bottom:0;border-spacing:0}.widefat th input{margin:0 5px 0 0}.widefat tfoot .check-column,.widefat thead .check-column{padding-top:6px}.media.widefat tbody th.check-column,.widefat tbody th.check-column{padding:4px 0 0}.widefat{empty-cells:show;border-collapse:collapse}.tablenav a.button-secondary{display:inline-block;padding:2px 5px}.inactive-sidebar .widgets-sortables{padding-bottom:8px}#available-widgets .widget-holder{padding-bottom:65px}#widgets-left .inactive{padding-bottom:10px}.inactive-sidebar .widget,.widget-liquid-right .widget{position:relative}.inactive-sidebar .widget{display:block;float:right}#wpcontent .button-primary-disabled{color:#9FD0D5;background:#298CBA}#the-comment-list .unapproved td,#the-comment-list .unapproved tr{background-color:#ffffe0}.imgedit-submit{width:300px}#nav-menus-frame,#wpbody,.menu li{zoom:100%}#update-nav-menu #post-body{overflow:hidden}.menu li{min-width:100%}.menu li.sortable-placeholder{min-width:400px}.available-theme{display:inline}.available-theme ul{margin:0}.available-theme .action-links li{padding-left:7px;margin-left:7px}.about-wrap .three-col.about-updates .col-2{width:15%}.about-wrap .about-password-meter input{width:98%}.revisions-tickmarks,.revisions-tooltip{display:none!important}.revisions.pinned .revisions-controls{position:relative}.login form .input,input[type=password]{font-family:sans-serif}.mce-btn i.mce-i-aligncenter,.mce-btn i.mce-i-alignjustify,.mce-btn i.mce-i-alignleft,.mce-btn i.mce-i-alignright,.mce-btn i.mce-i-blockquote,.mce-btn i.mce-i-bold,.mce-btn i.mce-i-bullist,.mce-btn i.mce-i-charmap,.mce-btn i.mce-i-forecolor,.mce-btn i.mce-i-fullscreen,.mce-btn i.mce-i-help,.mce-btn i.mce-i-hr,.mce-btn i.mce-i-indent,.mce-btn i.mce-i-italic,.mce-btn i.mce-i-link,.mce-btn i.mce-i-ltr,.mce-btn i.mce-i-numlist,.mce-btn i.mce-i-outdent,.mce-btn i.mce-i-pastetext,.mce-btn i.mce-i-pasteword,.mce-btn i.mce-i-redo,.mce-btn i.mce-i-removeformat,.mce-btn i.mce-i-spellchecker,.mce-btn i.mce-i-strikethrough,.mce-btn i.mce-i-underline,.mce-btn i.mce-i-undo,.mce-btn i.mce-i-unlink,.mce-btn i.mce-i-wp-media-library,.mce-btn i.mce-i-wp_adv,.mce-btn i.mce-i-wp_fullscreen,.mce-btn i.mce-i-wp_help,.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page,.mce-close{font-family:tinymce,Arial;font-style:normal;font-weight:400;font-variant:normal;font-size:16px;margin-right:0;padding-left:0}.mce-btn i.mce-i-wp_fullscreen,.qt-fullscreen{-ie7-icon:'\e023'}.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page{-ie7-icon:'\e027'}.mce-btn i.mce-i-wp_adv{background-color:#aaa}.mce-btn i.mce-i-help,.mce-btn i.mce-i-wp_help{-ie7-icon:'\e016'}* html .row-actions{visibility:visible}* html div.widget-liquid-right{display:block;position:relative}* html #editorcontainer{padding:0}* html #poststuff h2{margin-right:0}* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea{border:1px solid #DFDFDF}* html .feature-filter .feature-group li{width:145px}* html div.widget-liquid-left{width:99%}* html .widgets-sortables{height:50px}* html a#content_resize{left:-2px}* html .widget-title h4{width:205px}* html #removing-widget .in-widget-title{display:none}* html .media-item .pinkynail{height:32px;width:40px}* html .describe .field input.text,* html .describe .field textarea{width:440px}* html input{border:1px solid #dfdfdf}* html .edit-box{display:inline}* html .postbox-container .meta-box-sortables{height:300px}* html #wpbody-content #screen-options-link-wrap{display:inline-block;width:150px;text-align:center}* html #wpbody-content #contextual-help-link-wrap{display:inline-block;width:100px;text-align:center}* html #adminmenu{margin-right:-80px}* html .folded #adminmenu{margin-right:-22px}* html #wpcontent #adminmenu li.menu-top{display:inline;padding:0;margin:0}* html #wpfooter{margin:0}* html #adminmenu div.wp-menu-image{height:29px}
\ No newline at end of file
diff --git a/wp-admin/css/ie.css b/wp-admin/css/ie.css
new file mode 100644
index 0000000..c49f576
--- /dev/null
+++ b/wp-admin/css/ie.css
@@ -0,0 +1,785 @@
+/* Fixes for IE 7 bugs */
+
+#dashboard-widgets form .input-text-wrap input,
+#dashboard-widgets form .textarea-wrap textarea {
+ width: 99%;
+}
+
+#dashboard-widgets form #title {
+ width: 98%;
+}
+
+#wpbody-content #dashboard-widgets .postbox-container {
+ width: 49.5%;
+}
+
+#wpbody-content #dashboard-widgets #postbox-container-2,
+#wpbody-content #dashboard-widgets #postbox-container-3,
+#wpbody-content #dashboard-widgets #postbox-container-4 {
+ float: right;
+ width: 50.5%;
+}
+
+#dashboard-widgets #postbox-container-3 .empty-container,
+#dashboard-widgets #postbox-container-4 .empty-container {
+ border: 0 none;
+ height: 0;
+ min-height: 0;
+}
+
+.wp-editor-wrap .wp-editor-tools,
+.wp-editor-wrap .wp-switch-editor,
+.wp-editor-wrap .wp-editor-tabs,
+.wp-editor-wrap .wp-editor-container {
+ zoom: 100%;
+}
+
+.wp-editor-wrap .wp-editor-container textarea.wp-editor-area {
+ width: 97%;
+}
+
+#post-body.columns-2 #postbox-container-1 {
+ padding-left: 19px;
+}
+
+.welcome-panel .wp-badge {
+ position: absolute;
+}
+
+.welcome-panel .welcome-panel-column:first-child {
+ width: 35%;
+}
+
+.wp-fullscreen-title {
+ width: 97%;
+}
+
+#wp_mce_fullscreen_ifr {
+ background-color: #f9f9f9;
+}
+
+#wp-fullscreen-tagline {
+ color: #888;
+ font-size: 14px;
+}
+
+#adminmenuback {
+ left: 0;
+ background-image: none;
+}
+
+#adminmenuwrap {
+ position: static;
+}
+
+#adminmenu {
+ position: relative;
+}
+
+#adminmenu,
+#adminmenu a {
+ cursor: pointer;
+}
+
+#adminmenu li.wp-menu-separator,
+#adminmenu li.wp-menu-separator-last {
+ font-size: 1px;
+ line-height: 1;
+}
+
+#adminmenu a.menu-top {
+ border-bottom: 0 none;
+ border-top: 1px solid #ddd;
+}
+
+#adminmenu .separator {
+ font-size: 1px;
+ line-height: 1px;
+}
+
+#adminmenu .wp-submenu {
+ left: 110px;
+}
+
+#adminmenu .wp-submenu ul {
+ margin: 0;
+}
+
+.folded #wpcontent,
+.folded #wpfooter {
+ margin-left: 170px;
+}
+
+.folded #adminmenuback,
+.folded #adminmenuwrap,
+.folded #adminmenu,
+.folded #adminmenu li.menu-top {
+ width: 150px;
+}
+
+.folded #adminmenu .wp-submenu {
+ border-top-color: transparent;
+}
+
+.folded #adminmenu .wp-menu-name {
+ display: block;
+}
+
+.folded #adminmenu .wp-submenu.sub-open,
+.folded #adminmenu .opensub .wp-submenu {
+ left: 110px;
+}
+
+.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu,
+.folded #adminmenu .wp-has-current-submenu .wp-submenu {
+ top: -1px;
+ position: relative;
+}
+
+.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head {
+ background-color: transparent;
+}
+
+#adminmenu .wp-submenu .wp-submenu-head {
+ border-top-color: #ddd;
+}
+
+.folded #adminmenu .wp-submenu ul {
+ margin-left: 5px;
+}
+
+#adminmenu li.menu-top {
+ margin-bottom: -2px;
+}
+
+#adminmenu .wp-menu-arrow {
+ display: none !important;
+}
+
+.js.folded #adminmenu li.menu-top {
+ display: block;
+ zoom: 100%;
+}
+
+ul#adminmenu {
+ z-index: 99;
+}
+
+#adminmenu li.menu-top a.menu-top {
+ min-width: auto;
+ width: auto;
+}
+
+#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu {
+ font-style: normal;
+}
+
+#wpcontent #adminmenu .wp-submenu li {
+ padding: 0;
+}
+
+#adminmenu li.wp-has-current-submenu .wp-submenu {
+ left: -40px;
+}
+
+#adminmenu .wp-menu-image {
+ display: none !important;
+}
+
+#adminmenu a.menu-top .wp-menu-name {
+ padding-left: 8px;
+}
+
+#collapse-menu {
+ line-height: 23px;
+}
+
+#wpadminbar .ab-comments-icon {
+ padding-top: 7px;
+}
+
+
+.theme-browser .theme {
+ width: 30%;
+ margin: 0 3% 4% 0;
+ cursor: auto;
+}
+
+.theme-browser .theme:hover,
+.theme-browser .theme:focus {
+ cursor: auto;
+}
+
+.theme-browser .theme .theme-screenshot {
+ height: 180px;
+}
+
+.theme-browser .theme .theme-actions {
+ position: static;
+ background-color: #e8e8e8;
+}
+
+.theme-browser .theme .more-details {
+ display: none;
+}
+
+.plugins td,
+.plugins th {
+ border-top: 1px solid #ddd;
+}
+
+table.fixed th,
+table.fixed td {
+ border-top: 1px solid #ddd;
+}
+
+#wpbody-content input.button,
+#wpbody-content input.button-primary,
+#wpbody-content input.button-secondary {
+ overflow: visible;
+}
+
+#dashboard-widgets h3 a {
+ height: 14px;
+ line-height: 14px;
+}
+
+#dashboard_browser_nag {
+ color: #fff;
+}
+
+#dashboard_browser_nag .browser-icon {
+ position: relative;
+}
+
+.tablenav-pages .current-page {
+ vertical-align: middle;
+}
+
+#wpbody-content .postbox {
+ border: 1px solid #dfdfdf;
+}
+
+#wpbody-content .postbox .hndle {
+ margin-bottom: -1px;
+}
+
+.major-publishing-actions,
+.wp-submenu,
+.wp-submenu li,
+#template,
+#template div,
+#editcat,
+#addcat {
+ zoom: 100%;
+}
+
+.wp-menu-arrow {
+ height: 28px;
+}
+
+.submitbox {
+ margin-top: 10px;
+}
+
+/* Inline Editor */
+#wpbody-content .quick-edit-row-post .inline-edit-col-left {
+ width: 39%;
+}
+
+#wpbody-content .inline-edit-row-post .inline-edit-col-center {
+ width: 19%;
+}
+
+#wpbody-content .quick-edit-row-page .inline-edit-col-left {
+ width: 49%;
+}
+
+#wpbody-content .bulk-edit-row .inline-edit-col-left {
+ width: 29%;
+}
+
+.inline-edit-row p.submit {
+ zoom: 100%;
+}
+
+.inline-edit-row fieldset label span.title {
+ display: block;
+ float: left;
+ width: 5em;
+}
+
+.inline-edit-row fieldset label span.input-text-wrap {
+ margin-left: 0;
+ zoom: 100%;
+}
+
+#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input {
+ line-height: 130%;
+}
+
+#wpbody-content .inline-edit-row .input-text-wrap input {
+ width: 95%;
+}
+
+#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input {
+ width: 8em;
+}
+/* end Inline Editor */
+
+#titlediv #title {
+ width: 98%;
+}
+
+.button,
+input[type="reset"],
+input[type="button"],
+input[type="submit"] {
+ padding: 0 8px;
+ line-height: 20px;
+ height: auto;
+}
+
+.button.button-large,
+input[type="reset"].button-large,
+input[type="button"].button-large,
+input[type="submit"].button-large {
+ padding: 0 10px;
+ line-height: 24px;
+ height: auto;
+}
+
+.button.button-small,
+input[type="reset"].button-small,
+input[type="button"].button-small,
+input[type="submit"].button-small {
+ padding: 0 6px;
+ line-height: 16px;
+ height: auto;
+}
+
+a.button {
+ margin: 1px;
+ padding: 1px 9px 2px;
+}
+
+a.button.button-large {
+ padding: 1px 11px 2px;
+}
+
+a.button.button-small {
+ padding: 1px 7px 2px;
+}
+
+#screen-options-wrap {
+ overflow: hidden;
+}
+
+#the-comment-list .comment-item,
+#post-status-info,
+#wpwrap,
+#wrap,
+#postdivrich,
+#postdiv,
+#poststuff,
+.metabox-holder,
+#titlediv,
+#post-body,
+#editorcontainer,
+.tablenav,
+.widget-liquid-left,
+.widget-liquid-right,
+#widgets-left,
+.widgets-sortables,
+#dragHelper,
+.widget .widget-top,
+.widget-control-actions,
+.tagchecklist,
+#col-container,
+#col-left,
+#col-right,
+.fileedit-sub {
+ display: block;
+ zoom: 100%;
+}
+
+p.search-box {
+ position: static;
+ float: right;
+ margin: -3px 0 4px;
+}
+
+#widget-list .widget,
+.feature-filter .feature-group li {
+ display: inline;
+}
+
+.feature-filter .feature-group li input {
+ vertical-align: middle;
+}
+
+#editorcontainer #content {
+ overflow: auto;
+ margin: auto;
+ width: 98%;
+}
+
+form#template div {
+ width: 100%;
+}
+
+.wp-editor-container .quicktags-toolbar input {
+ overflow: visible;
+ padding: 0 4px;
+}
+
+#poststuff h2 {
+ font-size: 1.6em;
+}
+
+#poststuff .inside #parent_id,
+#poststuff .inside #page_template,
+.inline-edit-row #post_parent,
+.inline-edit-row select[name="page_template"] {
+ width: 250px;
+}
+
+#submitdiv input,
+#submitdiv select,
+#submitdiv a.button {
+ position: relative;
+}
+
+#bh {
+ margin: 7px 10px 0 0;
+ float: right;
+}
+
+/* without this dashboard widgets appear in one column for some screen widths */
+div#dashboard-widgets {
+ padding-right: 1px;
+}
+
+.tagchecklist span, .tagchecklist span a {
+ display: inline-block;
+ display: block;
+}
+
+.tablenav .button-secondary,
+.nav .button-secondary {
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+.tablenav select {
+ font-size: 13px;
+ display: inline-block;
+ vertical-align: top;
+ margin-top: 2px;
+}
+
+.tablenav .actions select {
+ width: 155px;
+}
+
+.subsubsub li {
+ display: inline;
+}
+
+a.post-state-format {
+ text-indent: 0;
+ line-height: 0;
+ font-size: 0;
+}
+
+table.ie-fixed {
+ table-layout: fixed;
+}
+
+.widefat tr,
+.widefat th {
+ margin-bottom: 0;
+ border-spacing: 0;
+}
+
+.widefat th input {
+ margin: 0 0 0 5px;
+}
+
+.widefat thead .check-column,
+.widefat tfoot .check-column {
+ padding-top: 6px;
+}
+
+.widefat tbody th.check-column,
+.media.widefat tbody th.check-column {
+ padding: 4px 0 0;
+}
+
+.widefat {
+ empty-cells: show;
+ border-collapse: collapse;
+}
+
+.tablenav a.button-secondary {
+ display: inline-block;
+ padding: 2px 5px;
+}
+
+.inactive-sidebar .widgets-sortables {
+ padding-bottom: 8px;
+}
+
+#available-widgets .widget-holder {
+ padding-bottom: 65px;
+}
+
+#widgets-left .inactive {
+ padding-bottom: 10px;
+}
+
+.widget-liquid-right .widget,
+.inactive-sidebar .widget {
+ position: relative;
+}
+
+.inactive-sidebar .widget {
+ display: block;
+ float: left;
+}
+
+#wpcontent .button-primary-disabled {
+ color: #9FD0D5;
+ background: #298CBA;
+}
+
+#the-comment-list .unapproved tr,
+#the-comment-list .unapproved td {
+ background-color: #ffffe0;
+}
+
+.imgedit-submit {
+ width: 300px;
+}
+
+#nav-menus-frame,
+#wpbody,
+.menu li {
+ zoom: 100%;
+}
+
+#update-nav-menu #post-body {
+ overflow:hidden;
+}
+
+.menu li {
+ min-width: 100%;
+}
+
+.menu li.sortable-placeholder {
+ min-width: 400px;
+}
+
+.available-theme {
+ display: inline;
+}
+
+.available-theme ul {
+ margin: 0;
+}
+
+.available-theme .action-links li {
+ padding-right: 7px;
+ margin-right: 7px;
+}
+
+.about-wrap .three-col.about-updates .col-2 {
+ width: 15%;
+}
+
+.about-wrap .about-password-meter input {
+ width: 98%;
+}
+
+.revisions-tickmarks,
+.revisions-tooltip {
+ display: none !important;
+}
+
+.revisions.pinned .revisions-controls {
+ position: relative;
+}
+
+input[type="password"],
+.login form .input {
+ font-family: sans-serif;
+}
+
+/* TinyMCE icons */
+.mce-btn i.mce-i-bold,
+.mce-btn i.mce-i-italic,
+.mce-btn i.mce-i-bullist,
+.mce-btn i.mce-i-numlist,
+.mce-btn i.mce-i-blockquote,
+.mce-btn i.mce-i-alignleft,
+.mce-btn i.mce-i-aligncenter,
+.mce-btn i.mce-i-alignright,
+.mce-btn i.mce-i-link,
+.mce-btn i.mce-i-unlink,
+.mce-btn i.mce-i-wp_more,
+.mce-btn i.mce-i-strikethrough,
+.mce-btn i.mce-i-spellchecker,
+.mce-btn i.mce-i-fullscreen,
+.mce-btn i.mce-i-wp_fullscreen,
+.mce-btn i.mce-i-wp_adv,
+.mce-btn i.mce-i-underline,
+.mce-btn i.mce-i-alignjustify,
+.mce-btn i.mce-i-forecolor,
+.mce-btn i.mce-i-pastetext,
+.mce-btn i.mce-i-pasteword,
+.mce-btn i.mce-i-removeformat,
+.mce-btn i.mce-i-charmap,
+.mce-btn i.mce-i-outdent,
+.mce-btn i.mce-i-indent,
+.mce-btn i.mce-i-undo,
+.mce-btn i.mce-i-redo,
+.mce-btn i.mce-i-help,
+.mce-btn i.mce-i-wp_help,
+.mce-btn i.mce-i-wp-media-library,
+.mce-btn i.mce-i-ltr,
+.mce-btn i.mce-i-wp_page,
+.mce-btn i.mce-i-hr,
+.mce-close {
+ font-family: 'tinymce', Arial;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ font-size: 16px;
+ margin-left: 0;
+ padding-right: 0;
+}
+
+.mce-btn i.mce-i-wp_fullscreen,
+.qt-fullscreen {
+ -ie7-icon: '\e023';
+}
+
+.mce-btn i.mce-i-wp_more,
+.mce-btn i.mce-i-wp_page {
+ -ie7-icon: '\e027';
+}
+
+.mce-btn i.mce-i-wp_adv {
+ background-color: #aaa;
+}
+
+.mce-btn i.mce-i-help,
+.mce-btn i.mce-i-wp_help {
+ -ie7-icon: '\e016';
+}
+
+
+/* IE6 leftovers */
+* html .row-actions {
+ visibility: visible;
+}
+
+* html div.widget-liquid-left,
+* html div.widget-liquid-right {
+ display: block;
+ position: relative;
+}
+
+* html #editorcontainer {
+ padding: 0;
+}
+
+* html #poststuff h2 {
+ margin-left: 0;
+}
+
+* html .stuffbox,
+* html .stuffbox input,
+* html .stuffbox textarea {
+ border: 1px solid #DFDFDF;
+}
+
+* html .feature-filter .feature-group li {
+ width: 145px;
+}
+
+* html div.widget-liquid-left {
+ width: 99%;
+}
+
+* html .widgets-sortables {
+ height: 50px;
+}
+
+* html a#content_resize {
+ right: -2px;
+}
+
+* html .widget-title h4 {
+ width: 205px;
+}
+
+* html #removing-widget .in-widget-title {
+ display: none;
+}
+
+* html .media-item .pinkynail {
+ height: 32px;
+ width: 40px;
+}
+
+* html .describe .field input.text,
+* html .describe .field textarea {
+ width: 440px;
+}
+
+* html input {
+ border: 1px solid #dfdfdf;
+}
+
+* html .edit-box {
+ display: inline;
+}
+
+* html .postbox-container .meta-box-sortables {
+ height: 300px;
+}
+
+* html #wpbody-content #screen-options-link-wrap {
+ display: inline-block;
+ width: 150px;
+ text-align: center;
+}
+
+* html #wpbody-content #contextual-help-link-wrap {
+ display: inline-block;
+ width: 100px;
+ text-align: center;
+}
+
+* html #adminmenu {
+ margin-left: -80px;
+}
+
+* html .folded #adminmenu {
+ margin-left: -22px;
+}
+
+* html #wpcontent #adminmenu li.menu-top {
+ display: inline;
+ padding: 0;
+ margin: 0;
+}
+
+* html #wpfooter {
+ margin: 0;
+}
+
+* html #adminmenu div.wp-menu-image {
+ height: 29px;
+}
diff --git a/wp-admin/css/ie.min.css b/wp-admin/css/ie.min.css
new file mode 100644
index 0000000..0b4b692
--- /dev/null
+++ b/wp-admin/css/ie.min.css
@@ -0,0 +1 @@
+#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:99%}#dashboard-widgets form #title{width:98%}#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}.wp-editor-wrap .wp-editor-container,.wp-editor-wrap .wp-editor-tabs,.wp-editor-wrap .wp-editor-tools,.wp-editor-wrap .wp-switch-editor{zoom:100%}.wp-editor-wrap .wp-editor-container textarea.wp-editor-area{width:97%}#post-body.columns-2 #postbox-container-1{padding-left:19px}.welcome-panel .wp-badge{position:absolute}.welcome-panel .welcome-panel-column:first-child{width:35%}.wp-fullscreen-title{width:97%}#wp_mce_fullscreen_ifr{background-color:#f9f9f9}#wp-fullscreen-tagline{color:#888;font-size:14px}#adminmenuback{left:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu,#adminmenu a{cursor:pointer}#adminmenu li.wp-menu-separator,#adminmenu li.wp-menu-separator-last{font-size:1px;line-height:1}#adminmenu a.menu-top{border-bottom:0 none;border-top:1px solid #ddd}#adminmenu .separator{font-size:1px;line-height:1px}#adminmenu .wp-submenu{left:110px}#adminmenu .wp-submenu ul{margin:0}.folded #wpcontent,.folded #wpfooter{margin-left:170px}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:150px}.folded #adminmenu .wp-submenu{border-top-color:transparent}.folded #adminmenu .wp-menu-name{display:block}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open{left:110px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{top:-1px;position:relative}.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:transparent}#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#ddd}.folded #adminmenu .wp-submenu ul{margin-left:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu .wp-menu-arrow{display:none!important}.js.folded #adminmenu li.menu-top{display:block;zoom:100%}ul#adminmenu{z-index:99}#adminmenu li.menu-top a.menu-top{min-width:auto;width:auto}#wpcontent #adminmenu li.wp-has-current-submenu a.wp-has-submenu{font-style:normal}#wpcontent #adminmenu .wp-submenu li{padding:0}#adminmenu li.wp-has-current-submenu .wp-submenu{left:-40px}#adminmenu .wp-menu-image{display:none!important}#adminmenu a.menu-top .wp-menu-name{padding-left:8px}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}.theme-browser .theme{width:30%;margin:0 3% 4% 0;cursor:auto}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:auto}.theme-browser .theme .theme-screenshot{height:180px}.theme-browser .theme .theme-actions{position:static;background-color:#e8e8e8}.theme-browser .theme .more-details{display:none}.plugins td,.plugins th,table.fixed td,table.fixed th{border-top:1px solid #ddd}#wpbody-content input.button,#wpbody-content input.button-primary,#wpbody-content input.button-secondary{overflow:visible}#dashboard-widgets h3 a{height:14px;line-height:14px}#dashboard_browser_nag{color:#fff}#dashboard_browser_nag .browser-icon{position:relative}.tablenav-pages .current-page{vertical-align:middle}#wpbody-content .postbox{border:1px solid #dfdfdf}#wpbody-content .postbox .hndle{margin-bottom:-1px}#addcat,#editcat,#template,#template div,.major-publishing-actions,.wp-submenu,.wp-submenu li{zoom:100%}.wp-menu-arrow{height:28px}.submitbox{margin-top:10px}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:19%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:29%}.inline-edit-row p.submit{zoom:100%}.inline-edit-row fieldset label span.title{display:block;float:left;width:5em}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0;zoom:100%}#wpbody-content .inline-edit-row fieldset label span.input-text-wrap input{line-height:130%}#wpbody-content .inline-edit-row .input-text-wrap input{width:95%}#wpbody-content .inline-edit-row .input-text-wrap input.inline-edit-password-input{width:8em}#titlediv #title{width:98%}.button,input[type=button],input[type=reset],input[type=submit]{padding:0 8px;line-height:20px;height:auto}.button.button-large,input[type=button].button-large,input[type=reset].button-large,input[type=submit].button-large{padding:0 10px;line-height:24px;height:auto}.button.button-small,input[type=button].button-small,input[type=reset].button-small,input[type=submit].button-small{padding:0 6px;line-height:16px;height:auto}a.button{margin:1px;padding:1px 9px 2px}a.button.button-large{padding:1px 11px 2px}a.button.button-small{padding:1px 7px 2px}#screen-options-wrap{overflow:hidden}#col-container,#col-left,#col-right,#dragHelper,#editorcontainer,#post-body,#post-status-info,#postdiv,#postdivrich,#poststuff,#the-comment-list .comment-item,#titlediv,#widgets-left,#wpwrap,#wrap,.fileedit-sub,.metabox-holder,.tablenav,.tagchecklist,.widget .widget-top,.widget-control-actions,.widget-liquid-left,.widget-liquid-right,.widgets-sortables{display:block;zoom:100%}p.search-box{position:static;float:right;margin:-3px 0 4px}#widget-list .widget,.feature-filter .feature-group li{display:inline}.feature-filter .feature-group li input{vertical-align:middle}#editorcontainer #content{overflow:auto;margin:auto;width:98%}form#template div{width:100%}.wp-editor-container .quicktags-toolbar input{overflow:visible;padding:0 4px}#poststuff h2{font-size:1.6em}#poststuff .inside #page_template,#poststuff .inside #parent_id,.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{width:250px}#submitdiv a.button,#submitdiv input,#submitdiv select{position:relative}#bh{margin:7px 10px 0 0;float:right}div#dashboard-widgets{padding-right:1px}.tagchecklist span,.tagchecklist span a{display:inline-block;display:block}.nav .button-secondary,.tablenav .button-secondary{padding-top:2px;padding-bottom:2px}.tablenav select{font-size:13px;display:inline-block;vertical-align:top;margin-top:2px}.tablenav .actions select{width:155px}.subsubsub li{display:inline}a.post-state-format{text-indent:0;line-height:0;font-size:0}table.ie-fixed{table-layout:fixed}.widefat th,.widefat tr{margin-bottom:0;border-spacing:0}.widefat th input{margin:0 0 0 5px}.widefat tfoot .check-column,.widefat thead .check-column{padding-top:6px}.media.widefat tbody th.check-column,.widefat tbody th.check-column{padding:4px 0 0}.widefat{empty-cells:show;border-collapse:collapse}.tablenav a.button-secondary{display:inline-block;padding:2px 5px}.inactive-sidebar .widgets-sortables{padding-bottom:8px}#available-widgets .widget-holder{padding-bottom:65px}#widgets-left .inactive{padding-bottom:10px}.inactive-sidebar .widget,.widget-liquid-right .widget{position:relative}.inactive-sidebar .widget{display:block;float:left}#wpcontent .button-primary-disabled{color:#9FD0D5;background:#298CBA}#the-comment-list .unapproved td,#the-comment-list .unapproved tr{background-color:#ffffe0}.imgedit-submit{width:300px}#nav-menus-frame,#wpbody,.menu li{zoom:100%}#update-nav-menu #post-body{overflow:hidden}.menu li{min-width:100%}.menu li.sortable-placeholder{min-width:400px}.available-theme{display:inline}.available-theme ul{margin:0}.available-theme .action-links li{padding-right:7px;margin-right:7px}.about-wrap .three-col.about-updates .col-2{width:15%}.about-wrap .about-password-meter input{width:98%}.revisions-tickmarks,.revisions-tooltip{display:none!important}.revisions.pinned .revisions-controls{position:relative}.login form .input,input[type=password]{font-family:sans-serif}.mce-btn i.mce-i-aligncenter,.mce-btn i.mce-i-alignjustify,.mce-btn i.mce-i-alignleft,.mce-btn i.mce-i-alignright,.mce-btn i.mce-i-blockquote,.mce-btn i.mce-i-bold,.mce-btn i.mce-i-bullist,.mce-btn i.mce-i-charmap,.mce-btn i.mce-i-forecolor,.mce-btn i.mce-i-fullscreen,.mce-btn i.mce-i-help,.mce-btn i.mce-i-hr,.mce-btn i.mce-i-indent,.mce-btn i.mce-i-italic,.mce-btn i.mce-i-link,.mce-btn i.mce-i-ltr,.mce-btn i.mce-i-numlist,.mce-btn i.mce-i-outdent,.mce-btn i.mce-i-pastetext,.mce-btn i.mce-i-pasteword,.mce-btn i.mce-i-redo,.mce-btn i.mce-i-removeformat,.mce-btn i.mce-i-spellchecker,.mce-btn i.mce-i-strikethrough,.mce-btn i.mce-i-underline,.mce-btn i.mce-i-undo,.mce-btn i.mce-i-unlink,.mce-btn i.mce-i-wp-media-library,.mce-btn i.mce-i-wp_adv,.mce-btn i.mce-i-wp_fullscreen,.mce-btn i.mce-i-wp_help,.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page,.mce-close{font-family:tinymce,Arial;font-style:normal;font-weight:400;font-variant:normal;font-size:16px;margin-left:0;padding-right:0}.mce-btn i.mce-i-wp_fullscreen,.qt-fullscreen{-ie7-icon:'\e023'}.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page{-ie7-icon:'\e027'}.mce-btn i.mce-i-wp_adv{background-color:#aaa}.mce-btn i.mce-i-help,.mce-btn i.mce-i-wp_help{-ie7-icon:'\e016'}* html .row-actions{visibility:visible}* html div.widget-liquid-left,* html div.widget-liquid-right{display:block;position:relative}* html #editorcontainer{padding:0}* html #poststuff h2{margin-left:0}* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea{border:1px solid #DFDFDF}* html .feature-filter .feature-group li{width:145px}* html div.widget-liquid-left{width:99%}* html .widgets-sortables{height:50px}* html a#content_resize{right:-2px}* html .widget-title h4{width:205px}* html #removing-widget .in-widget-title{display:none}* html .media-item .pinkynail{height:32px;width:40px}* html .describe .field input.text,* html .describe .field textarea{width:440px}* html input{border:1px solid #dfdfdf}* html .edit-box{display:inline}* html .postbox-container .meta-box-sortables{height:300px}* html #wpbody-content #screen-options-link-wrap{display:inline-block;width:150px;text-align:center}* html #wpbody-content #contextual-help-link-wrap{display:inline-block;width:100px;text-align:center}* html #adminmenu{margin-left:-80px}* html .folded #adminmenu{margin-left:-22px}* html #wpcontent #adminmenu li.menu-top{display:inline;padding:0;margin:0}* html #wpfooter{margin:0}* html #adminmenu div.wp-menu-image{height:29px}
\ No newline at end of file
diff --git a/wp-admin/css/install-rtl.css b/wp-admin/css/install-rtl.css
new file mode 100644
index 0000000..0a9deda
--- /dev/null
+++ b/wp-admin/css/install-rtl.css
@@ -0,0 +1,389 @@
+html {
+ background: #f1f1f1;
+ margin: 0 20px;
+}
+
+body {
+ background: #fff;
+ color: #444;
+ font-family: "Open Sans", sans-serif;
+ margin: 140px auto 25px;
+ padding: 20px 20px 10px 20px;
+ max-width: 700px;
+ -webkit-font-smoothing: subpixel-antialiased;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+}
+
+a {
+ color: #0074a2;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #2ea2cc;
+}
+
+h1 {
+ border-bottom: 1px solid #dedede;
+ clear: both;
+ color: #666;
+ font-size: 24px;
+ margin: 30px 0;
+ padding: 0;
+ padding-bottom: 7px;
+ font-weight: normal;
+}
+
+h2 {
+ font-size: 16px;
+}
+
+p, li, dd, dt {
+ padding-bottom: 2px;
+ font-size: 14px;
+ line-height: 1.5;
+}
+
+code, .code {
+ font-family: Consolas, Monaco, monospace;
+}
+
+ul, ol, dl {
+ padding: 5px 22px 5px 5px;
+}
+
+a img {
+ border:0
+}
+abbr {
+ border: 0;
+ font-variant: normal;
+}
+
+label {
+ cursor: pointer;
+}
+
+#logo {
+ margin: 6px 0 14px 0;
+ border-bottom: none;
+ text-align:center
+}
+#logo a {
+ background-image: url(../images/w-logo-blue.png?ver=20131202);
+ background-image: none, url(../images/wordpress-logo.svg?ver=20131107);
+ -webkit-background-size: 84px;
+ background-size: 84px;
+ background-position: center top;
+ background-repeat: no-repeat;
+ color: #999;
+ height: 84px;
+ font-size: 20px;
+ font-weight: normal;
+ line-height: 1.3em;
+ margin: -130px auto 25px;
+ padding: 0;
+ text-decoration: none;
+ width: 84px;
+ text-indent: -9999px;
+ outline: none;
+ overflow: hidden;
+ display: block;
+}
+.step {
+ margin: 20px 0 15px;
+}
+.step, th {
+ text-align: right;
+ padding: 0;
+}
+.language-chooser.wp-core-ui .step .button.button-large {
+ height: 36px;
+ vertical-align: middle;
+ font-size: 14px;
+}
+textarea {
+ border: 1px solid #dfdfdf;
+ font-family: "Open Sans", sans-serif;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.form-table {
+ border-collapse: collapse;
+ margin-top: 1em;
+ width: 100%;
+}
+
+.form-table td {
+ margin-bottom: 9px;
+ padding: 10px 0 10px 20px;
+ border-bottom: 8px solid #fff;
+ font-size: 14px;
+ vertical-align: top
+}
+
+.form-table th {
+ font-size: 14px;
+ text-align: right;
+ padding: 16px 0 10px 20px;
+ width: 140px;
+ vertical-align: top;
+}
+
+.form-table code {
+ line-height: 18px;
+ font-size: 14px;
+}
+
+.form-table p {
+ margin: 4px 0 0 0;
+ font-size: 11px;
+}
+
+.form-table input {
+ line-height: 20px;
+ font-size: 15px;
+ padding: 3px 5px;
+ border: 1px solid #ddd;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07);
+ box-shadow: inset 0 1px 2px rgba(0,0,0,0.07);
+}
+
+input,
+submit {
+ font-family: "Open Sans", sans-serif;
+}
+
+.form-table input[type=text],
+.form-table input[type=email],
+.form-table input[type=url],
+.form-table input[type=password] {
+ width: 206px;
+}
+
+.form-table th p {
+ font-weight: normal;
+}
+
+.form-table.install-success td {
+ vertical-align: middle;
+ padding: 16px 0 10px 20px;
+}
+
+.form-table.install-success td p {
+ margin: 0;
+ font-size: 14px;
+}
+
+.form-table.install-success td code {
+ margin: 0;
+ font-size: 18px;
+}
+
+#error-page {
+ margin-top: 50px;
+}
+
+#error-page p {
+ font-size: 14px;
+ line-height: 18px;
+ margin: 25px 0 20px;
+}
+
+#error-page code, .code {
+ font-family: Consolas, Monaco, monospace;
+}
+
+#pass-strength-result {
+ background-color: #eee;
+ border-color: #ddd !important;
+ border-style: solid;
+ border-width: 1px;
+ margin: 5px 0 5px 5px;
+ padding: 5px;
+ text-align: center;
+ width: 200px;
+ display: none;
+}
+
+#pass-strength-result.bad {
+ background-color: #ffb78c;
+ border-color: #ff853c !important;
+}
+
+#pass-strength-result.good {
+ background-color: #ffec8b;
+ border-color: #ffcc00 !important;
+}
+
+#pass-strength-result.short {
+ background-color: #ffa0a0;
+ border-color: #f04040 !important;
+}
+
+#pass-strength-result.strong {
+ background-color: #c3ff88;
+ border-color: #8dff1c !important;
+}
+
+.message {
+ border: 1px solid #c00;
+ padding: 0.5em 0.7em;
+ margin: 5px 0 15px;
+ background-color: #ffebe8;
+}
+
+/* @noflip */
+#dbname,
+#uname,
+#pwd,
+#dbhost,
+#prefix,
+#user_login,
+#admin_email,
+#pass1,
+#pass2 {
+ direction: ltr;
+}
+
+
+/* localization */
+body.rtl,
+.rtl textarea,
+.rtl input,
+.rtl submit {
+ font-family: Tahoma, sans-serif;
+}
+
+:lang(he-il) body.rtl,
+:lang(he-il) .rtl textarea,
+:lang(he-il) .rtl input,
+:lang(he-il) .rtl submit {
+ font-family: Arial, sans-serif;
+}
+
+@media only screen and (max-width: 799px) {
+ body {
+ margin-top: 115px;
+ }
+ #logo a {
+ margin: -125px auto 30px;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+
+ .form-table {
+ margin-top: 0;
+ }
+
+ .form-table th,
+ .form-table td {
+ display: block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .form-table th {
+ padding: 20px 0 0;
+ }
+
+ .form-table td {
+ padding: 5px 0;
+ border: 0;
+ margin: 0;
+ }
+
+ textarea,
+ input {
+ font-size: 16px;
+ }
+
+ .form-table td input[type="text"],
+ .form-table td input[type="email"],
+ .form-table td input[type="url"],
+ .form-table td input[type="password"],
+ .form-table td select,
+ .form-table td textarea,
+ .form-table span.description {
+ width: 100%;
+ font-size: 16px;
+ line-height: 1.5;
+ padding: 7px 10px;
+ display: block;
+ max-width: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+}
+
+body.language-chooser {
+ max-width: 300px;
+}
+
+.language-chooser select {
+ padding: 8px;
+ width: 100%;
+ display: block;
+ border: 1px solid #ddd;
+ background-color: #fff;
+ color: #333;
+ font-size: 16px;
+ font-family: Arial, sans-serif;
+ font-weight: normal;
+}
+
+.language-chooser p {
+ text-align: left;
+}
+
+.screen-reader-input,
+.screen-reader-text {
+ position: absolute;
+ margin: -1px;
+ padding: 0;
+ height: 1px;
+ width: 1px;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
+ border: 0;
+}
+
+.spinner {
+ background: url(../images/spinner.gif) no-repeat;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+ visibility: hidden;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ width: 20px;
+ height: 20px;
+ margin: 2px 5px 0;
+}
+
+.step .spinner {
+ display: inline-block;
+ margin-top: 8px;
+ margin-left: 15px;
+ vertical-align: top;
+}
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+
+ .spinner {
+ background-image: url(../images/spinner-2x.gif);
+ }
+
+}
diff --git a/wp-admin/css/install-rtl.min.css b/wp-admin/css/install-rtl.min.css
new file mode 100644
index 0000000..5be7a9a
--- /dev/null
+++ b/wp-admin/css/install-rtl.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1;margin:0 20px}body{background:#fff;color:#444;font-family:"Open Sans",sans-serif;margin:140px auto 25px;padding:20px 20px 10px;max-width:700px;-webkit-font-smoothing:subpixel-antialiased;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}a{color:#0074a2;text-decoration:none}a:hover{color:#2ea2cc}h1{border-bottom:1px solid #dedede;clear:both;color:#666;font-size:24px;margin:30px 0;padding:0 0 7px;font-weight:400}h2{font-size:16px}dd,dt,li,p{padding-bottom:2px;font-size:14px;line-height:1.5}.code,code{font-family:Consolas,Monaco,monospace}dl,ol,ul{padding:5px 22px 5px 5px}a img{border:0}abbr{border:0;font-variant:normal}label{cursor:pointer}#logo{margin:6px 0 14px;border-bottom:none;text-align:center}#logo a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);-webkit-background-size:84px;background-size:84px;background-position:center top;background-repeat:no-repeat;color:#999;height:84px;font-size:20px;font-weight:400;line-height:1.3em;margin:-130px auto 25px;padding:0;text-decoration:none;width:84px;text-indent:-9999px;outline:0;overflow:hidden;display:block}.step{margin:20px 0 15px}.step,th{text-align:right;padding:0}.language-chooser.wp-core-ui .step .button.button-large{height:36px;vertical-align:middle;font-size:14px}textarea{border:1px solid #dfdfdf;font-family:"Open Sans",sans-serif;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table{border-collapse:collapse;margin-top:1em;width:100%}.form-table td{margin-bottom:9px;padding:10px 0 10px 20px;border-bottom:8px solid #fff;font-size:14px;vertical-align:top}.form-table th{font-size:14px;text-align:right;padding:16px 0 10px 20px;width:140px;vertical-align:top}.form-table code{line-height:18px;font-size:14px}.form-table p{margin:4px 0 0;font-size:11px}.form-table input{line-height:20px;font-size:15px;padding:3px 5px;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}input,submit{font-family:"Open Sans",sans-serif}.form-table input[type=email],.form-table input[type=password],.form-table input[type=text],.form-table input[type=url]{width:206px}.form-table th p{font-weight:400}.form-table.install-success td{vertical-align:middle;padding:16px 0 10px 20px}.form-table.install-success td p{margin:0;font-size:14px}.form-table.install-success td code{margin:0;font-size:18px}#error-page{margin-top:50px}#error-page p{font-size:14px;line-height:18px;margin:25px 0 20px}#error-page code,.code{font-family:Consolas,Monaco,monospace}#pass-strength-result{background-color:#eee;border-color:#ddd!important;border-style:solid;border-width:1px;margin:5px 0 5px 5px;padding:5px;text-align:center;width:200px;display:none}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}.message{border:1px solid #c00;padding:.5em .7em;margin:5px 0 15px;background-color:#ffebe8}#admin_email,#dbhost,#dbname,#pass1,#pass2,#prefix,#pwd,#uname,#user_login{direction:ltr}.rtl input,.rtl submit,.rtl textarea,body.rtl{font-family:Tahoma,sans-serif}:lang(he-il) .rtl input,:lang(he-il) .rtl submit,:lang(he-il) .rtl textarea,:lang(he-il) body.rtl{font-family:Arial,sans-serif}@media only screen and (max-width:799px){body{margin-top:115px}#logo a{margin:-125px auto 30px}}@media screen and (max-width:782px){.form-table{margin-top:0}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table th{padding:20px 0 0}.form-table td{padding:5px 0;border:0;margin:0}input,textarea{font-size:16px}.form-table span.description,.form-table td input[type=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td input[type=url],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}}body.language-chooser{max-width:300px}.language-chooser select{padding:8px;width:100%;display:block;border:1px solid #ddd;background-color:#fff;color:#333;font-size:16px;font-family:Arial,sans-serif;font-weight:400}.language-chooser p{text-align:left}.screen-reader-input,.screen-reader-text{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.spinner{background:url(../images/spinner.gif) 0 0/20px 20px no-repeat;-webkit-background-size:20px 20px;visibility:hidden;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}.step .spinner{display:inline-block;margin-top:8px;margin-left:15px;vertical-align:top}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.spinner{background-image:url(../images/spinner-2x.gif)}}
\ No newline at end of file
diff --git a/wp-admin/css/install.css b/wp-admin/css/install.css
new file mode 100644
index 0000000..28c071c
--- /dev/null
+++ b/wp-admin/css/install.css
@@ -0,0 +1,389 @@
+html {
+ background: #f1f1f1;
+ margin: 0 20px;
+}
+
+body {
+ background: #fff;
+ color: #444;
+ font-family: "Open Sans", sans-serif;
+ margin: 140px auto 25px;
+ padding: 20px 20px 10px 20px;
+ max-width: 700px;
+ -webkit-font-smoothing: subpixel-antialiased;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+}
+
+a {
+ color: #0074a2;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #2ea2cc;
+}
+
+h1 {
+ border-bottom: 1px solid #dedede;
+ clear: both;
+ color: #666;
+ font-size: 24px;
+ margin: 30px 0;
+ padding: 0;
+ padding-bottom: 7px;
+ font-weight: normal;
+}
+
+h2 {
+ font-size: 16px;
+}
+
+p, li, dd, dt {
+ padding-bottom: 2px;
+ font-size: 14px;
+ line-height: 1.5;
+}
+
+code, .code {
+ font-family: Consolas, Monaco, monospace;
+}
+
+ul, ol, dl {
+ padding: 5px 5px 5px 22px;
+}
+
+a img {
+ border:0
+}
+abbr {
+ border: 0;
+ font-variant: normal;
+}
+
+label {
+ cursor: pointer;
+}
+
+#logo {
+ margin: 6px 0 14px 0;
+ border-bottom: none;
+ text-align:center
+}
+#logo a {
+ background-image: url(../images/w-logo-blue.png?ver=20131202);
+ background-image: none, url(../images/wordpress-logo.svg?ver=20131107);
+ -webkit-background-size: 84px;
+ background-size: 84px;
+ background-position: center top;
+ background-repeat: no-repeat;
+ color: #999;
+ height: 84px;
+ font-size: 20px;
+ font-weight: normal;
+ line-height: 1.3em;
+ margin: -130px auto 25px;
+ padding: 0;
+ text-decoration: none;
+ width: 84px;
+ text-indent: -9999px;
+ outline: none;
+ overflow: hidden;
+ display: block;
+}
+.step {
+ margin: 20px 0 15px;
+}
+.step, th {
+ text-align: left;
+ padding: 0;
+}
+.language-chooser.wp-core-ui .step .button.button-large {
+ height: 36px;
+ vertical-align: middle;
+ font-size: 14px;
+}
+textarea {
+ border: 1px solid #dfdfdf;
+ font-family: "Open Sans", sans-serif;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.form-table {
+ border-collapse: collapse;
+ margin-top: 1em;
+ width: 100%;
+}
+
+.form-table td {
+ margin-bottom: 9px;
+ padding: 10px 20px 10px 0;
+ border-bottom: 8px solid #fff;
+ font-size: 14px;
+ vertical-align: top
+}
+
+.form-table th {
+ font-size: 14px;
+ text-align: left;
+ padding: 16px 20px 10px 0;
+ width: 140px;
+ vertical-align: top;
+}
+
+.form-table code {
+ line-height: 18px;
+ font-size: 14px;
+}
+
+.form-table p {
+ margin: 4px 0 0 0;
+ font-size: 11px;
+}
+
+.form-table input {
+ line-height: 20px;
+ font-size: 15px;
+ padding: 3px 5px;
+ border: 1px solid #ddd;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07);
+ box-shadow: inset 0 1px 2px rgba(0,0,0,0.07);
+}
+
+input,
+submit {
+ font-family: "Open Sans", sans-serif;
+}
+
+.form-table input[type=text],
+.form-table input[type=email],
+.form-table input[type=url],
+.form-table input[type=password] {
+ width: 206px;
+}
+
+.form-table th p {
+ font-weight: normal;
+}
+
+.form-table.install-success td {
+ vertical-align: middle;
+ padding: 16px 20px 10px 0;
+}
+
+.form-table.install-success td p {
+ margin: 0;
+ font-size: 14px;
+}
+
+.form-table.install-success td code {
+ margin: 0;
+ font-size: 18px;
+}
+
+#error-page {
+ margin-top: 50px;
+}
+
+#error-page p {
+ font-size: 14px;
+ line-height: 18px;
+ margin: 25px 0 20px;
+}
+
+#error-page code, .code {
+ font-family: Consolas, Monaco, monospace;
+}
+
+#pass-strength-result {
+ background-color: #eee;
+ border-color: #ddd !important;
+ border-style: solid;
+ border-width: 1px;
+ margin: 5px 5px 5px 0;
+ padding: 5px;
+ text-align: center;
+ width: 200px;
+ display: none;
+}
+
+#pass-strength-result.bad {
+ background-color: #ffb78c;
+ border-color: #ff853c !important;
+}
+
+#pass-strength-result.good {
+ background-color: #ffec8b;
+ border-color: #ffcc00 !important;
+}
+
+#pass-strength-result.short {
+ background-color: #ffa0a0;
+ border-color: #f04040 !important;
+}
+
+#pass-strength-result.strong {
+ background-color: #c3ff88;
+ border-color: #8dff1c !important;
+}
+
+.message {
+ border: 1px solid #c00;
+ padding: 0.5em 0.7em;
+ margin: 5px 0 15px;
+ background-color: #ffebe8;
+}
+
+/* @noflip */
+#dbname,
+#uname,
+#pwd,
+#dbhost,
+#prefix,
+#user_login,
+#admin_email,
+#pass1,
+#pass2 {
+ direction: ltr;
+}
+
+
+/* localization */
+body.rtl,
+.rtl textarea,
+.rtl input,
+.rtl submit {
+ font-family: Tahoma, sans-serif;
+}
+
+:lang(he-il) body.rtl,
+:lang(he-il) .rtl textarea,
+:lang(he-il) .rtl input,
+:lang(he-il) .rtl submit {
+ font-family: Arial, sans-serif;
+}
+
+@media only screen and (max-width: 799px) {
+ body {
+ margin-top: 115px;
+ }
+ #logo a {
+ margin: -125px auto 30px;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+
+ .form-table {
+ margin-top: 0;
+ }
+
+ .form-table th,
+ .form-table td {
+ display: block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .form-table th {
+ padding: 20px 0 0;
+ }
+
+ .form-table td {
+ padding: 5px 0;
+ border: 0;
+ margin: 0;
+ }
+
+ textarea,
+ input {
+ font-size: 16px;
+ }
+
+ .form-table td input[type="text"],
+ .form-table td input[type="email"],
+ .form-table td input[type="url"],
+ .form-table td input[type="password"],
+ .form-table td select,
+ .form-table td textarea,
+ .form-table span.description {
+ width: 100%;
+ font-size: 16px;
+ line-height: 1.5;
+ padding: 7px 10px;
+ display: block;
+ max-width: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+}
+
+body.language-chooser {
+ max-width: 300px;
+}
+
+.language-chooser select {
+ padding: 8px;
+ width: 100%;
+ display: block;
+ border: 1px solid #ddd;
+ background-color: #fff;
+ color: #333;
+ font-size: 16px;
+ font-family: Arial, sans-serif;
+ font-weight: normal;
+}
+
+.language-chooser p {
+ text-align: right;
+}
+
+.screen-reader-input,
+.screen-reader-text {
+ position: absolute;
+ margin: -1px;
+ padding: 0;
+ height: 1px;
+ width: 1px;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
+ border: 0;
+}
+
+.spinner {
+ background: url(../images/spinner.gif) no-repeat;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+ visibility: hidden;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ width: 20px;
+ height: 20px;
+ margin: 2px 5px 0;
+}
+
+.step .spinner {
+ display: inline-block;
+ margin-top: 8px;
+ margin-right: 15px;
+ vertical-align: top;
+}
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+
+ .spinner {
+ background-image: url(../images/spinner-2x.gif);
+ }
+
+}
diff --git a/wp-admin/css/install.min.css b/wp-admin/css/install.min.css
new file mode 100644
index 0000000..338db62
--- /dev/null
+++ b/wp-admin/css/install.min.css
@@ -0,0 +1 @@
+html{background:#f1f1f1;margin:0 20px}body{background:#fff;color:#444;font-family:"Open Sans",sans-serif;margin:140px auto 25px;padding:20px 20px 10px;max-width:700px;-webkit-font-smoothing:subpixel-antialiased;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}a{color:#0074a2;text-decoration:none}a:hover{color:#2ea2cc}h1{border-bottom:1px solid #dedede;clear:both;color:#666;font-size:24px;margin:30px 0;padding:0 0 7px;font-weight:400}h2{font-size:16px}dd,dt,li,p{padding-bottom:2px;font-size:14px;line-height:1.5}.code,code{font-family:Consolas,Monaco,monospace}dl,ol,ul{padding:5px 5px 5px 22px}a img{border:0}abbr{border:0;font-variant:normal}label{cursor:pointer}#logo{margin:6px 0 14px;border-bottom:none;text-align:center}#logo a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);-webkit-background-size:84px;background-size:84px;background-position:center top;background-repeat:no-repeat;color:#999;height:84px;font-size:20px;font-weight:400;line-height:1.3em;margin:-130px auto 25px;padding:0;text-decoration:none;width:84px;text-indent:-9999px;outline:0;overflow:hidden;display:block}.step{margin:20px 0 15px}.step,th{text-align:left;padding:0}.language-chooser.wp-core-ui .step .button.button-large{height:36px;vertical-align:middle;font-size:14px}textarea{border:1px solid #dfdfdf;font-family:"Open Sans",sans-serif;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table{border-collapse:collapse;margin-top:1em;width:100%}.form-table td{margin-bottom:9px;padding:10px 20px 10px 0;border-bottom:8px solid #fff;font-size:14px;vertical-align:top}.form-table th{font-size:14px;text-align:left;padding:16px 20px 10px 0;width:140px;vertical-align:top}.form-table code{line-height:18px;font-size:14px}.form-table p{margin:4px 0 0;font-size:11px}.form-table input{line-height:20px;font-size:15px;padding:3px 5px;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}input,submit{font-family:"Open Sans",sans-serif}.form-table input[type=email],.form-table input[type=password],.form-table input[type=text],.form-table input[type=url]{width:206px}.form-table th p{font-weight:400}.form-table.install-success td{vertical-align:middle;padding:16px 20px 10px 0}.form-table.install-success td p{margin:0;font-size:14px}.form-table.install-success td code{margin:0;font-size:18px}#error-page{margin-top:50px}#error-page p{font-size:14px;line-height:18px;margin:25px 0 20px}#error-page code,.code{font-family:Consolas,Monaco,monospace}#pass-strength-result{background-color:#eee;border-color:#ddd!important;border-style:solid;border-width:1px;margin:5px 5px 5px 0;padding:5px;text-align:center;width:200px;display:none}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c!important}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0!important}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040!important}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c!important}.message{border:1px solid #c00;padding:.5em .7em;margin:5px 0 15px;background-color:#ffebe8}#admin_email,#dbhost,#dbname,#pass1,#pass2,#prefix,#pwd,#uname,#user_login{direction:ltr}.rtl input,.rtl submit,.rtl textarea,body.rtl{font-family:Tahoma,sans-serif}:lang(he-il) .rtl input,:lang(he-il) .rtl submit,:lang(he-il) .rtl textarea,:lang(he-il) body.rtl{font-family:Arial,sans-serif}@media only screen and (max-width:799px){body{margin-top:115px}#logo a{margin:-125px auto 30px}}@media screen and (max-width:782px){.form-table{margin-top:0}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table th{padding:20px 0 0}.form-table td{padding:5px 0;border:0;margin:0}input,textarea{font-size:16px}.form-table span.description,.form-table td input[type=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td input[type=url],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}}body.language-chooser{max-width:300px}.language-chooser select{padding:8px;width:100%;display:block;border:1px solid #ddd;background-color:#fff;color:#333;font-size:16px;font-family:Arial,sans-serif;font-weight:400}.language-chooser p{text-align:right}.screen-reader-input,.screen-reader-text{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.spinner{background:url(../images/spinner.gif) 0 0/20px 20px no-repeat;-webkit-background-size:20px 20px;visibility:hidden;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}.step .spinner{display:inline-block;margin-top:8px;margin-right:15px;vertical-align:top}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.spinner{background-image:url(../images/spinner-2x.gif)}}
\ No newline at end of file
diff --git a/wp-admin/css/l10n-rtl.css b/wp-admin/css/l10n-rtl.css
new file mode 100644
index 0000000..c0b0bcf
--- /dev/null
+++ b/wp-admin/css/l10n-rtl.css
@@ -0,0 +1,101 @@
+/*------------------------------------------------------------------------------
+ 27.0 - Localization
+------------------------------------------------------------------------------*/
+
+/* RTL except Hebrew (see below): Tahoma as the first font; */
+body.rtl,
+body.rtl .press-this a.wp-switch-editor {
+ font-family: Tahoma, Arial, sans-serif;
+}
+
+
+/* he_IL: Remove Tahoma from the font stack. Arial is best for Hebrew. */
+body.locale-he-il,
+body.locale-he-il .press-this a.wp-switch-editor {
+ font-family: Arial, sans-serif;
+}
+
+/* he_IL: Have
be bold rather than italic. */
+.locale-he-il em {
+ font-style: normal;
+ font-weight: bold;
+}
+
+/* zh_CN: Remove italic properties. */
+.locale-zh-cn .howto,
+.locale-zh-cn .tablenav .displaying-num,
+.locale-zh-cn .js .input-with-default-title,
+.locale-zh-cn .link-to-original,
+.locale-zh-cn .inline-edit-row fieldset span.title,
+.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,
+.locale-zh-cn #utc-time,
+.locale-zh-cn #local-time,
+.locale-zh-cn p.install-help,
+.locale-zh-cn p.help,
+.locale-zh-cn p.description,
+.locale-zh-cn span.description,
+.locale-zh-cn .form-wrap p {
+ font-style: normal;
+}
+
+/* zh_CN: Enlarge dashboard widget 'Configure' link */
+.locale-zh-cn .hdnle a { font-size: 12px; }
+
+/* zn_CH: Enlarge font size, set font-size: normal */
+.locale-zh-cn form.upgrade .hint { font-style: normal; font-size: 100%; }
+
+/* Zn_CH: Distraction-free writing.
+ * More beautiful font for "Just write."
+ * Larger text for HTML/Visual mode.
+ */
+.locale-zh-cn #wp-fullscreen-tagline { font-family: KaiTi, "楷体", sans-serif; }
+.locale-zh-cn #wp-fullscreen-modes a { font-size: 12px; }
+
+/* zh_CN: Enlarge font-size. */
+.locale-zh-cn #sort-buttons { font-size: 1em !important; }
+
+/* de_DE: Text needs more space for translation */
+.locale-de-de .inline-edit-row fieldset label span.title {
+ width: 7em; /* default 5em */
+}
+.locale-de-de .inline-edit-row fieldset label span.input-text-wrap {
+ margin-right: 7em; /* default 5em */
+}
+.locale-de-de #customize-header-actions .button {
+ padding: 0 5px 1px; /* default 0 10px 1px */
+}
+.locale-de-de #customize-header-actions .spinner {
+ margin: 16px 3px 0; /* default 16px 4px 0 5px */
+}
+
+/* ru_RU: Text needs more room to breathe. */
+.locale-ru-ru .inline-edit-row fieldset label span.title {
+ width: 8em; /* default 5em */
+}
+.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap {
+ margin-right: 8em; /* default 5em */
+}
+.locale-ru-ru.post-php .tagsdiv .newtag,
+.locale-ru-ru.post-new-php .tagsdiv .newtag {
+ width: 165px; /* default 180px - 15px */
+}
+.locale-ru-ru.press-this .posting {
+ margin-left: 277px; /* default 252px + 25px */
+}
+.locale-ru-ru .press-this-sidebar {
+ width: 265px; /* default 240px + 25px */
+}
+.locale-ru-ru #customize-header-actions .button {
+ padding: 0 5px 1px; /* default 0 10px 1px */
+}
+.locale-ru-ru #customize-header-actions .spinner {
+ margin: 16px 3px 0; /* default 16px 4px 0 5px */
+}
+
+/* lt_LT: QuickEdit */
+.locale-lt-lt .inline-edit-row fieldset label span.title {
+ width: 8em;
+}
+.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap {
+ margin-right: 8em;
+}
diff --git a/wp-admin/css/l10n.css b/wp-admin/css/l10n.css
new file mode 100644
index 0000000..9b5b2a0
--- /dev/null
+++ b/wp-admin/css/l10n.css
@@ -0,0 +1,101 @@
+/*------------------------------------------------------------------------------
+ 27.0 - Localization
+------------------------------------------------------------------------------*/
+
+/* RTL except Hebrew (see below): Tahoma as the first font; */
+body.rtl,
+body.rtl .press-this a.wp-switch-editor {
+ font-family: Tahoma, Arial, sans-serif;
+}
+
+
+/* he_IL: Remove Tahoma from the font stack. Arial is best for Hebrew. */
+body.locale-he-il,
+body.locale-he-il .press-this a.wp-switch-editor {
+ font-family: Arial, sans-serif;
+}
+
+/* he_IL: Have be bold rather than italic. */
+.locale-he-il em {
+ font-style: normal;
+ font-weight: bold;
+}
+
+/* zh_CN: Remove italic properties. */
+.locale-zh-cn .howto,
+.locale-zh-cn .tablenav .displaying-num,
+.locale-zh-cn .js .input-with-default-title,
+.locale-zh-cn .link-to-original,
+.locale-zh-cn .inline-edit-row fieldset span.title,
+.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,
+.locale-zh-cn #utc-time,
+.locale-zh-cn #local-time,
+.locale-zh-cn p.install-help,
+.locale-zh-cn p.help,
+.locale-zh-cn p.description,
+.locale-zh-cn span.description,
+.locale-zh-cn .form-wrap p {
+ font-style: normal;
+}
+
+/* zh_CN: Enlarge dashboard widget 'Configure' link */
+.locale-zh-cn .hdnle a { font-size: 12px; }
+
+/* zn_CH: Enlarge font size, set font-size: normal */
+.locale-zh-cn form.upgrade .hint { font-style: normal; font-size: 100%; }
+
+/* Zn_CH: Distraction-free writing.
+ * More beautiful font for "Just write."
+ * Larger text for HTML/Visual mode.
+ */
+.locale-zh-cn #wp-fullscreen-tagline { font-family: KaiTi, "楷体", sans-serif; }
+.locale-zh-cn #wp-fullscreen-modes a { font-size: 12px; }
+
+/* zh_CN: Enlarge font-size. */
+.locale-zh-cn #sort-buttons { font-size: 1em !important; }
+
+/* de_DE: Text needs more space for translation */
+.locale-de-de .inline-edit-row fieldset label span.title {
+ width: 7em; /* default 5em */
+}
+.locale-de-de .inline-edit-row fieldset label span.input-text-wrap {
+ margin-left: 7em; /* default 5em */
+}
+.locale-de-de #customize-header-actions .button {
+ padding: 0 5px 1px; /* default 0 10px 1px */
+}
+.locale-de-de #customize-header-actions .spinner {
+ margin: 16px 3px 0; /* default 16px 4px 0 5px */
+}
+
+/* ru_RU: Text needs more room to breathe. */
+.locale-ru-ru .inline-edit-row fieldset label span.title {
+ width: 8em; /* default 5em */
+}
+.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap {
+ margin-left: 8em; /* default 5em */
+}
+.locale-ru-ru.post-php .tagsdiv .newtag,
+.locale-ru-ru.post-new-php .tagsdiv .newtag {
+ width: 165px; /* default 180px - 15px */
+}
+.locale-ru-ru.press-this .posting {
+ margin-right: 277px; /* default 252px + 25px */
+}
+.locale-ru-ru .press-this-sidebar {
+ width: 265px; /* default 240px + 25px */
+}
+.locale-ru-ru #customize-header-actions .button {
+ padding: 0 5px 1px; /* default 0 10px 1px */
+}
+.locale-ru-ru #customize-header-actions .spinner {
+ margin: 16px 3px 0; /* default 16px 4px 0 5px */
+}
+
+/* lt_LT: QuickEdit */
+.locale-lt-lt .inline-edit-row fieldset label span.title {
+ width: 8em;
+}
+.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap {
+ margin-left: 8em;
+}
diff --git a/wp-admin/css/list-tables-rtl.css b/wp-admin/css/list-tables-rtl.css
new file mode 100644
index 0000000..d0bce52
--- /dev/null
+++ b/wp-admin/css/list-tables-rtl.css
@@ -0,0 +1,1875 @@
+/* List table styles */
+.post-com-count-wrapper {
+ min-width: 22px;
+}
+
+.post-com-count {
+ background: none;
+ height: 1.3em;
+ line-height: 1.1em;
+ display: block;
+ text-decoration: none;
+ padding: 0 0 6px;
+ cursor: pointer;
+ background-position: center -80px;
+ background-repeat: no-repeat;
+ color: #fff;
+}
+
+.post-com-count:after { /* draw bubble connector using CSS! */
+ content: "";
+ display: block;
+ width: 0;
+ height: 0;
+ margin-right: 8px;
+ border-top: 5px solid #bbb;
+ border-left: 5px solid transparent;
+}
+
+.post-com-count span {
+ font-size: 11px;
+ font-weight: 600;
+ height: 1.4em;
+ line-height: 1.4em;
+ min-width: 0.7em;
+ padding: 0 6px;
+ display: inline-block;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ background-color: #bbb;
+ color: #fff;
+}
+
+.post-com-count:hover {
+ background-position: center -3px;
+}
+
+.post-com-count:hover span {
+ background-color: #2ea2cc;
+}
+
+.post-com-count:hover:after {
+ border-top: 5px solid #2ea2cc;
+}
+
+strong .post-com-count {
+ background-position: center -55px;
+}
+
+strong .post-com-count span {
+ background-color: #0074a2;
+}
+
+strong .post-com-count:after {
+ border-top: 5px solid #0074a2;
+}
+
+.column-response .post-com-count {
+ float: right;
+ margin-left: 5px;
+ text-align: center;
+}
+
+.response-links {
+ float: right;
+}
+
+/* comments */
+
+.commentlist li {
+ padding: 1em 1em .2em;
+ margin: 0;
+ border-bottom: 1px solid #ccc;
+}
+
+.commentlist li li {
+ border-bottom: 0;
+ padding: 0;
+}
+
+.commentlist p {
+ padding: 0;
+ margin: 0 0 .8em;
+}
+
+#submitted-on,
+.submitted-on {
+ color: #777;
+}
+
+/* reply to comments */
+#replyrow td {
+ padding: 2px;
+}
+
+#replysubmit {
+ margin: 0;
+ padding: 0 5px 3px;
+ text-align: center;
+}
+
+#replysubmit .spinner {
+ padding: 2px 0 0;
+ vertical-align: top;
+ float: left;
+}
+
+#replysubmit .button {
+ margin-left: 5px;
+}
+
+#replysubmit .error {
+ color: red;
+ line-height: 21px;
+ text-align: center;
+}
+
+#replyrow h5 {
+ margin: .2em 0 0;
+ padding: 0 5px;
+ line-height: 1.4em;
+ font-size: 1em;
+}
+
+#edithead .inside {
+ float: right;
+ padding: 3px 5px 2px 0;
+ margin: 0;
+ text-align: center;
+}
+
+#edithead .inside input {
+ width: 180px;
+}
+
+#edithead label {
+ padding: 2px 0;
+}
+
+#replycontainer {
+ padding: 5px;
+}
+
+#replycontent {
+ height: 120px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#replyerror {
+ border-color: #ddd;
+ background-color: #f9f9f9;
+}
+
+/* @todo: is this used? */
+.commentlist .avatar {
+ vertical-align: text-top;
+}
+
+#the-comment-list .attachment-80x60 {
+ padding: 4px 8px;
+}
+
+#the-comment-list tr.undo,
+#the-comment-list div.undo {
+ background-color: #f4f4f4;
+}
+
+#the-comment-list .unapproved th,
+#the-comment-list .unapproved td {
+ background-color: #fef7f1;
+}
+
+#the-comment-list .unapproved th.check-column {
+ border-right: 4px solid #d54e21;
+}
+
+#the-comment-list .unapproved th.check-column input {
+ margin-right: 4px;
+}
+
+#the-comment-list .approve a {
+ color: #006505;
+}
+
+#the-comment-list .unapprove a {
+ color: #d98500;
+}
+
+#the-comment-list th,
+#the-comment-list td {
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+}
+
+#the-comment-list tr:last-child th,
+#the-comment-list tr:last-child td {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#the-comment-list tr.unapproved + tr.approved th,
+#the-comment-list tr.unapproved + tr.approved td {
+ border-top: 1px solid rgba(0, 0, 0, 0.03);
+}
+
+/* table vim shortcuts */
+.vim-current,
+.vim-current th,
+.vim-current td {
+ background-color: #e4f2fd !important;
+}
+
+th .comment-grey-bubble {
+ height: 16px;
+ width: 16px;
+}
+
+th .comment-grey-bubble:before {
+ content: '\f101';
+ font: normal 20px/.5 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0;
+ top: 4px;
+ right: -4px;
+ position: relative;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #444;
+}
+
+/*------------------------------------------------------------------------------
+ 10.0 - List Posts (/Pages/etc)
+------------------------------------------------------------------------------*/
+
+table.fixed {
+ table-layout: fixed;
+}
+
+.fixed .column-rating,
+.fixed .column-visible {
+ width: 8%;
+}
+
+.fixed .column-posts,
+.fixed .column-date,
+.fixed .column-parent,
+.fixed .column-links,
+.fixed .column-author,
+.fixed .column-format {
+ width: 10%;
+}
+
+.fixed .column-posts {
+ width: 74px;
+}
+
+.fixed .column-comment .comment-author {
+ display: none;
+}
+
+.fixed .column-response,
+.fixed .column-categories,
+.fixed .column-tags,
+.fixed .column-rel,
+.fixed .column-role {
+ width: 15%;
+}
+
+.fixed .column-slug {
+ width: 25%;
+}
+
+.fixed .column-locations {
+ width: 35%;
+}
+
+.fixed .column-comments {
+ width: 4em;
+ padding: 8px 0;
+ text-align: right;
+}
+
+.fixed .column-comments .vers {
+ padding-right: 3px;
+}
+
+.fixed .column-comments a {
+ float: right;
+}
+
+.fixed .column-icon {
+ width: 80px;
+}
+
+/* @todo: pick a consistent list table selector */
+.wp-list-table a {
+ -webkit-transition: none;
+ transition: none;
+}
+
+#the-list tr:last-child td,
+#the-list tr:last-child th {
+ border-bottom: none !important;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#comments-form .fixed .column-author {
+ width: 20%;
+}
+
+#commentsdiv.postbox .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#commentsdiv .inside .row-actions {
+ line-height:18px;
+}
+
+#commentsdiv .inside .column-author {
+ width: 25%;
+}
+
+#commentsdiv .column-comment p {
+ margin: 0.6em 0;
+ padding: 0;
+}
+
+#commentsdiv #replyrow td {
+ padding: 0;
+}
+
+#commentsdiv p {
+ padding: 8px 10px;
+ margin: 0;
+}
+
+#commentsdiv .comments-box {
+ border: 0 none;
+}
+
+#commentsdiv .comments-box thead th {
+ background: transparent;
+ padding: 0 7px 4px;
+ font-style: italic;
+}
+
+#commentsdiv .comments-box tr:last-child td {
+ border-bottom: 0 none;
+}
+
+#commentsdiv .spinner {
+ padding-right: 5px;
+}
+
+.sorting-indicator {
+ display: none;
+ width: 10px;
+ height: 4px;
+ margin-top: 8px;
+ margin-right: 7px;
+}
+
+.sorting-indicator:before {
+ background: none;
+ content: '\f142';
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0;
+ top: -4px;
+ right: -8px;
+ color: #444;
+ line-height: 10px;
+ position: relative;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #444;
+}
+
+.column-comments .sorting-indicator:before {
+ top: 0;
+ right: -10px;
+}
+
+th.sorted.asc .sorting-indicator:before,
+th.desc:hover span.sorting-indicator:before {
+ content: '\f142';
+}
+
+th.sorted.desc .sorting-indicator:before,
+th.asc:hover span.sorting-indicator:before {
+ content: '\f140';
+}
+
+tr.wp-locked .locked-indicator {
+ margin-right: 6px;
+ height: 20px;
+ width: 16px;
+}
+
+tr.wp-locked .locked-indicator:before {
+ color: #888;
+ content: '\f160';
+ display: inline-block;
+ float: right;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ vertical-align: middle;
+ margin-right: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+tr.wp-locked .check-column label,
+tr.wp-locked .check-column input[type="checkbox"],
+tr.wp-locked .row-actions .inline,
+tr.wp-locked .row-actions .trash {
+ display: none;
+}
+
+tr .locked-info {
+ height: 0;
+ opacity: 0;
+}
+
+tr.wp-locked .locked-info {
+ margin-top: 8px;
+ height: auto;
+ opacity: 1;
+}
+
+.locked-text {
+ vertical-align: top;
+}
+
+tr.locked-info, tr.wp-locked .locked-info {
+ -webkit-transition: height 1s, opacity 0.5s;
+ transition: height 1s, opacity 0.5s;
+}
+
+.fixed .column-comments .sorting-indicator {
+ margin-top: 3px;
+}
+
+#menu-locations-wrap .widefat {
+ width: 60%;
+}
+
+.widefat th.sortable,
+.widefat th.sorted {
+ padding: 0;
+}
+
+th.sortable a,
+th.sorted a {
+ display: block;
+ overflow: hidden;
+ padding: 7px 10px 8px 7px;
+}
+
+th.manage-column a,
+th.sortable a:hover,
+th.sortable a:active,
+th.sortable a:focus {
+ color: #333;
+}
+
+th.sortable a:focus {
+ background: #e1e1e1;
+}
+
+.fixed .column-comments.sortable a,
+.fixed .column-comments.sorted a {
+ padding: 8px 0;
+}
+
+th.sortable a span,
+th.sorted a span {
+ float: right;
+ cursor: pointer;
+}
+
+th.sorted.asc .sorting-indicator,
+th.desc:hover span.sorting-indicator {
+ display: block;
+ background-position: 0 0;
+}
+
+th.sorted.desc .sorting-indicator,
+th.asc:hover span.sorting-indicator {
+ display: block;
+ background-position: -7px 0;
+}
+
+/* Bulk Actions */
+.tablenav-pages a {
+ font-weight: 600;
+ margin-left: 1px;
+ padding: 0 2px;
+}
+.tablenav-pages .current-page {
+ padding-top: 0;
+ text-align: center;
+}
+.tablenav-pages .next-page {
+ margin-right: 2px;
+}
+
+.tablenav a.button-secondary {
+ display: block;
+ margin: 3px 0 0 8px;
+}
+
+.tablenav {
+ clear: both;
+ height: 30px;
+ margin: 6px 0 4px;
+ vertical-align: middle;
+}
+
+.tablenav.themes {
+ max-width: 98%;
+}
+
+.tablenav .tablenav-pages {
+ float: left;
+ display: block;
+ cursor: default;
+ height: 30px;
+ color: #555;
+ line-height: 30px;
+ font-size: 12px;
+}
+
+.tablenav .no-pages,
+.tablenav .one-page .pagination-links {
+ display: none;
+}
+
+.tablenav .tablenav-pages a,
+.tablenav-pages span.current {
+ text-decoration: none;
+ padding: 3px 6px;
+}
+
+.tablenav .tablenav-pages a {
+ padding: 0 10px 3px;
+ background: #eee;
+ background: rgba( 0, 0, 0, 0.05 );
+ font-size: 16px;
+ font-weight: normal;
+}
+
+.tablenav .tablenav-pages a:hover,
+.tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background: #2ea2cc;
+}
+
+.tablenav .tablenav-pages a.disabled,
+.tablenav .tablenav-pages a.disabled:hover,
+.tablenav .tablenav-pages a.disabled:focus,
+.tablenav .tablenav-pages a.disabled:active {
+ color: #aaa;
+ background: #eee;
+ background: rgba( 0, 0, 0, 0.05 );
+}
+
+.tablenav .displaying-num {
+ margin-left: 2px;
+ color: #777;
+ font-size: 12px;
+ font-style: italic;
+}
+
+.tablenav .actions {
+ overflow: hidden;
+ padding: 2px 0 0 8px;
+}
+
+.wp-filter .actions {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.tablenav .delete {
+ margin-left: 20px;
+}
+
+/* @todo: unclear if the following tablenav rules are actually used.
+classes exist in paginate_links() but not seen in list table output. */
+.tablenav .dots {
+ border-color: transparent;
+}
+
+.tablenav .next,
+.tablenav .prev {
+ border-color: transparent;
+ color: #0074a2;
+}
+
+.tablenav .next:hover,
+.tablenav .prev:hover {
+ border-color: transparent;
+ color: #2ea2cc;
+}
+
+.tablenav .view-switch {
+ float: left;
+ margin: 5px 8px 0 16px;
+}
+
+.wp-filter .view-switch {
+ display: inline-block;
+ vertical-align: middle;
+ padding: 15px 0;
+ margin: 0 0 0 20px;
+}
+
+.view-switch a {
+ text-decoration: none;
+}
+
+.view-switch > a {
+ display: inline-block;
+ width: 18px;
+ height: 18px;
+}
+
+.view-switch > a:before {
+ color: #bbb;
+ display: inline-block;
+ float: right;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ vertical-align: middle;
+ margin-right: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.view-switch > .view-list:before {
+ content: '\f163';
+}
+
+.view-switch a:hover:before {
+ color: #727272;
+}
+
+.view-switch a.current:before {
+ color: #0074a2;
+}
+
+.view-switch > a + a {
+ margin-right: 5px;
+}
+
+.view-switch > .view-excerpt:before {
+ content: '\f164';
+}
+
+.view-switch > .view-grid:before {
+ content: '\f509';
+}
+
+.filter {
+ float: right;
+ margin: -5px 10px 0 0;
+}
+
+.filter .subsubsub {
+ margin-right: -10px;
+ margin-top: 13px;
+}
+.screen-per-page {
+ width: 4em;
+}
+
+#posts-filter .wp-filter {
+ margin-bottom: 0;
+}
+
+#posts-filter fieldset {
+ float: right;
+ margin: 0 0 1em 1.5ex;
+ padding: 0;
+}
+
+#posts-filter fieldset legend {
+ padding: 0 1px .2em 0;
+}
+
+p.pagenav {
+ margin: 0;
+ display: inline;
+}
+
+.pagenav span {
+ font-weight: 600;
+ margin: 0 6px;
+}
+
+.row-title {
+ font-size: 14px !important;
+ font-weight: 600;
+}
+
+.column-comment .comment-author {
+ margin-bottom: 0.6em;
+}
+
+.column-author img,
+.column-username img,
+.column-comment .comment-author img {
+ float: right;
+ margin-left: 10px;
+ margin-top: 1px;
+}
+
+.row-actions {
+ color: #ddd;
+ font-size: 13px;
+ visibility: hidden;
+ padding: 2px 0 0;
+}
+
+tr:hover .row-actions,
+.mobile .row-actions,
+.row-actions.visible,
+div.comment-item:hover .row-actions {
+ visibility: visible;
+}
+
+/* deprecated */
+.row-actions-visible {
+ padding: 2px 0 0;
+}
+
+
+/*------------------------------------------------------------------------------
+ 10.1 - Inline Editing
+------------------------------------------------------------------------------*/
+
+/*
+.quick-edit* is for Quick Edit
+.bulk-edit* is for Bulk Edit
+.inline-edit* is for everything
+*/
+
+/* Layout */
+
+#wpbody-content .inline-edit-row fieldset {
+ font-size: 12px;
+ float: right;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+
+tr.inline-edit-row td,
+#wpbody-content .inline-edit-row fieldset .inline-edit-col {
+ padding: 0 0.5em;
+}
+
+#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col {
+ border-width: 0 1px 0 0;
+ border-style: none none none solid;
+}
+
+#wpbody-content .quick-edit-row-post .inline-edit-col-left {
+ width: 40%;
+}
+
+#wpbody-content .quick-edit-row-post .inline-edit-col-right {
+ width: 39%;
+}
+
+#wpbody-content .inline-edit-row-post .inline-edit-col-center {
+ width: 20%;
+}
+
+#wpbody-content .quick-edit-row-page .inline-edit-col-left {
+ width: 50%;
+}
+
+#wpbody-content .quick-edit-row-page .inline-edit-col-right,
+#wpbody-content .bulk-edit-row-post .inline-edit-col-right {
+ width: 49%;
+}
+
+#wpbody-content .bulk-edit-row .inline-edit-col-left {
+ width: 30%;
+}
+
+#wpbody-content .bulk-edit-row-page .inline-edit-col-right {
+ width: 69%;
+}
+
+#wpbody-content .bulk-edit-row .inline-edit-col-bottom {
+ float: left;
+ width: 69%;
+}
+
+#wpbody-content .inline-edit-row-page .inline-edit-col-right {
+ margin-top: 27px;
+}
+
+.inline-edit-row fieldset .inline-edit-group {
+ clear: both;
+}
+
+.inline-edit-row fieldset .inline-edit-group:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.inline-edit-row p.submit {
+ clear: both;
+ padding: 0.5em;
+ margin: 0.5em 0 0;
+}
+
+.inline-edit-row span.error {
+ line-height: 22px;
+ margin: 0 15px;
+ padding: 3px 5px;
+}
+
+/* Positioning */
+.inline-edit-row h4 {
+ margin: .2em 0;
+ padding: 0;
+ line-height: 23px;
+}
+.inline-edit-row fieldset span.title,
+.inline-edit-row fieldset span.checkbox-title {
+ margin: 0;
+ padding: 0;
+ line-height: 27px;
+}
+
+.inline-edit-row fieldset label,
+.inline-edit-row fieldset span.inline-edit-categories-label {
+ display: block;
+ margin: .2em 0;
+}
+
+.inline-edit-row fieldset label.inline-edit-tags {
+ margin-top: 0;
+}
+
+.inline-edit-row fieldset label.inline-edit-tags span.title {
+ margin: .2em 0;
+ width: auto;
+}
+
+.inline-edit-row fieldset label span.title {
+ display: block;
+ float: right;
+ width: 5em;
+}
+
+.inline-edit-row fieldset label span.input-text-wrap {
+ display: block;
+ margin-right: 5em;
+}
+
+.quick-edit-row-post fieldset.inline-edit-col-right label span.title {
+ width: auto;
+ padding-left: 0.5em;
+}
+
+.inline-edit-row .input-text-wrap input[type=text] {
+ width: 100%;
+}
+
+.inline-edit-row fieldset label input[type=checkbox] {
+ vertical-align: text-bottom;
+}
+
+.inline-edit-row fieldset label textarea {
+ width: 100%;
+ height: 4em;
+}
+
+#wpbody-content .bulk-edit-row fieldset .inline-edit-group label {
+ max-width: 50%;
+}
+
+#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child {
+ margin-left: 0.5em
+}
+
+.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input {
+ width: 6em;
+}
+
+.inline-edit-save .spinner {
+ padding: 4px 10px 0;
+ vertical-align: top;
+ float: left;
+}
+
+/* Styling */
+.inline-edit-row h4 {
+ text-transform: uppercase;
+}
+
+.inline-edit-row fieldset span.title,
+.inline-edit-row fieldset span.checkbox-title {
+ font-style: italic;
+ line-height: 1.8em;
+}
+
+/* Specific Elements */
+.inline-edit-row fieldset .inline-edit-date {
+ float: right;
+}
+
+.inline-edit-row fieldset input[name=jj],
+.inline-edit-row fieldset input[name=hh],
+.inline-edit-row fieldset input[name=mn] {
+ font-size: 12px;
+ width: 2.1em;
+}
+
+.inline-edit-row fieldset input[name=aa] {
+ font-size: 12px;
+ width: 3.5em;
+}
+
+.inline-edit-row fieldset label input.inline-edit-password-input {
+ width: 8em;
+}
+
+ul.cat-checklist {
+ height: 12em;
+ border: solid 1px #ddd;
+ overflow-y: scroll;
+ padding: 0 5px;
+ margin: 0;
+ background-color: #fff;
+}
+
+#bulk-titles {
+ display: block;
+ height: 12em;
+ border: 1px solid #ddd;
+ overflow-y: scroll;
+ padding: 0 5px;
+ margin: 0 0 5px;
+}
+
+.inline-edit-row fieldset ul.cat-checklist li,
+.inline-edit-row fieldset ul.cat-checklist input {
+ margin: 0;
+ position: relative; /* RTL fix, #WP27629 */
+}
+
+.inline-edit-row fieldset ul.cat-checklist label,
+.inline-edit-row #bulk-titles div {
+ font-style: normal;
+ font-size: 11px;
+}
+
+.inline-edit-row fieldset label input.inline-edit-menu-order-input {
+ width: 3em;
+}
+
+.inline-edit-row fieldset label input.inline-edit-slug-input {
+ width: 75%;
+}
+
+.inline-edit-row #post_parent,
+.inline-edit-row select[name="page_template"] {
+ max-width: 80%;
+}
+
+.ie8 .inline-edit-row #post_parent,
+.ie8 .inline-edit-row select[name="page_template"] {
+ width: 250px;
+}
+
+.quick-edit-row-post fieldset label.inline-edit-status {
+ float: right;
+}
+
+#bulk-titles {
+ line-height: 140%;
+}
+#bulk-titles div {
+ margin: 0.2em 0.3em;
+}
+
+#bulk-titles div a {
+ cursor: pointer;
+ display: block;
+ float: right;
+ height: 18px;
+ margin: 0 -2px 0 3px;
+ overflow: hidden;
+ position: relative;
+ width: 20px;
+}
+
+#bulk-titles div a:before {
+ position: relative;
+ top: -3px;
+}
+
+/*------------------------------------------------------------------------------
+ 17.0 - Plugins
+------------------------------------------------------------------------------*/
+
+.plugins tbody th.check-column,
+.plugins tbody {
+ padding: 8px 2px 0 0;
+}
+
+.plugins tbody th.check-column input[type=checkbox] {
+ margin-top: 4px;
+}
+
+#update-plugins-table tbody td p {
+ margin-top: 0;
+}
+
+#update-plugins-table tbody td p strong {
+ font-size: 14px;
+}
+
+.plugins thead th.check-column,
+.plugins tfoot th.check-column,
+.plugins .inactive th.check-column {
+ padding-right: 6px;
+}
+
+#update-plugins-table thead th.check-column,
+#update-plugins-table tfoot th.check-column {
+ padding-top: 11px;
+}
+
+.plugins,
+.plugins th,
+.plugins td {
+ color: #000;
+}
+
+.plugins tr {
+ background: #fff;
+}
+
+.plugins p {
+ margin: 0 4px;
+ padding: 0;
+}
+
+.plugins .desc p {
+ margin: 0 0 8px;
+}
+
+.plugins td.desc {
+ line-height: 1.5em;
+}
+
+.plugins .desc ul,
+.plugins .desc ol {
+ margin: 0 2em 0 0;
+}
+
+.plugins .desc ul {
+ list-style-type: disc;
+}
+
+.plugins .row-actions {
+ font-size: 13px;
+ padding: 0;
+}
+
+.plugins .inactive td,
+.plugins .inactive th,
+.plugins .active td,
+.plugins .active th {
+ padding: 10px 9px;
+}
+
+.plugins .active td,
+.plugins .active th {
+ background-color: #f7fcfe;
+}
+
+.plugins .update th,
+.plugins .update td {
+ border-bottom: 0;
+}
+
+.plugin-update-tr td {
+ border-top: 0;
+}
+
+.plugins .inactive td,
+.plugins .inactive th,
+.plugins .active td,
+.plugins .active th,
+.plugin-install #the-list td,
+.upgrade .plugins td,
+.upgrade .plugins th {
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+}
+
+.plugins tr.active.plugin-update-tr + tr.inactive th,
+.plugins tr.active.plugin-update-tr + tr.inactive td,
+.plugins tr.active + tr.inactive th,
+.plugins tr.active + tr.inactive td {
+ border-top: 1px solid rgba(0,0,0,0.03);
+ -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1;
+ box-shadow: inset 0 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1;
+}
+
+.plugins .update td,
+.plugins .update th,
+.upgrade .plugins tr:last-of-type td,
+.upgrade .plugins tr:last-of-type th,
+.plugins tr.active + tr.inactive.update th,
+.plugins tr.active + tr.inactive.update td {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.plugins .active.update td,
+.plugins .active.update th,
+tr.active.update + tr.plugin-update-tr .plugin-update {
+ background-color: #fef7f1;
+}
+
+.plugins .active th.check-column {
+ border-right: 4px solid #2ea2cc;
+}
+
+.plugins .active.update th.check-column,
+.plugins .active.update + .plugin-update-tr .plugin-update {
+ border-right: 4px solid #d54e21;
+}
+
+#wpbody-content .plugins .plugin-title,
+#wpbody-content .plugins .theme-title {
+ padding-left: 12px;
+ white-space:nowrap;
+}
+
+.plugins .inactive .plugin-title strong {
+ font-weight: 400;
+}
+
+.plugins .second,
+.plugins .row-actions {
+ padding: 0 0 5px;
+}
+
+.plugins .update .second,
+.plugins .update .row-actions {
+ padding-bottom: 0;
+}
+
+.plugins-php .widefat tfoot th,
+.plugins-php .widefat tfoot td {
+ border-top-style: solid;
+ border-top-width: 1px;
+}
+
+.plugin-update-tr .update-message {
+ font-size: 13px;
+ font-weight: normal;
+ margin: 6px 12px 12px;
+ padding: 6px 12px;
+ margin: 0 31px 8px 10px;
+ background-color: #f7f7f7;
+ background-color: rgba(0,0,0,0.03);
+}
+
+.plugin-update-tr .update-message:before {
+ color: #d54e21;
+ content: '\f463';
+ display: inline-block;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ margin: 0 -2px 0 8px;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ vertical-align: top;
+}
+
+.plugins .plugin-update {
+ padding: 0;
+ border: none;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+}
+
+/* update notices for active plugins */
+tr.active + tr.plugin-update-tr .plugin-update {
+ background-color: #f7fcfe;
+}
+
+tr.active + tr.plugin-update-tr .plugin-update .update-message {
+ background-color: #fcf3ef;
+}
+
+.plugin-install-php h3 {
+ clear: both;
+}
+
+.plugin-install-php h4 {
+ margin: 2.5em 0 8px;
+}
+
+.plugin-install-php .wp-filter {
+ margin-bottom: 0;
+}
+
+/* Plugin card table view */
+.plugin-group {
+ overflow: hidden; /* clearfix */
+ margin-top: 1.5em;
+}
+
+.plugin-group h3 {
+ margin-top: 0;
+}
+
+.plugin-card {
+ float: right;
+ margin: 0 8px 16px;
+ width: 48.5%;
+ width: -webkit-calc( 50% - 8px );
+ width: calc( 50% - 8px );
+ background-color: #fff;
+ border: 1px solid #dedede;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.plugin-card:nth-child(odd) {
+ clear: both;
+ margin-right: 0;
+}
+
+.plugin-card:nth-child(even) {
+ margin-left: 0;
+}
+
+@media screen and ( min-width: 1600px ) {
+ .plugin-card {
+ width: 30%;
+ width: -webkit-calc( 33.1% - 8px );
+ width: calc( 33.1% - 8px );
+ }
+
+ .plugin-card:nth-child(odd) {
+ clear: none;
+ margin-right: 8px;
+ }
+
+ .plugin-card:nth-child(even) {
+ margin-left: 8px;
+ }
+
+ .plugin-card:nth-child(3n+1) {
+ clear: both;
+ margin-right: 0;
+ }
+
+ .plugin-card:nth-child(3n) {
+ margin-left: 0;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ .plugin-card {
+ margin-right: 0;
+ margin-left: 0;
+ width: 100%;
+ }
+}
+
+.plugin-card-top {
+ position: relative;
+ padding: 20px 20px 10px;
+ min-height: 135px;
+}
+
+div.action-links,
+.plugin-action-buttons {
+ margin: 0; /* Override existing margins */
+}
+
+.plugin-card h4 {
+ margin: 0 0 12px;
+ font-size: 18px;
+ line-height: 1.3;
+}
+
+.plugin-card .name,
+.plugin-card .desc {
+ margin-right: 148px; /* icon + margin */
+ margin-left: 120px; /* action links */
+}
+
+.plugin-card .action-links {
+ position: absolute;
+ top: 20px;
+ left: 20px;
+ width: 120px;
+}
+
+.plugin-action-buttons {
+ clear: left;
+ float: left;
+ margin-right: 2em;
+ margin-bottom: 1em;
+ text-align: left;
+}
+
+.plugin-action-buttons li {
+ margin-bottom: 10px;
+}
+
+.plugin-card-bottom {
+ clear: both;
+ padding: 12px 20px;
+ background-color: #fafafa;
+ border-top: 1px solid #dedede;
+ overflow: hidden;
+}
+
+.plugin-card-bottom .star-rating {
+ display: inline;
+}
+
+.plugin-card .column-rating {
+ line-height: 23px;
+}
+
+.plugin-card .column-rating,
+.plugin-card .column-updated {
+ margin-bottom: 4px;
+}
+
+.plugin-card .column-rating,
+.plugin-card .column-downloaded {
+ float: right;
+ clear: right;
+ max-width: 180px;
+}
+
+.plugin-card .column-updated,
+.plugin-card .column-compatibility {
+ text-align: left;
+ float: left;
+ clear: left;
+ width: 65%;
+ width: -webkit-calc( 100% - 180px );
+ width: calc( 100% - 180px );
+}
+
+.plugin-card .column-compatibility span:before {
+ font: normal 20px/.5 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0;
+ top: 4px;
+ right: -2px;
+ position: relative;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #444;
+}
+
+.plugin-card .compatibility-incompatible:before {
+ content: '\f158';
+}
+
+.plugin-card .compatibility-compatible:before {
+ content: '\f147';
+}
+
+.plugin-icon {
+ position: absolute;
+ top: 20px;
+ right: 20px;
+ width: 128px;
+ height: 128px;
+ margin: 0 0 20px 20px;
+}
+
+.plugin-icon img {
+ width: 128px;
+ height: 128px;
+}
+
+.no-plugin-results {
+ color: #999;
+ font-size: 18px;
+ font-style: normal;
+ margin: 0;
+ padding: 100px 0 0;
+ text-align: center;
+}
+
+/* ms */
+/* Background Color for Site Status */
+.wp-list-table .site-deleted {
+ background: #ff8573;
+}
+.wp-list-table .site-spammed {
+ background: #faafaa;
+}
+.wp-list-table .site-archived {
+ background: #ffebe8;
+}
+.wp-list-table .site-mature {
+ background: #fecac2;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@media screen and ( max-width: 1100px ) and ( min-width: 782px ), ( max-width: 480px ) {
+ .plugin-card .action-links {
+ position: static;
+ margin-right: 148px;
+ width: auto;
+ }
+
+ .plugin-action-buttons {
+ float: none;
+ margin: 1em 0 0;
+ text-align: right;
+ }
+
+ .plugin-action-buttons li {
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ .plugin-action-buttons li .button {
+ margin-left: 20px;
+ }
+
+ .plugin-card .name,
+ .plugin-card .desc {
+ margin-left: 0;
+ }
+
+ .plugin-card .desc p:first-of-type {
+ margin-top: 0;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ /* WP List Table Options & Filters */
+ .tablenav {
+ height: auto;
+ }
+
+ .tablenav.top {
+ margin: 20px 0 5px 0;
+ }
+
+ .tablenav.bottom {
+ position: relative;
+ margin-top: 15px;
+ }
+
+ .tablenav br {
+ display: none;
+ }
+
+ .tablenav br.clear {
+ display: block;
+ }
+
+ .tablenav.top .actions,
+ .tablenav .view-switch {
+ display: none;
+ }
+
+ /* Pagination */
+ .tablenav.top .displaying-num {
+ display: none;
+ }
+
+ .tablenav.bottom .displaying-num {
+ position: absolute;
+ left: 0;
+ top: 10px;
+ font-size: 14px;
+ }
+
+ .tablenav-pages {
+ width: 100%;
+ text-align: center;
+ margin: 0 0 25px;
+ }
+
+ .tablenav.bottom .tablenav-pages {
+ margin-top: 25px;
+ }
+
+ .tablenav.top .tablenav-pages.one-page {
+ display: none;
+ }
+
+ .tablenav.bottom .tablenav-pages.one-page {
+ margin: 15px 0 0 0;
+ height: 0;
+ }
+
+ .tablenav-pages .pagination-links .paging-input {
+ font-size: 18px;
+ }
+
+ .tablenav-pages .pagination-links a {
+ padding: 8px 20px 11px;
+ font-size: 18px;
+ background: rgba(0, 0, 0, 0.05);
+ }
+
+ .tablenav-pages .pagination-links .current-page {
+ padding: 10px;
+ font-size: 14px;
+ }
+
+ /* WP List Table Adjustments: General */
+ .form-wrap > p {
+ display: none;
+ }
+
+ .comment-count {
+ font-size: 14px;
+ }
+
+ /* Columns to hide */
+ .fixed .column-date,
+ .fixed .column-author,
+ .column-categories,
+ .column-tags,
+ .tags .column-description,
+ .media .column-parent,
+ .users .column-email,
+ .users .column-name,
+ .sites .column-registered,
+ .sites .column-users {
+ display: none;
+ }
+
+ .fixed .column-comment .comment-author {
+ display: block;
+ }
+
+ /* Posts */
+ .column-title {
+ width: 85%;
+ }
+
+ .fixed .column-comments, .widefat .check-column {
+ width: 35px
+ }
+
+ .widefat thead .check-column, .widefat tfoot .check-column {
+ padding: 10px 0 10px;
+ }
+
+ .widefat * {
+ word-wrap: normal;
+ }
+
+ /* Quick Edit and Bulk Edit */
+ #wpbody-content .quick-edit-row-post .inline-edit-col-left,
+ #wpbody-content .quick-edit-row-post .inline-edit-col-right,
+ #wpbody-content .inline-edit-row-post .inline-edit-col-center,
+ #wpbody-content .quick-edit-row-page .inline-edit-col-left,
+ #wpbody-content .quick-edit-row-page .inline-edit-col-right,
+ #wpbody-content .bulk-edit-row-post .inline-edit-col-right,
+ #wpbody-content .bulk-edit-row .inline-edit-col-left,
+ #wpbody-content .bulk-edit-row-page .inline-edit-col-right,
+ #wpbody-content .bulk-edit-row .inline-edit-col-bottom {
+ float: none;
+ width: 100%;
+ }
+
+ #wpbody-content .quick-edit-row fieldset .inline-edit-col label,
+ #wpbody-content .quick-edit-row fieldset .inline-edit-group label,
+ #wpbody-content .bulk-edit-row fieldset .inline-edit-col label,
+ #wpbody-content .bulk-edit-row fieldset .inline-edit-group label {
+ max-width: none;
+ float: none;
+ margin-bottom: 5px;
+ }
+
+ #wpbody .bulk-edit-row fieldset select {
+ display: block;
+ width: 100%;
+ max-width: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ .inline-edit-row fieldset ul.cat-checklist label,
+ .inline-edit-row #bulk-titles div {
+ font-size: 16px;
+ }
+
+ .inline-edit-row fieldset label span.title {
+ float: none;
+ }
+
+ .inline-edit-row fieldset label.inline-edit-tags {
+ padding: 0 0.5em;
+ }
+
+ .inline-edit-row fieldset .inline-edit-col label.inline-edit-tags {
+ padding: 0;
+ }
+
+ .inline-edit-row fieldset label span.input-text-wrap {
+ margin-right: 0;
+ }
+
+ .inline-edit-row fieldset input[name=jj],
+ .inline-edit-row fieldset input[name=hh],
+ .inline-edit-row fieldset input[name=mn] {
+ width: 3em;
+ }
+
+ .inline-edit-row fieldset input[name=aa] {
+ width: 4.5em;
+ }
+
+ #bulk-titles div {
+ margin: 0.8em 0.3em;
+ }
+
+ #bulk-titles div a {
+ height: 22px;
+ }
+
+ /* Taxonomies */
+ .tags .column-posts {
+ width: 74px;
+ }
+
+ .tags .column-slug {
+ width: 30%;
+ }
+
+ /* Comments */
+ .comments .column-response {
+ width: 35%;
+ }
+
+ /* Users */
+ .users .column-role {
+ width: 35%;
+ }
+
+ /* Network admin sites */
+ .sites .column-blogname {
+ width: 55%;
+ }
+
+ /* Updates */
+ #wpbody-content #update-themes-table .plugin-title {
+ width: auto;
+ }
+
+ /* Links */
+ .link-manager-php #posts-filter {
+ margin-top: 25px;
+ }
+
+ .link-manager-php .tablenav.bottom {
+ overflow: hidden;
+ }
+
+ /* Plugin/Theme Management Page */
+ .wp-list-table.plugins {
+ position: relative;
+ margin-top: 35px;
+ margin-bottom: 50px;
+ }
+
+ .wp-list-table.plugins thead .column-description,
+ #wpbody-content .wp-list-table.plugins tfoot .column-description,
+ .wp-list-table.plugins th#description {
+ display: none;
+ }
+
+ #wpbody-content .wp-list-table.plugins,
+ #wpbody-content .wp-list-table.plugins thead,
+ #wpbody-content .wp-list-table.plugins tbody,
+ #wpbody-content .wp-list-table.plugins tr,
+ #wpbody-content .wp-list-table.plugins .column-description,
+ #wpbody-content .wp-list-table.plugins .plugin-title,
+ #wpbody-content .wp-list-table.plugins .theme-title,
+ #wpbody-content .wp-list-table.plugins .plugin-update,
+ #wpbody-content .wp-list-table.plugins .manage-column.column-name {
+ display: block;
+ width: auto;
+ }
+
+ .wp-list-table.plugins thead,
+ .wp-list-table.plugins tfoot {
+ position: absolute;
+ top: -35px;
+ right: 0;
+ left: 0;
+ width: auto;
+ height: 35px;
+ }
+
+ .wp-list-table.plugins tfoot {
+ bottom: -35px;
+ top: auto;
+ }
+
+ .active, .inactive {
+ padding-top: 0;
+ }
+
+ .wp-list-table.plugins .plugin-title,
+ .wp-list-table.plugins .theme-title {
+ padding-top: 13px;
+ padding-bottom: 4px;
+ }
+
+ .plugins tr.active + tr.inactive th.check-column,
+ .plugins tr.active + tr.inactive td,
+ .wp-list-table.plugins .plugin-title,
+ .wp-list-table.plugins .theme-title,
+ .wp-list-table.plugins tbody th {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ .plugins tbody {
+ padding: 1px 0 0;
+ }
+
+ .plugins tr.active + tr.inactive td.column-description {
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ }
+
+ .plugins tr.active + tr.inactive th.check-column,
+ .plugins tr.active + tr.inactive td {
+ border-top: none;
+ }
+
+ .wp-list-table.plugins .column-description {
+ padding-top: 0;
+ }
+
+ .wp-list-table.plugins .manage-column.column-name,
+ .wp-list-table.plugins .column-description,
+ .wp-list-table.plugins .plugin-title,
+ .wp-list-table.plugins .theme-title {
+ padding-left: 12px;
+ padding-right: 46px;
+ }
+
+ .wp-list-table.plugins tr {
+ position: relative;
+ }
+
+ .wp-list-table.plugins th.check-column,
+ .wp-list-table.plugins tr.update th.check-column {
+ position: absolute;
+ height: auto;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ padding-right: 2px;
+ padding-top: 18px;
+ }
+
+ .wp-list-table.plugins thead th.check-column,
+ .wp-list-table.plugins tfoot th.check-column {
+ padding-right: 3px;
+ padding-top: 11px;
+ background: none;
+ }
+
+ .widefat tbody th.check-column input[type="checkbox"] {
+ margin-top: -3px;
+ margin-right: 8px;
+ }
+
+ .wp-list-table.plugins .active .check-column input,
+ .wp-list-table.plugins .update .check-column input {
+ margin-right: 5px;
+ }
+
+ .wp-list-table.plugins thead .check-column input,
+ .wp-list-table.plugins tfoot .check-column input {
+ margin-top: -6px;
+ }
+
+ .wp-list-table.plugins .active th.check-column {
+ background: none;
+ }
+
+ .wp-list-table.plugins .plugin-title strong,
+ .wp-list-table.plugins .theme-title strong {
+ font-size: 1.4em;
+ line-height: 1.6em;
+ }
+
+ /* Add New plugins page */
+ table.plugin-install .column-name,
+ table.plugin-install .column-version,
+ table.plugin-install .column-rating,
+ table.plugin-install .column-description {
+ display: block;
+ width: auto;
+ }
+
+ table.plugin-install th.column-name,
+ table.plugin-install th.column-version,
+ table.plugin-install th.column-rating,
+ table.plugin-install th.column-description {
+ display: none;
+ }
+
+ table.plugin-install td.column-name strong {
+ font-size: 1.4em;
+ line-height: 1.6em;
+ }
+
+ table.plugin-install #the-list td {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ table.plugin-install #the-list tr {
+ display: block;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+ }
+}
diff --git a/wp-admin/css/list-tables.css b/wp-admin/css/list-tables.css
new file mode 100644
index 0000000..6e54796
--- /dev/null
+++ b/wp-admin/css/list-tables.css
@@ -0,0 +1,1875 @@
+/* List table styles */
+.post-com-count-wrapper {
+ min-width: 22px;
+}
+
+.post-com-count {
+ background: none;
+ height: 1.3em;
+ line-height: 1.1em;
+ display: block;
+ text-decoration: none;
+ padding: 0 0 6px;
+ cursor: pointer;
+ background-position: center -80px;
+ background-repeat: no-repeat;
+ color: #fff;
+}
+
+.post-com-count:after { /* draw bubble connector using CSS! */
+ content: "";
+ display: block;
+ width: 0;
+ height: 0;
+ margin-left: 8px;
+ border-top: 5px solid #bbb;
+ border-right: 5px solid transparent;
+}
+
+.post-com-count span {
+ font-size: 11px;
+ font-weight: 600;
+ height: 1.4em;
+ line-height: 1.4em;
+ min-width: 0.7em;
+ padding: 0 6px;
+ display: inline-block;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ background-color: #bbb;
+ color: #fff;
+}
+
+.post-com-count:hover {
+ background-position: center -3px;
+}
+
+.post-com-count:hover span {
+ background-color: #2ea2cc;
+}
+
+.post-com-count:hover:after {
+ border-top: 5px solid #2ea2cc;
+}
+
+strong .post-com-count {
+ background-position: center -55px;
+}
+
+strong .post-com-count span {
+ background-color: #0074a2;
+}
+
+strong .post-com-count:after {
+ border-top: 5px solid #0074a2;
+}
+
+.column-response .post-com-count {
+ float: left;
+ margin-right: 5px;
+ text-align: center;
+}
+
+.response-links {
+ float: left;
+}
+
+/* comments */
+
+.commentlist li {
+ padding: 1em 1em .2em;
+ margin: 0;
+ border-bottom: 1px solid #ccc;
+}
+
+.commentlist li li {
+ border-bottom: 0;
+ padding: 0;
+}
+
+.commentlist p {
+ padding: 0;
+ margin: 0 0 .8em;
+}
+
+#submitted-on,
+.submitted-on {
+ color: #777;
+}
+
+/* reply to comments */
+#replyrow td {
+ padding: 2px;
+}
+
+#replysubmit {
+ margin: 0;
+ padding: 0 5px 3px;
+ text-align: center;
+}
+
+#replysubmit .spinner {
+ padding: 2px 0 0;
+ vertical-align: top;
+ float: right;
+}
+
+#replysubmit .button {
+ margin-right: 5px;
+}
+
+#replysubmit .error {
+ color: red;
+ line-height: 21px;
+ text-align: center;
+}
+
+#replyrow h5 {
+ margin: .2em 0 0;
+ padding: 0 5px;
+ line-height: 1.4em;
+ font-size: 1em;
+}
+
+#edithead .inside {
+ float: left;
+ padding: 3px 0 2px 5px;
+ margin: 0;
+ text-align: center;
+}
+
+#edithead .inside input {
+ width: 180px;
+}
+
+#edithead label {
+ padding: 2px 0;
+}
+
+#replycontainer {
+ padding: 5px;
+}
+
+#replycontent {
+ height: 120px;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#replyerror {
+ border-color: #ddd;
+ background-color: #f9f9f9;
+}
+
+/* @todo: is this used? */
+.commentlist .avatar {
+ vertical-align: text-top;
+}
+
+#the-comment-list .attachment-80x60 {
+ padding: 4px 8px;
+}
+
+#the-comment-list tr.undo,
+#the-comment-list div.undo {
+ background-color: #f4f4f4;
+}
+
+#the-comment-list .unapproved th,
+#the-comment-list .unapproved td {
+ background-color: #fef7f1;
+}
+
+#the-comment-list .unapproved th.check-column {
+ border-left: 4px solid #d54e21;
+}
+
+#the-comment-list .unapproved th.check-column input {
+ margin-left: 4px;
+}
+
+#the-comment-list .approve a {
+ color: #006505;
+}
+
+#the-comment-list .unapprove a {
+ color: #d98500;
+}
+
+#the-comment-list th,
+#the-comment-list td {
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+}
+
+#the-comment-list tr:last-child th,
+#the-comment-list tr:last-child td {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#the-comment-list tr.unapproved + tr.approved th,
+#the-comment-list tr.unapproved + tr.approved td {
+ border-top: 1px solid rgba(0, 0, 0, 0.03);
+}
+
+/* table vim shortcuts */
+.vim-current,
+.vim-current th,
+.vim-current td {
+ background-color: #e4f2fd !important;
+}
+
+th .comment-grey-bubble {
+ height: 16px;
+ width: 16px;
+}
+
+th .comment-grey-bubble:before {
+ content: '\f101';
+ font: normal 20px/.5 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0;
+ top: 4px;
+ left: -4px;
+ position: relative;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #444;
+}
+
+/*------------------------------------------------------------------------------
+ 10.0 - List Posts (/Pages/etc)
+------------------------------------------------------------------------------*/
+
+table.fixed {
+ table-layout: fixed;
+}
+
+.fixed .column-rating,
+.fixed .column-visible {
+ width: 8%;
+}
+
+.fixed .column-posts,
+.fixed .column-date,
+.fixed .column-parent,
+.fixed .column-links,
+.fixed .column-author,
+.fixed .column-format {
+ width: 10%;
+}
+
+.fixed .column-posts {
+ width: 74px;
+}
+
+.fixed .column-comment .comment-author {
+ display: none;
+}
+
+.fixed .column-response,
+.fixed .column-categories,
+.fixed .column-tags,
+.fixed .column-rel,
+.fixed .column-role {
+ width: 15%;
+}
+
+.fixed .column-slug {
+ width: 25%;
+}
+
+.fixed .column-locations {
+ width: 35%;
+}
+
+.fixed .column-comments {
+ width: 4em;
+ padding: 8px 0;
+ text-align: left;
+}
+
+.fixed .column-comments .vers {
+ padding-left: 3px;
+}
+
+.fixed .column-comments a {
+ float: left;
+}
+
+.fixed .column-icon {
+ width: 80px;
+}
+
+/* @todo: pick a consistent list table selector */
+.wp-list-table a {
+ -webkit-transition: none;
+ transition: none;
+}
+
+#the-list tr:last-child td,
+#the-list tr:last-child th {
+ border-bottom: none !important;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#comments-form .fixed .column-author {
+ width: 20%;
+}
+
+#commentsdiv.postbox .inside {
+ margin: 0;
+ padding: 0;
+}
+
+#commentsdiv .inside .row-actions {
+ line-height:18px;
+}
+
+#commentsdiv .inside .column-author {
+ width: 25%;
+}
+
+#commentsdiv .column-comment p {
+ margin: 0.6em 0;
+ padding: 0;
+}
+
+#commentsdiv #replyrow td {
+ padding: 0;
+}
+
+#commentsdiv p {
+ padding: 8px 10px;
+ margin: 0;
+}
+
+#commentsdiv .comments-box {
+ border: 0 none;
+}
+
+#commentsdiv .comments-box thead th {
+ background: transparent;
+ padding: 0 7px 4px;
+ font-style: italic;
+}
+
+#commentsdiv .comments-box tr:last-child td {
+ border-bottom: 0 none;
+}
+
+#commentsdiv .spinner {
+ padding-left: 5px;
+}
+
+.sorting-indicator {
+ display: none;
+ width: 10px;
+ height: 4px;
+ margin-top: 8px;
+ margin-left: 7px;
+}
+
+.sorting-indicator:before {
+ background: none;
+ content: '\f142';
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0;
+ top: -4px;
+ left: -8px;
+ color: #444;
+ line-height: 10px;
+ position: relative;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #444;
+}
+
+.column-comments .sorting-indicator:before {
+ top: 0;
+ left: -10px;
+}
+
+th.sorted.asc .sorting-indicator:before,
+th.desc:hover span.sorting-indicator:before {
+ content: '\f142';
+}
+
+th.sorted.desc .sorting-indicator:before,
+th.asc:hover span.sorting-indicator:before {
+ content: '\f140';
+}
+
+tr.wp-locked .locked-indicator {
+ margin-left: 6px;
+ height: 20px;
+ width: 16px;
+}
+
+tr.wp-locked .locked-indicator:before {
+ color: #888;
+ content: '\f160';
+ display: inline-block;
+ float: left;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ vertical-align: middle;
+ margin-left: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+tr.wp-locked .check-column label,
+tr.wp-locked .check-column input[type="checkbox"],
+tr.wp-locked .row-actions .inline,
+tr.wp-locked .row-actions .trash {
+ display: none;
+}
+
+tr .locked-info {
+ height: 0;
+ opacity: 0;
+}
+
+tr.wp-locked .locked-info {
+ margin-top: 8px;
+ height: auto;
+ opacity: 1;
+}
+
+.locked-text {
+ vertical-align: top;
+}
+
+tr.locked-info, tr.wp-locked .locked-info {
+ -webkit-transition: height 1s, opacity 0.5s;
+ transition: height 1s, opacity 0.5s;
+}
+
+.fixed .column-comments .sorting-indicator {
+ margin-top: 3px;
+}
+
+#menu-locations-wrap .widefat {
+ width: 60%;
+}
+
+.widefat th.sortable,
+.widefat th.sorted {
+ padding: 0;
+}
+
+th.sortable a,
+th.sorted a {
+ display: block;
+ overflow: hidden;
+ padding: 7px 7px 8px 10px;
+}
+
+th.manage-column a,
+th.sortable a:hover,
+th.sortable a:active,
+th.sortable a:focus {
+ color: #333;
+}
+
+th.sortable a:focus {
+ background: #e1e1e1;
+}
+
+.fixed .column-comments.sortable a,
+.fixed .column-comments.sorted a {
+ padding: 8px 0;
+}
+
+th.sortable a span,
+th.sorted a span {
+ float: left;
+ cursor: pointer;
+}
+
+th.sorted.asc .sorting-indicator,
+th.desc:hover span.sorting-indicator {
+ display: block;
+ background-position: 0 0;
+}
+
+th.sorted.desc .sorting-indicator,
+th.asc:hover span.sorting-indicator {
+ display: block;
+ background-position: -7px 0;
+}
+
+/* Bulk Actions */
+.tablenav-pages a {
+ font-weight: 600;
+ margin-right: 1px;
+ padding: 0 2px;
+}
+.tablenav-pages .current-page {
+ padding-top: 0;
+ text-align: center;
+}
+.tablenav-pages .next-page {
+ margin-left: 2px;
+}
+
+.tablenav a.button-secondary {
+ display: block;
+ margin: 3px 8px 0 0;
+}
+
+.tablenav {
+ clear: both;
+ height: 30px;
+ margin: 6px 0 4px;
+ vertical-align: middle;
+}
+
+.tablenav.themes {
+ max-width: 98%;
+}
+
+.tablenav .tablenav-pages {
+ float: right;
+ display: block;
+ cursor: default;
+ height: 30px;
+ color: #555;
+ line-height: 30px;
+ font-size: 12px;
+}
+
+.tablenav .no-pages,
+.tablenav .one-page .pagination-links {
+ display: none;
+}
+
+.tablenav .tablenav-pages a,
+.tablenav-pages span.current {
+ text-decoration: none;
+ padding: 3px 6px;
+}
+
+.tablenav .tablenav-pages a {
+ padding: 0 10px 3px;
+ background: #eee;
+ background: rgba( 0, 0, 0, 0.05 );
+ font-size: 16px;
+ font-weight: normal;
+}
+
+.tablenav .tablenav-pages a:hover,
+.tablenav .tablenav-pages a:focus {
+ color: #fff;
+ background: #2ea2cc;
+}
+
+.tablenav .tablenav-pages a.disabled,
+.tablenav .tablenav-pages a.disabled:hover,
+.tablenav .tablenav-pages a.disabled:focus,
+.tablenav .tablenav-pages a.disabled:active {
+ color: #aaa;
+ background: #eee;
+ background: rgba( 0, 0, 0, 0.05 );
+}
+
+.tablenav .displaying-num {
+ margin-right: 2px;
+ color: #777;
+ font-size: 12px;
+ font-style: italic;
+}
+
+.tablenav .actions {
+ overflow: hidden;
+ padding: 2px 8px 0 0;
+}
+
+.wp-filter .actions {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.tablenav .delete {
+ margin-right: 20px;
+}
+
+/* @todo: unclear if the following tablenav rules are actually used.
+classes exist in paginate_links() but not seen in list table output. */
+.tablenav .dots {
+ border-color: transparent;
+}
+
+.tablenav .next,
+.tablenav .prev {
+ border-color: transparent;
+ color: #0074a2;
+}
+
+.tablenav .next:hover,
+.tablenav .prev:hover {
+ border-color: transparent;
+ color: #2ea2cc;
+}
+
+.tablenav .view-switch {
+ float: right;
+ margin: 5px 16px 0 8px;
+}
+
+.wp-filter .view-switch {
+ display: inline-block;
+ vertical-align: middle;
+ padding: 15px 0;
+ margin: 0 20px 0 0;
+}
+
+.view-switch a {
+ text-decoration: none;
+}
+
+.view-switch > a {
+ display: inline-block;
+ width: 18px;
+ height: 18px;
+}
+
+.view-switch > a:before {
+ color: #bbb;
+ display: inline-block;
+ float: left;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ vertical-align: middle;
+ margin-left: 0;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.view-switch > .view-list:before {
+ content: '\f163';
+}
+
+.view-switch a:hover:before {
+ color: #727272;
+}
+
+.view-switch a.current:before {
+ color: #0074a2;
+}
+
+.view-switch > a + a {
+ margin-left: 5px;
+}
+
+.view-switch > .view-excerpt:before {
+ content: '\f164';
+}
+
+.view-switch > .view-grid:before {
+ content: '\f509';
+}
+
+.filter {
+ float: left;
+ margin: -5px 0 0 10px;
+}
+
+.filter .subsubsub {
+ margin-left: -10px;
+ margin-top: 13px;
+}
+.screen-per-page {
+ width: 4em;
+}
+
+#posts-filter .wp-filter {
+ margin-bottom: 0;
+}
+
+#posts-filter fieldset {
+ float: left;
+ margin: 0 1.5ex 1em 0;
+ padding: 0;
+}
+
+#posts-filter fieldset legend {
+ padding: 0 0 .2em 1px;
+}
+
+p.pagenav {
+ margin: 0;
+ display: inline;
+}
+
+.pagenav span {
+ font-weight: 600;
+ margin: 0 6px;
+}
+
+.row-title {
+ font-size: 14px !important;
+ font-weight: 600;
+}
+
+.column-comment .comment-author {
+ margin-bottom: 0.6em;
+}
+
+.column-author img,
+.column-username img,
+.column-comment .comment-author img {
+ float: left;
+ margin-right: 10px;
+ margin-top: 1px;
+}
+
+.row-actions {
+ color: #ddd;
+ font-size: 13px;
+ visibility: hidden;
+ padding: 2px 0 0;
+}
+
+tr:hover .row-actions,
+.mobile .row-actions,
+.row-actions.visible,
+div.comment-item:hover .row-actions {
+ visibility: visible;
+}
+
+/* deprecated */
+.row-actions-visible {
+ padding: 2px 0 0;
+}
+
+
+/*------------------------------------------------------------------------------
+ 10.1 - Inline Editing
+------------------------------------------------------------------------------*/
+
+/*
+.quick-edit* is for Quick Edit
+.bulk-edit* is for Bulk Edit
+.inline-edit* is for everything
+*/
+
+/* Layout */
+
+#wpbody-content .inline-edit-row fieldset {
+ font-size: 12px;
+ float: left;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+
+tr.inline-edit-row td,
+#wpbody-content .inline-edit-row fieldset .inline-edit-col {
+ padding: 0 0.5em;
+}
+
+#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col {
+ border-width: 0 0 0 1px;
+ border-style: none none none solid;
+}
+
+#wpbody-content .quick-edit-row-post .inline-edit-col-left {
+ width: 40%;
+}
+
+#wpbody-content .quick-edit-row-post .inline-edit-col-right {
+ width: 39%;
+}
+
+#wpbody-content .inline-edit-row-post .inline-edit-col-center {
+ width: 20%;
+}
+
+#wpbody-content .quick-edit-row-page .inline-edit-col-left {
+ width: 50%;
+}
+
+#wpbody-content .quick-edit-row-page .inline-edit-col-right,
+#wpbody-content .bulk-edit-row-post .inline-edit-col-right {
+ width: 49%;
+}
+
+#wpbody-content .bulk-edit-row .inline-edit-col-left {
+ width: 30%;
+}
+
+#wpbody-content .bulk-edit-row-page .inline-edit-col-right {
+ width: 69%;
+}
+
+#wpbody-content .bulk-edit-row .inline-edit-col-bottom {
+ float: right;
+ width: 69%;
+}
+
+#wpbody-content .inline-edit-row-page .inline-edit-col-right {
+ margin-top: 27px;
+}
+
+.inline-edit-row fieldset .inline-edit-group {
+ clear: both;
+}
+
+.inline-edit-row fieldset .inline-edit-group:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.inline-edit-row p.submit {
+ clear: both;
+ padding: 0.5em;
+ margin: 0.5em 0 0;
+}
+
+.inline-edit-row span.error {
+ line-height: 22px;
+ margin: 0 15px;
+ padding: 3px 5px;
+}
+
+/* Positioning */
+.inline-edit-row h4 {
+ margin: .2em 0;
+ padding: 0;
+ line-height: 23px;
+}
+.inline-edit-row fieldset span.title,
+.inline-edit-row fieldset span.checkbox-title {
+ margin: 0;
+ padding: 0;
+ line-height: 27px;
+}
+
+.inline-edit-row fieldset label,
+.inline-edit-row fieldset span.inline-edit-categories-label {
+ display: block;
+ margin: .2em 0;
+}
+
+.inline-edit-row fieldset label.inline-edit-tags {
+ margin-top: 0;
+}
+
+.inline-edit-row fieldset label.inline-edit-tags span.title {
+ margin: .2em 0;
+ width: auto;
+}
+
+.inline-edit-row fieldset label span.title {
+ display: block;
+ float: left;
+ width: 5em;
+}
+
+.inline-edit-row fieldset label span.input-text-wrap {
+ display: block;
+ margin-left: 5em;
+}
+
+.quick-edit-row-post fieldset.inline-edit-col-right label span.title {
+ width: auto;
+ padding-right: 0.5em;
+}
+
+.inline-edit-row .input-text-wrap input[type=text] {
+ width: 100%;
+}
+
+.inline-edit-row fieldset label input[type=checkbox] {
+ vertical-align: text-bottom;
+}
+
+.inline-edit-row fieldset label textarea {
+ width: 100%;
+ height: 4em;
+}
+
+#wpbody-content .bulk-edit-row fieldset .inline-edit-group label {
+ max-width: 50%;
+}
+
+#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child {
+ margin-right: 0.5em
+}
+
+.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input {
+ width: 6em;
+}
+
+.inline-edit-save .spinner {
+ padding: 4px 10px 0;
+ vertical-align: top;
+ float: right;
+}
+
+/* Styling */
+.inline-edit-row h4 {
+ text-transform: uppercase;
+}
+
+.inline-edit-row fieldset span.title,
+.inline-edit-row fieldset span.checkbox-title {
+ font-style: italic;
+ line-height: 1.8em;
+}
+
+/* Specific Elements */
+.inline-edit-row fieldset .inline-edit-date {
+ float: left;
+}
+
+.inline-edit-row fieldset input[name=jj],
+.inline-edit-row fieldset input[name=hh],
+.inline-edit-row fieldset input[name=mn] {
+ font-size: 12px;
+ width: 2.1em;
+}
+
+.inline-edit-row fieldset input[name=aa] {
+ font-size: 12px;
+ width: 3.5em;
+}
+
+.inline-edit-row fieldset label input.inline-edit-password-input {
+ width: 8em;
+}
+
+ul.cat-checklist {
+ height: 12em;
+ border: solid 1px #ddd;
+ overflow-y: scroll;
+ padding: 0 5px;
+ margin: 0;
+ background-color: #fff;
+}
+
+#bulk-titles {
+ display: block;
+ height: 12em;
+ border: 1px solid #ddd;
+ overflow-y: scroll;
+ padding: 0 5px;
+ margin: 0 0 5px;
+}
+
+.inline-edit-row fieldset ul.cat-checklist li,
+.inline-edit-row fieldset ul.cat-checklist input {
+ margin: 0;
+ position: relative; /* RTL fix, #WP27629 */
+}
+
+.inline-edit-row fieldset ul.cat-checklist label,
+.inline-edit-row #bulk-titles div {
+ font-style: normal;
+ font-size: 11px;
+}
+
+.inline-edit-row fieldset label input.inline-edit-menu-order-input {
+ width: 3em;
+}
+
+.inline-edit-row fieldset label input.inline-edit-slug-input {
+ width: 75%;
+}
+
+.inline-edit-row #post_parent,
+.inline-edit-row select[name="page_template"] {
+ max-width: 80%;
+}
+
+.ie8 .inline-edit-row #post_parent,
+.ie8 .inline-edit-row select[name="page_template"] {
+ width: 250px;
+}
+
+.quick-edit-row-post fieldset label.inline-edit-status {
+ float: left;
+}
+
+#bulk-titles {
+ line-height: 140%;
+}
+#bulk-titles div {
+ margin: 0.2em 0.3em;
+}
+
+#bulk-titles div a {
+ cursor: pointer;
+ display: block;
+ float: left;
+ height: 18px;
+ margin: 0 3px 0 -2px;
+ overflow: hidden;
+ position: relative;
+ width: 20px;
+}
+
+#bulk-titles div a:before {
+ position: relative;
+ top: -3px;
+}
+
+/*------------------------------------------------------------------------------
+ 17.0 - Plugins
+------------------------------------------------------------------------------*/
+
+.plugins tbody th.check-column,
+.plugins tbody {
+ padding: 8px 0 0 2px;
+}
+
+.plugins tbody th.check-column input[type=checkbox] {
+ margin-top: 4px;
+}
+
+#update-plugins-table tbody td p {
+ margin-top: 0;
+}
+
+#update-plugins-table tbody td p strong {
+ font-size: 14px;
+}
+
+.plugins thead th.check-column,
+.plugins tfoot th.check-column,
+.plugins .inactive th.check-column {
+ padding-left: 6px;
+}
+
+#update-plugins-table thead th.check-column,
+#update-plugins-table tfoot th.check-column {
+ padding-top: 11px;
+}
+
+.plugins,
+.plugins th,
+.plugins td {
+ color: #000;
+}
+
+.plugins tr {
+ background: #fff;
+}
+
+.plugins p {
+ margin: 0 4px;
+ padding: 0;
+}
+
+.plugins .desc p {
+ margin: 0 0 8px;
+}
+
+.plugins td.desc {
+ line-height: 1.5em;
+}
+
+.plugins .desc ul,
+.plugins .desc ol {
+ margin: 0 0 0 2em;
+}
+
+.plugins .desc ul {
+ list-style-type: disc;
+}
+
+.plugins .row-actions {
+ font-size: 13px;
+ padding: 0;
+}
+
+.plugins .inactive td,
+.plugins .inactive th,
+.plugins .active td,
+.plugins .active th {
+ padding: 10px 9px;
+}
+
+.plugins .active td,
+.plugins .active th {
+ background-color: #f7fcfe;
+}
+
+.plugins .update th,
+.plugins .update td {
+ border-bottom: 0;
+}
+
+.plugin-update-tr td {
+ border-top: 0;
+}
+
+.plugins .inactive td,
+.plugins .inactive th,
+.plugins .active td,
+.plugins .active th,
+.plugin-install #the-list td,
+.upgrade .plugins td,
+.upgrade .plugins th {
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+}
+
+.plugins tr.active.plugin-update-tr + tr.inactive th,
+.plugins tr.active.plugin-update-tr + tr.inactive td,
+.plugins tr.active + tr.inactive th,
+.plugins tr.active + tr.inactive td {
+ border-top: 1px solid rgba(0,0,0,0.03);
+ -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1;
+ box-shadow: inset 0 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1;
+}
+
+.plugins .update td,
+.plugins .update th,
+.upgrade .plugins tr:last-of-type td,
+.upgrade .plugins tr:last-of-type th,
+.plugins tr.active + tr.inactive.update th,
+.plugins tr.active + tr.inactive.update td {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.plugins .active.update td,
+.plugins .active.update th,
+tr.active.update + tr.plugin-update-tr .plugin-update {
+ background-color: #fef7f1;
+}
+
+.plugins .active th.check-column {
+ border-left: 4px solid #2ea2cc;
+}
+
+.plugins .active.update th.check-column,
+.plugins .active.update + .plugin-update-tr .plugin-update {
+ border-left: 4px solid #d54e21;
+}
+
+#wpbody-content .plugins .plugin-title,
+#wpbody-content .plugins .theme-title {
+ padding-right: 12px;
+ white-space:nowrap;
+}
+
+.plugins .inactive .plugin-title strong {
+ font-weight: 400;
+}
+
+.plugins .second,
+.plugins .row-actions {
+ padding: 0 0 5px;
+}
+
+.plugins .update .second,
+.plugins .update .row-actions {
+ padding-bottom: 0;
+}
+
+.plugins-php .widefat tfoot th,
+.plugins-php .widefat tfoot td {
+ border-top-style: solid;
+ border-top-width: 1px;
+}
+
+.plugin-update-tr .update-message {
+ font-size: 13px;
+ font-weight: normal;
+ margin: 6px 12px 12px;
+ padding: 6px 12px;
+ margin: 0 10px 8px 31px;
+ background-color: #f7f7f7;
+ background-color: rgba(0,0,0,0.03);
+}
+
+.plugin-update-tr .update-message:before {
+ color: #d54e21;
+ content: '\f463';
+ display: inline-block;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ margin: 0 8px 0 -2px;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ vertical-align: top;
+}
+
+.plugins .plugin-update {
+ padding: 0;
+ border: none;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+}
+
+/* update notices for active plugins */
+tr.active + tr.plugin-update-tr .plugin-update {
+ background-color: #f7fcfe;
+}
+
+tr.active + tr.plugin-update-tr .plugin-update .update-message {
+ background-color: #fcf3ef;
+}
+
+.plugin-install-php h3 {
+ clear: both;
+}
+
+.plugin-install-php h4 {
+ margin: 2.5em 0 8px;
+}
+
+.plugin-install-php .wp-filter {
+ margin-bottom: 0;
+}
+
+/* Plugin card table view */
+.plugin-group {
+ overflow: hidden; /* clearfix */
+ margin-top: 1.5em;
+}
+
+.plugin-group h3 {
+ margin-top: 0;
+}
+
+.plugin-card {
+ float: left;
+ margin: 0 8px 16px;
+ width: 48.5%;
+ width: -webkit-calc( 50% - 8px );
+ width: calc( 50% - 8px );
+ background-color: #fff;
+ border: 1px solid #dedede;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.plugin-card:nth-child(odd) {
+ clear: both;
+ margin-left: 0;
+}
+
+.plugin-card:nth-child(even) {
+ margin-right: 0;
+}
+
+@media screen and ( min-width: 1600px ) {
+ .plugin-card {
+ width: 30%;
+ width: -webkit-calc( 33.1% - 8px );
+ width: calc( 33.1% - 8px );
+ }
+
+ .plugin-card:nth-child(odd) {
+ clear: none;
+ margin-left: 8px;
+ }
+
+ .plugin-card:nth-child(even) {
+ margin-right: 8px;
+ }
+
+ .plugin-card:nth-child(3n+1) {
+ clear: both;
+ margin-left: 0;
+ }
+
+ .plugin-card:nth-child(3n) {
+ margin-right: 0;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ .plugin-card {
+ margin-left: 0;
+ margin-right: 0;
+ width: 100%;
+ }
+}
+
+.plugin-card-top {
+ position: relative;
+ padding: 20px 20px 10px;
+ min-height: 135px;
+}
+
+div.action-links,
+.plugin-action-buttons {
+ margin: 0; /* Override existing margins */
+}
+
+.plugin-card h4 {
+ margin: 0 0 12px;
+ font-size: 18px;
+ line-height: 1.3;
+}
+
+.plugin-card .name,
+.plugin-card .desc {
+ margin-left: 148px; /* icon + margin */
+ margin-right: 120px; /* action links */
+}
+
+.plugin-card .action-links {
+ position: absolute;
+ top: 20px;
+ right: 20px;
+ width: 120px;
+}
+
+.plugin-action-buttons {
+ clear: right;
+ float: right;
+ margin-left: 2em;
+ margin-bottom: 1em;
+ text-align: right;
+}
+
+.plugin-action-buttons li {
+ margin-bottom: 10px;
+}
+
+.plugin-card-bottom {
+ clear: both;
+ padding: 12px 20px;
+ background-color: #fafafa;
+ border-top: 1px solid #dedede;
+ overflow: hidden;
+}
+
+.plugin-card-bottom .star-rating {
+ display: inline;
+}
+
+.plugin-card .column-rating {
+ line-height: 23px;
+}
+
+.plugin-card .column-rating,
+.plugin-card .column-updated {
+ margin-bottom: 4px;
+}
+
+.plugin-card .column-rating,
+.plugin-card .column-downloaded {
+ float: left;
+ clear: left;
+ max-width: 180px;
+}
+
+.plugin-card .column-updated,
+.plugin-card .column-compatibility {
+ text-align: right;
+ float: right;
+ clear: right;
+ width: 65%;
+ width: -webkit-calc( 100% - 180px );
+ width: calc( 100% - 180px );
+}
+
+.plugin-card .column-compatibility span:before {
+ font: normal 20px/.5 'dashicons';
+ speak: none;
+ display: inline-block;
+ padding: 0;
+ top: 4px;
+ left: -2px;
+ position: relative;
+ vertical-align: top;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+ color: #444;
+}
+
+.plugin-card .compatibility-incompatible:before {
+ content: '\f158';
+}
+
+.plugin-card .compatibility-compatible:before {
+ content: '\f147';
+}
+
+.plugin-icon {
+ position: absolute;
+ top: 20px;
+ left: 20px;
+ width: 128px;
+ height: 128px;
+ margin: 0 20px 20px 0;
+}
+
+.plugin-icon img {
+ width: 128px;
+ height: 128px;
+}
+
+.no-plugin-results {
+ color: #999;
+ font-size: 18px;
+ font-style: normal;
+ margin: 0;
+ padding: 100px 0 0;
+ text-align: center;
+}
+
+/* ms */
+/* Background Color for Site Status */
+.wp-list-table .site-deleted {
+ background: #ff8573;
+}
+.wp-list-table .site-spammed {
+ background: #faafaa;
+}
+.wp-list-table .site-archived {
+ background: #ffebe8;
+}
+.wp-list-table .site-mature {
+ background: #fecac2;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@media screen and ( max-width: 1100px ) and ( min-width: 782px ), ( max-width: 480px ) {
+ .plugin-card .action-links {
+ position: static;
+ margin-left: 148px;
+ width: auto;
+ }
+
+ .plugin-action-buttons {
+ float: none;
+ margin: 1em 0 0;
+ text-align: left;
+ }
+
+ .plugin-action-buttons li {
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ .plugin-action-buttons li .button {
+ margin-right: 20px;
+ }
+
+ .plugin-card .name,
+ .plugin-card .desc {
+ margin-right: 0;
+ }
+
+ .plugin-card .desc p:first-of-type {
+ margin-top: 0;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ /* WP List Table Options & Filters */
+ .tablenav {
+ height: auto;
+ }
+
+ .tablenav.top {
+ margin: 20px 0 5px 0;
+ }
+
+ .tablenav.bottom {
+ position: relative;
+ margin-top: 15px;
+ }
+
+ .tablenav br {
+ display: none;
+ }
+
+ .tablenav br.clear {
+ display: block;
+ }
+
+ .tablenav.top .actions,
+ .tablenav .view-switch {
+ display: none;
+ }
+
+ /* Pagination */
+ .tablenav.top .displaying-num {
+ display: none;
+ }
+
+ .tablenav.bottom .displaying-num {
+ position: absolute;
+ right: 0;
+ top: 10px;
+ font-size: 14px;
+ }
+
+ .tablenav-pages {
+ width: 100%;
+ text-align: center;
+ margin: 0 0 25px;
+ }
+
+ .tablenav.bottom .tablenav-pages {
+ margin-top: 25px;
+ }
+
+ .tablenav.top .tablenav-pages.one-page {
+ display: none;
+ }
+
+ .tablenav.bottom .tablenav-pages.one-page {
+ margin: 15px 0 0 0;
+ height: 0;
+ }
+
+ .tablenav-pages .pagination-links .paging-input {
+ font-size: 18px;
+ }
+
+ .tablenav-pages .pagination-links a {
+ padding: 8px 20px 11px;
+ font-size: 18px;
+ background: rgba(0, 0, 0, 0.05);
+ }
+
+ .tablenav-pages .pagination-links .current-page {
+ padding: 10px;
+ font-size: 14px;
+ }
+
+ /* WP List Table Adjustments: General */
+ .form-wrap > p {
+ display: none;
+ }
+
+ .comment-count {
+ font-size: 14px;
+ }
+
+ /* Columns to hide */
+ .fixed .column-date,
+ .fixed .column-author,
+ .column-categories,
+ .column-tags,
+ .tags .column-description,
+ .media .column-parent,
+ .users .column-email,
+ .users .column-name,
+ .sites .column-registered,
+ .sites .column-users {
+ display: none;
+ }
+
+ .fixed .column-comment .comment-author {
+ display: block;
+ }
+
+ /* Posts */
+ .column-title {
+ width: 85%;
+ }
+
+ .fixed .column-comments, .widefat .check-column {
+ width: 35px
+ }
+
+ .widefat thead .check-column, .widefat tfoot .check-column {
+ padding: 10px 0 10px;
+ }
+
+ .widefat * {
+ word-wrap: normal;
+ }
+
+ /* Quick Edit and Bulk Edit */
+ #wpbody-content .quick-edit-row-post .inline-edit-col-left,
+ #wpbody-content .quick-edit-row-post .inline-edit-col-right,
+ #wpbody-content .inline-edit-row-post .inline-edit-col-center,
+ #wpbody-content .quick-edit-row-page .inline-edit-col-left,
+ #wpbody-content .quick-edit-row-page .inline-edit-col-right,
+ #wpbody-content .bulk-edit-row-post .inline-edit-col-right,
+ #wpbody-content .bulk-edit-row .inline-edit-col-left,
+ #wpbody-content .bulk-edit-row-page .inline-edit-col-right,
+ #wpbody-content .bulk-edit-row .inline-edit-col-bottom {
+ float: none;
+ width: 100%;
+ }
+
+ #wpbody-content .quick-edit-row fieldset .inline-edit-col label,
+ #wpbody-content .quick-edit-row fieldset .inline-edit-group label,
+ #wpbody-content .bulk-edit-row fieldset .inline-edit-col label,
+ #wpbody-content .bulk-edit-row fieldset .inline-edit-group label {
+ max-width: none;
+ float: none;
+ margin-bottom: 5px;
+ }
+
+ #wpbody .bulk-edit-row fieldset select {
+ display: block;
+ width: 100%;
+ max-width: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ .inline-edit-row fieldset ul.cat-checklist label,
+ .inline-edit-row #bulk-titles div {
+ font-size: 16px;
+ }
+
+ .inline-edit-row fieldset label span.title {
+ float: none;
+ }
+
+ .inline-edit-row fieldset label.inline-edit-tags {
+ padding: 0 0.5em;
+ }
+
+ .inline-edit-row fieldset .inline-edit-col label.inline-edit-tags {
+ padding: 0;
+ }
+
+ .inline-edit-row fieldset label span.input-text-wrap {
+ margin-left: 0;
+ }
+
+ .inline-edit-row fieldset input[name=jj],
+ .inline-edit-row fieldset input[name=hh],
+ .inline-edit-row fieldset input[name=mn] {
+ width: 3em;
+ }
+
+ .inline-edit-row fieldset input[name=aa] {
+ width: 4.5em;
+ }
+
+ #bulk-titles div {
+ margin: 0.8em 0.3em;
+ }
+
+ #bulk-titles div a {
+ height: 22px;
+ }
+
+ /* Taxonomies */
+ .tags .column-posts {
+ width: 74px;
+ }
+
+ .tags .column-slug {
+ width: 30%;
+ }
+
+ /* Comments */
+ .comments .column-response {
+ width: 35%;
+ }
+
+ /* Users */
+ .users .column-role {
+ width: 35%;
+ }
+
+ /* Network admin sites */
+ .sites .column-blogname {
+ width: 55%;
+ }
+
+ /* Updates */
+ #wpbody-content #update-themes-table .plugin-title {
+ width: auto;
+ }
+
+ /* Links */
+ .link-manager-php #posts-filter {
+ margin-top: 25px;
+ }
+
+ .link-manager-php .tablenav.bottom {
+ overflow: hidden;
+ }
+
+ /* Plugin/Theme Management Page */
+ .wp-list-table.plugins {
+ position: relative;
+ margin-top: 35px;
+ margin-bottom: 50px;
+ }
+
+ .wp-list-table.plugins thead .column-description,
+ #wpbody-content .wp-list-table.plugins tfoot .column-description,
+ .wp-list-table.plugins th#description {
+ display: none;
+ }
+
+ #wpbody-content .wp-list-table.plugins,
+ #wpbody-content .wp-list-table.plugins thead,
+ #wpbody-content .wp-list-table.plugins tbody,
+ #wpbody-content .wp-list-table.plugins tr,
+ #wpbody-content .wp-list-table.plugins .column-description,
+ #wpbody-content .wp-list-table.plugins .plugin-title,
+ #wpbody-content .wp-list-table.plugins .theme-title,
+ #wpbody-content .wp-list-table.plugins .plugin-update,
+ #wpbody-content .wp-list-table.plugins .manage-column.column-name {
+ display: block;
+ width: auto;
+ }
+
+ .wp-list-table.plugins thead,
+ .wp-list-table.plugins tfoot {
+ position: absolute;
+ top: -35px;
+ left: 0;
+ right: 0;
+ width: auto;
+ height: 35px;
+ }
+
+ .wp-list-table.plugins tfoot {
+ bottom: -35px;
+ top: auto;
+ }
+
+ .active, .inactive {
+ padding-top: 0;
+ }
+
+ .wp-list-table.plugins .plugin-title,
+ .wp-list-table.plugins .theme-title {
+ padding-top: 13px;
+ padding-bottom: 4px;
+ }
+
+ .plugins tr.active + tr.inactive th.check-column,
+ .plugins tr.active + tr.inactive td,
+ .wp-list-table.plugins .plugin-title,
+ .wp-list-table.plugins .theme-title,
+ .wp-list-table.plugins tbody th {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ .plugins tbody {
+ padding: 1px 0 0;
+ }
+
+ .plugins tr.active + tr.inactive td.column-description {
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ }
+
+ .plugins tr.active + tr.inactive th.check-column,
+ .plugins tr.active + tr.inactive td {
+ border-top: none;
+ }
+
+ .wp-list-table.plugins .column-description {
+ padding-top: 0;
+ }
+
+ .wp-list-table.plugins .manage-column.column-name,
+ .wp-list-table.plugins .column-description,
+ .wp-list-table.plugins .plugin-title,
+ .wp-list-table.plugins .theme-title {
+ padding-right: 12px;
+ padding-left: 46px;
+ }
+
+ .wp-list-table.plugins tr {
+ position: relative;
+ }
+
+ .wp-list-table.plugins th.check-column,
+ .wp-list-table.plugins tr.update th.check-column {
+ position: absolute;
+ height: auto;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ padding-left: 2px;
+ padding-top: 18px;
+ }
+
+ .wp-list-table.plugins thead th.check-column,
+ .wp-list-table.plugins tfoot th.check-column {
+ padding-left: 3px;
+ padding-top: 11px;
+ background: none;
+ }
+
+ .widefat tbody th.check-column input[type="checkbox"] {
+ margin-top: -3px;
+ margin-left: 8px;
+ }
+
+ .wp-list-table.plugins .active .check-column input,
+ .wp-list-table.plugins .update .check-column input {
+ margin-left: 5px;
+ }
+
+ .wp-list-table.plugins thead .check-column input,
+ .wp-list-table.plugins tfoot .check-column input {
+ margin-top: -6px;
+ }
+
+ .wp-list-table.plugins .active th.check-column {
+ background: none;
+ }
+
+ .wp-list-table.plugins .plugin-title strong,
+ .wp-list-table.plugins .theme-title strong {
+ font-size: 1.4em;
+ line-height: 1.6em;
+ }
+
+ /* Add New plugins page */
+ table.plugin-install .column-name,
+ table.plugin-install .column-version,
+ table.plugin-install .column-rating,
+ table.plugin-install .column-description {
+ display: block;
+ width: auto;
+ }
+
+ table.plugin-install th.column-name,
+ table.plugin-install th.column-version,
+ table.plugin-install th.column-rating,
+ table.plugin-install th.column-description {
+ display: none;
+ }
+
+ table.plugin-install td.column-name strong {
+ font-size: 1.4em;
+ line-height: 1.6em;
+ }
+
+ table.plugin-install #the-list td {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ table.plugin-install #the-list tr {
+ display: block;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+ }
+}
diff --git a/wp-admin/css/login-rtl.css b/wp-admin/css/login-rtl.css
new file mode 100644
index 0000000..b83770f
--- /dev/null
+++ b/wp-admin/css/login-rtl.css
@@ -0,0 +1,269 @@
+@import url(forms-rtl.css);
+@import url(l10n-rtl.css);
+
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+
+html {
+ background: #f1f1f1;
+}
+
+body {
+ background: #f1f1f1;
+ min-width: 0;
+ color: #444;
+ font-family: "Open Sans", sans-serif;
+ font-size: 13px;
+ line-height: 1.4em;
+}
+
+a {
+ color: #0074a2;
+ -webkit-transition-property: border, background, color;
+ transition-property: border, background, color;
+ -webkit-transition-duration: .05s;
+ transition-duration: .05s;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+a {
+ outline: 0;
+}
+
+a:hover,
+a:active {
+ color: #2ea2cc;
+}
+
+a:focus {
+ color: #124964;
+}
+
+a:focus,
+a:active {
+ outline: thin dotted;
+}
+
+p {
+ line-height: 1.5;
+}
+
+.login .message {
+ border-right: 4px solid #2ea2cc;
+ padding: 1px 12px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+}
+
+.login #login_error {
+ border-right: 4px solid #dd3d36;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+}
+
+#loginform p.submit,
+.login-action-lostpassword p.submit {
+ border: none;
+ margin: -10px 0 20px; /* May want to revisit this */
+}
+
+.login * {
+ margin: 0;
+ padding: 0;
+}
+
+.login form {
+ margin-top: 20px;
+ margin-right: 0;
+ padding: 26px 24px 46px;
+ font-weight: normal;
+ overflow: hidden;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+}
+
+.login form .forgetmenot {
+ font-weight: normal;
+ float: right;
+ margin-bottom: 0;
+}
+
+.login .button-primary {
+ float: left;
+}
+
+#login form p {
+ margin-bottom: 0;
+}
+
+#login form p.submit {
+ margin: 0;
+ padding: 0;
+}
+
+.login label {
+ color: #777;
+ font-size: 14px;
+}
+
+.login form .forgetmenot label {
+ font-size: 12px;
+ line-height: 19px;
+}
+
+.login h1 {
+ text-align: center;
+}
+
+.login h1 a {
+ background-image: url(../images/w-logo-blue.png?ver=20131202);
+ background-image: none, url(../images/wordpress-logo.svg?ver=20131107);
+ -webkit-background-size: 84px;
+ background-size: 84px;
+ background-position: center top;
+ background-repeat: no-repeat;
+ color: #999;
+ height: 84px;
+ font-size: 20px;
+ font-weight: normal;
+ line-height: 1.3em;
+ margin: 0 auto 25px;
+ padding: 0;
+ text-decoration: none;
+ width: 84px;
+ text-indent: -9999px;
+ outline: none;
+ overflow: hidden;
+ display: block;
+}
+
+#login {
+ width: 320px;
+ padding: 8% 0 0;
+ margin: auto;
+}
+
+#login_error,
+.login .message {
+ margin-right: 0;
+ padding: 12px;
+}
+
+.login #nav,
+.login #backtoblog {
+ font-size: 13px;
+ padding: 0 24px 0;
+}
+
+.login #nav {
+ margin: 24px 0 0 0;
+}
+
+#backtoblog {
+ margin: 16px 0 0 0;
+}
+
+.login #nav a,
+.login #backtoblog a {
+ text-decoration: none;
+ color: #999;
+}
+
+.login #nav a:hover,
+.login #backtoblog a:hover,
+.login h1 a:hover {
+ color: #2ea2cc;
+}
+
+.login form .input,
+.login input[type="text"] {
+ font-size: 24px;
+ width: 100%;
+ padding: 3px;
+ margin: 2px 0 16px 6px;
+}
+
+.login form .input,
+.login input[type="text"],
+.login form input[type="checkbox"] {
+ background: #fbfbfb;
+}
+
+.ie7 .login form .input,
+.ie8 .login form .input {
+ font-family: sans-serif;
+}
+
+.login #pass-strength-result {
+ width: 250px;
+ font-weight: 600;
+ margin: 12px 0 6px;
+ padding: 6px 5px;
+ text-align: center;
+}
+
+.mobile #login {
+ padding: 20px 0;
+}
+
+.mobile #login form,
+.mobile #login .message,
+.mobile #login_error {
+ margin-right: 0;
+}
+
+.mobile #login #nav,
+.mobile #login #backtoblog {
+ margin-right: 8px;
+}
+
+.mobile #login h1 a {
+ width: auto;
+}
+
+body.interim-login {
+ height: auto;
+}
+
+.interim-login #login {
+ padding: 0;
+ margin: 5px auto 20px;
+}
+
+.interim-login.login h1 a {
+ width: auto;
+}
+
+.interim-login #login_error,
+.interim-login.login .message {
+ margin: 0 0 16px;
+}
+
+.interim-login.login form {
+ margin: 0;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+@media screen and ( max-width: 782px ) {
+ .interim-login input[type=checkbox] {
+ height: 16px;
+ width: 16px;
+ }
+
+ .interim-login input[type=checkbox]:checked:before {
+ width: 16px;
+ font: normal 21px/1 'dashicons';
+ margin: -3px -4px 0 0;
+ }
+}
diff --git a/wp-admin/css/login-rtl.min.css b/wp-admin/css/login-rtl.min.css
new file mode 100644
index 0000000..04d1108
--- /dev/null
+++ b/wp-admin/css/login-rtl.min.css
@@ -0,0 +1 @@
+input,textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;outline:0;-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=email],input[type=url]{direction:ltr}input[type=checkbox],input[type=radio]{border:1px solid #bbb;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#888}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#2ea2cc}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{-webkit-border-radius:50%;border-radius:50%;margin-left:4px;line-height:10px}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:right;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;-webkit-border-radius:50px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;-webkit-border-radius:0;border-radius:0}textarea{overflow:auto;padding:2px 6px;line-height:1.4}.wp-admin input[type=file]{padding:3px 0}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;-webkit-box-shadow:none;box-shadow:none}input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:none}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:right;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:left}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}#adduser .form-field input,input.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:right;margin-left:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-right:1em}#upload-form label{color:#777}#your-profile label+a,fieldset label,label{vertical-align:middle}#misc-publishing-actions label,.options-media-php label[for*="_size_"]{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;right:-1px;padding:0 0 0 5px;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{background-color:#eee;border:1px solid #ddd;float:right;margin:13px 1px 5px 5px;padding:3px 5px;text-align:center;width:200px;display:none}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c}.indicator-hint{padding-top:8px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}input[type=text].ui-autocomplete-loading{background:url(../images/loading.gif) left center no-repeat;visibility:visible}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete-input.open{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;border:1px solid #aaa;background-color:#efefef}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:right}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px;color:#444}.ui-autocomplete li a.ui-state-focus{background-color:#ddd;cursor:pointer}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#222;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:right;padding:20px 0 20px 10px;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-left:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-left:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.color-option{cursor:pointer}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.pressthis{margin:20px 0}.pressthis a,.pressthis a:active,.pressthis a:focus,.pressthis a:hover{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-ms-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis a span:before{color:#777;font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);-ms-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#local-time,#utc-time{padding-right:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}.widefat th input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}.widefat th input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#createuser .form-field input{width:100%}.form-table{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-left:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-right:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#local-time,#utc-time{display:block;float:none;padding:0;line-height:2}.form-field #domain{max-width:none}}@media only screen and (max-width:768px){.form-field input[type=email],.form-field input[type=password],.form-field input[type=text],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media screen and (max-width:600px){.color-option{width:49%}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #wp-fullscreen-tagline{font-family:KaiTi,"楷体",sans-serif}.locale-zh-cn #wp-fullscreen-modes a{font-size:12px}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-right:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-left:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title{width:8em}.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}body,html{height:100%;margin:0;padding:0}html{background:#f1f1f1}body{background:#f1f1f1;min-width:0;color:#444;font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em}a{color:#0074a2;-webkit-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#2ea2cc}a:focus{color:#124964}a:active,a:focus{outline:dotted thin}p{line-height:1.5}.login .message{border-right:4px solid #2ea2cc;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login #login_error{border-right:4px solid #dd3d36;background:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#loginform p.submit,.login-action-lostpassword p.submit{border:none;margin:-10px 0 20px}.login *{margin:0;padding:0}.login form{margin-top:20px;margin-right:0;padding:26px 24px 46px;font-weight:400;overflow:hidden;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.login form .forgetmenot{font-weight:400;float:right;margin-bottom:0}.login .button-primary{float:left}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#777;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1{text-align:center}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);-webkit-background-size:84px;background-size:84px;background-position:center top;background-repeat:no-repeat;color:#999;height:84px;font-size:20px;font-weight:400;line-height:1.3em;margin:0 auto 25px;padding:0;text-decoration:none;width:84px;text-indent:-9999px;outline:0;overflow:hidden;display:block}#login{width:320px;padding:8% 0 0;margin:auto}#login_error,.login .message{margin-right:0;padding:12px}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#999}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#2ea2cc}.login form .input,.login input[type=text]{font-size:24px;width:100%;padding:3px;margin:2px 0 16px 6px}.login form .input,.login form input[type=checkbox],.login input[type=text]{background:#fbfbfb}.ie7 .login form .input,.ie8 .login form .input{font-family:sans-serif}.login #pass-strength-result{width:250px;font-weight:600;margin:12px 0 6px;padding:6px 5px;text-align:center}.mobile #login{padding:20px 0}.mobile #login .message,.mobile #login form,.mobile #login_error{margin-right:0}.mobile #login #backtoblog,.mobile #login #nav{margin-right:8px}.mobile #login h1 a{width:auto}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}@-ms-viewport{width:device-width}@media screen and (max-width:782px){.interim-login input[type=checkbox]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px -4px 0 0}}
\ No newline at end of file
diff --git a/wp-admin/css/login.css b/wp-admin/css/login.css
new file mode 100644
index 0000000..f6747f1
--- /dev/null
+++ b/wp-admin/css/login.css
@@ -0,0 +1,269 @@
+@import url(forms.css);
+@import url(l10n.css);
+
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+
+html {
+ background: #f1f1f1;
+}
+
+body {
+ background: #f1f1f1;
+ min-width: 0;
+ color: #444;
+ font-family: "Open Sans", sans-serif;
+ font-size: 13px;
+ line-height: 1.4em;
+}
+
+a {
+ color: #0074a2;
+ -webkit-transition-property: border, background, color;
+ transition-property: border, background, color;
+ -webkit-transition-duration: .05s;
+ transition-duration: .05s;
+ -webkit-transition-timing-function: ease-in-out;
+ transition-timing-function: ease-in-out;
+}
+
+a {
+ outline: 0;
+}
+
+a:hover,
+a:active {
+ color: #2ea2cc;
+}
+
+a:focus {
+ color: #124964;
+}
+
+a:focus,
+a:active {
+ outline: thin dotted;
+}
+
+p {
+ line-height: 1.5;
+}
+
+.login .message {
+ border-left: 4px solid #2ea2cc;
+ padding: 1px 12px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+}
+
+.login #login_error {
+ border-left: 4px solid #dd3d36;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+}
+
+#loginform p.submit,
+.login-action-lostpassword p.submit {
+ border: none;
+ margin: -10px 0 20px; /* May want to revisit this */
+}
+
+.login * {
+ margin: 0;
+ padding: 0;
+}
+
+.login form {
+ margin-top: 20px;
+ margin-left: 0;
+ padding: 26px 24px 46px;
+ font-weight: normal;
+ overflow: hidden;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.13);
+}
+
+.login form .forgetmenot {
+ font-weight: normal;
+ float: left;
+ margin-bottom: 0;
+}
+
+.login .button-primary {
+ float: right;
+}
+
+#login form p {
+ margin-bottom: 0;
+}
+
+#login form p.submit {
+ margin: 0;
+ padding: 0;
+}
+
+.login label {
+ color: #777;
+ font-size: 14px;
+}
+
+.login form .forgetmenot label {
+ font-size: 12px;
+ line-height: 19px;
+}
+
+.login h1 {
+ text-align: center;
+}
+
+.login h1 a {
+ background-image: url(../images/w-logo-blue.png?ver=20131202);
+ background-image: none, url(../images/wordpress-logo.svg?ver=20131107);
+ -webkit-background-size: 84px;
+ background-size: 84px;
+ background-position: center top;
+ background-repeat: no-repeat;
+ color: #999;
+ height: 84px;
+ font-size: 20px;
+ font-weight: normal;
+ line-height: 1.3em;
+ margin: 0 auto 25px;
+ padding: 0;
+ text-decoration: none;
+ width: 84px;
+ text-indent: -9999px;
+ outline: none;
+ overflow: hidden;
+ display: block;
+}
+
+#login {
+ width: 320px;
+ padding: 8% 0 0;
+ margin: auto;
+}
+
+#login_error,
+.login .message {
+ margin-left: 0;
+ padding: 12px;
+}
+
+.login #nav,
+.login #backtoblog {
+ font-size: 13px;
+ padding: 0 24px 0;
+}
+
+.login #nav {
+ margin: 24px 0 0 0;
+}
+
+#backtoblog {
+ margin: 16px 0 0 0;
+}
+
+.login #nav a,
+.login #backtoblog a {
+ text-decoration: none;
+ color: #999;
+}
+
+.login #nav a:hover,
+.login #backtoblog a:hover,
+.login h1 a:hover {
+ color: #2ea2cc;
+}
+
+.login form .input,
+.login input[type="text"] {
+ font-size: 24px;
+ width: 100%;
+ padding: 3px;
+ margin: 2px 6px 16px 0;
+}
+
+.login form .input,
+.login input[type="text"],
+.login form input[type="checkbox"] {
+ background: #fbfbfb;
+}
+
+.ie7 .login form .input,
+.ie8 .login form .input {
+ font-family: sans-serif;
+}
+
+.login #pass-strength-result {
+ width: 250px;
+ font-weight: 600;
+ margin: 12px 0 6px;
+ padding: 6px 5px;
+ text-align: center;
+}
+
+.mobile #login {
+ padding: 20px 0;
+}
+
+.mobile #login form,
+.mobile #login .message,
+.mobile #login_error {
+ margin-left: 0;
+}
+
+.mobile #login #nav,
+.mobile #login #backtoblog {
+ margin-left: 8px;
+}
+
+.mobile #login h1 a {
+ width: auto;
+}
+
+body.interim-login {
+ height: auto;
+}
+
+.interim-login #login {
+ padding: 0;
+ margin: 5px auto 20px;
+}
+
+.interim-login.login h1 a {
+ width: auto;
+}
+
+.interim-login #login_error,
+.interim-login.login .message {
+ margin: 0 0 16px;
+}
+
+.interim-login.login form {
+ margin: 0;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+@media screen and ( max-width: 782px ) {
+ .interim-login input[type=checkbox] {
+ height: 16px;
+ width: 16px;
+ }
+
+ .interim-login input[type=checkbox]:checked:before {
+ width: 16px;
+ font: normal 21px/1 'dashicons';
+ margin: -3px 0 0 -4px;
+ }
+}
diff --git a/wp-admin/css/login.min.css b/wp-admin/css/login.min.css
new file mode 100644
index 0000000..bdcfe5f
--- /dev/null
+++ b/wp-admin/css/login.min.css
@@ -0,0 +1 @@
+input,textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;outline:0;-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=email],input[type=url]{direction:ltr}input[type=checkbox],input[type=radio]{border:1px solid #bbb;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#888}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#2ea2cc}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{-webkit-border-radius:50%;border-radius:50%;margin-right:4px;line-height:10px}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;-webkit-border-radius:50px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;-webkit-border-radius:0;border-radius:0}textarea{overflow:auto;padding:2px 6px;line-height:1.4}.wp-admin input[type=file]{padding:3px 0}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;-webkit-box-shadow:none;box-shadow:none}input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;border:none}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}#adduser .form-field input,input.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}#upload-form label{color:#777}#your-profile label+a,fieldset label,label{vertical-align:middle}#misc-publishing-actions label,.options-media-php label[for*="_size_"]{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;left:-1px;padding:0 5px 0 0;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{background-color:#eee;border:1px solid #ddd;float:left;margin:13px 5px 5px 1px;padding:3px 5px;text-align:center;width:200px;display:none}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c}.indicator-hint{padding-top:8px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}input[type=text].ui-autocomplete-loading{background:url(../images/loading.gif) right center no-repeat;visibility:visible}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete-input.open{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #aaa;background-color:#efefef}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:left}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px;color:#444}.ui-autocomplete li a.ui-state-focus{background-color:#ddd;cursor:pointer}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#222;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-right:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.color-option{cursor:pointer}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.pressthis{margin:20px 0}.pressthis a,.pressthis a:active,.pressthis a:focus,.pressthis a:hover{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-ms-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis a span:before{color:#777;font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);-ms-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#local-time,#utc-time{padding-left:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}.widefat th input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}.widefat th input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#createuser .form-field input{width:100%}.form-table{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-left:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#local-time,#utc-time{display:block;float:none;padding:0;line-height:2}.form-field #domain{max-width:none}}@media only screen and (max-width:768px){.form-field input[type=email],.form-field input[type=password],.form-field input[type=text],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media screen and (max-width:600px){.color-option{width:49%}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #wp-fullscreen-tagline{font-family:KaiTi,"楷体",sans-serif}.locale-zh-cn #wp-fullscreen-modes a{font-size:12px}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-left:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title{width:8em}.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}body,html{height:100%;margin:0;padding:0}html{background:#f1f1f1}body{background:#f1f1f1;min-width:0;color:#444;font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em}a{color:#0074a2;-webkit-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#2ea2cc}a:focus{color:#124964}a:active,a:focus{outline:dotted thin}p{line-height:1.5}.login .message{border-left:4px solid #2ea2cc;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login #login_error{border-left:4px solid #dd3d36;background:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#loginform p.submit,.login-action-lostpassword p.submit{border:none;margin:-10px 0 20px}.login *{margin:0;padding:0}.login form{margin-top:20px;margin-left:0;padding:26px 24px 46px;font-weight:400;overflow:hidden;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.login form .forgetmenot{font-weight:400;float:left;margin-bottom:0}.login .button-primary{float:right}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#777;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1{text-align:center}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);-webkit-background-size:84px;background-size:84px;background-position:center top;background-repeat:no-repeat;color:#999;height:84px;font-size:20px;font-weight:400;line-height:1.3em;margin:0 auto 25px;padding:0;text-decoration:none;width:84px;text-indent:-9999px;outline:0;overflow:hidden;display:block}#login{width:320px;padding:8% 0 0;margin:auto}#login_error,.login .message{margin-left:0;padding:12px}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#999}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#2ea2cc}.login form .input,.login input[type=text]{font-size:24px;width:100%;padding:3px;margin:2px 6px 16px 0}.login form .input,.login form input[type=checkbox],.login input[type=text]{background:#fbfbfb}.ie7 .login form .input,.ie8 .login form .input{font-family:sans-serif}.login #pass-strength-result{width:250px;font-weight:600;margin:12px 0 6px;padding:6px 5px;text-align:center}.mobile #login{padding:20px 0}.mobile #login .message,.mobile #login form,.mobile #login_error{margin-left:0}.mobile #login #backtoblog,.mobile #login #nav{margin-left:8px}.mobile #login h1 a{width:auto}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}@-ms-viewport{width:device-width}@media screen and (max-width:782px){.interim-login input[type=checkbox]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px 0 0 -4px}}
\ No newline at end of file
diff --git a/wp-admin/css/media-rtl.css b/wp-admin/css/media-rtl.css
new file mode 100644
index 0000000..dd34188
--- /dev/null
+++ b/wp-admin/css/media-rtl.css
@@ -0,0 +1,1197 @@
+/*------------------------------------------------------------------------------
+ 14.0 - Media Screen
+------------------------------------------------------------------------------*/
+
+.media-item .describe {
+ border-collapse: collapse;
+ width: 100%;
+ border-top: 1px solid #dfdfdf;
+ clear: both;
+ cursor: default;
+}
+
+.media-item.media-blank .describe {
+ border: 0;
+}
+
+.media-item .describe th {
+ vertical-align: top;
+ text-align: right;
+ padding: 5px 10px 10px;
+ width: 140px;
+}
+
+.media-item .describe .align th {
+ padding-top: 0;
+}
+
+.media-item .media-item-info tr {
+ background-color: transparent;
+}
+
+.media-item .describe td {
+ padding: 0 0 8px 8px;
+ vertical-align: top;
+}
+
+.media-item thead.media-item-info td {
+ padding: 4px 10px 0;
+}
+
+.media-item .media-item-info .A1B1 {
+ padding: 0 10px 0 0;
+}
+
+.media-item td.savesend {
+ padding-bottom: 15px;
+}
+
+.media-item .thumbnail {
+ max-height: 128px;
+ max-width: 128px;
+}
+
+#wpbody-content #async-upload-wrap a {
+ display: none;
+}
+
+.media-upload-form {
+ margin-top: 20px;
+}
+
+.media-upload-form td label {
+ margin-left: 6px;
+ margin-right: 2px;
+}
+
+.media-upload-form .align .field label {
+ display: inline;
+ padding: 0 23px 0 0;
+ margin: 0 3px 0 1em;
+ font-weight: 600;
+}
+
+.media-upload-form tr.image-size label {
+ margin: 0 5px 0 0;
+ font-weight: 600;
+}
+
+.media-upload-form th.label label {
+ font-weight: 600;
+ margin: 0.5em;
+ font-size: 13px;
+}
+
+.media-upload-form th.label label span {
+ padding: 0 5px;
+}
+
+.media-item .describe input[type="text"],
+.media-item .describe textarea {
+ width: 460px;
+}
+
+.media-item .describe p.help {
+ margin: 0;
+ padding: 0 5px 0 0;
+}
+
+.media-item .edit-attachment,
+.describe-toggle-on,
+.describe-toggle-off {
+ display: block;
+ line-height: 36px;
+ float: left;
+ margin-left: 10px;
+}
+
+.media-item .describe-toggle-off,
+.media-item.open .describe-toggle-on {
+ display: none;
+}
+
+.media-item.open .describe-toggle-off {
+ display: block;
+}
+
+.media-upload-form .media-item {
+ min-height: 36px;
+ margin-bottom: 1px;
+ position: relative;
+ width: 100%;
+ background: #fff;
+}
+
+.media-upload-form .media-item,
+.media-upload-form .media-item .error {
+ -webkit-box-shadow: 0 1px 0 #dfdfdf;
+ box-shadow: 0 1px 0 #dfdfdf;
+}
+
+#media-items:empty {
+ border: 0 none;
+}
+
+.media-item .filename {
+ line-height: 36px;
+ overflow: hidden;
+ margin-right: 6px;
+}
+
+.media-item .pinkynail {
+ float: right;
+ margin: 2px 3px 0 10px;
+ max-width: 40px;
+ max-height: 32px;
+}
+
+.media-item .startopen,
+.media-item .startclosed {
+ display: none;
+}
+
+.media-item .original {
+ position: relative;
+ height: 34px;
+}
+
+.media-item .progress {
+ float: left;
+ height: 22px;
+ margin: 7px 6px;
+ width: 200px;
+ line-height: 2em;
+ padding: 0;
+ overflow: hidden;
+ -webkit-border-radius: 22px;
+ border-radius: 22px;
+ background: #ddd;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
+ box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
+}
+
+.media-item .bar {
+ z-index: 9;
+ width: 0;
+ height: 100%;
+ margin-top: -22px;
+ -webkit-border-radius: 22px;
+ border-radius: 22px;
+ background-color: #0074a2;
+ -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.3);
+ box-shadow: inset 0 0 2px rgba(0,0,0,0.3);
+}
+
+.media-item .progress .percent {
+ z-index: 10;
+ position: relative;
+ width: 200px;
+ padding: 0;
+ color: #fff;
+ text-align: center;
+ line-height: 22px;
+ font-weight: 400;
+ text-shadow: 0 1px 2px rgba(0,0,0,0.2);
+}
+
+.upload-php .fixed .column-parent {
+ width: 15%;
+}
+
+.js .html-uploader #plupload-upload-ui {
+ display: none;
+}
+
+.js .html-uploader #html-upload-ui {
+ display: block;
+}
+
+.media-upload-form .media-item.error,
+.media-upload-form .media-item .error {
+ width: auto;
+ margin: 0 0 1px 0;
+}
+
+.media-upload-form .media-item .error {
+ padding: 10px 14px 10px 0;
+}
+
+.media-item .error-div a.dismiss {
+ display: block;
+ float: left;
+ margin: 0 15px 0 10px;
+}
+
+/*------------------------------------------------------------------------------
+ 14.1 - Media Library
+------------------------------------------------------------------------------*/
+
+.find-box {
+ background-color: #fff;
+ -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
+ box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
+ width: 600px;
+ overflow: hidden;
+ margin-right: -300px;
+ position: fixed;
+ top: 30px;
+ bottom: 30px;
+ right: 50%;
+ z-index: 100105;
+}
+
+.find-box-head {
+ background: #fcfcfc;
+ border-bottom: 1px solid #dfdfdf;
+ height: 36px;
+ font-size: 18px;
+ font-weight: 600;
+ line-height: 36px;
+ padding: 0 16px 0 36px;
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+}
+
+.find-box-inside {
+ overflow: auto;
+ padding: 16px;
+ background-color: #fff;
+ position: absolute;
+ top: 37px;
+ bottom: 45px;
+ overflow-y: scroll;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.find-box-search {
+ padding-bottom: 16px;
+}
+
+.find-box-search .spinner {
+ float: none;
+ right: 110px;
+ position: absolute;
+ top: 2px;
+}
+
+.find-box-search,
+#find-posts-response {
+ position: relative; /* RTL fix, #WP28010 */
+}
+
+#find-posts-input,
+#find-posts-search {
+ float: right;
+}
+
+#find-posts-input {
+ width: 140px;
+ height: 28px;
+ margin: 0 0 0 4px;
+}
+
+.widefat .found-radio {
+ padding-left: 0;
+ width: 16px;
+}
+
+#find-posts-close {
+ width: 36px;
+ height: 36px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: pointer;
+ text-align: center;
+ color: #666;
+}
+
+#find-posts-close:hover {
+ color: #2ea2cc;
+}
+
+#find-posts-close:before {
+ font: normal 20px/36px 'dashicons';
+ vertical-align: top;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: '\f158';
+}
+
+.find-box-buttons {
+ padding: 8px 16px;
+ background: #fcfcfc;
+ border-top: 1px solid #dfdfdf;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ left: 0;
+}
+
+@media screen and ( max-width: 782px ) {
+ .find-box-inside {
+ bottom: 57px;
+ }
+}
+
+@media screen and ( max-width: 660px ) {
+
+ .find-box {
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ margin: 0;
+ width: 100%;
+ }
+
+}
+
+.ui-find-overlay {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+ background: #000;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ z-index: 100100;
+}
+
+ul#dismissed-updates {
+ display: none;
+}
+
+form.upgrade {
+ margin-top: 8px;
+}
+
+form.upgrade .hint {
+ font-style: italic;
+ font-size: 85%;
+ margin: -0.5em 0 2em 0;
+}
+
+#poststuff .inside .the-tagcloud {
+ margin: 5px 0 10px;
+ padding: 8px;
+ border: 1px solid #ddd;
+ line-height: 1.8em;
+ word-spacing: 3px;
+ -webkit-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.drag-drop #drag-drop-area {
+ border: 4px dashed #bbb;
+ height: 200px;
+}
+
+.drag-drop .drag-drop-inside {
+ margin: 70px auto 0;
+ width: 250px;
+}
+
+.drag-drop-inside p {
+ color: #aaa;
+ font-size: 14px;
+ margin: 5px 0;
+ display: none;
+}
+
+.drag-drop .drag-drop-inside p {
+ text-align: center;
+}
+
+.drag-drop-inside p.drag-drop-info {
+ font-size: 20px;
+}
+
+.drag-drop .drag-drop-inside p,
+.drag-drop-inside p.drag-drop-buttons {
+ display: block;
+}
+
+/*
+#drag-drop-area:-moz-drag-over {
+ border-color: #83b4d8;
+}
+border color while dragging a file over the uploader drop area */
+.drag-drop.drag-over #drag-drop-area {
+ border-color: #83b4d8;
+}
+
+#plupload-upload-ui {
+ position: relative;
+}
+
+/**
+ * Media Library grid view
+ */
+
+.media-frame.mode-grid,
+.media-frame.mode-grid .media-frame-content,
+.media-frame.mode-grid .attachments-browser .attachments,
+.media-frame.mode-grid .uploader-inline-content {
+ position: static;
+}
+
+/* Regions we don't use at all */
+.media-frame.mode-grid .media-frame-title,
+.media-frame.mode-grid .media-frame-router,
+.media-frame.mode-grid .media-frame-menu {
+ display: none;
+}
+
+.media-frame.mode-grid .media-frame-content {
+ background-color: transparent;
+ border: none;
+}
+
+.upload-php .mode-grid .media-sidebar {
+ position: relative;
+ width: auto;
+ margin-bottom: 16px;
+ padding: 0 16px;
+ border: 1px solid #c00;
+ background-color: #feebe8;
+}
+
+.upload-php .mode-grid .hide-sidebar .media-sidebar {
+ display: none;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status {
+ border-bottom: none;
+ padding-bottom: 0;
+ max-width: 100%;
+}
+
+.upload-php .mode-grid .media-sidebar .upload-error {
+ margin: 20px 0;
+ padding: 0;
+ border: none;
+ background: none;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors {
+ font-size: 0;
+ top: -12px;
+ left: -10px;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:before {
+ content: "\f158";
+ font: normal 20px/1 dashicons;
+ color: #666;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before,
+.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before {
+ color: #2ea2cc;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h3 {
+ display: none;
+}
+
+.media-frame.mode-grid .uploader-inline {
+ position: relative;
+ top: auto;
+ left: auto;
+ right: auto;
+ bottom: auto;
+ padding-top: 0;
+ margin-top: 0;
+ border: 4px dashed #bbb;
+}
+
+.media-frame.mode-select .attachments-browser.fixed .attachments {
+ position: relative;
+ top: 94px; /* prevent jumping up when the toolbar becomes fixed */
+ padding-bottom: 94px; /* offset for above so the bottom doesn't get cut off */
+}
+
+.media-frame.mode-grid .attachment:focus,
+.media-frame.mode-grid .selected.attachment:focus,
+.media-frame.mode-grid .attachment.details:focus {
+ -webkit-box-shadow:
+ inset 0 0 2px 3px #f1f1f1,
+ inset 0 0 0 7px #5b9dd9;
+ box-shadow:
+ inset 0 0 2px 3px #f1f1f1,
+ inset 0 0 0 7px #5b9dd9;
+ outline: none;
+}
+
+.media-frame.mode-grid .selected.attachment {
+ -webkit-box-shadow:
+ inset 0 0 0 5px #f1f1f1,
+ inset 0 0 0 7px #ccc;
+ box-shadow:
+ inset 0 0 0 5px #f1f1f1,
+ inset 0 0 0 7px #ccc;
+}
+
+.media-frame.mode-grid .attachment.details {
+ -webkit-box-shadow:
+ inset 0 0 0 3px #f1f1f1,
+ inset 0 0 0 7px #1e8cbe;
+ box-shadow:
+ inset 0 0 0 3px #f1f1f1,
+ inset 0 0 0 7px #1e8cbe;
+}
+
+.media-frame.mode-grid.mode-select .attachment .thumbnail {
+ opacity: 0.65;
+}
+
+.media-frame.mode-select .attachment.selected .thumbnail {
+ opacity: 1;
+}
+
+.media-frame.mode-grid .media-toolbar {
+ margin-bottom: 15px;
+ height: auto;
+}
+
+.media-frame.mode-grid .media-toolbar select {
+ margin: 0 0 0 10px;
+ font-size: 14px;
+}
+
+.media-frame.mode-grid .media-toolbar-secondary > .media-button {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.media-frame.mode-grid .attachments-browser .bulk-select {
+ display: inline-block;
+ margin: 0 0 0 10px;
+}
+
+.media-frame.mode-grid .search {
+ margin-top: 0;
+}
+
+.media-frame.mode-grid .spinner {
+ margin-top: 15px;
+}
+
+.attachments-browser .media-toolbar-secondary > .media-button {
+ margin-left: 10px;
+}
+
+.media-frame.mode-select .attachments-browser.fixed .media-toolbar {
+ position: fixed;
+ top: 32px;
+ right: auto;
+ left: 20px;
+ margin-top: 0;
+}
+
+.media-frame.mode-grid .attachments-browser {
+ padding: 0;
+}
+
+.media-frame.mode-grid .attachments-browser .attachments {
+ padding: 2px;
+}
+
+.media-frame.mode-grid .attachments-browser .no-media {
+ color: #999;
+ font-size: 18px;
+ font-style: normal;
+ margin: 0;
+ padding: 100px 0 0;
+ text-align: center;
+}
+
+/**
+ * Attachment details modal
+ */
+
+.edit-attachment-frame {
+ display: block;
+ height: 100%;
+ width: 100%;
+}
+
+.edit-attachment-frame .edit-media-header {
+ overflow: hidden;
+}
+
+.upload-php .media-modal-close .media-modal-icon:before {
+ content: '\f335';
+ font-size: 22px;
+}
+
+.upload-php .media-modal-close .media-modal-icon {
+ margin: 14px;
+ width: 22px;
+}
+
+.upload-php .media-modal-close,
+.edit-attachment-frame .edit-media-header .left,
+.edit-attachment-frame .edit-media-header .right {
+ cursor: pointer;
+ color: #777;
+ background-color: transparent;
+ height: 50px;
+ width: 50px;
+ padding: 0;
+ position: absolute;
+ text-align: center;
+ border: 0;
+ border-right: 1px solid #ddd;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.upload-php .media-modal-close {
+ top: 0;
+ left: 0;
+}
+
+.edit-attachment-frame .edit-media-header .left {
+ left: 102px;
+}
+
+.edit-attachment-frame .edit-media-header .right {
+ left: 51px;
+}
+
+.edit-attachment-frame .media-frame-title {
+ right: 0;
+ left: 150px; /* leave space for prev/next/close */
+}
+
+.edit-attachment-frame .edit-media-header .right:before,
+.edit-attachment-frame .edit-media-header .left:before {
+ font: normal 20px/50px 'dashicons' !important;
+ display: inline;
+ font-weight: 300;
+}
+
+.upload-php .media-modal-close:hover,
+.upload-php .media-modal-close:focus,
+.edit-attachment-frame .edit-media-header .left:hover,
+.edit-attachment-frame .edit-media-header .right:hover,
+.edit-attachment-frame .edit-media-header .left:focus,
+.edit-attachment-frame .edit-media-header .right:focus {
+ background: #ddd;
+ border-color: #ccc;
+ color: #000;
+ outline: none;
+}
+
+.upload-php .media-modal-close:focus .media-modal-icon:before,
+.upload-php .media-modal-close:hover .media-modal-icon:before {
+ color: #000;
+}
+
+.edit-attachment-frame .edit-media-header .left:before,
+.rtl .edit-attachment-frame .edit-media-header .right:before {
+ content: '\f341';
+}
+
+.edit-attachment-frame .edit-media-header .right:before,
+.rtl .edit-attachment-frame .edit-media-header .left:before {
+ content: '\f345';
+}
+
+.edit-attachment-frame .edit-media-header .left.disabled,
+.edit-attachment-frame .edit-media-header .right.disabled,
+.edit-attachment-frame .edit-media-header .left.disabled:hover,
+.edit-attachment-frame .edit-media-header .right.disabled:hover {
+ color: #ccc;
+ background: inherit;
+ cursor: default;
+ pointer-events: none;
+}
+
+.edit-attachment-frame .media-frame-content,
+.edit-attachment-frame .media-frame-router {
+ right: 0;
+}
+
+.edit-attachment-frame .media-frame-content {
+ border-bottom: none;
+ bottom: 0;
+ top: 50px;
+}
+
+.edit-attachment-frame .attachment-details {
+ position: absolute;
+ overflow: auto;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ -webkit-box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1);
+}
+
+.edit-attachment-frame .attachment-media-view {
+ float: right;
+ width: 65%;
+ height: 100%;
+}
+
+.edit-attachment-frame .attachment-media-view .thumbnail {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 16px;
+ height: 100%;
+}
+
+.edit-attachment-frame .attachment-media-view .details-image {
+ display: block;
+ margin-bottom: 16px;
+ max-width: 100%;
+ max-height: 90%;
+ max-height: -webkit-calc( 100% - 42px );
+ max-height: calc( 100% - 42px ); /* leave space for actions underneath */
+}
+
+.edit-attachment-frame .wp-media-wrapper {
+ margin-bottom: 12px;
+}
+
+.edit-attachment-frame input,
+.edit-attachment-frame textarea {
+ padding: 6px 8px;
+ line-height: 16px;
+}
+
+.edit-attachment-frame .attachment-info {
+ overflow: auto;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-bottom: 0;
+ padding: 12px 16px 0;
+ width: 35%;
+ height: 100%;
+ -webkit-box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1);
+ border-bottom: 0;
+ border-right: 1px solid #ddd;
+ background: #f3f3f3;
+}
+
+.edit-attachment-frame .attachment-info .details,
+.edit-attachment-frame .attachment-info .settings {
+ position: relative; /* RTL fix, #WP29352 */
+ overflow: hidden;
+ float: none;
+ margin-bottom: 15px;
+ padding-bottom: 15px;
+ border-bottom: 1px solid #ddd;
+}
+
+.edit-attachment-frame .attachment-info .filename {
+ font-weight: normal;
+ color: #666;
+}
+
+.edit-attachment-frame .attachment-info .thumbnail {
+ margin-bottom: 12px;
+}
+
+.attachment-info .actions {
+ margin-bottom: 16px;
+}
+
+.attachment-info .actions a {
+ display: inline;
+ text-decoration: none;
+}
+
+
+/*------------------------------------------------------------------------------
+ 14.2 - Image Editor
+------------------------------------------------------------------------------*/
+
+.wp_attachment_details label[for="content"] {
+ font-size: 13px;
+ line-height: 1.5;
+ margin: 1em 0;
+}
+
+.wp_attachment_details #attachment_caption {
+ height: 4em;
+}
+
+.describe .image-editor {
+ vertical-align: top;
+}
+
+.imgedit-wrap {
+ position: relative;
+}
+
+.imgedit-settings p {
+ margin: 8px 0 0;
+}
+
+.describe .imgedit-wrap .imgedit-settings {
+ padding: 0 5px;
+}
+
+.wp_attachment_holder div.updated {
+ margin-top: 0;
+}
+
+.wp_attachment_holder .imgedit-wrap > div {
+ height: auto;
+ overflow: hidden;
+}
+
+.wp_attachment_holder .imgedit-wrap .imgedit-panel-content {
+ padding-left: 16px;
+ width: auto;
+ overflow: hidden;
+}
+
+.wp_attachment_holder .imgedit-wrap .imgedit-settings {
+ float: left;
+ width: 250px;
+}
+
+.imgedit-settings input {
+ margin-top: 0;
+ vertical-align: middle;
+}
+
+.imgedit-wait {
+ position: absolute;
+ top: 0;
+ background: #fff url(../images/spinner.gif) no-repeat center;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ width: 100%;
+ height: 500px;
+ display: none;
+}
+
+.no-float {
+ float: none;
+}
+
+.media-disabled,
+.imgedit-settings .disabled {
+ color: grey;
+}
+
+.wp_attachment_image,
+.A1B1 {
+ overflow: hidden;
+}
+
+.wp_attachment_image .button,
+.A1B1 .button {
+ float: right;
+}
+
+.no-js .wp_attachment_image .button {
+ display: none;
+}
+
+.wp_attachment_image .spinner,
+.A1B1 .spinner {
+ float: right;
+ padding: 0 0 4px 0;
+ vertical-align: bottom;
+}
+
+.imgedit-menu {
+ margin: 0 0 12px;
+ min-width: 300px;
+}
+
+.imgedit-menu div {
+ float: right;
+ width: 32px;
+ border: 1px solid #d5d5d5;
+ background: #f1f1f1;
+ margin: 0 0 0 8px;
+ height: 32px;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-align: center;
+ line-height: 28px;
+ color: #777;
+ cursor: pointer;
+}
+
+.imgedit-menu div:before {
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ vertical-align: middle;
+}
+
+.imgedit-menu div:hover {
+ border-color: #c1c1c1;
+ background-color: #eaeaea;
+ color: #333;
+}
+
+.imgedit-menu div.disabled {
+ border-color: #ccc;
+ background-color: #ddd;
+ color: #777;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+ cursor: default;
+}
+
+.imgedit-crop:before {
+ content:'\f165';
+}
+
+.imgedit-rleft:before {
+ content:'\f166';
+}
+
+.imgedit-rright:before {
+ content:'\f167';
+}
+
+.imgedit-flipv:before {
+ content:'\f168';
+}
+
+.imgedit-fliph:before {
+ content:'\f169';
+}
+
+.imgedit-undo:before {
+ content:'\f171';
+}
+
+.imgedit-redo:before {
+ content:'\f172';
+}
+
+.imgedit-crop-wrap {
+ position: relative;
+}
+
+.imgedit-crop {
+ margin: 0 0 0 8px;
+}
+
+.imgedit-rleft {
+ margin: 0 3px;
+}
+
+.imgedit-rright {
+ margin: 0 3px 0 8px;
+}
+
+.imgedit-flipv {
+ margin: 0 3px;
+}
+
+.imgedit-fliph {
+ margin: 0 3px 0 8px;
+}
+
+.imgedit-undo {
+ margin: 0 3px;
+}
+
+.imgedit-redo {
+ margin: 0 3px 0 8px;
+}
+
+.imgedit-applyto img {
+ margin: 0 0 0 8px;
+}
+
+.imgedit-group-top {
+ margin: 5px 0;
+}
+
+#poststuff .imgedit-group-top h3 {
+ padding: 0;
+}
+
+.imgedit-group-top h3 a {
+ text-decoration: none;
+}
+
+.imgedit-applyto .imgedit-label {
+ padding: 2px 0 0;
+ display: block;
+}
+
+.imgedit-help {
+ display: none;
+ font-style: italic;
+}
+
+a.imgedit-help-toggle {
+ text-decoration: none;
+}
+
+.form-table td.imgedit-response {
+ padding: 0;
+}
+
+.imgedit-submit {
+ margin: 8px 0;
+}
+
+.imgedit-submit-btn {
+ margin-right: 20px;
+}
+
+.imgedit-wrap .nowrap {
+ white-space: nowrap;
+}
+
+span.imgedit-scale-warn {
+ color: red;
+ font-size: 20px;
+ font-style: normal;
+ visibility: hidden;
+ vertical-align: middle;
+}
+
+.imgedit-group {
+ margin-bottom: 8px;
+ padding: 2px 10px;
+}
+
+audio, video {
+ display: inline-block;
+ max-width: 100%;
+}
+
+.mejs-container {
+ width: 100%;
+ max-width: 100%;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ .imgedit-wait {
+ background-image: url(../images/spinner-2x.gif);
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ .wp_attachment_details label[for="content"] {
+ font-size: 14px;
+ line-height: 1.5em;
+ }
+
+ .media-upload-form .media-item.error,
+ .media-upload-form .media-item .error {
+ font-size: 13px;
+ line-height: 1.5;
+ }
+
+ .media-upload-form .media-item.error {
+ padding: 1px 10px;
+ }
+
+ .media-upload-form .media-item .error {
+ padding: 10px 12px 10px 0;
+ }
+}
+
+/**
+ * Media queries for media grid.
+ */
+
+@media only screen and (max-width: 1120px) {
+ /* override for media-views.css */
+ #wp-media-grid .wp-filter .attachment-filters {
+ max-width: 100%;
+ }
+}
+
+@media only screen and ( max-width: 782px ) {
+ .media-frame.mode-select .attachments-browser.fixed .media-toolbar {
+ top: 46px;
+ left: 10px;
+ }
+}
+
+@media only screen and (max-width: 600px) {
+ .media-frame.mode-select .attachments-browser.fixed .media-toolbar {
+ top: 0;
+ }
+}
+
+@media only screen and (max-width: 480px) {
+ .edit-attachment-frame .media-frame-title {
+ left: 110px;
+ }
+
+ .upload-php .media-modal-close,
+ .edit-attachment-frame .edit-media-header .left,
+ .edit-attachment-frame .edit-media-header .right {
+ width: 40px;
+ height: 40px;
+ }
+
+ .upload-php .media-modal-close .media-modal-icon {
+ margin: 9px 10px;
+ }
+
+ .edit-attachment-frame .edit-media-header .right:before,
+ .edit-attachment-frame .edit-media-header .left:before {
+ line-height: 40px !important;
+ }
+
+ .edit-attachment-frame .edit-media-header .left {
+ left: 82px;
+ }
+
+ .edit-attachment-frame .edit-media-header .right {
+ left: 41px;
+ }
+
+ .edit-attachment-frame .media-frame-content {
+ top: 40px;
+ }
+
+ .edit-attachment-frame .attachment-media-view {
+ float: none;
+ height: auto;
+ width: 100%;
+ }
+
+ .edit-attachment-frame .attachment-info {
+ height: auto;
+ width: 100%;
+ }
+}
+
+@media only screen and (max-width: 640px), screen and (max-height: 400px) {
+ .upload-php .mode-grid .media-sidebar{
+ max-width: 100%;
+ }
+}
diff --git a/wp-admin/css/media.css b/wp-admin/css/media.css
new file mode 100644
index 0000000..c01b71f
--- /dev/null
+++ b/wp-admin/css/media.css
@@ -0,0 +1,1197 @@
+/*------------------------------------------------------------------------------
+ 14.0 - Media Screen
+------------------------------------------------------------------------------*/
+
+.media-item .describe {
+ border-collapse: collapse;
+ width: 100%;
+ border-top: 1px solid #dfdfdf;
+ clear: both;
+ cursor: default;
+}
+
+.media-item.media-blank .describe {
+ border: 0;
+}
+
+.media-item .describe th {
+ vertical-align: top;
+ text-align: left;
+ padding: 5px 10px 10px;
+ width: 140px;
+}
+
+.media-item .describe .align th {
+ padding-top: 0;
+}
+
+.media-item .media-item-info tr {
+ background-color: transparent;
+}
+
+.media-item .describe td {
+ padding: 0 8px 8px 0;
+ vertical-align: top;
+}
+
+.media-item thead.media-item-info td {
+ padding: 4px 10px 0;
+}
+
+.media-item .media-item-info .A1B1 {
+ padding: 0 0 0 10px;
+}
+
+.media-item td.savesend {
+ padding-bottom: 15px;
+}
+
+.media-item .thumbnail {
+ max-height: 128px;
+ max-width: 128px;
+}
+
+#wpbody-content #async-upload-wrap a {
+ display: none;
+}
+
+.media-upload-form {
+ margin-top: 20px;
+}
+
+.media-upload-form td label {
+ margin-right: 6px;
+ margin-left: 2px;
+}
+
+.media-upload-form .align .field label {
+ display: inline;
+ padding: 0 0 0 23px;
+ margin: 0 1em 0 3px;
+ font-weight: 600;
+}
+
+.media-upload-form tr.image-size label {
+ margin: 0 0 0 5px;
+ font-weight: 600;
+}
+
+.media-upload-form th.label label {
+ font-weight: 600;
+ margin: 0.5em;
+ font-size: 13px;
+}
+
+.media-upload-form th.label label span {
+ padding: 0 5px;
+}
+
+.media-item .describe input[type="text"],
+.media-item .describe textarea {
+ width: 460px;
+}
+
+.media-item .describe p.help {
+ margin: 0;
+ padding: 0 0 0 5px;
+}
+
+.media-item .edit-attachment,
+.describe-toggle-on,
+.describe-toggle-off {
+ display: block;
+ line-height: 36px;
+ float: right;
+ margin-right: 10px;
+}
+
+.media-item .describe-toggle-off,
+.media-item.open .describe-toggle-on {
+ display: none;
+}
+
+.media-item.open .describe-toggle-off {
+ display: block;
+}
+
+.media-upload-form .media-item {
+ min-height: 36px;
+ margin-bottom: 1px;
+ position: relative;
+ width: 100%;
+ background: #fff;
+}
+
+.media-upload-form .media-item,
+.media-upload-form .media-item .error {
+ -webkit-box-shadow: 0 1px 0 #dfdfdf;
+ box-shadow: 0 1px 0 #dfdfdf;
+}
+
+#media-items:empty {
+ border: 0 none;
+}
+
+.media-item .filename {
+ line-height: 36px;
+ overflow: hidden;
+ margin-left: 6px;
+}
+
+.media-item .pinkynail {
+ float: left;
+ margin: 2px 10px 0 3px;
+ max-width: 40px;
+ max-height: 32px;
+}
+
+.media-item .startopen,
+.media-item .startclosed {
+ display: none;
+}
+
+.media-item .original {
+ position: relative;
+ height: 34px;
+}
+
+.media-item .progress {
+ float: right;
+ height: 22px;
+ margin: 7px 6px;
+ width: 200px;
+ line-height: 2em;
+ padding: 0;
+ overflow: hidden;
+ -webkit-border-radius: 22px;
+ border-radius: 22px;
+ background: #ddd;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
+ box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
+}
+
+.media-item .bar {
+ z-index: 9;
+ width: 0;
+ height: 100%;
+ margin-top: -22px;
+ -webkit-border-radius: 22px;
+ border-radius: 22px;
+ background-color: #0074a2;
+ -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.3);
+ box-shadow: inset 0 0 2px rgba(0,0,0,0.3);
+}
+
+.media-item .progress .percent {
+ z-index: 10;
+ position: relative;
+ width: 200px;
+ padding: 0;
+ color: #fff;
+ text-align: center;
+ line-height: 22px;
+ font-weight: 400;
+ text-shadow: 0 1px 2px rgba(0,0,0,0.2);
+}
+
+.upload-php .fixed .column-parent {
+ width: 15%;
+}
+
+.js .html-uploader #plupload-upload-ui {
+ display: none;
+}
+
+.js .html-uploader #html-upload-ui {
+ display: block;
+}
+
+.media-upload-form .media-item.error,
+.media-upload-form .media-item .error {
+ width: auto;
+ margin: 0 0 1px 0;
+}
+
+.media-upload-form .media-item .error {
+ padding: 10px 0 10px 14px;
+}
+
+.media-item .error-div a.dismiss {
+ display: block;
+ float: right;
+ margin: 0 10px 0 15px;
+}
+
+/*------------------------------------------------------------------------------
+ 14.1 - Media Library
+------------------------------------------------------------------------------*/
+
+.find-box {
+ background-color: #fff;
+ -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
+ box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 );
+ width: 600px;
+ overflow: hidden;
+ margin-left: -300px;
+ position: fixed;
+ top: 30px;
+ bottom: 30px;
+ left: 50%;
+ z-index: 100105;
+}
+
+.find-box-head {
+ background: #fcfcfc;
+ border-bottom: 1px solid #dfdfdf;
+ height: 36px;
+ font-size: 18px;
+ font-weight: 600;
+ line-height: 36px;
+ padding: 0 36px 0 16px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+}
+
+.find-box-inside {
+ overflow: auto;
+ padding: 16px;
+ background-color: #fff;
+ position: absolute;
+ top: 37px;
+ bottom: 45px;
+ overflow-y: scroll;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.find-box-search {
+ padding-bottom: 16px;
+}
+
+.find-box-search .spinner {
+ float: none;
+ left: 110px;
+ position: absolute;
+ top: 2px;
+}
+
+.find-box-search,
+#find-posts-response {
+ position: relative; /* RTL fix, #WP28010 */
+}
+
+#find-posts-input,
+#find-posts-search {
+ float: left;
+}
+
+#find-posts-input {
+ width: 140px;
+ height: 28px;
+ margin: 0 4px 0 0;
+}
+
+.widefat .found-radio {
+ padding-right: 0;
+ width: 16px;
+}
+
+#find-posts-close {
+ width: 36px;
+ height: 36px;
+ position: absolute;
+ top: 0;
+ right: 0;
+ cursor: pointer;
+ text-align: center;
+ color: #666;
+}
+
+#find-posts-close:hover {
+ color: #2ea2cc;
+}
+
+#find-posts-close:before {
+ font: normal 20px/36px 'dashicons';
+ vertical-align: top;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: '\f158';
+}
+
+.find-box-buttons {
+ padding: 8px 16px;
+ background: #fcfcfc;
+ border-top: 1px solid #dfdfdf;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+
+@media screen and ( max-width: 782px ) {
+ .find-box-inside {
+ bottom: 57px;
+ }
+}
+
+@media screen and ( max-width: 660px ) {
+
+ .find-box {
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ margin: 0;
+ width: 100%;
+ }
+
+}
+
+.ui-find-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: #000;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ z-index: 100100;
+}
+
+ul#dismissed-updates {
+ display: none;
+}
+
+form.upgrade {
+ margin-top: 8px;
+}
+
+form.upgrade .hint {
+ font-style: italic;
+ font-size: 85%;
+ margin: -0.5em 0 2em 0;
+}
+
+#poststuff .inside .the-tagcloud {
+ margin: 5px 0 10px;
+ padding: 8px;
+ border: 1px solid #ddd;
+ line-height: 1.8em;
+ word-spacing: 3px;
+ -webkit-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.drag-drop #drag-drop-area {
+ border: 4px dashed #bbb;
+ height: 200px;
+}
+
+.drag-drop .drag-drop-inside {
+ margin: 70px auto 0;
+ width: 250px;
+}
+
+.drag-drop-inside p {
+ color: #aaa;
+ font-size: 14px;
+ margin: 5px 0;
+ display: none;
+}
+
+.drag-drop .drag-drop-inside p {
+ text-align: center;
+}
+
+.drag-drop-inside p.drag-drop-info {
+ font-size: 20px;
+}
+
+.drag-drop .drag-drop-inside p,
+.drag-drop-inside p.drag-drop-buttons {
+ display: block;
+}
+
+/*
+#drag-drop-area:-moz-drag-over {
+ border-color: #83b4d8;
+}
+border color while dragging a file over the uploader drop area */
+.drag-drop.drag-over #drag-drop-area {
+ border-color: #83b4d8;
+}
+
+#plupload-upload-ui {
+ position: relative;
+}
+
+/**
+ * Media Library grid view
+ */
+
+.media-frame.mode-grid,
+.media-frame.mode-grid .media-frame-content,
+.media-frame.mode-grid .attachments-browser .attachments,
+.media-frame.mode-grid .uploader-inline-content {
+ position: static;
+}
+
+/* Regions we don't use at all */
+.media-frame.mode-grid .media-frame-title,
+.media-frame.mode-grid .media-frame-router,
+.media-frame.mode-grid .media-frame-menu {
+ display: none;
+}
+
+.media-frame.mode-grid .media-frame-content {
+ background-color: transparent;
+ border: none;
+}
+
+.upload-php .mode-grid .media-sidebar {
+ position: relative;
+ width: auto;
+ margin-bottom: 16px;
+ padding: 0 16px;
+ border: 1px solid #c00;
+ background-color: #feebe8;
+}
+
+.upload-php .mode-grid .hide-sidebar .media-sidebar {
+ display: none;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status {
+ border-bottom: none;
+ padding-bottom: 0;
+ max-width: 100%;
+}
+
+.upload-php .mode-grid .media-sidebar .upload-error {
+ margin: 20px 0;
+ padding: 0;
+ border: none;
+ background: none;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors {
+ font-size: 0;
+ top: -12px;
+ right: -10px;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:before {
+ content: "\f158";
+ font: normal 20px/1 dashicons;
+ color: #666;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before,
+.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before {
+ color: #2ea2cc;
+}
+
+.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h3 {
+ display: none;
+}
+
+.media-frame.mode-grid .uploader-inline {
+ position: relative;
+ top: auto;
+ right: auto;
+ left: auto;
+ bottom: auto;
+ padding-top: 0;
+ margin-top: 0;
+ border: 4px dashed #bbb;
+}
+
+.media-frame.mode-select .attachments-browser.fixed .attachments {
+ position: relative;
+ top: 94px; /* prevent jumping up when the toolbar becomes fixed */
+ padding-bottom: 94px; /* offset for above so the bottom doesn't get cut off */
+}
+
+.media-frame.mode-grid .attachment:focus,
+.media-frame.mode-grid .selected.attachment:focus,
+.media-frame.mode-grid .attachment.details:focus {
+ -webkit-box-shadow:
+ inset 0 0 2px 3px #f1f1f1,
+ inset 0 0 0 7px #5b9dd9;
+ box-shadow:
+ inset 0 0 2px 3px #f1f1f1,
+ inset 0 0 0 7px #5b9dd9;
+ outline: none;
+}
+
+.media-frame.mode-grid .selected.attachment {
+ -webkit-box-shadow:
+ inset 0 0 0 5px #f1f1f1,
+ inset 0 0 0 7px #ccc;
+ box-shadow:
+ inset 0 0 0 5px #f1f1f1,
+ inset 0 0 0 7px #ccc;
+}
+
+.media-frame.mode-grid .attachment.details {
+ -webkit-box-shadow:
+ inset 0 0 0 3px #f1f1f1,
+ inset 0 0 0 7px #1e8cbe;
+ box-shadow:
+ inset 0 0 0 3px #f1f1f1,
+ inset 0 0 0 7px #1e8cbe;
+}
+
+.media-frame.mode-grid.mode-select .attachment .thumbnail {
+ opacity: 0.65;
+}
+
+.media-frame.mode-select .attachment.selected .thumbnail {
+ opacity: 1;
+}
+
+.media-frame.mode-grid .media-toolbar {
+ margin-bottom: 15px;
+ height: auto;
+}
+
+.media-frame.mode-grid .media-toolbar select {
+ margin: 0 10px 0 0;
+ font-size: 14px;
+}
+
+.media-frame.mode-grid .media-toolbar-secondary > .media-button {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.media-frame.mode-grid .attachments-browser .bulk-select {
+ display: inline-block;
+ margin: 0 10px 0 0;
+}
+
+.media-frame.mode-grid .search {
+ margin-top: 0;
+}
+
+.media-frame.mode-grid .spinner {
+ margin-top: 15px;
+}
+
+.attachments-browser .media-toolbar-secondary > .media-button {
+ margin-right: 10px;
+}
+
+.media-frame.mode-select .attachments-browser.fixed .media-toolbar {
+ position: fixed;
+ top: 32px;
+ left: auto;
+ right: 20px;
+ margin-top: 0;
+}
+
+.media-frame.mode-grid .attachments-browser {
+ padding: 0;
+}
+
+.media-frame.mode-grid .attachments-browser .attachments {
+ padding: 2px;
+}
+
+.media-frame.mode-grid .attachments-browser .no-media {
+ color: #999;
+ font-size: 18px;
+ font-style: normal;
+ margin: 0;
+ padding: 100px 0 0;
+ text-align: center;
+}
+
+/**
+ * Attachment details modal
+ */
+
+.edit-attachment-frame {
+ display: block;
+ height: 100%;
+ width: 100%;
+}
+
+.edit-attachment-frame .edit-media-header {
+ overflow: hidden;
+}
+
+.upload-php .media-modal-close .media-modal-icon:before {
+ content: '\f335';
+ font-size: 22px;
+}
+
+.upload-php .media-modal-close .media-modal-icon {
+ margin: 14px;
+ width: 22px;
+}
+
+.upload-php .media-modal-close,
+.edit-attachment-frame .edit-media-header .left,
+.edit-attachment-frame .edit-media-header .right {
+ cursor: pointer;
+ color: #777;
+ background-color: transparent;
+ height: 50px;
+ width: 50px;
+ padding: 0;
+ position: absolute;
+ text-align: center;
+ border: 0;
+ border-left: 1px solid #ddd;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.upload-php .media-modal-close {
+ top: 0;
+ right: 0;
+}
+
+.edit-attachment-frame .edit-media-header .left {
+ right: 102px;
+}
+
+.edit-attachment-frame .edit-media-header .right {
+ right: 51px;
+}
+
+.edit-attachment-frame .media-frame-title {
+ left: 0;
+ right: 150px; /* leave space for prev/next/close */
+}
+
+.edit-attachment-frame .edit-media-header .right:before,
+.edit-attachment-frame .edit-media-header .left:before {
+ font: normal 20px/50px 'dashicons' !important;
+ display: inline;
+ font-weight: 300;
+}
+
+.upload-php .media-modal-close:hover,
+.upload-php .media-modal-close:focus,
+.edit-attachment-frame .edit-media-header .left:hover,
+.edit-attachment-frame .edit-media-header .right:hover,
+.edit-attachment-frame .edit-media-header .left:focus,
+.edit-attachment-frame .edit-media-header .right:focus {
+ background: #ddd;
+ border-color: #ccc;
+ color: #000;
+ outline: none;
+}
+
+.upload-php .media-modal-close:focus .media-modal-icon:before,
+.upload-php .media-modal-close:hover .media-modal-icon:before {
+ color: #000;
+}
+
+.edit-attachment-frame .edit-media-header .left:before,
+.rtl .edit-attachment-frame .edit-media-header .right:before {
+ content: '\f341';
+}
+
+.edit-attachment-frame .edit-media-header .right:before,
+.rtl .edit-attachment-frame .edit-media-header .left:before {
+ content: '\f345';
+}
+
+.edit-attachment-frame .edit-media-header .left.disabled,
+.edit-attachment-frame .edit-media-header .right.disabled,
+.edit-attachment-frame .edit-media-header .left.disabled:hover,
+.edit-attachment-frame .edit-media-header .right.disabled:hover {
+ color: #ccc;
+ background: inherit;
+ cursor: default;
+ pointer-events: none;
+}
+
+.edit-attachment-frame .media-frame-content,
+.edit-attachment-frame .media-frame-router {
+ left: 0;
+}
+
+.edit-attachment-frame .media-frame-content {
+ border-bottom: none;
+ bottom: 0;
+ top: 50px;
+}
+
+.edit-attachment-frame .attachment-details {
+ position: absolute;
+ overflow: auto;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ -webkit-box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1);
+}
+
+.edit-attachment-frame .attachment-media-view {
+ float: left;
+ width: 65%;
+ height: 100%;
+}
+
+.edit-attachment-frame .attachment-media-view .thumbnail {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 16px;
+ height: 100%;
+}
+
+.edit-attachment-frame .attachment-media-view .details-image {
+ display: block;
+ margin-bottom: 16px;
+ max-width: 100%;
+ max-height: 90%;
+ max-height: -webkit-calc( 100% - 42px );
+ max-height: calc( 100% - 42px ); /* leave space for actions underneath */
+}
+
+.edit-attachment-frame .wp-media-wrapper {
+ margin-bottom: 12px;
+}
+
+.edit-attachment-frame input,
+.edit-attachment-frame textarea {
+ padding: 6px 8px;
+ line-height: 16px;
+}
+
+.edit-attachment-frame .attachment-info {
+ overflow: auto;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin-bottom: 0;
+ padding: 12px 16px 0;
+ width: 35%;
+ height: 100%;
+ -webkit-box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0px 4px 4px -4px rgba(0, 0, 0, 0.1);
+ border-bottom: 0;
+ border-left: 1px solid #ddd;
+ background: #f3f3f3;
+}
+
+.edit-attachment-frame .attachment-info .details,
+.edit-attachment-frame .attachment-info .settings {
+ position: relative; /* RTL fix, #WP29352 */
+ overflow: hidden;
+ float: none;
+ margin-bottom: 15px;
+ padding-bottom: 15px;
+ border-bottom: 1px solid #ddd;
+}
+
+.edit-attachment-frame .attachment-info .filename {
+ font-weight: normal;
+ color: #666;
+}
+
+.edit-attachment-frame .attachment-info .thumbnail {
+ margin-bottom: 12px;
+}
+
+.attachment-info .actions {
+ margin-bottom: 16px;
+}
+
+.attachment-info .actions a {
+ display: inline;
+ text-decoration: none;
+}
+
+
+/*------------------------------------------------------------------------------
+ 14.2 - Image Editor
+------------------------------------------------------------------------------*/
+
+.wp_attachment_details label[for="content"] {
+ font-size: 13px;
+ line-height: 1.5;
+ margin: 1em 0;
+}
+
+.wp_attachment_details #attachment_caption {
+ height: 4em;
+}
+
+.describe .image-editor {
+ vertical-align: top;
+}
+
+.imgedit-wrap {
+ position: relative;
+}
+
+.imgedit-settings p {
+ margin: 8px 0 0;
+}
+
+.describe .imgedit-wrap .imgedit-settings {
+ padding: 0 5px;
+}
+
+.wp_attachment_holder div.updated {
+ margin-top: 0;
+}
+
+.wp_attachment_holder .imgedit-wrap > div {
+ height: auto;
+ overflow: hidden;
+}
+
+.wp_attachment_holder .imgedit-wrap .imgedit-panel-content {
+ padding-right: 16px;
+ width: auto;
+ overflow: hidden;
+}
+
+.wp_attachment_holder .imgedit-wrap .imgedit-settings {
+ float: right;
+ width: 250px;
+}
+
+.imgedit-settings input {
+ margin-top: 0;
+ vertical-align: middle;
+}
+
+.imgedit-wait {
+ position: absolute;
+ top: 0;
+ background: #fff url(../images/spinner.gif) no-repeat center;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+ width: 100%;
+ height: 500px;
+ display: none;
+}
+
+.no-float {
+ float: none;
+}
+
+.media-disabled,
+.imgedit-settings .disabled {
+ color: grey;
+}
+
+.wp_attachment_image,
+.A1B1 {
+ overflow: hidden;
+}
+
+.wp_attachment_image .button,
+.A1B1 .button {
+ float: left;
+}
+
+.no-js .wp_attachment_image .button {
+ display: none;
+}
+
+.wp_attachment_image .spinner,
+.A1B1 .spinner {
+ float: left;
+ padding: 0 0 4px 0;
+ vertical-align: bottom;
+}
+
+.imgedit-menu {
+ margin: 0 0 12px;
+ min-width: 300px;
+}
+
+.imgedit-menu div {
+ float: left;
+ width: 32px;
+ border: 1px solid #d5d5d5;
+ background: #f1f1f1;
+ margin: 0 8px 0 0;
+ height: 32px;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-align: center;
+ line-height: 28px;
+ color: #777;
+ cursor: pointer;
+}
+
+.imgedit-menu div:before {
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ vertical-align: middle;
+}
+
+.imgedit-menu div:hover {
+ border-color: #c1c1c1;
+ background-color: #eaeaea;
+ color: #333;
+}
+
+.imgedit-menu div.disabled {
+ border-color: #ccc;
+ background-color: #ddd;
+ color: #777;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+ cursor: default;
+}
+
+.imgedit-crop:before {
+ content:'\f165';
+}
+
+.imgedit-rleft:before {
+ content:'\f166';
+}
+
+.imgedit-rright:before {
+ content:'\f167';
+}
+
+.imgedit-flipv:before {
+ content:'\f168';
+}
+
+.imgedit-fliph:before {
+ content:'\f169';
+}
+
+.imgedit-undo:before {
+ content:'\f171';
+}
+
+.imgedit-redo:before {
+ content:'\f172';
+}
+
+.imgedit-crop-wrap {
+ position: relative;
+}
+
+.imgedit-crop {
+ margin: 0 8px 0 0;
+}
+
+.imgedit-rleft {
+ margin: 0 3px;
+}
+
+.imgedit-rright {
+ margin: 0 8px 0 3px;
+}
+
+.imgedit-flipv {
+ margin: 0 3px;
+}
+
+.imgedit-fliph {
+ margin: 0 8px 0 3px;
+}
+
+.imgedit-undo {
+ margin: 0 3px;
+}
+
+.imgedit-redo {
+ margin: 0 8px 0 3px;
+}
+
+.imgedit-applyto img {
+ margin: 0 8px 0 0;
+}
+
+.imgedit-group-top {
+ margin: 5px 0;
+}
+
+#poststuff .imgedit-group-top h3 {
+ padding: 0;
+}
+
+.imgedit-group-top h3 a {
+ text-decoration: none;
+}
+
+.imgedit-applyto .imgedit-label {
+ padding: 2px 0 0;
+ display: block;
+}
+
+.imgedit-help {
+ display: none;
+ font-style: italic;
+}
+
+a.imgedit-help-toggle {
+ text-decoration: none;
+}
+
+.form-table td.imgedit-response {
+ padding: 0;
+}
+
+.imgedit-submit {
+ margin: 8px 0;
+}
+
+.imgedit-submit-btn {
+ margin-left: 20px;
+}
+
+.imgedit-wrap .nowrap {
+ white-space: nowrap;
+}
+
+span.imgedit-scale-warn {
+ color: red;
+ font-size: 20px;
+ font-style: normal;
+ visibility: hidden;
+ vertical-align: middle;
+}
+
+.imgedit-group {
+ margin-bottom: 8px;
+ padding: 2px 10px;
+}
+
+audio, video {
+ display: inline-block;
+ max-width: 100%;
+}
+
+.mejs-container {
+ width: 100%;
+ max-width: 100%;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ .imgedit-wait {
+ background-image: url(../images/spinner-2x.gif);
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ .wp_attachment_details label[for="content"] {
+ font-size: 14px;
+ line-height: 1.5em;
+ }
+
+ .media-upload-form .media-item.error,
+ .media-upload-form .media-item .error {
+ font-size: 13px;
+ line-height: 1.5;
+ }
+
+ .media-upload-form .media-item.error {
+ padding: 1px 10px;
+ }
+
+ .media-upload-form .media-item .error {
+ padding: 10px 0 10px 12px;
+ }
+}
+
+/**
+ * Media queries for media grid.
+ */
+
+@media only screen and (max-width: 1120px) {
+ /* override for media-views.css */
+ #wp-media-grid .wp-filter .attachment-filters {
+ max-width: 100%;
+ }
+}
+
+@media only screen and ( max-width: 782px ) {
+ .media-frame.mode-select .attachments-browser.fixed .media-toolbar {
+ top: 46px;
+ right: 10px;
+ }
+}
+
+@media only screen and (max-width: 600px) {
+ .media-frame.mode-select .attachments-browser.fixed .media-toolbar {
+ top: 0;
+ }
+}
+
+@media only screen and (max-width: 480px) {
+ .edit-attachment-frame .media-frame-title {
+ right: 110px;
+ }
+
+ .upload-php .media-modal-close,
+ .edit-attachment-frame .edit-media-header .left,
+ .edit-attachment-frame .edit-media-header .right {
+ width: 40px;
+ height: 40px;
+ }
+
+ .upload-php .media-modal-close .media-modal-icon {
+ margin: 9px 10px;
+ }
+
+ .edit-attachment-frame .edit-media-header .right:before,
+ .edit-attachment-frame .edit-media-header .left:before {
+ line-height: 40px !important;
+ }
+
+ .edit-attachment-frame .edit-media-header .left {
+ right: 82px;
+ }
+
+ .edit-attachment-frame .edit-media-header .right {
+ right: 41px;
+ }
+
+ .edit-attachment-frame .media-frame-content {
+ top: 40px;
+ }
+
+ .edit-attachment-frame .attachment-media-view {
+ float: none;
+ height: auto;
+ width: 100%;
+ }
+
+ .edit-attachment-frame .attachment-info {
+ height: auto;
+ width: 100%;
+ }
+}
+
+@media only screen and (max-width: 640px), screen and (max-height: 400px) {
+ .upload-php .mode-grid .media-sidebar{
+ max-width: 100%;
+ }
+}
diff --git a/wp-admin/css/nav-menus-rtl.css b/wp-admin/css/nav-menus-rtl.css
new file mode 100644
index 0000000..40bd5f9
--- /dev/null
+++ b/wp-admin/css/nav-menus-rtl.css
@@ -0,0 +1,858 @@
+/* nav-menu */
+
+/* @todo: determine if this is truly for nav menus only */
+.no-js #message {
+ display: block;
+}
+
+ul.add-menu-item-tabs li {
+ padding: 3px 8px 3px 5px;
+}
+
+.accordion-section ul.category-tabs,
+.accordion-section ul.add-menu-item-tabs,
+.accordion-section ul.wp-tab-bar {
+ margin: 0;
+}
+
+.accordion-section .categorychecklist {
+ margin: 13px 0;
+}
+
+#nav-menu-meta .accordion-section-content {
+ padding: 18px 13px;
+}
+
+#nav-menu-meta .button-controls {
+ margin-bottom: 0;
+}
+
+#nav-menus-frame {
+ margin-right: 300px;
+ margin-top: 23px;
+}
+
+#wpbody-content #menu-settings-column {
+ display:inline;
+ width:281px;
+ margin-right: -300px;
+ clear: both;
+ float: right;
+ padding-top: 0;
+}
+
+#menu-settings-column .inside {
+ clear: both;
+ margin: 10px 0 0;
+}
+
+.metabox-holder-disabled .postbox,
+.metabox-holder-disabled .accordion-section-content,
+.metabox-holder-disabled .accordion-section-title {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.metabox-holder-disabled .button-controls .select-all {
+ display: none;
+}
+
+#wpbody {
+ position: relative;
+}
+
+.blank-slate .menu-name {
+ height: 2em;
+}
+
+.blank-slate .menu-settings {
+ border: none;
+ margin-top: 0;
+ padding-top: 0;
+ overflow: hidden;
+}
+
+.is-submenu {
+ color: #999;
+ font-style: italic;
+ font-weight: normal;
+ margin-right: 4px;
+}
+
+.manage-menus {
+ margin-top: 23px;
+ padding: 10px;
+ overflow: hidden;
+ background: #fbfbfb;
+}
+
+.manage-menus select {
+ float: right;
+ margin-left: 6px;
+}
+
+.manage-menus .selected-menu {
+ float: right;
+ margin: 5px 0 0 6px;
+}
+
+.manage-menus .submit-btn {
+ float: right;
+ margin-top: 1px;
+}
+
+.menu-edit p {
+ margin: .3em 0 .6em;
+}
+
+.menu-edit #post-body-content h3 {
+ margin: 1em 0 10px;
+}
+
+.menu-settings {
+ border-top: 1px solid #eee;
+ margin-top: 2em;
+}
+
+.menu-settings dl {
+ margin: 0 0 10px;
+ overflow: hidden;
+ padding-right: 18%;
+}
+
+.menu-settings dd {
+ float: right;
+ margin: 0;
+ width: 100%;
+}
+
+.menu-settings dt {
+ float: right;
+ clear: both;
+ width: 21.951%;
+ padding: 3px 0 0;
+ margin-right: -21.951%;
+}
+
+.menu-settings label {
+ vertical-align: baseline;
+}
+
+.menu-edit .checkbox-input {
+ margin-top: 4px;
+}
+
+.theme-location-set {
+ color: #999;
+ font-size: 11px;
+}
+
+/* Menu Container */
+#menu-management-liquid {
+ float: right;
+ min-width: 100%;
+ margin-top: 3px;
+}
+
+#menu-management {
+ position: relative;
+ margin-left: 20px;
+ margin-top: -3px;
+ width: 100%;
+ background: #f5f5f5;
+}
+
+#menu-management .menu-edit {
+ margin-bottom: 20px;
+}
+
+.nav-menus-php #post-body {
+ padding: 0 10px 10px;
+ border-top: 1px solid #fff;
+ border-bottom: 1px solid #dfdfdf;
+ background: #fff;
+}
+
+#nav-menu-header,
+#nav-menu-footer {
+ padding: 0 10px;
+}
+
+#nav-menu-header {
+ border-bottom: 1px solid #dfdfdf;
+ margin-bottom: 0;
+}
+
+#nav-menu-header .menu-name-label {
+ margin-top: 4px;
+}
+
+.nav-menus-php #post-body div.updated,
+.nav-menus-php #post-body div.error {
+ margin: 0;
+}
+
+.nav-menus-php #post-body-content {
+ position: relative;
+ float: none;
+}
+
+#menu-management .menu-add-new abbr {
+ font-weight:600;
+}
+
+#select-nav-menu-container {
+ text-align: left;
+ padding: 0 10px 3px 10px;
+ margin-bottom: 5px;
+}
+
+#select-nav-menu {
+ width: 100px;
+ display: inline;
+}
+
+#menu-name-label {
+ margin-top: -2px;
+}
+
+.widefat td.menu-location-menus {
+ padding-bottom: 5px;
+}
+
+.menu-location-menus select {
+ float: right;
+}
+
+#locations-nav-menu-wrapper {
+ padding: 5px 0;
+}
+
+.locations-nav-menu-select select {
+ float: right;
+ width: 160px;
+ margin-left: 5px;
+}
+
+.locations-row-links {
+ float: right;
+ margin: 6px 6px 0 0;
+}
+
+.locations-edit-menu-link,
+.locations-add-menu-link {
+ margin: 0 3px;
+}
+
+.locations-edit-menu-link {
+ padding-left: 3px;
+ border-left: 1px solid #ccc;
+}
+
+#wpbody .open-label {
+ display: block;
+ float:right;
+}
+
+#wpbody .open-label span {
+ padding-left: 10px;
+}
+
+.js .input-with-default-title {
+ color: #aaa;
+ font-style: italic;
+}
+
+#menu-management .inside {
+ padding: 0 10px;
+}
+
+/* Add Menu Item Boxes */
+.postbox .howto input,
+.accordion-container .howto input {
+ width: 180px;
+ float: left;
+}
+
+.accordion-container .outer-border {
+ margin: 0;
+}
+
+.customlinkdiv .howto input {
+ width: 180px;
+}
+
+.customlinkdiv p {
+ margin-top: 0
+}
+
+#nav-menu-theme-locations .howto select {
+ width: 100%;
+}
+
+#nav-menu-theme-locations .button-controls {
+ text-align: left;
+}
+
+.add-menu-item-view-all {
+ height: 400px;
+}
+
+/* Button Primary Actions */
+#menu-container .submit {
+ margin: 0 0 10px;
+ padding: 0;
+}
+
+.nav-menus-php .add-new-menu-action {
+ float: right;
+ margin: 6px 6px 0 0;
+ line-height: 15px;
+}
+
+.nav-menus-php .meta-sep,
+.nav-menus-php .submitdelete,
+.nav-menus-php .submitcancel {
+ display: block;
+ float: right;
+ margin: 6px 0;
+ line-height: 15px;
+}
+
+.meta-sep {
+ padding: 0 2px;
+}
+
+/* @todo: is this actually used? */
+#cancel-save {
+ text-decoration: underline;
+ font-size: 12px;
+ margin-right: 20px;
+ margin-top: 5px;
+}
+
+.button.right, .button-secondary.right, .button-primary.right {
+ float: left;
+}
+
+/* Button Secondary Actions */
+.list-controls {
+ float: right;
+ margin-top: 5px;
+}
+
+.add-to-menu {
+ float: left;
+}
+
+.postbox .spinner {
+ display: none;
+ vertical-align: middle;
+}
+
+.button-controls {
+ clear:both;
+ margin: 10px 0;
+}
+
+.show-all,
+.hide-all {
+ cursor: pointer;
+}
+
+.hide-all {
+ display: none;
+}
+
+/* Create Menu */
+#menu-name {
+ width: 270px;
+}
+
+#manage-menu .inside {
+ padding: 0px 0px;
+}
+
+/* Custom Links */
+#available-links dt {
+ display: block;
+}
+
+#add-custom-link .howto {
+ font-size: 12px;
+}
+
+#add-custom-link label span {
+ display: block;
+ float: right;
+ margin-top: 5px;
+ padding-left: 5px;
+}
+
+.menu-item-textbox {
+ width: 180px;
+}
+
+.nav-menus-php .howto span {
+ margin-top: 6px;
+ display: block;
+ float: right;
+}
+
+/* Menu item types */
+.quick-search {
+ width: 190px;
+}
+
+.nav-menus-php .list-wrap {
+ display: none;
+ clear: both;
+ margin-bottom: 10px;
+}
+
+.nav-menus-php .postbox p.submit {
+ margin-bottom: 0;
+}
+
+/* Listings */
+.nav-menus-php .list li {
+ display: none;
+ margin: 0;
+ margin-bottom: 5px;
+}
+
+.nav-menus-php .list li .menu-item-title {
+ cursor: pointer;
+ display: block;
+}
+
+.nav-menus-php .list li .menu-item-title input {
+ margin-left: 3px;
+ margin-top: -3px;
+}
+
+.menu-item-title input[type=checkbox] {
+ display: inline-block;
+ margin-top: -4px;
+}
+
+/* Nav Menu */
+#menu-container .inside {
+ padding-bottom: 10px;
+}
+
+.menu {
+ padding-top:1em;
+}
+
+#menu-to-edit {
+ margin: 0;
+ padding: 0.1em 0;
+}
+
+.menu ul {
+ width: 100%;
+}
+
+.menu li {
+ margin-bottom: 0;
+ position:relative;
+}
+
+.menu-item-bar {
+ clear:both;
+ line-height:1.5em;
+ position:relative;
+ margin: 9px 0 0;
+}
+
+.menu-item-bar .menu-item-handle {
+ border: 1px solid #dfdfdf;
+ position: relative;
+ padding: 10px 15px;
+ height: auto;
+ min-height: 20px;
+ width: 382px;
+ line-height: 30px;
+ overflow: hidden;
+ word-wrap: break-word;
+}
+
+.menu-item-bar .menu-item-handle:hover {
+ border-color: #999;
+}
+
+#menu-to-edit .menu-item-invalid .menu-item-handle {
+ background: #f6c9cc;
+ border-color: #f1acb1;
+}
+
+.no-js .menu-item-edit-active .item-edit {
+ display: none;
+}
+
+.js .menu-item-handle {
+ cursor: move;
+}
+
+.menu li.deleting .menu-item-handle {
+ background-image: none;
+ background-color: #f66;
+}
+
+.menu-item-handle .item-title {
+ font-size: 13px;
+ font-weight: 600;
+ line-height: 20px;
+ display: block;
+ margin-left: 13em;
+}
+
+.menu-item-handle .menu-item-title.no-title {
+ color: #999;
+}
+
+/* Sortables */
+li.menu-item.ui-sortable-helper dl {
+ margin-top: 0;
+}
+
+li.menu-item.ui-sortable-helper .menu-item-transport dl {
+ margin-top: 13px;
+}
+
+.menu .sortable-placeholder {
+ height: 35px;
+ width: 410px;
+ margin-top: 13px;
+}
+
+/* WARNING: The factor of 30px is hardcoded into the nav-menus JavaScript. */
+.menu-item-depth-0 { margin-right: 0px; }
+.menu-item-depth-1 { margin-right: 30px; }
+.menu-item-depth-2 { margin-right: 60px; }
+.menu-item-depth-3 { margin-right: 90px; }
+.menu-item-depth-4 { margin-right: 120px; }
+.menu-item-depth-5 { margin-right: 150px; }
+.menu-item-depth-6 { margin-right: 180px; }
+.menu-item-depth-7 { margin-right: 210px; }
+.menu-item-depth-8 { margin-right: 240px; }
+.menu-item-depth-9 { margin-right: 270px; }
+.menu-item-depth-10 { margin-right: 300px; }
+.menu-item-depth-11 { margin-right: 330px; }
+
+.menu-item-depth-0 .menu-item-transport { margin-right: 0px; }
+.menu-item-depth-1 .menu-item-transport { margin-right: -30px; }
+.menu-item-depth-2 .menu-item-transport { margin-right: -60px; }
+.menu-item-depth-3 .menu-item-transport { margin-right: -90px; }
+.menu-item-depth-4 .menu-item-transport { margin-right: -120px; }
+.menu-item-depth-5 .menu-item-transport { margin-right: -150px; }
+.menu-item-depth-6 .menu-item-transport { margin-right: -180px; }
+.menu-item-depth-7 .menu-item-transport { margin-right: -210px; }
+.menu-item-depth-8 .menu-item-transport { margin-right: -240px; }
+.menu-item-depth-9 .menu-item-transport { margin-right: -270px; }
+.menu-item-depth-10 .menu-item-transport { margin-right: -300px; }
+.menu-item-depth-11 .menu-item-transport { margin-right: -330px; }
+
+body.menu-max-depth-0 { min-width: 950px !important; }
+body.menu-max-depth-1 { min-width: 980px !important; }
+body.menu-max-depth-2 { min-width: 1010px !important; }
+body.menu-max-depth-3 { min-width: 1040px !important; }
+body.menu-max-depth-4 { min-width: 1070px !important; }
+body.menu-max-depth-5 { min-width: 1100px !important; }
+body.menu-max-depth-6 { min-width: 1130px !important; }
+body.menu-max-depth-7 { min-width: 1160px !important; }
+body.menu-max-depth-8 { min-width: 1190px !important; }
+body.menu-max-depth-9 { min-width: 1220px !important; }
+body.menu-max-depth-10 { min-width: 1250px !important; }
+body.menu-max-depth-11 { min-width: 1280px !important; }
+
+/* Menu item controls */
+.item-type {
+ color: #777;
+ font-size: 12px;
+ padding: 12px 10px;
+ line-height: 18px;
+ display: block;
+}
+
+.item-controls {
+ font-size: 12px;
+ position: absolute;
+ left: 20px;
+ top: -1px;
+}
+
+.item-controls a {
+ text-decoration: none;
+}
+
+.item-controls a:hover {
+ cursor: pointer;
+}
+
+.item-controls .item-order {
+ padding-left: 10px;
+}
+
+.nav-menus-php .item-edit {
+ position: absolute;
+ left: -20px;
+ top: 0;
+ display: block;
+ width: 30px;
+ height: 40px;
+ margin-left: 0 !important;
+ text-indent: 100%;
+ outline: none;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+/* Menu editing */
+.menu-instructions-inactive {
+ display: none;
+}
+
+.menu-item-settings {
+ display: block;
+ width: 402px;
+ padding: 10px 10px 10px 0;
+ position: relative;
+ z-index: 10; /* Keep .item-title's shadow from appearing on top of .menu-item-settings */
+ border: 1px solid #e5e5e5;
+ border-top: none;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+}
+
+.menu-item-settings .field-move a {
+ display: none;
+ margin: 0 2px;
+}
+
+.menu-item-edit-active .menu-item-settings {
+ display: block;
+}
+
+.menu-item-edit-inactive .menu-item-settings {
+ display: none;
+}
+
+.add-menu-item-pagelinks {
+ margin: .5em auto;
+ text-align: center;
+}
+
+.link-to-original {
+ display: block;
+ margin: 0 0 10px;
+ padding: 3px 5px 5px;
+ border: 1px solid #dfdfdf;
+ color: #777;
+ font-size: 12px;
+ font-style: italic;
+}
+
+.link-to-original a {
+ padding-right: 4px;
+ font-style: normal;
+}
+
+.hidden-field {
+ display: none;
+}
+
+.menu-item-settings .description-thin,
+.menu-item-settings .description-wide {
+ margin-left: 10px;
+ float: right;
+}
+
+.description-thin {
+ width: 190px;
+ height: 40px;
+}
+
+.description-wide {
+ width: 390px;
+}
+
+.menu-item-actions {
+ padding-top: 15px;
+}
+
+#cancel-save {
+ cursor: pointer;
+}
+
+/* Major/minor publishing actions (classes) */
+.nav-menus-php .major-publishing-actions {
+ clear: both;
+ padding: 3px 0 6px;
+}
+
+.nav-menus-php .major-publishing-actions .publishing-action {
+ text-align: left;
+ float: left;
+ line-height: 23px;
+ margin: 4px 0 1px;
+}
+
+.nav-menus-php .blank-slate .menu-settings {
+ display: none;
+}
+
+.nav-menus-php .delete-action {
+ float: right;
+ margin-top: 2px;
+}
+
+.nav-menus-php .submitbox .submitcancel {
+ border-bottom: 1px solid #0074a2;
+ padding: 1px 2px;
+ color: #0074a2;
+ text-decoration: none;
+}
+
+.nav-menus-php .submitbox .submitcancel:hover {
+ background: #0074a2;
+ color: #fff;
+}
+
+.nav-menus-php .major-publishing-actions .form-invalid {
+ padding-right: 4px;
+ margin-right: -4px;
+}
+
+/* Clearfix */
+#menu-item-name-wrap:after,
+#menu-item-url-wrap:after,
+#menu-name-label:after,
+#menu-settings-column .inside:after,
+#nav-menus-frame:after,
+.nav-menus-php #post-body-content:after,
+.nav-menus-php .button-controls:after,
+.nav-menus-php .major-publishing-actions:after,
+.nav-menus-php .menu-item-settings:after {
+ clear: both;
+ content: ".";
+ display: block;
+ height: 0;
+ visibility: hidden;
+}
+
+#nav-menus-frame,
+.button-controls,
+#menu-item-url-wrap,
+#menu-item-name-wrap {
+ display: block;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@media screen and ( max-width: 782px ) {
+ body.nav-menus-php {
+ min-width: 0 !important;
+ }
+
+ #nav-menus-frame {
+ margin-right: 0;
+ float: none;
+ width: 100%;
+ }
+
+ #wpbody-content #menu-settings-column {
+ display: block;
+ width: 100%;
+ float: none;
+ margin-right: 0;
+ }
+
+ #side-sortables .add-menu-item-tabs {
+ margin: 15px 0 14px;
+ }
+
+ ul.add-menu-item-tabs li.tabs {
+ padding: 13px 15px 14px;
+ }
+
+ .nav-menus-php .item-controls .item-type {
+ margin-top: 2px;
+ }
+
+ .nav-menus-php .customlinkdiv .howto input {
+ width: 65%;
+ }
+
+ .nav-menus-php .quick-search {
+ width: 85%;
+ }
+
+ #menu-management-liquid {
+ margin-top: 25px;
+ }
+
+ .nav-menus-php .menu-name-label.howto span {
+ margin-top: 13px
+ }
+
+ .menu-name-label #menu-name {
+ margin-top: 4px;
+ }
+
+ .nav-menus-php .major-publishing-actions .publishing-action {
+ margin-top: 6px;
+ }
+
+ .nav-menus-php .delete-action {
+ font-size: 14px;
+ line-height: 50px;
+ margin-top: 12px;
+ }
+
+ .menu-item-bar .menu-item-handle,
+ .menu-item-settings,
+ .description-wide {
+ width: auto;
+ }
+
+ .menu-item-settings {
+ padding: 10px;
+ }
+
+ .menu-item-settings .description-thin,
+ .menu-item-settings .description-wide {
+ width: 100%;
+ height: auto;
+ }
+
+ .menu-item-settings input {
+ width: 100%;
+ }
+
+ .menu-settings dl {
+ padding-right: 0;
+ }
+
+ .menu-settings dd {
+ float: none;
+ width: 100%;
+ margin-bottom: 15px;
+ }
+
+ .menu-settings dt {
+ float: none;
+ width: auto;
+ margin-right: 0;
+ margin-bottom: 15px;
+ }
+}
+
+@media only screen and (max-width: 768px) {
+ /* menu locations */
+ #menu-locations-wrap .widefat {
+ width: 100%;
+ }
+}
diff --git a/wp-admin/css/nav-menus.css b/wp-admin/css/nav-menus.css
new file mode 100644
index 0000000..2ac58e3
--- /dev/null
+++ b/wp-admin/css/nav-menus.css
@@ -0,0 +1,858 @@
+/* nav-menu */
+
+/* @todo: determine if this is truly for nav menus only */
+.no-js #message {
+ display: block;
+}
+
+ul.add-menu-item-tabs li {
+ padding: 3px 5px 3px 8px;
+}
+
+.accordion-section ul.category-tabs,
+.accordion-section ul.add-menu-item-tabs,
+.accordion-section ul.wp-tab-bar {
+ margin: 0;
+}
+
+.accordion-section .categorychecklist {
+ margin: 13px 0;
+}
+
+#nav-menu-meta .accordion-section-content {
+ padding: 18px 13px;
+}
+
+#nav-menu-meta .button-controls {
+ margin-bottom: 0;
+}
+
+#nav-menus-frame {
+ margin-left: 300px;
+ margin-top: 23px;
+}
+
+#wpbody-content #menu-settings-column {
+ display:inline;
+ width:281px;
+ margin-left: -300px;
+ clear: both;
+ float: left;
+ padding-top: 0;
+}
+
+#menu-settings-column .inside {
+ clear: both;
+ margin: 10px 0 0;
+}
+
+.metabox-holder-disabled .postbox,
+.metabox-holder-disabled .accordion-section-content,
+.metabox-holder-disabled .accordion-section-title {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.metabox-holder-disabled .button-controls .select-all {
+ display: none;
+}
+
+#wpbody {
+ position: relative;
+}
+
+.blank-slate .menu-name {
+ height: 2em;
+}
+
+.blank-slate .menu-settings {
+ border: none;
+ margin-top: 0;
+ padding-top: 0;
+ overflow: hidden;
+}
+
+.is-submenu {
+ color: #999;
+ font-style: italic;
+ font-weight: normal;
+ margin-left: 4px;
+}
+
+.manage-menus {
+ margin-top: 23px;
+ padding: 10px;
+ overflow: hidden;
+ background: #fbfbfb;
+}
+
+.manage-menus select {
+ float: left;
+ margin-right: 6px;
+}
+
+.manage-menus .selected-menu {
+ float: left;
+ margin: 5px 6px 0 0;
+}
+
+.manage-menus .submit-btn {
+ float: left;
+ margin-top: 1px;
+}
+
+.menu-edit p {
+ margin: .3em 0 .6em;
+}
+
+.menu-edit #post-body-content h3 {
+ margin: 1em 0 10px;
+}
+
+.menu-settings {
+ border-top: 1px solid #eee;
+ margin-top: 2em;
+}
+
+.menu-settings dl {
+ margin: 0 0 10px;
+ overflow: hidden;
+ padding-left: 18%;
+}
+
+.menu-settings dd {
+ float: left;
+ margin: 0;
+ width: 100%;
+}
+
+.menu-settings dt {
+ float: left;
+ clear: both;
+ width: 21.951%;
+ padding: 3px 0 0;
+ margin-left: -21.951%;
+}
+
+.menu-settings label {
+ vertical-align: baseline;
+}
+
+.menu-edit .checkbox-input {
+ margin-top: 4px;
+}
+
+.theme-location-set {
+ color: #999;
+ font-size: 11px;
+}
+
+/* Menu Container */
+#menu-management-liquid {
+ float: left;
+ min-width: 100%;
+ margin-top: 3px;
+}
+
+#menu-management {
+ position: relative;
+ margin-right: 20px;
+ margin-top: -3px;
+ width: 100%;
+ background: #f5f5f5;
+}
+
+#menu-management .menu-edit {
+ margin-bottom: 20px;
+}
+
+.nav-menus-php #post-body {
+ padding: 0 10px 10px;
+ border-top: 1px solid #fff;
+ border-bottom: 1px solid #dfdfdf;
+ background: #fff;
+}
+
+#nav-menu-header,
+#nav-menu-footer {
+ padding: 0 10px;
+}
+
+#nav-menu-header {
+ border-bottom: 1px solid #dfdfdf;
+ margin-bottom: 0;
+}
+
+#nav-menu-header .menu-name-label {
+ margin-top: 4px;
+}
+
+.nav-menus-php #post-body div.updated,
+.nav-menus-php #post-body div.error {
+ margin: 0;
+}
+
+.nav-menus-php #post-body-content {
+ position: relative;
+ float: none;
+}
+
+#menu-management .menu-add-new abbr {
+ font-weight:600;
+}
+
+#select-nav-menu-container {
+ text-align: right;
+ padding: 0 10px 3px 10px;
+ margin-bottom: 5px;
+}
+
+#select-nav-menu {
+ width: 100px;
+ display: inline;
+}
+
+#menu-name-label {
+ margin-top: -2px;
+}
+
+.widefat td.menu-location-menus {
+ padding-bottom: 5px;
+}
+
+.menu-location-menus select {
+ float: left;
+}
+
+#locations-nav-menu-wrapper {
+ padding: 5px 0;
+}
+
+.locations-nav-menu-select select {
+ float: left;
+ width: 160px;
+ margin-right: 5px;
+}
+
+.locations-row-links {
+ float: left;
+ margin: 6px 0 0 6px;
+}
+
+.locations-edit-menu-link,
+.locations-add-menu-link {
+ margin: 0 3px;
+}
+
+.locations-edit-menu-link {
+ padding-right: 3px;
+ border-right: 1px solid #ccc;
+}
+
+#wpbody .open-label {
+ display: block;
+ float:left;
+}
+
+#wpbody .open-label span {
+ padding-right: 10px;
+}
+
+.js .input-with-default-title {
+ color: #aaa;
+ font-style: italic;
+}
+
+#menu-management .inside {
+ padding: 0 10px;
+}
+
+/* Add Menu Item Boxes */
+.postbox .howto input,
+.accordion-container .howto input {
+ width: 180px;
+ float: right;
+}
+
+.accordion-container .outer-border {
+ margin: 0;
+}
+
+.customlinkdiv .howto input {
+ width: 180px;
+}
+
+.customlinkdiv p {
+ margin-top: 0
+}
+
+#nav-menu-theme-locations .howto select {
+ width: 100%;
+}
+
+#nav-menu-theme-locations .button-controls {
+ text-align: right;
+}
+
+.add-menu-item-view-all {
+ height: 400px;
+}
+
+/* Button Primary Actions */
+#menu-container .submit {
+ margin: 0 0 10px;
+ padding: 0;
+}
+
+.nav-menus-php .add-new-menu-action {
+ float: left;
+ margin: 6px 0 0 6px;
+ line-height: 15px;
+}
+
+.nav-menus-php .meta-sep,
+.nav-menus-php .submitdelete,
+.nav-menus-php .submitcancel {
+ display: block;
+ float: left;
+ margin: 6px 0;
+ line-height: 15px;
+}
+
+.meta-sep {
+ padding: 0 2px;
+}
+
+/* @todo: is this actually used? */
+#cancel-save {
+ text-decoration: underline;
+ font-size: 12px;
+ margin-left: 20px;
+ margin-top: 5px;
+}
+
+.button.right, .button-secondary.right, .button-primary.right {
+ float: right;
+}
+
+/* Button Secondary Actions */
+.list-controls {
+ float: left;
+ margin-top: 5px;
+}
+
+.add-to-menu {
+ float: right;
+}
+
+.postbox .spinner {
+ display: none;
+ vertical-align: middle;
+}
+
+.button-controls {
+ clear:both;
+ margin: 10px 0;
+}
+
+.show-all,
+.hide-all {
+ cursor: pointer;
+}
+
+.hide-all {
+ display: none;
+}
+
+/* Create Menu */
+#menu-name {
+ width: 270px;
+}
+
+#manage-menu .inside {
+ padding: 0px 0px;
+}
+
+/* Custom Links */
+#available-links dt {
+ display: block;
+}
+
+#add-custom-link .howto {
+ font-size: 12px;
+}
+
+#add-custom-link label span {
+ display: block;
+ float: left;
+ margin-top: 5px;
+ padding-right: 5px;
+}
+
+.menu-item-textbox {
+ width: 180px;
+}
+
+.nav-menus-php .howto span {
+ margin-top: 6px;
+ display: block;
+ float: left;
+}
+
+/* Menu item types */
+.quick-search {
+ width: 190px;
+}
+
+.nav-menus-php .list-wrap {
+ display: none;
+ clear: both;
+ margin-bottom: 10px;
+}
+
+.nav-menus-php .postbox p.submit {
+ margin-bottom: 0;
+}
+
+/* Listings */
+.nav-menus-php .list li {
+ display: none;
+ margin: 0;
+ margin-bottom: 5px;
+}
+
+.nav-menus-php .list li .menu-item-title {
+ cursor: pointer;
+ display: block;
+}
+
+.nav-menus-php .list li .menu-item-title input {
+ margin-right: 3px;
+ margin-top: -3px;
+}
+
+.menu-item-title input[type=checkbox] {
+ display: inline-block;
+ margin-top: -4px;
+}
+
+/* Nav Menu */
+#menu-container .inside {
+ padding-bottom: 10px;
+}
+
+.menu {
+ padding-top:1em;
+}
+
+#menu-to-edit {
+ margin: 0;
+ padding: 0.1em 0;
+}
+
+.menu ul {
+ width: 100%;
+}
+
+.menu li {
+ margin-bottom: 0;
+ position:relative;
+}
+
+.menu-item-bar {
+ clear:both;
+ line-height:1.5em;
+ position:relative;
+ margin: 9px 0 0;
+}
+
+.menu-item-bar .menu-item-handle {
+ border: 1px solid #dfdfdf;
+ position: relative;
+ padding: 10px 15px;
+ height: auto;
+ min-height: 20px;
+ width: 382px;
+ line-height: 30px;
+ overflow: hidden;
+ word-wrap: break-word;
+}
+
+.menu-item-bar .menu-item-handle:hover {
+ border-color: #999;
+}
+
+#menu-to-edit .menu-item-invalid .menu-item-handle {
+ background: #f6c9cc;
+ border-color: #f1acb1;
+}
+
+.no-js .menu-item-edit-active .item-edit {
+ display: none;
+}
+
+.js .menu-item-handle {
+ cursor: move;
+}
+
+.menu li.deleting .menu-item-handle {
+ background-image: none;
+ background-color: #f66;
+}
+
+.menu-item-handle .item-title {
+ font-size: 13px;
+ font-weight: 600;
+ line-height: 20px;
+ display: block;
+ margin-right: 13em;
+}
+
+.menu-item-handle .menu-item-title.no-title {
+ color: #999;
+}
+
+/* Sortables */
+li.menu-item.ui-sortable-helper dl {
+ margin-top: 0;
+}
+
+li.menu-item.ui-sortable-helper .menu-item-transport dl {
+ margin-top: 13px;
+}
+
+.menu .sortable-placeholder {
+ height: 35px;
+ width: 410px;
+ margin-top: 13px;
+}
+
+/* WARNING: The factor of 30px is hardcoded into the nav-menus JavaScript. */
+.menu-item-depth-0 { margin-left: 0px; }
+.menu-item-depth-1 { margin-left: 30px; }
+.menu-item-depth-2 { margin-left: 60px; }
+.menu-item-depth-3 { margin-left: 90px; }
+.menu-item-depth-4 { margin-left: 120px; }
+.menu-item-depth-5 { margin-left: 150px; }
+.menu-item-depth-6 { margin-left: 180px; }
+.menu-item-depth-7 { margin-left: 210px; }
+.menu-item-depth-8 { margin-left: 240px; }
+.menu-item-depth-9 { margin-left: 270px; }
+.menu-item-depth-10 { margin-left: 300px; }
+.menu-item-depth-11 { margin-left: 330px; }
+
+.menu-item-depth-0 .menu-item-transport { margin-left: 0px; }
+.menu-item-depth-1 .menu-item-transport { margin-left: -30px; }
+.menu-item-depth-2 .menu-item-transport { margin-left: -60px; }
+.menu-item-depth-3 .menu-item-transport { margin-left: -90px; }
+.menu-item-depth-4 .menu-item-transport { margin-left: -120px; }
+.menu-item-depth-5 .menu-item-transport { margin-left: -150px; }
+.menu-item-depth-6 .menu-item-transport { margin-left: -180px; }
+.menu-item-depth-7 .menu-item-transport { margin-left: -210px; }
+.menu-item-depth-8 .menu-item-transport { margin-left: -240px; }
+.menu-item-depth-9 .menu-item-transport { margin-left: -270px; }
+.menu-item-depth-10 .menu-item-transport { margin-left: -300px; }
+.menu-item-depth-11 .menu-item-transport { margin-left: -330px; }
+
+body.menu-max-depth-0 { min-width: 950px !important; }
+body.menu-max-depth-1 { min-width: 980px !important; }
+body.menu-max-depth-2 { min-width: 1010px !important; }
+body.menu-max-depth-3 { min-width: 1040px !important; }
+body.menu-max-depth-4 { min-width: 1070px !important; }
+body.menu-max-depth-5 { min-width: 1100px !important; }
+body.menu-max-depth-6 { min-width: 1130px !important; }
+body.menu-max-depth-7 { min-width: 1160px !important; }
+body.menu-max-depth-8 { min-width: 1190px !important; }
+body.menu-max-depth-9 { min-width: 1220px !important; }
+body.menu-max-depth-10 { min-width: 1250px !important; }
+body.menu-max-depth-11 { min-width: 1280px !important; }
+
+/* Menu item controls */
+.item-type {
+ color: #777;
+ font-size: 12px;
+ padding: 12px 10px;
+ line-height: 18px;
+ display: block;
+}
+
+.item-controls {
+ font-size: 12px;
+ position: absolute;
+ right: 20px;
+ top: -1px;
+}
+
+.item-controls a {
+ text-decoration: none;
+}
+
+.item-controls a:hover {
+ cursor: pointer;
+}
+
+.item-controls .item-order {
+ padding-right: 10px;
+}
+
+.nav-menus-php .item-edit {
+ position: absolute;
+ right: -20px;
+ top: 0;
+ display: block;
+ width: 30px;
+ height: 40px;
+ margin-right: 0 !important;
+ text-indent: 100%;
+ outline: none;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+/* Menu editing */
+.menu-instructions-inactive {
+ display: none;
+}
+
+.menu-item-settings {
+ display: block;
+ width: 402px;
+ padding: 10px 0 10px 10px;
+ position: relative;
+ z-index: 10; /* Keep .item-title's shadow from appearing on top of .menu-item-settings */
+ border: 1px solid #e5e5e5;
+ border-top: none;
+ -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+ box-shadow: 0 1px 1px rgba(0,0,0,0.04);
+}
+
+.menu-item-settings .field-move a {
+ display: none;
+ margin: 0 2px;
+}
+
+.menu-item-edit-active .menu-item-settings {
+ display: block;
+}
+
+.menu-item-edit-inactive .menu-item-settings {
+ display: none;
+}
+
+.add-menu-item-pagelinks {
+ margin: .5em auto;
+ text-align: center;
+}
+
+.link-to-original {
+ display: block;
+ margin: 0 0 10px;
+ padding: 3px 5px 5px;
+ border: 1px solid #dfdfdf;
+ color: #777;
+ font-size: 12px;
+ font-style: italic;
+}
+
+.link-to-original a {
+ padding-left: 4px;
+ font-style: normal;
+}
+
+.hidden-field {
+ display: none;
+}
+
+.menu-item-settings .description-thin,
+.menu-item-settings .description-wide {
+ margin-right: 10px;
+ float: left;
+}
+
+.description-thin {
+ width: 190px;
+ height: 40px;
+}
+
+.description-wide {
+ width: 390px;
+}
+
+.menu-item-actions {
+ padding-top: 15px;
+}
+
+#cancel-save {
+ cursor: pointer;
+}
+
+/* Major/minor publishing actions (classes) */
+.nav-menus-php .major-publishing-actions {
+ clear: both;
+ padding: 3px 0 6px;
+}
+
+.nav-menus-php .major-publishing-actions .publishing-action {
+ text-align: right;
+ float: right;
+ line-height: 23px;
+ margin: 4px 0 1px;
+}
+
+.nav-menus-php .blank-slate .menu-settings {
+ display: none;
+}
+
+.nav-menus-php .delete-action {
+ float: left;
+ margin-top: 2px;
+}
+
+.nav-menus-php .submitbox .submitcancel {
+ border-bottom: 1px solid #0074a2;
+ padding: 1px 2px;
+ color: #0074a2;
+ text-decoration: none;
+}
+
+.nav-menus-php .submitbox .submitcancel:hover {
+ background: #0074a2;
+ color: #fff;
+}
+
+.nav-menus-php .major-publishing-actions .form-invalid {
+ padding-left: 4px;
+ margin-left: -4px;
+}
+
+/* Clearfix */
+#menu-item-name-wrap:after,
+#menu-item-url-wrap:after,
+#menu-name-label:after,
+#menu-settings-column .inside:after,
+#nav-menus-frame:after,
+.nav-menus-php #post-body-content:after,
+.nav-menus-php .button-controls:after,
+.nav-menus-php .major-publishing-actions:after,
+.nav-menus-php .menu-item-settings:after {
+ clear: both;
+ content: ".";
+ display: block;
+ height: 0;
+ visibility: hidden;
+}
+
+#nav-menus-frame,
+.button-controls,
+#menu-item-url-wrap,
+#menu-item-name-wrap {
+ display: block;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@media screen and ( max-width: 782px ) {
+ body.nav-menus-php {
+ min-width: 0 !important;
+ }
+
+ #nav-menus-frame {
+ margin-left: 0;
+ float: none;
+ width: 100%;
+ }
+
+ #wpbody-content #menu-settings-column {
+ display: block;
+ width: 100%;
+ float: none;
+ margin-left: 0;
+ }
+
+ #side-sortables .add-menu-item-tabs {
+ margin: 15px 0 14px;
+ }
+
+ ul.add-menu-item-tabs li.tabs {
+ padding: 13px 15px 14px;
+ }
+
+ .nav-menus-php .item-controls .item-type {
+ margin-top: 2px;
+ }
+
+ .nav-menus-php .customlinkdiv .howto input {
+ width: 65%;
+ }
+
+ .nav-menus-php .quick-search {
+ width: 85%;
+ }
+
+ #menu-management-liquid {
+ margin-top: 25px;
+ }
+
+ .nav-menus-php .menu-name-label.howto span {
+ margin-top: 13px
+ }
+
+ .menu-name-label #menu-name {
+ margin-top: 4px;
+ }
+
+ .nav-menus-php .major-publishing-actions .publishing-action {
+ margin-top: 6px;
+ }
+
+ .nav-menus-php .delete-action {
+ font-size: 14px;
+ line-height: 50px;
+ margin-top: 12px;
+ }
+
+ .menu-item-bar .menu-item-handle,
+ .menu-item-settings,
+ .description-wide {
+ width: auto;
+ }
+
+ .menu-item-settings {
+ padding: 10px;
+ }
+
+ .menu-item-settings .description-thin,
+ .menu-item-settings .description-wide {
+ width: 100%;
+ height: auto;
+ }
+
+ .menu-item-settings input {
+ width: 100%;
+ }
+
+ .menu-settings dl {
+ padding-left: 0;
+ }
+
+ .menu-settings dd {
+ float: none;
+ width: 100%;
+ margin-bottom: 15px;
+ }
+
+ .menu-settings dt {
+ float: none;
+ width: auto;
+ margin-left: 0;
+ margin-bottom: 15px;
+ }
+}
+
+@media only screen and (max-width: 768px) {
+ /* menu locations */
+ #menu-locations-wrap .widefat {
+ width: 100%;
+ }
+}
diff --git a/wp-admin/css/press-this-rtl.css b/wp-admin/css/press-this-rtl.css
new file mode 100644
index 0000000..4773ba4
--- /dev/null
+++ b/wp-admin/css/press-this-rtl.css
@@ -0,0 +1,458 @@
+.press-this #message {
+ border-right: 4px solid #7ad03a;
+ padding: 1px 12px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+}
+
+.press-this #side-sortables .category-tabs li {
+ display: inline;
+ line-height: 1.35em;
+}
+
+body.press-this ul.category-tabs li.tabs a {
+ color: #333;
+}
+
+.press-this #content-resize-handle {
+ bottom: 2px;
+}
+
+body.press-this {
+ color: #333;
+ margin: 0;
+ padding: 0;
+ min-width: 708px;
+ min-height: 400px;
+}
+
+.press-this #titlediv #title {
+ font-size: 1.4em;
+}
+
+.press-this #site-heading:before {
+ top: 3px;
+ position: relative;
+ display: inline-block;
+ font: normal 18px/1 'dashicons';
+ speak: none;
+ color: #727272;
+ content: '\f120';
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.press-this #wphead {
+ height: 32px;
+ margin-right: 0;
+ margin-left: 0;
+ margin-bottom: 5px;
+}
+
+.press-this #header-logo {
+ float: right;
+ margin: 7px 7px 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.press-this #wphead h1 {
+ font-weight: normal;
+ font-size: 16px;
+ line-height: 32px;
+ margin: 0;
+ float: right;
+}
+
+.press-this #wphead h1 a {
+ text-decoration: none;
+}
+
+.press-this #wphead h1 a:hover {
+ text-decoration: underline;
+}
+
+.press-this #message {
+ margin: 10px 0;
+}
+
+.press-this .posting {
+ margin-left: 250px;
+}
+
+.press-this-sidebar {
+ float: left;
+ width: 240px;
+ padding-top: 10px;
+}
+
+.press-this #title {
+ margin-right: 0;
+ margin-left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.press-this .tagchecklist {
+ margin-top: 8px;
+}
+
+.press-this #titlediv {
+ margin: 0;
+}
+
+.press-this #wp-content-wrap #wp-content-editor-tools {
+ padding: 0;
+ top: 3px;
+ overflow: hidden;
+}
+
+.press-this .wp-media-buttons {
+ cursor: default;
+ padding: 8px 8px 6px;
+}
+
+.press-this #wp-content-wrap #wp-content-media-buttons a {
+ padding: 0;
+ line-height: normal;
+ height: auto;
+ font-size: 16px;
+}
+
+.press-this #wp-content-wrap .mce-toolbar .mce-btn-group .mce-btn {
+ margin: 0 1px;
+}
+
+.press-this #wp-content-wrap .mce-toolbar .mce-btn button {
+ padding: 2px 3px;
+}
+
+.press-this #wp-content-wrap div.mce-toolbar-grp,
+.press-this #wp-content-wrap .quicktags-toolbar {
+ padding-left: 3px;
+}
+
+.press-this .howto {
+ margin-top: 2px;
+ margin-bottom: 3px;
+ font-size: 12px;
+ font-style: italic;
+ display: block;
+}
+
+.press-this #wp-content-editor-container {
+ clear: none;
+}
+
+.press-this #poststuff .inside {
+ margin-top: 18px;
+}
+
+.press-this .category-tabs {
+ margin-bottom: 3px;
+}
+
+/* Editor/Main Column */
+.press-this #poststuff {
+ margin: 0 8px;
+ padding: 0;
+}
+
+.press-this #photo-add-url-div input[type="text"] {
+ width: 220px;
+}
+
+#poststuff #editor-toolbar {
+ height: 30px;
+}
+
+.posting {
+ margin-left: 212px;
+ position: relative;
+}
+
+.press-this .inner-sidebar {
+ width: 200px;
+}
+
+.press-this .inner-sidebar .sleeve {
+ padding-top: 5px;
+}
+
+.press-this #submitdiv p {
+ margin: 0;
+ padding: 6px;
+}
+
+.press-this #submitdiv #publishing-actions {
+ border-bottom: 1px solid #dfdfdf;
+}
+
+.press-this #publish {
+ float: left;
+}
+
+.press-this #poststuff h2,
+.press-this #poststuff h3 {
+ font-size: 14px;
+ line-height: 1;
+}
+
+.press-this #tagsdiv-post_tag h3,
+.press-this #categorydiv h3 {
+ cursor: pointer;
+}
+
+.press-this #submitdiv h3 {
+ cursor: default;
+}
+
+h3.tb {
+ font-weight: 600;
+ font-size: 12px;
+ margin-right: 5px;
+}
+
+.press-this .postbox,
+.press-this .stuffbox {
+ margin-bottom: 10px;
+ min-width: 0;
+}
+
+.press-this #submitdiv:hover .handlediv {
+ background: none;
+}
+
+.tbtitle {
+ font-size: 1.7em;
+ outline: none;
+ padding: 3px 4px;
+ border: 1px solid #dfdfdf;
+}
+
+.press-this .actions {
+ float: left;
+ margin: -19px 0 0;
+}
+
+.press-this #extra-fields .actions {
+ margin: -32px 0 0 -7px;
+}
+
+.press-this .actions li {
+ float: right;
+ list-style: none;
+ margin-left: 10px;
+}
+
+#extra-fields .button {
+ margin-left: 5px;
+}
+
+/* Photo Styles */
+#photo_saving {
+ margin: 0 8px 8px;
+ vertical-align: middle;
+}
+
+#img_container_container {
+ overflow: auto;
+}
+
+#extra-fields {
+ margin-top: 10px;
+ position: relative;
+}
+
+#extra-fields h2 {
+ margin: 12px;
+}
+
+#waiting {
+ margin-top: 10px;
+ overflow: hidden;
+}
+
+#waiting span {
+ float: left;
+ margin: 0 5px 0 0;
+}
+
+#waiting .spinner {
+ display: block;
+}
+
+#extra-fields .postbox {
+ margin-bottom: 5px;
+}
+
+#extra-fields .titlewrap {
+ padding: 0;
+ overflow: auto;
+ height: 120px;
+}
+
+#img_container a {
+ display: block;
+ float: right;
+ overflow: hidden;
+}
+
+#img_container img,
+#img_container a {
+ width: 68px;
+ height: 68px;
+}
+
+#img_container img {
+ border: none;
+ background-color: #f4f4f4;
+ cursor: pointer;
+}
+
+#img_container a,
+#img_container a:link,
+#img_container a:visited {
+ border: 1px solid #ccc;
+ display: block;
+ position: relative;
+}
+
+#img_container a:hover,
+#img_container a:active {
+ border-color: #000;
+ z-index: 1000;
+ border-width: 1px;
+}
+
+/* Video */
+#embed-code {
+ width: 100%;
+ height: 98px;
+}
+
+/* Categories */
+.press-this .categorydiv div.tabs-panel {
+ height: 100px;
+}
+
+/* Tags */
+.press-this .tagsdiv .newtag {
+ width: 120px;
+}
+
+.press-this #content {
+ margin: 5px 0;
+ padding: 0 5px;
+ border: 0 none;
+ height: 340px;
+ font-family: Consolas, Monaco, monospace;
+ font-size: 13px;
+ line-height: 19px;
+ background: transparent;
+}
+
+/* Submit */
+.press-this #publishing-actions .spinner {
+ display: inline;
+ vertical-align: middle;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/* Reset responsive styles in Press This */
+@media screen and ( max-width: 782px ) {
+ .press-this ul.category-tabs li.tabs {
+ padding: 3px 5px 5px; /* Reset tabs in Press This to standard size */
+ }
+
+ .press-this a.wp-switch-editor {
+ font: 13px/19px "Open Sans", sans-serif;
+ margin: 5px 5px 0 0;
+ padding: 3px 8px 4px;
+ }
+
+ .press-this #wp-content-media-buttons a {
+ padding: 0;
+ line-height: normal;
+ height: auto;
+ }
+
+ .press-this #wp-content-editor-tools {
+ padding: 0;
+ top: 3px;
+ }
+
+ .press-this .category-tabs {
+ margin-top: 0;
+ }
+
+ .press-this .tagsdiv .newtag {
+ width: 120px;
+ padding: 3px 5px;
+ margin-bottom: 0;
+ }
+
+ .press-this .tagchecklist {
+ padding: 0;
+ margin-bottom: 0;
+ }
+
+ .press-this .wp_themeSkin a.mceButton {
+ width: 20px;
+ height: 20px;
+ }
+
+ .press-this .wp_themeSkin .mceButton .mceIcon {
+ margin: 0;
+ }
+
+ .press-this #poststuff h3,
+ .press-this .metabox-holder h3 {
+ padding: 7px 12px;
+ }
+
+ .press-this input[type=checkbox],
+ .press-this input[type=radio] {
+ height: 16px;
+ width: 16px;
+ }
+
+ .press-this input[type=checkbox]:checked:before {
+ width: 16px;
+ font: normal 21px/1 'dashicons';
+ margin: -3px -4px 0 0;
+ }
+
+ .press-this input[type=radio]:checked:before {
+ font: normal 21px/1 'dashicons';
+ width: 6px;
+ height: 6px;
+ margin: 4px;
+ }
+
+ .press-this ul.categorychecklist ul,
+ .press-this ul.categorychecklist li {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+
+ .press-this div.quicktags-toolbar input {
+ padding: 2px 4px;
+ }
+
+ .press-this textarea,
+ .press-this input {
+ font-size: 14px;
+ }
+
+ .press-this .tagchecklist span {
+ font-size: 13px;
+ line-height: 1.8em;
+ }
+}
diff --git a/wp-admin/css/press-this.css b/wp-admin/css/press-this.css
new file mode 100644
index 0000000..dbf355a
--- /dev/null
+++ b/wp-admin/css/press-this.css
@@ -0,0 +1,458 @@
+.press-this #message {
+ border-left: 4px solid #7ad03a;
+ padding: 1px 12px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
+}
+
+.press-this #side-sortables .category-tabs li {
+ display: inline;
+ line-height: 1.35em;
+}
+
+body.press-this ul.category-tabs li.tabs a {
+ color: #333;
+}
+
+.press-this #content-resize-handle {
+ bottom: 2px;
+}
+
+body.press-this {
+ color: #333;
+ margin: 0;
+ padding: 0;
+ min-width: 708px;
+ min-height: 400px;
+}
+
+.press-this #titlediv #title {
+ font-size: 1.4em;
+}
+
+.press-this #site-heading:before {
+ top: 3px;
+ position: relative;
+ display: inline-block;
+ font: normal 18px/1 'dashicons';
+ speak: none;
+ color: #727272;
+ content: '\f120';
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.press-this #wphead {
+ height: 32px;
+ margin-left: 0;
+ margin-right: 0;
+ margin-bottom: 5px;
+}
+
+.press-this #header-logo {
+ float: left;
+ margin: 7px 7px 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.press-this #wphead h1 {
+ font-weight: normal;
+ font-size: 16px;
+ line-height: 32px;
+ margin: 0;
+ float: left;
+}
+
+.press-this #wphead h1 a {
+ text-decoration: none;
+}
+
+.press-this #wphead h1 a:hover {
+ text-decoration: underline;
+}
+
+.press-this #message {
+ margin: 10px 0;
+}
+
+.press-this .posting {
+ margin-right: 250px;
+}
+
+.press-this-sidebar {
+ float: right;
+ width: 240px;
+ padding-top: 10px;
+}
+
+.press-this #title {
+ margin-left: 0;
+ margin-right: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.press-this .tagchecklist {
+ margin-top: 8px;
+}
+
+.press-this #titlediv {
+ margin: 0;
+}
+
+.press-this #wp-content-wrap #wp-content-editor-tools {
+ padding: 0;
+ top: 3px;
+ overflow: hidden;
+}
+
+.press-this .wp-media-buttons {
+ cursor: default;
+ padding: 8px 8px 6px;
+}
+
+.press-this #wp-content-wrap #wp-content-media-buttons a {
+ padding: 0;
+ line-height: normal;
+ height: auto;
+ font-size: 16px;
+}
+
+.press-this #wp-content-wrap .mce-toolbar .mce-btn-group .mce-btn {
+ margin: 0 1px;
+}
+
+.press-this #wp-content-wrap .mce-toolbar .mce-btn button {
+ padding: 2px 3px;
+}
+
+.press-this #wp-content-wrap div.mce-toolbar-grp,
+.press-this #wp-content-wrap .quicktags-toolbar {
+ padding-right: 3px;
+}
+
+.press-this .howto {
+ margin-top: 2px;
+ margin-bottom: 3px;
+ font-size: 12px;
+ font-style: italic;
+ display: block;
+}
+
+.press-this #wp-content-editor-container {
+ clear: none;
+}
+
+.press-this #poststuff .inside {
+ margin-top: 18px;
+}
+
+.press-this .category-tabs {
+ margin-bottom: 3px;
+}
+
+/* Editor/Main Column */
+.press-this #poststuff {
+ margin: 0 8px;
+ padding: 0;
+}
+
+.press-this #photo-add-url-div input[type="text"] {
+ width: 220px;
+}
+
+#poststuff #editor-toolbar {
+ height: 30px;
+}
+
+.posting {
+ margin-right: 212px;
+ position: relative;
+}
+
+.press-this .inner-sidebar {
+ width: 200px;
+}
+
+.press-this .inner-sidebar .sleeve {
+ padding-top: 5px;
+}
+
+.press-this #submitdiv p {
+ margin: 0;
+ padding: 6px;
+}
+
+.press-this #submitdiv #publishing-actions {
+ border-bottom: 1px solid #dfdfdf;
+}
+
+.press-this #publish {
+ float: right;
+}
+
+.press-this #poststuff h2,
+.press-this #poststuff h3 {
+ font-size: 14px;
+ line-height: 1;
+}
+
+.press-this #tagsdiv-post_tag h3,
+.press-this #categorydiv h3 {
+ cursor: pointer;
+}
+
+.press-this #submitdiv h3 {
+ cursor: default;
+}
+
+h3.tb {
+ font-weight: 600;
+ font-size: 12px;
+ margin-left: 5px;
+}
+
+.press-this .postbox,
+.press-this .stuffbox {
+ margin-bottom: 10px;
+ min-width: 0;
+}
+
+.press-this #submitdiv:hover .handlediv {
+ background: none;
+}
+
+.tbtitle {
+ font-size: 1.7em;
+ outline: none;
+ padding: 3px 4px;
+ border: 1px solid #dfdfdf;
+}
+
+.press-this .actions {
+ float: right;
+ margin: -19px 0 0;
+}
+
+.press-this #extra-fields .actions {
+ margin: -32px -7px 0 0;
+}
+
+.press-this .actions li {
+ float: left;
+ list-style: none;
+ margin-right: 10px;
+}
+
+#extra-fields .button {
+ margin-right: 5px;
+}
+
+/* Photo Styles */
+#photo_saving {
+ margin: 0 8px 8px;
+ vertical-align: middle;
+}
+
+#img_container_container {
+ overflow: auto;
+}
+
+#extra-fields {
+ margin-top: 10px;
+ position: relative;
+}
+
+#extra-fields h2 {
+ margin: 12px;
+}
+
+#waiting {
+ margin-top: 10px;
+ overflow: hidden;
+}
+
+#waiting span {
+ float: right;
+ margin: 0 0 0 5px;
+}
+
+#waiting .spinner {
+ display: block;
+}
+
+#extra-fields .postbox {
+ margin-bottom: 5px;
+}
+
+#extra-fields .titlewrap {
+ padding: 0;
+ overflow: auto;
+ height: 120px;
+}
+
+#img_container a {
+ display: block;
+ float: left;
+ overflow: hidden;
+}
+
+#img_container img,
+#img_container a {
+ width: 68px;
+ height: 68px;
+}
+
+#img_container img {
+ border: none;
+ background-color: #f4f4f4;
+ cursor: pointer;
+}
+
+#img_container a,
+#img_container a:link,
+#img_container a:visited {
+ border: 1px solid #ccc;
+ display: block;
+ position: relative;
+}
+
+#img_container a:hover,
+#img_container a:active {
+ border-color: #000;
+ z-index: 1000;
+ border-width: 1px;
+}
+
+/* Video */
+#embed-code {
+ width: 100%;
+ height: 98px;
+}
+
+/* Categories */
+.press-this .categorydiv div.tabs-panel {
+ height: 100px;
+}
+
+/* Tags */
+.press-this .tagsdiv .newtag {
+ width: 120px;
+}
+
+.press-this #content {
+ margin: 5px 0;
+ padding: 0 5px;
+ border: 0 none;
+ height: 340px;
+ font-family: Consolas, Monaco, monospace;
+ font-size: 13px;
+ line-height: 19px;
+ background: transparent;
+}
+
+/* Submit */
+.press-this #publishing-actions .spinner {
+ display: inline;
+ vertical-align: middle;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/* Reset responsive styles in Press This */
+@media screen and ( max-width: 782px ) {
+ .press-this ul.category-tabs li.tabs {
+ padding: 3px 5px 5px; /* Reset tabs in Press This to standard size */
+ }
+
+ .press-this a.wp-switch-editor {
+ font: 13px/19px "Open Sans", sans-serif;
+ margin: 5px 0 0 5px;
+ padding: 3px 8px 4px;
+ }
+
+ .press-this #wp-content-media-buttons a {
+ padding: 0;
+ line-height: normal;
+ height: auto;
+ }
+
+ .press-this #wp-content-editor-tools {
+ padding: 0;
+ top: 3px;
+ }
+
+ .press-this .category-tabs {
+ margin-top: 0;
+ }
+
+ .press-this .tagsdiv .newtag {
+ width: 120px;
+ padding: 3px 5px;
+ margin-bottom: 0;
+ }
+
+ .press-this .tagchecklist {
+ padding: 0;
+ margin-bottom: 0;
+ }
+
+ .press-this .wp_themeSkin a.mceButton {
+ width: 20px;
+ height: 20px;
+ }
+
+ .press-this .wp_themeSkin .mceButton .mceIcon {
+ margin: 0;
+ }
+
+ .press-this #poststuff h3,
+ .press-this .metabox-holder h3 {
+ padding: 7px 12px;
+ }
+
+ .press-this input[type=checkbox],
+ .press-this input[type=radio] {
+ height: 16px;
+ width: 16px;
+ }
+
+ .press-this input[type=checkbox]:checked:before {
+ width: 16px;
+ font: normal 21px/1 'dashicons';
+ margin: -3px 0 0 -4px;
+ }
+
+ .press-this input[type=radio]:checked:before {
+ font: normal 21px/1 'dashicons';
+ width: 6px;
+ height: 6px;
+ margin: 4px;
+ }
+
+ .press-this ul.categorychecklist ul,
+ .press-this ul.categorychecklist li {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+
+ .press-this div.quicktags-toolbar input {
+ padding: 2px 4px;
+ }
+
+ .press-this textarea,
+ .press-this input {
+ font-size: 14px;
+ }
+
+ .press-this .tagchecklist span {
+ font-size: 13px;
+ line-height: 1.8em;
+ }
+}
diff --git a/wp-admin/css/revisions-rtl.css b/wp-admin/css/revisions-rtl.css
new file mode 100644
index 0000000..7974039
--- /dev/null
+++ b/wp-admin/css/revisions-rtl.css
@@ -0,0 +1,576 @@
+/*------------------------------------------------------------------------------
+ 11.2 - Post Revisions
+------------------------------------------------------------------------------*/
+.revisions-control-frame,
+.revisions-diff-frame {
+ position: relative;
+}
+
+.revisions-controls {
+ padding-top: 40px;
+ height: 100px;
+ z-index: 1;
+}
+
+.revisions-controls input[type="checkbox"] {
+ position: relative;
+ top: -1px;
+ vertical-align: text-bottom;
+}
+
+.revisions.pinned .revisions-controls {
+ position: fixed;
+ top: 0;
+ height: 82px;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+}
+
+.revisions-tickmarks {
+ position: relative;
+ margin: 0 auto;
+ height: 0.7em;
+ top: 7px;
+ max-width: 70%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ background-color: #fff;
+}
+
+.revisions-tickmarks > div {
+ position: absolute;
+ height: 100%;
+ border-right: 1px solid #aaa;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.revisions-tickmarks > div:first-child {
+ border-width: 0;
+}
+
+.comparing-two-revisions .revisions-controls {
+ height: 140px;
+}
+
+.comparing-two-revisions.pinned .revisions-controls {
+ height: 124px;
+}
+
+.revisions .diff-error {
+ position: absolute;
+ text-align: center;
+ margin: 0 auto;
+ width: 100%;
+ display: none;
+}
+
+.revisions.diff-error .diff-error {
+ display: block;
+}
+
+.revisions .loading-indicator {
+ position: absolute;
+ vertical-align: middle;
+ opacity: 0;
+ width: 100%;
+ width: -webkit-calc( 100% - 30px );
+ width: calc( 100% - 30px );
+ top: 50%;
+ top: -webkit-calc( 50% - 10px );
+ top: calc( 50% - 10px );
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s;
+ filter: alpha(opacity=0); /* ie8 and earlier */
+}
+
+body.folded .revisions .loading-indicator {
+ margin-right: -32px;
+}
+
+.revisions .loading-indicator span.spinner {
+ display: block;
+ margin: 0 auto;
+ float: none;
+}
+
+.revisions.loading .loading-indicator {
+ opacity: 1;
+ filter: alpha(opacity=100); /* ie8 and earlier */
+}
+
+.revisions .diff {
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s;
+}
+
+.revisions.loading .diff {
+ opacity: 0.5;
+ filter: alpha(opacity=50); /* ie8 and earlier */
+}
+
+.revisions.diff-error .diff {
+ visibility: hidden;
+}
+
+.revisions-meta {
+ margin-top: 20px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+}
+
+.revisions.pinned .revisions-meta {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.revision-toggle-compare-mode {
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+.comparing-two-revisions .revisions-previous,
+.comparing-two-revisions .revisions-next,
+.revisions-meta .diff-meta-to strong {
+ display: none;
+}
+
+.revisions-controls .author-card .date {
+ color: #777;
+}
+
+.revisions-controls .author-card.autosave {
+ color: #d54e21;
+}
+
+.revisions-controls .author-card .author-name {
+ font-weight: bold;
+}
+
+.comparing-two-revisions .diff-meta-to strong {
+ display: block;
+}
+
+.revisions.pinned .revisions-buttons {
+ padding: 0 11px;
+}
+
+.revisions-previous,
+.revisions-next {
+ position: relative;
+ z-index: 1;
+}
+
+.revisions-previous {
+ float: right;
+}
+
+.revisions-next {
+ float: left;
+}
+
+.revisions-controls .wp-slider {
+ max-width: 70%;
+ margin: 0 auto;
+ top: -3px;
+}
+
+.revisions-diff {
+ padding: 15px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+}
+
+.revisions-diff h3:first-child {
+ margin-top: 0;
+}
+
+/* Revision meta box */
+.post-revisions li img,
+#revisions-meta-restored img {
+ vertical-align: middle;
+}
+
+table.diff tbody tr td:nth-child(2) {
+ width: 4%;
+}
+
+table.diff {
+ table-layout: fixed;
+ width: 100%;
+ white-space: pre-wrap;
+}
+
+table.diff col.content {
+ width: auto;
+}
+
+table.diff col.content.diffsplit {
+ width: 48%;
+}
+
+table.diff col.diffsplit.middle {
+ width: auto;
+}
+
+table.diff col.ltype {
+ width: 30px;
+}
+
+table.diff tr {
+ background-color: transparent;
+}
+
+table.diff td,
+table.diff th {
+ font-family: Consolas, Monaco, monospace;
+ font-size: 14px;
+ line-height: 1.618;
+ padding: .5em;
+ vertical-align: top;
+ word-wrap: break-word;
+}
+
+table.diff td h1,
+table.diff td h2,
+table.diff td h3,
+table.diff td h4,
+table.diff td h5,
+table.diff td h6 {
+ margin: 0;
+}
+
+table.diff .diff-deletedline del,
+table.diff .diff-addedline ins {
+ text-decoration: none;
+}
+
+table.diff .diff-deletedline {
+ background-color: #ffe9e9;
+}
+
+table.diff .diff-deletedline del {
+ background-color: #faa;
+}
+
+table.diff .diff-addedline {
+ background-color: #e9ffe9;
+}
+
+table.diff .diff-addedline ins {
+ background-color: #afa;
+}
+
+.diff-meta {
+ padding: 5px;
+ clear: both;
+ min-height: 32px;
+}
+
+.diff-title strong {
+ line-height: 32px;
+ min-width: 60px;
+ text-align: left;
+ float: right;
+ margin-left: 5px;
+}
+
+.revisions-controls .author-card .author-info {
+ font-size: 12px;
+ line-height: 16px;
+}
+
+.revisions-controls .author-card .avatar,
+.revisions-controls .author-card .author-info {
+ float: right;
+ margin-right: 6px;
+ margin-left: 6px;
+}
+
+.revisions-controls .author-card .byline {
+ display: block;
+ font-size: 12px;
+}
+
+.revisions-controls .author-card .avatar {
+ vertical-align: middle;
+}
+
+.diff-meta input.restore-revision {
+ float: left;
+ margin-right: 6px;
+ margin-left: 6px;
+ margin-top: 4px;
+}
+
+.diff-meta-from {
+ display: none;
+}
+
+.comparing-two-revisions .diff-meta-from {
+ display: block;
+}
+
+.revisions-tooltip {
+ position: absolute;
+ bottom: 105px;
+ margin-left: 0;
+ margin-right: -69px;
+ z-index: 0;
+ max-width: 350px;
+ min-width: 130px;
+ padding: 8px 4px;
+ display: none;
+ opacity: 0;
+}
+
+.revisions-tooltip.flipped {
+ margin-right: 0;
+ margin-left: -70px;
+}
+
+.revisions.pinned .revisions-tooltip {
+ display: none !important;
+}
+
+.comparing-two-revisions .revisions-tooltip {
+ bottom: 145px;
+}
+
+.revisions-tooltip-arrow {
+ width: 70px;
+ height: 15px;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ margin-right: 35px;
+ bottom: -15px;
+}
+
+.revisions-tooltip.flipped .revisions-tooltip-arrow {
+ margin-right: 0;
+ margin-left: 35px;
+ right: auto;
+ left: 0;
+}
+
+.revisions-tooltip-arrow > span {
+ content: "";
+ position: absolute;
+ right: 20px;
+ top: -20px;
+ width: 25px;
+ height: 25px;
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.revisions-tooltip.flipped .revisions-tooltip-arrow > span {
+ right: auto;
+ left: 20px;
+}
+
+.ie8 .revisions-tooltip-arrow > span {
+ right: 15px;
+ top: -25px;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)";
+}
+
+.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow > span {
+ left: 25px;
+}
+
+.revisions-tooltip,
+.revisions-tooltip-arrow > span {
+ border: 1px solid #d7d7d7;
+ background-color: #fff;
+}
+
+.revisions-tooltip {
+ display: none;
+}
+
+.arrow {
+ width: 70px;
+ height: 16px;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ margin-right: -35px;
+ bottom: 90px;
+ z-index: 10000;
+}
+
+.arrow:after {
+ z-index: 9999;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+}
+
+.arrow.top {
+ top: -16px;
+ bottom: auto;
+}
+
+.arrow.left {
+ right: 20%;
+}
+
+.arrow:after {
+ content: "";
+ position: absolute;
+ right: 20px;
+ top: -20px;
+ width: 25px;
+ height: 25px;
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.revisions-tooltip,
+.revisions-tooltip-arrow:after {
+ border-width: 1px;
+ border-style: solid;
+}
+
+div.revisions-controls > .wp-slider > .ui-slider-handle {
+ margin-right: -10px;
+}
+
+.rtl div.revisions-controls > .wp-slider > .ui-slider-handle {
+ margin-left: -10px;
+}
+
+/* jQuery UI Slider */
+.wp-slider.ui-slider {
+ position: relative;
+ border: 1px solid #d7d7d7;
+ text-align: right;
+ cursor: pointer;
+}
+
+.wp-slider .ui-slider-handle {
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ height: 18px;
+ margin-top: -3px;
+ outline: none;
+ position: absolute;
+ width: 18px;
+ z-index: 2;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.wp-slider .ui-slider-handle,
+.wp-slider .ui-slider-handle.ui-state-hover,
+.wp-slider .ui-slider-handle.focus {
+ background: #2ea2cc;
+ border: 1px solid #0074a2;
+ -webkit-box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15);
+ box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15);
+}
+
+.wp-slider .ui-slider-handle:before {
+ background: none;
+ position: absolute;
+ top: 0;
+ right: 0;
+ color: #fff;
+ content: "\f229";
+ font: normal 18px/1 'dashicons';
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.wp-slider .ui-slider-handle.from-handle:before,
+.wp-slider .ui-slider-handle.to-handle:before {
+ font-size: 20px !important;
+ margin: -1px -1px 0 0;
+}
+
+.wp-slider .ui-slider-handle.from-handle:before {
+ content: '\f139';
+}
+
+.wp-slider .ui-slider-handle.to-handle:before {
+ content: '\f141';
+}
+
+.rtl .wp-slider .ui-slider-handle.from-handle:before {
+ content: '\f141';
+}
+
+.rtl .wp-slider .ui-slider-handle.to-handle:before {
+ content: '\f139';
+ left: -1px;
+}
+
+.wp-slider .ui-slider-range {
+ position: absolute;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-color: transparent;
+ background-image: none;
+}
+
+.wp-slider.ui-slider-horizontal {
+ height: .7em;
+}
+
+.wp-slider.ui-slider-horizontal .ui-slider-handle {
+ top: -.25em;
+ margin-right: -.6em;
+}
+
+.wp-slider.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+
+.wp-slider.ui-slider-horizontal .ui-slider-range-min {
+ right: 0;
+}
+
+.wp-slider.ui-slider-horizontal .ui-slider-range-max {
+ left: 0;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ .revision-tick.completed-false {
+ background-image: url(../images/spinner-2x.gif);
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ #diff-next-revision,
+ #diff-previous-revision {
+ margin-top: -1em;
+ }
+
+ table.diff {
+ -ms-word-break: break-all;
+ word-break: break-all;
+ word-wrap: break-word;
+ }
+}
diff --git a/wp-admin/css/revisions.css b/wp-admin/css/revisions.css
new file mode 100644
index 0000000..8fcde36
--- /dev/null
+++ b/wp-admin/css/revisions.css
@@ -0,0 +1,576 @@
+/*------------------------------------------------------------------------------
+ 11.2 - Post Revisions
+------------------------------------------------------------------------------*/
+.revisions-control-frame,
+.revisions-diff-frame {
+ position: relative;
+}
+
+.revisions-controls {
+ padding-top: 40px;
+ height: 100px;
+ z-index: 1;
+}
+
+.revisions-controls input[type="checkbox"] {
+ position: relative;
+ top: -1px;
+ vertical-align: text-bottom;
+}
+
+.revisions.pinned .revisions-controls {
+ position: fixed;
+ top: 0;
+ height: 82px;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+}
+
+.revisions-tickmarks {
+ position: relative;
+ margin: 0 auto;
+ height: 0.7em;
+ top: 7px;
+ max-width: 70%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ background-color: #fff;
+}
+
+.revisions-tickmarks > div {
+ position: absolute;
+ height: 100%;
+ border-left: 1px solid #aaa;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.revisions-tickmarks > div:first-child {
+ border-width: 0;
+}
+
+.comparing-two-revisions .revisions-controls {
+ height: 140px;
+}
+
+.comparing-two-revisions.pinned .revisions-controls {
+ height: 124px;
+}
+
+.revisions .diff-error {
+ position: absolute;
+ text-align: center;
+ margin: 0 auto;
+ width: 100%;
+ display: none;
+}
+
+.revisions.diff-error .diff-error {
+ display: block;
+}
+
+.revisions .loading-indicator {
+ position: absolute;
+ vertical-align: middle;
+ opacity: 0;
+ width: 100%;
+ width: -webkit-calc( 100% - 30px );
+ width: calc( 100% - 30px );
+ top: 50%;
+ top: -webkit-calc( 50% - 10px );
+ top: calc( 50% - 10px );
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s;
+ filter: alpha(opacity=0); /* ie8 and earlier */
+}
+
+body.folded .revisions .loading-indicator {
+ margin-left: -32px;
+}
+
+.revisions .loading-indicator span.spinner {
+ display: block;
+ margin: 0 auto;
+ float: none;
+}
+
+.revisions.loading .loading-indicator {
+ opacity: 1;
+ filter: alpha(opacity=100); /* ie8 and earlier */
+}
+
+.revisions .diff {
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s;
+}
+
+.revisions.loading .diff {
+ opacity: 0.5;
+ filter: alpha(opacity=50); /* ie8 and earlier */
+}
+
+.revisions.diff-error .diff {
+ visibility: hidden;
+}
+
+.revisions-meta {
+ margin-top: 20px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+}
+
+.revisions.pinned .revisions-meta {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.revision-toggle-compare-mode {
+ position: absolute;
+ top: 0;
+ right: 0;
+}
+
+.comparing-two-revisions .revisions-previous,
+.comparing-two-revisions .revisions-next,
+.revisions-meta .diff-meta-to strong {
+ display: none;
+}
+
+.revisions-controls .author-card .date {
+ color: #777;
+}
+
+.revisions-controls .author-card.autosave {
+ color: #d54e21;
+}
+
+.revisions-controls .author-card .author-name {
+ font-weight: bold;
+}
+
+.comparing-two-revisions .diff-meta-to strong {
+ display: block;
+}
+
+.revisions.pinned .revisions-buttons {
+ padding: 0 11px;
+}
+
+.revisions-previous,
+.revisions-next {
+ position: relative;
+ z-index: 1;
+}
+
+.revisions-previous {
+ float: left;
+}
+
+.revisions-next {
+ float: right;
+}
+
+.revisions-controls .wp-slider {
+ max-width: 70%;
+ margin: 0 auto;
+ top: -3px;
+}
+
+.revisions-diff {
+ padding: 15px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+}
+
+.revisions-diff h3:first-child {
+ margin-top: 0;
+}
+
+/* Revision meta box */
+.post-revisions li img,
+#revisions-meta-restored img {
+ vertical-align: middle;
+}
+
+table.diff tbody tr td:nth-child(2) {
+ width: 4%;
+}
+
+table.diff {
+ table-layout: fixed;
+ width: 100%;
+ white-space: pre-wrap;
+}
+
+table.diff col.content {
+ width: auto;
+}
+
+table.diff col.content.diffsplit {
+ width: 48%;
+}
+
+table.diff col.diffsplit.middle {
+ width: auto;
+}
+
+table.diff col.ltype {
+ width: 30px;
+}
+
+table.diff tr {
+ background-color: transparent;
+}
+
+table.diff td,
+table.diff th {
+ font-family: Consolas, Monaco, monospace;
+ font-size: 14px;
+ line-height: 1.618;
+ padding: .5em;
+ vertical-align: top;
+ word-wrap: break-word;
+}
+
+table.diff td h1,
+table.diff td h2,
+table.diff td h3,
+table.diff td h4,
+table.diff td h5,
+table.diff td h6 {
+ margin: 0;
+}
+
+table.diff .diff-deletedline del,
+table.diff .diff-addedline ins {
+ text-decoration: none;
+}
+
+table.diff .diff-deletedline {
+ background-color: #ffe9e9;
+}
+
+table.diff .diff-deletedline del {
+ background-color: #faa;
+}
+
+table.diff .diff-addedline {
+ background-color: #e9ffe9;
+}
+
+table.diff .diff-addedline ins {
+ background-color: #afa;
+}
+
+.diff-meta {
+ padding: 5px;
+ clear: both;
+ min-height: 32px;
+}
+
+.diff-title strong {
+ line-height: 32px;
+ min-width: 60px;
+ text-align: right;
+ float: left;
+ margin-right: 5px;
+}
+
+.revisions-controls .author-card .author-info {
+ font-size: 12px;
+ line-height: 16px;
+}
+
+.revisions-controls .author-card .avatar,
+.revisions-controls .author-card .author-info {
+ float: left;
+ margin-left: 6px;
+ margin-right: 6px;
+}
+
+.revisions-controls .author-card .byline {
+ display: block;
+ font-size: 12px;
+}
+
+.revisions-controls .author-card .avatar {
+ vertical-align: middle;
+}
+
+.diff-meta input.restore-revision {
+ float: right;
+ margin-left: 6px;
+ margin-right: 6px;
+ margin-top: 4px;
+}
+
+.diff-meta-from {
+ display: none;
+}
+
+.comparing-two-revisions .diff-meta-from {
+ display: block;
+}
+
+.revisions-tooltip {
+ position: absolute;
+ bottom: 105px;
+ margin-right: 0;
+ margin-left: -69px;
+ z-index: 0;
+ max-width: 350px;
+ min-width: 130px;
+ padding: 8px 4px;
+ display: none;
+ opacity: 0;
+}
+
+.revisions-tooltip.flipped {
+ margin-left: 0;
+ margin-right: -70px;
+}
+
+.revisions.pinned .revisions-tooltip {
+ display: none !important;
+}
+
+.comparing-two-revisions .revisions-tooltip {
+ bottom: 145px;
+}
+
+.revisions-tooltip-arrow {
+ width: 70px;
+ height: 15px;
+ overflow: hidden;
+ position: absolute;
+ left: 0;
+ margin-left: 35px;
+ bottom: -15px;
+}
+
+.revisions-tooltip.flipped .revisions-tooltip-arrow {
+ margin-left: 0;
+ margin-right: 35px;
+ left: auto;
+ right: 0;
+}
+
+.revisions-tooltip-arrow > span {
+ content: "";
+ position: absolute;
+ left: 20px;
+ top: -20px;
+ width: 25px;
+ height: 25px;
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.revisions-tooltip.flipped .revisions-tooltip-arrow > span {
+ left: auto;
+ right: 20px;
+}
+
+.ie8 .revisions-tooltip-arrow > span {
+ left: 15px;
+ top: -25px;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)";
+}
+
+.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow > span {
+ right: 25px;
+}
+
+.revisions-tooltip,
+.revisions-tooltip-arrow > span {
+ border: 1px solid #d7d7d7;
+ background-color: #fff;
+}
+
+.revisions-tooltip {
+ display: none;
+}
+
+.arrow {
+ width: 70px;
+ height: 16px;
+ overflow: hidden;
+ position: absolute;
+ left: 0;
+ margin-left: -35px;
+ bottom: 90px;
+ z-index: 10000;
+}
+
+.arrow:after {
+ z-index: 9999;
+ background-color: #fff;
+ -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
+}
+
+.arrow.top {
+ top: -16px;
+ bottom: auto;
+}
+
+.arrow.left {
+ left: 20%;
+}
+
+.arrow:after {
+ content: "";
+ position: absolute;
+ left: 20px;
+ top: -20px;
+ width: 25px;
+ height: 25px;
+ -webkit-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.revisions-tooltip,
+.revisions-tooltip-arrow:after {
+ border-width: 1px;
+ border-style: solid;
+}
+
+div.revisions-controls > .wp-slider > .ui-slider-handle {
+ margin-left: -10px;
+}
+
+.rtl div.revisions-controls > .wp-slider > .ui-slider-handle {
+ margin-right: -10px;
+}
+
+/* jQuery UI Slider */
+.wp-slider.ui-slider {
+ position: relative;
+ border: 1px solid #d7d7d7;
+ text-align: left;
+ cursor: pointer;
+}
+
+.wp-slider .ui-slider-handle {
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ height: 18px;
+ margin-top: -3px;
+ outline: none;
+ position: absolute;
+ width: 18px;
+ z-index: 2;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.wp-slider .ui-slider-handle,
+.wp-slider .ui-slider-handle.ui-state-hover,
+.wp-slider .ui-slider-handle.focus {
+ background: #2ea2cc;
+ border: 1px solid #0074a2;
+ -webkit-box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15);
+ box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15);
+}
+
+.wp-slider .ui-slider-handle:before {
+ background: none;
+ position: absolute;
+ top: 0;
+ left: 0;
+ color: #fff;
+ content: "\f229";
+ font: normal 18px/1 'dashicons';
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.wp-slider .ui-slider-handle.from-handle:before,
+.wp-slider .ui-slider-handle.to-handle:before {
+ font-size: 20px !important;
+ margin: -1px 0 0 -1px;
+}
+
+.wp-slider .ui-slider-handle.from-handle:before {
+ content: '\f139';
+}
+
+.wp-slider .ui-slider-handle.to-handle:before {
+ content: '\f141';
+}
+
+.rtl .wp-slider .ui-slider-handle.from-handle:before {
+ content: '\f141';
+}
+
+.rtl .wp-slider .ui-slider-handle.to-handle:before {
+ content: '\f139';
+ right: -1px;
+}
+
+.wp-slider .ui-slider-range {
+ position: absolute;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-color: transparent;
+ background-image: none;
+}
+
+.wp-slider.ui-slider-horizontal {
+ height: .7em;
+}
+
+.wp-slider.ui-slider-horizontal .ui-slider-handle {
+ top: -.25em;
+ margin-left: -.6em;
+}
+
+.wp-slider.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+
+.wp-slider.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+
+.wp-slider.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ .revision-tick.completed-false {
+ background-image: url(../images/spinner-2x.gif);
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ #diff-next-revision,
+ #diff-previous-revision {
+ margin-top: -1em;
+ }
+
+ table.diff {
+ -ms-word-break: break-all;
+ word-break: break-all;
+ word-wrap: break-word;
+ }
+}
diff --git a/wp-admin/css/themes-rtl.css b/wp-admin/css/themes-rtl.css
new file mode 100644
index 0000000..d0a66f7
--- /dev/null
+++ b/wp-admin/css/themes-rtl.css
@@ -0,0 +1,1756 @@
+/*------------------------------------------------------------------------------
+ 16.0 - Themes
+------------------------------------------------------------------------------*/
+
+
+/*------------------------------------------------------------------------------
+ 16.1 - Manage Themes
+------------------------------------------------------------------------------*/
+
+.theme-browser .themes {
+ clear: both;
+ padding: 0 0 100px;
+}
+
+.themes-php .wrap h2 {
+ float: right;
+ margin-bottom: 15px;
+}
+
+.network-admin.themes-php .wrap h2 {
+ margin-bottom: 0;
+}
+
+.themes-php .wrap h2 .button {
+ margin-right: 20px;
+}
+
+/* Search form */
+.themes-php .wp-filter-search {
+ position: relative;
+ top: -2px;
+ right: 20px;
+ margin: 0;
+ width: 280px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.5;
+}
+
+/* Position admin messages */
+.themes-php div.updated,
+.themes-php div.error {
+ margin: 0 0 20px 0;
+ clear: both;
+}
+
+.themes-php div.updated a {
+ text-decoration: underline;
+}
+
+/**
+ * Main theme element
+ * (has flexible margins)
+ */
+.theme-browser .theme {
+ cursor: pointer;
+ float: right;
+ margin: 0 0 4% 4%;
+ position: relative;
+ width: 30.6%;
+ border: 1px solid #dedede;
+ -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.ie8 .theme-browser .theme {
+ width: 30%;
+ margin: 0 0 4% 3%;
+}
+
+.theme-browser .theme:nth-child(3n) {
+ margin-left: 0;
+}
+
+.theme-browser .theme:hover,
+.theme-browser .theme:focus {
+ cursor: pointer;
+}
+
+.theme-browser .theme .theme-name {
+ font-size: 15px;
+ font-weight: 600;
+ height: 18px;
+ margin: 0;
+ padding: 15px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1);
+ box-shadow: inset 0 1px 0 rgba(0,0,0,0.1);
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: #fff;
+ background: rgba(255,255,255,0.65);
+}
+
+/* Activate and Customize buttons, shown on hover and focus */
+.theme-browser .theme .theme-actions {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ opacity: 0;
+ -webkit-transition: opacity 0.1s ease-in-out;
+ transition: opacity 0.1s ease-in-out;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ height: 38px;
+ padding: 9px 10px 0 10px;
+ background: rgba(244, 244, 244, 0.7);
+ border-right: 1px solid rgba(0,0,0,0.05);
+}
+
+.theme-browser .theme:hover .theme-actions,
+.theme-browser .theme.focus .theme-actions,
+.theme-browser .theme:focus .theme-actions {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ opacity: 1;
+}
+
+.theme-browser .theme .theme-actions .button-primary {
+ margin-left: 3px;
+}
+
+.theme-browser .theme .theme-actions .button-secondary {
+ float: none;
+ margin-right: 3px;
+}
+
+/**
+ * Theme Screenshot
+ *
+ * Has a fixed aspect ratio of 1.5 to 1 regardless of screenshot size
+ * It is also responsive.
+ */
+.theme-browser .theme .theme-screenshot {
+ display: block;
+ overflow: hidden;
+ position: relative;
+ -webkit-transition: opacity 0.2s ease-in-out;
+ transition: opacity 0.2s ease-in-out;
+}
+
+.theme-browser .theme .theme-screenshot:after {
+ content: '';
+ display: block;
+ padding-top: 66.66666%; /* using a 3/2 aspect ratio */
+}
+
+.theme-browser .theme .theme-screenshot img {
+ height: auto;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 100%;
+ -webkit-transform: translateZ( 0 ); /* Prevents rendering bugs in Chrome */
+ -webkit-transition: opacity 0.2s ease-in-out; /* Prevents rendering bugs in Chrome */
+ transition: opacity 0.2s ease-in-out;
+}
+
+.theme-browser .theme:hover .theme-screenshot,
+.theme-browser .theme:focus .theme-screenshot {
+ background: #fff;
+}
+
+.theme-browser.rendered .theme:hover .theme-screenshot img,
+.theme-browser.rendered .theme:focus .theme-screenshot img {
+ opacity: 0.4;
+}
+
+.theme-browser .theme .more-details {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ opacity: 0;
+ position: absolute;
+ top: 35%;
+ left: 25%;
+ right: 25%;
+ background: #222;
+ background: rgba(0,0,0,0.7);
+ color: #fff;
+ font-size: 15px;
+ text-shadow: 0 1px 0 rgba(0,0,0,0.6);
+ -webkit-font-smoothing: antialiased;
+ font-weight: 600;
+ padding: 15px 12px;
+ text-align: center;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: opacity 0.1s ease-in-out;
+ transition: opacity 0.1s ease-in-out;
+}
+
+.theme-browser .theme:focus {
+ border-color: #5b9dd9;
+ -webkit-box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+ box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+}
+
+.theme-browser .theme:focus .more-details {
+ opacity: 1;
+}
+
+/* Current theme needs to have its action always on view */
+.theme-browser .theme.active:focus .theme-actions {
+ display: block;
+}
+
+.theme-browser.rendered .theme:hover .more-details,
+.theme-browser.rendered .theme:focus .more-details {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ opacity: 1;
+}
+
+/**
+ * Displays a theme update notice
+ * when an update is available.
+ */
+.theme-browser .theme .theme-update,
+.theme-browser .theme .theme-installed {
+ background: #d54e21;
+ background: rgba(213, 78, 33, 0.95);
+ color: #fff;
+ display: block;
+ font-size: 13px;
+ font-weight: 400;
+ height: 48px;
+ line-height: 48px;
+ padding: 0 10px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ border-bottom: 1px solid rgba(0,0,0,0.25);
+ overflow: hidden;
+}
+
+.theme-browser .theme .theme-update:before,
+.theme-browser .theme .theme-installed:before {
+ content: '\f463';
+ display: inline-block;
+ font: normal 20px/1 'dashicons';
+ margin: 0 0 0 6px;
+ opacity: 0.8;
+ position: relative;
+ top: 5px;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+}
+
+
+/**
+ * The currently active theme
+ */
+.theme-browser .theme.active .theme-name {
+ background: #2f2f2f;
+ color: #fff;
+ padding-left: 110px;
+ font-weight: 300;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.5);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.5);
+}
+
+.theme-browser .theme.active .theme-name span {
+ font-weight: 600;
+}
+
+.theme-browser .theme.active .theme-actions {
+ background: rgba(49,49,49,0.7);
+ border-right: none;
+ opacity: 1;
+}
+
+.theme-browser .theme.active .theme-actions .button-primary {
+ margin-left: 0;
+}
+
+.theme-browser .theme .theme-author {
+ background: #222;
+ color: #eee;
+ display: none;
+ font-size: 14px;
+ margin: 0 10px;
+ padding: 5px 10px;
+ position: absolute;
+ bottom: 56px;
+}
+
+.theme-browser .theme.display-author .theme-author {
+ display: block;
+}
+
+.theme-browser .theme.display-author .theme-author a {
+ color: inherit;
+ text-decoration: none;
+}
+
+/**
+ * Add new theme
+ */
+.theme-browser .theme.add-new-theme {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.theme-browser .theme.add-new-theme a {
+ color: #999;
+ text-decoration: none;
+ display: block;
+ position: relative;
+ z-index: 1;
+}
+
+.theme-browser .theme.add-new-theme:after {
+ display: block;
+ content: '';
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ opacity: 1;
+ background: transparent;
+ background: rgba(0, 0, 0, 0);
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ bottom: 0;
+ padding: 10% 0 0 0;
+ text-shadow: none;
+ border: 5px dashed #d5d2ca;
+ border: 5px dashed rgba(0, 0, 0, 0.1);
+ -webkit-transition: opacity 0.2s ease-in-out;
+ transition: opacity 0.2s ease-in-out;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.theme-browser .theme.add-new-theme span:after {
+ background: #e5e5e5;
+ background: rgba(153, 153, 153, 0.1);
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ display: inline-block;
+ content: '\f132';
+ -webkit-font-smoothing: antialiased;
+ font: normal 74px/115px 'dashicons';
+ width: 100px;
+ height: 100px;
+ vertical-align: middle;
+ text-align: center;
+ color: rgb(153, 153, 153);
+ position: absolute;
+ top: 30%;
+ right: 50%;
+ margin-right: -50px;
+ text-indent: -4px;
+ padding: 0;
+ text-shadow: none;
+ z-index:4;
+}
+
+.rtl .theme-browser .theme.add-new-theme span:after {
+ text-indent: 4px;
+}
+
+.theme-browser .theme.add-new-theme:hover .theme-screenshot,
+.theme-browser .theme.add-new-theme:focus .theme-screenshot {
+ background: none;
+}
+
+.theme-browser .theme.add-new-theme:hover span:after,
+.theme-browser .theme.add-new-theme:focus span:after {
+ background: #fff;
+ color: #0074a2;
+}
+
+.theme-browser .theme.add-new-theme:hover:after,
+.theme-browser .theme.add-new-theme:focus:after {
+ border-color: transparent;
+ color: #fff;
+ background: #0074a2;
+ content: '';
+}
+
+.theme-browser .theme.add-new-theme .theme-name {
+ background: none;
+ text-align: center;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ font-weight: 400;
+ position: relative;
+ top: 0;
+ margin-top: -10%;
+ margin-bottom: 10%;
+}
+
+.theme-browser .theme.add-new-theme:hover .theme-name,
+.theme-browser .theme.add-new-theme:focus .theme-name {
+ color: #fff;
+ z-index: 2;
+}
+
+/**
+ * Theme Overlay
+ * Shown when clicking a theme
+ */
+.theme-overlay .theme-backdrop {
+ position: absolute;
+ right: -20px;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ background: #f1f1f1;
+ background: rgba( 238, 238, 238, 0.9 );
+ z-index: 10;
+}
+
+.theme-overlay .theme-header {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ height: 48px;
+ border-bottom: 1px solid #ddd;
+}
+
+.theme-overlay .theme-header .close {
+ cursor: pointer;
+ height: 48px;
+ width: 50px;
+ text-align: center;
+ float: left;
+ border: 0;
+ border-right: 1px solid #ddd;
+ background-color: transparent;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.theme-overlay .theme-header .close:before {
+ font: normal 22px/50px 'dashicons' !important;
+ color: #777;
+ display: inline-block;
+ content: '\f335';
+ font-weight: 300;
+}
+
+/* Left and right navigation */
+.theme-overlay .theme-header .right,
+.theme-overlay .theme-header .left {
+ cursor: pointer;
+ color: #777;
+ background-color: transparent;
+ height: 48px;
+ width: 54px;
+ float: right;
+ text-align: center;
+ border: 0;
+ border-left: 1px solid #ddd;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.theme-overlay .theme-header .close:focus,
+.theme-overlay .theme-header .close:hover,
+.theme-overlay .theme-header .right:focus,
+.theme-overlay .theme-header .right:hover,
+.theme-overlay .theme-header .left:focus,
+.theme-overlay .theme-header .left:hover {
+ background: #ddd;
+ border-color: #ccc;
+ color: #000;
+}
+
+.theme-overlay .theme-header .close:focus:before,
+.theme-overlay .theme-header .close:hover:before {
+ color: #000;
+}
+
+.theme-overlay .theme-header .close:focus,
+.theme-overlay .theme-header .right:focus,
+.theme-overlay .theme-header .left:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ outline: none;
+}
+
+.theme-overlay .theme-header .left.disabled,
+.theme-overlay .theme-header .right.disabled,
+.theme-overlay .theme-header .left.disabled:hover,
+.theme-overlay .theme-header .right.disabled:hover {
+ color: #ccc;
+ background: inherit;
+ cursor: inherit;
+}
+
+.theme-overlay .theme-header .right:before,
+.theme-overlay .theme-header .left:before {
+ font: normal 20px/50px 'dashicons' !important;
+ display: inline;
+ font-weight: 300;
+}
+
+.theme-overlay .theme-header .left:before,
+.rtl .theme-overlay .theme-header .right:before {
+ content: '\f341';
+}
+
+.theme-overlay .theme-header .right:before,
+.rtl .theme-overlay .theme-header .left:before {
+ content: '\f345';
+}
+
+
+
+.theme-overlay .theme-wrap {
+ clear: both;
+ position: fixed;
+ top: 9%;
+ right: 190px;
+ left: 30px;
+ bottom: 3%;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
+ z-index: 20;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.theme-overlay .theme-wrap:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+body.folded .theme-overlay .theme-wrap {
+ right: 70px;
+}
+
+.theme-overlay .theme-about {
+ position: absolute;
+ top: 49px;
+ bottom: 57px;
+ right: 0;
+ left: 0;
+ overflow: auto;
+ padding: 2% 4%;
+}
+.theme-overlay .theme-about:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.theme-overlay .theme-actions {
+ position: absolute;
+ text-align: center;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ padding: 10px 25px 5px;
+ background: #f3f3f3;
+ z-index: 30;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-top: 1px solid #eee;
+}
+
+.ie8 .theme-overlay .theme-actions {
+ border: 1px solid #eee;
+}
+
+.theme-overlay .theme-actions a {
+ margin-left: 5px;
+ margin-bottom: 5px;
+}
+
+/* Hide-if-customize for items we can't add classes to */
+.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"],
+.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"] {
+ display: none;
+}
+
+.broken-themes a.delete-theme,
+.theme-overlay .theme-actions .delete-theme {
+ color: #a00;
+ text-decoration: none;
+ border-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background: transparent;
+}
+
+.theme-overlay .theme-actions .delete-theme {
+ position: absolute;
+ left: 10px;
+ bottom: 5px;
+}
+
+.broken-themes a.delete-theme:hover,
+.broken-themes a.delete-theme:focus,
+.theme-overlay .theme-actions .delete-theme:hover,
+.theme-overlay .theme-actions .delete-theme:focus {
+ background: #d54e21;
+ color: #fff;
+ border-color: #d54e21;
+}
+
+.theme-overlay .theme-actions .active-theme,
+.theme-overlay.active .theme-actions .inactive-theme {
+ display: none;
+}
+
+.theme-overlay .theme-actions .inactive-theme,
+.theme-overlay.active .theme-actions .active-theme {
+ display: block;
+}
+
+/**
+ * Theme Screenshots gallery
+ */
+.theme-overlay .theme-screenshots {
+ float: right;
+ margin: 0 0 0 30px;
+ width: 55%;
+ max-width: 880px;
+ text-align: center;
+}
+
+/* First screenshot, shown big */
+.theme-overlay .screenshot {
+ border: 1px solid #fff;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ position: relative;
+ -webkit-box-shadow: 0 0 0 1px rgba(0,0,0,0.2);
+ box-shadow: 0 0 0 1px rgba(0,0,0,0.2);
+}
+
+.theme-overlay .screenshot:after {
+ content: '';
+ display: block;
+ padding-top: 75%; /* using a 4/3 aspect ratio */
+}
+
+.theme-overlay .screenshot img {
+ height: auto;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 100%;
+}
+/* Handles old 300px screenshots */
+.theme-overlay.small-screenshot .theme-screenshots {
+ position: absolute;
+ width: 302px;
+}
+.theme-overlay.small-screenshot .theme-info {
+ margin-right: 350px;
+ width: auto;
+}
+
+/* Other screenshots, shown small and square */
+.theme-overlay .screenshot.thumb {
+ background: #ccc;
+ border: 1px solid #eee;
+ float: none;
+ display: inline-block;
+ margin: 10px 5px 0;
+ width: 140px;
+ height: 80px;
+ cursor: pointer;
+}
+
+.theme-overlay .screenshot.thumb:after {
+ content: '';
+ display: block;
+ padding-top: 100%; /* using a 1/1 aspect ratio */
+}
+
+.theme-overlay .screenshot.thumb img {
+ cursor: pointer;
+ height: auto;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 100%;
+ height: auto;
+}
+
+.theme-overlay .screenshot.selected {
+ background: transparent;
+ border: 2px solid #2ea2cc;
+}
+
+.theme-overlay .screenshot.selected img {
+ opacity: 0.8;
+}
+
+/* No screenshot placeholder */
+.theme-browser .theme .theme-screenshot.blank,
+.theme-overlay .screenshot.blank {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=);
+}
+
+/**
+ * Theme heading information
+ */
+.theme-overlay .theme-info {
+ width: 40%;
+ float: right;
+}
+
+.theme-overlay .current-label {
+ background: #333;
+ color: #fff;
+ font-size: 11px;
+ display: inline-block;
+ padding: 2px 8px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ margin: 0 0 -10px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.theme-overlay .theme-name {
+ color: #222;
+ font-size: 32px;
+ font-weight: 100;
+ margin: 10px 0 0;
+ line-height: 1.3;
+}
+
+.theme-overlay .theme-version {
+ color: #999;
+ font-size: 13px;
+ font-weight: 400;
+ float: none;
+ display: inline-block;
+ margin-right: 10px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.theme-overlay .theme-author {
+ color: #686868;
+ font-size: 16px;
+ font-weight: 400;
+ margin: 15px 0 25px;
+}
+
+.theme-overlay .theme-author a {
+ text-decoration: none;
+}
+
+.theme-overlay .theme-description {
+ color: #555;
+ font-size: 15px;
+ font-weight: 400;
+ line-height: 1.5;
+ margin: 30px 0 0 0;
+}
+
+.theme-overlay .theme-tags {
+ border-top: 3px solid #eee;
+ color: #888;
+ font-size: 13px;
+ font-weight: 400;
+ margin: 30px 0 0 0;
+ padding-top: 20px;
+}
+
+.theme-overlay .theme-tags span {
+ color: #444;
+ font-weight: bold;
+ margin-left: 5px;
+}
+
+/* Theme Updates info */
+.theme-overlay .theme-update-message {
+ background: #fef7f1;
+ border: 1px solid #eee;
+ border-right: 4px solid #d54e21;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ padding: 5px 20px 10px;
+}
+
+.theme-overlay .theme-update {
+ color: #222;
+ font-size: 18px;
+ display: inline-block;
+ line-height: 40px;
+ margin: 0;
+}
+
+.theme-overlay .parent-theme {
+ background: #f7fcfe;
+ border: 1px solid #eee;
+ border-right: 4px solid #2ea2cc;
+ font-size: 14px;
+ font-weight: normal;
+ margin-top: 30px;
+ padding: 10px 20px 10px 10px;
+}
+
+.theme-overlay .parent-theme strong {
+ font-weight: 700;
+}
+
+/**
+ * Single Theme Mode
+ * Displays detailed view inline when a user has no switch capabilities
+ */
+.single-theme .theme-overlay .theme-backdrop,
+.single-theme .theme-overlay .theme-header,
+.single-theme .theme {
+ display: none;
+}
+
+.single-theme .theme-overlay .theme-wrap {
+ clear: both;
+ min-height: 330px;
+ position: relative;
+ right: auto;
+ left: auto;
+ top: auto;
+ bottom: auto;
+}
+
+.single-theme .theme-overlay .theme-about {
+ padding: 30px 30px 70px;
+ position: static;
+}
+
+.single-theme .theme-overlay .theme-actions {
+ position: absolute;
+}
+
+/**
+ * Basic Responsive structure...
+ *
+ * Shuffles theme columns around based on screen width
+ */
+
+@media only screen and (min-width: 2000px) {
+ #wpwrap .theme-browser .theme {
+ width: 17.6%;
+ margin: 0 0 3% 3%;
+ }
+
+ #wpwrap .theme-browser .theme:nth-child(3n),
+ #wpwrap .theme-browser .theme:nth-child(4n) {
+ margin-left: 3%;
+ }
+
+ #wpwrap .theme-browser .theme:nth-child(5n) {
+ margin-left: 0;
+ }
+}
+
+@media only screen and (min-width: 1680px) {
+ .theme-overlay .theme-wrap {
+ width: 1450px;
+ margin: 0 auto;
+ }
+}
+
+/* Maximum screenshot width reaches 440px */
+@media only screen and (min-width: 1640px) {
+ .theme-browser .theme {
+ width: 22.7%;
+ margin: 0 0 3% 3%;
+ }
+ .theme-browser .theme .theme-screenshot:after {
+ padding-top: 75%; /* using a 4/3 aspect ratio */
+ }
+
+ .theme-browser .theme:nth-child(3n) {
+ margin-left: 3%;
+ }
+
+ .theme-browser .theme:nth-child(4n) {
+ margin-left: 0;
+ }
+}
+/* Maximum screenshot width reaches 440px */
+@media only screen and (max-width: 1120px) {
+ .theme-browser .theme {
+ width: 47.5%;
+ margin-left: 0;
+ }
+
+ .theme-browser .theme:nth-child(even) {
+ margin-left: 0;
+ }
+
+ .theme-browser .theme:nth-child(odd) {
+ margin-left: 5%;
+ }
+}
+
+/* Admin menu is folded */
+@media only screen and (max-width: 900px) {
+ .theme-overlay .theme-wrap {
+ right: 65px;
+ }
+}
+
+@media only screen and (max-width: 780px) {
+ body.folded .theme-overlay .theme-wrap,
+ .theme-overlay .theme-wrap {
+ top: 0; /* The adminmenu isn't fixed on mobile, so this can use the full viewport height */
+ left: 0;
+ bottom: 0;
+ right: 0;
+ padding: 70px 20px 20px;
+ border: none;
+ z-index: 500; /* should overlap #wpadminbar, which is 500 on mobile. */
+ position: fixed;
+ }
+
+ .theme-browser .theme.active .theme-name span {
+ /* Hide the "Active: " label on smaller screens. */
+ display: none;
+ }
+
+ .theme-overlay .theme-screenshots {
+ width: 40%;
+ }
+
+ .theme-overlay .theme-info {
+ width: 50%;
+ }
+ .single-theme .theme-wrap {
+ padding: 10px;
+ }
+
+ .theme-browser .theme .theme-actions {
+ padding: 5px 10px 4px 10px;
+ }
+
+ .theme-overlay.small-screenshot .theme-screenshots {
+ position: static;
+ float: none;
+ max-width: 302px;
+ }
+
+ .theme-overlay.small-screenshot .theme-info {
+ margin-right: 0;
+ width: auto;
+ }
+
+ .theme:not(.active):hover .theme-actions,
+ .theme:not(.active):focus .theme-actions,
+ .theme:hover .more-details,
+ .theme:focus .more-details {
+ display: none;
+ }
+
+ .theme-browser.rendered .theme:hover .theme-screenshot img,
+ .theme-browser.rendered .theme:focus .theme-screenshot img {
+ opacity: 1.0;
+ }
+}
+
+@media only screen and (max-width: 480px) {
+ .theme-browser .theme {
+ width: 100%;
+ margin-left: 0;
+ }
+
+ .theme-browser .theme:nth-child(2n),
+ .theme-browser .theme:nth-child(3n) {
+ margin-left: 0;
+ }
+}
+
+@media only screen and (max-width: 650px) {
+ .theme-overlay .theme-update,
+ .theme-overlay .theme-description {
+ margin-right: 0;
+ }
+
+ .theme-overlay .theme-actions .delete-theme {
+ position: relative;
+ left: auto;
+ bottom: auto;
+ }
+
+ .theme-overlay .theme-actions .inactive-theme {
+ display: inline;
+ }
+
+ .theme-overlay .theme-screenshots {
+ width: 100%;
+ float: none;
+ }
+
+ .theme-overlay .theme-info {
+ width: 100%;
+ }
+
+ .theme-overlay .theme-author {
+ margin: 5px 0 15px 0;
+ }
+
+ .theme-overlay .current-label {
+ margin-top: 10px;
+ font-size: 13px;
+ }
+
+ .themes-php .wrap h2 {
+ width: 100%;
+ }
+
+ .themes-php .wp-filter-search {
+ float: none;
+ clear: both;
+ right: 0;
+ top: 0;
+ left: 0;
+ margin: 10px 0;
+ width: 100%;
+ max-width: 280px;
+ }
+
+ .theme-browser .theme.add-new-theme span:after {
+ font: normal 60px/90px 'dashicons';
+ width: 80px;
+ height: 80px;
+ top: 30%;
+ right: 50%;
+ text-indent: 0;
+ margin-right: -40px;
+ }
+
+ .single-theme .theme-wrap {
+ margin: 0 -10px 0 -12px;
+ padding: 10px;
+ }
+ .single-theme .theme-overlay .theme-about {
+ padding: 10px;
+ overflow: visible;
+ }
+ .single-theme .current-label {
+ display: none;
+ }
+ .single-theme .theme-overlay .theme-actions {
+ position: static;
+ }
+}
+
+.broken-themes {
+ clear: both;
+}
+
+.broken-themes table {
+ text-align: right;
+ width: 50%;
+ border-spacing: 3px;
+ padding: 3px;
+}
+
+
+/*------------------------------------------------------------------------------
+ 16.2 - Install Themes
+------------------------------------------------------------------------------*/
+
+/* Already installed theme */
+.theme-browser .theme .theme-installed {
+ background: #0074a2;
+}
+.theme-browser .theme .theme-installed:before {
+ content: '\f147';
+}
+.theme-browser .theme.is-installed .theme-actions .button-primary {
+ display: none !important;
+}
+
+.theme-install-php a.upload,
+.theme-install-php a.browse-themes {
+ cursor: pointer;
+}
+.theme-install-php a.browse-themes,
+.theme-install-php.show-upload-theme a.upload {
+ display: none;
+}
+.theme-install-php.show-upload-theme a.browse-themes {
+ display: inline;
+}
+.upload-theme,
+.upload-plugin {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: none;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+ top: 10px;
+}
+body.show-upload-theme .upload-theme,
+.upload-plugin {
+ display: block;
+}
+.upload-theme .wp-upload-form,
+.upload-plugin .wp-upload-form {
+ background: #fafafa;
+ border: 1px solid #e5e5e5;
+ padding: 30px;
+ margin: 30px auto;
+ max-width: 380px;
+}
+.upload-theme .install-help,
+.upload-plugin .install-help {
+ color: #999;
+ font-size: 18px;
+ font-style: normal;
+ margin: 0;
+ padding: 40px 0 0;
+ text-align: center;
+}
+body.show-upload-theme .upload-theme + .wp-filter,
+body.show-upload-theme .upload-theme + .wp-filter + .theme-browser {
+ display: none;
+}
+
+p.no-themes {
+ color: #999;
+ font-size: 18px;
+ font-style: normal;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+ display: none;
+}
+body.no-results p.no-themes {
+ display: block;
+}
+body.show-upload-theme p.no-themes {
+ display: none !important;
+}
+
+.theme-install-php .add-new-theme {
+ display: none !important;
+}
+
+@media only screen and (max-width: 1120px) {
+ .upload-theme .wp-upload-form {
+ margin: 20px 0;
+ max-width: 100%;
+ }
+ .upload-theme .install-help {
+ font-size: 15px;
+ padding: 20px 0 0;
+ text-align: right;
+ }
+}
+
+.rating {
+ margin: 15px 0 0;
+}
+.rating span:before {
+ color: #e6b800;
+ content: "\f154";
+ display: inline-block;
+ -webkit-font-smoothing: antialiased;
+ font: normal 20px/1 'dashicons';
+ vertical-align: top;
+}
+/* Half stars */
+.rating-10 span.one:before,
+.rating-30 span.two:before,
+.rating-50 span.three:before,
+.rating-70 span.four:before,
+.rating-90 span.five:before {
+ content: "\f459";
+}
+/* Full stars */
+.rating-20 span.one:before {
+ content: "\f155";
+}
+.rating-30 span.one:before,
+.rating-40 span.one:before,
+.rating-40 span.two:before {
+ content: "\f155";
+}
+.rating-50 span.one:before,
+.rating-50 span.two:before,
+.rating-60 span.one:before,
+.rating-60 span.two:before,
+.rating-60 span.three:before {
+ content: "\f155";
+}
+.rating-70 span.one:before,
+.rating-70 span.two:before,
+.rating-70 span.three:before,
+.rating-80 span.one:before,
+.rating-80 span.two:before,
+.rating-80 span.three:before,
+.rating-80 span.four:before {
+ content: "\f155";
+}
+.rating-90 span.one:before,
+.rating-90 span.two:before,
+.rating-90 span.three:before,
+.rating-90 span.four:before,
+.rating-100 span.one:before,
+.rating-100 span.two:before,
+.rating-100 span.three:before,
+.rating-100 span.four:before,
+.rating-100 span.five:before {
+ content: "\f155";
+}
+.rating .ratings {
+ display: block;
+ line-height: 20px;
+ color: #999;
+}
+
+/*------------------------------------------------------------------------------
+ 16.3 - Custom Header Screen
+------------------------------------------------------------------------------*/
+
+.appearance_page_custom-header #headimg {
+ border: 1px solid #DFDFDF;
+ overflow: hidden;
+ width: 100%;
+}
+
+.appearance_page_custom-header #upload-form p label {
+ font-size: 12px;
+}
+
+.appearance_page_custom-header .available-headers .default-header {
+ float: right;
+ margin: 0 0 20px 20px;
+}
+
+.appearance_page_custom-header .random-header {
+ clear: both;
+ margin: 0 0 20px 20px;
+ vertical-align: middle;
+}
+
+.appearance_page_custom-header .available-headers label input,
+.appearance_page_custom-header .random-header label input {
+ margin-left: 10px;
+}
+
+.appearance_page_custom-header .available-headers label img {
+ vertical-align: middle;
+}
+
+
+/*------------------------------------------------------------------------------
+ 16.4 - Custom Background Screen
+------------------------------------------------------------------------------*/
+
+div#custom-background-image {
+ min-height: 100px;
+ border: 1px solid #dfdfdf;
+}
+
+div#custom-background-image img {
+ max-width: 400px;
+ max-height: 300px;
+}
+
+/*------------------------------------------------------------------------------
+ 23.0 - Full Overlay w/ Sidebar
+------------------------------------------------------------------------------*/
+
+body.full-overlay-active {
+ overflow: hidden;
+}
+
+.wp-full-overlay {
+ background: transparent;
+ z-index: 500000;
+ position: fixed;
+ overflow: visible;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ height: 100%;
+ min-width: 0;
+}
+
+.wp-full-overlay-sidebar {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: fixed;
+ width: 300px;
+ height: 100%;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ padding: 0;
+ margin: 0;
+ z-index: 10;
+ background: #eee;
+ border-left: none;
+}
+
+.wp-full-overlay.collapsed .wp-full-overlay-sidebar {
+ overflow: visible;
+}
+
+.wp-full-overlay.collapsed,
+.wp-full-overlay.expanded .wp-full-overlay-sidebar {
+ margin-right: 0 !important;
+}
+
+.wp-full-overlay.expanded {
+ margin-right: 300px;
+}
+
+.wp-full-overlay.collapsed .wp-full-overlay-sidebar {
+ margin-right: -300px;
+}
+
+.wp-full-overlay-sidebar:after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 3px;
+ z-index: 1000;
+}
+
+.wp-full-overlay-main {
+ position: absolute;
+ right: 0;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ height: 100%;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-header {
+ position: absolute;
+ right: 0;
+ left: 0;
+ height: 45px;
+ padding: 0 15px;
+ line-height: 45px;
+ z-index: 10;
+ margin: 0;
+ border-top: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-header a.back {
+ margin-top: 9px;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-footer {
+ bottom: 0;
+ border-bottom: none;
+ border-top: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content {
+ position: absolute;
+ top: 45px;
+ bottom: 45px;
+ right: 0;
+ left: 0;
+ overflow: auto;
+}
+
+/* Close & Navigation Links */
+.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header {
+ padding: 0;
+}
+
+.theme-install-overlay .close-full-overlay,
+.theme-install-overlay .previous-theme,
+.theme-install-overlay .next-theme {
+ display: block;
+ position: relative;
+ float: right;
+ width: 45px;
+ height: 45px;
+ padding-left: 2px;
+ background: #eee;
+ border-left: 1px solid #ddd;
+ color: #444;
+ cursor: pointer;
+ text-decoration: none;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.theme-install-overlay .close-full-overlay:hover,
+.theme-install-overlay .close-full-overlay:focus,
+.theme-install-overlay .previous-theme:hover,
+.theme-install-overlay .previous-theme:focus,
+.theme-install-overlay .next-theme:hover,
+.theme-install-overlay .next-theme:focus {
+ background: #ddd;
+ border-color: #ccc;
+ color: #000;
+ outline: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.theme-install-overlay .close-full-overlay:before {
+ font: normal 22px/1 dashicons;
+ content: "\f335";
+ position: relative;
+ top: 7px;
+ right: 13px;
+}
+
+.theme-install-overlay .previous-theme:before {
+ font: normal 20px/1 dashicons;
+ content: "\f341";
+ position: relative;
+ top: 6px;
+ right: 14px;
+}
+
+.theme-install-overlay .next-theme:before {
+ font: normal 20px/1 dashicons;
+ content: "\f345";
+ position: relative;
+ top: 6px;
+ right: 13px;
+}
+
+.theme-install-overlay .previous-theme.disabled,
+.theme-install-overlay .next-theme.disabled,
+.theme-install-overlay .previous-theme.disabled:hover,
+.theme-install-overlay .previous-theme.disabled:focus,
+.theme-install-overlay .next-theme.disabled:hover,
+.theme-install-overlay .next-theme.disabled:focus {
+ color: #bbb;
+ background: #eee;
+ cursor: default;
+ pointer-events: none;
+}
+
+.rtl .theme-install-overlay .previous-theme:before {
+ content: "\f345";
+}
+
+.rtl .theme-install-overlay .next-theme:before {
+ content: "\f341";
+}
+
+/* Collapse Button */
+.wp-full-overlay a.collapse-sidebar {
+ position: absolute;
+ bottom: 12px;
+ right: 0;
+ z-index: 50;
+ display: block;
+ width: 19px;
+ height: 19px;
+ margin-right: 15px;
+ padding: 0;
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ color: #777;
+ text-decoration: none;
+}
+
+.wp-full-overlay a.collapse-sidebar:hover {
+ color: #0074a2;
+}
+
+.wp-full-overlay.collapsed .collapse-sidebar {
+ position: absolute;
+ right: 100%;
+}
+
+.wp-full-overlay .collapse-sidebar-arrow {
+ position: static;
+ margin-top: 0;
+ margin-right: 0;
+ display: block;
+ width: auto;
+ height: auto;
+ background: none;
+}
+
+.wp-full-overlay .collapse-sidebar-arrow:before {
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ float: right;
+ content: "\f148";
+ background: #eee;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+}
+
+.wp-full-overlay.collapsed .collapse-sidebar-arrow:before,
+.rtl .wp-full-overlay .collapse-sidebar-arrow:before {
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+}
+
+.wp-full-overlay.collapsed .collapse-sidebar-arrow {
+ background-position: -1px -109px;
+}
+
+.wp-full-overlay .collapse-sidebar-label {
+ position: absolute;
+ right: 100%;
+ line-height: 20px;
+ margin-right: 10px;
+}
+
+.wp-full-overlay.collapsed .collapse-sidebar-label {
+ display: none;
+}
+
+/* Animations */
+.wp-full-overlay,
+.wp-full-overlay-sidebar,
+.wp-full-overlay .collapse-sidebar,
+.wp-full-overlay-main {
+ -webkit-transition-property: right, left, top, bottom, width, margin;
+ transition-property: right, left, top, bottom, width, margin;
+ -webkit-transition-duration: 0.2s;
+ transition-duration: 0.2s;
+}
+
+/*------------------------------------------------------------------------------
+ 24.0 - Customize Loader
+------------------------------------------------------------------------------*/
+
+.no-customize-support .hide-if-no-customize,
+.customize-support .hide-if-customize,
+.no-customize-support.wp-core-ui .hide-if-no-customize,
+.no-customize-support .wp-core-ui .hide-if-no-customize,
+.customize-support.wp-core-ui .hide-if-customize,
+.customize-support .wp-core-ui .hide-if-customize {
+ display: none;
+}
+
+#customize-container {
+ display: none;
+ background: #fff;
+ z-index: 500000;
+ position: fixed;
+ overflow: visible;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ height: 100%;
+}
+
+.customize-active #customize-container {
+ display: block;
+}
+
+.customize-loading #customize-container iframe {
+ opacity: 0;
+}
+
+.customize-loading #customize-container {
+ background: #fff url(../images/spinner.gif) no-repeat fixed center center;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+}
+
+#customize-container iframe,
+.theme-install-overlay iframe {
+ height: 100%;
+ width: 100%;
+ z-index: 20;
+ -webkit-transition: opacity 0.3s;
+ transition: opacity 0.3s;
+}
+
+#customize-container .collapse-sidebar {
+ bottom: 16px;
+}
+
+#customize-controls {
+ margin-top: 0;
+}
+
+.theme-install-overlay {
+ display: none;
+}
+
+.theme-install-overlay.single-theme {
+ display: block;
+}
+
+.install-theme-info {
+ display: none;
+ padding: 10px 20px 60px;
+}
+
+.single-theme .install-theme-info {
+ padding-top: 15px;
+}
+
+.theme-install-overlay .install-theme-info {
+ display: block;
+}
+
+.install-theme-info .theme-install {
+ float: left;
+ margin-top: 18px;
+}
+
+.install-theme-info .theme-name {
+ font-size: 16px;
+ line-height: 24px;
+ margin-bottom: 0;
+ margin-top: 0;
+}
+
+.install-theme-info .theme-screenshot {
+ margin-top: 15px;
+ width: 258px;
+ border: 1px solid #ccc;
+}
+
+.install-theme-info .theme-details {
+ overflow: hidden;
+}
+
+.theme-details .theme-version {
+ margin: 15px 0;
+ float: right;
+}
+
+.theme-details .star-rating {
+ margin: 7px 0;
+ float: left;
+}
+
+.theme-details .theme-description {
+ float: right;
+ color: #777;
+ line-height: 20px;
+ max-width: 100%;
+}
+
+.theme-install-overlay .wp-full-overlay-header .theme-install {
+ float: left;
+ margin: 8px 0 0 10px;
+ /* For when .theme-install is a span rather than a.button-primary (already installed theme) */
+ line-height: 26px;
+}
+
+.theme-install-overlay .wp-full-overlay-sidebar {
+ background: #eee;
+ border-left: 1px solid #ddd;
+}
+
+.theme-install-overlay .wp-full-overlay-sidebar-content {
+ background: #fff;
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+}
+
+.theme-install-overlay .wp-full-overlay-main {
+ background: #fff url(../images/spinner.gif) no-repeat center center;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ .wp-full-overlay .collapse-sidebar-arrow {
+ background-image: url(../images/arrows-2x.png);
+ -webkit-background-size: 15px 123px;
+ background-size: 15px 123px;
+ }
+
+ .customize-loading #customize-container,
+ .theme-install-overlay .wp-full-overlay-main {
+ background-image: url(../images/spinner-2x.gif);
+ }
+
+ .theme-install-overlay .wp-full-overlay-header .theme-install {
+ margin-top: 2px;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ .available-theme .action-links .delete-theme {
+ float: none;
+ margin: 0;
+ padding: 0;
+ clear: both;
+ }
+
+ .available-theme .action-links .delete-theme a {
+ padding: 0;
+ }
+
+ .broken-themes table {
+ width: 100%;
+ }
+
+ .theme-install-overlay .wp-full-overlay-header .theme-install {
+ margin-top: 6px;
+ line-height: normal;
+ }
+}
diff --git a/wp-admin/css/themes.css b/wp-admin/css/themes.css
new file mode 100644
index 0000000..ee0b4a8
--- /dev/null
+++ b/wp-admin/css/themes.css
@@ -0,0 +1,1756 @@
+/*------------------------------------------------------------------------------
+ 16.0 - Themes
+------------------------------------------------------------------------------*/
+
+
+/*------------------------------------------------------------------------------
+ 16.1 - Manage Themes
+------------------------------------------------------------------------------*/
+
+.theme-browser .themes {
+ clear: both;
+ padding: 0 0 100px;
+}
+
+.themes-php .wrap h2 {
+ float: left;
+ margin-bottom: 15px;
+}
+
+.network-admin.themes-php .wrap h2 {
+ margin-bottom: 0;
+}
+
+.themes-php .wrap h2 .button {
+ margin-left: 20px;
+}
+
+/* Search form */
+.themes-php .wp-filter-search {
+ position: relative;
+ top: -2px;
+ left: 20px;
+ margin: 0;
+ width: 280px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.5;
+}
+
+/* Position admin messages */
+.themes-php div.updated,
+.themes-php div.error {
+ margin: 0 0 20px 0;
+ clear: both;
+}
+
+.themes-php div.updated a {
+ text-decoration: underline;
+}
+
+/**
+ * Main theme element
+ * (has flexible margins)
+ */
+.theme-browser .theme {
+ cursor: pointer;
+ float: left;
+ margin: 0 4% 4% 0;
+ position: relative;
+ width: 30.6%;
+ border: 1px solid #dedede;
+ -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.ie8 .theme-browser .theme {
+ width: 30%;
+ margin: 0 3% 4% 0;
+}
+
+.theme-browser .theme:nth-child(3n) {
+ margin-right: 0;
+}
+
+.theme-browser .theme:hover,
+.theme-browser .theme:focus {
+ cursor: pointer;
+}
+
+.theme-browser .theme .theme-name {
+ font-size: 15px;
+ font-weight: 600;
+ height: 18px;
+ margin: 0;
+ padding: 15px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1);
+ box-shadow: inset 0 1px 0 rgba(0,0,0,0.1);
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ background: #fff;
+ background: rgba(255,255,255,0.65);
+}
+
+/* Activate and Customize buttons, shown on hover and focus */
+.theme-browser .theme .theme-actions {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ opacity: 0;
+ -webkit-transition: opacity 0.1s ease-in-out;
+ transition: opacity 0.1s ease-in-out;
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ height: 38px;
+ padding: 9px 10px 0 10px;
+ background: rgba(244, 244, 244, 0.7);
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.theme-browser .theme:hover .theme-actions,
+.theme-browser .theme.focus .theme-actions,
+.theme-browser .theme:focus .theme-actions {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ opacity: 1;
+}
+
+.theme-browser .theme .theme-actions .button-primary {
+ margin-right: 3px;
+}
+
+.theme-browser .theme .theme-actions .button-secondary {
+ float: none;
+ margin-left: 3px;
+}
+
+/**
+ * Theme Screenshot
+ *
+ * Has a fixed aspect ratio of 1.5 to 1 regardless of screenshot size
+ * It is also responsive.
+ */
+.theme-browser .theme .theme-screenshot {
+ display: block;
+ overflow: hidden;
+ position: relative;
+ -webkit-transition: opacity 0.2s ease-in-out;
+ transition: opacity 0.2s ease-in-out;
+}
+
+.theme-browser .theme .theme-screenshot:after {
+ content: '';
+ display: block;
+ padding-top: 66.66666%; /* using a 3/2 aspect ratio */
+}
+
+.theme-browser .theme .theme-screenshot img {
+ height: auto;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ -webkit-transform: translateZ( 0 ); /* Prevents rendering bugs in Chrome */
+ -webkit-transition: opacity 0.2s ease-in-out; /* Prevents rendering bugs in Chrome */
+ transition: opacity 0.2s ease-in-out;
+}
+
+.theme-browser .theme:hover .theme-screenshot,
+.theme-browser .theme:focus .theme-screenshot {
+ background: #fff;
+}
+
+.theme-browser.rendered .theme:hover .theme-screenshot img,
+.theme-browser.rendered .theme:focus .theme-screenshot img {
+ opacity: 0.4;
+}
+
+.theme-browser .theme .more-details {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ opacity: 0;
+ position: absolute;
+ top: 35%;
+ right: 25%;
+ left: 25%;
+ background: #222;
+ background: rgba(0,0,0,0.7);
+ color: #fff;
+ font-size: 15px;
+ text-shadow: 0 1px 0 rgba(0,0,0,0.6);
+ -webkit-font-smoothing: antialiased;
+ font-weight: 600;
+ padding: 15px 12px;
+ text-align: center;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: opacity 0.1s ease-in-out;
+ transition: opacity 0.1s ease-in-out;
+}
+
+.theme-browser .theme:focus {
+ border-color: #5b9dd9;
+ -webkit-box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+ box-shadow: 0 0 2px rgba( 30, 140, 190, 0.8 );
+}
+
+.theme-browser .theme:focus .more-details {
+ opacity: 1;
+}
+
+/* Current theme needs to have its action always on view */
+.theme-browser .theme.active:focus .theme-actions {
+ display: block;
+}
+
+.theme-browser.rendered .theme:hover .more-details,
+.theme-browser.rendered .theme:focus .more-details {
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ opacity: 1;
+}
+
+/**
+ * Displays a theme update notice
+ * when an update is available.
+ */
+.theme-browser .theme .theme-update,
+.theme-browser .theme .theme-installed {
+ background: #d54e21;
+ background: rgba(213, 78, 33, 0.95);
+ color: #fff;
+ display: block;
+ font-size: 13px;
+ font-weight: 400;
+ height: 48px;
+ line-height: 48px;
+ padding: 0 10px;
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ border-bottom: 1px solid rgba(0,0,0,0.25);
+ overflow: hidden;
+}
+
+.theme-browser .theme .theme-update:before,
+.theme-browser .theme .theme-installed:before {
+ content: '\f463';
+ display: inline-block;
+ font: normal 20px/1 'dashicons';
+ margin: 0 6px 0 0;
+ opacity: 0.8;
+ position: relative;
+ top: 5px;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+}
+
+
+/**
+ * The currently active theme
+ */
+.theme-browser .theme.active .theme-name {
+ background: #2f2f2f;
+ color: #fff;
+ padding-right: 110px;
+ font-weight: 300;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.5);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.5);
+}
+
+.theme-browser .theme.active .theme-name span {
+ font-weight: 600;
+}
+
+.theme-browser .theme.active .theme-actions {
+ background: rgba(49,49,49,0.7);
+ border-left: none;
+ opacity: 1;
+}
+
+.theme-browser .theme.active .theme-actions .button-primary {
+ margin-right: 0;
+}
+
+.theme-browser .theme .theme-author {
+ background: #222;
+ color: #eee;
+ display: none;
+ font-size: 14px;
+ margin: 0 10px;
+ padding: 5px 10px;
+ position: absolute;
+ bottom: 56px;
+}
+
+.theme-browser .theme.display-author .theme-author {
+ display: block;
+}
+
+.theme-browser .theme.display-author .theme-author a {
+ color: inherit;
+ text-decoration: none;
+}
+
+/**
+ * Add new theme
+ */
+.theme-browser .theme.add-new-theme {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.theme-browser .theme.add-new-theme a {
+ color: #999;
+ text-decoration: none;
+ display: block;
+ position: relative;
+ z-index: 1;
+}
+
+.theme-browser .theme.add-new-theme:after {
+ display: block;
+ content: '';
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ opacity: 1;
+ background: transparent;
+ background: rgba(0, 0, 0, 0);
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ padding: 10% 0 0 0;
+ text-shadow: none;
+ border: 5px dashed #d5d2ca;
+ border: 5px dashed rgba(0, 0, 0, 0.1);
+ -webkit-transition: opacity 0.2s ease-in-out;
+ transition: opacity 0.2s ease-in-out;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.theme-browser .theme.add-new-theme span:after {
+ background: #e5e5e5;
+ background: rgba(153, 153, 153, 0.1);
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ display: inline-block;
+ content: '\f132';
+ -webkit-font-smoothing: antialiased;
+ font: normal 74px/115px 'dashicons';
+ width: 100px;
+ height: 100px;
+ vertical-align: middle;
+ text-align: center;
+ color: rgb(153, 153, 153);
+ position: absolute;
+ top: 30%;
+ left: 50%;
+ margin-left: -50px;
+ text-indent: -4px;
+ padding: 0;
+ text-shadow: none;
+ z-index:4;
+}
+
+.rtl .theme-browser .theme.add-new-theme span:after {
+ text-indent: 4px;
+}
+
+.theme-browser .theme.add-new-theme:hover .theme-screenshot,
+.theme-browser .theme.add-new-theme:focus .theme-screenshot {
+ background: none;
+}
+
+.theme-browser .theme.add-new-theme:hover span:after,
+.theme-browser .theme.add-new-theme:focus span:after {
+ background: #fff;
+ color: #0074a2;
+}
+
+.theme-browser .theme.add-new-theme:hover:after,
+.theme-browser .theme.add-new-theme:focus:after {
+ border-color: transparent;
+ color: #fff;
+ background: #0074a2;
+ content: '';
+}
+
+.theme-browser .theme.add-new-theme .theme-name {
+ background: none;
+ text-align: center;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ font-weight: 400;
+ position: relative;
+ top: 0;
+ margin-top: -10%;
+ margin-bottom: 10%;
+}
+
+.theme-browser .theme.add-new-theme:hover .theme-name,
+.theme-browser .theme.add-new-theme:focus .theme-name {
+ color: #fff;
+ z-index: 2;
+}
+
+/**
+ * Theme Overlay
+ * Shown when clicking a theme
+ */
+.theme-overlay .theme-backdrop {
+ position: absolute;
+ left: -20px;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ background: #f1f1f1;
+ background: rgba( 238, 238, 238, 0.9 );
+ z-index: 10;
+}
+
+.theme-overlay .theme-header {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 48px;
+ border-bottom: 1px solid #ddd;
+}
+
+.theme-overlay .theme-header .close {
+ cursor: pointer;
+ height: 48px;
+ width: 50px;
+ text-align: center;
+ float: right;
+ border: 0;
+ border-left: 1px solid #ddd;
+ background-color: transparent;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.theme-overlay .theme-header .close:before {
+ font: normal 22px/50px 'dashicons' !important;
+ color: #777;
+ display: inline-block;
+ content: '\f335';
+ font-weight: 300;
+}
+
+/* Left and right navigation */
+.theme-overlay .theme-header .right,
+.theme-overlay .theme-header .left {
+ cursor: pointer;
+ color: #777;
+ background-color: transparent;
+ height: 48px;
+ width: 54px;
+ float: left;
+ text-align: center;
+ border: 0;
+ border-right: 1px solid #ddd;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.theme-overlay .theme-header .close:focus,
+.theme-overlay .theme-header .close:hover,
+.theme-overlay .theme-header .right:focus,
+.theme-overlay .theme-header .right:hover,
+.theme-overlay .theme-header .left:focus,
+.theme-overlay .theme-header .left:hover {
+ background: #ddd;
+ border-color: #ccc;
+ color: #000;
+}
+
+.theme-overlay .theme-header .close:focus:before,
+.theme-overlay .theme-header .close:hover:before {
+ color: #000;
+}
+
+.theme-overlay .theme-header .close:focus,
+.theme-overlay .theme-header .right:focus,
+.theme-overlay .theme-header .left:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ outline: none;
+}
+
+.theme-overlay .theme-header .left.disabled,
+.theme-overlay .theme-header .right.disabled,
+.theme-overlay .theme-header .left.disabled:hover,
+.theme-overlay .theme-header .right.disabled:hover {
+ color: #ccc;
+ background: inherit;
+ cursor: inherit;
+}
+
+.theme-overlay .theme-header .right:before,
+.theme-overlay .theme-header .left:before {
+ font: normal 20px/50px 'dashicons' !important;
+ display: inline;
+ font-weight: 300;
+}
+
+.theme-overlay .theme-header .left:before,
+.rtl .theme-overlay .theme-header .right:before {
+ content: '\f341';
+}
+
+.theme-overlay .theme-header .right:before,
+.rtl .theme-overlay .theme-header .left:before {
+ content: '\f345';
+}
+
+
+
+.theme-overlay .theme-wrap {
+ clear: both;
+ position: fixed;
+ top: 9%;
+ left: 190px;
+ right: 30px;
+ bottom: 3%;
+ background: #fff;
+ -webkit-box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
+ z-index: 20;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.theme-overlay .theme-wrap:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+body.folded .theme-overlay .theme-wrap {
+ left: 70px;
+}
+
+.theme-overlay .theme-about {
+ position: absolute;
+ top: 49px;
+ bottom: 57px;
+ left: 0;
+ right: 0;
+ overflow: auto;
+ padding: 2% 4%;
+}
+.theme-overlay .theme-about:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.theme-overlay .theme-actions {
+ position: absolute;
+ text-align: center;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding: 10px 25px 5px;
+ background: #f3f3f3;
+ z-index: 30;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border-top: 1px solid #eee;
+}
+
+.ie8 .theme-overlay .theme-actions {
+ border: 1px solid #eee;
+}
+
+.theme-overlay .theme-actions a {
+ margin-right: 5px;
+ margin-bottom: 5px;
+}
+
+/* Hide-if-customize for items we can't add classes to */
+.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"],
+.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"] {
+ display: none;
+}
+
+.broken-themes a.delete-theme,
+.theme-overlay .theme-actions .delete-theme {
+ color: #a00;
+ text-decoration: none;
+ border-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ background: transparent;
+}
+
+.theme-overlay .theme-actions .delete-theme {
+ position: absolute;
+ right: 10px;
+ bottom: 5px;
+}
+
+.broken-themes a.delete-theme:hover,
+.broken-themes a.delete-theme:focus,
+.theme-overlay .theme-actions .delete-theme:hover,
+.theme-overlay .theme-actions .delete-theme:focus {
+ background: #d54e21;
+ color: #fff;
+ border-color: #d54e21;
+}
+
+.theme-overlay .theme-actions .active-theme,
+.theme-overlay.active .theme-actions .inactive-theme {
+ display: none;
+}
+
+.theme-overlay .theme-actions .inactive-theme,
+.theme-overlay.active .theme-actions .active-theme {
+ display: block;
+}
+
+/**
+ * Theme Screenshots gallery
+ */
+.theme-overlay .theme-screenshots {
+ float: left;
+ margin: 0 30px 0 0;
+ width: 55%;
+ max-width: 880px;
+ text-align: center;
+}
+
+/* First screenshot, shown big */
+.theme-overlay .screenshot {
+ border: 1px solid #fff;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ overflow: hidden;
+ position: relative;
+ -webkit-box-shadow: 0 0 0 1px rgba(0,0,0,0.2);
+ box-shadow: 0 0 0 1px rgba(0,0,0,0.2);
+}
+
+.theme-overlay .screenshot:after {
+ content: '';
+ display: block;
+ padding-top: 75%; /* using a 4/3 aspect ratio */
+}
+
+.theme-overlay .screenshot img {
+ height: auto;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+/* Handles old 300px screenshots */
+.theme-overlay.small-screenshot .theme-screenshots {
+ position: absolute;
+ width: 302px;
+}
+.theme-overlay.small-screenshot .theme-info {
+ margin-left: 350px;
+ width: auto;
+}
+
+/* Other screenshots, shown small and square */
+.theme-overlay .screenshot.thumb {
+ background: #ccc;
+ border: 1px solid #eee;
+ float: none;
+ display: inline-block;
+ margin: 10px 5px 0;
+ width: 140px;
+ height: 80px;
+ cursor: pointer;
+}
+
+.theme-overlay .screenshot.thumb:after {
+ content: '';
+ display: block;
+ padding-top: 100%; /* using a 1/1 aspect ratio */
+}
+
+.theme-overlay .screenshot.thumb img {
+ cursor: pointer;
+ height: auto;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: auto;
+}
+
+.theme-overlay .screenshot.selected {
+ background: transparent;
+ border: 2px solid #2ea2cc;
+}
+
+.theme-overlay .screenshot.selected img {
+ opacity: 0.8;
+}
+
+/* No screenshot placeholder */
+.theme-browser .theme .theme-screenshot.blank,
+.theme-overlay .screenshot.blank {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=);
+}
+
+/**
+ * Theme heading information
+ */
+.theme-overlay .theme-info {
+ width: 40%;
+ float: left;
+}
+
+.theme-overlay .current-label {
+ background: #333;
+ color: #fff;
+ font-size: 11px;
+ display: inline-block;
+ padding: 2px 8px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ margin: 0 0 -10px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.theme-overlay .theme-name {
+ color: #222;
+ font-size: 32px;
+ font-weight: 100;
+ margin: 10px 0 0;
+ line-height: 1.3;
+}
+
+.theme-overlay .theme-version {
+ color: #999;
+ font-size: 13px;
+ font-weight: 400;
+ float: none;
+ display: inline-block;
+ margin-left: 10px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.theme-overlay .theme-author {
+ color: #686868;
+ font-size: 16px;
+ font-weight: 400;
+ margin: 15px 0 25px;
+}
+
+.theme-overlay .theme-author a {
+ text-decoration: none;
+}
+
+.theme-overlay .theme-description {
+ color: #555;
+ font-size: 15px;
+ font-weight: 400;
+ line-height: 1.5;
+ margin: 30px 0 0 0;
+}
+
+.theme-overlay .theme-tags {
+ border-top: 3px solid #eee;
+ color: #888;
+ font-size: 13px;
+ font-weight: 400;
+ margin: 30px 0 0 0;
+ padding-top: 20px;
+}
+
+.theme-overlay .theme-tags span {
+ color: #444;
+ font-weight: bold;
+ margin-right: 5px;
+}
+
+/* Theme Updates info */
+.theme-overlay .theme-update-message {
+ background: #fef7f1;
+ border: 1px solid #eee;
+ border-left: 4px solid #d54e21;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ padding: 5px 20px 10px;
+}
+
+.theme-overlay .theme-update {
+ color: #222;
+ font-size: 18px;
+ display: inline-block;
+ line-height: 40px;
+ margin: 0;
+}
+
+.theme-overlay .parent-theme {
+ background: #f7fcfe;
+ border: 1px solid #eee;
+ border-left: 4px solid #2ea2cc;
+ font-size: 14px;
+ font-weight: normal;
+ margin-top: 30px;
+ padding: 10px 10px 10px 20px;
+}
+
+.theme-overlay .parent-theme strong {
+ font-weight: 700;
+}
+
+/**
+ * Single Theme Mode
+ * Displays detailed view inline when a user has no switch capabilities
+ */
+.single-theme .theme-overlay .theme-backdrop,
+.single-theme .theme-overlay .theme-header,
+.single-theme .theme {
+ display: none;
+}
+
+.single-theme .theme-overlay .theme-wrap {
+ clear: both;
+ min-height: 330px;
+ position: relative;
+ left: auto;
+ right: auto;
+ top: auto;
+ bottom: auto;
+}
+
+.single-theme .theme-overlay .theme-about {
+ padding: 30px 30px 70px;
+ position: static;
+}
+
+.single-theme .theme-overlay .theme-actions {
+ position: absolute;
+}
+
+/**
+ * Basic Responsive structure...
+ *
+ * Shuffles theme columns around based on screen width
+ */
+
+@media only screen and (min-width: 2000px) {
+ #wpwrap .theme-browser .theme {
+ width: 17.6%;
+ margin: 0 3% 3% 0;
+ }
+
+ #wpwrap .theme-browser .theme:nth-child(3n),
+ #wpwrap .theme-browser .theme:nth-child(4n) {
+ margin-right: 3%;
+ }
+
+ #wpwrap .theme-browser .theme:nth-child(5n) {
+ margin-right: 0;
+ }
+}
+
+@media only screen and (min-width: 1680px) {
+ .theme-overlay .theme-wrap {
+ width: 1450px;
+ margin: 0 auto;
+ }
+}
+
+/* Maximum screenshot width reaches 440px */
+@media only screen and (min-width: 1640px) {
+ .theme-browser .theme {
+ width: 22.7%;
+ margin: 0 3% 3% 0;
+ }
+ .theme-browser .theme .theme-screenshot:after {
+ padding-top: 75%; /* using a 4/3 aspect ratio */
+ }
+
+ .theme-browser .theme:nth-child(3n) {
+ margin-right: 3%;
+ }
+
+ .theme-browser .theme:nth-child(4n) {
+ margin-right: 0;
+ }
+}
+/* Maximum screenshot width reaches 440px */
+@media only screen and (max-width: 1120px) {
+ .theme-browser .theme {
+ width: 47.5%;
+ margin-right: 0;
+ }
+
+ .theme-browser .theme:nth-child(even) {
+ margin-right: 0;
+ }
+
+ .theme-browser .theme:nth-child(odd) {
+ margin-right: 5%;
+ }
+}
+
+/* Admin menu is folded */
+@media only screen and (max-width: 900px) {
+ .theme-overlay .theme-wrap {
+ left: 65px;
+ }
+}
+
+@media only screen and (max-width: 780px) {
+ body.folded .theme-overlay .theme-wrap,
+ .theme-overlay .theme-wrap {
+ top: 0; /* The adminmenu isn't fixed on mobile, so this can use the full viewport height */
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 70px 20px 20px;
+ border: none;
+ z-index: 500; /* should overlap #wpadminbar, which is 500 on mobile. */
+ position: fixed;
+ }
+
+ .theme-browser .theme.active .theme-name span {
+ /* Hide the "Active: " label on smaller screens. */
+ display: none;
+ }
+
+ .theme-overlay .theme-screenshots {
+ width: 40%;
+ }
+
+ .theme-overlay .theme-info {
+ width: 50%;
+ }
+ .single-theme .theme-wrap {
+ padding: 10px;
+ }
+
+ .theme-browser .theme .theme-actions {
+ padding: 5px 10px 4px 10px;
+ }
+
+ .theme-overlay.small-screenshot .theme-screenshots {
+ position: static;
+ float: none;
+ max-width: 302px;
+ }
+
+ .theme-overlay.small-screenshot .theme-info {
+ margin-left: 0;
+ width: auto;
+ }
+
+ .theme:not(.active):hover .theme-actions,
+ .theme:not(.active):focus .theme-actions,
+ .theme:hover .more-details,
+ .theme:focus .more-details {
+ display: none;
+ }
+
+ .theme-browser.rendered .theme:hover .theme-screenshot img,
+ .theme-browser.rendered .theme:focus .theme-screenshot img {
+ opacity: 1.0;
+ }
+}
+
+@media only screen and (max-width: 480px) {
+ .theme-browser .theme {
+ width: 100%;
+ margin-right: 0;
+ }
+
+ .theme-browser .theme:nth-child(2n),
+ .theme-browser .theme:nth-child(3n) {
+ margin-right: 0;
+ }
+}
+
+@media only screen and (max-width: 650px) {
+ .theme-overlay .theme-update,
+ .theme-overlay .theme-description {
+ margin-left: 0;
+ }
+
+ .theme-overlay .theme-actions .delete-theme {
+ position: relative;
+ right: auto;
+ bottom: auto;
+ }
+
+ .theme-overlay .theme-actions .inactive-theme {
+ display: inline;
+ }
+
+ .theme-overlay .theme-screenshots {
+ width: 100%;
+ float: none;
+ }
+
+ .theme-overlay .theme-info {
+ width: 100%;
+ }
+
+ .theme-overlay .theme-author {
+ margin: 5px 0 15px 0;
+ }
+
+ .theme-overlay .current-label {
+ margin-top: 10px;
+ font-size: 13px;
+ }
+
+ .themes-php .wrap h2 {
+ width: 100%;
+ }
+
+ .themes-php .wp-filter-search {
+ float: none;
+ clear: both;
+ left: 0;
+ top: 0;
+ right: 0;
+ margin: 10px 0;
+ width: 100%;
+ max-width: 280px;
+ }
+
+ .theme-browser .theme.add-new-theme span:after {
+ font: normal 60px/90px 'dashicons';
+ width: 80px;
+ height: 80px;
+ top: 30%;
+ left: 50%;
+ text-indent: 0;
+ margin-left: -40px;
+ }
+
+ .single-theme .theme-wrap {
+ margin: 0 -12px 0 -10px;
+ padding: 10px;
+ }
+ .single-theme .theme-overlay .theme-about {
+ padding: 10px;
+ overflow: visible;
+ }
+ .single-theme .current-label {
+ display: none;
+ }
+ .single-theme .theme-overlay .theme-actions {
+ position: static;
+ }
+}
+
+.broken-themes {
+ clear: both;
+}
+
+.broken-themes table {
+ text-align: left;
+ width: 50%;
+ border-spacing: 3px;
+ padding: 3px;
+}
+
+
+/*------------------------------------------------------------------------------
+ 16.2 - Install Themes
+------------------------------------------------------------------------------*/
+
+/* Already installed theme */
+.theme-browser .theme .theme-installed {
+ background: #0074a2;
+}
+.theme-browser .theme .theme-installed:before {
+ content: '\f147';
+}
+.theme-browser .theme.is-installed .theme-actions .button-primary {
+ display: none !important;
+}
+
+.theme-install-php a.upload,
+.theme-install-php a.browse-themes {
+ cursor: pointer;
+}
+.theme-install-php a.browse-themes,
+.theme-install-php.show-upload-theme a.upload {
+ display: none;
+}
+.theme-install-php.show-upload-theme a.browse-themes {
+ display: inline;
+}
+.upload-theme,
+.upload-plugin {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: none;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+ top: 10px;
+}
+body.show-upload-theme .upload-theme,
+.upload-plugin {
+ display: block;
+}
+.upload-theme .wp-upload-form,
+.upload-plugin .wp-upload-form {
+ background: #fafafa;
+ border: 1px solid #e5e5e5;
+ padding: 30px;
+ margin: 30px auto;
+ max-width: 380px;
+}
+.upload-theme .install-help,
+.upload-plugin .install-help {
+ color: #999;
+ font-size: 18px;
+ font-style: normal;
+ margin: 0;
+ padding: 40px 0 0;
+ text-align: center;
+}
+body.show-upload-theme .upload-theme + .wp-filter,
+body.show-upload-theme .upload-theme + .wp-filter + .theme-browser {
+ display: none;
+}
+
+p.no-themes {
+ color: #999;
+ font-size: 18px;
+ font-style: normal;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+ display: none;
+}
+body.no-results p.no-themes {
+ display: block;
+}
+body.show-upload-theme p.no-themes {
+ display: none !important;
+}
+
+.theme-install-php .add-new-theme {
+ display: none !important;
+}
+
+@media only screen and (max-width: 1120px) {
+ .upload-theme .wp-upload-form {
+ margin: 20px 0;
+ max-width: 100%;
+ }
+ .upload-theme .install-help {
+ font-size: 15px;
+ padding: 20px 0 0;
+ text-align: left;
+ }
+}
+
+.rating {
+ margin: 15px 0 0;
+}
+.rating span:before {
+ color: #e6b800;
+ content: "\f154";
+ display: inline-block;
+ -webkit-font-smoothing: antialiased;
+ font: normal 20px/1 'dashicons';
+ vertical-align: top;
+}
+/* Half stars */
+.rating-10 span.one:before,
+.rating-30 span.two:before,
+.rating-50 span.three:before,
+.rating-70 span.four:before,
+.rating-90 span.five:before {
+ content: "\f459";
+}
+/* Full stars */
+.rating-20 span.one:before {
+ content: "\f155";
+}
+.rating-30 span.one:before,
+.rating-40 span.one:before,
+.rating-40 span.two:before {
+ content: "\f155";
+}
+.rating-50 span.one:before,
+.rating-50 span.two:before,
+.rating-60 span.one:before,
+.rating-60 span.two:before,
+.rating-60 span.three:before {
+ content: "\f155";
+}
+.rating-70 span.one:before,
+.rating-70 span.two:before,
+.rating-70 span.three:before,
+.rating-80 span.one:before,
+.rating-80 span.two:before,
+.rating-80 span.three:before,
+.rating-80 span.four:before {
+ content: "\f155";
+}
+.rating-90 span.one:before,
+.rating-90 span.two:before,
+.rating-90 span.three:before,
+.rating-90 span.four:before,
+.rating-100 span.one:before,
+.rating-100 span.two:before,
+.rating-100 span.three:before,
+.rating-100 span.four:before,
+.rating-100 span.five:before {
+ content: "\f155";
+}
+.rating .ratings {
+ display: block;
+ line-height: 20px;
+ color: #999;
+}
+
+/*------------------------------------------------------------------------------
+ 16.3 - Custom Header Screen
+------------------------------------------------------------------------------*/
+
+.appearance_page_custom-header #headimg {
+ border: 1px solid #DFDFDF;
+ overflow: hidden;
+ width: 100%;
+}
+
+.appearance_page_custom-header #upload-form p label {
+ font-size: 12px;
+}
+
+.appearance_page_custom-header .available-headers .default-header {
+ float: left;
+ margin: 0 20px 20px 0;
+}
+
+.appearance_page_custom-header .random-header {
+ clear: both;
+ margin: 0 20px 20px 0;
+ vertical-align: middle;
+}
+
+.appearance_page_custom-header .available-headers label input,
+.appearance_page_custom-header .random-header label input {
+ margin-right: 10px;
+}
+
+.appearance_page_custom-header .available-headers label img {
+ vertical-align: middle;
+}
+
+
+/*------------------------------------------------------------------------------
+ 16.4 - Custom Background Screen
+------------------------------------------------------------------------------*/
+
+div#custom-background-image {
+ min-height: 100px;
+ border: 1px solid #dfdfdf;
+}
+
+div#custom-background-image img {
+ max-width: 400px;
+ max-height: 300px;
+}
+
+/*------------------------------------------------------------------------------
+ 23.0 - Full Overlay w/ Sidebar
+------------------------------------------------------------------------------*/
+
+body.full-overlay-active {
+ overflow: hidden;
+}
+
+.wp-full-overlay {
+ background: transparent;
+ z-index: 500000;
+ position: fixed;
+ overflow: visible;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 100%;
+ min-width: 0;
+}
+
+.wp-full-overlay-sidebar {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: fixed;
+ width: 300px;
+ height: 100%;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ padding: 0;
+ margin: 0;
+ z-index: 10;
+ background: #eee;
+ border-right: none;
+}
+
+.wp-full-overlay.collapsed .wp-full-overlay-sidebar {
+ overflow: visible;
+}
+
+.wp-full-overlay.collapsed,
+.wp-full-overlay.expanded .wp-full-overlay-sidebar {
+ margin-left: 0 !important;
+}
+
+.wp-full-overlay.expanded {
+ margin-left: 300px;
+}
+
+.wp-full-overlay.collapsed .wp-full-overlay-sidebar {
+ margin-left: -300px;
+}
+
+.wp-full-overlay-sidebar:after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ width: 3px;
+ z-index: 1000;
+}
+
+.wp-full-overlay-main {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ height: 100%;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-header {
+ position: absolute;
+ left: 0;
+ right: 0;
+ height: 45px;
+ padding: 0 15px;
+ line-height: 45px;
+ z-index: 10;
+ margin: 0;
+ border-top: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-header a.back {
+ margin-top: 9px;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-footer {
+ bottom: 0;
+ border-bottom: none;
+ border-top: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content {
+ position: absolute;
+ top: 45px;
+ bottom: 45px;
+ left: 0;
+ right: 0;
+ overflow: auto;
+}
+
+/* Close & Navigation Links */
+.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header {
+ padding: 0;
+}
+
+.theme-install-overlay .close-full-overlay,
+.theme-install-overlay .previous-theme,
+.theme-install-overlay .next-theme {
+ display: block;
+ position: relative;
+ float: left;
+ width: 45px;
+ height: 45px;
+ padding-right: 2px;
+ background: #eee;
+ border-right: 1px solid #ddd;
+ color: #444;
+ cursor: pointer;
+ text-decoration: none;
+ -webkit-transition: color .1s ease-in-out, background .1s ease-in-out;
+ transition: color .1s ease-in-out, background .1s ease-in-out;
+}
+
+.theme-install-overlay .close-full-overlay:hover,
+.theme-install-overlay .close-full-overlay:focus,
+.theme-install-overlay .previous-theme:hover,
+.theme-install-overlay .previous-theme:focus,
+.theme-install-overlay .next-theme:hover,
+.theme-install-overlay .next-theme:focus {
+ background: #ddd;
+ border-color: #ccc;
+ color: #000;
+ outline: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.theme-install-overlay .close-full-overlay:before {
+ font: normal 22px/1 dashicons;
+ content: "\f335";
+ position: relative;
+ top: 7px;
+ left: 13px;
+}
+
+.theme-install-overlay .previous-theme:before {
+ font: normal 20px/1 dashicons;
+ content: "\f341";
+ position: relative;
+ top: 6px;
+ left: 14px;
+}
+
+.theme-install-overlay .next-theme:before {
+ font: normal 20px/1 dashicons;
+ content: "\f345";
+ position: relative;
+ top: 6px;
+ left: 13px;
+}
+
+.theme-install-overlay .previous-theme.disabled,
+.theme-install-overlay .next-theme.disabled,
+.theme-install-overlay .previous-theme.disabled:hover,
+.theme-install-overlay .previous-theme.disabled:focus,
+.theme-install-overlay .next-theme.disabled:hover,
+.theme-install-overlay .next-theme.disabled:focus {
+ color: #bbb;
+ background: #eee;
+ cursor: default;
+ pointer-events: none;
+}
+
+.rtl .theme-install-overlay .previous-theme:before {
+ content: "\f345";
+}
+
+.rtl .theme-install-overlay .next-theme:before {
+ content: "\f341";
+}
+
+/* Collapse Button */
+.wp-full-overlay a.collapse-sidebar {
+ position: absolute;
+ bottom: 12px;
+ left: 0;
+ z-index: 50;
+ display: block;
+ width: 19px;
+ height: 19px;
+ margin-left: 15px;
+ padding: 0;
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ color: #777;
+ text-decoration: none;
+}
+
+.wp-full-overlay a.collapse-sidebar:hover {
+ color: #0074a2;
+}
+
+.wp-full-overlay.collapsed .collapse-sidebar {
+ position: absolute;
+ left: 100%;
+}
+
+.wp-full-overlay .collapse-sidebar-arrow {
+ position: static;
+ margin-top: 0;
+ margin-left: 0;
+ display: block;
+ width: auto;
+ height: auto;
+ background: none;
+}
+
+.wp-full-overlay .collapse-sidebar-arrow:before {
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ float: left;
+ content: "\f148";
+ background: #eee;
+ font: normal 20px/1 'dashicons';
+ speak: none;
+ display: block;
+ padding: 0;
+ text-indent: 0;
+ text-align: center;
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-decoration: none !important;
+}
+
+.wp-full-overlay.collapsed .collapse-sidebar-arrow:before,
+.rtl .wp-full-overlay .collapse-sidebar-arrow:before {
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+
+.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before {
+ -webkit-transform: none;
+ -ms-transform: none;
+ transform: none;
+}
+
+.wp-full-overlay.collapsed .collapse-sidebar-arrow {
+ background-position: -1px -109px;
+}
+
+.wp-full-overlay .collapse-sidebar-label {
+ position: absolute;
+ left: 100%;
+ line-height: 20px;
+ margin-left: 10px;
+}
+
+.wp-full-overlay.collapsed .collapse-sidebar-label {
+ display: none;
+}
+
+/* Animations */
+.wp-full-overlay,
+.wp-full-overlay-sidebar,
+.wp-full-overlay .collapse-sidebar,
+.wp-full-overlay-main {
+ -webkit-transition-property: left, right, top, bottom, width, margin;
+ transition-property: left, right, top, bottom, width, margin;
+ -webkit-transition-duration: 0.2s;
+ transition-duration: 0.2s;
+}
+
+/*------------------------------------------------------------------------------
+ 24.0 - Customize Loader
+------------------------------------------------------------------------------*/
+
+.no-customize-support .hide-if-no-customize,
+.customize-support .hide-if-customize,
+.no-customize-support.wp-core-ui .hide-if-no-customize,
+.no-customize-support .wp-core-ui .hide-if-no-customize,
+.customize-support.wp-core-ui .hide-if-customize,
+.customize-support .wp-core-ui .hide-if-customize {
+ display: none;
+}
+
+#customize-container {
+ display: none;
+ background: #fff;
+ z-index: 500000;
+ position: fixed;
+ overflow: visible;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 100%;
+}
+
+.customize-active #customize-container {
+ display: block;
+}
+
+.customize-loading #customize-container iframe {
+ opacity: 0;
+}
+
+.customize-loading #customize-container {
+ background: #fff url(../images/spinner.gif) no-repeat fixed center center;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+}
+
+#customize-container iframe,
+.theme-install-overlay iframe {
+ height: 100%;
+ width: 100%;
+ z-index: 20;
+ -webkit-transition: opacity 0.3s;
+ transition: opacity 0.3s;
+}
+
+#customize-container .collapse-sidebar {
+ bottom: 16px;
+}
+
+#customize-controls {
+ margin-top: 0;
+}
+
+.theme-install-overlay {
+ display: none;
+}
+
+.theme-install-overlay.single-theme {
+ display: block;
+}
+
+.install-theme-info {
+ display: none;
+ padding: 10px 20px 60px;
+}
+
+.single-theme .install-theme-info {
+ padding-top: 15px;
+}
+
+.theme-install-overlay .install-theme-info {
+ display: block;
+}
+
+.install-theme-info .theme-install {
+ float: right;
+ margin-top: 18px;
+}
+
+.install-theme-info .theme-name {
+ font-size: 16px;
+ line-height: 24px;
+ margin-bottom: 0;
+ margin-top: 0;
+}
+
+.install-theme-info .theme-screenshot {
+ margin-top: 15px;
+ width: 258px;
+ border: 1px solid #ccc;
+}
+
+.install-theme-info .theme-details {
+ overflow: hidden;
+}
+
+.theme-details .theme-version {
+ margin: 15px 0;
+ float: left;
+}
+
+.theme-details .star-rating {
+ margin: 7px 0;
+ float: right;
+}
+
+.theme-details .theme-description {
+ float: left;
+ color: #777;
+ line-height: 20px;
+ max-width: 100%;
+}
+
+.theme-install-overlay .wp-full-overlay-header .theme-install {
+ float: right;
+ margin: 8px 10px 0 0;
+ /* For when .theme-install is a span rather than a.button-primary (already installed theme) */
+ line-height: 26px;
+}
+
+.theme-install-overlay .wp-full-overlay-sidebar {
+ background: #eee;
+ border-right: 1px solid #ddd;
+}
+
+.theme-install-overlay .wp-full-overlay-sidebar-content {
+ background: #fff;
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #ddd;
+}
+
+.theme-install-overlay .wp-full-overlay-main {
+ background: #fff url(../images/spinner.gif) no-repeat center center;
+ -webkit-background-size: 20px 20px;
+ background-size: 20px 20px;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+/**
+ * HiDPI Displays
+ */
+@media print,
+ (-o-min-device-pixel-ratio: 5/4),
+ (-webkit-min-device-pixel-ratio: 1.25),
+ (min-resolution: 120dpi) {
+ .wp-full-overlay .collapse-sidebar-arrow {
+ background-image: url(../images/arrows-2x.png);
+ -webkit-background-size: 15px 123px;
+ background-size: 15px 123px;
+ }
+
+ .customize-loading #customize-container,
+ .theme-install-overlay .wp-full-overlay-main {
+ background-image: url(../images/spinner-2x.gif);
+ }
+
+ .theme-install-overlay .wp-full-overlay-header .theme-install {
+ margin-top: 2px;
+ }
+}
+
+@media screen and ( max-width: 782px ) {
+ .available-theme .action-links .delete-theme {
+ float: none;
+ margin: 0;
+ padding: 0;
+ clear: both;
+ }
+
+ .available-theme .action-links .delete-theme a {
+ padding: 0;
+ }
+
+ .broken-themes table {
+ width: 100%;
+ }
+
+ .theme-install-overlay .wp-full-overlay-header .theme-install {
+ margin-top: 6px;
+ line-height: normal;
+ }
+}
diff --git a/wp-admin/css/widgets-rtl.css b/wp-admin/css/widgets-rtl.css
new file mode 100644
index 0000000..187f005
--- /dev/null
+++ b/wp-admin/css/widgets-rtl.css
@@ -0,0 +1,577 @@
+/* General Widgets Styles */
+
+.widget {
+ margin: 0 auto 10px;
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.widget-top {
+ font-size: 13px;
+ font-weight: 600;
+ background: #f7f7f7;
+}
+
+.widget-top a.widget-action,
+.widget-top a.widget-action:hover {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ outline: none;
+ text-decoration: none;
+}
+
+.widget-title h4 {
+ margin: 0;
+ padding: 15px;
+ line-height: 1;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.widgets-holder-wrap .widget-inside {
+ border-top: none;
+ padding: 1px 15px 15px 15px;
+ line-height: 16px;
+}
+
+.in-widget-title,
+#widgets-right a.widget-control-edit,
+#available-widgets .widget-description {
+ color: #666;
+}
+
+.deleting .widget-title,
+.deleting .widget-top a.widget-action:after {
+ color: #aaa;
+}
+
+/* Widget Dragging Helpers */
+.widget.ui-draggable-dragging {
+ min-width: 100%;
+}
+
+.widget.ui-sortable-helper {
+ opacity: 0.8;
+}
+
+.widget-placeholder {
+ border: 1px dashed #bbb;
+ margin: 0 auto 10px;
+ height: 45px;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+#widgets-right .widget-placeholder {
+ margin-top: 0;
+}
+
+#widgets-right .closed .widget-placeholder {
+ height: 0;
+ border: 0;
+ margin-top: -10px;
+}
+
+/* Widget Sidebars */
+.sidebar-name {
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.sidebar-name-arrow {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+}
+
+.js .sidebar-name {
+ cursor: pointer;
+}
+
+.sidebar-name h3 {
+ margin: 0;
+ padding: 8px 10px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.widgets-holder-wrap .description {
+ padding: 0 0 15px;
+ margin: 0;
+ font-style: normal;
+ color: #777;
+}
+
+#widgets-right .widgets-holder-wrap .description {
+ padding-right: 7px;
+ padding-left: 7px;
+}
+
+/* Widgets 2-col Layout */
+div.widget-liquid-left {
+ margin: 0;
+ width: 38%;
+ float: right;
+}
+
+div.widget-liquid-right {
+ float: left;
+ width: 58%;
+}
+
+/* Widgets Left - Available Widgets */
+
+div#widgets-left {
+ padding-top: 12px;
+}
+
+div#widgets-left .closed .sidebar-name,
+div#widgets-left .inactive-sidebar.closed .sidebar-name {
+ margin-bottom: 10px;
+}
+
+div#widgets-left .sidebar-name h3 {
+ padding: 10px 0;
+ margin: 0 0 0 10px;
+}
+
+div#widgets-left .sidebar-name .sidebar-name-arrow:before {
+ left: 0;
+ top: 4px;
+ padding: 4px 4px 4px 6px;
+}
+
+#widgets-left #available-widgets,
+div#widgets-left .widget-holder {
+ background: transparent;
+ border: none;
+}
+
+#widgets-left .widgets-holder-wrap {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#available-widgets .widget-action {
+ display: none;
+}
+
+#available-widgets .widget {
+ margin: 0;
+}
+
+#available-widgets .widget:nth-child(odd) {
+ clear: both;
+}
+
+#available-widgets .widget .widget-description {
+ display: block;
+ padding: 10px 15px;
+ font-size: 12px;
+}
+
+#available-widgets #widget-list {
+ position: relative;
+}
+
+/* Inactive Sidebars */
+#widgets-left .inactive-sidebar {
+ clear: both;
+ width: 100%;
+ background: transparent;
+ padding: 0;
+ margin: 0 0 20px 0;
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#widgets-left .inactive-sidebar.first {
+ margin-top: 40px;
+}
+
+/* Not sure what this is for... */
+div#widgets-left .inactive-sidebar .widget.expanded {
+ right: auto;
+}
+
+.widget-title-action {
+ float: left;
+ position: relative;
+}
+
+div#widgets-left .inactive-sidebar .widgets-sortables {
+ min-height: 42px;
+ padding: 0;
+ background: transparent;
+ margin: 0;
+ position: relative;
+}
+
+/* Widgets Right */
+
+div#widgets-right:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+div#widgets-right .sidebars-column-1,
+div#widgets-right .sidebars-column-2 {
+ max-width: 450px;
+}
+
+div#widgets-right .widgets-holder-wrap {
+ margin: 10px 0 0 0;
+}
+
+div#widgets-right .sidebar-description {
+ min-height: 20px;
+ margin-top: -5px;
+}
+
+div#widgets-right .sidebar-name h3 {
+ padding: 15px 7px;
+}
+
+div#widgets-right .sidebar-name .sidebar-name-arrow:before {
+ left: 0;
+ top: 4px;
+}
+
+div#widgets-right .widget-top {
+ padding: 0;
+}
+
+div#widgets-right .widgets-sortables {
+ padding: 0 8px;
+ margin-bottom: 9px;
+ position: relative;
+ min-height: 123px;
+}
+
+div#widgets-right .closed .widgets-sortables {
+ min-height: 0;
+ margin-bottom: 0;
+}
+
+.sidebar-name .spinner {
+ margin: -5px 5px;
+ float: none;
+}
+
+/* Dragging a widget over a closed sidebar */
+#widgets-right .widgets-holder-wrap.widget-hover {
+ border-color: #777;
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.3);
+ box-shadow: 0 1px 2px rgba(0,0,0,0.3);
+}
+
+/* Accessibility Mode */
+.widgets_access #widgets-left .widget .widget-top {
+ cursor: auto;
+}
+
+.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description,
+.widgets_access #wpwrap .widgets-holder-wrap.closed .widget,
+.widgets_access #wpwrap .widget-control-edit {
+ display: block;
+}
+
+.widgets_access #widgets-left .widget .widget-top:hover,
+.widgets_access #widgets-right .widget .widget-top:hover {
+ border-color: #ddd;
+}
+
+#available-widgets .widget-control-edit .edit,
+#widgets-left .inactive-sidebar .widget-control-edit .add,
+#widgets-right .widget-control-edit .add {
+ display: none;
+}
+
+.widget-control-edit {
+ display: block;
+ color: #666;
+ background: #EEE;
+ padding: 0 15px;
+ line-height: 43px;
+ border-right: 1px solid #DDD;
+}
+
+#widgets-left .widget-control-edit:hover,
+#widgets-right .widget-control-edit:hover {
+ color: #fff;
+ background: #444;
+ border-right: 0;
+ outline: 1px solid #444;
+}
+
+.widgets-holder-wrap .sidebar-name,
+.widgets-holder-wrap .sidebar-description {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.editwidget {
+ margin: 0 auto;
+}
+
+.editwidget .widget-inside {
+ display: block;
+ padding: 0 15px;
+}
+
+.editwidget .widget-control-actions {
+ margin-top: 20px;
+}
+
+.js .widgets-holder-wrap.closed .widget,
+.js .widgets-holder-wrap.closed .sidebar-description,
+.js .closed br.clear {
+ display: none;
+}
+
+/* Hide Widget Settings by Default */
+.widget-inside,
+.widget-description {
+ display: none;
+}
+
+.widget-inside {
+ background: #fff;
+}
+
+/* Dragging widgets over the available widget area show's a "Deactivate" message */
+#removing-widget {
+ display: none;
+ font-weight: normal;
+ padding-right: 15px;
+ font-size: 12px;
+ line-height: 1;
+ color: black;
+}
+
+.js #removing-widget {
+ color: #2ea2cc;
+}
+
+.widget-control-noform,
+#access-off,
+.widgets_access .widget-action,
+.widgets_access .sidebar-name-arrow,
+.widgets_access #access-on,
+.widgets_access .widget-holder .description,
+.no-js .widget-holder .description {
+ display: none;
+}
+
+.widgets_access .widget-holder,
+.widgets_access #widget-list {
+ padding-top: 10px;
+}
+
+.widgets_access #access-off {
+ display: inline;
+}
+
+.widgets_access .sidebar-name,
+.widgets_access .widget .widget-top {
+ cursor: default;
+}
+
+
+/* Widgets Area Chooser */
+.widget-liquid-left #widgets-left.chooser #available-widgets .widget,
+.widget-liquid-left #widgets-left.chooser .inactive-sidebar {
+ -webkit-transition: opacity 0.1s linear;
+ transition: opacity 0.1s linear;
+}
+
+.widget-liquid-left #widgets-left.chooser #available-widgets .widget,
+.widget-liquid-left #widgets-left.chooser .inactive-sidebar {
+ /* -webkit-filter: blur(1px); */
+ opacity: 0.2;
+ pointer-events: none;
+}
+
+.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question {
+ /* -webkit-filter: none; */
+ opacity: 1;
+ pointer-events: auto;
+}
+
+.widgets-chooser ul,
+#widgets-left .widget-in-question .widget-top,
+#available-widgets .widget-top:hover,
+div#widgets-right .widget-top:hover,
+#widgets-left .widget-top:hover {
+ border-color: #999;
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+}
+
+.widgets-chooser ul.widgets-chooser-sidebars {
+ margin: 0;
+ list-style-type: none;
+ max-height: 300px;
+ overflow: auto;
+}
+
+.widgets-chooser {
+ display: none;
+}
+
+.widgets-chooser ul {
+ border: 1px solid #ccc;
+}
+
+.widgets-chooser li {
+ padding: 10px 35px 10px 15px;
+ border-bottom: 1px solid #ccc;
+ background: #fff;
+ margin: 0;
+ cursor: pointer;
+ outline: none;
+ position: relative;
+ -webkit-transition: background 0.2s ease-in-out;
+ transition: background 0.2s ease-in-out;
+}
+
+.widgets-chooser li:hover,
+.widgets-chooser li:focus {
+ background: rgba(255,255,255,0.7);
+}
+
+.widgets-chooser li:focus:before {
+ content: '\f147';
+ display: block;
+ -webkit-font-smoothing: antialiased;
+ font: normal 26px/1 'dashicons';
+ color: #999;
+ position: absolute;
+ top: 7px;
+ right: 5px;
+}
+
+.widgets-chooser li:last-child {
+ border: none;
+}
+
+.widgets-chooser li.widgets-chooser-selected {
+ background: #2ea2cc;
+ color: #fff;
+}
+
+.widgets-chooser li.widgets-chooser-selected:before,
+.widgets-chooser li.widgets-chooser-selected:focus:before {
+ content: '\f147';
+ display: block;
+ -webkit-font-smoothing: antialiased;
+ font: normal 26px/1 'dashicons';
+ color: #fff;
+ position: absolute;
+ top: 7px;
+ right: 5px;
+}
+
+.widgets-chooser .widgets-chooser-actions {
+ padding: 10px 0 12px 0;
+ text-align: center;
+}
+
+.widgets-chooser button {
+ margin-left: 5px;
+}
+
+#available-widgets .widget .widget-top {
+ cursor: pointer;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@media screen and (max-width: 480px) {
+ div.widget-liquid-left {
+ width: 100%;
+ float: none;
+ border-left: none;
+ padding-left: 0;
+ }
+
+ #widgets-left .sidebar-name {
+ margin-left: 0;
+ }
+
+ #widgets-left #available-widgets .widget-top {
+ margin-left: 0;
+ }
+
+ #widgets-left .inactive-sidebar .widgets-sortables {
+ margin-left: 0;
+ }
+
+ div.widget-liquid-right {
+ width: 100%;
+ float: none;
+ }
+
+ div.widget {
+ margin: 0 auto 10px !important;
+ max-width: 480px;
+ }
+}
+
+@media screen and (max-width: 320px) {
+ div.widget {
+ max-width: 320px;
+ }
+}
+
+@media only screen and (min-width: 1250px) {
+ #widgets-left #available-widgets .widget {
+ width: 49%;
+ float: right;
+ }
+
+ .widget.ui-draggable-dragging {
+ min-width: 49%;
+ }
+
+ #widgets-left #available-widgets .widget:nth-child(even) {
+ float: left;
+ }
+
+ #widgets-right .sidebars-column-1,
+ #widgets-right .sidebars-column-2 {
+ float: right;
+ width: 49%;
+ }
+
+ #widgets-right .sidebars-column-1 {
+ margin-left: 2%;
+ }
+
+ #widgets-right.single-sidebar .sidebars-column-1,
+ #widgets-right.single-sidebar .sidebars-column-2 {
+ float: none;
+ width: 100%;
+ margin: 0;
+ }
+}
diff --git a/wp-admin/css/widgets.css b/wp-admin/css/widgets.css
new file mode 100644
index 0000000..409a393
--- /dev/null
+++ b/wp-admin/css/widgets.css
@@ -0,0 +1,577 @@
+/* General Widgets Styles */
+
+.widget {
+ margin: 0 auto 10px;
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.widget-top {
+ font-size: 13px;
+ font-weight: 600;
+ background: #f7f7f7;
+}
+
+.widget-top a.widget-action,
+.widget-top a.widget-action:hover {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ outline: none;
+ text-decoration: none;
+}
+
+.widget-title h4 {
+ margin: 0;
+ padding: 15px;
+ line-height: 1;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.widgets-holder-wrap .widget-inside {
+ border-top: none;
+ padding: 1px 15px 15px 15px;
+ line-height: 16px;
+}
+
+.in-widget-title,
+#widgets-right a.widget-control-edit,
+#available-widgets .widget-description {
+ color: #666;
+}
+
+.deleting .widget-title,
+.deleting .widget-top a.widget-action:after {
+ color: #aaa;
+}
+
+/* Widget Dragging Helpers */
+.widget.ui-draggable-dragging {
+ min-width: 100%;
+}
+
+.widget.ui-sortable-helper {
+ opacity: 0.8;
+}
+
+.widget-placeholder {
+ border: 1px dashed #bbb;
+ margin: 0 auto 10px;
+ height: 45px;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+#widgets-right .widget-placeholder {
+ margin-top: 0;
+}
+
+#widgets-right .closed .widget-placeholder {
+ height: 0;
+ border: 0;
+ margin-top: -10px;
+}
+
+/* Widget Sidebars */
+.sidebar-name {
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.sidebar-name-arrow {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+
+.js .sidebar-name {
+ cursor: pointer;
+}
+
+.sidebar-name h3 {
+ margin: 0;
+ padding: 8px 10px;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.widgets-holder-wrap .description {
+ padding: 0 0 15px;
+ margin: 0;
+ font-style: normal;
+ color: #777;
+}
+
+#widgets-right .widgets-holder-wrap .description {
+ padding-left: 7px;
+ padding-right: 7px;
+}
+
+/* Widgets 2-col Layout */
+div.widget-liquid-left {
+ margin: 0;
+ width: 38%;
+ float: left;
+}
+
+div.widget-liquid-right {
+ float: right;
+ width: 58%;
+}
+
+/* Widgets Left - Available Widgets */
+
+div#widgets-left {
+ padding-top: 12px;
+}
+
+div#widgets-left .closed .sidebar-name,
+div#widgets-left .inactive-sidebar.closed .sidebar-name {
+ margin-bottom: 10px;
+}
+
+div#widgets-left .sidebar-name h3 {
+ padding: 10px 0;
+ margin: 0 10px 0 0;
+}
+
+div#widgets-left .sidebar-name .sidebar-name-arrow:before {
+ right: 0;
+ top: 4px;
+ padding: 4px 6px 4px 4px;
+}
+
+#widgets-left #available-widgets,
+div#widgets-left .widget-holder {
+ background: transparent;
+ border: none;
+}
+
+#widgets-left .widgets-holder-wrap {
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#available-widgets .widget-action {
+ display: none;
+}
+
+#available-widgets .widget {
+ margin: 0;
+}
+
+#available-widgets .widget:nth-child(odd) {
+ clear: both;
+}
+
+#available-widgets .widget .widget-description {
+ display: block;
+ padding: 10px 15px;
+ font-size: 12px;
+}
+
+#available-widgets #widget-list {
+ position: relative;
+}
+
+/* Inactive Sidebars */
+#widgets-left .inactive-sidebar {
+ clear: both;
+ width: 100%;
+ background: transparent;
+ padding: 0;
+ margin: 0 0 20px 0;
+ border: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+#widgets-left .inactive-sidebar.first {
+ margin-top: 40px;
+}
+
+/* Not sure what this is for... */
+div#widgets-left .inactive-sidebar .widget.expanded {
+ left: auto;
+}
+
+.widget-title-action {
+ float: right;
+ position: relative;
+}
+
+div#widgets-left .inactive-sidebar .widgets-sortables {
+ min-height: 42px;
+ padding: 0;
+ background: transparent;
+ margin: 0;
+ position: relative;
+}
+
+/* Widgets Right */
+
+div#widgets-right:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+div#widgets-right .sidebars-column-1,
+div#widgets-right .sidebars-column-2 {
+ max-width: 450px;
+}
+
+div#widgets-right .widgets-holder-wrap {
+ margin: 10px 0 0 0;
+}
+
+div#widgets-right .sidebar-description {
+ min-height: 20px;
+ margin-top: -5px;
+}
+
+div#widgets-right .sidebar-name h3 {
+ padding: 15px 7px;
+}
+
+div#widgets-right .sidebar-name .sidebar-name-arrow:before {
+ right: 0;
+ top: 4px;
+}
+
+div#widgets-right .widget-top {
+ padding: 0;
+}
+
+div#widgets-right .widgets-sortables {
+ padding: 0 8px;
+ margin-bottom: 9px;
+ position: relative;
+ min-height: 123px;
+}
+
+div#widgets-right .closed .widgets-sortables {
+ min-height: 0;
+ margin-bottom: 0;
+}
+
+.sidebar-name .spinner {
+ margin: -5px 5px;
+ float: none;
+}
+
+/* Dragging a widget over a closed sidebar */
+#widgets-right .widgets-holder-wrap.widget-hover {
+ border-color: #777;
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.3);
+ box-shadow: 0 1px 2px rgba(0,0,0,0.3);
+}
+
+/* Accessibility Mode */
+.widgets_access #widgets-left .widget .widget-top {
+ cursor: auto;
+}
+
+.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description,
+.widgets_access #wpwrap .widgets-holder-wrap.closed .widget,
+.widgets_access #wpwrap .widget-control-edit {
+ display: block;
+}
+
+.widgets_access #widgets-left .widget .widget-top:hover,
+.widgets_access #widgets-right .widget .widget-top:hover {
+ border-color: #ddd;
+}
+
+#available-widgets .widget-control-edit .edit,
+#widgets-left .inactive-sidebar .widget-control-edit .add,
+#widgets-right .widget-control-edit .add {
+ display: none;
+}
+
+.widget-control-edit {
+ display: block;
+ color: #666;
+ background: #EEE;
+ padding: 0 15px;
+ line-height: 43px;
+ border-left: 1px solid #DDD;
+}
+
+#widgets-left .widget-control-edit:hover,
+#widgets-right .widget-control-edit:hover {
+ color: #fff;
+ background: #444;
+ border-left: 0;
+ outline: 1px solid #444;
+}
+
+.widgets-holder-wrap .sidebar-name,
+.widgets-holder-wrap .sidebar-description {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.editwidget {
+ margin: 0 auto;
+}
+
+.editwidget .widget-inside {
+ display: block;
+ padding: 0 15px;
+}
+
+.editwidget .widget-control-actions {
+ margin-top: 20px;
+}
+
+.js .widgets-holder-wrap.closed .widget,
+.js .widgets-holder-wrap.closed .sidebar-description,
+.js .closed br.clear {
+ display: none;
+}
+
+/* Hide Widget Settings by Default */
+.widget-inside,
+.widget-description {
+ display: none;
+}
+
+.widget-inside {
+ background: #fff;
+}
+
+/* Dragging widgets over the available widget area show's a "Deactivate" message */
+#removing-widget {
+ display: none;
+ font-weight: normal;
+ padding-left: 15px;
+ font-size: 12px;
+ line-height: 1;
+ color: black;
+}
+
+.js #removing-widget {
+ color: #2ea2cc;
+}
+
+.widget-control-noform,
+#access-off,
+.widgets_access .widget-action,
+.widgets_access .sidebar-name-arrow,
+.widgets_access #access-on,
+.widgets_access .widget-holder .description,
+.no-js .widget-holder .description {
+ display: none;
+}
+
+.widgets_access .widget-holder,
+.widgets_access #widget-list {
+ padding-top: 10px;
+}
+
+.widgets_access #access-off {
+ display: inline;
+}
+
+.widgets_access .sidebar-name,
+.widgets_access .widget .widget-top {
+ cursor: default;
+}
+
+
+/* Widgets Area Chooser */
+.widget-liquid-left #widgets-left.chooser #available-widgets .widget,
+.widget-liquid-left #widgets-left.chooser .inactive-sidebar {
+ -webkit-transition: opacity 0.1s linear;
+ transition: opacity 0.1s linear;
+}
+
+.widget-liquid-left #widgets-left.chooser #available-widgets .widget,
+.widget-liquid-left #widgets-left.chooser .inactive-sidebar {
+ /* -webkit-filter: blur(1px); */
+ opacity: 0.2;
+ pointer-events: none;
+}
+
+.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question {
+ /* -webkit-filter: none; */
+ opacity: 1;
+ pointer-events: auto;
+}
+
+.widgets-chooser ul,
+#widgets-left .widget-in-question .widget-top,
+#available-widgets .widget-top:hover,
+div#widgets-right .widget-top:hover,
+#widgets-left .widget-top:hover {
+ border-color: #999;
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+ box-shadow: 0 1px 2px rgba(0,0,0,0.1);
+}
+
+.widgets-chooser ul.widgets-chooser-sidebars {
+ margin: 0;
+ list-style-type: none;
+ max-height: 300px;
+ overflow: auto;
+}
+
+.widgets-chooser {
+ display: none;
+}
+
+.widgets-chooser ul {
+ border: 1px solid #ccc;
+}
+
+.widgets-chooser li {
+ padding: 10px 15px 10px 35px;
+ border-bottom: 1px solid #ccc;
+ background: #fff;
+ margin: 0;
+ cursor: pointer;
+ outline: none;
+ position: relative;
+ -webkit-transition: background 0.2s ease-in-out;
+ transition: background 0.2s ease-in-out;
+}
+
+.widgets-chooser li:hover,
+.widgets-chooser li:focus {
+ background: rgba(255,255,255,0.7);
+}
+
+.widgets-chooser li:focus:before {
+ content: '\f147';
+ display: block;
+ -webkit-font-smoothing: antialiased;
+ font: normal 26px/1 'dashicons';
+ color: #999;
+ position: absolute;
+ top: 7px;
+ left: 5px;
+}
+
+.widgets-chooser li:last-child {
+ border: none;
+}
+
+.widgets-chooser li.widgets-chooser-selected {
+ background: #2ea2cc;
+ color: #fff;
+}
+
+.widgets-chooser li.widgets-chooser-selected:before,
+.widgets-chooser li.widgets-chooser-selected:focus:before {
+ content: '\f147';
+ display: block;
+ -webkit-font-smoothing: antialiased;
+ font: normal 26px/1 'dashicons';
+ color: #fff;
+ position: absolute;
+ top: 7px;
+ left: 5px;
+}
+
+.widgets-chooser .widgets-chooser-actions {
+ padding: 10px 0 12px 0;
+ text-align: center;
+}
+
+.widgets-chooser button {
+ margin-right: 5px;
+}
+
+#available-widgets .widget .widget-top {
+ cursor: pointer;
+}
+
+/* =Media Queries
+-------------------------------------------------------------- */
+
+@media screen and (max-width: 480px) {
+ div.widget-liquid-left {
+ width: 100%;
+ float: none;
+ border-right: none;
+ padding-right: 0;
+ }
+
+ #widgets-left .sidebar-name {
+ margin-right: 0;
+ }
+
+ #widgets-left #available-widgets .widget-top {
+ margin-right: 0;
+ }
+
+ #widgets-left .inactive-sidebar .widgets-sortables {
+ margin-right: 0;
+ }
+
+ div.widget-liquid-right {
+ width: 100%;
+ float: none;
+ }
+
+ div.widget {
+ margin: 0 auto 10px !important;
+ max-width: 480px;
+ }
+}
+
+@media screen and (max-width: 320px) {
+ div.widget {
+ max-width: 320px;
+ }
+}
+
+@media only screen and (min-width: 1250px) {
+ #widgets-left #available-widgets .widget {
+ width: 49%;
+ float: left;
+ }
+
+ .widget.ui-draggable-dragging {
+ min-width: 49%;
+ }
+
+ #widgets-left #available-widgets .widget:nth-child(even) {
+ float: right;
+ }
+
+ #widgets-right .sidebars-column-1,
+ #widgets-right .sidebars-column-2 {
+ float: left;
+ width: 49%;
+ }
+
+ #widgets-right .sidebars-column-1 {
+ margin-right: 2%;
+ }
+
+ #widgets-right.single-sidebar .sidebars-column-1,
+ #widgets-right.single-sidebar .sidebars-column-2 {
+ float: none;
+ width: 100%;
+ margin: 0;
+ }
+}
diff --git a/wp-admin/css/wp-admin-rtl.css b/wp-admin/css/wp-admin-rtl.css
new file mode 100644
index 0000000..c45d5b1
--- /dev/null
+++ b/wp-admin/css/wp-admin-rtl.css
@@ -0,0 +1,14 @@
+@import url(common-rtl.css);
+@import url(forms-rtl.css);
+@import url(admin-menu-rtl.css);
+@import url(dashboard-rtl.css);
+@import url(list-tables-rtl.css);
+@import url(edit-rtl.css);
+@import url(revisions-rtl.css);
+@import url(media-rtl.css);
+@import url(themes-rtl.css);
+@import url(press-this-rtl.css);
+@import url(about-rtl.css);
+@import url(nav-menus-rtl.css);
+@import url(widgets-rtl.css);
+@import url(l10n-rtl.css);
diff --git a/wp-admin/css/wp-admin-rtl.min.css b/wp-admin/css/wp-admin-rtl.min.css
new file mode 100644
index 0000000..ef5a2df
--- /dev/null
+++ b/wp-admin/css/wp-admin-rtl.min.css
@@ -0,0 +1,8 @@
+#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%;padding-right:20px}#wpcontent,#wpfooter{margin-right:160px}.folded #wpcontent,.folded #wpfooter{margin-right:36px}#wpbody-content{padding-bottom:65px;float:right;width:100%;overflow:visible!important}.inner-sidebar{float:left;clear:left;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-left:auto;width:286px;display:block}.columns-2 .inner-sidebar #side-sortables,.inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:right;clear:right;width:100%;margin-left:-2000px}.has-right-sidebar #post-body-content{margin-left:300px;float:none;width:auto}#col-container,#col-left,#col-right{overflow:hidden;padding:0;margin:0}#col-left{width:35%}#col-right{float:left;clear:left;width:65%}.col-wrap{padding:0 7px}.alignleft{float:right}.alignright{float:left}.textleft{text-align:right}.textright{text-align:left}.clear{clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{right:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.js .wp-core-ui .hide-if-js,.js.wp-core-ui .hide-if-js,.no-js .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js,.no-js.wp-core-ui .hide-if-no-js{display:none}#menu-management .menu-edit,#menu-settings-column .accordion-container,.feature-filter,.imgedit-group,.manage-menus,.menu-item-handle,.popular-tags,.stuffbox,.widget-inside,.widget-top,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.feature-filter,.imgedit-group,.popular-tags,.stuffbox,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{background:#fff}body,html{height:100%;margin:0;padding:0}html{background:#f1f1f1}body{color:#444;font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.modal-open{overflow:hidden}body.mobile.modal-open #wpwrap{overflow:hidden;height:100%}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0074a2;-webkit-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}a,div{outline:0}a:active,a:hover{color:#2ea2cc}a:focus{color:#124964;-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus,.screen-reader-text:focus{-webkit-box-shadow:none;box-shadow:none;outline:0}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}p{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}dd,li{margin-bottom:6px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2{color:#222;font-size:1.5em;margin:.83em 0;font-weight:400}h3{color:#222;font-size:1.3em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ol,ul{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-right:2em}ul.ul-disc{list-style:disc}ul.ul-square{list-style:square}ol.ol-decimal{list-style:decimal}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-right:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.ltr{direction:ltr}.code,code{font-family:Consolas,Monaco,monospace;direction:ltr;unicode-bidi:embed}code,kbd{padding:3px 5px 2px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;float:right;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#999;font-weight:400}.subsubsub a.current{font-weight:600;border:none}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat *{word-wrap:break-word}.widefat a{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot th{border-top:1px solid #e1e1e1;border-bottom:none}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat th{text-align:right;line-height:1.3em;font-size:14px}.widefat th input{margin:0 8px 0 0;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.widefat th input[type=checkbox]{margin-top:-1px}.widefat.media .check-column{padding-top:8px}.widefat tbody th.check-column,.widefat tfoot th.check-column,.widefat thead th.check-column{padding:11px 3px 0 0}.widefat thead th.check-column{padding-top:10px}.update-php div.error,.update-php div.updated{margin-right:0}.no-js .widefat tfoot .check-column input,.no-js .widefat thead .check-column input{display:none}.column-comments,.column-links,.column-posts,.widefat .num{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 2px 0 20px}.attention{color:#2ea2cc}.subtitle,.wrap h2{font-weight:400;margin:0}.wrap h2{font-size:23px;font-weight:400;padding:9px 0 4px 15px;line-height:29px}.subtitle{color:#777;font-size:14px;padding-right:25px}.wrap .add-new-h2,.wrap .add-new-h2:active{margin-right:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:none;-webkit-border-radius:2px;border-radius:2px;background:#e0e0e0;text-shadow:none;font-weight:600;font-size:13px}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.wrap h2.long-header{padding-left:0}.wp-dialog{background-color:#fff}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}.alt,.alternate{background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-left-color:#99d}.media-upload-form label.form-help,td.help{color:#9a9a9a}.highlight{background-color:#e4f2fd;color:#000}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#d54e21}.wp-ui-text-notification{color:#d54e21}.wp-ui-text-icon{color:#999}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox .hndle,.side-info,.sidebar-name,.stuffbox .hndle,.widefat tfoot th,.widefat thead th,.widget .widget-top{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#222}.postbox .hndle,.stuffbox .hndle{border-bottom:1px solid #eee}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,#welcome-panel.welcome-panel .welcome-panel-close:before,.tagchecklist span a:before{background:0 0;color:#bbb;content:'\f153';display:block!important;font:400 16px/1 dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased!important}#welcome-panel.welcome-panel .welcome-panel-close:before{margin:0}#bulk-titles div a:before,.tagchecklist span a:before{margin:2px 0}#bulk-titles div a:hover:before,#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before{color:#c00}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap;word-wrap:break-word}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete,#search-plugins-table .plugins a.delete,.plugins a.delete,.row-actions span.delete a,.row-actions span.spam a,.row-actions span.trash a,.submitbox .submitdelete{color:#a00}#all-plugins-table .plugins a.delete:hover,#media-items a.delete-permanently:hover,#media-items a.delete:hover,#nav-menu-footer .menu-delete:hover,#search-plugins-table .plugins a.delete:hover,.file-error,.plugins a.delete:hover,.row-actions .delete a:hover,.row-actions .spam a:hover,.row-actions .trash a:hover,.submitbox .submitdelete:hover,.widget-control-remove:hover,abbr.required{color:red;text-decoration:none;border:none}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{line-height:28px;vertical-align:middle;text-align:right;float:right}#publishing-action{text-align:left;float:left;line-height:23px}#publishing-action .spinner{float:right}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:left}#save-post{float:right}.preview{float:left}#sticky-span{margin-right:18px}.side-info{margin:0;padding:4px;font-size:11px}.side-info h5{padding-bottom:7px;font-size:14px;margin:12px 2px 5px;border-bottom:1px solid #dadada}.side-info ul{margin:0;padding-right:18px;list-style:square;color:#666}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:left}.wp-filter{display:inline-block;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:12px 0 25px;padding:0 20px;width:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5;background:#fff;color:#555;font-size:13px}.wp-filter a{text-decoration:none}.filter-count{display:inline-block;vertical-align:middle;min-width:4em}.filter-count .count,.title-count{display:inline-block;position:relative;top:-1px;padding:4px 10px;-webkit-border-radius:30px;border-radius:30px;background:#777;color:#fff;font-size:14px;font-weight:600}.title-count{display:inline;top:-3px;margin-right:5px;margin-left:20px}.filter-items{float:right}.filter-links,.filter-links li{display:inline-block;margin:0}.filter-links li>a{display:inline-block;margin:0 10px;padding:15px 0;border-bottom:4px solid #fff;color:#666;cursor:pointer}.filter-links .current{-webkit-box-shadow:none;box-shadow:none;border-bottom:4px solid #666;color:#222}.filter-links li>a:focus,.filter-links li>a:hover,.show-filters .filter-links a.current:focus,.show-filters .filter-links a.current:hover{color:#2ea2cc}.wp-filter .search-form{float:left;margin:10px 0}.wp-filter .search-form input[type=search]{margin:0;padding:3px 5px;width:280px;max-width:100%;font-size:16px;font-weight:300;line-height:1.5}.wp-filter .search-form select{margin:0;height:32px;vertical-align:top}.wp-filter .search-form.search-plugins{display:inline-block}.wp-filter .drawer-toggle{display:inline-block;margin:0 10px;padding:4px 6px;color:#666;cursor:pointer}.wp-filter .drawer-toggle:before{display:inline-block;vertical-align:top;content:"\f111";margin:0 0 0 5px;width:16px;height:16px;color:#777;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;font-family:dashicons;font-size:16px;line-height:1;text-align:center;text-decoration:inherit;font-weight:400;font-style:normal;-webkit-font-smoothing:antialiased}.wp-filter .drawer-toggle:hover,.wp-filter .drawer-toggle:hover:before{color:#2ea2cc}.wp-filter .drawer-toggle.current:before{color:#fff}.filter-drawer{display:none;margin:0 -20px;padding:20px;border-top:1px solid #eee;background:#fafafa}.show-filters .filter-drawer{display:block;overflow:hidden;width:100%}.show-filters .wp-filter .drawer-toggle:focus,.show-filters .wp-filter .drawer-toggle:hover{background:#2ea2cc}.show-filters .filter-links a.current{border-bottom:none}.show-filters .wp-filter .drawer-toggle{-webkit-border-radius:2px;border-radius:2px;border:none;background:#777;color:#fff}.show-filters .wp-filter .drawer-toggle:before{color:#fff}.filter-group{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:right;margin:0 0 0 1%;padding:10px;width:24%;background:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.filter-group h4{position:relative;margin:0}.filter-drawer ol{margin:20px 0 0;list-style-type:none;font-size:12px}.filter-drawer li{display:inline-block;vertical-align:top;margin:5px 0;padding-left:25px;width:160px;list-style-type:none}.filter-drawer .buttons{margin-bottom:20px}.filter-drawer .buttons .button span{display:inline-block;opacity:.8;font-size:12px;text-indent:10px}.wp-filter .button.clear-filters{display:none;margin:0 10px 20px 0}.filtered-by{display:none;margin:0}.filtered-by>span{font-weight:600}.filtered-by a{margin-right:10px}.filtered-by .tags{display:inline}.filtered-by .tag{margin:0 5px;padding:4px 8px;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:11px}.filters-applied .filter-drawer .buttons,.filters-applied .filter-drawer br,.filters-applied .filter-group{display:none!important}.filters-applied .filtered-by{display:block}.filters-applied .filter-drawer{padding:20px}.error .content-filterable,.loading-content .content-filterable,.show-filters .content-filterable,.show-filters.filters-applied.loading-content .content-filterable{display:none}.show-filters.filters-applied .content-filterable{display:block}.loading-content .spinner{display:block;margin:40px auto 0;float:none}@media only screen and (max-width:1120px){.filter-drawer{border-bottom:1px solid #eee}.filter-group{margin-bottom:0;margin-top:5px;width:100%}.filter-group li{margin:10px 0}}@media only screen and (max-width:1000px){.filter-items{float:none}.wp-filter .media-toolbar-primary,.wp-filter .media-toolbar-secondary,.wp-filter .search-form{float:none;position:relative;max-width:100%}}@media only screen and (max-width:782px){.filter-group li{padding:0;width:50%}}@media only screen and (max-width:320px){.filter-count{display:none}.wp-filter .drawer-toggle{margin:10px 0}.filter-group li,.wp-filter .search-form input[type=search]{width:100%}}.notice,div.error,div.updated{background:#fff;border-right:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 15px 2px;padding:1px 12px}.form-table td .notice p,.notice p,div.error p,div.updated p{margin:.5em 0;padding:2px}.notice-success,div.updated{border-color:#7ad03a}.notice-warning{border-color:#ffba00}.notice-error,div.error{border-color:#dd3d36}.notice-info{border-color:#2ea2cc}.media-upload-form .notice,.media-upload-form div.error,.wrap .notice,.wrap div.error,.wrap div.updated{margin:5px 0 15px}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:right;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}.update-php .spinner{float:none;margin:-4px 0}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading{visibility:hidden}#ajax-response.alignleft{margin-right:2em}#adminmenu a,#catlist a,#sidemenu a,#taglist a{text-decoration:none}#contextual-help-wrap,#screen-options-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-right:0!important}#screen-meta .screen-reader-text{visibility:hidden}#screen-meta-links{margin:0 0 0 20px}#screen-meta-links a{padding:3px 16px 3px 6px}#screen-meta-links a:focus{outline:0}#screen-meta{display:none;margin:0 0 -1px 20px;position:relative;background-color:#fff;border:1px solid #ddd;border-top:none;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-link-wrap,#screen-options-link-wrap{float:left;height:28px;margin:0 6px 0 0;border:1px solid #ddd;border-top:none;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links a{color:#777}#screen-meta-links a:active,#screen-meta-links a:focus,#screen-meta-links a:hover{color:#333}#screen-meta-links a.show-settings{display:block;font-size:13px;height:22px;line-height:22px;text-decoration:none;z-index:1}#screen-meta-links a:after{left:0;content:'\f140';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 5px;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#bbb}#screen-meta-links a.screen-meta-active:after{content:'\f142'}#screen-meta-links a.show-settings:hover{text-decoration:none}.toggle-arrow{background-repeat:no-repeat;background-position:top right;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom right}#contextual-help-wrap h5,#screen-options-wrap h5{margin:8px 0;font-size:13px}.metabox-prefs label{display:inline-block;padding-left:15px;line-height:30px}.metabox-prefs label input[type=checkbox]{margin-top:-4px;margin-left:6px}.metabox-prefs label input{margin:0 2px 0 5px}.metabox-prefs .columns-prefs label input{margin:0 2px}.metabox-prefs label a{display:none}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;right:150px;left:170px;border:1px solid #e1e1e1;border-top:none;border-bottom:none;background:#f6fbfd}#contextual-help-wrap.no-sidebar #contextual-help-back{left:0;border-left-width:0;-webkit-border-bottom-left-radius:2px;border-bottom-left-radius:2px}.contextual-help-tabs{float:right;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:0 2px 0 0;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 12px 5px 5px;line-height:18px;text-decoration:none;border:1px solid transparent;border-left:none;border-right:none}.contextual-help-tabs a:hover{color:#333}.contextual-help-tabs .active{padding:0;margin:0 0 0 -1px;border-right:2px solid #2ea2cc;background:#f6fbfd;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active a{border-color:#e1e1e1;color:#333}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 0 12px 22px;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-right:18px}.contextual-help-sidebar{width:150px;float:left;padding:0 12px 0 8px;overflow:auto}html.wp-toolbar{padding-top:32px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.narrow{width:70%;margin-bottom:40px}.narrow p{line-height:150%}.widefat td,.widefat th{overflow:hidden;color:#555}.widefat th{font-weight:400}.widefat tfoot tr th,.widefat thead tr th{color:#333}.widefat td p{margin:2px 0 .8em}.widefat ol,.widefat p,.widefat ul{color:#333}.widefat .column-comment p{margin:.6em 0}.postbox-container{float:right}.postbox-container .meta-box-sortables{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #bbb;height:250px}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:right}#post-body.columns-2 #postbox-container-1{float:left;margin-left:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{cursor:move}.hndle a{font-size:11px;font-weight:400}.postbox .handlediv{float:left;width:27px;height:30px}.js .postbox .handlediv{cursor:pointer}.sortable-placeholder{border:1px dashed #bbb;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox .hndle,.stuffbox .hndle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:none;-webkit-box-shadow:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 5px}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.plugins .name{font-weight:600}#wpfooter{position:absolute;bottom:0;right:0;left:0;padding:10px 20px;color:#777}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}#wpfooter a{text-decoration:none}#wpfooter a:hover{text-decoration:underline}.nav-tab{border:1px solid #ccc;border-bottom:none;background:#e4e4e4;color:#555;font-size:12px;line-height:16px;display:inline-block;padding:4px 14px 6px;text-decoration:none;margin:-4px 0 -1px 4px}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom:1px solid #ccc;padding-bottom:0;padding-right:10px}h2 .nav-tab{padding:6px 10px;font-weight:700;font-size:15px;line-height:24px}.spinner{background:url(../images/spinner.gif) 0 0/20px 20px no-repeat;-webkit-background-size:20px 20px;display:none;float:left;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}#template div{margin-left:190px}.metabox-holder h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#templateside ul li a{text-decoration:none}#sidemenu{margin:-30px 315px 0 15px;list-style:none;position:relative;float:left;padding-right:10px;font-size:12px}#sidemenu a{padding:0 7px;display:block;float:right;line-height:28px;border-top:1px solid #f9f9f9;border-bottom:1px solid #dfdfdf;background-color:#f9f9f9;-webkit-transition:none;transition:none}#sidemenu li{display:inline;line-height:200%;list-style:none;text-align:center;white-space:nowrap;margin:0;padding:0}#sidemenu a.current{font-weight:400;padding-right:6px;padding-left:6px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;border:1px solid #dfdfdf;border-bottom-color:#f1f1f1;background-color:#f1f1f1;color:#000}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:right}.error-message{color:red;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}td.media-icon{text-align:center;width:80px;padding-top:8px;padding-bottom:8px}td.media-icon img{max-width:80px;max-height:60px;width:auto;height:auto}td.image-icon img{border:1px solid rgba(0,0,0,.07)}#howto{font-size:11px;margin:0 5px;display:block}.importers td{padding-left:14px}.importers{font-size:16px;width:auto}#post-body #post-body-content #namediv h3{margin-top:0}#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px;white-space:nowrap}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.zerosize{height:0;width:0;margin:0;border:0;padding:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:none;margin:0;padding:0}fieldset{border:0;padding:0;margin:0}.post-categories{display:inline;margin:0;padding:0}.post-categories li{display:inline}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) bottom right repeat-x}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) top right repeat-x;height:17px;float:right}.star-rating{white-space:nowrap}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;text-align:center;color:#0074a2}.star-rating .star-full:before{content:'\f155'}.star-rating .star-half:before{content:'\f459'}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:'\f154'}div.action-links{font-weight:400}#plugin-information{background:#fff;position:fixed;top:0;left:0;bottom:0;right:0;height:100%;padding:0}#plugin-information-scrollable{overflow:auto;height:100%}#plugin-information-title{padding:0 20px;background:#f5f5f5;font-size:22px;font-weight:600;line-height:56px;position:relative;top:0;left:0;right:0;height:56px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner{margin-left:0;height:250px;bottom:250px;-webkit-background-size:100% auto;background-size:100% auto}#plugin-information-title h2{font-size:1em;font-weight:700;padding:0;margin:0;max-width:680px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner h2{font-family:"Helvetica Neue",sans-serif;display:inline-block;font-size:30px;line-height:50px;padding:0 15px;margin:174px 10px 0 0;color:#fff;background:rgba(30,30,30,.9);text-shadow:0 1px 3px rgba(0,0,0,.4);-webkit-box-shadow:0 0 30px rgba(255,255,255,.1);box-shadow:0 0 30px rgba(255,255,255,.1);-webkit-border-radius:8px;border-radius:8px}#plugin-information-title div.vignette{display:none}#plugin-information-title.with-banner div.vignette{display:block;float:left;top:0;height:250px;width:772px;margin:0 -20px;background:0 0;-webkit-box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1)}#plugin-information-tabs{padding:0 16px;position:relative;left:0;right:0;height:36px;z-index:1;border-bottom:1px solid #ddd;background:#f3f3f3}#plugin-information-tabs a{position:relative;float:right;padding:9px 10px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;-webkit-transition:none;transition:none}#plugin-information-tabs a.current{margin:0 -1px;background:#fff;border:1px solid #ddd;border-bottom-color:#fff;padding-top:8px;color:#333}#plugin-information-tabs.with-banner a.current{border-top:none;padding-top:9px}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{overflow:hidden;background:#fff;position:relative;top:0;left:0;right:0;min-height:100%;min-height:-webkit-calc(100% - 152px);min-height:calc(100% - 152px)}#plugin-information-content.with-banner{min-height:-webkit-calc(100% - 346px);min-height:calc(100% - 346px)}#section-holder{position:relative;top:0;left:250px;bottom:0;right:0;margin-left:250px;padding:10px 26px 99999px;margin-bottom:-99930px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{display:block;float:left;position:relative;top:0;left:0;padding:16px 16px 99999px;margin-bottom:-99930px;width:217px;border-right:1px solid #ddd;background:#f3f3f3;color:#666}#plugin-information .fyi strong{color:#464646}#plugin-information .fyi h3{font-weight:700;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-left:0}#plugin-information .fyi ul{padding:0;margin:0;list-style:none}#plugin-information .fyi li{margin:0 0 10px}#plugin-information .counter-container{margin:3px 0}#plugin-information .counter-label{float:right;margin-left:5px;min-width:55px}#plugin-information .counter-back{height:17px;width:92px;background-color:#ececec;float:right}#plugin-information .counter-bar{height:17px;background-color:#fddb5a;float:right}#plugin-information .counter-count{margin-right:5px}#plugin-information .fyi ul.contributors{margin-top:10px}#plugin-information .fyi ul.contributors li{display:inline-block;margin-left:8px;vertical-align:middle}#plugin-information .fyi ul.contributors li img{vertical-align:middle;margin-left:4px}#plugin-information-footer{padding:15px 16px;position:absolute;left:0;bottom:0;right:0;height:28px;border-top:1px solid #ddd;background:#f3f3f3}#plugin-information .section{direction:ltr}#plugin-information .section ol,#plugin-information .section ul{list-style-type:disc;margin-left:24px}#plugin-information .section,#plugin-information .section p{font-size:14px;line-height:1.7}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;margin-top:16px;max-width:100%;width:auto;height:auto;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px}#plugin-information pre{padding:7px;overflow:auto;border:1px solid #ccc}#plugin-information .review{overflow:hidden;width:100%;margin-bottom:20px;border-bottom:1px solid #e6e6e6}#plugin-information .review-title-section{overflow:hidden}#plugin-information .review-title-section h4{display:inline-block;float:left;margin:0 6px 0 0}#plugin-information .reviewer-info p{clear:both;margin:0;padding-top:2px}#plugin-information .reviewer-info .avatar{float:left;margin:4px 6px 0 0}#plugin-information .reviewer-info .star-rating{float:left}#plugin-information .review-meta{float:left;margin-left:.75em}#plugin-information .review-body{float:left;width:100%}.plugin-version-author-uri{font-size:13px}@media screen and (max-width:771px){#plugin-information-title.with-banner{height:100px;bottom:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:40px;max-width:85%}#plugin-information-title.with-banner div.vignette{height:100px;bottom:100px;width:800%}#plugin-information-tabs{overflow:hidden;padding:0;height:auto}#plugin-information-tabs a.current{margin-bottom:0;border-bottom:none}#plugin-information .fyi{float:none;border:1px solid #ddd;position:static;width:auto;margin:26px 26px 0;padding-bottom:0}#section-holder{position:static;margin:0;padding-bottom:70px}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}body.import-php #TB_window,body.index-php #TB_window,body.plugin-install-php #TB_window,body.plugins-php #TB_window,body.update-core-php #TB_window{background:url(../images/spinner.gif) no-repeat center #fcfcfc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){body.import-php #TB_window,body.index-php #TB_window,body.plugin-install-php #TB_window,body.plugins-php #TB_window,body.update-core-php #TB_window{background:url(../images/spinner-2x.gif) no-repeat center/20px 20px #fcfcfc;-webkit-background-size:20px 20px}}body.import-php #TB_title,body.index-php #TB_title,body.plugin-install-php #TB_title,body.plugins-php #TB_title,body.update-core-php #TB_title{float:right;height:1px}body.import-php #TB_ajaxWindowTitle,body.index-php #TB_ajaxWindowTitle,body.plugin-install-php #TB_ajaxWindowTitle,body.plugins-php #TB_ajaxWindowTitle,body.update-core-php #TB_ajaxWindowTitle{display:none}body.import-php .tb-close-icon,body.index-php .tb-close-icon,body.plugin-install-php .tb-close-icon,body.plugins-php .tb-close-icon,body.update-core-php .tb-close-icon{right:auto;left:-30px;color:#eee;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}body.import-php #TB_closeWindowButton:focus,body.import-php #TB_closeWindowButton:focus .tb-close-icon,body.import-php .tb-close-icon:focus,body.import-php .tb-close-icon:hover,body.index-php #TB_closeWindowButton:focus,body.index-php #TB_closeWindowButton:focus .tb-close-icon,body.index-php .tb-close-icon:focus,body.index-php .tb-close-icon:hover,body.plugin-install-php #TB_closeWindowButton:focus,body.plugin-install-php #TB_closeWindowButton:focus .tb-close-icon,body.plugin-install-php .tb-close-icon:focus,body.plugin-install-php .tb-close-icon:hover,body.plugins-php #TB_closeWindowButton:focus,body.plugins-php #TB_closeWindowButton:focus .tb-close-icon,body.plugins-php .tb-close-icon:focus,body.plugins-php .tb-close-icon:hover,body.update-core-php #TB_closeWindowButton:focus,body.update-core-php #TB_closeWindowButton:focus .tb-close-icon,body.update-core-php .tb-close-icon:focus,body.update-core-php .tb-close-icon:hover{color:#2ea2cc;outline:0;-webkit-box-shadow:none;box-shadow:none}body.import-php .tb-close-icon:before,body.index-php .tb-close-icon:before,body.plugin-install-php .tb-close-icon:before,body.plugins-php .tb-close-icon:before,body.update-core-php .tb-close-icon:before{content:"\f335";font-size:32px}@media screen and (max-width:830px){body.import-php .tb-close-icon,body.index-php .tb-close-icon,body.plugin-install-php .tb-close-icon,body.plugins-php .tb-close-icon,body.update-core-php .tb-close-icon{left:0;top:-30px}}img{border:none}#wphead{border-bottom:1px solid #dfdfdf}#wphead h1 a{color:#464646}.js .meta-box-sortables .postbox:hover .handlediv{margin-left:0!important}.js .meta-box-sortables .postbox .handlediv:before,.js .sidebar-name .sidebar-name-arrow:before{left:12px;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.js #widgets-left .sidebar-name .sidebar-name-arrow{display:none}.js #widgets-left .sidebar-name:hover .sidebar-name-arrow,.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow{display:block}.js .meta-box-sortables .postbox .handlediv:before,.js .sidebar-name .sidebar-name-arrow:before{content:'\f142'}.js .meta-box-sortables .postbox.closed .handlediv:before,.js .widgets-holder-wrap.closed .sidebar-name-arrow:before{content:'\f140'}.error a{text-decoration:underline}.updated a{text-decoration:none;padding-bottom:2px}#photo-add-url-div input[type=text]{width:300px}.alignleft h3{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;width:97%;background:#f9f9f9;outline:0}#docs-list,#template textarea{direction:ltr}#template p{width:97%}#templateside{float:left;width:190px;word-wrap:break-word}#postcustomstuff p.submit,#templateside h3{margin:0}#templateside h4{margin:1em 0 0}#templateside ol,#templateside ul{margin:.5em 0;padding:0}#templateside li{margin:4px 0}#templateside li a,.theme-editor-php .highlight{display:block;padding:3px 12px 3px 3px;text-decoration:none}.theme-editor-php .highlight{margin:-3px -12px -3px 3px}#templateside .highlight{border:none;font-weight:700}.nonessential{color:#666;font-size:11px;font-style:italic;padding-right:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top a.widget-action:after{left:0;content:'\f140';border:none;background:0 0;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.accordion-section-title:after,.handlediv,.item-edit,.sidebar-name-arrow,.widget-action{color:#aaa}.accordion-section-title:hover:after,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.widget-action:hover{color:#777}.widget-top a.widget-action:after{padding:12px 12px 11px}.widget-top a.widget-action:focus:after{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.nav-menus-php .item-edit:before{line-height:2.1}.accordion-section-title:after,.control-section .accordion-section-title:after{float:left;left:20px;top:-2px}#customize-info.open .accordion-section-title:after,.control-section.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before,.widget.open .widget-top a.widget-action:after{content:'\f142'}/*!
+ * jQuery UI Draggable/Sortable 1.11.2
+ * http://jqueryui.com
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */.ui-draggable-handle,.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.accordion-section{border-bottom:1px solid #dfdfdf;margin:0}.accordion-section.open .accordion-section-content,.no-js .accordion-section .accordion-section-content{display:block}.accordion-section.open:hover{border-bottom-color:#dfdfdf}.accordion-section-content{display:none;padding:10px 20px 15px;overflow:hidden;background:#fff}.accordion-section-title{margin:0;padding:12px 15px 15px;position:relative;border-right:1px solid #dfdfdf;border-left:1px solid #dfdfdf;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.js .accordion-section-title{cursor:pointer}.js .accordion-section-title:after{position:absolute;top:12px;left:10px;z-index:1}.accordion-section-title:focus{outline:0}.accordion-section-title:focus:after,.accordion-section-title:hover:after{border-color:#aaa transparent}.cannot-expand .accordion-section-title{cursor:auto}.cannot-expand .accordion-section-title:after{display:none}.control-section .accordion-section-title{border-right:none;border-left:none;padding:10px 14px 11px 10px;line-height:21px;background:#fff}.control-section .accordion-section-title:after{top:11px}.js .control-section .accordion-section-title:focus,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section:hover .accordion-section-title{color:#222;background:#f5f5f5}.control-section.open .accordion-section-title{border-bottom:1px solid #dfdfdf}@media only screen and (min-width:769px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:860px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (min-width:980px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:768px){#col-left,#col-right{width:100%}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){div.star-holder,div.star-holder .star-rating{background:url(../images/stars-2x.png?ver=20121108) bottom right/21px 37px repeat-x;-webkit-background-size:21px 37px}.spinner{background-image:url(../images/spinner-2x.gif)}#bulk-titles div a,#bulk-titles div a:hover,#screen-meta-links a.show-settings,.curtime #timestamp,.meta-box-sortables .postbox:hover .handlediv,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.tagchecklist span a,.tagchecklist span a:hover,.widget-top a.widget-action,.widget-top a.widget-action:hover{background:none!important}}@-ms-viewport{width:device-width}@media screen and (max-width:782px){html.wp-toolbar{padding-top:46px}body{min-width:240px;overflow-x:hidden}body *{-webkit-tap-highlight-color:transparent!important}#wpcontent{position:relative;margin-right:0;padding-right:10px}#wpbody-content{padding-bottom:100px}.wrap{margin-left:12px;margin-right:0}.col-wrap{padding:0}#collapse-menu,#screen-meta,#screen-meta-links,.post-format-select{display:none!important}.wrap .add-new-h2,.wrap .add-new-h2:active{padding:10px 15px;font-size:14px}.wp-color-result{height:auto;padding-right:45px}.wp-color-result:after{font-size:14px;height:auto;padding:6px 14px}.media-upload-form div.error,.wrap div.error,.wrap div.updated{margin:20px 0 10px;padding:5px 10px;font-size:14px;line-height:175%}.wrap .icon32+h2{margin-top:-2px}.wp-responsive-open #wpbody{left:-190px}code{word-wrap:break-word}.postbox{font-size:14px}.metabox-holder h3{padding:12px}.postbox .handlediv{margin-top:3px}.subsubsub{font-size:16px;text-align:center;margin-bottom:15px}#templateside{float:none;width:auto}#templateside li{margin:0}#templateside li a{display:block;padding:5px}#templateside .highlight{padding:5px;margin-right:-5px;margin-top:-5px}#template div{float:none;margin:0;width:auto}#template textarea{width:100%}.fileedit-sub .alignright{margin-top:15px}#comments-form .checkforspam,#wpfooter{display:none}}@media screen and (max-width:600px){#wpwrap.wp-responsive-open{overflow-x:hidden}html.wp-toolbar{padding-top:0}#wpbody{padding-top:46px}div#post-body.metabox-holder.columns-1{overflow-x:hidden}}input,textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;outline:0;-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=email],input[type=url]{direction:ltr}input[type=checkbox],input[type=radio]{border:1px solid #bbb;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#888}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#2ea2cc}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{-webkit-border-radius:50%;border-radius:50%;margin-left:4px;line-height:10px}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:right;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;-webkit-border-radius:50px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;-webkit-border-radius:0;border-radius:0}textarea{overflow:auto;padding:2px 6px;line-height:1.4}.wp-admin input[type=file]{padding:3px 0}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;-webkit-box-shadow:none;box-shadow:none}input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:none}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:right;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:left}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}#adduser .form-field input,input.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:right;margin-left:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-right:1em}#upload-form label{color:#777}#your-profile label+a,fieldset label,label{vertical-align:middle}#misc-publishing-actions label,.options-media-php label[for*="_size_"]{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;right:-1px;padding:0 0 0 5px;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{background-color:#eee;border:1px solid #ddd;float:right;margin:13px 1px 5px 5px;padding:3px 5px;text-align:center;width:200px;display:none}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c}.indicator-hint{padding-top:8px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}input[type=text].ui-autocomplete-loading{background:url(../images/loading.gif) left center no-repeat;visibility:visible}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete-input.open{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;border:1px solid #aaa;background-color:#efefef}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:right}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px;color:#444}.ui-autocomplete li a.ui-state-focus{background-color:#ddd;cursor:pointer}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#222;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:right;padding:20px 0 20px 10px;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-left:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-left:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.color-option{cursor:pointer}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.pressthis{margin:20px 0}.pressthis a,.pressthis a:active,.pressthis a:focus,.pressthis a:hover{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-ms-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis a span:before{color:#777;font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);-ms-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#local-time,#utc-time{padding-right:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}.widefat th input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}.widefat th input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#createuser .form-field input{width:100%}.form-table{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-left:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-right:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#local-time,#utc-time{display:block;float:none;padding:0;line-height:2}.form-field #domain{max-width:none}}@media only screen and (max-width:768px){.form-field input[type=email],.form-field input[type=password],.form-field input[type=text],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media screen and (max-width:600px){.color-option{width:49%}}#adminmenu,#adminmenu .wp-submenu,#adminmenuback,#adminmenuwrap{width:160px;background-color:#222}#adminmenuback{position:absolute;top:0;bottom:0;z-index:-1}#adminmenu{clear:right;margin:12px 0;padding:0;list-style:none}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:36px}.icon16{height:18px;width:18px;padding:6px;margin:-6px -8px 0 0;float:right}.icon16:before{color:#999;font:400 20px/1 dashicons;speak:none;padding:6px 0;height:34px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.icon16.icon-dashboard:before{content:'\f226'}.icon16.icon-post:before{content:'\f109'}.icon16.icon-media:before{content:'\f104'}.icon16.icon-links:before{content:'\f103'}.icon16.icon-page:before{content:'\f105'}.icon16.icon-comments:before{content:'\f101';margin-top:1px}.icon16.icon-appearance:before{content:'\f100'}.icon16.icon-plugins:before{content:'\f106'}.icon16.icon-users:before{content:'\f110'}.icon16.icon-tools:before{content:'\f107'}.icon16.icon-settings:before{content:'\f108'}.icon16.icon-site:before{content:'\f112'}.icon16.icon-generic:before{content:'\f111'}.icon16.icon-appearance,.icon16.icon-comments,.icon16.icon-dashboard,.icon16.icon-generic,.icon16.icon-links,.icon16.icon-media,.icon16.icon-page,.icon16.icon-plugins,.icon16.icon-post,.icon16.icon-settings,.icon16.icon-site,.icon16.icon-tools,.icon16.icon-users,.menu-icon-appearance div.wp-menu-image,.menu-icon-comments div.wp-menu-image,.menu-icon-dashboard div.wp-menu-image,.menu-icon-generic div.wp-menu-image,.menu-icon-links div.wp-menu-image,.menu-icon-media div.wp-menu-image,.menu-icon-page div.wp-menu-image,.menu-icon-plugins div.wp-menu-image,.menu-icon-post div.wp-menu-image,.menu-icon-settings div.wp-menu-image,.menu-icon-site div.wp-menu-image,.menu-icon-tools div.wp-menu-image,.menu-icon-users div.wp-menu-image{background-image:none!important}#adminmenuwrap{position:relative;float:right;z-index:9990}#adminmenu *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#adminmenu li{margin:0;padding:0;cursor:pointer}#adminmenu a{display:block;line-height:18px;padding:2px 5px;color:#eee}#adminmenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover{background:0 0}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a:hover,#adminmenu li.menu-top>a:focus{color:#45bbe6}#adminmenu li.menu-top{border:none;min-height:34px;position:relative}#adminmenu .wp-submenu{list-style:none;position:absolute;top:-1000em;right:160px;overflow:visible;word-wrap:break-word}#adminmenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{padding:7px 0 8px;z-index:9999;background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu a.menu-top:focus+.wp-submenu,.js #adminmenu .opensub .wp-submenu,.js #adminmenu .sub-open,.no-js li.wp-has-submenu:hover .wp-submenu{top:-1px}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu{position:relative;z-index:3;top:auto;right:auto;left:auto;bottom:auto;border:0;margin-top:0;-webkit-box-shadow:none;box-shadow:none;background-color:#333}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{position:relative;background-color:#111}.folded #adminmenu li.menu-top:hover,.folded #adminmenu li.opensub>a.menu-top,.folded #adminmenu li>a.menu-top:focus{z-index:10000}#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow,#adminmenu .wp-menu-arrow div,#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,.folded #adminmenu li.wp-has-current-submenu{background:#0074a2;color:#fff}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.folded #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open,.folded #adminmenu a.menu-top:focus+.wp-submenu,.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu{top:0;right:36px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{position:absolute;top:-1000em}#adminmenu .wp-not-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{min-width:160px;width:auto}#adminmenu .wp-submenu a{font-size:13px;line-height:1.2;margin:0;padding:6px 0}#adminmenu .opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-not-current-submenu li>a,.folded #adminmenu .wp-has-current-submenu li>a{padding-left:16px;padding-right:14px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:6px 12px}#adminmenu .wp-submenu-head,#adminmenu a.menu-top{font-size:14px;font-weight:400;line-height:18px;padding:0}#adminmenu .wp-submenu-head,.folded #adminmenu .wp-menu-name{display:none}.folded #adminmenu .wp-submenu-head{display:block}#adminmenu .wp-submenu li{padding:0;margin:0;overflow:hidden}#adminmenu .wp-menu-image img{padding:9px 0 0;opacity:.6;filter:alpha(opacity=60)}#adminmenu div.wp-menu-name{padding:8px 0}#adminmenu div.wp-menu-image{float:right;width:36px;height:34px;margin:0;text-align:center}#adminmenu div.wp-menu-image.svg{background-repeat:no-repeat;background-position:center;-webkit-background-size:20px auto;background-size:20px auto}div.wp-menu-image:before{color:#999;padding:7px 0;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu .current div.wp-menu-image:before,#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#45bbe6}.folded #adminmenu div.wp-menu-image{width:35px;height:30px;position:absolute;z-index:25}.folded #adminmenu a.menu-top{height:34px}.no-font-face #adminmenu .wp-menu-image{display:none}.no-font-face #adminmenu div.wp-menu-name{padding:8px 12px}.no-font-face.auto-fold #adminmenu .wp-menu-name{margin-right:0}.sticky-menu #adminmenuwrap{position:fixed}.wp-menu-arrow{display:none!important}ul#adminmenu a.wp-has-current-submenu{position:relative}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{left:0;border:8px solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-left-color:#f1f1f1;top:50%;margin-top:-8px}.folded ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.folded ul#adminmenu a.wp-has-current-submenu:after,.folded ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{left:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:10px;z-index:10000}.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:18px}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#adminmenu li.menu-top:hover .wp-menu-image img,#adminmenu li.wp-has-current-submenu .wp-menu-image img{opacity:1;filter:alpha(opacity=100)}#adminmenu li.wp-menu-separator{height:5px;padding:0;margin:0 0 6px;cursor:inherit}#adminmenu div.separator{height:2px;padding:0}#adminmenu .wp-submenu .wp-submenu-head{color:#fff;font-weight:400;font-size:14px;padding:8px 11px 8px 4px;margin:-7px 0 4px}#adminmenu li.current,.folded #adminmenu li.wp-menu-open{border:0}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu li a span.update-plugins{display:inline-block;background-color:#d54e21;color:#fff;font-size:9px;line-height:17px;font-weight:600;margin:1px 2px 0 0;vertical-align:top;-webkit-border-radius:10px;border-radius:10px;z-index:26}#adminmenu li .awaiting-mod span,#adminmenu li span.update-plugins span,#sidemenu li a span.update-plugins span{display:block;padding:0 6px}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod{background-color:#45bbe6;color:#fff}#adminmenu li span.count-0,#sidemenu li a .count-0{display:none}#collapse-menu{font-size:13px;line-height:34px;margin-top:10px;color:#aaa;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover,#collapse-menu:hover #collapse-button div:after{color:#45bbe6}.folded #collapse-menu span{display:none}#collapse-button,#collapse-button div{width:15px;height:15px}#collapse-button{float:right;height:15px;margin:10px 11px 10px 8px;width:15px;-webkit-border-radius:10px;border-radius:10px}#wpwrap #collapse-button div{padding:0}#collapse-button div:after{content:'\f148';display:block;line-height:15px;right:-3px;top:-3px;color:#aaa;font:400 20px/1 dashicons!important;speak:none;margin:0 auto;padding:0!important;position:relative;text-align:center;width:20px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.folded #collapse-button div:after,.rtl #collapse-button div:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl.folded #collapse-button div:after{-webkit-transform:none;-ms-transform:none;transform:none}.customize-support #menu-appearance a[href="themes.php?page=custom-header"],.customize-support #menu-appearance a[href="themes.php?page=custom-background"],li#wp-admin-bar-menu-toggle{display:none}@media only screen and (max-width:960px){.auto-fold #wpcontent,.auto-fold #wpfooter{margin-right:36px}.auto-fold #adminmenu,.auto-fold #adminmenu li.menu-top,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{width:36px}.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.auto-fold #adminmenu .wp-submenu.sub-open,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu{top:0;right:36px}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu,.auto-fold #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{position:absolute;top:-1000em;margin-left:-1px;padding:7px 0 8px;z-index:9999}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu{min-width:150px;width:auto}.auto-fold #adminmenu .wp-has-current-submenu li>a{padding-left:16px;padding-right:14px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding-right:12px}.auto-fold #adminmenu .wp-menu-name{display:none}.auto-fold #adminmenu .wp-submenu-head{display:block}.auto-fold #adminmenu div.wp-menu-image{height:30px;width:34px;position:absolute;z-index:25}.auto-fold #adminmenu a.menu-top{height:34px}.auto-fold #adminmenu li.wp-menu-open{border:0}.auto-fold #adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0}.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:16px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}.auto-fold #adminmenu li.menu-top:hover,.auto-fold #adminmenu li.opensub>a.menu-top,.auto-fold #adminmenu li>a.menu-top:focus{z-index:10000}.auto-fold #collapse-menu span{display:none}.auto-fold #collapse-button div{background:0 0}.auto-fold #collapse-button div:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl.auto-fold #collapse-button div:after{-webkit-transform:none;-ms-transform:none;transform:none}}@media screen and (max-width:782px){.auto-fold #wpcontent{position:relative;margin-right:0;padding-right:10px}.sticky-menu #adminmenuwrap{position:relative;z-index:auto;top:0}.auto-fold #adminmenu,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{position:absolute;width:190px;z-index:100}.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{display:none}.auto-fold .wp-responsive-open #adminmenuback,.auto-fold .wp-responsive-open #adminmenuwrap{display:block}.auto-fold #adminmenu li.menu-top{width:100%}.auto-fold #adminmenu li a{font-size:16px;padding:5px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding:10px 20px 10px 10px}.auto-fold #adminmenu .wp-menu-name{display:block;margin-right:35px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li.current>a.current:after{border-width:8px;margin-top:-8px}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{display:none}#adminmenu .wp-submenu{position:relative;display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold #adminmenu .wp-menu-open .wp-submenu{position:relative;display:block;top:0;right:-1px;-webkit-box-shadow:none;box-shadow:none}.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .selected .wp-submenu:after,.auto-fold #adminmenu .wp-menu-open .wp-submenu:after{display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:block}.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu{position:relative;right:-1px;left:0;top:0}#adminmenu .wp-submenu .wp-submenu-head{display:none}#wp-responsive-toggle{position:fixed;top:5px;right:4px;padding-left:10px;z-index:99999;border:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpadminbar #wp-admin-bar-menu-toggle a{display:block;padding:0;overflow:hidden;outline:0;text-decoration:none;border:1px solid transparent;background:0 0;height:44px;margin-right:-1px}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#333}li#wp-admin-bar-menu-toggle{display:block}#wpadminbar #wp-admin-bar-menu-toggle a:hover{border:1px solid transparent}#wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{content:'\f228';display:inline-block;float:right;font:400 40px/45px Dashicons;vertical-align:middle;outline:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:44px;width:50px;padding:0;border:none;text-align:center;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}}@media screen and (max-width:600px){#adminmenuback,#adminmenuwrap{display:none}.wp-responsive-open #adminmenuback,.wp-responsive-open #adminmenuwrap{display:block}.auto-fold #adminmenu{top:46px}}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:left;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:left}#dashboard-widgets .postbox-container,#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:none!important}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets-wrap{overflow:hidden;margin:0 -8px}#dashboard-widgets .postbox .inside{margin-bottom:0}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-right:0}#the-comment-list p.comment-author img{float:right;margin-left:8px}#the-comment-list p.comment-author strong a{border:none}#the-comment-list td{vertical-align:top}#the-comment-list td.comment{word-wrap:break-word}#the-comment-list td.comment img{max-width:100%}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}.welcome-panel h3{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h4{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:5px;left:10px;padding:20px 3px 0 15px;font-size:13px;text-decoration:none;line-height:1}#welcome-panel.welcome-panel .welcome-panel-close:before{position:absolute;right:-18px;margin-top:-2px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 0 3px 13px;padding:12px 36px;height:auto;line-height:1.4285714;white-space:normal}.welcome-panel-content{margin-right:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;overflow:hidden;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:right}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.welcome-panel-column p{margin-top:7px;color:#464646}.welcome-panel .welcome-icon{display:block;padding:0 0 8px;background:0 0!important}.welcome-panel .welcome-icon:before{color:#888;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 10px;top:-1px;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-edit-page:before,.welcome-panel .welcome-write-blog:before{content:'\f119';top:-3px}.welcome-panel .welcome-add-page:before{content:'\f132'}.welcome-panel .welcome-view-site:before{content:'\f115';top:-2px}.welcome-panel .welcome-widgets-menus:before{content:'\f116';top:-2px}.welcome-panel .welcome-comments:before{content:'\f117';top:-1px}.welcome-panel .welcome-learn-more:before{content:'\f118';top:-1px}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 0 1em 1em}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .dashboard-widget-control-form,#dashboard_primary .widget-loading{padding:12px 12px 0}body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form{overflow:hidden}.dashboard-widget-control-form p{margin-top:0}.rssSummary{color:#777;margin-top:4px}#dashboard_primary .rss-widget{border-bottom:1px solid #eee;font-size:13px;padding:8px 12px 10px}#dashboard_primary .rss-widget:last-child{border-bottom:none;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date{color:#777}#dashboard_primary .rss-widget span.rss-date{margin-right:12px}#dashboard_primary .rss-widget ul li{margin-bottom:8px}#dashboard_right_now ul{margin:0;overflow:hidden}#dashboard_right_now li{width:50%;float:right;margin-bottom:10px}#dashboard_right_now .inside{overflow:hidden;padding:0}#dashboard_right_now .main{overflow:hidden;padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{clear:left;float:left;position:relative;top:-5px}.mu-storage{overflow:hidden}#dashboard-widgets h4.mu-storage{margin-bottom:10px}#dashboard_right_now li a:before,#dashboard_right_now li span:before{color:#888}#dashboard_right_now .sub{color:#777;background:#f5f5f5;border-top:1px solid #eee;padding:10px 12px 6px}#dashboard_right_now .sub h4{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_right_now li a:before,#dashboard_right_now li span:before{content:'\f159';font:400 20px/1 dashicons;speak:none;display:block;float:right;margin:0 0 0 5px;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:'\f105'}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:'\f109'}#dashboard_right_now .comment-count a:before{content:'\f101'}#dashboard_right_now .comment-mod-count a:before{content:'\f125'}#dashboard_right_now .storage-count a:before{content:'\f104'}#dashboard_right_now .storage-count.warning a:before{content:'\f153'}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 0 1px 1px}#dashboard_quick_press form{overflow:hidden;margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:right}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#777}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:none}#dashboard_quick_press .drafts h4{margin:0 12px 8px;font-weight:400}#dashboard_quick_press .drafts .view-all{float:left;margin:0 0 0 12px}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts li time{color:#777}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title{overflow:hidden}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{float:right;margin:0 0 0 5px}#dashboard-widgets #dashboard_activity h4{margin:0 12px 8px 0;font-weight:400}#dashboard-widgets #dashboard_activity h4.comment-meta{margin:0}#dashboard_activity h4.comment-meta{margin-bottom:4px}#dashboard_activity ul{padding:0 12px}#dashboard_activity .comment-meta span.approve:before{content:'\f227';font:20px/.5 dashicons;margin-right:12px;vertical-align:middle;position:relative;top:-1px;margin-left:2px}#dashboard_activity .inside{padding:0;margin:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 12px 12px;text-align:center}#dashboard_activity .no-activity p{color:#999;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:'\f328';font:400 120px/1 dashicons;speak:none;display:block;margin:0 0 0 5px;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin-top:0;padding:8px 12px 4px}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{overflow:hidden;margin-bottom:8px}#future-posts ul span,#published-posts ul span{color:#777;float:right;margin-left:8px;min-width:150px}.activity-block{border-bottom:1px solid #eee;overflow:hidden;padding:8px 0 4px}.activity-block:last-child{border-bottom:none}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list div.undo,#activity-widget #the-comment-list tr.undo{background:0 0;padding:6px 0;margin-right:12px}#activity-widget #the-comment-list .alt,#activity-widget #the-comment-list .alternate{background:0 0}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list img{position:absolute;top:13px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-right:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item h4{font-size:13px;color:#999}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved{background-color:#fef7f1}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;right:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.edit-box{display:none}h3:hover .edit-box{display:inline}#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:none}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets a{text-decoration:none}#dashboard-widgets h3 a{text-decoration:underline}#dashboard-widgets h3 .postbox-title-action{position:absolute;left:10px;padding:0;top:5px}.js #dashboard-widgets h3 .postbox-title-action{left:33px}#dashboard-widgets h4{color:#222;font-weight:400;font-size:14px;margin:0 0 .2em;padding:0}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative}#activity-widget #the-comment-list .comment,#activity-widget #the-comment-list .pingback{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}#activity-widget #latest-comments #the-comment-list .comment-item{padding:1em 12px}#latest-comments #the-comment-list .pingback{padding-right:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:none}#latest-comments #the-comment-list .comment-item h4{line-height:1.5em;margin-top:0;color:#666}#latest-comments #the-comment-list .comment-item h4 cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#description-wrap label,#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:14px;font-weight:600;line-height:1.7em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#999;font-size:13px;margin-right:3px}.rss-widget cite{display:block;text-align:left;margin:0 0 1em;padding:0}.rss-widget cite:before{content:'\2014'}.dashboard-comment-wrap{overflow:hidden;word-wrap:break-word}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{text-decoration:underline}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-left:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h3{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h3{border-bottom-color:#f6e2ac;background:0 0;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag h3.hndle{border:none;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}.index-php .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left}#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-left:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}@media screen and (max-width:782px){#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 0 5px 10px}}@media screen and (max-width:600px){.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:100%;white-space:nowrap;width:20px;height:20px;left:0;padding:5px}#welcome-panel.welcome-panel .welcome-panel-close:before{font-size:20px;margin:0}}.post-com-count-wrapper{min-width:22px}.post-com-count{background:center -80px no-repeat;height:1.3em;line-height:1.1em;display:block;text-decoration:none;padding:0 0 6px;cursor:pointer;color:#fff}.post-com-count:after{content:"";display:block;width:0;height:0;margin-right:8px;border-top:5px solid #bbb;border-left:5px solid transparent}.post-com-count span{font-size:11px;font-weight:600;height:1.4em;line-height:1.4em;min-width:.7em;padding:0 6px;display:inline-block;-webkit-border-radius:5px;border-radius:5px;background-color:#bbb;color:#fff}.post-com-count:hover{background-position:center -3px}.post-com-count:hover span{background-color:#2ea2cc}.post-com-count:hover:after{border-top:5px solid #2ea2cc}strong .post-com-count{background-position:center -55px}strong .post-com-count span{background-color:#0074a2}strong .post-com-count:after{border-top:5px solid #0074a2}.column-response .post-com-count{float:right;margin-left:5px;text-align:center}.response-links{float:right}.commentlist li{padding:1em 1em .2em;margin:0;border-bottom:1px solid #ccc}.commentlist li li{border-bottom:0;padding:0}.commentlist p{padding:0;margin:0 0 .8em}#submitted-on,.submitted-on{color:#777}#replyrow td{padding:2px}#replysubmit{margin:0;padding:0 5px 3px;text-align:center}#replysubmit .spinner{padding:2px 0 0;vertical-align:top;float:left}#replysubmit .button{margin-left:5px}#replysubmit .error{color:red;line-height:21px;text-align:center}#replyrow h5{margin:.2em 0 0;padding:0 5px;line-height:1.4em;font-size:1em}#edithead .inside{float:right;padding:3px 5px 2px 0;margin:0;text-align:center}#edithead .inside input{width:180px}#edithead label{padding:2px 0}#replycontainer{padding:5px}#replycontent{height:120px;-webkit-box-shadow:none;box-shadow:none}#replyerror{border-color:#ddd;background-color:#f9f9f9}.commentlist .avatar{vertical-align:text-top}#the-comment-list .attachment-80x60{padding:4px 8px}#the-comment-list div.undo,#the-comment-list tr.undo{background-color:#f4f4f4}#the-comment-list .unapproved td,#the-comment-list .unapproved th{background-color:#fef7f1}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .unapproved th.check-column input{margin-right:4px}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list td,#the-comment-list th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#the-comment-list tr:last-child td,#the-comment-list tr:last-child th{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved td,#the-comment-list tr.unapproved+tr.approved th{border-top:1px solid rgba(0,0,0,.03)}.vim-current,.vim-current td,.vim-current th{background-color:#e4f2fd!important}th .comment-grey-bubble{height:16px;width:16px}th .comment-grey-bubble:before{content:'\f101';font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;right:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}table.fixed{table-layout:fixed}.fixed .column-rating,.fixed .column-visible{width:8%}.fixed .column-author,.fixed .column-date,.fixed .column-format,.fixed .column-links,.fixed .column-parent,.fixed .column-posts{width:10%}.fixed .column-posts{width:74px}.fixed .column-comment .comment-author{display:none}.fixed .column-categories,.fixed .column-rel,.fixed .column-response,.fixed .column-role,.fixed .column-tags{width:15%}.fixed .column-slug{width:25%}.fixed .column-locations{width:35%}.fixed .column-comments{width:4em;padding:8px 0;text-align:right}.fixed .column-comments .vers{padding-right:3px}.fixed .column-comments a{float:right}.fixed .column-icon{width:80px}.wp-list-table a{-webkit-transition:none;transition:none}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:none!important;-webkit-box-shadow:none;box-shadow:none}#comments-form .fixed .column-author{width:20%}#commentsdiv.postbox .inside{margin:0;padding:0}#commentsdiv .inside .row-actions{line-height:18px}#commentsdiv .inside .column-author{width:25%}#commentsdiv .column-comment p{margin:.6em 0;padding:0}#commentsdiv #replyrow td{padding:0}#commentsdiv p{padding:8px 10px;margin:0}#commentsdiv .comments-box{border:0}#commentsdiv .comments-box thead th{background:0 0;padding:0 7px 4px;font-style:italic}#commentsdiv .comments-box tr:last-child td{border-bottom:0 none}#commentsdiv .spinner{padding-right:5px}.sorting-indicator{display:none;width:10px;height:4px;margin-top:8px;margin-right:7px}.sorting-indicator:before{background:0 0;content:'\f142';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0;top:-4px;right:-8px;line-height:10px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}.column-comments .sorting-indicator:before{top:0;right:-10px}th.desc:hover span.sorting-indicator:before,th.sorted.asc .sorting-indicator:before{content:'\f142'}th.asc:hover span.sorting-indicator:before,th.sorted.desc .sorting-indicator:before{content:'\f140'}tr.wp-locked .locked-indicator{margin-right:6px;height:20px;width:16px}tr.wp-locked .locked-indicator:before{color:#888;content:'\f160';display:inline-block;float:right;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-right:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}tr.wp-locked .check-column input[type=checkbox],tr.wp-locked .check-column label,tr.wp-locked .row-actions .inline,tr.wp-locked .row-actions .trash{display:none}tr .locked-info{height:0;opacity:0}tr.wp-locked .locked-info{margin-top:8px;height:auto;opacity:1}.locked-text{vertical-align:top}tr.locked-info,tr.wp-locked .locked-info{-webkit-transition:height 1s,opacity .5s;transition:height 1s,opacity .5s}.fixed .column-comments .sorting-indicator{margin-top:3px}#menu-locations-wrap .widefat{width:60%}.widefat th.sortable,.widefat th.sorted{padding:0}th.sortable a,th.sorted a{display:block;overflow:hidden;padding:7px 10px 8px 7px}th.manage-column a,th.sortable a:active,th.sortable a:focus,th.sortable a:hover{color:#333}th.sortable a:focus{background:#e1e1e1}.fixed .column-comments.sortable a,.fixed .column-comments.sorted a{padding:8px 0}th.sortable a span,th.sorted a span{float:right;cursor:pointer}th.desc:hover span.sorting-indicator,th.sorted.asc .sorting-indicator{display:block;background-position:0 0}th.asc:hover span.sorting-indicator,th.sorted.desc .sorting-indicator{display:block;background-position:-7px 0}.tablenav-pages a{font-weight:600;margin-left:1px;padding:0 2px}.tablenav-pages .current-page{padding-top:0;text-align:center}.tablenav-pages .next-page{margin-right:2px}.tablenav a.button-secondary{display:block;margin:3px 0 0 8px}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle}.tablenav.themes{max-width:98%}.tablenav .tablenav-pages{float:left;display:block;cursor:default;height:30px;color:#555;line-height:30px;font-size:12px}.tablenav .no-pages,.tablenav .one-page .pagination-links{display:none}.tablenav .tablenav-pages a,.tablenav-pages span.current{text-decoration:none;padding:3px 6px}.tablenav .tablenav-pages a{padding:0 10px 3px;background:#eee;background:rgba(0,0,0,.05);font-size:16px;font-weight:400}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:active,.tablenav .tablenav-pages a.disabled:focus,.tablenav .tablenav-pages a.disabled:hover{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .displaying-num{margin-left:2px;color:#777;font-size:12px;font-style:italic}.tablenav .actions{overflow:hidden;padding:2px 0 0 8px}.wp-filter .actions{display:inline-block;vertical-align:middle}.tablenav .delete{margin-left:20px}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}.tablenav .view-switch{float:left;margin:5px 8px 0 16px}.wp-filter .view-switch{display:inline-block;vertical-align:middle;padding:15px 0;margin:0 0 0 20px}.view-switch a{text-decoration:none}.view-switch>a{display:inline-block;width:18px;height:18px}.view-switch>a:before{color:#bbb;display:inline-block;float:right;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-right:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.view-switch>.view-list:before{content:'\f163'}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}.view-switch>a+a{margin-right:5px}.view-switch>.view-excerpt:before{content:'\f164'}.view-switch>.view-grid:before{content:'\f509'}.filter{float:right;margin:-5px 10px 0 0}.filter .subsubsub{margin-right:-10px;margin-top:13px}.screen-per-page{width:4em}#posts-filter .wp-filter{margin-bottom:0}#posts-filter fieldset{float:right;margin:0 0 1em 1.5ex;padding:0}#posts-filter fieldset legend{padding:0 1px .2em 0}p.pagenav{margin:0;display:inline}.pagenav span{font-weight:600;margin:0 6px}.row-title{font-size:14px!important;font-weight:600}.column-comment .comment-author{margin-bottom:.6em}.column-author img,.column-comment .comment-author img,.column-username img{float:right;margin-left:10px;margin-top:1px}.row-actions{color:#ddd;font-size:13px;visibility:hidden;padding:2px 0 0}.mobile .row-actions,.row-actions.visible,div.comment-item:hover .row-actions,tr:hover .row-actions{visibility:visible}.row-actions-visible{padding:2px 0 0}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:right;margin:0;padding:0;width:100%}#wpbody-content .inline-edit-row fieldset .inline-edit-col,tr.inline-edit-row td{padding:0 .5em}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 1px 0 0;border-style:none none none solid}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:40%}#wpbody-content .quick-edit-row-post .inline-edit-col-right{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:20%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:50%}#wpbody-content .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .quick-edit-row-page .inline-edit-col-right{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:30%}#wpbody-content .bulk-edit-row-page .inline-edit-col-right{width:69%}#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:left;width:69%}#wpbody-content .inline-edit-row-page .inline-edit-col-right{margin-top:27px}.inline-edit-row fieldset .inline-edit-group{clear:both}.inline-edit-row fieldset .inline-edit-group:after{content:".";display:block;height:0;clear:both;visibility:hidden}.inline-edit-row p.submit{clear:both;padding:.5em;margin:.5em 0 0}.inline-edit-row span.error{line-height:22px;margin:0 15px;padding:3px 5px}.inline-edit-row h4{margin:.2em 0;padding:0;line-height:23px}.inline-edit-row fieldset span.checkbox-title,.inline-edit-row fieldset span.title{margin:0;padding:0}.inline-edit-row fieldset label,.inline-edit-row fieldset span.inline-edit-categories-label{display:block;margin:.2em 0}.inline-edit-row fieldset label.inline-edit-tags{margin-top:0}.inline-edit-row fieldset label.inline-edit-tags span.title{margin:.2em 0;width:auto}.inline-edit-row fieldset label span.title{display:block;float:right;width:5em}.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-right:5em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-left:.5em}.inline-edit-row .input-text-wrap input[type=text]{width:100%}.inline-edit-row fieldset label input[type=checkbox]{vertical-align:text-bottom}.inline-edit-row fieldset label textarea{width:100%;height:4em}#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:50%}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-left:.5em}.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input{width:6em}.inline-edit-save .spinner{padding:4px 10px 0;vertical-align:top;float:left}.inline-edit-row h4{text-transform:uppercase}.inline-edit-row fieldset span.checkbox-title,.inline-edit-row fieldset span.title{font-style:italic;line-height:1.8em}.inline-edit-row fieldset .inline-edit-date{float:right}.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=mn]{font-size:12px;width:2.1em}.inline-edit-row fieldset input[name=aa]{font-size:12px;width:3.5em}.inline-edit-row fieldset label input.inline-edit-password-input{width:8em}ul.cat-checklist{height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px;margin:0;background-color:#fff}#bulk-titles{display:block;height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist input,.inline-edit-row fieldset ul.cat-checklist li{margin:0;position:relative}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-style:normal;font-size:11px}.inline-edit-row fieldset label input.inline-edit-menu-order-input{width:3em}.inline-edit-row fieldset label input.inline-edit-slug-input{width:75%}.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{max-width:80%}.ie8 .inline-edit-row #post_parent,.ie8 .inline-edit-row select[name=page_template]{width:250px}.quick-edit-row-post fieldset label.inline-edit-status{float:right}#bulk-titles{line-height:140%}#bulk-titles div{margin:.2em .3em}#bulk-titles div a{cursor:pointer;display:block;float:right;height:18px;margin:0 -2px 0 3px;overflow:hidden;position:relative;width:20px}#bulk-titles div a:before{position:relative;top:-3px}.plugins tbody,.plugins tbody th.check-column{padding:8px 2px 0 0}.plugins tbody th.check-column input[type=checkbox]{margin-top:4px}#update-plugins-table tbody td p{margin-top:0}#update-plugins-table tbody td p strong{font-size:14px}.plugins .inactive th.check-column,.plugins tfoot th.check-column,.plugins thead th.check-column{padding-right:6px}#update-plugins-table tfoot th.check-column,#update-plugins-table thead th.check-column{padding-top:11px}.plugins,.plugins td,.plugins th{color:#000}.plugins tr{background:#fff}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ol,.plugins .desc ul{margin:0 2em 0 0}.plugins .desc ul{list-style-type:disc}.plugins .row-actions{font-size:13px}.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th{padding:10px 9px}.plugins .active td,.plugins .active th{background-color:#f7fcfe}.plugins .update td,.plugins .update th{border-bottom:0}.plugin-update-tr td{border-top:0}.plugin-install #the-list td,.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th,.upgrade .plugins td,.upgrade .plugins th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active.plugin-update-tr+tr.inactive th{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins .update td,.plugins .update th,.plugins tr.active+tr.inactive.update td,.plugins tr.active+tr.inactive.update th,.upgrade .plugins tr:last-of-type td,.upgrade .plugins tr:last-of-type th{-webkit-box-shadow:none;box-shadow:none}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update{background-color:#fef7f1}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-left:12px;white-space:nowrap}.plugins .inactive .plugin-title strong{font-weight:400}.plugins .row-actions,.plugins .second{padding:0 0 5px}.plugins .update .row-actions,.plugins .update .second{padding-bottom:0}.plugins-php .widefat tfoot td,.plugins-php .widefat tfoot th{border-top-style:solid;border-top-width:1px}.plugin-update-tr .update-message{font-size:13px;font-weight:400;padding:6px 12px;margin:0 31px 8px 10px;background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}.plugin-update-tr .update-message:before{color:#d54e21;content:'\f463';display:inline-block;font:400 20px/1 dashicons;speak:none;margin:0 -2px 0 8px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.plugins .plugin-update{padding:0;border:none;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}tr.active+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-install-php h3{clear:both}.plugin-install-php h4{margin:2.5em 0 8px}.plugin-install-php .wp-filter{margin-bottom:0}.plugin-group{overflow:hidden;margin-top:1.5em}.plugin-group h3{margin-top:0}.plugin-card{float:right;margin:0 8px 16px;width:48.5%;width:-webkit-calc(50% - 8px);width:calc(50% - 8px);background-color:#fff;border:1px solid #dedede;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.plugin-card:nth-child(odd){clear:both;margin-right:0}.plugin-card:nth-child(even){margin-left:0}@media screen and (min-width:1600px){.plugin-card{width:30%;width:-webkit-calc(33.1% - 8px);width:calc(33.1% - 8px)}.plugin-card:nth-child(odd){clear:none;margin-right:8px}.plugin-card:nth-child(even){margin-left:8px}.plugin-card:nth-child(3n+1){clear:both;margin-right:0}.plugin-card:nth-child(3n){margin-left:0}}@media screen and (max-width:782px){.plugin-card{margin-right:0;margin-left:0;width:100%}}.plugin-card-top{position:relative;padding:20px 20px 10px;min-height:135px}.plugin-action-buttons,div.action-links{margin:0}.plugin-card h4{margin:0 0 12px;font-size:18px;line-height:1.3}.plugin-card .desc,.plugin-card .name{margin-right:148px;margin-left:120px}.plugin-card .action-links{position:absolute;top:20px;left:20px;width:120px}.plugin-action-buttons{clear:left;float:left;margin-right:2em;margin-bottom:1em;text-align:left}.plugin-action-buttons li{margin-bottom:10px}.plugin-card-bottom{clear:both;padding:12px 20px;background-color:#fafafa;border-top:1px solid #dedede;overflow:hidden}.plugin-card-bottom .star-rating{display:inline}.plugin-card .column-rating{line-height:23px}.plugin-card .column-rating,.plugin-card .column-updated{margin-bottom:4px}.plugin-card .column-downloaded,.plugin-card .column-rating{float:right;clear:right;max-width:180px}.plugin-card .column-compatibility,.plugin-card .column-updated{text-align:left;float:left;clear:left;width:65%;width:-webkit-calc(100% - 180px);width:calc(100% - 180px)}.plugin-card .column-compatibility span:before{font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;right:-2px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}.plugin-card .compatibility-incompatible:before{content:'\f158'}.plugin-card .compatibility-compatible:before{content:'\f147'}.plugin-icon{position:absolute;top:20px;right:20px;width:128px;height:128px;margin:0 0 20px 20px}.plugin-icon img{width:128px;height:128px}.no-plugin-results{color:#999;font-size:18px;font-style:normal;margin:0;padding:100px 0 0;text-align:center}.wp-list-table .site-deleted{background:#ff8573}.wp-list-table .site-spammed{background:#faafaa}.wp-list-table .site-archived{background:#ffebe8}.wp-list-table .site-mature{background:#fecac2}@media screen and (max-width:1100px) and (min-width:782px),(max-width:480px){.plugin-card .action-links{position:static;margin-right:148px;width:auto}.plugin-action-buttons{float:none;margin:1em 0 0;text-align:right}.plugin-action-buttons li{display:inline-block;vertical-align:middle}.plugin-action-buttons li .button{margin-left:20px}.plugin-card .desc,.plugin-card .name{margin-left:0}.plugin-card .desc p:first-of-type{margin-top:0}}@media screen and (max-width:782px){.tablenav{height:auto}.tablenav.top{margin:20px 0 5px}.tablenav.bottom{position:relative;margin-top:15px}.tablenav br{display:none}.tablenav br.clear{display:block}.tablenav .view-switch,.tablenav.top .actions,.tablenav.top .displaying-num{display:none}.tablenav.bottom .displaying-num{position:absolute;left:0;top:10px;font-size:14px}.tablenav-pages{width:100%;text-align:center;margin:0 0 25px}.tablenav.bottom .tablenav-pages{margin-top:25px}.tablenav.top .tablenav-pages.one-page{display:none}.tablenav.bottom .tablenav-pages.one-page{margin:15px 0 0;height:0}.tablenav-pages .pagination-links .paging-input{font-size:18px}.tablenav-pages .pagination-links a{padding:8px 20px 11px;font-size:18px;background:rgba(0,0,0,.05)}.tablenav-pages .pagination-links .current-page{padding:10px;font-size:14px}.form-wrap>p{display:none}.comment-count{font-size:14px}.column-categories,.column-tags,.fixed .column-author,.fixed .column-date,.media .column-parent,.sites .column-registered,.sites .column-users,.tags .column-description,.users .column-email,.users .column-name{display:none}.fixed .column-comment .comment-author{display:block}.column-title{width:85%}.fixed .column-comments,.widefat .check-column{width:35px}.widefat tfoot .check-column,.widefat thead .check-column{padding:10px 0}.widefat *{word-wrap:normal}#wpbody-content .bulk-edit-row .inline-edit-col-bottom,#wpbody-content .bulk-edit-row .inline-edit-col-left,#wpbody-content .bulk-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .inline-edit-row-post .inline-edit-col-center,#wpbody-content .quick-edit-row-page .inline-edit-col-left,#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .quick-edit-row-post .inline-edit-col-left,#wpbody-content .quick-edit-row-post .inline-edit-col-right{float:none;width:100%}#wpbody-content .bulk-edit-row fieldset .inline-edit-col label,#wpbody-content .bulk-edit-row fieldset .inline-edit-group label,#wpbody-content .quick-edit-row fieldset .inline-edit-col label,#wpbody-content .quick-edit-row fieldset .inline-edit-group label{max-width:none;float:none;margin-bottom:5px}#wpbody .bulk-edit-row fieldset select{display:block;width:100%;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-size:16px}.inline-edit-row fieldset label span.title{float:none}.inline-edit-row fieldset label.inline-edit-tags{padding:0 .5em}.inline-edit-row fieldset .inline-edit-col label.inline-edit-tags{padding:0}.inline-edit-row fieldset label span.input-text-wrap{margin-right:0}.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=mn]{width:3em}.inline-edit-row fieldset input[name=aa]{width:4.5em}#bulk-titles div{margin:.8em .3em}#bulk-titles div a{height:22px}.tags .column-posts{width:74px}.tags .column-slug{width:30%}.comments .column-response,.users .column-role{width:35%}.sites .column-blogname{width:55%}#wpbody-content #update-themes-table .plugin-title{width:auto}.link-manager-php #posts-filter{margin-top:25px}.link-manager-php .tablenav.bottom{overflow:hidden}.wp-list-table.plugins{position:relative;margin-top:35px;margin-bottom:50px}#wpbody-content .wp-list-table.plugins tfoot .column-description,.wp-list-table.plugins th#description,.wp-list-table.plugins thead .column-description{display:none}#wpbody-content .wp-list-table.plugins,#wpbody-content .wp-list-table.plugins .column-description,#wpbody-content .wp-list-table.plugins .manage-column.column-name,#wpbody-content .wp-list-table.plugins .plugin-title,#wpbody-content .wp-list-table.plugins .plugin-update,#wpbody-content .wp-list-table.plugins .theme-title,#wpbody-content .wp-list-table.plugins tbody,#wpbody-content .wp-list-table.plugins thead,#wpbody-content .wp-list-table.plugins tr{display:block;width:auto}.wp-list-table.plugins tfoot,.wp-list-table.plugins thead{position:absolute;top:-35px;right:0;left:0;width:auto;height:35px}.wp-list-table.plugins tfoot{bottom:-35px;top:auto}.active,.inactive{padding-top:0}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-top:13px;padding-bottom:4px}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title,.wp-list-table.plugins tbody th{-webkit-box-shadow:none;box-shadow:none}.plugins tbody{padding:1px 0 0}.plugins tr.active+tr.inactive td.column-description{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column{border-top:none}.wp-list-table.plugins .column-description{padding-top:0}.wp-list-table.plugins .column-description,.wp-list-table.plugins .manage-column.column-name,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-left:12px;padding-right:46px}.wp-list-table.plugins tr{position:relative}.wp-list-table.plugins th.check-column,.wp-list-table.plugins tr.update th.check-column{position:absolute;height:auto;top:0;bottom:0;right:0;padding-right:2px;padding-top:18px}.wp-list-table.plugins tfoot th.check-column,.wp-list-table.plugins thead th.check-column{padding-right:3px;padding-top:11px;background:0 0}.widefat tbody th.check-column input[type=checkbox]{margin-top:-3px;margin-right:8px}.wp-list-table.plugins .active .check-column input,.wp-list-table.plugins .update .check-column input{margin-right:5px}.wp-list-table.plugins tfoot .check-column input,.wp-list-table.plugins thead .check-column input{margin-top:-6px}.wp-list-table.plugins .active th.check-column{background:0 0}.wp-list-table.plugins .plugin-title strong,.wp-list-table.plugins .theme-title strong{font-size:1.4em;line-height:1.6em}table.plugin-install .column-description,table.plugin-install .column-name,table.plugin-install .column-rating,table.plugin-install .column-version{display:block;width:auto}table.plugin-install th.column-description,table.plugin-install th.column-name,table.plugin-install th.column-rating,table.plugin-install th.column-version{display:none}table.plugin-install td.column-name strong{font-size:1.4em;line-height:1.6em}table.plugin-install #the-list td{-webkit-box-shadow:none;box-shadow:none}table.plugin-install #the-list tr{display:block;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}}#poststuff{padding-top:10px;min-width:763px}#poststuff #post-body{padding:0}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-left:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments .spinner,#show-comments a{float:right}#lost-connection-notice .spinner{display:block;float:right;margin:0 0 0 5px}#titlediv{position:relative}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#poststuff #titlewrap{border:0;padding:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0;background-color:#fff}#titlediv #title-prompt-text{color:#777;position:absolute;font-size:1.7em;padding:11px 10px}#wp-fullscreen-save .fs-saved{color:#999;float:left;margin-top:4px}#poststuff .inside-submitbox,#side-sortables .inside-submitbox{margin:0 3px;font-size:11px}input#link_description,input#link_url{width:98%}#pending{background:0 none;border:0;padding:0;font-size:11px;margin-top:-1px}#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-left:10px;font-size:11px}#editable-post-name-full{display:none}#editable-post-name{background-color:#fffbcc}#editable-post-name input{font-size:13px;height:22px;margin:0;width:16em}.postarea h3 label{float:right}.submitbox .submit{text-align:right;padding:12px 10px 10px;font-size:11px;background-color:#464646;color:#ccc}.submitbox .submitdelete{text-decoration:none;padding:1px 2px}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-left:4px;padding:6px}.inside-submitbox #post_status{margin:2px -2px 2px 0}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{position:relative;min-width:255px;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:0 0;border:0;float:left;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:10px 0}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:0 7px 5px}#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border:0}#side-sortables .inside-submitbox .insidebox,.stuffbox .insidebox{margin:11px 0}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:1px solid transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #dfdfdf;border-bottom-color:#fdfdfd;background-color:#fdfdfd}ul.add-menu-item-tabs li,ul.category-tabs li,ul.wp-tab-bar li{padding:3px 5px 5px}#postimagediv .inside img{max-width:100%;height:auto;width:auto}form#tags-filter{position:relative}td.plugin-title strong,td.post-title strong{display:block;margin-bottom:.2em;font-size:14px}td.plugin-title p,td.post-title p{margin:6px 0}.ui-tabs-hide,.wp-hidden-children .wp-hidden-child{display:none}#post-body .tagsdiv #newtag{margin-left:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:none;background-color:#f7f7f7;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);z-index:999}#post-status-info td{font-size:12px}.autosave-info{padding:2px 10px;text-align:left}#editorcontent #post-status-info{border:none}#content-resize-handle{background:url(../images/resize.gif) left bottom no-repeat;width:12px;cursor:row-resize}.rtl #content-resize-handle{background:url(../images/resize-rtl.gif) right bottom no-repeat}.wp-editor-expand #content-resize-handle{display:none}#postdivrich #content{resize:none}#wp-word-count{display:block;padding:2px 10px}#wp-content-editor-container{position:relative}#content-textarea-clone{z-index:-1;position:absolute;top:0;visibility:hidden;overflow:hidden;max-width:100%;border:1px solid transparent}.wp-fullscreen-wrap #content-textarea-clone{display:none}.wp-fullscreen-wrap{padding-top:0!important}.wp-fullscreen-wrap .wp-editor-area{margin-top:0!important}.wp-fullscreen-wrap .mce-edit-area{padding-top:0!important}.wp-editor-expand #wp-content-editor-tools{z-index:1000;border-bottom:1px solid #e5e5e5}.wp-editor-expand #wp-content-editor-container{-webkit-box-shadow:none;box-shadow:none;margin-top:-1px;border-bottom:0 none}.wp-editor-expand div.mce-statusbar{z-index:1}.wp-editor-expand #post-status-info{border-top:1px solid #e5e5e5}.wp-editor-expand div.mce-toolbar-grp{z-index:999}.mce-fullscreen #wp-content-wrap .mce-edit-area,.mce-fullscreen #wp-content-wrap .mce-menubar,.mce-fullscreen #wp-content-wrap .mce-statusbar,.mce-fullscreen #wp-content-wrap .mce-toolbar-grp{position:static!important;width:auto!important;padding:0!important}.mce-fullscreen #wp-content-wrap .mce-statusbar{visibility:visible!important}.mce-fullscreen #wp-content-wrap .mce-wp-dfw,.post-php.mce-fullscreen #wpadminbar{display:none}#wp-content-editor-tools{background-color:#f1f1f1;padding-top:20px}#poststuff #post-body.columns-2 #side-sortables{width:280px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#hh,#jj,#mn{padding:1px;font-size:12px}#hh,#jj,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#888}#post-body #visibility:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 2px;top:0;right:-1px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}#post-body #visibility:before{content:'\f177'}.curtime #timestamp:before{content:'\f145';top:-1px}#post-body .misc-pub-revisions:before{content:'\f321'}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;right:50%;width:450px;margin-right:-225px;background:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005}.notification-dialog-background{position:fixed;top:0;right:0;left:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#post-lock-dialog .post-locked-message a.button{margin-left:10px}#post-lock-dialog .post-locked-avatar{float:right;margin:0 0 20px 20px}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:right;margin-left:3px}#post-lock-dialog.saved .locked-saved,#post-lock-dialog.saving .locked-saving{display:inline}#excerpt,.attachmentlinks{margin:0;height:4em;width:98%}.tagchecklist{margin-right:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-right:-8px;position:absolute}.tagchecklist span{margin-left:25px;display:block;float:right;font-size:13px;line-height:1.8em;white-space:nowrap;cursor:default}.tagchecklist span a{margin:1px -17px 0 0;cursor:pointer;width:20px;height:20px;display:block;float:right;text-indent:0;overflow:hidden;position:absolute}#poststuff h2{margin-top:20px;font-size:1.5em;margin-bottom:15px;padding:0 0 3px;clear:right}#poststuff h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #page_template,#poststuff .inside #parent_id{max-width:100%}#poststuff .inside label.deleted,#poststuff .inside label.spam{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}#post-visibility-select{line-height:1.5em;margin-top:3px}#poststuff #submitdiv .inside{margin:0;padding:0}#post-body-content,.edit-form-section{margin-bottom:20px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border:1px solid #dfdfdf;border-spacing:0;background-color:#f9f9f9}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff td.left,#postcustomstuff th.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-left:10px}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:right;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-left:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon:before,.post-state-format:before{color:#ddd;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#2ea2cc}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-right:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-left:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon.post-format-standard:before,.post-state-format.post-format-standard:before,a.post-state-format.format-standard:before{content:'\f109'}.post-format-icon.post-format-image:before,.post-state-format.post-format-image:before,a.post-state-format.format-image:before{content:'\f128'}.post-format-icon.post-format-gallery:before,.post-state-format.post-format-gallery:before,a.post-state-format.format-gallery:before{content:'\f161'}.post-format-icon.post-format-audio:before,.post-state-format.post-format-audio:before,a.post-state-format.format-audio:before{content:'\f127'}.post-format-icon.post-format-video:before,.post-state-format.post-format-video:before,a.post-state-format.format-video:before{content:'\f126'}.post-format-icon.post-format-chat:before,.post-state-format.post-format-chat:before,a.post-state-format.format-chat:before{content:'\f125'}.post-format-icon.post-format-status:before,.post-state-format.post-format-status:before,a.post-state-format.format-status:before{content:'\f130'}.post-format-icon.post-format-aside:before,.post-state-format.post-format-aside:before,a.post-state-format.format-aside:before{content:'\f123'}.post-format-icon.post-format-quote:before,.post-state-format.post-format-quote:before,a.post-state-format.format-quote:before{content:'\f122'}.post-format-icon.post-format-link:before,.post-state-format.post-format-link:before,a.post-state-format.format-link:before{content:'\f103'}.category-adder{margin-right:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:1px solid #dfdfdf;background-color:#fdfdfd}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.inline-editor ul.cat-checklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,ul.export-filters{margin-right:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap label{display:block;padding:2px;font-size:12px}.form-field input[type=email],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=url],.form-field textarea{border-style:solid;border-width:1px;width:95%}.form-wrap p,p.description{margin:2px 0 5px;color:#666}.form-wrap p,p.description,p.help,span.description{font-size:13px;font-style:italic}.form-wrap .form-field{margin:0 0 10px;padding:8px 0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h3{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.tagsdiv{margin-top:-8px}#poststuff .taghint{color:#aaa;margin:15px 12px -24px 0}#poststuff .tagsdiv .howto{margin:0 0 6px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}.taghint{color:#aaa;margin:-17px 7px 0 0;visibility:hidden}input.newtag~div.taghint{visibility:visible}input.newtag:focus~div.taghint{visibility:hidden}p.popular-tags{border:none;line-height:2em;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h3{margin:2px 0 12px}.ac_results{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;display:none;border:1px solid gray;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{padding:2px 5px;white-space:nowrap;color:#101010;text-align:right}.ac_over{background-color:#f0f0b8;cursor:pointer}.ac_match{text-decoration:underline}.comment-php .wp-editor-area{height:200px}.comment-ays{margin-bottom:0;border-bottom-style:solid;border-bottom-width:1px}.comment-ays .alt{background-color:transparent}.spam-undo-inside,.trash-undo-inside{margin:1px 0 1px 8px;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-left:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 0 5px 3px;vertical-align:middle}#comment-status-radio label{padding:5px 0}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:right;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td,.links-table th{padding:5px 0}.links-table td label{margin-left:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw,#wp-content-wrap .mce-wp-dfw{display:none}.wp-editor-expand #qt_content_dfw,.wp-editor-expand #wp-content-wrap .mce-wp-dfw{display:inline-block}.focus-on #screen-meta,.focus-on #screen-meta-links,.focus-on #wp-toolbar,.focus-on #wpfooter,.focus-on .postbox-container>*,.focus-on .wrap>h2,.focus-on div.error,.focus-on div.notice,.focus-on div.updated{opacity:0;-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.focus-on #wp-toolbar{opacity:.3}.focus-off #screen-meta,.focus-off #screen-meta-links,.focus-off #wp-toolbar,.focus-off #wpfooter,.focus-off .postbox-container>*,.focus-off .wrap>h2,.focus-off div.error,.focus-off div.notice,.focus-off div.updated{opacity:1;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.focus-off #wp-toolbar{-webkit-transform:translate(0,0)}.focus-on #adminmenuback,.focus-on #adminmenuwrap{-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.rtl.focus-on #adminmenuback,.rtl.focus-on #adminmenuwrap{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-2x.gif) left bottom/11px 11px no-repeat;-webkit-background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-rtl-2x.gif) left bottom no-repeat}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-left:0;width:100%}#poststuff #postbox-container-1 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0;width:auto}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff h3{padding:12px}.post-format-options{padding-left:0}.post-format-options a{margin-left:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-left:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist li{margin-bottom:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto;margin-bottom:15px}.tagchecklist{margin:25px 10px}.tagchecklist span{font-size:16px;line-height:120%}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar td,.mceToolbar tr{float:right!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-right:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding:6px 6px 6px 3px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}button.wp-switch-editor{font-size:16px;line-height:1em;margin:7px 7px 0 0;padding:8px 12px}#wp-content-media-buttons a{font-size:16px;line-height:37px;height:39px;padding:0 15px 0 20px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-top:-3px!important;margin-right:-5px!important}.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before,.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:left;font-size:16px}#delete-action,#publishing-action{line-height:47px}.comment-ays{border-bottom:none}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}}@media only screen and (max-width:500px){#wp-content-media-buttons a{font-size:14px;padding:0 10px}}.revisions-control-frame,.revisions-diff-frame{position:relative}.revisions-controls{padding-top:40px;height:100px;z-index:1}.revisions-controls input[type=checkbox]{position:relative;top:-1px;vertical-align:text-bottom}.revisions.pinned .revisions-controls{position:fixed;top:0;height:82px;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-tickmarks{position:relative;margin:0 auto;height:.7em;top:7px;max-width:70%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.revisions-tickmarks>div{position:absolute;height:100%;border-right:1px solid #aaa;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.revisions-tickmarks>div:first-child{border-width:0}.comparing-two-revisions .revisions-controls{height:140px}.comparing-two-revisions.pinned .revisions-controls{height:124px}.revisions .diff-error{position:absolute;text-align:center;margin:0 auto;width:100%;display:none}.revisions.diff-error .diff-error{display:block}.revisions .loading-indicator{position:absolute;vertical-align:middle;opacity:0;width:100%;width:-webkit-calc(100% - 30px);width:calc(100% - 30px);top:50%;top:-webkit-calc(50% - 10px);top:calc(50% - 10px);-webkit-transition:opacity .5s;transition:opacity .5s;filter:alpha(opacity=0)}body.folded .revisions .loading-indicator{margin-right:-32px}.revisions .loading-indicator span.spinner{display:block;margin:0 auto;float:none}.revisions.loading .loading-indicator{opacity:1;filter:alpha(opacity=100)}.revisions .diff{-webkit-transition:opacity .5s;transition:opacity .5s}.revisions.loading .diff{opacity:.5;filter:alpha(opacity=50)}.revisions.diff-error .diff{visibility:hidden}.revisions-meta{margin-top:20px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions.pinned .revisions-meta{-webkit-box-shadow:none;box-shadow:none}.revision-toggle-compare-mode{position:absolute;top:0;left:0}.comparing-two-revisions .revisions-next,.comparing-two-revisions .revisions-previous,.revisions-meta .diff-meta-to strong{display:none}.revisions-controls .author-card .date{color:#777}.revisions-controls .author-card.autosave{color:#d54e21}.revisions-controls .author-card .author-name{font-weight:700}.comparing-two-revisions .diff-meta-to strong{display:block}.revisions.pinned .revisions-buttons{padding:0 11px}.revisions-next,.revisions-previous{position:relative;z-index:1}.revisions-previous{float:right}.revisions-next{float:left}.revisions-controls .wp-slider{max-width:70%;margin:0 auto;top:-3px}.revisions-diff{padding:15px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-diff h3:first-child{margin-top:0}#revisions-meta-restored img,.post-revisions li img{vertical-align:middle}table.diff tbody tr td:nth-child(2){width:4%}table.diff{table-layout:fixed;width:100%;white-space:pre-wrap}table.diff col.content{width:auto}table.diff col.content.diffsplit{width:48%}table.diff col.diffsplit.middle{width:auto}table.diff col.ltype{width:30px}table.diff tr{background-color:transparent}table.diff td,table.diff th{font-family:Consolas,Monaco,monospace;font-size:14px;line-height:1.618;padding:.5em;vertical-align:top;word-wrap:break-word}table.diff td h1,table.diff td h2,table.diff td h3,table.diff td h4,table.diff td h5,table.diff td h6{margin:0}table.diff .diff-addedline ins,table.diff .diff-deletedline del{text-decoration:none}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.diff-meta{padding:5px;clear:both;min-height:32px}.diff-title strong{line-height:32px;min-width:60px;text-align:left;float:right;margin-left:5px}.revisions-controls .author-card .author-info{font-size:12px;line-height:16px}.revisions-controls .author-card .author-info,.revisions-controls .author-card .avatar{float:right;margin-right:6px;margin-left:6px}.revisions-controls .author-card .byline{display:block;font-size:12px}.revisions-controls .author-card .avatar{vertical-align:middle}.diff-meta input.restore-revision{float:left;margin-right:6px;margin-left:6px;margin-top:4px}.diff-meta-from{display:none}.comparing-two-revisions .diff-meta-from{display:block}.revisions-tooltip{position:absolute;bottom:105px;margin-left:0;margin-right:-69px;z-index:0;max-width:350px;min-width:130px;padding:8px 4px;opacity:0}.revisions-tooltip.flipped{margin-right:0;margin-left:-70px}.revisions.pinned .revisions-tooltip{display:none!important}.comparing-two-revisions .revisions-tooltip{bottom:145px}.revisions-tooltip-arrow{width:70px;height:15px;overflow:hidden;position:absolute;right:0;margin-right:35px;bottom:-15px}.revisions-tooltip.flipped .revisions-tooltip-arrow{margin-right:0;margin-left:35px;right:auto;left:0}.revisions-tooltip-arrow>span{content:"";position:absolute;right:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip.flipped .revisions-tooltip-arrow>span{right:auto;left:20px}.ie8 .revisions-tooltip-arrow>span{right:15px;top:-25px;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"}.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow>span{left:25px}.revisions-tooltip,.revisions-tooltip-arrow>span{border:1px solid #d7d7d7;background-color:#fff}.revisions-tooltip{display:none}.arrow{width:70px;height:16px;overflow:hidden;position:absolute;right:0;margin-right:-35px;bottom:90px;z-index:10000}.arrow:after{z-index:9999;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.arrow.top{top:-16px;bottom:auto}.arrow.left{right:20%}.arrow:after{content:"";position:absolute;right:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip,.revisions-tooltip-arrow:after{border-width:1px;border-style:solid}div.revisions-controls>.wp-slider>.ui-slider-handle{margin-right:-10px}.rtl div.revisions-controls>.wp-slider>.ui-slider-handle{margin-left:-10px}.wp-slider.ui-slider{position:relative;border:1px solid #d7d7d7;text-align:right;cursor:pointer}.wp-slider .ui-slider-handle{-webkit-border-radius:50%;border-radius:50%;height:18px;margin-top:-3px;outline:0;position:absolute;width:18px;z-index:2;-ms-touch-action:none;touch-action:none}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{background:0 0;position:absolute;top:0;right:0;color:#fff;content:"\f229";font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{font-size:20px!important;margin:-1px -1px 0 0}.wp-slider .ui-slider-handle.from-handle:before{content:'\f139'}.rtl .wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{content:'\f141'}.rtl .wp-slider .ui-slider-handle.to-handle:before{content:'\f139';left:-1px}.wp-slider .ui-slider-range{position:absolute;font-size:.7em;display:block;border:0;background-color:transparent;background-image:none}.wp-slider.ui-slider-horizontal{height:.7em}.wp-slider.ui-slider-horizontal .ui-slider-handle{top:-.25em;margin-right:-.6em}.wp-slider.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.wp-slider.ui-slider-horizontal .ui-slider-range-min{right:0}.wp-slider.ui-slider-horizontal .ui-slider-range-max{left:0}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.revision-tick.completed-false{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){#diff-next-revision,#diff-previous-revision{margin-top:-1em}table.diff{-ms-word-break:break-all;word-break:break-all;word-wrap:break-word}}.media-item .describe{border-collapse:collapse;width:100%;border-top:1px solid #dfdfdf;clear:both;cursor:default}.media-item.media-blank .describe{border:0}.media-item .describe th{vertical-align:top;text-align:right;padding:5px 10px 10px;width:140px}.media-item .describe .align th{padding-top:0}.media-item .media-item-info tr{background-color:transparent}.media-item .describe td{padding:0 0 8px 8px;vertical-align:top}.media-item thead.media-item-info td{padding:4px 10px 0}.media-item .media-item-info .A1B1{padding:0 10px 0 0}.media-item td.savesend{padding-bottom:15px}.media-item .thumbnail{max-height:128px;max-width:128px}#wpbody-content #async-upload-wrap a{display:none}.media-upload-form{margin-top:20px}.media-upload-form td label{margin-left:6px;margin-right:2px}.media-upload-form .align .field label{display:inline;padding:0 23px 0 0;margin:0 3px 0 1em;font-weight:600}.media-upload-form tr.image-size label{margin:0 5px 0 0;font-weight:600}.media-upload-form th.label label{font-weight:600;margin:.5em;font-size:13px}.media-upload-form th.label label span{padding:0 5px}.media-item .describe input[type=text],.media-item .describe textarea{width:460px}.media-item .describe p.help{margin:0;padding:0 5px 0 0}.describe-toggle-off,.describe-toggle-on,.media-item .edit-attachment{display:block;line-height:36px;float:left;margin-left:10px}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on{display:none}.media-item.open .describe-toggle-off{display:block}.media-upload-form .media-item{min-height:36px;margin-bottom:1px;position:relative;width:100%;background:#fff}.media-upload-form .media-item,.media-upload-form .media-item .error{-webkit-box-shadow:0 1px 0 #dfdfdf;box-shadow:0 1px 0 #dfdfdf}#media-items:empty{border:0}.media-item .filename{line-height:36px;overflow:hidden;margin-right:6px}.media-item .pinkynail{float:right;margin:2px 3px 0 10px;max-width:40px;max-height:32px}.media-item .startclosed,.media-item .startopen{display:none}.media-item .original{position:relative;height:34px}.media-item .progress{float:left;height:22px;margin:7px 6px;width:200px;line-height:2em;padding:0;overflow:hidden;-webkit-border-radius:22px;border-radius:22px;background:#ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-22px;-webkit-border-radius:22px;border-radius:22px;background-color:#0074a2;-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.3);box-shadow:inset 0 0 2px rgba(0,0,0,.3)}.media-item .progress .percent{z-index:10;position:relative;width:200px;padding:0;color:#fff;text-align:center;line-height:22px;font-weight:400;text-shadow:0 1px 2px rgba(0,0,0,.2)}.upload-php .fixed .column-parent{width:15%}.js .html-uploader #plupload-upload-ui{display:none}.js .html-uploader #html-upload-ui{display:block}.media-upload-form .media-item .error,.media-upload-form .media-item.error{width:auto;margin:0 0 1px}.media-upload-form .media-item .error{padding:10px 14px 10px 0}.media-item .error-div a.dismiss{display:block;float:left;margin:0 15px 0 10px}.find-box{background-color:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);width:600px;overflow:hidden;margin-right:-300px;position:fixed;top:30px;bottom:30px;right:50%;z-index:100105}.find-box-head{background:#fcfcfc;border-bottom:1px solid #dfdfdf;height:36px;font-size:18px;font-weight:600;line-height:36px;padding:0 16px 0 36px;position:absolute;top:0;right:0;left:0}.find-box-inside{overflow:auto;padding:16px;background-color:#fff;position:absolute;top:37px;bottom:45px;overflow-y:scroll;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.find-box-search{padding-bottom:16px}.find-box-search .spinner{float:none;right:110px;position:absolute;top:2px}#find-posts-response,.find-box-search{position:relative}#find-posts-input,#find-posts-search{float:right}#find-posts-input{width:140px;height:28px;margin:0 0 0 4px}.widefat .found-radio{padding-left:0;width:16px}#find-posts-close{width:36px;height:36px;position:absolute;top:0;left:0;cursor:pointer;text-align:center;color:#666}#find-posts-close:hover{color:#2ea2cc}#find-posts-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f158'}.find-box-buttons{padding:8px 16px;background:#fcfcfc;border-top:1px solid #dfdfdf;position:absolute;bottom:0;right:0;left:0}@media screen and (max-width:782px){.find-box-inside{bottom:57px}}@media screen and (max-width:660px){.find-box{top:0;bottom:0;right:0;left:0;margin:0;width:100%}}.ui-find-overlay{position:fixed;top:0;right:0;left:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border:1px solid #ddd;line-height:1.8em;word-spacing:3px;-webkit-border-radius:6px;border-radius:6px}.drag-drop #drag-drop-area{border:4px dashed #bbb;height:200px}.drag-drop .drag-drop-inside{margin:70px auto 0;width:250px}.drag-drop-inside p{color:#aaa;font-size:14px;margin:5px 0;display:none}.drag-drop .drag-drop-inside p{text-align:center}.drag-drop-inside p.drag-drop-info{font-size:20px}.drag-drop .drag-drop-inside p,.drag-drop-inside p.drag-drop-buttons{display:block}.drag-drop.drag-over #drag-drop-area{border-color:#83b4d8}#plupload-upload-ui{position:relative}.media-frame.mode-grid,.media-frame.mode-grid .attachments-browser .attachments,.media-frame.mode-grid .media-frame-content,.media-frame.mode-grid .uploader-inline-content{position:static}.media-frame.mode-grid .media-frame-menu,.media-frame.mode-grid .media-frame-router,.media-frame.mode-grid .media-frame-title{display:none}.media-frame.mode-grid .media-frame-content{background-color:transparent;border:none}.upload-php .mode-grid .media-sidebar{position:relative;width:auto;margin-bottom:16px;padding:0 16px;border:1px solid #c00;background-color:#feebe8}.upload-php .mode-grid .hide-sidebar .media-sidebar{display:none}.upload-php .mode-grid .media-sidebar .media-uploader-status{border-bottom:none;padding-bottom:0;max-width:100%}.upload-php .mode-grid .media-sidebar .upload-error{margin:20px 0;padding:0;border:none;background:0 0}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors{font-size:0;top:-12px;left:-10px}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:before{content:"\f158";font:400 20px/1 dashicons;color:#666}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before,.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before{color:#2ea2cc}.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h3{display:none}.media-frame.mode-grid .uploader-inline{position:relative;top:auto;left:auto;right:auto;bottom:auto;padding-top:0;margin-top:0;border:4px dashed #bbb}.media-frame.mode-select .attachments-browser.fixed .attachments{position:relative;top:94px;padding-bottom:94px}.media-frame.mode-grid .attachment.details:focus,.media-frame.mode-grid .attachment:focus,.media-frame.mode-grid .selected.attachment:focus{-webkit-box-shadow:inset 0 0 2px 3px #f1f1f1,inset 0 0 0 7px #5b9dd9;box-shadow:inset 0 0 2px 3px #f1f1f1,inset 0 0 0 7px #5b9dd9;outline:0}.media-frame.mode-grid .selected.attachment{-webkit-box-shadow:inset 0 0 0 5px #f1f1f1,inset 0 0 0 7px #ccc;box-shadow:inset 0 0 0 5px #f1f1f1,inset 0 0 0 7px #ccc}.media-frame.mode-grid .attachment.details{-webkit-box-shadow:inset 0 0 0 3px #f1f1f1,inset 0 0 0 7px #1e8cbe;box-shadow:inset 0 0 0 3px #f1f1f1,inset 0 0 0 7px #1e8cbe}.media-frame.mode-grid.mode-select .attachment .thumbnail{opacity:.65}.media-frame.mode-select .attachment.selected .thumbnail{opacity:1}.media-frame.mode-grid .media-toolbar{margin-bottom:15px;height:auto}.media-frame.mode-grid .media-toolbar select{margin:0 0 0 10px;font-size:14px}.media-frame.mode-grid .media-toolbar-secondary>.media-button{margin-top:10px;margin-bottom:10px}.media-frame.mode-grid .attachments-browser .bulk-select{display:inline-block;margin:0 0 0 10px}.media-frame.mode-grid .search{margin-top:0}.media-frame.mode-grid .spinner{margin-top:15px}.attachments-browser .media-toolbar-secondary>.media-button{margin-left:10px}.media-frame.mode-select .attachments-browser.fixed .media-toolbar{position:fixed;top:32px;right:auto;left:20px;margin-top:0}.media-frame.mode-grid .attachments-browser{padding:0}.media-frame.mode-grid .attachments-browser .attachments{padding:2px}.media-frame.mode-grid .attachments-browser .no-media{color:#999;font-size:18px;font-style:normal;margin:0;padding:100px 0 0;text-align:center}.edit-attachment-frame{display:block;height:100%;width:100%}.edit-attachment-frame .edit-media-header{overflow:hidden}.upload-php .media-modal-close .media-modal-icon:before{content:'\f335';font-size:22px}.upload-php .media-modal-close .media-modal-icon{margin:14px;width:22px}.edit-attachment-frame .edit-media-header .left,.edit-attachment-frame .edit-media-header .right,.upload-php .media-modal-close{cursor:pointer;color:#777;background-color:transparent;height:50px;width:50px;padding:0;position:absolute;text-align:center;border:0;border-right:1px solid #ddd;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.upload-php .media-modal-close{top:0;left:0}.edit-attachment-frame .edit-media-header .left{left:102px}.edit-attachment-frame .edit-media-header .right{left:51px}.edit-attachment-frame .media-frame-title{right:0;left:150px}.edit-attachment-frame .edit-media-header .left:before,.edit-attachment-frame .edit-media-header .right:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.edit-attachment-frame .edit-media-header .left:focus,.edit-attachment-frame .edit-media-header .left:hover,.edit-attachment-frame .edit-media-header .right:focus,.edit-attachment-frame .edit-media-header .right:hover,.upload-php .media-modal-close:focus,.upload-php .media-modal-close:hover{background:#ddd;border-color:#ccc;color:#000;outline:0}.upload-php .media-modal-close:focus .media-modal-icon:before,.upload-php .media-modal-close:hover .media-modal-icon:before{color:#000}.edit-attachment-frame .edit-media-header .left:before,.rtl .edit-attachment-frame .edit-media-header .right:before{content:'\f341'}.edit-attachment-frame .edit-media-header .right:before,.rtl .edit-attachment-frame .edit-media-header .left:before{content:'\f345'}.edit-attachment-frame .edit-media-header .left.disabled,.edit-attachment-frame .edit-media-header .left.disabled:hover,.edit-attachment-frame .edit-media-header .right.disabled,.edit-attachment-frame .edit-media-header .right.disabled:hover{color:#ccc;background:inherit;cursor:default;pointer-events:none}.edit-attachment-frame .media-frame-content,.edit-attachment-frame .media-frame-router{right:0}.edit-attachment-frame .media-frame-content{border-bottom:none;bottom:0;top:50px}.edit-attachment-frame .attachment-details{position:absolute;overflow:auto;top:0;bottom:0;left:0;right:0;-webkit-box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1);box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1)}.edit-attachment-frame .attachment-media-view{float:right;width:65%;height:100%}.edit-attachment-frame .attachment-media-view .thumbnail{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:16px;height:100%}.edit-attachment-frame .attachment-media-view .details-image{display:block;margin-bottom:16px;max-width:100%;max-height:90%;max-height:-webkit-calc(100% - 42px);max-height:calc(100% - 42px)}.edit-attachment-frame .wp-media-wrapper{margin-bottom:12px}.edit-attachment-frame input,.edit-attachment-frame textarea{padding:6px 8px;line-height:16px}.edit-attachment-frame .attachment-info{overflow:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:0;padding:12px 16px 0;width:35%;height:100%;-webkit-box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1);box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1);border-bottom:0;border-right:1px solid #ddd;background:#f3f3f3}.edit-attachment-frame .attachment-info .details,.edit-attachment-frame .attachment-info .settings{position:relative;overflow:hidden;float:none;margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #ddd}.edit-attachment-frame .attachment-info .filename{font-weight:400;color:#666}.edit-attachment-frame .attachment-info .thumbnail{margin-bottom:12px}.attachment-info .actions{margin-bottom:16px}.attachment-info .actions a{display:inline;text-decoration:none}.wp_attachment_details label[for=content]{font-size:13px;line-height:1.5;margin:1em 0}.wp_attachment_details #attachment_caption{height:4em}.describe .image-editor{vertical-align:top}.imgedit-wrap{position:relative}.imgedit-settings p{margin:8px 0 0}.describe .imgedit-wrap .imgedit-settings{padding:0 5px}.wp_attachment_holder div.updated{margin-top:0}.wp_attachment_holder .imgedit-wrap>div{height:auto;overflow:hidden}.wp_attachment_holder .imgedit-wrap .imgedit-panel-content{padding-left:16px;width:auto;overflow:hidden}.wp_attachment_holder .imgedit-wrap .imgedit-settings{float:left;width:250px}.imgedit-settings input{margin-top:0;vertical-align:middle}.imgedit-wait{position:absolute;top:0;background:url(../images/spinner.gif) no-repeat center/20px 20px #fff;-webkit-background-size:20px 20px;opacity:.7;filter:alpha(opacity=70);width:100%;height:500px;display:none}.no-float{float:none}.imgedit-settings .disabled,.media-disabled{color:grey}.A1B1,.wp_attachment_image{overflow:hidden}.A1B1 .button,.wp_attachment_image .button{float:right}.no-js .wp_attachment_image .button{display:none}.A1B1 .spinner,.wp_attachment_image .spinner{float:right;padding:0 0 4px;vertical-align:bottom}.imgedit-menu{margin:0 0 12px;min-width:300px}.imgedit-menu div{float:right;width:32px;border:1px solid #d5d5d5;background:#f1f1f1;margin:0 0 0 8px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;line-height:28px;color:#777;cursor:pointer}.imgedit-menu div:before{font:400 20px/1 dashicons;speak:none;vertical-align:middle}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea;color:#333}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;color:#777;filter:alpha(opacity=50);opacity:.5;cursor:default}.imgedit-crop:before{content:'\f165'}.imgedit-rleft:before{content:'\f166'}.imgedit-rright:before{content:'\f167'}.imgedit-flipv:before{content:'\f168'}.imgedit-fliph:before{content:'\f169'}.imgedit-undo:before{content:'\f171'}.imgedit-redo:before{content:'\f172'}.imgedit-crop-wrap{position:relative}.imgedit-crop{margin:0 0 0 8px}.imgedit-rleft{margin:0 3px}.imgedit-rright{margin:0 3px 0 8px}.imgedit-flipv{margin:0 3px}.imgedit-fliph{margin:0 3px 0 8px}.imgedit-undo{margin:0 3px}.imgedit-redo{margin:0 3px 0 8px}.imgedit-applyto img{margin:0 0 0 8px}.imgedit-group-top{margin:5px 0}#poststuff .imgedit-group-top h3{padding:0}.imgedit-group-top h3 a{text-decoration:none}.imgedit-applyto .imgedit-label{padding:2px 0 0;display:block}.imgedit-help{display:none;font-style:italic}a.imgedit-help-toggle{text-decoration:none}.form-table td.imgedit-response{padding:0}.imgedit-submit{margin:8px 0}.imgedit-submit-btn{margin-right:20px}.imgedit-wrap .nowrap{white-space:nowrap}span.imgedit-scale-warn{color:red;font-size:20px;font-style:normal;visibility:hidden;vertical-align:middle}.imgedit-group{margin-bottom:8px;padding:2px 10px}audio,video{display:inline-block;max-width:100%}.mejs-container{width:100%;max-width:100%}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.imgedit-wait{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){.wp_attachment_details label[for=content]{font-size:14px;line-height:1.5em}.media-upload-form .media-item .error,.media-upload-form .media-item.error{font-size:13px;line-height:1.5}.media-upload-form .media-item.error{padding:1px 10px}.media-upload-form .media-item .error{padding:10px 12px 10px 0}}@media only screen and (max-width:1120px){#wp-media-grid .wp-filter .attachment-filters{max-width:100%}}@media only screen and (max-width:782px){.media-frame.mode-select .attachments-browser.fixed .media-toolbar{top:46px;left:10px}}@media only screen and (max-width:600px){.media-frame.mode-select .attachments-browser.fixed .media-toolbar{top:0}}@media only screen and (max-width:480px){.edit-attachment-frame .media-frame-title{left:110px}.edit-attachment-frame .edit-media-header .left,.edit-attachment-frame .edit-media-header .right,.upload-php .media-modal-close{width:40px;height:40px}.upload-php .media-modal-close .media-modal-icon{margin:9px 10px}.edit-attachment-frame .edit-media-header .left:before,.edit-attachment-frame .edit-media-header .right:before{line-height:40px!important}.edit-attachment-frame .edit-media-header .left{left:82px}.edit-attachment-frame .edit-media-header .right{left:41px}.edit-attachment-frame .media-frame-content{top:40px}.edit-attachment-frame .attachment-media-view{float:none;height:auto;width:100%}.edit-attachment-frame .attachment-info{height:auto;width:100%}}@media only screen and (max-width:640px),screen and (max-height:400px){.upload-php .mode-grid .media-sidebar{max-width:100%}}.theme-browser .themes{clear:both;padding:0 0 100px}.themes-php .wrap h2{float:right;margin-bottom:15px}.network-admin.themes-php .wrap h2{margin-bottom:0}.themes-php .wrap h2 .button{margin-right:20px}.themes-php .wp-filter-search{position:relative;top:-2px;right:20px;margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5}.themes-php div.error,.themes-php div.updated{margin:0 0 20px;clear:both}.themes-php div.updated a{text-decoration:underline}.theme-browser .theme{cursor:pointer;float:right;margin:0 0 4% 4%;position:relative;width:30.6%;border:1px solid #dedede;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ie8 .theme-browser .theme{width:30%;margin:0 0 4% 3%}.theme-browser .theme:nth-child(3n){margin-left:0}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:pointer}.theme-browser .theme .theme-name{font-size:15px;font-weight:600;height:18px;margin:0;padding:15px;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:#fff;background:rgba(255,255,255,.65)}.theme-browser .theme .theme-actions{-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out;position:absolute;bottom:0;left:0;height:38px;padding:9px 10px 0;background:rgba(244,244,244,.7);border-right:1px solid rgba(0,0,0,.05)}.theme-browser .theme.focus .theme-actions,.theme-browser .theme:focus .theme-actions,.theme-browser .theme:hover .theme-actions{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-actions .button-primary{margin-left:3px}.theme-browser .theme .theme-actions .button-secondary{float:none;margin-right:3px}.theme-browser .theme .theme-screenshot{display:block;overflow:hidden;position:relative;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme .theme-screenshot:after{content:'';display:block;padding-top:66.66666%}.theme-browser .theme .theme-screenshot img{height:auto;position:absolute;right:0;top:0;width:100%;-webkit-transform:translateZ(0);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme:focus .theme-screenshot,.theme-browser .theme:hover .theme-screenshot{background:#fff}.theme-browser.rendered .theme:focus .theme-screenshot img,.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:.4}.theme-browser .theme .more-details{-ms-filter:"alpha(Opacity=0)";opacity:0;position:absolute;top:35%;left:25%;right:25%;background:#222;background:rgba(0,0,0,.7);color:#fff;font-size:15px;text-shadow:0 1px 0 rgba(0,0,0,.6);-webkit-font-smoothing:antialiased;font-weight:600;padding:15px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out}.theme-browser .theme:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}.theme-browser .theme:focus .more-details{opacity:1}.theme-browser .theme.active:focus .theme-actions{display:block}.theme-browser.rendered .theme:focus .more-details,.theme-browser.rendered .theme:hover .more-details{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-installed,.theme-browser .theme .theme-update{background:#d54e21;background:rgba(213,78,33,.95);color:#fff;display:block;font-size:13px;font-weight:400;height:48px;line-height:48px;padding:0 10px;position:absolute;top:0;left:0;right:0;border-bottom:1px solid rgba(0,0,0,.25);overflow:hidden}.theme-browser .theme .theme-installed:before,.theme-browser .theme .theme-update:before{content:'\f463';display:inline-block;font:400 20px/1 dashicons;margin:0 0 0 6px;opacity:.8;position:relative;top:5px;speak:none;-webkit-font-smoothing:antialiased}.theme-browser .theme.active .theme-name{background:#2f2f2f;color:#fff;padding-left:110px;font-weight:300;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.5);box-shadow:inset 0 1px 1px rgba(0,0,0,.5)}.theme-browser .theme.active .theme-name span{font-weight:600}.theme-browser .theme.active .theme-actions{background:rgba(49,49,49,.7);border-right:none;opacity:1}.theme-browser .theme.active .theme-actions .button-primary{margin-left:0}.theme-browser .theme .theme-author{background:#222;color:#eee;display:none;font-size:14px;margin:0 10px;padding:5px 10px;position:absolute;bottom:56px}.theme-browser .theme.display-author .theme-author{display:block}.theme-browser .theme.display-author .theme-author a{color:inherit;text-decoration:none}.theme-browser .theme.add-new-theme{border:none;-webkit-box-shadow:none;box-shadow:none}.theme-browser .theme.add-new-theme a{color:#999;text-decoration:none;display:block;position:relative;z-index:1}.theme-browser .theme.add-new-theme:after{display:block;content:'';-ms-filter:"alpha(Opacity=100)";opacity:1;background:0 0;position:absolute;top:0;right:0;left:0;bottom:0;padding:10% 0 0;text-shadow:none;border:5px dashed #d5d2ca;border:5px dashed rgba(0,0,0,.1);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-browser .theme.add-new-theme span:after{background:#e5e5e5;background:rgba(153,153,153,.1);-webkit-border-radius:50%;border-radius:50%;display:inline-block;content:'\f132';-webkit-font-smoothing:antialiased;font:400 74px/115px dashicons;width:100px;height:100px;vertical-align:middle;text-align:center;color:#999;position:absolute;top:30%;right:50%;margin-right:-50px;text-indent:-4px;padding:0;text-shadow:none;z-index:4}.rtl .theme-browser .theme.add-new-theme span:after{text-indent:4px}.theme-browser .theme.add-new-theme:focus .theme-screenshot,.theme-browser .theme.add-new-theme:hover .theme-screenshot{background:0 0}.theme-browser .theme.add-new-theme:focus span:after,.theme-browser .theme.add-new-theme:hover span:after{background:#fff;color:#0074a2}.theme-browser .theme.add-new-theme:focus:after,.theme-browser .theme.add-new-theme:hover:after{border-color:transparent;color:#fff;background:#0074a2;content:''}.theme-browser .theme.add-new-theme .theme-name{background:0 0;text-align:center;-webkit-box-shadow:none;box-shadow:none;font-weight:400;position:relative;top:0;margin-top:-10%;margin-bottom:10%}.theme-browser .theme.add-new-theme:focus .theme-name,.theme-browser .theme.add-new-theme:hover .theme-name{color:#fff;z-index:2}.theme-overlay .theme-backdrop{position:absolute;right:-20px;left:0;top:0;bottom:0;background:#f1f1f1;background:rgba(238,238,238,.9);z-index:10}.theme-overlay .theme-header{position:absolute;top:0;right:0;left:0;height:48px;border-bottom:1px solid #ddd}.theme-overlay .theme-header .close{cursor:pointer;height:48px;width:50px;text-align:center;float:left;border:0;border-right:1px solid #ddd;background-color:transparent;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.theme-overlay .theme-header .close:before{font:400 22px/50px dashicons!important;color:#777;display:inline-block;content:'\f335';font-weight:300}.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{cursor:pointer;color:#777;background-color:transparent;height:48px;width:54px;float:right;text-align:center;border:0;border-left:1px solid #ddd;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:focus,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:focus,.theme-overlay .theme-header .right:hover{background:#ddd;border-color:#ccc;color:#000}.theme-overlay .theme-header .close:focus:before,.theme-overlay .theme-header .close:hover:before{color:#000}.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .left:focus,.theme-overlay .theme-header .right:focus{-webkit-box-shadow:none;box-shadow:none;outline:0}.theme-overlay .theme-header .left.disabled,.theme-overlay .theme-header .left.disabled:hover,.theme-overlay .theme-header .right.disabled,.theme-overlay .theme-header .right.disabled:hover{color:#ccc;background:inherit;cursor:inherit}.theme-overlay .theme-header .left:before,.theme-overlay .theme-header .right:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.rtl .theme-overlay .theme-header .right:before,.theme-overlay .theme-header .left:before{content:'\f341'}.rtl .theme-overlay .theme-header .left:before,.theme-overlay .theme-header .right:before{content:'\f345'}.theme-overlay .theme-wrap{clear:both;position:fixed;top:9%;right:190px;left:30px;bottom:3%;background:#fff;-webkit-box-shadow:0 1px 20px 5px rgba(0,0,0,.1);box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:20;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-overlay .theme-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden}body.folded .theme-overlay .theme-wrap{right:70px}.theme-overlay .theme-about{position:absolute;top:49px;bottom:57px;right:0;left:0;overflow:auto;padding:2% 4%}.theme-overlay .theme-about:after{content:".";display:block;height:0;clear:both;visibility:hidden}.theme-overlay .theme-actions{position:absolute;text-align:center;bottom:0;right:0;left:0;padding:10px 25px 5px;background:#f3f3f3;z-index:30;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-top:1px solid #eee}.ie8 .theme-overlay .theme-actions{border:1px solid #eee}.theme-overlay .theme-actions a{margin-left:5px;margin-bottom:5px}.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"],.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"]{display:none}.broken-themes a.delete-theme,.theme-overlay .theme-actions .delete-theme{color:#a00;text-decoration:none;border-color:transparent;-webkit-box-shadow:none;box-shadow:none;background:0 0}.theme-overlay .theme-actions .delete-theme{position:absolute;left:10px;bottom:5px}.broken-themes a.delete-theme:focus,.broken-themes a.delete-theme:hover,.theme-overlay .theme-actions .delete-theme:focus,.theme-overlay .theme-actions .delete-theme:hover{background:#d54e21;color:#fff;border-color:#d54e21}.theme-overlay .theme-actions .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-actions .inactive-theme,.theme-overlay.active .theme-actions .active-theme{display:block}.theme-overlay .theme-screenshots{float:right;margin:0 0 0 30px;width:55%;max-width:880px;text-align:center}.theme-overlay .screenshot{border:1px solid #fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;position:relative;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.theme-overlay .screenshot:after{content:'';display:block;padding-top:75%}.theme-overlay .screenshot img{height:auto;position:absolute;right:0;top:0;width:100%}.theme-overlay.small-screenshot .theme-screenshots{position:absolute;width:302px}.theme-overlay.small-screenshot .theme-info{margin-right:350px;width:auto}.theme-overlay .screenshot.thumb{background:#ccc;border:1px solid #eee;float:none;display:inline-block;margin:10px 5px 0;width:140px;height:80px;cursor:pointer}.theme-overlay .screenshot.thumb:after{content:'';display:block;padding-top:100%}.theme-overlay .screenshot.thumb img{cursor:pointer;position:absolute;right:0;top:0;width:100%;height:auto}.theme-overlay .screenshot.selected{background:0 0;border:2px solid #2ea2cc}.theme-overlay .screenshot.selected img{opacity:.8}.theme-browser .theme .theme-screenshot.blank,.theme-overlay .screenshot.blank{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=)}.theme-overlay .theme-info{width:40%;float:right}.theme-overlay .current-label{background:#333;color:#fff;font-size:11px;display:inline-block;padding:2px 8px;-webkit-border-radius:2px;border-radius:2px;margin:0 0 -10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-name{color:#222;font-size:32px;font-weight:100;margin:10px 0 0;line-height:1.3}.theme-overlay .theme-version{color:#999;font-size:13px;font-weight:400;float:none;display:inline-block;margin-right:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-author{color:#686868;font-size:16px;font-weight:400;margin:15px 0 25px}.theme-overlay .theme-author a{text-decoration:none}.theme-overlay .theme-description{color:#555;font-size:15px;font-weight:400;line-height:1.5;margin:30px 0 0}.theme-overlay .theme-tags{border-top:3px solid #eee;color:#888;font-size:13px;font-weight:400;margin:30px 0 0;padding-top:20px}.theme-overlay .theme-tags span{color:#444;font-weight:700;margin-left:5px}.theme-overlay .theme-update-message{background:#fef7f1;border:1px solid #eee;border-right:4px solid #d54e21;-webkit-border-radius:3px;border-radius:3px;padding:5px 20px 10px}.theme-overlay .theme-update{color:#222;font-size:18px;display:inline-block;line-height:40px;margin:0}.theme-overlay .parent-theme{background:#f7fcfe;border:1px solid #eee;border-right:4px solid #2ea2cc;font-size:14px;font-weight:400;margin-top:30px;padding:10px 20px 10px 10px}.theme-overlay .parent-theme strong{font-weight:700}.single-theme .theme,.single-theme .theme-overlay .theme-backdrop,.single-theme .theme-overlay .theme-header{display:none}.single-theme .theme-overlay .theme-wrap{clear:both;min-height:330px;position:relative;right:auto;left:auto;top:auto;bottom:auto}.single-theme .theme-overlay .theme-about{padding:30px 30px 70px;position:static}.single-theme .theme-overlay .theme-actions{position:absolute}@media only screen and (min-width:2000px){#wpwrap .theme-browser .theme{width:17.6%;margin:0 0 3% 3%}#wpwrap .theme-browser .theme:nth-child(3n),#wpwrap .theme-browser .theme:nth-child(4n){margin-left:3%}#wpwrap .theme-browser .theme:nth-child(5n){margin-left:0}}@media only screen and (min-width:1680px){.theme-overlay .theme-wrap{width:1450px;margin:0 auto}}@media only screen and (min-width:1640px){.theme-browser .theme{width:22.7%;margin:0 0 3% 3%}.theme-browser .theme .theme-screenshot:after{padding-top:75%}.theme-browser .theme:nth-child(3n){margin-left:3%}.theme-browser .theme:nth-child(4n){margin-left:0}}@media only screen and (max-width:1120px){.theme-browser .theme{width:47.5%;margin-left:0}.theme-browser .theme:nth-child(even){margin-left:0}.theme-browser .theme:nth-child(odd){margin-left:5%}}@media only screen and (max-width:900px){.theme-overlay .theme-wrap{right:65px}}@media only screen and (max-width:780px){.theme-overlay .theme-wrap,body.folded .theme-overlay .theme-wrap{top:0;left:0;bottom:0;right:0;padding:70px 20px 20px;border:none;z-index:500;position:fixed}.theme-browser .theme.active .theme-name span{display:none}.theme-overlay .theme-screenshots{width:40%}.theme-overlay .theme-info{width:50%}.single-theme .theme-wrap{padding:10px}.theme-browser .theme .theme-actions{padding:5px 10px 4px}.theme-overlay.small-screenshot .theme-screenshots{position:static;float:none;max-width:302px}.theme-overlay.small-screenshot .theme-info{margin-right:0;width:auto}.theme:focus .more-details,.theme:hover .more-details,.theme:not(.active):focus .theme-actions,.theme:not(.active):hover .theme-actions{display:none}.theme-browser.rendered .theme:focus .theme-screenshot img,.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:1}}@media only screen and (max-width:480px){.theme-browser .theme{width:100%;margin-left:0}.theme-browser .theme:nth-child(2n),.theme-browser .theme:nth-child(3n){margin-left:0}}@media only screen and (max-width:650px){.theme-overlay .theme-description,.theme-overlay .theme-update{margin-right:0}.theme-overlay .theme-actions .delete-theme{position:relative;left:auto;bottom:auto}.theme-overlay .theme-actions .inactive-theme{display:inline}.theme-overlay .theme-screenshots{width:100%;float:none}.theme-overlay .theme-info{width:100%}.theme-overlay .theme-author{margin:5px 0 15px}.theme-overlay .current-label{margin-top:10px;font-size:13px}.themes-php .wrap h2{width:100%}.themes-php .wp-filter-search{float:none;clear:both;right:0;top:0;left:0;margin:10px 0;width:100%;max-width:280px}.theme-browser .theme.add-new-theme span:after{font:400 60px/90px dashicons;width:80px;height:80px;top:30%;right:50%;text-indent:0;margin-right:-40px}.single-theme .theme-wrap{margin:0 -10px 0 -12px;padding:10px}.single-theme .theme-overlay .theme-about{padding:10px;overflow:visible}.single-theme .current-label{display:none}.single-theme .theme-overlay .theme-actions{position:static}}.broken-themes{clear:both}.broken-themes table{text-align:right;width:50%;border-spacing:3px;padding:3px}.theme-browser .theme .theme-installed{background:#0074a2}.theme-browser .theme .theme-installed:before{content:'\f147'}.theme-browser .theme.is-installed .theme-actions .button-primary{display:none!important}.theme-install-php a.browse-themes,.theme-install-php a.upload{cursor:pointer}.theme-install-php a.browse-themes,.theme-install-php.show-upload-theme a.upload{display:none}.theme-install-php.show-upload-theme a.browse-themes{display:inline}.upload-plugin,.upload-theme{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:none;margin:0;padding:0;width:100%;overflow:hidden;position:relative;top:10px}.upload-plugin,body.show-upload-theme .upload-theme{display:block}.upload-plugin .wp-upload-form,.upload-theme .wp-upload-form{background:#fafafa;border:1px solid #e5e5e5;padding:30px;margin:30px auto;max-width:380px}.upload-plugin .install-help,.upload-theme .install-help{color:#999;font-size:18px;font-style:normal;margin:0;padding:40px 0 0;text-align:center}body.show-upload-theme .upload-theme+.wp-filter,body.show-upload-theme .upload-theme+.wp-filter+.theme-browser{display:none}p.no-themes{color:#999;font-size:18px;font-style:normal;margin:0;padding:0;text-align:center;display:none}body.no-results p.no-themes{display:block}.theme-install-php .add-new-theme,body.show-upload-theme p.no-themes{display:none!important}@media only screen and (max-width:1120px){.upload-theme .wp-upload-form{margin:20px 0;max-width:100%}.upload-theme .install-help{font-size:15px;padding:20px 0 0;text-align:right}}.rating{margin:15px 0 0}.rating span:before{color:#e6b800;content:"\f154";display:inline-block;-webkit-font-smoothing:antialiased;font:400 20px/1 dashicons;vertical-align:top}.rating-10 span.one:before,.rating-30 span.two:before,.rating-50 span.three:before,.rating-70 span.four:before,.rating-90 span.five:before{content:"\f459"}.rating-100 span.five:before,.rating-100 span.four:before,.rating-100 span.one:before,.rating-100 span.three:before,.rating-100 span.two:before,.rating-20 span.one:before,.rating-30 span.one:before,.rating-40 span.one:before,.rating-40 span.two:before,.rating-50 span.one:before,.rating-50 span.two:before,.rating-60 span.one:before,.rating-60 span.three:before,.rating-60 span.two:before,.rating-70 span.one:before,.rating-70 span.three:before,.rating-70 span.two:before,.rating-80 span.four:before,.rating-80 span.one:before,.rating-80 span.three:before,.rating-80 span.two:before,.rating-90 span.four:before,.rating-90 span.one:before,.rating-90 span.three:before,.rating-90 span.two:before{content:"\f155"}.rating .ratings{display:block;line-height:20px;color:#999}.appearance_page_custom-header #headimg{border:1px solid #DFDFDF;overflow:hidden;width:100%}.appearance_page_custom-header #upload-form p label{font-size:12px}.appearance_page_custom-header .available-headers .default-header{float:right;margin:0 0 20px 20px}.appearance_page_custom-header .random-header{clear:both;margin:0 0 20px 20px;vertical-align:middle}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-left:10px}.appearance_page_custom-header .available-headers label img{vertical-align:middle}div#custom-background-image{min-height:100px;border:1px solid #dfdfdf}div#custom-background-image img{max-width:400px;max-height:300px}body.full-overlay-active{overflow:hidden}.wp-full-overlay{background:0 0;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;right:0;left:0;height:100%;min-width:0}.wp-full-overlay-sidebar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:fixed;width:300px;height:100%;top:0;bottom:0;right:0;padding:0;margin:0;z-index:10;background:#eee;border-left:none}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{overflow:visible}.wp-full-overlay.collapsed,.wp-full-overlay.expanded .wp-full-overlay-sidebar{margin-right:0!important}.wp-full-overlay.expanded{margin-right:300px}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-right:-300px}.wp-full-overlay-sidebar:after{content:'';display:block;position:absolute;top:0;bottom:0;left:0;width:3px;z-index:1000}.wp-full-overlay-main{position:absolute;right:0;left:0;top:0;bottom:0;height:100%}.wp-full-overlay-sidebar .wp-full-overlay-header{position:absolute;right:0;left:0;height:45px;padding:0 15px;line-height:45px;z-index:10;margin:0;border-top:none;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-header a.back{margin-top:9px}.wp-full-overlay-sidebar .wp-full-overlay-footer{bottom:0;border-bottom:none;border-top:none;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{position:absolute;top:45px;bottom:45px;right:0;left:0;overflow:auto}.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header{padding:0}.theme-install-overlay .close-full-overlay,.theme-install-overlay .next-theme,.theme-install-overlay .previous-theme{display:block;position:relative;float:right;width:45px;height:45px;padding-left:2px;background:#eee;border-left:1px solid #ddd;color:#444;cursor:pointer;text-decoration:none;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.theme-install-overlay .close-full-overlay:focus,.theme-install-overlay .close-full-overlay:hover,.theme-install-overlay .next-theme:focus,.theme-install-overlay .next-theme:hover,.theme-install-overlay .previous-theme:focus,.theme-install-overlay .previous-theme:hover{background:#ddd;border-color:#ccc;color:#000;outline:0;-webkit-box-shadow:none;box-shadow:none}.theme-install-overlay .close-full-overlay:before{font:400 22px/1 dashicons;content:"\f335";position:relative;top:7px;right:13px}.theme-install-overlay .previous-theme:before{font:400 20px/1 dashicons;content:"\f341";position:relative;top:6px;right:14px}.theme-install-overlay .next-theme:before{font:400 20px/1 dashicons;content:"\f345";position:relative;top:6px;right:13px}.theme-install-overlay .next-theme.disabled,.theme-install-overlay .next-theme.disabled:focus,.theme-install-overlay .next-theme.disabled:hover,.theme-install-overlay .previous-theme.disabled,.theme-install-overlay .previous-theme.disabled:focus,.theme-install-overlay .previous-theme.disabled:hover{color:#bbb;background:#eee;cursor:default;pointer-events:none}.rtl .theme-install-overlay .previous-theme:before{content:"\f345"}.rtl .theme-install-overlay .next-theme:before{content:"\f341"}.wp-full-overlay a.collapse-sidebar{position:absolute;bottom:12px;right:0;z-index:50;display:block;width:19px;height:19px;margin-right:15px;padding:0;-webkit-border-radius:50%;border-radius:50%;color:#777;text-decoration:none}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay.collapsed .collapse-sidebar{position:absolute;right:100%}.wp-full-overlay .collapse-sidebar-arrow{position:static;margin-top:0;margin-right:0;display:block;width:auto;height:auto;background:0 0}.wp-full-overlay .collapse-sidebar-arrow:before{-webkit-border-radius:50%;border-radius:50%;float:right;content:"\f148";background:#eee;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.rtl .wp-full-overlay .collapse-sidebar-arrow:before,.wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:none;-ms-transform:none;transform:none}.wp-full-overlay.collapsed .collapse-sidebar-arrow{background-position:-1px -109px}.wp-full-overlay .collapse-sidebar-label{position:absolute;right:100%;line-height:20px;margin-right:10px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main,.wp-full-overlay-sidebar{-webkit-transition-property:right,left,top,bottom,width,margin;transition-property:right,left,top,bottom,width,margin;-webkit-transition-duration:.2s;transition-duration:.2s}.customize-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#customize-container{display:none;background:#fff;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;right:0;left:0;height:100%}.customize-active #customize-container{display:block}.customize-loading #customize-container iframe{opacity:0}.customize-loading #customize-container{background:url(../images/spinner.gif) center center/20px 20px no-repeat fixed #fff;-webkit-background-size:20px 20px}#customize-container iframe,.theme-install-overlay iframe{height:100%;width:100%;z-index:20;-webkit-transition:opacity .3s;transition:opacity .3s}#customize-container .collapse-sidebar{bottom:16px}#customize-controls{margin-top:0}.theme-install-overlay{display:none}.theme-install-overlay.single-theme{display:block}.install-theme-info{display:none;padding:10px 20px 60px}.single-theme .install-theme-info{padding-top:15px}.theme-install-overlay .install-theme-info{display:block}.install-theme-info .theme-install{float:left;margin-top:18px}.install-theme-info .theme-name{font-size:16px;line-height:24px;margin-bottom:0;margin-top:0}.install-theme-info .theme-screenshot{margin-top:15px;width:258px;border:1px solid #ccc}.install-theme-info .theme-details{overflow:hidden}.theme-details .theme-version{margin:15px 0;float:right}.theme-details .star-rating{margin:7px 0;float:left}.theme-details .theme-description{float:right;color:#777;line-height:20px;max-width:100%}.theme-install-overlay .wp-full-overlay-header .theme-install{float:left;margin:8px 0 0 10px;line-height:26px}.theme-install-overlay .wp-full-overlay-sidebar{background:#eee;border-left:1px solid #ddd}.theme-install-overlay .wp-full-overlay-sidebar-content{background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.theme-install-overlay .wp-full-overlay-main{background:url(../images/spinner.gif) center center/20px 20px no-repeat #fff;-webkit-background-size:20px 20px}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-full-overlay .collapse-sidebar-arrow{background-image:url(../images/arrows-2x.png);-webkit-background-size:15px 123px;background-size:15px 123px}.customize-loading #customize-container,.theme-install-overlay .wp-full-overlay-main{background-image:url(../images/spinner-2x.gif)}.theme-install-overlay .wp-full-overlay-header .theme-install{margin-top:2px}}@media screen and (max-width:782px){.available-theme .action-links .delete-theme{float:none;margin:0;padding:0;clear:both}.available-theme .action-links .delete-theme a{padding:0}.broken-themes table{width:100%}.theme-install-overlay .wp-full-overlay-header .theme-install{margin-top:6px;line-height:normal}}.press-this #message{border-right:4px solid #7ad03a;padding:1px 12px;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.press-this #side-sortables .category-tabs li{display:inline;line-height:1.35em}body.press-this ul.category-tabs li.tabs a{color:#333}.press-this #content-resize-handle{bottom:2px}body.press-this{color:#333;margin:0;padding:0;min-width:708px;min-height:400px}.press-this #titlediv #title{font-size:1.4em}.press-this #site-heading:before{top:3px;position:relative;display:inline-block;font:400 18px/1 dashicons;speak:none;color:#727272;content:'\f120';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.press-this #wphead{height:32px;margin-right:0;margin-left:0;margin-bottom:5px}.press-this #header-logo{float:right;margin:7px 7px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.press-this #wphead h1{font-weight:400;font-size:16px;line-height:32px;margin:0;float:right}.press-this #wphead h1 a{text-decoration:none}.press-this #wphead h1 a:hover{text-decoration:underline}.press-this #message{margin:10px 0}.press-this .posting{margin-left:250px}.press-this-sidebar{float:left;width:240px;padding-top:10px}.press-this #title{margin-right:0;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.press-this .tagchecklist{margin-top:8px}.press-this #titlediv{margin:0}.press-this #wp-content-wrap #wp-content-editor-tools{padding:0;top:3px;overflow:hidden}.press-this .wp-media-buttons{cursor:default;padding:8px 8px 6px}.press-this #wp-content-wrap #wp-content-media-buttons a{padding:0;line-height:normal;height:auto;font-size:16px}.press-this #wp-content-wrap .mce-toolbar .mce-btn-group .mce-btn{margin:0 1px}.press-this #wp-content-wrap .mce-toolbar .mce-btn button{padding:2px 3px}.press-this #wp-content-wrap .quicktags-toolbar,.press-this #wp-content-wrap div.mce-toolbar-grp{padding-left:3px}.press-this .howto{margin-top:2px;margin-bottom:3px;font-size:12px;font-style:italic;display:block}.press-this #wp-content-editor-container{clear:none}.press-this #poststuff .inside{margin-top:18px}.press-this .category-tabs{margin-bottom:3px}.press-this #poststuff{margin:0 8px;padding:0}.press-this #photo-add-url-div input[type=text]{width:220px}#poststuff #editor-toolbar{height:30px}.posting{margin-left:212px;position:relative}.press-this .inner-sidebar{width:200px}.press-this .inner-sidebar .sleeve{padding-top:5px}.press-this #submitdiv p{margin:0;padding:6px}.press-this #submitdiv #publishing-actions{border-bottom:1px solid #dfdfdf}.press-this #publish{float:left}.press-this #poststuff h2,.press-this #poststuff h3{font-size:14px;line-height:1}.press-this #categorydiv h3,.press-this #tagsdiv-post_tag h3{cursor:pointer}.press-this #submitdiv h3{cursor:default}h3.tb{font-weight:600;font-size:12px;margin-right:5px}.press-this .postbox,.press-this .stuffbox{margin-bottom:10px;min-width:0}.press-this #submitdiv:hover .handlediv{background:0 0}.tbtitle{font-size:1.7em;outline:0;padding:3px 4px;border:1px solid #dfdfdf}.press-this .actions{float:left;margin:-19px 0 0}.press-this #extra-fields .actions{margin:-32px 0 0 -7px}.press-this .actions li{float:right;list-style:none;margin-left:10px}#extra-fields .button{margin-left:5px}#photo_saving{margin:0 8px 8px;vertical-align:middle}#img_container_container{overflow:auto}#extra-fields{margin-top:10px;position:relative}#extra-fields h2{margin:12px}#waiting{margin-top:10px;overflow:hidden}#waiting span{float:left;margin:0 5px 0 0}#waiting .spinner{display:block}#extra-fields .postbox{margin-bottom:5px}#extra-fields .titlewrap{padding:0;overflow:auto;height:120px}#img_container a{float:right;overflow:hidden}#img_container a,#img_container img{width:68px;height:68px}#img_container img{border:none;background-color:#f4f4f4;cursor:pointer}#img_container a,#img_container a:link,#img_container a:visited{border:1px solid #ccc;display:block;position:relative}#img_container a:active,#img_container a:hover{border-color:#000;z-index:1000;border-width:1px}#embed-code{width:100%;height:98px}.press-this .categorydiv div.tabs-panel{height:100px}.press-this .tagsdiv .newtag{width:120px}.press-this #content{margin:5px 0;padding:0 5px;border:0;height:340px;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:19px;background:0 0}.press-this #publishing-actions .spinner{display:inline;vertical-align:middle}@media screen and (max-width:782px){.press-this ul.category-tabs li.tabs{padding:3px 5px 5px}.press-this a.wp-switch-editor{font:13px/19px "Open Sans",sans-serif;margin:5px 5px 0 0;padding:3px 8px 4px}.press-this #wp-content-media-buttons a{padding:0;line-height:normal;height:auto}.press-this #wp-content-editor-tools{padding:0;top:3px}.press-this .category-tabs{margin-top:0}.press-this .tagsdiv .newtag{width:120px;padding:3px 5px;margin-bottom:0}.press-this .tagchecklist{padding:0;margin-bottom:0}.press-this .wp_themeSkin a.mceButton{width:20px;height:20px}.press-this .wp_themeSkin .mceButton .mceIcon{margin:0}.press-this #poststuff h3,.press-this .metabox-holder h3{padding:7px 12px}.press-this input[type=checkbox],.press-this input[type=radio]{height:16px;width:16px}.press-this input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px -4px 0 0}.press-this input[type=radio]:checked:before{font:400 21px/1 dashicons;width:6px;height:6px;margin:4px}.press-this ul.categorychecklist li,.press-this ul.categorychecklist ul{margin-top:0;margin-bottom:0}.press-this div.quicktags-toolbar input{padding:2px 4px}.press-this input,.press-this textarea{font-size:14px}.press-this .tagchecklist span{font-size:13px;line-height:1.8em}}.about-wrap{position:relative;margin:25px 20px 0 40px;max-width:1050px;font-size:15px}.about-wrap div.error,.about-wrap div.updated{display:none!important}.about-wrap hr{border:0;height:0;margin:0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:0;max-width:100%;height:auto;vertical-align:middle}.wp-badge{background:url(../images/w-logo-white.png?ver=20131202) center 24px/85px 85px no-repeat #0074a2;-webkit-background-size:85px 85px;color:#78c8e6;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:150px;text-rendering:optimizeLegibility;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.svg .wp-badge{background-image:url(../images/wordpress-logo-white.svg?ver=20131110)}.about-wrap .wp-badge{position:absolute;top:0;left:0}.about-wrap h2.nav-tab-wrapper{padding-right:6px}.about-wrap h2 .nav-tab{padding:4px 15px 6px;margin:0 0 -1px 3px;font-size:18px;vertical-align:top;border-width:1px;white-space:nowrap}.about-wrap p{line-height:1.6em;font-size:14px}.about-wrap h1{margin:.2em 0 0 200px;color:#333;line-height:1.2em;font-size:2.8em;font-weight:400}.about-wrap h3{margin:2em 0 .6em;font-size:1.25em;line-height:1.5em}.about-wrap h4{color:#222}.about-wrap code,.about-wrap ol li p{font-size:14px}.about-wrap .about-description,.about-wrap .about-text{margin-top:1.4em;font-weight:400;line-height:1.6em;font-size:19px}.about-wrap .about-text{margin:1em 0 1em 200px;min-height:60px;color:#777}.about-wrap .two-col>div{position:relative;width:47.6%;margin-left:4.799999999%;float:right}.about-wrap .three-col>div{position:relative;width:29.95%;margin-left:4.999999999%;float:right}.about-wrap .col .last-feature{margin-left:0}.about-wrap .point-releases{margin-top:5px;border-bottom:1px solid #dfdfdf}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.about-wrap .headline-feature h2{margin:1.1em 0 .2em;font-size:2.4em;font-weight:300;line-height:1.3;text-align:center}.about-wrap .feature-list h2{margin:30px 0 15px;text-align:center}.about-wrap .dfw h3{margin-top:1em;text-align:center}.about-wrap .feature-section h4{margin:1.4em 0 .6em;font-size:1.2em}.about-wrap .feature-section p{margin-top:.6em}.about-wrap .dfw p{max-width:68%;margin:0 auto 20px}.about-wrap .featured-image{text-align:center}.about-wrap .feature-section{overflow:hidden;padding-bottom:20px}.about-wrap .headline-feature .feature-section{margin:0 auto;max-width:82%}.about-wrap .headline-feature .feature-section .col:first-child{float:right;margin:15px 0 0 5%;width:55%}.about-wrap .headline-feature .feature-section .col:last-child{float:left;margin:15px 0 40px;width:40%}.about-wrap .feature-list .feature-section{margin-top:0}.about-wrap .dfw .feature-section{overflow:visible}.about-wrap .dfw-container{position:relative;overflow:hidden;margin-top:50px;-webkit-box-shadow:0 0 10px rgba(0,0,0,.25);box-shadow:0 0 10px rgba(0,0,0,.25)}.about-wrap .dfw-container .overlay-image{position:absolute;top:0;right:0;-webkit-transition:.8s -webkit-transform cubic-bezier(.9,.03,1,.61),.65s opacity linear;transition:.8s transform cubic-bezier(.9,.03,1,.61),.65s opacity linear}.about-wrap .dfw-container .overlay-image.fade-in{opacity:0}.about-wrap .dfw-container .overlay-image.from-left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.about-wrap .dfw-container:hover .overlay-image{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:.7s -webkit-transform cubic-bezier(0,.8,.8,1),.8s opacity linear;transition:.7s transform cubic-bezier(0,.8,.8,1),.8s opacity linear}.about-wrap .return-to-dashboard{margin:30px -5px 0 0;font-size:14px;font-weight:700}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap .feature-list svg{float:right;clear:right;margin:15px 0 0 15px;height:90px;width:90px;background-color:#ccc;-webkit-border-radius:50%;border-radius:50%;fill:#999;border:1px solid #c1c1c1}.about-wrap .feature-list.finer-points h4,.about-wrap .feature-list.finer-points p{margin-right:115px}.about-wrap h4.wp-people-group{margin-top:2.6em;font-size:16px}.about-wrap ul.wp-people-group{overflow:hidden;padding:0 5px;margin:0 -5px 0 -15px}.about-wrap ul.compact{margin-bottom:0}.about-wrap li.wp-person{display:inline-block;vertical-align:top;margin-left:10px;padding-bottom:15px;height:70px;width:280px}.about-wrap ul.compact li.wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap li.wp-person img.gravatar{float:right;margin:0 0 10px 10px;padding:2px;width:60px;height:60px}.about-wrap ul.compact li.wp-person img.gravatar{width:30px;height:30px}.about-wrap li.wp-person a.web{display:block;margin:6px 0 2px;font-size:16px;font-weight:400;line-height:1.6em;text-decoration:none}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:700}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}@media screen and (max-width:782px){.about-wrap .one-col>div,.about-wrap .three-col>div,.about-wrap .two-col>div{width:100%;margin:0 0 40px;padding:0 0 40px;border-bottom:1px solid rgba(0,0,0,.1)}.about-wrap .col>div.last-feature,.about-wrap .feature-list div{margin:0;padding:0;border-bottom:none}.about-wrap .headline-feature .feature-section{max-width:100%}.about-wrap .feature-list .feature-section{padding:0 0 40px}}@media only screen and (max-width:500px){.about-wrap{margin-left:20px;margin-right:10px}.about-wrap .about-text,.about-wrap h1{margin-left:0}.about-wrap .about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}.about-wrap h2.nav-tab-wrapper{padding-right:0;border-bottom:0}.about-wrap h2 .nav-tab{margin-top:10px;margin-left:10px;border-bottom:1px solid #ccc}.about-wrap .headline-feature .feature-section div,.about-wrap .three-col div{width:100%!important;float:none!important}.about-wrap .dfw p{max-width:90%}}@media only screen and (max-width:400px){.about-wrap .feature-list svg{margin-top:15px;height:65px;width:65px}.about-wrap .feature-list.finer-points h4,.about-wrap .feature-list.finer-points p{margin-right:80px}}.no-js #message{display:block}ul.add-menu-item-tabs li{padding:3px 8px 3px 5px}.accordion-section ul.add-menu-item-tabs,.accordion-section ul.category-tabs,.accordion-section ul.wp-tab-bar{margin:0}.accordion-section .categorychecklist{margin:13px 0}#nav-menu-meta .accordion-section-content{padding:18px 13px}#nav-menu-meta .button-controls{margin-bottom:0}#nav-menus-frame{margin-right:300px;margin-top:23px}#wpbody-content #menu-settings-column{display:inline;width:281px;margin-right:-300px;clear:both;float:right;padding-top:0}#menu-settings-column .inside{clear:both;margin:10px 0 0}.metabox-holder-disabled .accordion-section-content,.metabox-holder-disabled .accordion-section-title,.metabox-holder-disabled .postbox{opacity:.5;filter:alpha(opacity=50)}.metabox-holder-disabled .button-controls .select-all{display:none}#wpbody{position:relative}.blank-slate .menu-name{height:2em}.blank-slate .menu-settings{border:none;margin-top:0;padding-top:0;overflow:hidden}.is-submenu{color:#999;font-style:italic;font-weight:400;margin-right:4px}.manage-menus{margin-top:23px;padding:10px;overflow:hidden;background:#fbfbfb}.manage-menus select{float:right;margin-left:6px}.manage-menus .selected-menu{float:right;margin:5px 0 0 6px}.manage-menus .submit-btn{float:right;margin-top:1px}.menu-edit p{margin:.3em 0 .6em}.menu-edit #post-body-content h3{margin:1em 0 10px}.menu-settings{border-top:1px solid #eee;margin-top:2em}.menu-settings dl{margin:0 0 10px;overflow:hidden;padding-right:18%}.menu-settings dd{float:right;margin:0;width:100%}.menu-settings dt{float:right;clear:both;width:21.951%;padding:3px 0 0;margin-right:-21.951%}.menu-settings label{vertical-align:baseline}.menu-edit .checkbox-input{margin-top:4px}.theme-location-set{color:#999;font-size:11px}#menu-management-liquid{float:right;min-width:100%;margin-top:3px}#menu-management{position:relative;margin-left:20px;margin-top:-3px;width:100%;background:#f5f5f5}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:0 10px 10px;border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;background:#fff}#nav-menu-footer,#nav-menu-header{padding:0 10px}#nav-menu-header{border-bottom:1px solid #dfdfdf;margin-bottom:0}#nav-menu-header .menu-name-label{margin-top:4px}.nav-menus-php #post-body div.error,.nav-menus-php #post-body div.updated{margin:0}.nav-menus-php #post-body-content{position:relative;float:none}#menu-management .menu-add-new abbr{font-weight:600}#select-nav-menu-container{text-align:left;padding:0 10px 3px;margin-bottom:5px}#select-nav-menu{width:100px;display:inline}#menu-name-label{margin-top:-2px}.widefat td.menu-location-menus{padding-bottom:5px}.menu-location-menus select{float:right}#locations-nav-menu-wrapper{padding:5px 0}.locations-nav-menu-select select{float:right;width:160px;margin-left:5px}.locations-row-links{float:right;margin:6px 6px 0 0}.locations-add-menu-link,.locations-edit-menu-link{margin:0 3px}.locations-edit-menu-link{padding-left:3px;border-left:1px solid #ccc}#wpbody .open-label{display:block;float:right}#wpbody .open-label span{padding-left:10px}.js .input-with-default-title{color:#aaa;font-style:italic}#menu-management .inside{padding:0 10px}.accordion-container .howto input,.postbox .howto input{width:180px;float:left}.accordion-container .outer-border{margin:0}.customlinkdiv .howto input{width:180px}.customlinkdiv p{margin-top:0}#nav-menu-theme-locations .howto select{width:100%}#nav-menu-theme-locations .button-controls{text-align:left}.add-menu-item-view-all{height:400px}#menu-container .submit{margin:0 0 10px;padding:0}.nav-menus-php .add-new-menu-action{float:right;margin:6px 6px 0 0;line-height:15px}.nav-menus-php .meta-sep,.nav-menus-php .submitcancel,.nav-menus-php .submitdelete{display:block;float:right;margin:6px 0;line-height:15px}.meta-sep{padding:0 2px}#cancel-save{text-decoration:underline;font-size:12px;margin-right:20px;margin-top:5px}.button-primary.right,.button-secondary.right,.button.right{float:left}.list-controls{float:right;margin-top:5px}.add-to-menu{float:left}.postbox .spinner{display:none;vertical-align:middle}.button-controls{clear:both;margin:10px 0}.hide-all,.show-all{cursor:pointer}.hide-all{display:none}#menu-name{width:270px}#manage-menu .inside{padding:0}#available-links dt{display:block}#add-custom-link .howto{font-size:12px}#add-custom-link label span{display:block;float:right;margin-top:5px;padding-left:5px}.menu-item-textbox{width:180px}.nav-menus-php .howto span{margin-top:6px;display:block;float:right}.quick-search{width:190px}.nav-menus-php .list-wrap{display:none;clear:both;margin-bottom:10px}.nav-menus-php .postbox p.submit{margin-bottom:0}.nav-menus-php .list li{display:none;margin:0 0 5px}.nav-menus-php .list li .menu-item-title{cursor:pointer;display:block}.nav-menus-php .list li .menu-item-title input{margin-left:3px;margin-top:-3px}.menu-item-title input[type=checkbox]{display:inline-block;margin-top:-4px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{margin:0;padding:.1em 0}.menu ul{width:100%}.menu li{margin-bottom:0;position:relative}.menu-item-bar{clear:both;line-height:1.5em;position:relative;margin:9px 0 0}.menu-item-bar .menu-item-handle{border:1px solid #dfdfdf;position:relative;padding:10px 15px;height:auto;min-height:20px;width:382px;line-height:30px;overflow:hidden;word-wrap:break-word}.menu-item-bar .menu-item-handle:hover{border-color:#999}#menu-to-edit .menu-item-invalid .menu-item-handle{background:#f6c9cc;border-color:#f1acb1}.no-js .menu-item-edit-active .item-edit{display:none}.js .menu-item-handle{cursor:move}.menu li.deleting .menu-item-handle{background-image:none;background-color:#f66}.menu-item-handle .item-title{font-size:13px;font-weight:600;line-height:20px;display:block;margin-left:13em}.menu-item-handle .menu-item-title.no-title{color:#999}li.menu-item.ui-sortable-helper dl{margin-top:0}li.menu-item.ui-sortable-helper .menu-item-transport dl{margin-top:13px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px}.menu-item-depth-0{margin-right:0}.menu-item-depth-1{margin-right:30px}.menu-item-depth-2{margin-right:60px}.menu-item-depth-3{margin-right:90px}.menu-item-depth-4{margin-right:120px}.menu-item-depth-5{margin-right:150px}.menu-item-depth-6{margin-right:180px}.menu-item-depth-7{margin-right:210px}.menu-item-depth-8{margin-right:240px}.menu-item-depth-9{margin-right:270px}.menu-item-depth-10{margin-right:300px}.menu-item-depth-11{margin-right:330px}.menu-item-depth-0 .menu-item-transport{margin-right:0}.menu-item-depth-1 .menu-item-transport{margin-right:-30px}.menu-item-depth-2 .menu-item-transport{margin-right:-60px}.menu-item-depth-3 .menu-item-transport{margin-right:-90px}.menu-item-depth-4 .menu-item-transport{margin-right:-120px}.menu-item-depth-5 .menu-item-transport{margin-right:-150px}.menu-item-depth-6 .menu-item-transport{margin-right:-180px}.menu-item-depth-7 .menu-item-transport{margin-right:-210px}.menu-item-depth-8 .menu-item-transport{margin-right:-240px}.menu-item-depth-9 .menu-item-transport{margin-right:-270px}.menu-item-depth-10 .menu-item-transport{margin-right:-300px}.menu-item-depth-11 .menu-item-transport{margin-right:-330px}body.menu-max-depth-0{min-width:950px!important}body.menu-max-depth-1{min-width:980px!important}body.menu-max-depth-2{min-width:1010px!important}body.menu-max-depth-3{min-width:1040px!important}body.menu-max-depth-4{min-width:1070px!important}body.menu-max-depth-5{min-width:1100px!important}body.menu-max-depth-6{min-width:1130px!important}body.menu-max-depth-7{min-width:1160px!important}body.menu-max-depth-8{min-width:1190px!important}body.menu-max-depth-9{min-width:1220px!important}body.menu-max-depth-10{min-width:1250px!important}body.menu-max-depth-11{min-width:1280px!important}.item-type{color:#777;font-size:12px;padding:12px 10px;line-height:18px;display:block}.item-controls{font-size:12px;position:absolute;left:20px;top:-1px}.item-controls a{text-decoration:none}.item-controls a:hover{cursor:pointer}.item-controls .item-order{padding-left:10px}.nav-menus-php .item-edit{position:absolute;left:-20px;top:0;display:block;width:30px;height:40px;margin-left:0!important;text-indent:100%;outline:0;overflow:hidden;white-space:nowrap}.menu-instructions-inactive{display:none}.menu-item-settings{display:block;width:402px;padding:10px 10px 10px 0;position:relative;z-index:10;border:1px solid #e5e5e5;border-top:none;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.menu-item-settings .field-move a{display:none;margin:0 2px}.menu-item-edit-active .menu-item-settings{display:block}.menu-item-edit-inactive .menu-item-settings{display:none}.add-menu-item-pagelinks{margin:.5em auto;text-align:center}.link-to-original{display:block;margin:0 0 10px;padding:3px 5px 5px;border:1px solid #dfdfdf;color:#777;font-size:12px;font-style:italic}.link-to-original a{padding-right:4px;font-style:normal}.hidden-field{display:none}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-left:10px;float:right}.description-thin{width:190px;height:40px}.description-wide{width:390px}.menu-item-actions{padding-top:15px}#cancel-save{cursor:pointer}.nav-menus-php .major-publishing-actions{clear:both;padding:3px 0 6px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:left;float:left;line-height:23px;margin:4px 0 1px}.nav-menus-php .blank-slate .menu-settings{display:none}.nav-menus-php .delete-action{float:right;margin-top:2px}.nav-menus-php .submitbox .submitcancel{border-bottom:1px solid #0074a2;padding:1px 2px;color:#0074a2;text-decoration:none}.nav-menus-php .submitbox .submitcancel:hover{background:#0074a2;color:#fff}.nav-menus-php .major-publishing-actions .form-invalid{padding-right:4px;margin-right:-4px}#menu-item-name-wrap:after,#menu-item-url-wrap:after,#menu-name-label:after,#menu-settings-column .inside:after,#nav-menus-frame:after,.nav-menus-php #post-body-content:after,.nav-menus-php .button-controls:after,.nav-menus-php .major-publishing-actions:after,.nav-menus-php .menu-item-settings:after{clear:both;content:".";display:block;height:0;visibility:hidden}#menu-item-name-wrap,#menu-item-url-wrap,#nav-menus-frame,.button-controls{display:block}@media screen and (max-width:782px){body.nav-menus-php{min-width:0!important}#nav-menus-frame{margin-right:0;float:none;width:100%}#wpbody-content #menu-settings-column{display:block;width:100%;float:none;margin-right:0}#side-sortables .add-menu-item-tabs{margin:15px 0 14px}ul.add-menu-item-tabs li.tabs{padding:13px 15px 14px}.nav-menus-php .item-controls .item-type{margin-top:2px}.nav-menus-php .customlinkdiv .howto input{width:65%}.nav-menus-php .quick-search{width:85%}#menu-management-liquid{margin-top:25px}.nav-menus-php .menu-name-label.howto span{margin-top:13px}.menu-name-label #menu-name{margin-top:4px}.nav-menus-php .major-publishing-actions .publishing-action{margin-top:6px}.nav-menus-php .delete-action{font-size:14px;line-height:50px;margin-top:12px}.description-wide,.menu-item-bar .menu-item-handle,.menu-item-settings{width:auto}.menu-item-settings{padding:10px}.menu-item-settings .description-thin,.menu-item-settings .description-wide{width:100%;height:auto}.menu-item-settings input{width:100%}.menu-settings dl{padding-right:0}.menu-settings dd{float:none;width:100%;margin-bottom:15px}.menu-settings dt{float:none;width:auto;margin-right:0;margin-bottom:15px}}@media only screen and (max-width:768px){#menu-locations-wrap .widefat{width:100%}}.widget{margin:0 auto 10px;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.widget-top{font-size:13px;font-weight:600;background:#f7f7f7}.widget-top a.widget-action,.widget-top a.widget-action:hover{-webkit-box-shadow:none;box-shadow:none;outline:0;text-decoration:none}.widget-title h4{margin:0;padding:15px;line-height:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.widgets-holder-wrap .widget-inside{border-top:none;padding:1px 15px 15px;line-height:16px}#available-widgets .widget-description,#widgets-right a.widget-control-edit,.in-widget-title{color:#666}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.widget.ui-draggable-dragging{min-width:100%}.widget.ui-sortable-helper{opacity:.8}.widget-placeholder{border:1px dashed #bbb;margin:0 auto 10px;height:45px;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#widgets-right .widget-placeholder{margin-top:0}#widgets-right .closed .widget-placeholder{height:0;border:0;margin-top:-10px}.sidebar-name{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.sidebar-name-arrow{position:absolute;top:0;left:0;bottom:0}.js .sidebar-name{cursor:pointer}.sidebar-name h3{margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap}.widgets-holder-wrap .description{padding:0 0 15px;margin:0;font-style:normal;color:#777}#widgets-right .widgets-holder-wrap .description{padding-right:7px;padding-left:7px}div.widget-liquid-left{margin:0;width:38%;float:right}div.widget-liquid-right{float:left;width:58%}div#widgets-left{padding-top:12px}div#widgets-left .closed .sidebar-name,div#widgets-left .inactive-sidebar.closed .sidebar-name{margin-bottom:10px}div#widgets-left .sidebar-name h3{padding:10px 0;margin:0 0 0 10px}div#widgets-left .sidebar-name .sidebar-name-arrow:before{left:0;top:4px;padding:4px 4px 4px 6px}#widgets-left #available-widgets,div#widgets-left .widget-holder{background:0 0;border:none}#widgets-left .widgets-holder-wrap{border:none;-webkit-box-shadow:none;box-shadow:none}#available-widgets .widget-action{display:none}#available-widgets .widget{margin:0}#available-widgets .widget:nth-child(odd){clear:both}#available-widgets .widget .widget-description{display:block;padding:10px 15px;font-size:12px}#available-widgets #widget-list{position:relative}#widgets-left .inactive-sidebar{clear:both;width:100%;background:0 0;padding:0;margin:0 0 20px;border:none;-webkit-box-shadow:none;box-shadow:none}#widgets-left .inactive-sidebar.first{margin-top:40px}div#widgets-left .inactive-sidebar .widget.expanded{right:auto}.widget-title-action{float:left;position:relative}div#widgets-left .inactive-sidebar .widgets-sortables{min-height:42px;padding:0;background:0 0;margin:0;position:relative}div#widgets-right:after{content:".";display:block;height:0;clear:both;visibility:hidden}div#widgets-right .sidebars-column-1,div#widgets-right .sidebars-column-2{max-width:450px}div#widgets-right .widgets-holder-wrap{margin:10px 0 0}div#widgets-right .sidebar-description{min-height:20px;margin-top:-5px}div#widgets-right .sidebar-name h3{padding:15px 7px}div#widgets-right .sidebar-name .sidebar-name-arrow:before{left:0;top:4px}div#widgets-right .widget-top{padding:0}div#widgets-right .widgets-sortables{padding:0 8px;margin-bottom:9px;position:relative;min-height:123px}div#widgets-right .closed .widgets-sortables{min-height:0;margin-bottom:0}.sidebar-name .spinner{margin:-5px 5px;float:none}#widgets-right .widgets-holder-wrap.widget-hover{border-color:#777;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.widgets_access #widgets-left .widget .widget-top{cursor:auto}.widgets_access #wpwrap .widget-control-edit,.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description,.widgets_access #wpwrap .widgets-holder-wrap.closed .widget{display:block}.widgets_access #widgets-left .widget .widget-top:hover,.widgets_access #widgets-right .widget .widget-top:hover{border-color:#ddd}#available-widgets .widget-control-edit .edit,#widgets-left .inactive-sidebar .widget-control-edit .add,#widgets-right .widget-control-edit .add{display:none}.widget-control-edit{display:block;color:#666;background:#EEE;padding:0 15px;line-height:43px;border-right:1px solid #DDD}#widgets-left .widget-control-edit:hover,#widgets-right .widget-control-edit:hover{color:#fff;background:#444;border-right:0;outline:#444 solid 1px}.widgets-holder-wrap .sidebar-description,.widgets-holder-wrap .sidebar-name{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.editwidget{margin:0 auto}.editwidget .widget-inside{display:block;padding:0 15px}.editwidget .widget-control-actions{margin-top:20px}.js .closed br.clear,.js .widgets-holder-wrap.closed .sidebar-description,.js .widgets-holder-wrap.closed .widget,.widget-description,.widget-inside{display:none}.widget-inside{background:#fff}#removing-widget{display:none;font-weight:400;padding-right:15px;font-size:12px;line-height:1;color:#000}.js #removing-widget{color:#2ea2cc}#access-off,.no-js .widget-holder .description,.widget-control-noform,.widgets_access #access-on,.widgets_access .sidebar-name-arrow,.widgets_access .widget-action,.widgets_access .widget-holder .description{display:none}.widgets_access #widget-list,.widgets_access .widget-holder{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{-webkit-transition:opacity .1s linear;transition:opacity .1s linear;opacity:.2;pointer-events:none}.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question{opacity:1;pointer-events:auto}#available-widgets .widget-top:hover,#widgets-left .widget-in-question .widget-top,#widgets-left .widget-top:hover,.widgets-chooser ul,div#widgets-right .widget-top:hover{border-color:#999;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1)}.widgets-chooser ul.widgets-chooser-sidebars{margin:0;list-style-type:none;max-height:300px;overflow:auto}.widgets-chooser{display:none}.widgets-chooser ul{border:1px solid #ccc}.widgets-chooser li{padding:10px 35px 10px 15px;border-bottom:1px solid #ccc;background:#fff;margin:0;cursor:pointer;outline:0;position:relative;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.widgets-chooser li:focus,.widgets-chooser li:hover{background:rgba(255,255,255,.7)}.widgets-chooser li:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#999;position:absolute;top:7px;right:5px}.widgets-chooser li:last-child{border:none}.widgets-chooser li.widgets-chooser-selected{background:#2ea2cc;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#fff;position:absolute;top:7px;right:5px}.widgets-chooser .widgets-chooser-actions{padding:10px 0 12px;text-align:center}.widgets-chooser button{margin-left:5px}#available-widgets .widget .widget-top{cursor:pointer}@media screen and (max-width:480px){div.widget-liquid-left{width:100%;float:none;border-left:none;padding-left:0}#widgets-left #available-widgets .widget-top,#widgets-left .inactive-sidebar .widgets-sortables,#widgets-left .sidebar-name{margin-left:0}div.widget-liquid-right{width:100%;float:none}div.widget{margin:0 auto 10px!important;max-width:480px}}@media screen and (max-width:320px){div.widget{max-width:320px}}@media only screen and (min-width:1250px){#widgets-left #available-widgets .widget{width:49%;float:right}.widget.ui-draggable-dragging{min-width:49%}#widgets-left #available-widgets .widget:nth-child(even){float:left}#widgets-right .sidebars-column-1,#widgets-right .sidebars-column-2{float:right;width:49%}#widgets-right .sidebars-column-1{margin-left:2%}#widgets-right.single-sidebar .sidebars-column-1,#widgets-right.single-sidebar .sidebars-column-2{float:none;width:100%;margin:0}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #wp-fullscreen-tagline{font-family:KaiTi,"楷体",sans-serif}.locale-zh-cn #wp-fullscreen-modes a{font-size:12px}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-right:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-left:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title{width:8em}.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}
\ No newline at end of file
diff --git a/wp-admin/css/wp-admin.css b/wp-admin/css/wp-admin.css
new file mode 100644
index 0000000..b29af79
--- /dev/null
+++ b/wp-admin/css/wp-admin.css
@@ -0,0 +1,14 @@
+@import url(common.css);
+@import url(forms.css);
+@import url(admin-menu.css);
+@import url(dashboard.css);
+@import url(list-tables.css);
+@import url(edit.css);
+@import url(revisions.css);
+@import url(media.css);
+@import url(themes.css);
+@import url(press-this.css);
+@import url(about.css);
+@import url(nav-menus.css);
+@import url(widgets.css);
+@import url(l10n.css);
diff --git a/wp-admin/css/wp-admin.min.css b/wp-admin/css/wp-admin.min.css
new file mode 100644
index 0000000..b9860c6
--- /dev/null
+++ b/wp-admin/css/wp-admin.min.css
@@ -0,0 +1,8 @@
+#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%;padding-left:20px}#wpcontent,#wpfooter{margin-left:160px}.folded #wpcontent,.folded #wpfooter{margin-left:36px}#wpbody-content{padding-bottom:65px;float:left;width:100%;overflow:visible!important}.inner-sidebar{float:right;clear:right;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-right:auto;width:286px;display:block}.columns-2 .inner-sidebar #side-sortables,.inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:left;clear:left;width:100%;margin-right:-2000px}.has-right-sidebar #post-body-content{margin-right:300px;float:none;width:auto}#col-container,#col-left,#col-right{overflow:hidden;padding:0;margin:0}#col-left{width:35%}#col-right{float:right;clear:right;width:65%}.col-wrap{padding:0 7px}.alignleft{float:left}.alignright{float:right}.textleft{text-align:left}.textright{text-align:right}.clear{clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{left:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.js .wp-core-ui .hide-if-js,.js.wp-core-ui .hide-if-js,.no-js .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js,.no-js.wp-core-ui .hide-if-no-js{display:none}#menu-management .menu-edit,#menu-settings-column .accordion-container,.feature-filter,.imgedit-group,.manage-menus,.menu-item-handle,.popular-tags,.stuffbox,.widget-inside,.widget-top,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.feature-filter,.imgedit-group,.popular-tags,.stuffbox,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{background:#fff}body,html{height:100%;margin:0;padding:0}html{background:#f1f1f1}body{color:#444;font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.modal-open{overflow:hidden}body.mobile.modal-open #wpwrap{overflow:hidden;height:100%}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0074a2;-webkit-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}a,div{outline:0}a:active,a:hover{color:#2ea2cc}a:focus{color:#124964;-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus,.screen-reader-text:focus{-webkit-box-shadow:none;box-shadow:none;outline:0}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}p{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}dd,li{margin-bottom:6px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2{color:#222;font-size:1.5em;margin:.83em 0;font-weight:400}h3{color:#222;font-size:1.3em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ol,ul{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-left:2em}ul.ul-disc{list-style:disc}ul.ul-square{list-style:square}ol.ol-decimal{list-style:decimal}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-left:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.ltr{direction:ltr}.code,code{font-family:Consolas,Monaco,monospace;direction:ltr;unicode-bidi:embed}code,kbd{padding:3px 5px 2px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;float:left;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#999;font-weight:400}.subsubsub a.current{font-weight:600;border:none}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat *{word-wrap:break-word}.widefat a{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot th{border-top:1px solid #e1e1e1;border-bottom:none}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat th{text-align:left;line-height:1.3em;font-size:14px}.widefat th input{margin:0 0 0 8px;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.widefat th input[type=checkbox]{margin-top:-1px}.widefat.media .check-column{padding-top:8px}.widefat tbody th.check-column,.widefat tfoot th.check-column,.widefat thead th.check-column{padding:11px 0 0 3px}.widefat thead th.check-column{padding-top:10px}.update-php div.error,.update-php div.updated{margin-left:0}.no-js .widefat tfoot .check-column input,.no-js .widefat thead .check-column input{display:none}.column-comments,.column-links,.column-posts,.widefat .num{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 20px 0 2px}.attention{color:#2ea2cc}.subtitle,.wrap h2{font-weight:400;margin:0}.wrap h2{font-size:23px;font-weight:400;padding:9px 15px 4px 0;line-height:29px}.subtitle{color:#777;font-size:14px;padding-left:25px}.wrap .add-new-h2,.wrap .add-new-h2:active{margin-left:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:none;-webkit-border-radius:2px;border-radius:2px;background:#e0e0e0;text-shadow:none;font-weight:600;font-size:13px}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.wrap h2.long-header{padding-right:0}.wp-dialog{background-color:#fff}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}.alt,.alternate{background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-right-color:#99d}.media-upload-form label.form-help,td.help{color:#9a9a9a}.highlight{background-color:#e4f2fd;color:#000}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#d54e21}.wp-ui-text-notification{color:#d54e21}.wp-ui-text-icon{color:#999}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox .hndle,.side-info,.sidebar-name,.stuffbox .hndle,.widefat tfoot th,.widefat thead th,.widget .widget-top{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#222}.postbox .hndle,.stuffbox .hndle{border-bottom:1px solid #eee}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,#welcome-panel.welcome-panel .welcome-panel-close:before,.tagchecklist span a:before{background:0 0;color:#bbb;content:'\f153';display:block!important;font:400 16px/1 dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased!important}#welcome-panel.welcome-panel .welcome-panel-close:before{margin:0}#bulk-titles div a:before,.tagchecklist span a:before{margin:2px 0}#bulk-titles div a:hover:before,#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before{color:#c00}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap;word-wrap:break-word}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete,#search-plugins-table .plugins a.delete,.plugins a.delete,.row-actions span.delete a,.row-actions span.spam a,.row-actions span.trash a,.submitbox .submitdelete{color:#a00}#all-plugins-table .plugins a.delete:hover,#media-items a.delete-permanently:hover,#media-items a.delete:hover,#nav-menu-footer .menu-delete:hover,#search-plugins-table .plugins a.delete:hover,.file-error,.plugins a.delete:hover,.row-actions .delete a:hover,.row-actions .spam a:hover,.row-actions .trash a:hover,.submitbox .submitdelete:hover,.widget-control-remove:hover,abbr.required{color:red;text-decoration:none;border:none}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{line-height:28px;vertical-align:middle;text-align:left;float:left}#publishing-action{text-align:right;float:right;line-height:23px}#publishing-action .spinner{float:left}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:right}#save-post{float:left}.preview{float:right}#sticky-span{margin-left:18px}.side-info{margin:0;padding:4px;font-size:11px}.side-info h5{padding-bottom:7px;font-size:14px;margin:12px 2px 5px;border-bottom:1px solid #dadada}.side-info ul{margin:0;padding-left:18px;list-style:square;color:#666}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:right}.wp-filter{display:inline-block;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:12px 0 25px;padding:0 20px;width:100%;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5;background:#fff;color:#555;font-size:13px}.wp-filter a{text-decoration:none}.filter-count{display:inline-block;vertical-align:middle;min-width:4em}.filter-count .count,.title-count{display:inline-block;position:relative;top:-1px;padding:4px 10px;-webkit-border-radius:30px;border-radius:30px;background:#777;color:#fff;font-size:14px;font-weight:600}.title-count{display:inline;top:-3px;margin-left:5px;margin-right:20px}.filter-items{float:left}.filter-links,.filter-links li{display:inline-block;margin:0}.filter-links li>a{display:inline-block;margin:0 10px;padding:15px 0;border-bottom:4px solid #fff;color:#666;cursor:pointer}.filter-links .current{-webkit-box-shadow:none;box-shadow:none;border-bottom:4px solid #666;color:#222}.filter-links li>a:focus,.filter-links li>a:hover,.show-filters .filter-links a.current:focus,.show-filters .filter-links a.current:hover{color:#2ea2cc}.wp-filter .search-form{float:right;margin:10px 0}.wp-filter .search-form input[type=search]{margin:0;padding:3px 5px;width:280px;max-width:100%;font-size:16px;font-weight:300;line-height:1.5}.wp-filter .search-form select{margin:0;height:32px;vertical-align:top}.wp-filter .search-form.search-plugins{display:inline-block}.wp-filter .drawer-toggle{display:inline-block;margin:0 10px;padding:4px 6px;color:#666;cursor:pointer}.wp-filter .drawer-toggle:before{display:inline-block;vertical-align:top;content:"\f111";margin:0 5px 0 0;width:16px;height:16px;color:#777;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;font-family:dashicons;font-size:16px;line-height:1;text-align:center;text-decoration:inherit;font-weight:400;font-style:normal;-webkit-font-smoothing:antialiased}.wp-filter .drawer-toggle:hover,.wp-filter .drawer-toggle:hover:before{color:#2ea2cc}.wp-filter .drawer-toggle.current:before{color:#fff}.filter-drawer{display:none;margin:0 -20px;padding:20px;border-top:1px solid #eee;background:#fafafa}.show-filters .filter-drawer{display:block;overflow:hidden;width:100%}.show-filters .wp-filter .drawer-toggle:focus,.show-filters .wp-filter .drawer-toggle:hover{background:#2ea2cc}.show-filters .filter-links a.current{border-bottom:none}.show-filters .wp-filter .drawer-toggle{-webkit-border-radius:2px;border-radius:2px;border:none;background:#777;color:#fff}.show-filters .wp-filter .drawer-toggle:before{color:#fff}.filter-group{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin:0 1% 0 0;padding:10px;width:24%;background:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.filter-group h4{position:relative;margin:0}.filter-drawer ol{margin:20px 0 0;list-style-type:none;font-size:12px}.filter-drawer li{display:inline-block;vertical-align:top;margin:5px 0;padding-right:25px;width:160px;list-style-type:none}.filter-drawer .buttons{margin-bottom:20px}.filter-drawer .buttons .button span{display:inline-block;opacity:.8;font-size:12px;text-indent:10px}.wp-filter .button.clear-filters{display:none;margin:0 0 20px 10px}.filtered-by{display:none;margin:0}.filtered-by>span{font-weight:600}.filtered-by a{margin-left:10px}.filtered-by .tags{display:inline}.filtered-by .tag{margin:0 5px;padding:4px 8px;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:11px}.filters-applied .filter-drawer .buttons,.filters-applied .filter-drawer br,.filters-applied .filter-group{display:none!important}.filters-applied .filtered-by{display:block}.filters-applied .filter-drawer{padding:20px}.error .content-filterable,.loading-content .content-filterable,.show-filters .content-filterable,.show-filters.filters-applied.loading-content .content-filterable{display:none}.show-filters.filters-applied .content-filterable{display:block}.loading-content .spinner{display:block;margin:40px auto 0;float:none}@media only screen and (max-width:1120px){.filter-drawer{border-bottom:1px solid #eee}.filter-group{margin-bottom:0;margin-top:5px;width:100%}.filter-group li{margin:10px 0}}@media only screen and (max-width:1000px){.filter-items{float:none}.wp-filter .media-toolbar-primary,.wp-filter .media-toolbar-secondary,.wp-filter .search-form{float:none;position:relative;max-width:100%}}@media only screen and (max-width:782px){.filter-group li{padding:0;width:50%}}@media only screen and (max-width:320px){.filter-count{display:none}.wp-filter .drawer-toggle{margin:10px 0}.filter-group li,.wp-filter .search-form input[type=search]{width:100%}}.notice,div.error,div.updated{background:#fff;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 15px 2px;padding:1px 12px}.form-table td .notice p,.notice p,div.error p,div.updated p{margin:.5em 0;padding:2px}.notice-success,div.updated{border-color:#7ad03a}.notice-warning{border-color:#ffba00}.notice-error,div.error{border-color:#dd3d36}.notice-info{border-color:#2ea2cc}.media-upload-form .notice,.media-upload-form div.error,.wrap .notice,.wrap div.error,.wrap div.updated{margin:5px 0 15px}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:left;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}.update-php .spinner{float:none;margin:-4px 0}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading{visibility:hidden}#ajax-response.alignleft{margin-left:2em}#adminmenu a,#catlist a,#sidemenu a,#taglist a{text-decoration:none}#contextual-help-wrap,#screen-options-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-left:0!important}#screen-meta .screen-reader-text{visibility:hidden}#screen-meta-links{margin:0 20px 0 0}#screen-meta-links a{padding:3px 6px 3px 16px}#screen-meta-links a:focus{outline:0}#screen-meta{display:none;margin:0 20px -1px 0;position:relative;background-color:#fff;border:1px solid #ddd;border-top:none;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-link-wrap,#screen-options-link-wrap{float:right;height:28px;margin:0 0 0 6px;border:1px solid #ddd;border-top:none;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links a{color:#777}#screen-meta-links a:active,#screen-meta-links a:focus,#screen-meta-links a:hover{color:#333}#screen-meta-links a.show-settings{display:block;font-size:13px;height:22px;line-height:22px;text-decoration:none;z-index:1}#screen-meta-links a:after{right:0;content:'\f140';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 5px 0 0;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#bbb}#screen-meta-links a.screen-meta-active:after{content:'\f142'}#screen-meta-links a.show-settings:hover{text-decoration:none}.toggle-arrow{background-repeat:no-repeat;background-position:top left;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom left}#contextual-help-wrap h5,#screen-options-wrap h5{margin:8px 0;font-size:13px}.metabox-prefs label{display:inline-block;padding-right:15px;line-height:30px}.metabox-prefs label input[type=checkbox]{margin-top:-4px;margin-right:6px}.metabox-prefs label input{margin:0 5px 0 2px}.metabox-prefs .columns-prefs label input{margin:0 2px}.metabox-prefs label a{display:none}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;left:150px;right:170px;border:1px solid #e1e1e1;border-top:none;border-bottom:none;background:#f6fbfd}#contextual-help-wrap.no-sidebar #contextual-help-back{right:0;border-right-width:0;-webkit-border-bottom-right-radius:2px;border-bottom-right-radius:2px}.contextual-help-tabs{float:left;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:0 0 0 2px;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 5px 5px 12px;line-height:18px;text-decoration:none;border:1px solid transparent;border-right:none;border-left:none}.contextual-help-tabs a:hover{color:#333}.contextual-help-tabs .active{padding:0;margin:0 -1px 0 0;border-left:2px solid #2ea2cc;background:#f6fbfd;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active a{border-color:#e1e1e1;color:#333}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 22px 12px 0;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-left:18px}.contextual-help-sidebar{width:150px;float:right;padding:0 8px 0 12px;overflow:auto}html.wp-toolbar{padding-top:32px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.narrow{width:70%;margin-bottom:40px}.narrow p{line-height:150%}.widefat td,.widefat th{overflow:hidden;color:#555}.widefat th{font-weight:400}.widefat tfoot tr th,.widefat thead tr th{color:#333}.widefat td p{margin:2px 0 .8em}.widefat ol,.widefat p,.widefat ul{color:#333}.widefat .column-comment p{margin:.6em 0}.postbox-container{float:left}.postbox-container .meta-box-sortables{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #bbb;height:250px}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:left}#post-body.columns-2 #postbox-container-1{float:right;margin-right:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{cursor:move}.hndle a{font-size:11px;font-weight:400}.postbox .handlediv{float:right;width:27px;height:30px}.js .postbox .handlediv{cursor:pointer}.sortable-placeholder{border:1px dashed #bbb;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox .hndle,.stuffbox .hndle{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:none;-webkit-box-shadow:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 5px}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.plugins .name{font-weight:600}#wpfooter{position:absolute;bottom:0;left:0;right:0;padding:10px 20px;color:#777}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}#wpfooter a{text-decoration:none}#wpfooter a:hover{text-decoration:underline}.nav-tab{border:1px solid #ccc;border-bottom:none;background:#e4e4e4;color:#555;font-size:12px;line-height:16px;display:inline-block;padding:4px 14px 6px;text-decoration:none;margin:-4px 4px -1px 0}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom:1px solid #ccc;padding-bottom:0;padding-left:10px}h2 .nav-tab{padding:6px 10px;font-weight:700;font-size:15px;line-height:24px}.spinner{background:url(../images/spinner.gif) 0 0/20px 20px no-repeat;-webkit-background-size:20px 20px;display:none;float:right;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}#template div{margin-right:190px}.metabox-holder h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#templateside ul li a{text-decoration:none}#sidemenu{margin:-30px 15px 0 315px;list-style:none;position:relative;float:right;padding-left:10px;font-size:12px}#sidemenu a{padding:0 7px;display:block;float:left;line-height:28px;border-top:1px solid #f9f9f9;border-bottom:1px solid #dfdfdf;background-color:#f9f9f9;-webkit-transition:none;transition:none}#sidemenu li{display:inline;line-height:200%;list-style:none;text-align:center;white-space:nowrap;margin:0;padding:0}#sidemenu a.current{font-weight:400;padding-left:6px;padding-right:6px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;border:1px solid #dfdfdf;border-bottom-color:#f1f1f1;background-color:#f1f1f1;color:#000}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:left}.error-message{color:red;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}td.media-icon{text-align:center;width:80px;padding-top:8px;padding-bottom:8px}td.media-icon img{max-width:80px;max-height:60px;width:auto;height:auto}td.image-icon img{border:1px solid rgba(0,0,0,.07)}#howto{font-size:11px;margin:0 5px;display:block}.importers td{padding-right:14px}.importers{font-size:16px;width:auto}#post-body #post-body-content #namediv h3{margin-top:0}#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px;white-space:nowrap}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.zerosize{height:0;width:0;margin:0;border:0;padding:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:none;margin:0;padding:0}fieldset{border:0;padding:0;margin:0}.post-categories{display:inline;margin:0;padding:0}.post-categories li{display:inline}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) bottom left repeat-x}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) top left repeat-x;height:17px;float:left}.star-rating{white-space:nowrap}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;text-align:center;color:#0074a2}.star-rating .star-full:before{content:'\f155'}.star-rating .star-half:before{content:'\f459'}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:'\f154'}div.action-links{font-weight:400}#plugin-information{background:#fff;position:fixed;top:0;right:0;bottom:0;left:0;height:100%;padding:0}#plugin-information-scrollable{overflow:auto;height:100%}#plugin-information-title{padding:0 20px;background:#f5f5f5;font-size:22px;font-weight:600;line-height:56px;position:relative;top:0;right:0;left:0;height:56px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner{margin-right:0;height:250px;bottom:250px;-webkit-background-size:100% auto;background-size:100% auto}#plugin-information-title h2{font-size:1em;font-weight:700;padding:0;margin:0;max-width:680px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner h2{font-family:"Helvetica Neue",sans-serif;display:inline-block;font-size:30px;line-height:50px;padding:0 15px;margin:174px 0 0 10px;color:#fff;background:rgba(30,30,30,.9);text-shadow:0 1px 3px rgba(0,0,0,.4);-webkit-box-shadow:0 0 30px rgba(255,255,255,.1);box-shadow:0 0 30px rgba(255,255,255,.1);-webkit-border-radius:8px;border-radius:8px}#plugin-information-title div.vignette{display:none}#plugin-information-title.with-banner div.vignette{display:block;float:right;top:0;height:250px;width:772px;margin:0 -20px;background:0 0;-webkit-box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1)}#plugin-information-tabs{padding:0 16px;position:relative;right:0;left:0;height:36px;z-index:1;border-bottom:1px solid #ddd;background:#f3f3f3}#plugin-information-tabs a{position:relative;float:left;padding:9px 10px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;-webkit-transition:none;transition:none}#plugin-information-tabs a.current{margin:0 -1px;background:#fff;border:1px solid #ddd;border-bottom-color:#fff;padding-top:8px;color:#333}#plugin-information-tabs.with-banner a.current{border-top:none;padding-top:9px}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{overflow:hidden;background:#fff;position:relative;top:0;right:0;left:0;min-height:100%;min-height:-webkit-calc(100% - 152px);min-height:calc(100% - 152px)}#plugin-information-content.with-banner{min-height:-webkit-calc(100% - 346px);min-height:calc(100% - 346px)}#section-holder{position:relative;top:0;right:250px;bottom:0;left:0;margin-right:250px;padding:10px 26px 99999px;margin-bottom:-99930px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{display:block;float:right;position:relative;top:0;right:0;padding:16px 16px 99999px;margin-bottom:-99930px;width:217px;border-left:1px solid #ddd;background:#f3f3f3;color:#666}#plugin-information .fyi strong{color:#464646}#plugin-information .fyi h3{font-weight:700;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-right:0}#plugin-information .fyi ul{padding:0;margin:0;list-style:none}#plugin-information .fyi li{margin:0 0 10px}#plugin-information .counter-container{margin:3px 0}#plugin-information .counter-label{float:left;margin-right:5px;min-width:55px}#plugin-information .counter-back{height:17px;width:92px;background-color:#ececec;float:left}#plugin-information .counter-bar{height:17px;background-color:#fddb5a;float:left}#plugin-information .counter-count{margin-left:5px}#plugin-information .fyi ul.contributors{margin-top:10px}#plugin-information .fyi ul.contributors li{display:inline-block;margin-right:8px;vertical-align:middle}#plugin-information .fyi ul.contributors li img{vertical-align:middle;margin-right:4px}#plugin-information-footer{padding:15px 16px;position:absolute;right:0;bottom:0;left:0;height:28px;border-top:1px solid #ddd;background:#f3f3f3}#plugin-information .section{direction:ltr}#plugin-information .section ol,#plugin-information .section ul{list-style-type:disc;margin-left:24px}#plugin-information .section,#plugin-information .section p{font-size:14px;line-height:1.7}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;margin-top:16px;max-width:100%;width:auto;height:auto;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px}#plugin-information pre{padding:7px;overflow:auto;border:1px solid #ccc}#plugin-information .review{overflow:hidden;width:100%;margin-bottom:20px;border-bottom:1px solid #e6e6e6}#plugin-information .review-title-section{overflow:hidden}#plugin-information .review-title-section h4{display:inline-block;float:left;margin:0 6px 0 0}#plugin-information .reviewer-info p{clear:both;margin:0;padding-top:2px}#plugin-information .reviewer-info .avatar{float:left;margin:4px 6px 0 0}#plugin-information .reviewer-info .star-rating{float:left}#plugin-information .review-meta{float:left;margin-left:.75em}#plugin-information .review-body{float:left;width:100%}.plugin-version-author-uri{font-size:13px}@media screen and (max-width:771px){#plugin-information-title.with-banner{height:100px;bottom:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:40px;max-width:85%}#plugin-information-title.with-banner div.vignette{height:100px;bottom:100px;width:800%}#plugin-information-tabs{overflow:hidden;padding:0;height:auto}#plugin-information-tabs a.current{margin-bottom:0;border-bottom:none}#plugin-information .fyi{float:none;border:1px solid #ddd;position:static;width:auto;margin:26px 26px 0;padding-bottom:0}#section-holder{position:static;margin:0;padding-bottom:70px}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}body.import-php #TB_window,body.index-php #TB_window,body.plugin-install-php #TB_window,body.plugins-php #TB_window,body.update-core-php #TB_window{background:url(../images/spinner.gif) no-repeat center #fcfcfc}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){body.import-php #TB_window,body.index-php #TB_window,body.plugin-install-php #TB_window,body.plugins-php #TB_window,body.update-core-php #TB_window{background:url(../images/spinner-2x.gif) no-repeat center/20px 20px #fcfcfc;-webkit-background-size:20px 20px}}body.import-php #TB_title,body.index-php #TB_title,body.plugin-install-php #TB_title,body.plugins-php #TB_title,body.update-core-php #TB_title{float:left;height:1px}body.import-php #TB_ajaxWindowTitle,body.index-php #TB_ajaxWindowTitle,body.plugin-install-php #TB_ajaxWindowTitle,body.plugins-php #TB_ajaxWindowTitle,body.update-core-php #TB_ajaxWindowTitle{display:none}body.import-php .tb-close-icon,body.index-php .tb-close-icon,body.plugin-install-php .tb-close-icon,body.plugins-php .tb-close-icon,body.update-core-php .tb-close-icon{left:auto;right:-30px;color:#eee;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}body.import-php #TB_closeWindowButton:focus,body.import-php #TB_closeWindowButton:focus .tb-close-icon,body.import-php .tb-close-icon:focus,body.import-php .tb-close-icon:hover,body.index-php #TB_closeWindowButton:focus,body.index-php #TB_closeWindowButton:focus .tb-close-icon,body.index-php .tb-close-icon:focus,body.index-php .tb-close-icon:hover,body.plugin-install-php #TB_closeWindowButton:focus,body.plugin-install-php #TB_closeWindowButton:focus .tb-close-icon,body.plugin-install-php .tb-close-icon:focus,body.plugin-install-php .tb-close-icon:hover,body.plugins-php #TB_closeWindowButton:focus,body.plugins-php #TB_closeWindowButton:focus .tb-close-icon,body.plugins-php .tb-close-icon:focus,body.plugins-php .tb-close-icon:hover,body.update-core-php #TB_closeWindowButton:focus,body.update-core-php #TB_closeWindowButton:focus .tb-close-icon,body.update-core-php .tb-close-icon:focus,body.update-core-php .tb-close-icon:hover{color:#2ea2cc;outline:0;-webkit-box-shadow:none;box-shadow:none}body.import-php .tb-close-icon:before,body.index-php .tb-close-icon:before,body.plugin-install-php .tb-close-icon:before,body.plugins-php .tb-close-icon:before,body.update-core-php .tb-close-icon:before{content:"\f335";font-size:32px}@media screen and (max-width:830px){body.import-php .tb-close-icon,body.index-php .tb-close-icon,body.plugin-install-php .tb-close-icon,body.plugins-php .tb-close-icon,body.update-core-php .tb-close-icon{right:0;top:-30px}}img{border:none}#wphead{border-bottom:1px solid #dfdfdf}#wphead h1 a{color:#464646}.js .meta-box-sortables .postbox:hover .handlediv{margin-right:0!important}.js .meta-box-sortables .postbox .handlediv:before,.js .sidebar-name .sidebar-name-arrow:before{right:12px;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.js #widgets-left .sidebar-name .sidebar-name-arrow{display:none}.js #widgets-left .sidebar-name:hover .sidebar-name-arrow,.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow{display:block}.js .meta-box-sortables .postbox .handlediv:before,.js .sidebar-name .sidebar-name-arrow:before{content:'\f142'}.js .meta-box-sortables .postbox.closed .handlediv:before,.js .widgets-holder-wrap.closed .sidebar-name-arrow:before{content:'\f140'}.error a{text-decoration:underline}.updated a{text-decoration:none;padding-bottom:2px}#photo-add-url-div input[type=text]{width:300px}.alignleft h3{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;width:97%;background:#f9f9f9;outline:0}#docs-list,#template textarea{direction:ltr}#template p{width:97%}#templateside{float:right;width:190px;word-wrap:break-word}#postcustomstuff p.submit,#templateside h3{margin:0}#templateside h4{margin:1em 0 0}#templateside ol,#templateside ul{margin:.5em 0;padding:0}#templateside li{margin:4px 0}#templateside li a,.theme-editor-php .highlight{display:block;padding:3px 3px 3px 12px;text-decoration:none}.theme-editor-php .highlight{margin:-3px 3px -3px -12px}#templateside .highlight{border:none;font-weight:700}.nonessential{color:#666;font-size:11px;font-style:italic;padding-left:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top a.widget-action:after{right:0;content:'\f140';border:none;background:0 0;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.accordion-section-title:after,.handlediv,.item-edit,.sidebar-name-arrow,.widget-action{color:#aaa}.accordion-section-title:hover:after,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.widget-action:hover{color:#777}.widget-top a.widget-action:after{padding:12px 12px 11px}.widget-top a.widget-action:focus:after{-webkit-box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.nav-menus-php .item-edit:before{line-height:2.1}.accordion-section-title:after,.control-section .accordion-section-title:after{float:right;right:20px;top:-2px}#customize-info.open .accordion-section-title:after,.control-section.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before,.widget.open .widget-top a.widget-action:after{content:'\f142'}/*!
+ * jQuery UI Draggable/Sortable 1.11.2
+ * http://jqueryui.com
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */.ui-draggable-handle,.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.accordion-section{border-bottom:1px solid #dfdfdf;margin:0}.accordion-section.open .accordion-section-content,.no-js .accordion-section .accordion-section-content{display:block}.accordion-section.open:hover{border-bottom-color:#dfdfdf}.accordion-section-content{display:none;padding:10px 20px 15px;overflow:hidden;background:#fff}.accordion-section-title{margin:0;padding:12px 15px 15px;position:relative;border-left:1px solid #dfdfdf;border-right:1px solid #dfdfdf;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.js .accordion-section-title{cursor:pointer}.js .accordion-section-title:after{position:absolute;top:12px;right:10px;z-index:1}.accordion-section-title:focus{outline:0}.accordion-section-title:focus:after,.accordion-section-title:hover:after{border-color:#aaa transparent}.cannot-expand .accordion-section-title{cursor:auto}.cannot-expand .accordion-section-title:after{display:none}.control-section .accordion-section-title{border-left:none;border-right:none;padding:10px 10px 11px 14px;line-height:21px;background:#fff}.control-section .accordion-section-title:after{top:11px}.js .control-section .accordion-section-title:focus,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section:hover .accordion-section-title{color:#222;background:#f5f5f5}.control-section.open .accordion-section-title{border-bottom:1px solid #dfdfdf}@media only screen and (min-width:769px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:860px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (min-width:980px){#col-left{width:35%}#col-right{width:65%}}@media only screen and (max-width:768px){#col-left,#col-right{width:100%}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){div.star-holder,div.star-holder .star-rating{background:url(../images/stars-2x.png?ver=20121108) bottom left/21px 37px repeat-x;-webkit-background-size:21px 37px}.spinner{background-image:url(../images/spinner-2x.gif)}#bulk-titles div a,#bulk-titles div a:hover,#screen-meta-links a.show-settings,.curtime #timestamp,.meta-box-sortables .postbox:hover .handlediv,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.tagchecklist span a,.tagchecklist span a:hover,.widget-top a.widget-action,.widget-top a.widget-action:hover{background:none!important}}@-ms-viewport{width:device-width}@media screen and (max-width:782px){html.wp-toolbar{padding-top:46px}body{min-width:240px;overflow-x:hidden}body *{-webkit-tap-highlight-color:transparent!important}#wpcontent{position:relative;margin-left:0;padding-left:10px}#wpbody-content{padding-bottom:100px}.wrap{margin-right:12px;margin-left:0}.col-wrap{padding:0}#collapse-menu,#screen-meta,#screen-meta-links,.post-format-select{display:none!important}.wrap .add-new-h2,.wrap .add-new-h2:active{padding:10px 15px;font-size:14px}.wp-color-result{height:auto;padding-left:45px}.wp-color-result:after{font-size:14px;height:auto;padding:6px 14px}.media-upload-form div.error,.wrap div.error,.wrap div.updated{margin:20px 0 10px;padding:5px 10px;font-size:14px;line-height:175%}.wrap .icon32+h2{margin-top:-2px}.wp-responsive-open #wpbody{right:-190px}code{word-wrap:break-word}.postbox{font-size:14px}.metabox-holder h3{padding:12px}.postbox .handlediv{margin-top:3px}.subsubsub{font-size:16px;text-align:center;margin-bottom:15px}#templateside{float:none;width:auto}#templateside li{margin:0}#templateside li a{display:block;padding:5px}#templateside .highlight{padding:5px;margin-left:-5px;margin-top:-5px}#template div{float:none;margin:0;width:auto}#template textarea{width:100%}.fileedit-sub .alignright{margin-top:15px}#comments-form .checkforspam,#wpfooter{display:none}}@media screen and (max-width:600px){#wpwrap.wp-responsive-open{overflow-x:hidden}html.wp-toolbar{padding-top:0}#wpbody{padding-top:46px}div#post-body.metabox-holder.columns-1{overflow-x:hidden}}input,textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;outline:0;-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=email],input[type=url]{direction:ltr}input[type=checkbox],input[type=radio]{border:1px solid #bbb;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#888}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#2ea2cc}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{-webkit-border-radius:50%;border-radius:50%;margin-right:4px;line-height:10px}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;-webkit-border-radius:50px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;-webkit-border-radius:0;border-radius:0}textarea{overflow:auto;padding:2px 6px;line-height:1.4}.wp-admin input[type=file]{padding:3px 0}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;-webkit-box-shadow:none;box-shadow:none}input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;border:none}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}#adduser .form-field input,input.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}#upload-form label{color:#777}#your-profile label+a,fieldset label,label{vertical-align:middle}#misc-publishing-actions label,.options-media-php label[for*="_size_"]{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;left:-1px;padding:0 5px 0 0;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{background-color:#eee;border:1px solid #ddd;float:left;margin:13px 5px 5px 1px;padding:3px 5px;text-align:center;width:200px;display:none}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c}.indicator-hint{padding-top:8px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}input[type=text].ui-autocomplete-loading{background:url(../images/loading.gif) right center no-repeat;visibility:visible}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete-input.open{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #aaa;background-color:#efefef}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:left}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px;color:#444}.ui-autocomplete li a.ui-state-focus{background-color:#ddd;cursor:pointer}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#222;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-right:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.color-option{cursor:pointer}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.pressthis{margin:20px 0}.pressthis a,.pressthis a:active,.pressthis a:focus,.pressthis a:hover{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-ms-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis a span:before{color:#777;font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);-ms-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#local-time,#utc-time{padding-left:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}.widefat th input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}.widefat th input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#createuser .form-field input{width:100%}.form-table{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=email],.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-left:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#local-time,#utc-time{display:block;float:none;padding:0;line-height:2}.form-field #domain{max-width:none}}@media only screen and (max-width:768px){.form-field input[type=email],.form-field input[type=password],.form-field input[type=text],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media screen and (max-width:600px){.color-option{width:49%}}#adminmenu,#adminmenu .wp-submenu,#adminmenuback,#adminmenuwrap{width:160px;background-color:#222}#adminmenuback{position:absolute;top:0;bottom:0;z-index:-1}#adminmenu{clear:left;margin:12px 0;padding:0;list-style:none}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:36px}.icon16{height:18px;width:18px;padding:6px;margin:-6px 0 0 -8px;float:left}.icon16:before{color:#999;font:400 20px/1 dashicons;speak:none;padding:6px 0;height:34px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.icon16.icon-dashboard:before{content:'\f226'}.icon16.icon-post:before{content:'\f109'}.icon16.icon-media:before{content:'\f104'}.icon16.icon-links:before{content:'\f103'}.icon16.icon-page:before{content:'\f105'}.icon16.icon-comments:before{content:'\f101';margin-top:1px}.icon16.icon-appearance:before{content:'\f100'}.icon16.icon-plugins:before{content:'\f106'}.icon16.icon-users:before{content:'\f110'}.icon16.icon-tools:before{content:'\f107'}.icon16.icon-settings:before{content:'\f108'}.icon16.icon-site:before{content:'\f112'}.icon16.icon-generic:before{content:'\f111'}.icon16.icon-appearance,.icon16.icon-comments,.icon16.icon-dashboard,.icon16.icon-generic,.icon16.icon-links,.icon16.icon-media,.icon16.icon-page,.icon16.icon-plugins,.icon16.icon-post,.icon16.icon-settings,.icon16.icon-site,.icon16.icon-tools,.icon16.icon-users,.menu-icon-appearance div.wp-menu-image,.menu-icon-comments div.wp-menu-image,.menu-icon-dashboard div.wp-menu-image,.menu-icon-generic div.wp-menu-image,.menu-icon-links div.wp-menu-image,.menu-icon-media div.wp-menu-image,.menu-icon-page div.wp-menu-image,.menu-icon-plugins div.wp-menu-image,.menu-icon-post div.wp-menu-image,.menu-icon-settings div.wp-menu-image,.menu-icon-site div.wp-menu-image,.menu-icon-tools div.wp-menu-image,.menu-icon-users div.wp-menu-image{background-image:none!important}#adminmenuwrap{position:relative;float:left;z-index:9990}#adminmenu *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#adminmenu li{margin:0;padding:0;cursor:pointer}#adminmenu a{display:block;line-height:18px;padding:2px 5px;color:#eee}#adminmenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover{background:0 0}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a:hover,#adminmenu li.menu-top>a:focus{color:#45bbe6}#adminmenu li.menu-top{border:none;min-height:34px;position:relative}#adminmenu .wp-submenu{list-style:none;position:absolute;top:-1000em;left:160px;overflow:visible;word-wrap:break-word}#adminmenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{padding:7px 0 8px;z-index:9999;background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu a.menu-top:focus+.wp-submenu,.js #adminmenu .opensub .wp-submenu,.js #adminmenu .sub-open,.no-js li.wp-has-submenu:hover .wp-submenu{top:-1px}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu{position:relative;z-index:3;top:auto;left:auto;right:auto;bottom:auto;border:0;margin-top:0;-webkit-box-shadow:none;box-shadow:none;background-color:#333}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{position:relative;background-color:#111}.folded #adminmenu li.menu-top:hover,.folded #adminmenu li.opensub>a.menu-top,.folded #adminmenu li>a.menu-top:focus{z-index:10000}#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow,#adminmenu .wp-menu-arrow div,#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,.folded #adminmenu li.wp-has-current-submenu{background:#0074a2;color:#fff}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.folded #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open,.folded #adminmenu a.menu-top:focus+.wp-submenu,.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu{top:0;left:36px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{position:absolute;top:-1000em}#adminmenu .wp-not-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{min-width:160px;width:auto}#adminmenu .wp-submenu a{font-size:13px;line-height:1.2;margin:0;padding:6px 0}#adminmenu .opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-not-current-submenu li>a,.folded #adminmenu .wp-has-current-submenu li>a{padding-right:16px;padding-left:14px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:6px 12px}#adminmenu .wp-submenu-head,#adminmenu a.menu-top{font-size:14px;font-weight:400;line-height:18px;padding:0}#adminmenu .wp-submenu-head,.folded #adminmenu .wp-menu-name{display:none}.folded #adminmenu .wp-submenu-head{display:block}#adminmenu .wp-submenu li{padding:0;margin:0;overflow:hidden}#adminmenu .wp-menu-image img{padding:9px 0 0;opacity:.6;filter:alpha(opacity=60)}#adminmenu div.wp-menu-name{padding:8px 0}#adminmenu div.wp-menu-image{float:left;width:36px;height:34px;margin:0;text-align:center}#adminmenu div.wp-menu-image.svg{background-repeat:no-repeat;background-position:center;-webkit-background-size:20px auto;background-size:20px auto}div.wp-menu-image:before{color:#999;padding:7px 0;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu .current div.wp-menu-image:before,#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#45bbe6}.folded #adminmenu div.wp-menu-image{width:35px;height:30px;position:absolute;z-index:25}.folded #adminmenu a.menu-top{height:34px}.no-font-face #adminmenu .wp-menu-image{display:none}.no-font-face #adminmenu div.wp-menu-name{padding:8px 12px}.no-font-face.auto-fold #adminmenu .wp-menu-name{margin-left:0}.sticky-menu #adminmenuwrap{position:fixed}.wp-menu-arrow{display:none!important}ul#adminmenu a.wp-has-current-submenu{position:relative}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{right:0;border:8px solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#f1f1f1;top:50%;margin-top:-8px}.folded ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.folded ul#adminmenu a.wp-has-current-submenu:after,.folded ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{right:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:10px;z-index:10000}.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:18px}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#adminmenu li.menu-top:hover .wp-menu-image img,#adminmenu li.wp-has-current-submenu .wp-menu-image img{opacity:1;filter:alpha(opacity=100)}#adminmenu li.wp-menu-separator{height:5px;padding:0;margin:0 0 6px;cursor:inherit}#adminmenu div.separator{height:2px;padding:0}#adminmenu .wp-submenu .wp-submenu-head{color:#fff;font-weight:400;font-size:14px;padding:8px 4px 8px 11px;margin:-7px 0 4px}#adminmenu li.current,.folded #adminmenu li.wp-menu-open{border:0}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu li a span.update-plugins{display:inline-block;background-color:#d54e21;color:#fff;font-size:9px;line-height:17px;font-weight:600;margin:1px 0 0 2px;vertical-align:top;-webkit-border-radius:10px;border-radius:10px;z-index:26}#adminmenu li .awaiting-mod span,#adminmenu li span.update-plugins span,#sidemenu li a span.update-plugins span{display:block;padding:0 6px}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod{background-color:#45bbe6;color:#fff}#adminmenu li span.count-0,#sidemenu li a .count-0{display:none}#collapse-menu{font-size:13px;line-height:34px;margin-top:10px;color:#aaa;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover,#collapse-menu:hover #collapse-button div:after{color:#45bbe6}.folded #collapse-menu span{display:none}#collapse-button,#collapse-button div{width:15px;height:15px}#collapse-button{float:left;height:15px;margin:10px 8px 10px 11px;width:15px;-webkit-border-radius:10px;border-radius:10px}#wpwrap #collapse-button div{padding:0}#collapse-button div:after{content:'\f148';display:block;line-height:15px;left:-3px;top:-3px;color:#aaa;font:400 20px/1 dashicons!important;speak:none;margin:0 auto;padding:0!important;position:relative;text-align:center;width:20px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.folded #collapse-button div:after,.rtl #collapse-button div:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl.folded #collapse-button div:after{-webkit-transform:none;-ms-transform:none;transform:none}.customize-support #menu-appearance a[href="themes.php?page=custom-header"],.customize-support #menu-appearance a[href="themes.php?page=custom-background"],li#wp-admin-bar-menu-toggle{display:none}@media only screen and (max-width:960px){.auto-fold #wpcontent,.auto-fold #wpfooter{margin-left:36px}.auto-fold #adminmenu,.auto-fold #adminmenu li.menu-top,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{width:36px}.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.auto-fold #adminmenu .wp-submenu.sub-open,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu{top:0;left:36px}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu,.auto-fold #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{position:absolute;top:-1000em;margin-right:-1px;padding:7px 0 8px;z-index:9999}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu{min-width:150px;width:auto}.auto-fold #adminmenu .wp-has-current-submenu li>a{padding-right:16px;padding-left:14px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding-left:12px}.auto-fold #adminmenu .wp-menu-name{display:none}.auto-fold #adminmenu .wp-submenu-head{display:block}.auto-fold #adminmenu div.wp-menu-image{height:30px;width:34px;position:absolute;z-index:25}.auto-fold #adminmenu a.menu-top{height:34px}.auto-fold #adminmenu li.wp-menu-open{border:0}.auto-fold #adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0}.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:16px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}.auto-fold #adminmenu li.menu-top:hover,.auto-fold #adminmenu li.opensub>a.menu-top,.auto-fold #adminmenu li>a.menu-top:focus{z-index:10000}.auto-fold #collapse-menu span{display:none}.auto-fold #collapse-button div{background:0 0}.auto-fold #collapse-button div:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl.auto-fold #collapse-button div:after{-webkit-transform:none;-ms-transform:none;transform:none}}@media screen and (max-width:782px){.auto-fold #wpcontent{position:relative;margin-left:0;padding-left:10px}.sticky-menu #adminmenuwrap{position:relative;z-index:auto;top:0}.auto-fold #adminmenu,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{position:absolute;width:190px;z-index:100}.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{display:none}.auto-fold .wp-responsive-open #adminmenuback,.auto-fold .wp-responsive-open #adminmenuwrap{display:block}.auto-fold #adminmenu li.menu-top{width:100%}.auto-fold #adminmenu li a{font-size:16px;padding:5px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding:10px 10px 10px 20px}.auto-fold #adminmenu .wp-menu-name{display:block;margin-left:35px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li.current>a.current:after{border-width:8px;margin-top:-8px}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{display:none}#adminmenu .wp-submenu{position:relative;display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold #adminmenu .wp-menu-open .wp-submenu{position:relative;display:block;top:0;left:-1px;-webkit-box-shadow:none;box-shadow:none}.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .selected .wp-submenu:after,.auto-fold #adminmenu .wp-menu-open .wp-submenu:after{display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:block}.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu{position:relative;left:-1px;right:0;top:0}#adminmenu .wp-submenu .wp-submenu-head{display:none}#wp-responsive-toggle{position:fixed;top:5px;left:4px;padding-right:10px;z-index:99999;border:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpadminbar #wp-admin-bar-menu-toggle a{display:block;padding:0;overflow:hidden;outline:0;text-decoration:none;border:1px solid transparent;background:0 0;height:44px;margin-left:-1px}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#333}li#wp-admin-bar-menu-toggle{display:block}#wpadminbar #wp-admin-bar-menu-toggle a:hover{border:1px solid transparent}#wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{content:'\f228';display:inline-block;float:left;font:400 40px/45px Dashicons;vertical-align:middle;outline:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:44px;width:50px;padding:0;border:none;text-align:center;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}}@media screen and (max-width:600px){#adminmenuback,#adminmenuwrap{display:none}.wp-responsive-open #adminmenuback,.wp-responsive-open #adminmenuwrap{display:block}.auto-fold #adminmenu{top:46px}}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:right;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:right}#dashboard-widgets .postbox-container,#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:none!important}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets-wrap{overflow:hidden;margin:0 -8px}#dashboard-widgets .postbox .inside{margin-bottom:0}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-left:0}#the-comment-list p.comment-author img{float:left;margin-right:8px}#the-comment-list p.comment-author strong a{border:none}#the-comment-list td{vertical-align:top}#the-comment-list td.comment{word-wrap:break-word}#the-comment-list td.comment img{max-width:100%}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}.welcome-panel h3{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h4{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:5px;right:10px;padding:20px 15px 0 3px;font-size:13px;text-decoration:none;line-height:1}#welcome-panel.welcome-panel .welcome-panel-close:before{position:absolute;left:-18px;margin-top:-2px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 13px 3px 0;padding:12px 36px;height:auto;line-height:1.4285714;white-space:normal}.welcome-panel-content{margin-left:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;overflow:hidden;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:left}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.welcome-panel-column p{margin-top:7px;color:#464646}.welcome-panel .welcome-icon{display:block;padding:0 0 8px;background:0 0!important}.welcome-panel .welcome-icon:before{color:#888;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 10px 0 0;top:-1px;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-edit-page:before,.welcome-panel .welcome-write-blog:before{content:'\f119';top:-3px}.welcome-panel .welcome-add-page:before{content:'\f132'}.welcome-panel .welcome-view-site:before{content:'\f115';top:-2px}.welcome-panel .welcome-widgets-menus:before{content:'\f116';top:-2px}.welcome-panel .welcome-comments:before{content:'\f117';top:-1px}.welcome-panel .welcome-learn-more:before{content:'\f118';top:-1px}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 1em 1em 0}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .dashboard-widget-control-form,#dashboard_primary .widget-loading{padding:12px 12px 0}body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form{overflow:hidden}.dashboard-widget-control-form p{margin-top:0}.rssSummary{color:#777;margin-top:4px}#dashboard_primary .rss-widget{border-bottom:1px solid #eee;font-size:13px;padding:8px 12px 10px}#dashboard_primary .rss-widget:last-child{border-bottom:none;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date{color:#777}#dashboard_primary .rss-widget span.rss-date{margin-left:12px}#dashboard_primary .rss-widget ul li{margin-bottom:8px}#dashboard_right_now ul{margin:0;overflow:hidden}#dashboard_right_now li{width:50%;float:left;margin-bottom:10px}#dashboard_right_now .inside{overflow:hidden;padding:0}#dashboard_right_now .main{overflow:hidden;padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{clear:right;float:right;position:relative;top:-5px}.mu-storage{overflow:hidden}#dashboard-widgets h4.mu-storage{margin-bottom:10px}#dashboard_right_now li a:before,#dashboard_right_now li span:before{color:#888}#dashboard_right_now .sub{color:#777;background:#f5f5f5;border-top:1px solid #eee;padding:10px 12px 6px}#dashboard_right_now .sub h4{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_right_now li a:before,#dashboard_right_now li span:before{content:'\f159';font:400 20px/1 dashicons;speak:none;display:block;float:left;margin:0 5px 0 0;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:'\f105'}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:'\f109'}#dashboard_right_now .comment-count a:before{content:'\f101'}#dashboard_right_now .comment-mod-count a:before{content:'\f125'}#dashboard_right_now .storage-count a:before{content:'\f104'}#dashboard_right_now .storage-count.warning a:before{content:'\f153'}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 1px 1px 0}#dashboard_quick_press form{overflow:hidden;margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:left}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#777}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:none}#dashboard_quick_press .drafts h4{margin:0 12px 8px;font-weight:400}#dashboard_quick_press .drafts .view-all{float:right;margin:0 12px 0 0}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts li time{color:#777}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title{overflow:hidden}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{float:left;margin:0 5px 0 0}#dashboard-widgets #dashboard_activity h4{margin:0 0 8px 12px;font-weight:400}#dashboard-widgets #dashboard_activity h4.comment-meta{margin:0}#dashboard_activity h4.comment-meta{margin-bottom:4px}#dashboard_activity ul{padding:0 12px}#dashboard_activity .comment-meta span.approve:before{content:'\f227';font:20px/.5 dashicons;margin-left:12px;vertical-align:middle;position:relative;top:-1px;margin-right:2px}#dashboard_activity .inside{padding:0;margin:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 12px 12px;text-align:center}#dashboard_activity .no-activity p{color:#999;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:'\f328';font:400 120px/1 dashicons;speak:none;display:block;margin:0 5px 0 0;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin-top:0;padding:8px 12px 4px}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{overflow:hidden;margin-bottom:8px}#future-posts ul span,#published-posts ul span{color:#777;float:left;margin-right:8px;min-width:150px}.activity-block{border-bottom:1px solid #eee;overflow:hidden;padding:8px 0 4px}.activity-block:last-child{border-bottom:none}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list div.undo,#activity-widget #the-comment-list tr.undo{background:0 0;padding:6px 0;margin-left:12px}#activity-widget #the-comment-list .alt,#activity-widget #the-comment-list .alternate{background:0 0}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list img{position:absolute;top:13px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-left:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item h4{font-size:13px;color:#999}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved{background-color:#fef7f1}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;left:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.edit-box{display:none}h3:hover .edit-box{display:inline}#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:none}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets a{text-decoration:none}#dashboard-widgets h3 a{text-decoration:underline}#dashboard-widgets h3 .postbox-title-action{position:absolute;right:10px;padding:0;top:5px}.js #dashboard-widgets h3 .postbox-title-action{right:33px}#dashboard-widgets h4{color:#222;font-weight:400;font-size:14px;margin:0 0 .2em;padding:0}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative}#activity-widget #the-comment-list .comment,#activity-widget #the-comment-list .pingback{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}#activity-widget #latest-comments #the-comment-list .comment-item{padding:1em 12px}#latest-comments #the-comment-list .pingback{padding-left:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:none}#latest-comments #the-comment-list .comment-item h4{line-height:1.5em;margin-top:0;color:#666}#latest-comments #the-comment-list .comment-item h4 cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#description-wrap label,#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:14px;font-weight:600;line-height:1.7em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#999;font-size:13px;margin-left:3px}.rss-widget cite{display:block;text-align:right;margin:0 0 1em;padding:0}.rss-widget cite:before{content:'\2014'}.dashboard-comment-wrap{overflow:hidden;word-wrap:break-word}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{text-decoration:underline}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-right:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h3{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h3{border-bottom-color:#f6e2ac;background:0 0;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag h3.hndle{border:none;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}.index-php .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right}#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-right:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}@media screen and (max-width:782px){#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 10px 5px 0}}@media screen and (max-width:600px){.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:100%;white-space:nowrap;width:20px;height:20px;right:0;padding:5px}#welcome-panel.welcome-panel .welcome-panel-close:before{font-size:20px;margin:0}}.post-com-count-wrapper{min-width:22px}.post-com-count{background:center -80px no-repeat;height:1.3em;line-height:1.1em;display:block;text-decoration:none;padding:0 0 6px;cursor:pointer;color:#fff}.post-com-count:after{content:"";display:block;width:0;height:0;margin-left:8px;border-top:5px solid #bbb;border-right:5px solid transparent}.post-com-count span{font-size:11px;font-weight:600;height:1.4em;line-height:1.4em;min-width:.7em;padding:0 6px;display:inline-block;-webkit-border-radius:5px;border-radius:5px;background-color:#bbb;color:#fff}.post-com-count:hover{background-position:center -3px}.post-com-count:hover span{background-color:#2ea2cc}.post-com-count:hover:after{border-top:5px solid #2ea2cc}strong .post-com-count{background-position:center -55px}strong .post-com-count span{background-color:#0074a2}strong .post-com-count:after{border-top:5px solid #0074a2}.column-response .post-com-count{float:left;margin-right:5px;text-align:center}.response-links{float:left}.commentlist li{padding:1em 1em .2em;margin:0;border-bottom:1px solid #ccc}.commentlist li li{border-bottom:0;padding:0}.commentlist p{padding:0;margin:0 0 .8em}#submitted-on,.submitted-on{color:#777}#replyrow td{padding:2px}#replysubmit{margin:0;padding:0 5px 3px;text-align:center}#replysubmit .spinner{padding:2px 0 0;vertical-align:top;float:right}#replysubmit .button{margin-right:5px}#replysubmit .error{color:red;line-height:21px;text-align:center}#replyrow h5{margin:.2em 0 0;padding:0 5px;line-height:1.4em;font-size:1em}#edithead .inside{float:left;padding:3px 0 2px 5px;margin:0;text-align:center}#edithead .inside input{width:180px}#edithead label{padding:2px 0}#replycontainer{padding:5px}#replycontent{height:120px;-webkit-box-shadow:none;box-shadow:none}#replyerror{border-color:#ddd;background-color:#f9f9f9}.commentlist .avatar{vertical-align:text-top}#the-comment-list .attachment-80x60{padding:4px 8px}#the-comment-list div.undo,#the-comment-list tr.undo{background-color:#f4f4f4}#the-comment-list .unapproved td,#the-comment-list .unapproved th{background-color:#fef7f1}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .unapproved th.check-column input{margin-left:4px}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list td,#the-comment-list th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#the-comment-list tr:last-child td,#the-comment-list tr:last-child th{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved td,#the-comment-list tr.unapproved+tr.approved th{border-top:1px solid rgba(0,0,0,.03)}.vim-current,.vim-current td,.vim-current th{background-color:#e4f2fd!important}th .comment-grey-bubble{height:16px;width:16px}th .comment-grey-bubble:before{content:'\f101';font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;left:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}table.fixed{table-layout:fixed}.fixed .column-rating,.fixed .column-visible{width:8%}.fixed .column-author,.fixed .column-date,.fixed .column-format,.fixed .column-links,.fixed .column-parent,.fixed .column-posts{width:10%}.fixed .column-posts{width:74px}.fixed .column-comment .comment-author{display:none}.fixed .column-categories,.fixed .column-rel,.fixed .column-response,.fixed .column-role,.fixed .column-tags{width:15%}.fixed .column-slug{width:25%}.fixed .column-locations{width:35%}.fixed .column-comments{width:4em;padding:8px 0;text-align:left}.fixed .column-comments .vers{padding-left:3px}.fixed .column-comments a{float:left}.fixed .column-icon{width:80px}.wp-list-table a{-webkit-transition:none;transition:none}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:none!important;-webkit-box-shadow:none;box-shadow:none}#comments-form .fixed .column-author{width:20%}#commentsdiv.postbox .inside{margin:0;padding:0}#commentsdiv .inside .row-actions{line-height:18px}#commentsdiv .inside .column-author{width:25%}#commentsdiv .column-comment p{margin:.6em 0;padding:0}#commentsdiv #replyrow td{padding:0}#commentsdiv p{padding:8px 10px;margin:0}#commentsdiv .comments-box{border:0}#commentsdiv .comments-box thead th{background:0 0;padding:0 7px 4px;font-style:italic}#commentsdiv .comments-box tr:last-child td{border-bottom:0 none}#commentsdiv .spinner{padding-left:5px}.sorting-indicator{display:none;width:10px;height:4px;margin-top:8px;margin-left:7px}.sorting-indicator:before{background:0 0;content:'\f142';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0;top:-4px;left:-8px;line-height:10px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}.column-comments .sorting-indicator:before{top:0;left:-10px}th.desc:hover span.sorting-indicator:before,th.sorted.asc .sorting-indicator:before{content:'\f142'}th.asc:hover span.sorting-indicator:before,th.sorted.desc .sorting-indicator:before{content:'\f140'}tr.wp-locked .locked-indicator{margin-left:6px;height:20px;width:16px}tr.wp-locked .locked-indicator:before{color:#888;content:'\f160';display:inline-block;float:left;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}tr.wp-locked .check-column input[type=checkbox],tr.wp-locked .check-column label,tr.wp-locked .row-actions .inline,tr.wp-locked .row-actions .trash{display:none}tr .locked-info{height:0;opacity:0}tr.wp-locked .locked-info{margin-top:8px;height:auto;opacity:1}.locked-text{vertical-align:top}tr.locked-info,tr.wp-locked .locked-info{-webkit-transition:height 1s,opacity .5s;transition:height 1s,opacity .5s}.fixed .column-comments .sorting-indicator{margin-top:3px}#menu-locations-wrap .widefat{width:60%}.widefat th.sortable,.widefat th.sorted{padding:0}th.sortable a,th.sorted a{display:block;overflow:hidden;padding:7px 7px 8px 10px}th.manage-column a,th.sortable a:active,th.sortable a:focus,th.sortable a:hover{color:#333}th.sortable a:focus{background:#e1e1e1}.fixed .column-comments.sortable a,.fixed .column-comments.sorted a{padding:8px 0}th.sortable a span,th.sorted a span{float:left;cursor:pointer}th.desc:hover span.sorting-indicator,th.sorted.asc .sorting-indicator{display:block;background-position:0 0}th.asc:hover span.sorting-indicator,th.sorted.desc .sorting-indicator{display:block;background-position:-7px 0}.tablenav-pages a{font-weight:600;margin-right:1px;padding:0 2px}.tablenav-pages .current-page{padding-top:0;text-align:center}.tablenav-pages .next-page{margin-left:2px}.tablenav a.button-secondary{display:block;margin:3px 8px 0 0}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle}.tablenav.themes{max-width:98%}.tablenav .tablenav-pages{float:right;display:block;cursor:default;height:30px;color:#555;line-height:30px;font-size:12px}.tablenav .no-pages,.tablenav .one-page .pagination-links{display:none}.tablenav .tablenav-pages a,.tablenav-pages span.current{text-decoration:none;padding:3px 6px}.tablenav .tablenav-pages a{padding:0 10px 3px;background:#eee;background:rgba(0,0,0,.05);font-size:16px;font-weight:400}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:active,.tablenav .tablenav-pages a.disabled:focus,.tablenav .tablenav-pages a.disabled:hover{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .displaying-num{margin-right:2px;color:#777;font-size:12px;font-style:italic}.tablenav .actions{overflow:hidden;padding:2px 8px 0 0}.wp-filter .actions{display:inline-block;vertical-align:middle}.tablenav .delete{margin-right:20px}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}.tablenav .view-switch{float:right;margin:5px 16px 0 8px}.wp-filter .view-switch{display:inline-block;vertical-align:middle;padding:15px 0;margin:0 20px 0 0}.view-switch a{text-decoration:none}.view-switch>a{display:inline-block;width:18px;height:18px}.view-switch>a:before{color:#bbb;display:inline-block;float:left;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.view-switch>.view-list:before{content:'\f163'}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}.view-switch>a+a{margin-left:5px}.view-switch>.view-excerpt:before{content:'\f164'}.view-switch>.view-grid:before{content:'\f509'}.filter{float:left;margin:-5px 0 0 10px}.filter .subsubsub{margin-left:-10px;margin-top:13px}.screen-per-page{width:4em}#posts-filter .wp-filter{margin-bottom:0}#posts-filter fieldset{float:left;margin:0 1.5ex 1em 0;padding:0}#posts-filter fieldset legend{padding:0 0 .2em 1px}p.pagenav{margin:0;display:inline}.pagenav span{font-weight:600;margin:0 6px}.row-title{font-size:14px!important;font-weight:600}.column-comment .comment-author{margin-bottom:.6em}.column-author img,.column-comment .comment-author img,.column-username img{float:left;margin-right:10px;margin-top:1px}.row-actions{color:#ddd;font-size:13px;visibility:hidden;padding:2px 0 0}.mobile .row-actions,.row-actions.visible,div.comment-item:hover .row-actions,tr:hover .row-actions{visibility:visible}.row-actions-visible{padding:2px 0 0}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:left;margin:0;padding:0;width:100%}#wpbody-content .inline-edit-row fieldset .inline-edit-col,tr.inline-edit-row td{padding:0 .5em}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 0 0 1px;border-style:none none none solid}#wpbody-content .quick-edit-row-post .inline-edit-col-left{width:40%}#wpbody-content .quick-edit-row-post .inline-edit-col-right{width:39%}#wpbody-content .inline-edit-row-post .inline-edit-col-center{width:20%}#wpbody-content .quick-edit-row-page .inline-edit-col-left{width:50%}#wpbody-content .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .quick-edit-row-page .inline-edit-col-right{width:49%}#wpbody-content .bulk-edit-row .inline-edit-col-left{width:30%}#wpbody-content .bulk-edit-row-page .inline-edit-col-right{width:69%}#wpbody-content .bulk-edit-row .inline-edit-col-bottom{float:right;width:69%}#wpbody-content .inline-edit-row-page .inline-edit-col-right{margin-top:27px}.inline-edit-row fieldset .inline-edit-group{clear:both}.inline-edit-row fieldset .inline-edit-group:after{content:".";display:block;height:0;clear:both;visibility:hidden}.inline-edit-row p.submit{clear:both;padding:.5em;margin:.5em 0 0}.inline-edit-row span.error{line-height:22px;margin:0 15px;padding:3px 5px}.inline-edit-row h4{margin:.2em 0;padding:0;line-height:23px}.inline-edit-row fieldset span.checkbox-title,.inline-edit-row fieldset span.title{margin:0;padding:0}.inline-edit-row fieldset label,.inline-edit-row fieldset span.inline-edit-categories-label{display:block;margin:.2em 0}.inline-edit-row fieldset label.inline-edit-tags{margin-top:0}.inline-edit-row fieldset label.inline-edit-tags span.title{margin:.2em 0;width:auto}.inline-edit-row fieldset label span.title{display:block;float:left;width:5em}.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-left:5em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-right:.5em}.inline-edit-row .input-text-wrap input[type=text]{width:100%}.inline-edit-row fieldset label input[type=checkbox]{vertical-align:text-bottom}.inline-edit-row fieldset label textarea{width:100%;height:4em}#wpbody-content .bulk-edit-row fieldset .inline-edit-group label{max-width:50%}#wpbody-content .quick-edit-row fieldset .inline-edit-group label.alignleft:first-child{margin-right:.5em}.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input{width:6em}.inline-edit-save .spinner{padding:4px 10px 0;vertical-align:top;float:right}.inline-edit-row h4{text-transform:uppercase}.inline-edit-row fieldset span.checkbox-title,.inline-edit-row fieldset span.title{font-style:italic;line-height:1.8em}.inline-edit-row fieldset .inline-edit-date{float:left}.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=mn]{font-size:12px;width:2.1em}.inline-edit-row fieldset input[name=aa]{font-size:12px;width:3.5em}.inline-edit-row fieldset label input.inline-edit-password-input{width:8em}ul.cat-checklist{height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px;margin:0;background-color:#fff}#bulk-titles{display:block;height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist input,.inline-edit-row fieldset ul.cat-checklist li{margin:0;position:relative}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-style:normal;font-size:11px}.inline-edit-row fieldset label input.inline-edit-menu-order-input{width:3em}.inline-edit-row fieldset label input.inline-edit-slug-input{width:75%}.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{max-width:80%}.ie8 .inline-edit-row #post_parent,.ie8 .inline-edit-row select[name=page_template]{width:250px}.quick-edit-row-post fieldset label.inline-edit-status{float:left}#bulk-titles{line-height:140%}#bulk-titles div{margin:.2em .3em}#bulk-titles div a{cursor:pointer;display:block;float:left;height:18px;margin:0 3px 0 -2px;overflow:hidden;position:relative;width:20px}#bulk-titles div a:before{position:relative;top:-3px}.plugins tbody,.plugins tbody th.check-column{padding:8px 0 0 2px}.plugins tbody th.check-column input[type=checkbox]{margin-top:4px}#update-plugins-table tbody td p{margin-top:0}#update-plugins-table tbody td p strong{font-size:14px}.plugins .inactive th.check-column,.plugins tfoot th.check-column,.plugins thead th.check-column{padding-left:6px}#update-plugins-table tfoot th.check-column,#update-plugins-table thead th.check-column{padding-top:11px}.plugins,.plugins td,.plugins th{color:#000}.plugins tr{background:#fff}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ol,.plugins .desc ul{margin:0 0 0 2em}.plugins .desc ul{list-style-type:disc}.plugins .row-actions{font-size:13px}.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th{padding:10px 9px}.plugins .active td,.plugins .active th{background-color:#f7fcfe}.plugins .update td,.plugins .update th{border-bottom:0}.plugin-update-tr td{border-top:0}.plugin-install #the-list td,.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th,.upgrade .plugins td,.upgrade .plugins th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active.plugin-update-tr+tr.inactive th{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins .update td,.plugins .update th,.plugins tr.active+tr.inactive.update td,.plugins tr.active+tr.inactive.update th,.upgrade .plugins tr:last-of-type td,.upgrade .plugins tr:last-of-type th{-webkit-box-shadow:none;box-shadow:none}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update{background-color:#fef7f1}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-right:12px;white-space:nowrap}.plugins .inactive .plugin-title strong{font-weight:400}.plugins .row-actions,.plugins .second{padding:0 0 5px}.plugins .update .row-actions,.plugins .update .second{padding-bottom:0}.plugins-php .widefat tfoot td,.plugins-php .widefat tfoot th{border-top-style:solid;border-top-width:1px}.plugin-update-tr .update-message{font-size:13px;font-weight:400;padding:6px 12px;margin:0 10px 8px 31px;background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}.plugin-update-tr .update-message:before{color:#d54e21;content:'\f463';display:inline-block;font:400 20px/1 dashicons;speak:none;margin:0 8px 0 -2px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.plugins .plugin-update{padding:0;border:none;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}tr.active+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-install-php h3{clear:both}.plugin-install-php h4{margin:2.5em 0 8px}.plugin-install-php .wp-filter{margin-bottom:0}.plugin-group{overflow:hidden;margin-top:1.5em}.plugin-group h3{margin-top:0}.plugin-card{float:left;margin:0 8px 16px;width:48.5%;width:-webkit-calc(50% - 8px);width:calc(50% - 8px);background-color:#fff;border:1px solid #dedede;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.plugin-card:nth-child(odd){clear:both;margin-left:0}.plugin-card:nth-child(even){margin-right:0}@media screen and (min-width:1600px){.plugin-card{width:30%;width:-webkit-calc(33.1% - 8px);width:calc(33.1% - 8px)}.plugin-card:nth-child(odd){clear:none;margin-left:8px}.plugin-card:nth-child(even){margin-right:8px}.plugin-card:nth-child(3n+1){clear:both;margin-left:0}.plugin-card:nth-child(3n){margin-right:0}}@media screen and (max-width:782px){.plugin-card{margin-left:0;margin-right:0;width:100%}}.plugin-card-top{position:relative;padding:20px 20px 10px;min-height:135px}.plugin-action-buttons,div.action-links{margin:0}.plugin-card h4{margin:0 0 12px;font-size:18px;line-height:1.3}.plugin-card .desc,.plugin-card .name{margin-left:148px;margin-right:120px}.plugin-card .action-links{position:absolute;top:20px;right:20px;width:120px}.plugin-action-buttons{clear:right;float:right;margin-left:2em;margin-bottom:1em;text-align:right}.plugin-action-buttons li{margin-bottom:10px}.plugin-card-bottom{clear:both;padding:12px 20px;background-color:#fafafa;border-top:1px solid #dedede;overflow:hidden}.plugin-card-bottom .star-rating{display:inline}.plugin-card .column-rating{line-height:23px}.plugin-card .column-rating,.plugin-card .column-updated{margin-bottom:4px}.plugin-card .column-downloaded,.plugin-card .column-rating{float:left;clear:left;max-width:180px}.plugin-card .column-compatibility,.plugin-card .column-updated{text-align:right;float:right;clear:right;width:65%;width:-webkit-calc(100% - 180px);width:calc(100% - 180px)}.plugin-card .column-compatibility span:before{font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;left:-2px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}.plugin-card .compatibility-incompatible:before{content:'\f158'}.plugin-card .compatibility-compatible:before{content:'\f147'}.plugin-icon{position:absolute;top:20px;left:20px;width:128px;height:128px;margin:0 20px 20px 0}.plugin-icon img{width:128px;height:128px}.no-plugin-results{color:#999;font-size:18px;font-style:normal;margin:0;padding:100px 0 0;text-align:center}.wp-list-table .site-deleted{background:#ff8573}.wp-list-table .site-spammed{background:#faafaa}.wp-list-table .site-archived{background:#ffebe8}.wp-list-table .site-mature{background:#fecac2}@media screen and (max-width:1100px) and (min-width:782px),(max-width:480px){.plugin-card .action-links{position:static;margin-left:148px;width:auto}.plugin-action-buttons{float:none;margin:1em 0 0;text-align:left}.plugin-action-buttons li{display:inline-block;vertical-align:middle}.plugin-action-buttons li .button{margin-right:20px}.plugin-card .desc,.plugin-card .name{margin-right:0}.plugin-card .desc p:first-of-type{margin-top:0}}@media screen and (max-width:782px){.tablenav{height:auto}.tablenav.top{margin:20px 0 5px}.tablenav.bottom{position:relative;margin-top:15px}.tablenav br{display:none}.tablenav br.clear{display:block}.tablenav .view-switch,.tablenav.top .actions,.tablenav.top .displaying-num{display:none}.tablenav.bottom .displaying-num{position:absolute;right:0;top:10px;font-size:14px}.tablenav-pages{width:100%;text-align:center;margin:0 0 25px}.tablenav.bottom .tablenav-pages{margin-top:25px}.tablenav.top .tablenav-pages.one-page{display:none}.tablenav.bottom .tablenav-pages.one-page{margin:15px 0 0;height:0}.tablenav-pages .pagination-links .paging-input{font-size:18px}.tablenav-pages .pagination-links a{padding:8px 20px 11px;font-size:18px;background:rgba(0,0,0,.05)}.tablenav-pages .pagination-links .current-page{padding:10px;font-size:14px}.form-wrap>p{display:none}.comment-count{font-size:14px}.column-categories,.column-tags,.fixed .column-author,.fixed .column-date,.media .column-parent,.sites .column-registered,.sites .column-users,.tags .column-description,.users .column-email,.users .column-name{display:none}.fixed .column-comment .comment-author{display:block}.column-title{width:85%}.fixed .column-comments,.widefat .check-column{width:35px}.widefat tfoot .check-column,.widefat thead .check-column{padding:10px 0}.widefat *{word-wrap:normal}#wpbody-content .bulk-edit-row .inline-edit-col-bottom,#wpbody-content .bulk-edit-row .inline-edit-col-left,#wpbody-content .bulk-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .inline-edit-row-post .inline-edit-col-center,#wpbody-content .quick-edit-row-page .inline-edit-col-left,#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .quick-edit-row-post .inline-edit-col-left,#wpbody-content .quick-edit-row-post .inline-edit-col-right{float:none;width:100%}#wpbody-content .bulk-edit-row fieldset .inline-edit-col label,#wpbody-content .bulk-edit-row fieldset .inline-edit-group label,#wpbody-content .quick-edit-row fieldset .inline-edit-col label,#wpbody-content .quick-edit-row fieldset .inline-edit-group label{max-width:none;float:none;margin-bottom:5px}#wpbody .bulk-edit-row fieldset select{display:block;width:100%;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-size:16px}.inline-edit-row fieldset label span.title{float:none}.inline-edit-row fieldset label.inline-edit-tags{padding:0 .5em}.inline-edit-row fieldset .inline-edit-col label.inline-edit-tags{padding:0}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0}.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=mn]{width:3em}.inline-edit-row fieldset input[name=aa]{width:4.5em}#bulk-titles div{margin:.8em .3em}#bulk-titles div a{height:22px}.tags .column-posts{width:74px}.tags .column-slug{width:30%}.comments .column-response,.users .column-role{width:35%}.sites .column-blogname{width:55%}#wpbody-content #update-themes-table .plugin-title{width:auto}.link-manager-php #posts-filter{margin-top:25px}.link-manager-php .tablenav.bottom{overflow:hidden}.wp-list-table.plugins{position:relative;margin-top:35px;margin-bottom:50px}#wpbody-content .wp-list-table.plugins tfoot .column-description,.wp-list-table.plugins th#description,.wp-list-table.plugins thead .column-description{display:none}#wpbody-content .wp-list-table.plugins,#wpbody-content .wp-list-table.plugins .column-description,#wpbody-content .wp-list-table.plugins .manage-column.column-name,#wpbody-content .wp-list-table.plugins .plugin-title,#wpbody-content .wp-list-table.plugins .plugin-update,#wpbody-content .wp-list-table.plugins .theme-title,#wpbody-content .wp-list-table.plugins tbody,#wpbody-content .wp-list-table.plugins thead,#wpbody-content .wp-list-table.plugins tr{display:block;width:auto}.wp-list-table.plugins tfoot,.wp-list-table.plugins thead{position:absolute;top:-35px;left:0;right:0;width:auto;height:35px}.wp-list-table.plugins tfoot{bottom:-35px;top:auto}.active,.inactive{padding-top:0}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-top:13px;padding-bottom:4px}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title,.wp-list-table.plugins tbody th{-webkit-box-shadow:none;box-shadow:none}.plugins tbody{padding:1px 0 0}.plugins tr.active+tr.inactive td.column-description{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column{border-top:none}.wp-list-table.plugins .column-description{padding-top:0}.wp-list-table.plugins .column-description,.wp-list-table.plugins .manage-column.column-name,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-right:12px;padding-left:46px}.wp-list-table.plugins tr{position:relative}.wp-list-table.plugins th.check-column,.wp-list-table.plugins tr.update th.check-column{position:absolute;height:auto;top:0;bottom:0;left:0;padding-left:2px;padding-top:18px}.wp-list-table.plugins tfoot th.check-column,.wp-list-table.plugins thead th.check-column{padding-left:3px;padding-top:11px;background:0 0}.widefat tbody th.check-column input[type=checkbox]{margin-top:-3px;margin-left:8px}.wp-list-table.plugins .active .check-column input,.wp-list-table.plugins .update .check-column input{margin-left:5px}.wp-list-table.plugins tfoot .check-column input,.wp-list-table.plugins thead .check-column input{margin-top:-6px}.wp-list-table.plugins .active th.check-column{background:0 0}.wp-list-table.plugins .plugin-title strong,.wp-list-table.plugins .theme-title strong{font-size:1.4em;line-height:1.6em}table.plugin-install .column-description,table.plugin-install .column-name,table.plugin-install .column-rating,table.plugin-install .column-version{display:block;width:auto}table.plugin-install th.column-description,table.plugin-install th.column-name,table.plugin-install th.column-rating,table.plugin-install th.column-version{display:none}table.plugin-install td.column-name strong{font-size:1.4em;line-height:1.6em}table.plugin-install #the-list td{-webkit-box-shadow:none;box-shadow:none}table.plugin-install #the-list tr{display:block;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}}#poststuff{padding-top:10px;min-width:763px}#poststuff #post-body{padding:0}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-right:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments .spinner,#show-comments a{float:left}#lost-connection-notice .spinner{display:block;float:left;margin:0 5px 0 0}#titlediv{position:relative}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#poststuff #titlewrap{border:0;padding:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0;background-color:#fff}#titlediv #title-prompt-text{color:#777;position:absolute;font-size:1.7em;padding:11px 10px}#wp-fullscreen-save .fs-saved{color:#999;float:right;margin-top:4px}#poststuff .inside-submitbox,#side-sortables .inside-submitbox{margin:0 3px;font-size:11px}input#link_description,input#link_url{width:98%}#pending{background:0 none;border:0;padding:0;font-size:11px;margin-top:-1px}#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-right:10px;font-size:11px}#editable-post-name-full{display:none}#editable-post-name{background-color:#fffbcc}#editable-post-name input{font-size:13px;height:22px;margin:0;width:16em}.postarea h3 label{float:left}.submitbox .submit{text-align:left;padding:12px 10px 10px;font-size:11px;background-color:#464646;color:#ccc}.submitbox .submitdelete{text-decoration:none;padding:1px 2px}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-right:4px;padding:6px}.inside-submitbox #post_status{margin:2px 0 2px -2px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{position:relative;min-width:255px;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:0 0;border:0;float:right;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:10px 0}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:0 7px 5px}#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border:0}#side-sortables .inside-submitbox .insidebox,.stuffbox .insidebox{margin:11px 0}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:1px solid transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #dfdfdf;border-bottom-color:#fdfdfd;background-color:#fdfdfd}ul.add-menu-item-tabs li,ul.category-tabs li,ul.wp-tab-bar li{padding:3px 5px 5px}#postimagediv .inside img{max-width:100%;height:auto;width:auto}form#tags-filter{position:relative}td.plugin-title strong,td.post-title strong{display:block;margin-bottom:.2em;font-size:14px}td.plugin-title p,td.post-title p{margin:6px 0}.ui-tabs-hide,.wp-hidden-children .wp-hidden-child{display:none}#post-body .tagsdiv #newtag{margin-right:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:none;background-color:#f7f7f7;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);z-index:999}#post-status-info td{font-size:12px}.autosave-info{padding:2px 10px;text-align:right}#editorcontent #post-status-info{border:none}#content-resize-handle{background:url(../images/resize.gif) right bottom no-repeat;width:12px;cursor:row-resize}.rtl #content-resize-handle{background:url(../images/resize-rtl.gif) left bottom no-repeat}.wp-editor-expand #content-resize-handle{display:none}#postdivrich #content{resize:none}#wp-word-count{display:block;padding:2px 10px}#wp-content-editor-container{position:relative}#content-textarea-clone{z-index:-1;position:absolute;top:0;visibility:hidden;overflow:hidden;max-width:100%;border:1px solid transparent}.wp-fullscreen-wrap #content-textarea-clone{display:none}.wp-fullscreen-wrap{padding-top:0!important}.wp-fullscreen-wrap .wp-editor-area{margin-top:0!important}.wp-fullscreen-wrap .mce-edit-area{padding-top:0!important}.wp-editor-expand #wp-content-editor-tools{z-index:1000;border-bottom:1px solid #e5e5e5}.wp-editor-expand #wp-content-editor-container{-webkit-box-shadow:none;box-shadow:none;margin-top:-1px;border-bottom:0 none}.wp-editor-expand div.mce-statusbar{z-index:1}.wp-editor-expand #post-status-info{border-top:1px solid #e5e5e5}.wp-editor-expand div.mce-toolbar-grp{z-index:999}.mce-fullscreen #wp-content-wrap .mce-edit-area,.mce-fullscreen #wp-content-wrap .mce-menubar,.mce-fullscreen #wp-content-wrap .mce-statusbar,.mce-fullscreen #wp-content-wrap .mce-toolbar-grp{position:static!important;width:auto!important;padding:0!important}.mce-fullscreen #wp-content-wrap .mce-statusbar{visibility:visible!important}.mce-fullscreen #wp-content-wrap .mce-wp-dfw,.post-php.mce-fullscreen #wpadminbar{display:none}#wp-content-editor-tools{background-color:#f1f1f1;padding-top:20px}#poststuff #post-body.columns-2 #side-sortables{width:280px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#hh,#jj,#mn{padding:1px;font-size:12px}#hh,#jj,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#888}#post-body #visibility:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 2px 0 0;top:0;left:-1px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}#post-body #visibility:before{content:'\f177'}.curtime #timestamp:before{content:'\f145';top:-1px}#post-body .misc-pub-revisions:before{content:'\f321'}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;left:50%;width:450px;margin-left:-225px;background:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005}.notification-dialog-background{position:fixed;top:0;left:0;right:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#post-lock-dialog .post-locked-message a.button{margin-right:10px}#post-lock-dialog .post-locked-avatar{float:left;margin:0 20px 20px 0}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:left;margin-right:3px}#post-lock-dialog.saved .locked-saved,#post-lock-dialog.saving .locked-saving{display:inline}#excerpt,.attachmentlinks{margin:0;height:4em;width:98%}.tagchecklist{margin-left:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-left:-8px;position:absolute}.tagchecklist span{margin-right:25px;display:block;float:left;font-size:13px;line-height:1.8em;white-space:nowrap;cursor:default}.tagchecklist span a{margin:1px 0 0 -17px;cursor:pointer;width:20px;height:20px;display:block;float:left;text-indent:0;overflow:hidden;position:absolute}#poststuff h2{margin-top:20px;font-size:1.5em;margin-bottom:15px;padding:0 0 3px;clear:left}#poststuff h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #page_template,#poststuff .inside #parent_id{max-width:100%}#poststuff .inside label.deleted,#poststuff .inside label.spam{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}#post-visibility-select{line-height:1.5em;margin-top:3px}#poststuff #submitdiv .inside{margin:0;padding:0}#post-body-content,.edit-form-section{margin-bottom:20px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border:1px solid #dfdfdf;border-spacing:0;background-color:#f9f9f9}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff td.left,#postcustomstuff th.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-right:10px}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:left;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-right:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon:before,.post-state-format:before{color:#ddd;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#2ea2cc}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-left:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-right:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon.post-format-standard:before,.post-state-format.post-format-standard:before,a.post-state-format.format-standard:before{content:'\f109'}.post-format-icon.post-format-image:before,.post-state-format.post-format-image:before,a.post-state-format.format-image:before{content:'\f128'}.post-format-icon.post-format-gallery:before,.post-state-format.post-format-gallery:before,a.post-state-format.format-gallery:before{content:'\f161'}.post-format-icon.post-format-audio:before,.post-state-format.post-format-audio:before,a.post-state-format.format-audio:before{content:'\f127'}.post-format-icon.post-format-video:before,.post-state-format.post-format-video:before,a.post-state-format.format-video:before{content:'\f126'}.post-format-icon.post-format-chat:before,.post-state-format.post-format-chat:before,a.post-state-format.format-chat:before{content:'\f125'}.post-format-icon.post-format-status:before,.post-state-format.post-format-status:before,a.post-state-format.format-status:before{content:'\f130'}.post-format-icon.post-format-aside:before,.post-state-format.post-format-aside:before,a.post-state-format.format-aside:before{content:'\f123'}.post-format-icon.post-format-quote:before,.post-state-format.post-format-quote:before,a.post-state-format.format-quote:before{content:'\f122'}.post-format-icon.post-format-link:before,.post-state-format.post-format-link:before,a.post-state-format.format-link:before{content:'\f103'}.category-adder{margin-left:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:1px solid #dfdfdf;background-color:#fdfdfd}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.inline-editor ul.cat-checklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,ul.export-filters{margin-left:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap label{display:block;padding:2px;font-size:12px}.form-field input[type=email],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=url],.form-field textarea{border-style:solid;border-width:1px;width:95%}.form-wrap p,p.description{margin:2px 0 5px;color:#666}.form-wrap p,p.description,p.help,span.description{font-size:13px;font-style:italic}.form-wrap .form-field{margin:0 0 10px;padding:8px 0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h3{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.tagsdiv{margin-top:-8px}#poststuff .taghint{color:#aaa;margin:15px 0 -24px 12px}#poststuff .tagsdiv .howto{margin:0 0 6px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}.taghint{color:#aaa;margin:-17px 0 0 7px;visibility:hidden}input.newtag~div.taghint{visibility:visible}input.newtag:focus~div.taghint{visibility:hidden}p.popular-tags{border:none;line-height:2em;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h3{margin:2px 0 12px}.ac_results{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;display:none;border:1px solid gray;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{padding:2px 5px;white-space:nowrap;color:#101010;text-align:left}.ac_over{background-color:#f0f0b8;cursor:pointer}.ac_match{text-decoration:underline}.comment-php .wp-editor-area{height:200px}.comment-ays{margin-bottom:0;border-bottom-style:solid;border-bottom-width:1px}.comment-ays .alt{background-color:transparent}.spam-undo-inside,.trash-undo-inside{margin:1px 8px 1px 0;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-right:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 3px 5px 0;vertical-align:middle}#comment-status-radio label{padding:5px 0}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:left;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td,.links-table th{padding:5px 0}.links-table td label{margin-right:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw,#wp-content-wrap .mce-wp-dfw{display:none}.wp-editor-expand #qt_content_dfw,.wp-editor-expand #wp-content-wrap .mce-wp-dfw{display:inline-block}.focus-on #screen-meta,.focus-on #screen-meta-links,.focus-on #wp-toolbar,.focus-on #wpfooter,.focus-on .postbox-container>*,.focus-on .wrap>h2,.focus-on div.error,.focus-on div.notice,.focus-on div.updated{opacity:0;-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.focus-on #wp-toolbar{opacity:.3}.focus-off #screen-meta,.focus-off #screen-meta-links,.focus-off #wp-toolbar,.focus-off #wpfooter,.focus-off .postbox-container>*,.focus-off .wrap>h2,.focus-off div.error,.focus-off div.notice,.focus-off div.updated{opacity:1;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.focus-off #wp-toolbar{-webkit-transform:translate(0,0)}.focus-on #adminmenuback,.focus-on #adminmenuwrap{-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.rtl.focus-on #adminmenuback,.rtl.focus-on #adminmenuwrap{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-2x.gif) right bottom/11px 11px no-repeat;-webkit-background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-rtl-2x.gif) right bottom no-repeat}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-right:0;width:100%}#poststuff #postbox-container-1 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0;width:auto}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff h3{padding:12px}.post-format-options{padding-right:0}.post-format-options a{margin-right:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-right:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist li{margin-bottom:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto;margin-bottom:15px}.tagchecklist{margin:25px 10px}.tagchecklist span{font-size:16px;line-height:120%}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar td,.mceToolbar tr{float:left!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-left:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding:6px 3px 6px 6px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}button.wp-switch-editor{font-size:16px;line-height:1em;margin:7px 0 0 7px;padding:8px 12px}#wp-content-media-buttons a{font-size:16px;line-height:37px;height:39px;padding:0 20px 0 15px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-top:-3px!important;margin-left:-5px!important}.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before,.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:right;font-size:16px}#delete-action,#publishing-action{line-height:47px}.comment-ays{border-bottom:none}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}}@media only screen and (max-width:500px){#wp-content-media-buttons a{font-size:14px;padding:0 10px}}.revisions-control-frame,.revisions-diff-frame{position:relative}.revisions-controls{padding-top:40px;height:100px;z-index:1}.revisions-controls input[type=checkbox]{position:relative;top:-1px;vertical-align:text-bottom}.revisions.pinned .revisions-controls{position:fixed;top:0;height:82px;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-tickmarks{position:relative;margin:0 auto;height:.7em;top:7px;max-width:70%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.revisions-tickmarks>div{position:absolute;height:100%;border-left:1px solid #aaa;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.revisions-tickmarks>div:first-child{border-width:0}.comparing-two-revisions .revisions-controls{height:140px}.comparing-two-revisions.pinned .revisions-controls{height:124px}.revisions .diff-error{position:absolute;text-align:center;margin:0 auto;width:100%;display:none}.revisions.diff-error .diff-error{display:block}.revisions .loading-indicator{position:absolute;vertical-align:middle;opacity:0;width:100%;width:-webkit-calc(100% - 30px);width:calc(100% - 30px);top:50%;top:-webkit-calc(50% - 10px);top:calc(50% - 10px);-webkit-transition:opacity .5s;transition:opacity .5s;filter:alpha(opacity=0)}body.folded .revisions .loading-indicator{margin-left:-32px}.revisions .loading-indicator span.spinner{display:block;margin:0 auto;float:none}.revisions.loading .loading-indicator{opacity:1;filter:alpha(opacity=100)}.revisions .diff{-webkit-transition:opacity .5s;transition:opacity .5s}.revisions.loading .diff{opacity:.5;filter:alpha(opacity=50)}.revisions.diff-error .diff{visibility:hidden}.revisions-meta{margin-top:20px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions.pinned .revisions-meta{-webkit-box-shadow:none;box-shadow:none}.revision-toggle-compare-mode{position:absolute;top:0;right:0}.comparing-two-revisions .revisions-next,.comparing-two-revisions .revisions-previous,.revisions-meta .diff-meta-to strong{display:none}.revisions-controls .author-card .date{color:#777}.revisions-controls .author-card.autosave{color:#d54e21}.revisions-controls .author-card .author-name{font-weight:700}.comparing-two-revisions .diff-meta-to strong{display:block}.revisions.pinned .revisions-buttons{padding:0 11px}.revisions-next,.revisions-previous{position:relative;z-index:1}.revisions-previous{float:left}.revisions-next{float:right}.revisions-controls .wp-slider{max-width:70%;margin:0 auto;top:-3px}.revisions-diff{padding:15px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-diff h3:first-child{margin-top:0}#revisions-meta-restored img,.post-revisions li img{vertical-align:middle}table.diff tbody tr td:nth-child(2){width:4%}table.diff{table-layout:fixed;width:100%;white-space:pre-wrap}table.diff col.content{width:auto}table.diff col.content.diffsplit{width:48%}table.diff col.diffsplit.middle{width:auto}table.diff col.ltype{width:30px}table.diff tr{background-color:transparent}table.diff td,table.diff th{font-family:Consolas,Monaco,monospace;font-size:14px;line-height:1.618;padding:.5em;vertical-align:top;word-wrap:break-word}table.diff td h1,table.diff td h2,table.diff td h3,table.diff td h4,table.diff td h5,table.diff td h6{margin:0}table.diff .diff-addedline ins,table.diff .diff-deletedline del{text-decoration:none}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.diff-meta{padding:5px;clear:both;min-height:32px}.diff-title strong{line-height:32px;min-width:60px;text-align:right;float:left;margin-right:5px}.revisions-controls .author-card .author-info{font-size:12px;line-height:16px}.revisions-controls .author-card .author-info,.revisions-controls .author-card .avatar{float:left;margin-left:6px;margin-right:6px}.revisions-controls .author-card .byline{display:block;font-size:12px}.revisions-controls .author-card .avatar{vertical-align:middle}.diff-meta input.restore-revision{float:right;margin-left:6px;margin-right:6px;margin-top:4px}.diff-meta-from{display:none}.comparing-two-revisions .diff-meta-from{display:block}.revisions-tooltip{position:absolute;bottom:105px;margin-right:0;margin-left:-69px;z-index:0;max-width:350px;min-width:130px;padding:8px 4px;opacity:0}.revisions-tooltip.flipped{margin-left:0;margin-right:-70px}.revisions.pinned .revisions-tooltip{display:none!important}.comparing-two-revisions .revisions-tooltip{bottom:145px}.revisions-tooltip-arrow{width:70px;height:15px;overflow:hidden;position:absolute;left:0;margin-left:35px;bottom:-15px}.revisions-tooltip.flipped .revisions-tooltip-arrow{margin-left:0;margin-right:35px;left:auto;right:0}.revisions-tooltip-arrow>span{content:"";position:absolute;left:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip.flipped .revisions-tooltip-arrow>span{left:auto;right:20px}.ie8 .revisions-tooltip-arrow>span{left:15px;top:-25px;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"}.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow>span{right:25px}.revisions-tooltip,.revisions-tooltip-arrow>span{border:1px solid #d7d7d7;background-color:#fff}.revisions-tooltip{display:none}.arrow{width:70px;height:16px;overflow:hidden;position:absolute;left:0;margin-left:-35px;bottom:90px;z-index:10000}.arrow:after{z-index:9999;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.arrow.top{top:-16px;bottom:auto}.arrow.left{left:20%}.arrow:after{content:"";position:absolute;left:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip,.revisions-tooltip-arrow:after{border-width:1px;border-style:solid}div.revisions-controls>.wp-slider>.ui-slider-handle{margin-left:-10px}.rtl div.revisions-controls>.wp-slider>.ui-slider-handle{margin-right:-10px}.wp-slider.ui-slider{position:relative;border:1px solid #d7d7d7;text-align:left;cursor:pointer}.wp-slider .ui-slider-handle{-webkit-border-radius:50%;border-radius:50%;height:18px;margin-top:-3px;outline:0;position:absolute;width:18px;z-index:2;-ms-touch-action:none;touch-action:none}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{background:0 0;position:absolute;top:0;left:0;color:#fff;content:"\f229";font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{font-size:20px!important;margin:-1px 0 0 -1px}.wp-slider .ui-slider-handle.from-handle:before{content:'\f139'}.rtl .wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{content:'\f141'}.rtl .wp-slider .ui-slider-handle.to-handle:before{content:'\f139';right:-1px}.wp-slider .ui-slider-range{position:absolute;font-size:.7em;display:block;border:0;background-color:transparent;background-image:none}.wp-slider.ui-slider-horizontal{height:.7em}.wp-slider.ui-slider-horizontal .ui-slider-handle{top:-.25em;margin-left:-.6em}.wp-slider.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.wp-slider.ui-slider-horizontal .ui-slider-range-min{left:0}.wp-slider.ui-slider-horizontal .ui-slider-range-max{right:0}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.revision-tick.completed-false{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){#diff-next-revision,#diff-previous-revision{margin-top:-1em}table.diff{-ms-word-break:break-all;word-break:break-all;word-wrap:break-word}}.media-item .describe{border-collapse:collapse;width:100%;border-top:1px solid #dfdfdf;clear:both;cursor:default}.media-item.media-blank .describe{border:0}.media-item .describe th{vertical-align:top;text-align:left;padding:5px 10px 10px;width:140px}.media-item .describe .align th{padding-top:0}.media-item .media-item-info tr{background-color:transparent}.media-item .describe td{padding:0 8px 8px 0;vertical-align:top}.media-item thead.media-item-info td{padding:4px 10px 0}.media-item .media-item-info .A1B1{padding:0 0 0 10px}.media-item td.savesend{padding-bottom:15px}.media-item .thumbnail{max-height:128px;max-width:128px}#wpbody-content #async-upload-wrap a{display:none}.media-upload-form{margin-top:20px}.media-upload-form td label{margin-right:6px;margin-left:2px}.media-upload-form .align .field label{display:inline;padding:0 0 0 23px;margin:0 1em 0 3px;font-weight:600}.media-upload-form tr.image-size label{margin:0 0 0 5px;font-weight:600}.media-upload-form th.label label{font-weight:600;margin:.5em;font-size:13px}.media-upload-form th.label label span{padding:0 5px}.media-item .describe input[type=text],.media-item .describe textarea{width:460px}.media-item .describe p.help{margin:0;padding:0 0 0 5px}.describe-toggle-off,.describe-toggle-on,.media-item .edit-attachment{display:block;line-height:36px;float:right;margin-right:10px}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on{display:none}.media-item.open .describe-toggle-off{display:block}.media-upload-form .media-item{min-height:36px;margin-bottom:1px;position:relative;width:100%;background:#fff}.media-upload-form .media-item,.media-upload-form .media-item .error{-webkit-box-shadow:0 1px 0 #dfdfdf;box-shadow:0 1px 0 #dfdfdf}#media-items:empty{border:0}.media-item .filename{line-height:36px;overflow:hidden;margin-left:6px}.media-item .pinkynail{float:left;margin:2px 10px 0 3px;max-width:40px;max-height:32px}.media-item .startclosed,.media-item .startopen{display:none}.media-item .original{position:relative;height:34px}.media-item .progress{float:right;height:22px;margin:7px 6px;width:200px;line-height:2em;padding:0;overflow:hidden;-webkit-border-radius:22px;border-radius:22px;background:#ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-22px;-webkit-border-radius:22px;border-radius:22px;background-color:#0074a2;-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.3);box-shadow:inset 0 0 2px rgba(0,0,0,.3)}.media-item .progress .percent{z-index:10;position:relative;width:200px;padding:0;color:#fff;text-align:center;line-height:22px;font-weight:400;text-shadow:0 1px 2px rgba(0,0,0,.2)}.upload-php .fixed .column-parent{width:15%}.js .html-uploader #plupload-upload-ui{display:none}.js .html-uploader #html-upload-ui{display:block}.media-upload-form .media-item .error,.media-upload-form .media-item.error{width:auto;margin:0 0 1px}.media-upload-form .media-item .error{padding:10px 0 10px 14px}.media-item .error-div a.dismiss{display:block;float:right;margin:0 10px 0 15px}.find-box{background-color:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);width:600px;overflow:hidden;margin-left:-300px;position:fixed;top:30px;bottom:30px;left:50%;z-index:100105}.find-box-head{background:#fcfcfc;border-bottom:1px solid #dfdfdf;height:36px;font-size:18px;font-weight:600;line-height:36px;padding:0 36px 0 16px;position:absolute;top:0;left:0;right:0}.find-box-inside{overflow:auto;padding:16px;background-color:#fff;position:absolute;top:37px;bottom:45px;overflow-y:scroll;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.find-box-search{padding-bottom:16px}.find-box-search .spinner{float:none;left:110px;position:absolute;top:2px}#find-posts-response,.find-box-search{position:relative}#find-posts-input,#find-posts-search{float:left}#find-posts-input{width:140px;height:28px;margin:0 4px 0 0}.widefat .found-radio{padding-right:0;width:16px}#find-posts-close{width:36px;height:36px;position:absolute;top:0;right:0;cursor:pointer;text-align:center;color:#666}#find-posts-close:hover{color:#2ea2cc}#find-posts-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f158'}.find-box-buttons{padding:8px 16px;background:#fcfcfc;border-top:1px solid #dfdfdf;position:absolute;bottom:0;left:0;right:0}@media screen and (max-width:782px){.find-box-inside{bottom:57px}}@media screen and (max-width:660px){.find-box{top:0;bottom:0;left:0;right:0;margin:0;width:100%}}.ui-find-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border:1px solid #ddd;line-height:1.8em;word-spacing:3px;-webkit-border-radius:6px;border-radius:6px}.drag-drop #drag-drop-area{border:4px dashed #bbb;height:200px}.drag-drop .drag-drop-inside{margin:70px auto 0;width:250px}.drag-drop-inside p{color:#aaa;font-size:14px;margin:5px 0;display:none}.drag-drop .drag-drop-inside p{text-align:center}.drag-drop-inside p.drag-drop-info{font-size:20px}.drag-drop .drag-drop-inside p,.drag-drop-inside p.drag-drop-buttons{display:block}.drag-drop.drag-over #drag-drop-area{border-color:#83b4d8}#plupload-upload-ui{position:relative}.media-frame.mode-grid,.media-frame.mode-grid .attachments-browser .attachments,.media-frame.mode-grid .media-frame-content,.media-frame.mode-grid .uploader-inline-content{position:static}.media-frame.mode-grid .media-frame-menu,.media-frame.mode-grid .media-frame-router,.media-frame.mode-grid .media-frame-title{display:none}.media-frame.mode-grid .media-frame-content{background-color:transparent;border:none}.upload-php .mode-grid .media-sidebar{position:relative;width:auto;margin-bottom:16px;padding:0 16px;border:1px solid #c00;background-color:#feebe8}.upload-php .mode-grid .hide-sidebar .media-sidebar{display:none}.upload-php .mode-grid .media-sidebar .media-uploader-status{border-bottom:none;padding-bottom:0;max-width:100%}.upload-php .mode-grid .media-sidebar .upload-error{margin:20px 0;padding:0;border:none;background:0 0}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors{font-size:0;top:-12px;right:-10px}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:before{content:"\f158";font:400 20px/1 dashicons;color:#666}.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:focus:before,.upload-php .mode-grid .media-sidebar .media-uploader-status .upload-dismiss-errors:hover:before{color:#2ea2cc}.upload-php .mode-grid .media-sidebar .media-uploader-status.errors h3{display:none}.media-frame.mode-grid .uploader-inline{position:relative;top:auto;right:auto;left:auto;bottom:auto;padding-top:0;margin-top:0;border:4px dashed #bbb}.media-frame.mode-select .attachments-browser.fixed .attachments{position:relative;top:94px;padding-bottom:94px}.media-frame.mode-grid .attachment.details:focus,.media-frame.mode-grid .attachment:focus,.media-frame.mode-grid .selected.attachment:focus{-webkit-box-shadow:inset 0 0 2px 3px #f1f1f1,inset 0 0 0 7px #5b9dd9;box-shadow:inset 0 0 2px 3px #f1f1f1,inset 0 0 0 7px #5b9dd9;outline:0}.media-frame.mode-grid .selected.attachment{-webkit-box-shadow:inset 0 0 0 5px #f1f1f1,inset 0 0 0 7px #ccc;box-shadow:inset 0 0 0 5px #f1f1f1,inset 0 0 0 7px #ccc}.media-frame.mode-grid .attachment.details{-webkit-box-shadow:inset 0 0 0 3px #f1f1f1,inset 0 0 0 7px #1e8cbe;box-shadow:inset 0 0 0 3px #f1f1f1,inset 0 0 0 7px #1e8cbe}.media-frame.mode-grid.mode-select .attachment .thumbnail{opacity:.65}.media-frame.mode-select .attachment.selected .thumbnail{opacity:1}.media-frame.mode-grid .media-toolbar{margin-bottom:15px;height:auto}.media-frame.mode-grid .media-toolbar select{margin:0 10px 0 0;font-size:14px}.media-frame.mode-grid .media-toolbar-secondary>.media-button{margin-top:10px;margin-bottom:10px}.media-frame.mode-grid .attachments-browser .bulk-select{display:inline-block;margin:0 10px 0 0}.media-frame.mode-grid .search{margin-top:0}.media-frame.mode-grid .spinner{margin-top:15px}.attachments-browser .media-toolbar-secondary>.media-button{margin-right:10px}.media-frame.mode-select .attachments-browser.fixed .media-toolbar{position:fixed;top:32px;left:auto;right:20px;margin-top:0}.media-frame.mode-grid .attachments-browser{padding:0}.media-frame.mode-grid .attachments-browser .attachments{padding:2px}.media-frame.mode-grid .attachments-browser .no-media{color:#999;font-size:18px;font-style:normal;margin:0;padding:100px 0 0;text-align:center}.edit-attachment-frame{display:block;height:100%;width:100%}.edit-attachment-frame .edit-media-header{overflow:hidden}.upload-php .media-modal-close .media-modal-icon:before{content:'\f335';font-size:22px}.upload-php .media-modal-close .media-modal-icon{margin:14px;width:22px}.edit-attachment-frame .edit-media-header .left,.edit-attachment-frame .edit-media-header .right,.upload-php .media-modal-close{cursor:pointer;color:#777;background-color:transparent;height:50px;width:50px;padding:0;position:absolute;text-align:center;border:0;border-left:1px solid #ddd;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.upload-php .media-modal-close{top:0;right:0}.edit-attachment-frame .edit-media-header .left{right:102px}.edit-attachment-frame .edit-media-header .right{right:51px}.edit-attachment-frame .media-frame-title{left:0;right:150px}.edit-attachment-frame .edit-media-header .left:before,.edit-attachment-frame .edit-media-header .right:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.edit-attachment-frame .edit-media-header .left:focus,.edit-attachment-frame .edit-media-header .left:hover,.edit-attachment-frame .edit-media-header .right:focus,.edit-attachment-frame .edit-media-header .right:hover,.upload-php .media-modal-close:focus,.upload-php .media-modal-close:hover{background:#ddd;border-color:#ccc;color:#000;outline:0}.upload-php .media-modal-close:focus .media-modal-icon:before,.upload-php .media-modal-close:hover .media-modal-icon:before{color:#000}.edit-attachment-frame .edit-media-header .left:before,.rtl .edit-attachment-frame .edit-media-header .right:before{content:'\f341'}.edit-attachment-frame .edit-media-header .right:before,.rtl .edit-attachment-frame .edit-media-header .left:before{content:'\f345'}.edit-attachment-frame .edit-media-header .left.disabled,.edit-attachment-frame .edit-media-header .left.disabled:hover,.edit-attachment-frame .edit-media-header .right.disabled,.edit-attachment-frame .edit-media-header .right.disabled:hover{color:#ccc;background:inherit;cursor:default;pointer-events:none}.edit-attachment-frame .media-frame-content,.edit-attachment-frame .media-frame-router{left:0}.edit-attachment-frame .media-frame-content{border-bottom:none;bottom:0;top:50px}.edit-attachment-frame .attachment-details{position:absolute;overflow:auto;top:0;bottom:0;right:0;left:0;-webkit-box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1);box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1)}.edit-attachment-frame .attachment-media-view{float:left;width:65%;height:100%}.edit-attachment-frame .attachment-media-view .thumbnail{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:16px;height:100%}.edit-attachment-frame .attachment-media-view .details-image{display:block;margin-bottom:16px;max-width:100%;max-height:90%;max-height:-webkit-calc(100% - 42px);max-height:calc(100% - 42px)}.edit-attachment-frame .wp-media-wrapper{margin-bottom:12px}.edit-attachment-frame input,.edit-attachment-frame textarea{padding:6px 8px;line-height:16px}.edit-attachment-frame .attachment-info{overflow:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:0;padding:12px 16px 0;width:35%;height:100%;-webkit-box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1);box-shadow:inset 0 4px 4px -4px rgba(0,0,0,.1);border-bottom:0;border-left:1px solid #ddd;background:#f3f3f3}.edit-attachment-frame .attachment-info .details,.edit-attachment-frame .attachment-info .settings{position:relative;overflow:hidden;float:none;margin-bottom:15px;padding-bottom:15px;border-bottom:1px solid #ddd}.edit-attachment-frame .attachment-info .filename{font-weight:400;color:#666}.edit-attachment-frame .attachment-info .thumbnail{margin-bottom:12px}.attachment-info .actions{margin-bottom:16px}.attachment-info .actions a{display:inline;text-decoration:none}.wp_attachment_details label[for=content]{font-size:13px;line-height:1.5;margin:1em 0}.wp_attachment_details #attachment_caption{height:4em}.describe .image-editor{vertical-align:top}.imgedit-wrap{position:relative}.imgedit-settings p{margin:8px 0 0}.describe .imgedit-wrap .imgedit-settings{padding:0 5px}.wp_attachment_holder div.updated{margin-top:0}.wp_attachment_holder .imgedit-wrap>div{height:auto;overflow:hidden}.wp_attachment_holder .imgedit-wrap .imgedit-panel-content{padding-right:16px;width:auto;overflow:hidden}.wp_attachment_holder .imgedit-wrap .imgedit-settings{float:right;width:250px}.imgedit-settings input{margin-top:0;vertical-align:middle}.imgedit-wait{position:absolute;top:0;background:url(../images/spinner.gif) no-repeat center/20px 20px #fff;-webkit-background-size:20px 20px;opacity:.7;filter:alpha(opacity=70);width:100%;height:500px;display:none}.no-float{float:none}.imgedit-settings .disabled,.media-disabled{color:grey}.A1B1,.wp_attachment_image{overflow:hidden}.A1B1 .button,.wp_attachment_image .button{float:left}.no-js .wp_attachment_image .button{display:none}.A1B1 .spinner,.wp_attachment_image .spinner{float:left;padding:0 0 4px;vertical-align:bottom}.imgedit-menu{margin:0 0 12px;min-width:300px}.imgedit-menu div{float:left;width:32px;border:1px solid #d5d5d5;background:#f1f1f1;margin:0 8px 0 0;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;line-height:28px;color:#777;cursor:pointer}.imgedit-menu div:before{font:400 20px/1 dashicons;speak:none;vertical-align:middle}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea;color:#333}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;color:#777;filter:alpha(opacity=50);opacity:.5;cursor:default}.imgedit-crop:before{content:'\f165'}.imgedit-rleft:before{content:'\f166'}.imgedit-rright:before{content:'\f167'}.imgedit-flipv:before{content:'\f168'}.imgedit-fliph:before{content:'\f169'}.imgedit-undo:before{content:'\f171'}.imgedit-redo:before{content:'\f172'}.imgedit-crop-wrap{position:relative}.imgedit-crop{margin:0 8px 0 0}.imgedit-rleft{margin:0 3px}.imgedit-rright{margin:0 8px 0 3px}.imgedit-flipv{margin:0 3px}.imgedit-fliph{margin:0 8px 0 3px}.imgedit-undo{margin:0 3px}.imgedit-redo{margin:0 8px 0 3px}.imgedit-applyto img{margin:0 8px 0 0}.imgedit-group-top{margin:5px 0}#poststuff .imgedit-group-top h3{padding:0}.imgedit-group-top h3 a{text-decoration:none}.imgedit-applyto .imgedit-label{padding:2px 0 0;display:block}.imgedit-help{display:none;font-style:italic}a.imgedit-help-toggle{text-decoration:none}.form-table td.imgedit-response{padding:0}.imgedit-submit{margin:8px 0}.imgedit-submit-btn{margin-left:20px}.imgedit-wrap .nowrap{white-space:nowrap}span.imgedit-scale-warn{color:red;font-size:20px;font-style:normal;visibility:hidden;vertical-align:middle}.imgedit-group{margin-bottom:8px;padding:2px 10px}audio,video{display:inline-block;max-width:100%}.mejs-container{width:100%;max-width:100%}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.imgedit-wait{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){.wp_attachment_details label[for=content]{font-size:14px;line-height:1.5em}.media-upload-form .media-item .error,.media-upload-form .media-item.error{font-size:13px;line-height:1.5}.media-upload-form .media-item.error{padding:1px 10px}.media-upload-form .media-item .error{padding:10px 0 10px 12px}}@media only screen and (max-width:1120px){#wp-media-grid .wp-filter .attachment-filters{max-width:100%}}@media only screen and (max-width:782px){.media-frame.mode-select .attachments-browser.fixed .media-toolbar{top:46px;right:10px}}@media only screen and (max-width:600px){.media-frame.mode-select .attachments-browser.fixed .media-toolbar{top:0}}@media only screen and (max-width:480px){.edit-attachment-frame .media-frame-title{right:110px}.edit-attachment-frame .edit-media-header .left,.edit-attachment-frame .edit-media-header .right,.upload-php .media-modal-close{width:40px;height:40px}.upload-php .media-modal-close .media-modal-icon{margin:9px 10px}.edit-attachment-frame .edit-media-header .left:before,.edit-attachment-frame .edit-media-header .right:before{line-height:40px!important}.edit-attachment-frame .edit-media-header .left{right:82px}.edit-attachment-frame .edit-media-header .right{right:41px}.edit-attachment-frame .media-frame-content{top:40px}.edit-attachment-frame .attachment-media-view{float:none;height:auto;width:100%}.edit-attachment-frame .attachment-info{height:auto;width:100%}}@media only screen and (max-width:640px),screen and (max-height:400px){.upload-php .mode-grid .media-sidebar{max-width:100%}}.theme-browser .themes{clear:both;padding:0 0 100px}.themes-php .wrap h2{float:left;margin-bottom:15px}.network-admin.themes-php .wrap h2{margin-bottom:0}.themes-php .wrap h2 .button{margin-left:20px}.themes-php .wp-filter-search{position:relative;top:-2px;left:20px;margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5}.themes-php div.error,.themes-php div.updated{margin:0 0 20px;clear:both}.themes-php div.updated a{text-decoration:underline}.theme-browser .theme{cursor:pointer;float:left;margin:0 4% 4% 0;position:relative;width:30.6%;border:1px solid #dedede;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ie8 .theme-browser .theme{width:30%;margin:0 3% 4% 0}.theme-browser .theme:nth-child(3n){margin-right:0}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:pointer}.theme-browser .theme .theme-name{font-size:15px;font-weight:600;height:18px;margin:0;padding:15px;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:#fff;background:rgba(255,255,255,.65)}.theme-browser .theme .theme-actions{-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out;position:absolute;bottom:0;right:0;height:38px;padding:9px 10px 0;background:rgba(244,244,244,.7);border-left:1px solid rgba(0,0,0,.05)}.theme-browser .theme.focus .theme-actions,.theme-browser .theme:focus .theme-actions,.theme-browser .theme:hover .theme-actions{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-actions .button-primary{margin-right:3px}.theme-browser .theme .theme-actions .button-secondary{float:none;margin-left:3px}.theme-browser .theme .theme-screenshot{display:block;overflow:hidden;position:relative;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme .theme-screenshot:after{content:'';display:block;padding-top:66.66666%}.theme-browser .theme .theme-screenshot img{height:auto;position:absolute;left:0;top:0;width:100%;-webkit-transform:translateZ(0);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme:focus .theme-screenshot,.theme-browser .theme:hover .theme-screenshot{background:#fff}.theme-browser.rendered .theme:focus .theme-screenshot img,.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:.4}.theme-browser .theme .more-details{-ms-filter:"alpha(Opacity=0)";opacity:0;position:absolute;top:35%;right:25%;left:25%;background:#222;background:rgba(0,0,0,.7);color:#fff;font-size:15px;text-shadow:0 1px 0 rgba(0,0,0,.6);-webkit-font-smoothing:antialiased;font-weight:600;padding:15px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out}.theme-browser .theme:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}.theme-browser .theme:focus .more-details{opacity:1}.theme-browser .theme.active:focus .theme-actions{display:block}.theme-browser.rendered .theme:focus .more-details,.theme-browser.rendered .theme:hover .more-details{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-installed,.theme-browser .theme .theme-update{background:#d54e21;background:rgba(213,78,33,.95);color:#fff;display:block;font-size:13px;font-weight:400;height:48px;line-height:48px;padding:0 10px;position:absolute;top:0;right:0;left:0;border-bottom:1px solid rgba(0,0,0,.25);overflow:hidden}.theme-browser .theme .theme-installed:before,.theme-browser .theme .theme-update:before{content:'\f463';display:inline-block;font:400 20px/1 dashicons;margin:0 6px 0 0;opacity:.8;position:relative;top:5px;speak:none;-webkit-font-smoothing:antialiased}.theme-browser .theme.active .theme-name{background:#2f2f2f;color:#fff;padding-right:110px;font-weight:300;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.5);box-shadow:inset 0 1px 1px rgba(0,0,0,.5)}.theme-browser .theme.active .theme-name span{font-weight:600}.theme-browser .theme.active .theme-actions{background:rgba(49,49,49,.7);border-left:none;opacity:1}.theme-browser .theme.active .theme-actions .button-primary{margin-right:0}.theme-browser .theme .theme-author{background:#222;color:#eee;display:none;font-size:14px;margin:0 10px;padding:5px 10px;position:absolute;bottom:56px}.theme-browser .theme.display-author .theme-author{display:block}.theme-browser .theme.display-author .theme-author a{color:inherit;text-decoration:none}.theme-browser .theme.add-new-theme{border:none;-webkit-box-shadow:none;box-shadow:none}.theme-browser .theme.add-new-theme a{color:#999;text-decoration:none;display:block;position:relative;z-index:1}.theme-browser .theme.add-new-theme:after{display:block;content:'';-ms-filter:"alpha(Opacity=100)";opacity:1;background:0 0;position:absolute;top:0;left:0;right:0;bottom:0;padding:10% 0 0;text-shadow:none;border:5px dashed #d5d2ca;border:5px dashed rgba(0,0,0,.1);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-browser .theme.add-new-theme span:after{background:#e5e5e5;background:rgba(153,153,153,.1);-webkit-border-radius:50%;border-radius:50%;display:inline-block;content:'\f132';-webkit-font-smoothing:antialiased;font:400 74px/115px dashicons;width:100px;height:100px;vertical-align:middle;text-align:center;color:#999;position:absolute;top:30%;left:50%;margin-left:-50px;text-indent:-4px;padding:0;text-shadow:none;z-index:4}.rtl .theme-browser .theme.add-new-theme span:after{text-indent:4px}.theme-browser .theme.add-new-theme:focus .theme-screenshot,.theme-browser .theme.add-new-theme:hover .theme-screenshot{background:0 0}.theme-browser .theme.add-new-theme:focus span:after,.theme-browser .theme.add-new-theme:hover span:after{background:#fff;color:#0074a2}.theme-browser .theme.add-new-theme:focus:after,.theme-browser .theme.add-new-theme:hover:after{border-color:transparent;color:#fff;background:#0074a2;content:''}.theme-browser .theme.add-new-theme .theme-name{background:0 0;text-align:center;-webkit-box-shadow:none;box-shadow:none;font-weight:400;position:relative;top:0;margin-top:-10%;margin-bottom:10%}.theme-browser .theme.add-new-theme:focus .theme-name,.theme-browser .theme.add-new-theme:hover .theme-name{color:#fff;z-index:2}.theme-overlay .theme-backdrop{position:absolute;left:-20px;right:0;top:0;bottom:0;background:#f1f1f1;background:rgba(238,238,238,.9);z-index:10}.theme-overlay .theme-header{position:absolute;top:0;left:0;right:0;height:48px;border-bottom:1px solid #ddd}.theme-overlay .theme-header .close{cursor:pointer;height:48px;width:50px;text-align:center;float:right;border:0;border-left:1px solid #ddd;background-color:transparent;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.theme-overlay .theme-header .close:before{font:400 22px/50px dashicons!important;color:#777;display:inline-block;content:'\f335';font-weight:300}.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{cursor:pointer;color:#777;background-color:transparent;height:48px;width:54px;float:left;text-align:center;border:0;border-right:1px solid #ddd;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:focus,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:focus,.theme-overlay .theme-header .right:hover{background:#ddd;border-color:#ccc;color:#000}.theme-overlay .theme-header .close:focus:before,.theme-overlay .theme-header .close:hover:before{color:#000}.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .left:focus,.theme-overlay .theme-header .right:focus{-webkit-box-shadow:none;box-shadow:none;outline:0}.theme-overlay .theme-header .left.disabled,.theme-overlay .theme-header .left.disabled:hover,.theme-overlay .theme-header .right.disabled,.theme-overlay .theme-header .right.disabled:hover{color:#ccc;background:inherit;cursor:inherit}.theme-overlay .theme-header .left:before,.theme-overlay .theme-header .right:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.rtl .theme-overlay .theme-header .right:before,.theme-overlay .theme-header .left:before{content:'\f341'}.rtl .theme-overlay .theme-header .left:before,.theme-overlay .theme-header .right:before{content:'\f345'}.theme-overlay .theme-wrap{clear:both;position:fixed;top:9%;left:190px;right:30px;bottom:3%;background:#fff;-webkit-box-shadow:0 1px 20px 5px rgba(0,0,0,.1);box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:20;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-overlay .theme-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden}body.folded .theme-overlay .theme-wrap{left:70px}.theme-overlay .theme-about{position:absolute;top:49px;bottom:57px;left:0;right:0;overflow:auto;padding:2% 4%}.theme-overlay .theme-about:after{content:".";display:block;height:0;clear:both;visibility:hidden}.theme-overlay .theme-actions{position:absolute;text-align:center;bottom:0;left:0;right:0;padding:10px 25px 5px;background:#f3f3f3;z-index:30;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-top:1px solid #eee}.ie8 .theme-overlay .theme-actions{border:1px solid #eee}.theme-overlay .theme-actions a{margin-right:5px;margin-bottom:5px}.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-header"],.customize-support .theme-overlay .theme-actions a[href="themes.php?page=custom-background"]{display:none}.broken-themes a.delete-theme,.theme-overlay .theme-actions .delete-theme{color:#a00;text-decoration:none;border-color:transparent;-webkit-box-shadow:none;box-shadow:none;background:0 0}.theme-overlay .theme-actions .delete-theme{position:absolute;right:10px;bottom:5px}.broken-themes a.delete-theme:focus,.broken-themes a.delete-theme:hover,.theme-overlay .theme-actions .delete-theme:focus,.theme-overlay .theme-actions .delete-theme:hover{background:#d54e21;color:#fff;border-color:#d54e21}.theme-overlay .theme-actions .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-actions .inactive-theme,.theme-overlay.active .theme-actions .active-theme{display:block}.theme-overlay .theme-screenshots{float:left;margin:0 30px 0 0;width:55%;max-width:880px;text-align:center}.theme-overlay .screenshot{border:1px solid #fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;position:relative;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.theme-overlay .screenshot:after{content:'';display:block;padding-top:75%}.theme-overlay .screenshot img{height:auto;position:absolute;left:0;top:0;width:100%}.theme-overlay.small-screenshot .theme-screenshots{position:absolute;width:302px}.theme-overlay.small-screenshot .theme-info{margin-left:350px;width:auto}.theme-overlay .screenshot.thumb{background:#ccc;border:1px solid #eee;float:none;display:inline-block;margin:10px 5px 0;width:140px;height:80px;cursor:pointer}.theme-overlay .screenshot.thumb:after{content:'';display:block;padding-top:100%}.theme-overlay .screenshot.thumb img{cursor:pointer;position:absolute;left:0;top:0;width:100%;height:auto}.theme-overlay .screenshot.selected{background:0 0;border:2px solid #2ea2cc}.theme-overlay .screenshot.selected img{opacity:.8}.theme-browser .theme .theme-screenshot.blank,.theme-overlay .screenshot.blank{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=)}.theme-overlay .theme-info{width:40%;float:left}.theme-overlay .current-label{background:#333;color:#fff;font-size:11px;display:inline-block;padding:2px 8px;-webkit-border-radius:2px;border-radius:2px;margin:0 0 -10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-name{color:#222;font-size:32px;font-weight:100;margin:10px 0 0;line-height:1.3}.theme-overlay .theme-version{color:#999;font-size:13px;font-weight:400;float:none;display:inline-block;margin-left:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-author{color:#686868;font-size:16px;font-weight:400;margin:15px 0 25px}.theme-overlay .theme-author a{text-decoration:none}.theme-overlay .theme-description{color:#555;font-size:15px;font-weight:400;line-height:1.5;margin:30px 0 0}.theme-overlay .theme-tags{border-top:3px solid #eee;color:#888;font-size:13px;font-weight:400;margin:30px 0 0;padding-top:20px}.theme-overlay .theme-tags span{color:#444;font-weight:700;margin-right:5px}.theme-overlay .theme-update-message{background:#fef7f1;border:1px solid #eee;border-left:4px solid #d54e21;-webkit-border-radius:3px;border-radius:3px;padding:5px 20px 10px}.theme-overlay .theme-update{color:#222;font-size:18px;display:inline-block;line-height:40px;margin:0}.theme-overlay .parent-theme{background:#f7fcfe;border:1px solid #eee;border-left:4px solid #2ea2cc;font-size:14px;font-weight:400;margin-top:30px;padding:10px 10px 10px 20px}.theme-overlay .parent-theme strong{font-weight:700}.single-theme .theme,.single-theme .theme-overlay .theme-backdrop,.single-theme .theme-overlay .theme-header{display:none}.single-theme .theme-overlay .theme-wrap{clear:both;min-height:330px;position:relative;left:auto;right:auto;top:auto;bottom:auto}.single-theme .theme-overlay .theme-about{padding:30px 30px 70px;position:static}.single-theme .theme-overlay .theme-actions{position:absolute}@media only screen and (min-width:2000px){#wpwrap .theme-browser .theme{width:17.6%;margin:0 3% 3% 0}#wpwrap .theme-browser .theme:nth-child(3n),#wpwrap .theme-browser .theme:nth-child(4n){margin-right:3%}#wpwrap .theme-browser .theme:nth-child(5n){margin-right:0}}@media only screen and (min-width:1680px){.theme-overlay .theme-wrap{width:1450px;margin:0 auto}}@media only screen and (min-width:1640px){.theme-browser .theme{width:22.7%;margin:0 3% 3% 0}.theme-browser .theme .theme-screenshot:after{padding-top:75%}.theme-browser .theme:nth-child(3n){margin-right:3%}.theme-browser .theme:nth-child(4n){margin-right:0}}@media only screen and (max-width:1120px){.theme-browser .theme{width:47.5%;margin-right:0}.theme-browser .theme:nth-child(even){margin-right:0}.theme-browser .theme:nth-child(odd){margin-right:5%}}@media only screen and (max-width:900px){.theme-overlay .theme-wrap{left:65px}}@media only screen and (max-width:780px){.theme-overlay .theme-wrap,body.folded .theme-overlay .theme-wrap{top:0;right:0;bottom:0;left:0;padding:70px 20px 20px;border:none;z-index:500;position:fixed}.theme-browser .theme.active .theme-name span{display:none}.theme-overlay .theme-screenshots{width:40%}.theme-overlay .theme-info{width:50%}.single-theme .theme-wrap{padding:10px}.theme-browser .theme .theme-actions{padding:5px 10px 4px}.theme-overlay.small-screenshot .theme-screenshots{position:static;float:none;max-width:302px}.theme-overlay.small-screenshot .theme-info{margin-left:0;width:auto}.theme:focus .more-details,.theme:hover .more-details,.theme:not(.active):focus .theme-actions,.theme:not(.active):hover .theme-actions{display:none}.theme-browser.rendered .theme:focus .theme-screenshot img,.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:1}}@media only screen and (max-width:480px){.theme-browser .theme{width:100%;margin-right:0}.theme-browser .theme:nth-child(2n),.theme-browser .theme:nth-child(3n){margin-right:0}}@media only screen and (max-width:650px){.theme-overlay .theme-description,.theme-overlay .theme-update{margin-left:0}.theme-overlay .theme-actions .delete-theme{position:relative;right:auto;bottom:auto}.theme-overlay .theme-actions .inactive-theme{display:inline}.theme-overlay .theme-screenshots{width:100%;float:none}.theme-overlay .theme-info{width:100%}.theme-overlay .theme-author{margin:5px 0 15px}.theme-overlay .current-label{margin-top:10px;font-size:13px}.themes-php .wrap h2{width:100%}.themes-php .wp-filter-search{float:none;clear:both;left:0;top:0;right:0;margin:10px 0;width:100%;max-width:280px}.theme-browser .theme.add-new-theme span:after{font:400 60px/90px dashicons;width:80px;height:80px;top:30%;left:50%;text-indent:0;margin-left:-40px}.single-theme .theme-wrap{margin:0 -12px 0 -10px;padding:10px}.single-theme .theme-overlay .theme-about{padding:10px;overflow:visible}.single-theme .current-label{display:none}.single-theme .theme-overlay .theme-actions{position:static}}.broken-themes{clear:both}.broken-themes table{text-align:left;width:50%;border-spacing:3px;padding:3px}.theme-browser .theme .theme-installed{background:#0074a2}.theme-browser .theme .theme-installed:before{content:'\f147'}.theme-browser .theme.is-installed .theme-actions .button-primary{display:none!important}.theme-install-php a.browse-themes,.theme-install-php a.upload{cursor:pointer}.theme-install-php a.browse-themes,.theme-install-php.show-upload-theme a.upload{display:none}.theme-install-php.show-upload-theme a.browse-themes{display:inline}.upload-plugin,.upload-theme{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:none;margin:0;padding:0;width:100%;overflow:hidden;position:relative;top:10px}.upload-plugin,body.show-upload-theme .upload-theme{display:block}.upload-plugin .wp-upload-form,.upload-theme .wp-upload-form{background:#fafafa;border:1px solid #e5e5e5;padding:30px;margin:30px auto;max-width:380px}.upload-plugin .install-help,.upload-theme .install-help{color:#999;font-size:18px;font-style:normal;margin:0;padding:40px 0 0;text-align:center}body.show-upload-theme .upload-theme+.wp-filter,body.show-upload-theme .upload-theme+.wp-filter+.theme-browser{display:none}p.no-themes{color:#999;font-size:18px;font-style:normal;margin:0;padding:0;text-align:center;display:none}body.no-results p.no-themes{display:block}.theme-install-php .add-new-theme,body.show-upload-theme p.no-themes{display:none!important}@media only screen and (max-width:1120px){.upload-theme .wp-upload-form{margin:20px 0;max-width:100%}.upload-theme .install-help{font-size:15px;padding:20px 0 0;text-align:left}}.rating{margin:15px 0 0}.rating span:before{color:#e6b800;content:"\f154";display:inline-block;-webkit-font-smoothing:antialiased;font:400 20px/1 dashicons;vertical-align:top}.rating-10 span.one:before,.rating-30 span.two:before,.rating-50 span.three:before,.rating-70 span.four:before,.rating-90 span.five:before{content:"\f459"}.rating-100 span.five:before,.rating-100 span.four:before,.rating-100 span.one:before,.rating-100 span.three:before,.rating-100 span.two:before,.rating-20 span.one:before,.rating-30 span.one:before,.rating-40 span.one:before,.rating-40 span.two:before,.rating-50 span.one:before,.rating-50 span.two:before,.rating-60 span.one:before,.rating-60 span.three:before,.rating-60 span.two:before,.rating-70 span.one:before,.rating-70 span.three:before,.rating-70 span.two:before,.rating-80 span.four:before,.rating-80 span.one:before,.rating-80 span.three:before,.rating-80 span.two:before,.rating-90 span.four:before,.rating-90 span.one:before,.rating-90 span.three:before,.rating-90 span.two:before{content:"\f155"}.rating .ratings{display:block;line-height:20px;color:#999}.appearance_page_custom-header #headimg{border:1px solid #DFDFDF;overflow:hidden;width:100%}.appearance_page_custom-header #upload-form p label{font-size:12px}.appearance_page_custom-header .available-headers .default-header{float:left;margin:0 20px 20px 0}.appearance_page_custom-header .random-header{clear:both;margin:0 20px 20px 0;vertical-align:middle}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-right:10px}.appearance_page_custom-header .available-headers label img{vertical-align:middle}div#custom-background-image{min-height:100px;border:1px solid #dfdfdf}div#custom-background-image img{max-width:400px;max-height:300px}body.full-overlay-active{overflow:hidden}.wp-full-overlay{background:0 0;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;left:0;right:0;height:100%;min-width:0}.wp-full-overlay-sidebar{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:fixed;width:300px;height:100%;top:0;bottom:0;left:0;padding:0;margin:0;z-index:10;background:#eee;border-right:none}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{overflow:visible}.wp-full-overlay.collapsed,.wp-full-overlay.expanded .wp-full-overlay-sidebar{margin-left:0!important}.wp-full-overlay.expanded{margin-left:300px}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-left:-300px}.wp-full-overlay-sidebar:after{content:'';display:block;position:absolute;top:0;bottom:0;right:0;width:3px;z-index:1000}.wp-full-overlay-main{position:absolute;left:0;right:0;top:0;bottom:0;height:100%}.wp-full-overlay-sidebar .wp-full-overlay-header{position:absolute;left:0;right:0;height:45px;padding:0 15px;line-height:45px;z-index:10;margin:0;border-top:none;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-header a.back{margin-top:9px}.wp-full-overlay-sidebar .wp-full-overlay-footer{bottom:0;border-bottom:none;border-top:none;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{position:absolute;top:45px;bottom:45px;left:0;right:0;overflow:auto}.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header{padding:0}.theme-install-overlay .close-full-overlay,.theme-install-overlay .next-theme,.theme-install-overlay .previous-theme{display:block;position:relative;float:left;width:45px;height:45px;padding-right:2px;background:#eee;border-right:1px solid #ddd;color:#444;cursor:pointer;text-decoration:none;-webkit-transition:color .1s ease-in-out,background .1s ease-in-out;transition:color .1s ease-in-out,background .1s ease-in-out}.theme-install-overlay .close-full-overlay:focus,.theme-install-overlay .close-full-overlay:hover,.theme-install-overlay .next-theme:focus,.theme-install-overlay .next-theme:hover,.theme-install-overlay .previous-theme:focus,.theme-install-overlay .previous-theme:hover{background:#ddd;border-color:#ccc;color:#000;outline:0;-webkit-box-shadow:none;box-shadow:none}.theme-install-overlay .close-full-overlay:before{font:400 22px/1 dashicons;content:"\f335";position:relative;top:7px;left:13px}.theme-install-overlay .previous-theme:before{font:400 20px/1 dashicons;content:"\f341";position:relative;top:6px;left:14px}.theme-install-overlay .next-theme:before{font:400 20px/1 dashicons;content:"\f345";position:relative;top:6px;left:13px}.theme-install-overlay .next-theme.disabled,.theme-install-overlay .next-theme.disabled:focus,.theme-install-overlay .next-theme.disabled:hover,.theme-install-overlay .previous-theme.disabled,.theme-install-overlay .previous-theme.disabled:focus,.theme-install-overlay .previous-theme.disabled:hover{color:#bbb;background:#eee;cursor:default;pointer-events:none}.rtl .theme-install-overlay .previous-theme:before{content:"\f345"}.rtl .theme-install-overlay .next-theme:before{content:"\f341"}.wp-full-overlay a.collapse-sidebar{position:absolute;bottom:12px;left:0;z-index:50;display:block;width:19px;height:19px;margin-left:15px;padding:0;-webkit-border-radius:50%;border-radius:50%;color:#777;text-decoration:none}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay.collapsed .collapse-sidebar{position:absolute;left:100%}.wp-full-overlay .collapse-sidebar-arrow{position:static;margin-top:0;margin-left:0;display:block;width:auto;height:auto;background:0 0}.wp-full-overlay .collapse-sidebar-arrow:before{-webkit-border-radius:50%;border-radius:50%;float:left;content:"\f148";background:#eee;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.rtl .wp-full-overlay .collapse-sidebar-arrow:before,.wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:none;-ms-transform:none;transform:none}.wp-full-overlay.collapsed .collapse-sidebar-arrow{background-position:-1px -109px}.wp-full-overlay .collapse-sidebar-label{position:absolute;left:100%;line-height:20px;margin-left:10px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main,.wp-full-overlay-sidebar{-webkit-transition-property:left,right,top,bottom,width,margin;transition-property:left,right,top,bottom,width,margin;-webkit-transition-duration:.2s;transition-duration:.2s}.customize-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#customize-container{display:none;background:#fff;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;left:0;right:0;height:100%}.customize-active #customize-container{display:block}.customize-loading #customize-container iframe{opacity:0}.customize-loading #customize-container{background:url(../images/spinner.gif) center center/20px 20px no-repeat fixed #fff;-webkit-background-size:20px 20px}#customize-container iframe,.theme-install-overlay iframe{height:100%;width:100%;z-index:20;-webkit-transition:opacity .3s;transition:opacity .3s}#customize-container .collapse-sidebar{bottom:16px}#customize-controls{margin-top:0}.theme-install-overlay{display:none}.theme-install-overlay.single-theme{display:block}.install-theme-info{display:none;padding:10px 20px 60px}.single-theme .install-theme-info{padding-top:15px}.theme-install-overlay .install-theme-info{display:block}.install-theme-info .theme-install{float:right;margin-top:18px}.install-theme-info .theme-name{font-size:16px;line-height:24px;margin-bottom:0;margin-top:0}.install-theme-info .theme-screenshot{margin-top:15px;width:258px;border:1px solid #ccc}.install-theme-info .theme-details{overflow:hidden}.theme-details .theme-version{margin:15px 0;float:left}.theme-details .star-rating{margin:7px 0;float:right}.theme-details .theme-description{float:left;color:#777;line-height:20px;max-width:100%}.theme-install-overlay .wp-full-overlay-header .theme-install{float:right;margin:8px 10px 0 0;line-height:26px}.theme-install-overlay .wp-full-overlay-sidebar{background:#eee;border-right:1px solid #ddd}.theme-install-overlay .wp-full-overlay-sidebar-content{background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.theme-install-overlay .wp-full-overlay-main{background:url(../images/spinner.gif) center center/20px 20px no-repeat #fff;-webkit-background-size:20px 20px}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-full-overlay .collapse-sidebar-arrow{background-image:url(../images/arrows-2x.png);-webkit-background-size:15px 123px;background-size:15px 123px}.customize-loading #customize-container,.theme-install-overlay .wp-full-overlay-main{background-image:url(../images/spinner-2x.gif)}.theme-install-overlay .wp-full-overlay-header .theme-install{margin-top:2px}}@media screen and (max-width:782px){.available-theme .action-links .delete-theme{float:none;margin:0;padding:0;clear:both}.available-theme .action-links .delete-theme a{padding:0}.broken-themes table{width:100%}.theme-install-overlay .wp-full-overlay-header .theme-install{margin-top:6px;line-height:normal}}.press-this #message{border-left:4px solid #7ad03a;padding:1px 12px;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.press-this #side-sortables .category-tabs li{display:inline;line-height:1.35em}body.press-this ul.category-tabs li.tabs a{color:#333}.press-this #content-resize-handle{bottom:2px}body.press-this{color:#333;margin:0;padding:0;min-width:708px;min-height:400px}.press-this #titlediv #title{font-size:1.4em}.press-this #site-heading:before{top:3px;position:relative;display:inline-block;font:400 18px/1 dashicons;speak:none;color:#727272;content:'\f120';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.press-this #wphead{height:32px;margin-left:0;margin-right:0;margin-bottom:5px}.press-this #header-logo{float:left;margin:7px 7px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.press-this #wphead h1{font-weight:400;font-size:16px;line-height:32px;margin:0;float:left}.press-this #wphead h1 a{text-decoration:none}.press-this #wphead h1 a:hover{text-decoration:underline}.press-this #message{margin:10px 0}.press-this .posting{margin-right:250px}.press-this-sidebar{float:right;width:240px;padding-top:10px}.press-this #title{margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.press-this .tagchecklist{margin-top:8px}.press-this #titlediv{margin:0}.press-this #wp-content-wrap #wp-content-editor-tools{padding:0;top:3px;overflow:hidden}.press-this .wp-media-buttons{cursor:default;padding:8px 8px 6px}.press-this #wp-content-wrap #wp-content-media-buttons a{padding:0;line-height:normal;height:auto;font-size:16px}.press-this #wp-content-wrap .mce-toolbar .mce-btn-group .mce-btn{margin:0 1px}.press-this #wp-content-wrap .mce-toolbar .mce-btn button{padding:2px 3px}.press-this #wp-content-wrap .quicktags-toolbar,.press-this #wp-content-wrap div.mce-toolbar-grp{padding-right:3px}.press-this .howto{margin-top:2px;margin-bottom:3px;font-size:12px;font-style:italic;display:block}.press-this #wp-content-editor-container{clear:none}.press-this #poststuff .inside{margin-top:18px}.press-this .category-tabs{margin-bottom:3px}.press-this #poststuff{margin:0 8px;padding:0}.press-this #photo-add-url-div input[type=text]{width:220px}#poststuff #editor-toolbar{height:30px}.posting{margin-right:212px;position:relative}.press-this .inner-sidebar{width:200px}.press-this .inner-sidebar .sleeve{padding-top:5px}.press-this #submitdiv p{margin:0;padding:6px}.press-this #submitdiv #publishing-actions{border-bottom:1px solid #dfdfdf}.press-this #publish{float:right}.press-this #poststuff h2,.press-this #poststuff h3{font-size:14px;line-height:1}.press-this #categorydiv h3,.press-this #tagsdiv-post_tag h3{cursor:pointer}.press-this #submitdiv h3{cursor:default}h3.tb{font-weight:600;font-size:12px;margin-left:5px}.press-this .postbox,.press-this .stuffbox{margin-bottom:10px;min-width:0}.press-this #submitdiv:hover .handlediv{background:0 0}.tbtitle{font-size:1.7em;outline:0;padding:3px 4px;border:1px solid #dfdfdf}.press-this .actions{float:right;margin:-19px 0 0}.press-this #extra-fields .actions{margin:-32px -7px 0 0}.press-this .actions li{float:left;list-style:none;margin-right:10px}#extra-fields .button{margin-right:5px}#photo_saving{margin:0 8px 8px;vertical-align:middle}#img_container_container{overflow:auto}#extra-fields{margin-top:10px;position:relative}#extra-fields h2{margin:12px}#waiting{margin-top:10px;overflow:hidden}#waiting span{float:right;margin:0 0 0 5px}#waiting .spinner{display:block}#extra-fields .postbox{margin-bottom:5px}#extra-fields .titlewrap{padding:0;overflow:auto;height:120px}#img_container a{float:left;overflow:hidden}#img_container a,#img_container img{width:68px;height:68px}#img_container img{border:none;background-color:#f4f4f4;cursor:pointer}#img_container a,#img_container a:link,#img_container a:visited{border:1px solid #ccc;display:block;position:relative}#img_container a:active,#img_container a:hover{border-color:#000;z-index:1000;border-width:1px}#embed-code{width:100%;height:98px}.press-this .categorydiv div.tabs-panel{height:100px}.press-this .tagsdiv .newtag{width:120px}.press-this #content{margin:5px 0;padding:0 5px;border:0;height:340px;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:19px;background:0 0}.press-this #publishing-actions .spinner{display:inline;vertical-align:middle}@media screen and (max-width:782px){.press-this ul.category-tabs li.tabs{padding:3px 5px 5px}.press-this a.wp-switch-editor{font:13px/19px "Open Sans",sans-serif;margin:5px 0 0 5px;padding:3px 8px 4px}.press-this #wp-content-media-buttons a{padding:0;line-height:normal;height:auto}.press-this #wp-content-editor-tools{padding:0;top:3px}.press-this .category-tabs{margin-top:0}.press-this .tagsdiv .newtag{width:120px;padding:3px 5px;margin-bottom:0}.press-this .tagchecklist{padding:0;margin-bottom:0}.press-this .wp_themeSkin a.mceButton{width:20px;height:20px}.press-this .wp_themeSkin .mceButton .mceIcon{margin:0}.press-this #poststuff h3,.press-this .metabox-holder h3{padding:7px 12px}.press-this input[type=checkbox],.press-this input[type=radio]{height:16px;width:16px}.press-this input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px 0 0 -4px}.press-this input[type=radio]:checked:before{font:400 21px/1 dashicons;width:6px;height:6px;margin:4px}.press-this ul.categorychecklist li,.press-this ul.categorychecklist ul{margin-top:0;margin-bottom:0}.press-this div.quicktags-toolbar input{padding:2px 4px}.press-this input,.press-this textarea{font-size:14px}.press-this .tagchecklist span{font-size:13px;line-height:1.8em}}.about-wrap{position:relative;margin:25px 40px 0 20px;max-width:1050px;font-size:15px}.about-wrap div.error,.about-wrap div.updated{display:none!important}.about-wrap hr{border:0;height:0;margin:0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:0;max-width:100%;height:auto;vertical-align:middle}.wp-badge{background:url(../images/w-logo-white.png?ver=20131202) center 24px/85px 85px no-repeat #0074a2;-webkit-background-size:85px 85px;color:#78c8e6;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:150px;text-rendering:optimizeLegibility;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.svg .wp-badge{background-image:url(../images/wordpress-logo-white.svg?ver=20131110)}.about-wrap .wp-badge{position:absolute;top:0;right:0}.about-wrap h2.nav-tab-wrapper{padding-left:6px}.about-wrap h2 .nav-tab{padding:4px 15px 6px;margin:0 3px -1px 0;font-size:18px;vertical-align:top;border-width:1px;white-space:nowrap}.about-wrap p{line-height:1.6em;font-size:14px}.about-wrap h1{margin:.2em 200px 0 0;color:#333;line-height:1.2em;font-size:2.8em;font-weight:400}.about-wrap h3{margin:2em 0 .6em;font-size:1.25em;line-height:1.5em}.about-wrap h4{color:#222}.about-wrap code,.about-wrap ol li p{font-size:14px}.about-wrap .about-description,.about-wrap .about-text{margin-top:1.4em;font-weight:400;line-height:1.6em;font-size:19px}.about-wrap .about-text{margin:1em 200px 1em 0;min-height:60px;color:#777}.about-wrap .two-col>div{position:relative;width:47.6%;margin-right:4.799999999%;float:left}.about-wrap .three-col>div{position:relative;width:29.95%;margin-right:4.999999999%;float:left}.about-wrap .col .last-feature{margin-right:0}.about-wrap .point-releases{margin-top:5px;border-bottom:1px solid #dfdfdf}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.about-wrap .headline-feature h2{margin:1.1em 0 .2em;font-size:2.4em;font-weight:300;line-height:1.3;text-align:center}.about-wrap .feature-list h2{margin:30px 0 15px;text-align:center}.about-wrap .dfw h3{margin-top:1em;text-align:center}.about-wrap .feature-section h4{margin:1.4em 0 .6em;font-size:1.2em}.about-wrap .feature-section p{margin-top:.6em}.about-wrap .dfw p{max-width:68%;margin:0 auto 20px}.about-wrap .featured-image{text-align:center}.about-wrap .feature-section{overflow:hidden;padding-bottom:20px}.about-wrap .headline-feature .feature-section{margin:0 auto;max-width:82%}.about-wrap .headline-feature .feature-section .col:first-child{float:left;margin:15px 5% 0 0;width:55%}.about-wrap .headline-feature .feature-section .col:last-child{float:right;margin:15px 0 40px;width:40%}.about-wrap .feature-list .feature-section{margin-top:0}.about-wrap .dfw .feature-section{overflow:visible}.about-wrap .dfw-container{position:relative;overflow:hidden;margin-top:50px;-webkit-box-shadow:0 0 10px rgba(0,0,0,.25);box-shadow:0 0 10px rgba(0,0,0,.25)}.about-wrap .dfw-container .overlay-image{position:absolute;top:0;left:0;-webkit-transition:.8s -webkit-transform cubic-bezier(.9,.03,1,.61),.65s opacity linear;transition:.8s transform cubic-bezier(.9,.03,1,.61),.65s opacity linear}.about-wrap .dfw-container .overlay-image.fade-in{opacity:0}.about-wrap .dfw-container .overlay-image.from-left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.about-wrap .dfw-container:hover .overlay-image{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:.7s -webkit-transform cubic-bezier(0,.8,.8,1),.8s opacity linear;transition:.7s transform cubic-bezier(0,.8,.8,1),.8s opacity linear}.about-wrap .return-to-dashboard{margin:30px 0 0 -5px;font-size:14px;font-weight:700}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap .feature-list svg{float:left;clear:left;margin:15px 15px 0 0;height:90px;width:90px;background-color:#ccc;-webkit-border-radius:50%;border-radius:50%;fill:#999;border:1px solid #c1c1c1}.about-wrap .feature-list.finer-points h4,.about-wrap .feature-list.finer-points p{margin-left:115px}.about-wrap h4.wp-people-group{margin-top:2.6em;font-size:16px}.about-wrap ul.wp-people-group{overflow:hidden;padding:0 5px;margin:0 -15px 0 -5px}.about-wrap ul.compact{margin-bottom:0}.about-wrap li.wp-person{display:inline-block;vertical-align:top;margin-right:10px;padding-bottom:15px;height:70px;width:280px}.about-wrap ul.compact li.wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap li.wp-person img.gravatar{float:left;margin:0 10px 10px 0;padding:2px;width:60px;height:60px}.about-wrap ul.compact li.wp-person img.gravatar{width:30px;height:30px}.about-wrap li.wp-person a.web{display:block;margin:6px 0 2px;font-size:16px;font-weight:400;line-height:1.6em;text-decoration:none}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:700}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}@media screen and (max-width:782px){.about-wrap .one-col>div,.about-wrap .three-col>div,.about-wrap .two-col>div{width:100%;margin:0 0 40px;padding:0 0 40px;border-bottom:1px solid rgba(0,0,0,.1)}.about-wrap .col>div.last-feature,.about-wrap .feature-list div{margin:0;padding:0;border-bottom:none}.about-wrap .headline-feature .feature-section{max-width:100%}.about-wrap .feature-list .feature-section{padding:0 0 40px}}@media only screen and (max-width:500px){.about-wrap{margin-right:20px;margin-left:10px}.about-wrap .about-text,.about-wrap h1{margin-right:0}.about-wrap .about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}.about-wrap h2.nav-tab-wrapper{padding-left:0;border-bottom:0}.about-wrap h2 .nav-tab{margin-top:10px;margin-right:10px;border-bottom:1px solid #ccc}.about-wrap .headline-feature .feature-section div,.about-wrap .three-col div{width:100%!important;float:none!important}.about-wrap .dfw p{max-width:90%}}@media only screen and (max-width:400px){.about-wrap .feature-list svg{margin-top:15px;height:65px;width:65px}.about-wrap .feature-list.finer-points h4,.about-wrap .feature-list.finer-points p{margin-left:80px}}.no-js #message{display:block}ul.add-menu-item-tabs li{padding:3px 5px 3px 8px}.accordion-section ul.add-menu-item-tabs,.accordion-section ul.category-tabs,.accordion-section ul.wp-tab-bar{margin:0}.accordion-section .categorychecklist{margin:13px 0}#nav-menu-meta .accordion-section-content{padding:18px 13px}#nav-menu-meta .button-controls{margin-bottom:0}#nav-menus-frame{margin-left:300px;margin-top:23px}#wpbody-content #menu-settings-column{display:inline;width:281px;margin-left:-300px;clear:both;float:left;padding-top:0}#menu-settings-column .inside{clear:both;margin:10px 0 0}.metabox-holder-disabled .accordion-section-content,.metabox-holder-disabled .accordion-section-title,.metabox-holder-disabled .postbox{opacity:.5;filter:alpha(opacity=50)}.metabox-holder-disabled .button-controls .select-all{display:none}#wpbody{position:relative}.blank-slate .menu-name{height:2em}.blank-slate .menu-settings{border:none;margin-top:0;padding-top:0;overflow:hidden}.is-submenu{color:#999;font-style:italic;font-weight:400;margin-left:4px}.manage-menus{margin-top:23px;padding:10px;overflow:hidden;background:#fbfbfb}.manage-menus select{float:left;margin-right:6px}.manage-menus .selected-menu{float:left;margin:5px 6px 0 0}.manage-menus .submit-btn{float:left;margin-top:1px}.menu-edit p{margin:.3em 0 .6em}.menu-edit #post-body-content h3{margin:1em 0 10px}.menu-settings{border-top:1px solid #eee;margin-top:2em}.menu-settings dl{margin:0 0 10px;overflow:hidden;padding-left:18%}.menu-settings dd{float:left;margin:0;width:100%}.menu-settings dt{float:left;clear:both;width:21.951%;padding:3px 0 0;margin-left:-21.951%}.menu-settings label{vertical-align:baseline}.menu-edit .checkbox-input{margin-top:4px}.theme-location-set{color:#999;font-size:11px}#menu-management-liquid{float:left;min-width:100%;margin-top:3px}#menu-management{position:relative;margin-right:20px;margin-top:-3px;width:100%;background:#f5f5f5}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:0 10px 10px;border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;background:#fff}#nav-menu-footer,#nav-menu-header{padding:0 10px}#nav-menu-header{border-bottom:1px solid #dfdfdf;margin-bottom:0}#nav-menu-header .menu-name-label{margin-top:4px}.nav-menus-php #post-body div.error,.nav-menus-php #post-body div.updated{margin:0}.nav-menus-php #post-body-content{position:relative;float:none}#menu-management .menu-add-new abbr{font-weight:600}#select-nav-menu-container{text-align:right;padding:0 10px 3px;margin-bottom:5px}#select-nav-menu{width:100px;display:inline}#menu-name-label{margin-top:-2px}.widefat td.menu-location-menus{padding-bottom:5px}.menu-location-menus select{float:left}#locations-nav-menu-wrapper{padding:5px 0}.locations-nav-menu-select select{float:left;width:160px;margin-right:5px}.locations-row-links{float:left;margin:6px 0 0 6px}.locations-add-menu-link,.locations-edit-menu-link{margin:0 3px}.locations-edit-menu-link{padding-right:3px;border-right:1px solid #ccc}#wpbody .open-label{display:block;float:left}#wpbody .open-label span{padding-right:10px}.js .input-with-default-title{color:#aaa;font-style:italic}#menu-management .inside{padding:0 10px}.accordion-container .howto input,.postbox .howto input{width:180px;float:right}.accordion-container .outer-border{margin:0}.customlinkdiv .howto input{width:180px}.customlinkdiv p{margin-top:0}#nav-menu-theme-locations .howto select{width:100%}#nav-menu-theme-locations .button-controls{text-align:right}.add-menu-item-view-all{height:400px}#menu-container .submit{margin:0 0 10px;padding:0}.nav-menus-php .add-new-menu-action{float:left;margin:6px 0 0 6px;line-height:15px}.nav-menus-php .meta-sep,.nav-menus-php .submitcancel,.nav-menus-php .submitdelete{display:block;float:left;margin:6px 0;line-height:15px}.meta-sep{padding:0 2px}#cancel-save{text-decoration:underline;font-size:12px;margin-left:20px;margin-top:5px}.button-primary.right,.button-secondary.right,.button.right{float:right}.list-controls{float:left;margin-top:5px}.add-to-menu{float:right}.postbox .spinner{display:none;vertical-align:middle}.button-controls{clear:both;margin:10px 0}.hide-all,.show-all{cursor:pointer}.hide-all{display:none}#menu-name{width:270px}#manage-menu .inside{padding:0}#available-links dt{display:block}#add-custom-link .howto{font-size:12px}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px}.menu-item-textbox{width:180px}.nav-menus-php .howto span{margin-top:6px;display:block;float:left}.quick-search{width:190px}.nav-menus-php .list-wrap{display:none;clear:both;margin-bottom:10px}.nav-menus-php .postbox p.submit{margin-bottom:0}.nav-menus-php .list li{display:none;margin:0 0 5px}.nav-menus-php .list li .menu-item-title{cursor:pointer;display:block}.nav-menus-php .list li .menu-item-title input{margin-right:3px;margin-top:-3px}.menu-item-title input[type=checkbox]{display:inline-block;margin-top:-4px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{margin:0;padding:.1em 0}.menu ul{width:100%}.menu li{margin-bottom:0;position:relative}.menu-item-bar{clear:both;line-height:1.5em;position:relative;margin:9px 0 0}.menu-item-bar .menu-item-handle{border:1px solid #dfdfdf;position:relative;padding:10px 15px;height:auto;min-height:20px;width:382px;line-height:30px;overflow:hidden;word-wrap:break-word}.menu-item-bar .menu-item-handle:hover{border-color:#999}#menu-to-edit .menu-item-invalid .menu-item-handle{background:#f6c9cc;border-color:#f1acb1}.no-js .menu-item-edit-active .item-edit{display:none}.js .menu-item-handle{cursor:move}.menu li.deleting .menu-item-handle{background-image:none;background-color:#f66}.menu-item-handle .item-title{font-size:13px;font-weight:600;line-height:20px;display:block;margin-right:13em}.menu-item-handle .menu-item-title.no-title{color:#999}li.menu-item.ui-sortable-helper dl{margin-top:0}li.menu-item.ui-sortable-helper .menu-item-transport dl{margin-top:13px}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px}.menu-item-depth-0{margin-left:0}.menu-item-depth-1{margin-left:30px}.menu-item-depth-2{margin-left:60px}.menu-item-depth-3{margin-left:90px}.menu-item-depth-4{margin-left:120px}.menu-item-depth-5{margin-left:150px}.menu-item-depth-6{margin-left:180px}.menu-item-depth-7{margin-left:210px}.menu-item-depth-8{margin-left:240px}.menu-item-depth-9{margin-left:270px}.menu-item-depth-10{margin-left:300px}.menu-item-depth-11{margin-left:330px}.menu-item-depth-0 .menu-item-transport{margin-left:0}.menu-item-depth-1 .menu-item-transport{margin-left:-30px}.menu-item-depth-2 .menu-item-transport{margin-left:-60px}.menu-item-depth-3 .menu-item-transport{margin-left:-90px}.menu-item-depth-4 .menu-item-transport{margin-left:-120px}.menu-item-depth-5 .menu-item-transport{margin-left:-150px}.menu-item-depth-6 .menu-item-transport{margin-left:-180px}.menu-item-depth-7 .menu-item-transport{margin-left:-210px}.menu-item-depth-8 .menu-item-transport{margin-left:-240px}.menu-item-depth-9 .menu-item-transport{margin-left:-270px}.menu-item-depth-10 .menu-item-transport{margin-left:-300px}.menu-item-depth-11 .menu-item-transport{margin-left:-330px}body.menu-max-depth-0{min-width:950px!important}body.menu-max-depth-1{min-width:980px!important}body.menu-max-depth-2{min-width:1010px!important}body.menu-max-depth-3{min-width:1040px!important}body.menu-max-depth-4{min-width:1070px!important}body.menu-max-depth-5{min-width:1100px!important}body.menu-max-depth-6{min-width:1130px!important}body.menu-max-depth-7{min-width:1160px!important}body.menu-max-depth-8{min-width:1190px!important}body.menu-max-depth-9{min-width:1220px!important}body.menu-max-depth-10{min-width:1250px!important}body.menu-max-depth-11{min-width:1280px!important}.item-type{color:#777;font-size:12px;padding:12px 10px;line-height:18px;display:block}.item-controls{font-size:12px;position:absolute;right:20px;top:-1px}.item-controls a{text-decoration:none}.item-controls a:hover{cursor:pointer}.item-controls .item-order{padding-right:10px}.nav-menus-php .item-edit{position:absolute;right:-20px;top:0;display:block;width:30px;height:40px;margin-right:0!important;text-indent:100%;outline:0;overflow:hidden;white-space:nowrap}.menu-instructions-inactive{display:none}.menu-item-settings{display:block;width:402px;padding:10px 0 10px 10px;position:relative;z-index:10;border:1px solid #e5e5e5;border-top:none;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.menu-item-settings .field-move a{display:none;margin:0 2px}.menu-item-edit-active .menu-item-settings{display:block}.menu-item-edit-inactive .menu-item-settings{display:none}.add-menu-item-pagelinks{margin:.5em auto;text-align:center}.link-to-original{display:block;margin:0 0 10px;padding:3px 5px 5px;border:1px solid #dfdfdf;color:#777;font-size:12px;font-style:italic}.link-to-original a{padding-left:4px;font-style:normal}.hidden-field{display:none}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-right:10px;float:left}.description-thin{width:190px;height:40px}.description-wide{width:390px}.menu-item-actions{padding-top:15px}#cancel-save{cursor:pointer}.nav-menus-php .major-publishing-actions{clear:both;padding:3px 0 6px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:right;float:right;line-height:23px;margin:4px 0 1px}.nav-menus-php .blank-slate .menu-settings{display:none}.nav-menus-php .delete-action{float:left;margin-top:2px}.nav-menus-php .submitbox .submitcancel{border-bottom:1px solid #0074a2;padding:1px 2px;color:#0074a2;text-decoration:none}.nav-menus-php .submitbox .submitcancel:hover{background:#0074a2;color:#fff}.nav-menus-php .major-publishing-actions .form-invalid{padding-left:4px;margin-left:-4px}#menu-item-name-wrap:after,#menu-item-url-wrap:after,#menu-name-label:after,#menu-settings-column .inside:after,#nav-menus-frame:after,.nav-menus-php #post-body-content:after,.nav-menus-php .button-controls:after,.nav-menus-php .major-publishing-actions:after,.nav-menus-php .menu-item-settings:after{clear:both;content:".";display:block;height:0;visibility:hidden}#menu-item-name-wrap,#menu-item-url-wrap,#nav-menus-frame,.button-controls{display:block}@media screen and (max-width:782px){body.nav-menus-php{min-width:0!important}#nav-menus-frame{margin-left:0;float:none;width:100%}#wpbody-content #menu-settings-column{display:block;width:100%;float:none;margin-left:0}#side-sortables .add-menu-item-tabs{margin:15px 0 14px}ul.add-menu-item-tabs li.tabs{padding:13px 15px 14px}.nav-menus-php .item-controls .item-type{margin-top:2px}.nav-menus-php .customlinkdiv .howto input{width:65%}.nav-menus-php .quick-search{width:85%}#menu-management-liquid{margin-top:25px}.nav-menus-php .menu-name-label.howto span{margin-top:13px}.menu-name-label #menu-name{margin-top:4px}.nav-menus-php .major-publishing-actions .publishing-action{margin-top:6px}.nav-menus-php .delete-action{font-size:14px;line-height:50px;margin-top:12px}.description-wide,.menu-item-bar .menu-item-handle,.menu-item-settings{width:auto}.menu-item-settings{padding:10px}.menu-item-settings .description-thin,.menu-item-settings .description-wide{width:100%;height:auto}.menu-item-settings input{width:100%}.menu-settings dl{padding-left:0}.menu-settings dd{float:none;width:100%;margin-bottom:15px}.menu-settings dt{float:none;width:auto;margin-left:0;margin-bottom:15px}}@media only screen and (max-width:768px){#menu-locations-wrap .widefat{width:100%}}.widget{margin:0 auto 10px;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.widget-top{font-size:13px;font-weight:600;background:#f7f7f7}.widget-top a.widget-action,.widget-top a.widget-action:hover{-webkit-box-shadow:none;box-shadow:none;outline:0;text-decoration:none}.widget-title h4{margin:0;padding:15px;line-height:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.widgets-holder-wrap .widget-inside{border-top:none;padding:1px 15px 15px;line-height:16px}#available-widgets .widget-description,#widgets-right a.widget-control-edit,.in-widget-title{color:#666}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.widget.ui-draggable-dragging{min-width:100%}.widget.ui-sortable-helper{opacity:.8}.widget-placeholder{border:1px dashed #bbb;margin:0 auto 10px;height:45px;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#widgets-right .widget-placeholder{margin-top:0}#widgets-right .closed .widget-placeholder{height:0;border:0;margin-top:-10px}.sidebar-name{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.sidebar-name-arrow{position:absolute;top:0;right:0;bottom:0}.js .sidebar-name{cursor:pointer}.sidebar-name h3{margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap}.widgets-holder-wrap .description{padding:0 0 15px;margin:0;font-style:normal;color:#777}#widgets-right .widgets-holder-wrap .description{padding-left:7px;padding-right:7px}div.widget-liquid-left{margin:0;width:38%;float:left}div.widget-liquid-right{float:right;width:58%}div#widgets-left{padding-top:12px}div#widgets-left .closed .sidebar-name,div#widgets-left .inactive-sidebar.closed .sidebar-name{margin-bottom:10px}div#widgets-left .sidebar-name h3{padding:10px 0;margin:0 10px 0 0}div#widgets-left .sidebar-name .sidebar-name-arrow:before{right:0;top:4px;padding:4px 6px 4px 4px}#widgets-left #available-widgets,div#widgets-left .widget-holder{background:0 0;border:none}#widgets-left .widgets-holder-wrap{border:none;-webkit-box-shadow:none;box-shadow:none}#available-widgets .widget-action{display:none}#available-widgets .widget{margin:0}#available-widgets .widget:nth-child(odd){clear:both}#available-widgets .widget .widget-description{display:block;padding:10px 15px;font-size:12px}#available-widgets #widget-list{position:relative}#widgets-left .inactive-sidebar{clear:both;width:100%;background:0 0;padding:0;margin:0 0 20px;border:none;-webkit-box-shadow:none;box-shadow:none}#widgets-left .inactive-sidebar.first{margin-top:40px}div#widgets-left .inactive-sidebar .widget.expanded{left:auto}.widget-title-action{float:right;position:relative}div#widgets-left .inactive-sidebar .widgets-sortables{min-height:42px;padding:0;background:0 0;margin:0;position:relative}div#widgets-right:after{content:".";display:block;height:0;clear:both;visibility:hidden}div#widgets-right .sidebars-column-1,div#widgets-right .sidebars-column-2{max-width:450px}div#widgets-right .widgets-holder-wrap{margin:10px 0 0}div#widgets-right .sidebar-description{min-height:20px;margin-top:-5px}div#widgets-right .sidebar-name h3{padding:15px 7px}div#widgets-right .sidebar-name .sidebar-name-arrow:before{right:0;top:4px}div#widgets-right .widget-top{padding:0}div#widgets-right .widgets-sortables{padding:0 8px;margin-bottom:9px;position:relative;min-height:123px}div#widgets-right .closed .widgets-sortables{min-height:0;margin-bottom:0}.sidebar-name .spinner{margin:-5px 5px;float:none}#widgets-right .widgets-holder-wrap.widget-hover{border-color:#777;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.widgets_access #widgets-left .widget .widget-top{cursor:auto}.widgets_access #wpwrap .widget-control-edit,.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description,.widgets_access #wpwrap .widgets-holder-wrap.closed .widget{display:block}.widgets_access #widgets-left .widget .widget-top:hover,.widgets_access #widgets-right .widget .widget-top:hover{border-color:#ddd}#available-widgets .widget-control-edit .edit,#widgets-left .inactive-sidebar .widget-control-edit .add,#widgets-right .widget-control-edit .add{display:none}.widget-control-edit{display:block;color:#666;background:#EEE;padding:0 15px;line-height:43px;border-left:1px solid #DDD}#widgets-left .widget-control-edit:hover,#widgets-right .widget-control-edit:hover{color:#fff;background:#444;border-left:0;outline:#444 solid 1px}.widgets-holder-wrap .sidebar-description,.widgets-holder-wrap .sidebar-name{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.editwidget{margin:0 auto}.editwidget .widget-inside{display:block;padding:0 15px}.editwidget .widget-control-actions{margin-top:20px}.js .closed br.clear,.js .widgets-holder-wrap.closed .sidebar-description,.js .widgets-holder-wrap.closed .widget,.widget-description,.widget-inside{display:none}.widget-inside{background:#fff}#removing-widget{display:none;font-weight:400;padding-left:15px;font-size:12px;line-height:1;color:#000}.js #removing-widget{color:#2ea2cc}#access-off,.no-js .widget-holder .description,.widget-control-noform,.widgets_access #access-on,.widgets_access .sidebar-name-arrow,.widgets_access .widget-action,.widgets_access .widget-holder .description{display:none}.widgets_access #widget-list,.widgets_access .widget-holder{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{-webkit-transition:opacity .1s linear;transition:opacity .1s linear;opacity:.2;pointer-events:none}.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question{opacity:1;pointer-events:auto}#available-widgets .widget-top:hover,#widgets-left .widget-in-question .widget-top,#widgets-left .widget-top:hover,.widgets-chooser ul,div#widgets-right .widget-top:hover{border-color:#999;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1)}.widgets-chooser ul.widgets-chooser-sidebars{margin:0;list-style-type:none;max-height:300px;overflow:auto}.widgets-chooser{display:none}.widgets-chooser ul{border:1px solid #ccc}.widgets-chooser li{padding:10px 15px 10px 35px;border-bottom:1px solid #ccc;background:#fff;margin:0;cursor:pointer;outline:0;position:relative;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.widgets-chooser li:focus,.widgets-chooser li:hover{background:rgba(255,255,255,.7)}.widgets-chooser li:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#999;position:absolute;top:7px;left:5px}.widgets-chooser li:last-child{border:none}.widgets-chooser li.widgets-chooser-selected{background:#2ea2cc;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#fff;position:absolute;top:7px;left:5px}.widgets-chooser .widgets-chooser-actions{padding:10px 0 12px;text-align:center}.widgets-chooser button{margin-right:5px}#available-widgets .widget .widget-top{cursor:pointer}@media screen and (max-width:480px){div.widget-liquid-left{width:100%;float:none;border-right:none;padding-right:0}#widgets-left #available-widgets .widget-top,#widgets-left .inactive-sidebar .widgets-sortables,#widgets-left .sidebar-name{margin-right:0}div.widget-liquid-right{width:100%;float:none}div.widget{margin:0 auto 10px!important;max-width:480px}}@media screen and (max-width:320px){div.widget{max-width:320px}}@media only screen and (min-width:1250px){#widgets-left #available-widgets .widget{width:49%;float:left}.widget.ui-draggable-dragging{min-width:49%}#widgets-left #available-widgets .widget:nth-child(even){float:right}#widgets-right .sidebars-column-1,#widgets-right .sidebars-column-2{float:left;width:49%}#widgets-right .sidebars-column-1{margin-right:2%}#widgets-right.single-sidebar .sidebars-column-1,#widgets-right.single-sidebar .sidebars-column-2{float:none;width:100%;margin:0}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #wp-fullscreen-tagline{font-family:KaiTi,"楷体",sans-serif}.locale-zh-cn #wp-fullscreen-modes a{font-size:12px}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-left:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title{width:8em}.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}
\ No newline at end of file
diff --git a/wp-admin/custom-background.php b/wp-admin/custom-background.php
new file mode 100644
index 0000000..8fb1901
--- /dev/null
+++ b/wp-admin/custom-background.php
@@ -0,0 +1,534 @@
+admin_header_callback = $admin_header_callback;
+ $this->admin_image_div_callback = $admin_image_div_callback;
+
+ add_action( 'admin_menu', array( $this, 'init' ) );
+
+ add_action( 'wp_ajax_custom-background-add', array( $this, 'ajax_background_add' ) );
+
+ // Unused since 3.5.0.
+ add_action( 'wp_ajax_set-background-image', array( $this, 'wp_set_background_image' ) );
+ }
+
+ /**
+ * Make private properties readable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property name.
+ * @return mixed Property.
+ */
+ public function __get( $name ) {
+ return $this->$name;
+ }
+
+ /**
+ * Make private properties settable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to set.
+ * @param mixed $value Property value.
+ * @return mixed Newly-set property.
+ */
+ public function __set( $name, $value ) {
+ return $this->$name = $value;
+ }
+
+ /**
+ * Make private properties checkable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to check if set.
+ * @return bool Whether the property is set.
+ */
+ public function __isset( $name ) {
+ return isset( $this->$name );
+ }
+
+ /**
+ * Make private properties un-settable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to unset.
+ */
+ public function __unset( $name ) {
+ unset( $this->$name );
+ }
+
+ /**
+ * Set up the hooks for the Custom Background admin page.
+ *
+ * @since 3.0.0
+ */
+ public function init() {
+ if ( ! current_user_can('edit_theme_options') )
+ return;
+
+ $this->page = $page = add_theme_page(__('Background'), __('Background'), 'edit_theme_options', 'custom-background', array($this, 'admin_page'));
+
+ add_action("load-$page", array($this, 'admin_load'));
+ add_action("load-$page", array($this, 'take_action'), 49);
+ add_action("load-$page", array($this, 'handle_upload'), 49);
+
+ if ( $this->admin_header_callback )
+ add_action("admin_head-$page", $this->admin_header_callback, 51);
+ }
+
+ /**
+ * Set up the enqueue for the CSS & JavaScript files.
+ *
+ * @since 3.0.0
+ */
+ public function admin_load() {
+ get_current_screen()->add_help_tab( array(
+ 'id' => 'overview',
+ 'title' => __('Overview'),
+ 'content' =>
+ '' . __( 'You can customize the look of your site without touching any of your theme’s code by using a custom background. Your background can be an image or a color.' ) . '
' .
+ '' . __( 'To use a background image, simply upload it or choose an image that has already been uploaded to your Media Library by clicking the “Choose Image” button. You can display a single instance of your image, or tile it to fill the screen. You can have your background fixed in place, so your site content moves on top of it, or you can have it scroll with your site.' ) . '
' .
+ '' . __( 'You can also choose a background color by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. “#ff0000” for red, or by choosing a color using the color picker.' ) . '
' .
+ '' . __( 'Don’t forget to click on the Save Changes button when you are finished.' ) . '
'
+ ) );
+
+ get_current_screen()->set_help_sidebar(
+ '' . __( 'For more information:' ) . '
' .
+ '' . __( 'Documentation on Custom Background ' ) . '
' .
+ '' . __( 'Support Forums ' ) . '
'
+ );
+
+ wp_enqueue_media();
+ wp_enqueue_script('custom-background');
+ wp_enqueue_style('wp-color-picker');
+ }
+
+ /**
+ * Execute custom background modification.
+ *
+ * @since 3.0.0
+ */
+ public function take_action() {
+
+ if ( empty($_POST) )
+ return;
+
+ if ( isset($_POST['reset-background']) ) {
+ check_admin_referer('custom-background-reset', '_wpnonce-custom-background-reset');
+ remove_theme_mod('background_image');
+ remove_theme_mod('background_image_thumb');
+ $this->updated = true;
+ return;
+ }
+
+ if ( isset($_POST['remove-background']) ) {
+ // @TODO: Uploaded files are not removed here.
+ check_admin_referer('custom-background-remove', '_wpnonce-custom-background-remove');
+ set_theme_mod('background_image', '');
+ set_theme_mod('background_image_thumb', '');
+ $this->updated = true;
+ wp_safe_redirect( $_POST['_wp_http_referer'] );
+ return;
+ }
+
+ if ( isset($_POST['background-repeat']) ) {
+ check_admin_referer('custom-background');
+ if ( in_array($_POST['background-repeat'], array('repeat', 'no-repeat', 'repeat-x', 'repeat-y')) )
+ $repeat = $_POST['background-repeat'];
+ else
+ $repeat = 'repeat';
+ set_theme_mod('background_repeat', $repeat);
+ }
+
+ if ( isset($_POST['background-position-x']) ) {
+ check_admin_referer('custom-background');
+ if ( in_array($_POST['background-position-x'], array('center', 'right', 'left')) )
+ $position = $_POST['background-position-x'];
+ else
+ $position = 'left';
+ set_theme_mod('background_position_x', $position);
+ }
+
+ if ( isset($_POST['background-attachment']) ) {
+ check_admin_referer('custom-background');
+ if ( in_array($_POST['background-attachment'], array('fixed', 'scroll')) )
+ $attachment = $_POST['background-attachment'];
+ else
+ $attachment = 'fixed';
+ set_theme_mod('background_attachment', $attachment);
+ }
+
+ if ( isset($_POST['background-color']) ) {
+ check_admin_referer('custom-background');
+ $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['background-color']);
+ if ( strlen($color) == 6 || strlen($color) == 3 )
+ set_theme_mod('background_color', $color);
+ else
+ set_theme_mod('background_color', '');
+ }
+
+ $this->updated = true;
+ }
+
+ /**
+ * Display the custom background page.
+ *
+ * @since 3.0.0
+ */
+ public function admin_page() {
+?>
+
+
+
+
+
+
+ Customizer.' ),
+ admin_url( 'customize.php?autofocus[control]=background_image' )
+ );
+ ?>
+
+
+
+
+updated ) ) { ?>
+
+
Visit your site to see how it looks.' ), home_url( '/' ) ); ?>
+
+
+
+
+
+
+
+
+
+
+
+ false);
+
+ $uploaded_file = $_FILES['import'];
+ $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'], false );
+ if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) )
+ wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) );
+
+ $file = wp_handle_upload($uploaded_file, $overrides);
+
+ if ( isset($file['error']) )
+ wp_die( $file['error'] );
+
+ $url = $file['url'];
+ $type = $file['type'];
+ $file = $file['file'];
+ $filename = basename($file);
+
+ // Construct the object array
+ $object = array(
+ 'post_title' => $filename,
+ 'post_content' => $url,
+ 'post_mime_type' => $type,
+ 'guid' => $url,
+ 'context' => 'custom-background'
+ );
+
+ // Save the data
+ $id = wp_insert_attachment($object, $file);
+
+ // Add the meta-data
+ wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
+ update_post_meta( $id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) );
+
+ set_theme_mod('background_image', esc_url_raw($url));
+
+ $thumbnail = wp_get_attachment_image_src( $id, 'thumbnail' );
+ set_theme_mod('background_image_thumb', esc_url_raw( $thumbnail[0] ) );
+
+ /** This action is documented in wp-admin/custom-header.php */
+ do_action( 'wp_create_file_in_uploads', $file, $id ); // For replication
+ $this->updated = true;
+ }
+
+ /**
+ * AJAX handler for adding custom background context to an attachment.
+ *
+ * Triggered when the user adds a new background image from the
+ * Media Manager.
+ *
+ * @since 4.1.0
+ */
+ public function ajax_background_add() {
+ check_ajax_referer( 'background-add', 'nonce' );
+
+ if ( ! current_user_can( 'edit_theme_options' ) ) {
+ wp_send_json_error();
+ }
+
+ $attachment_id = absint( $_POST['attachment_id'] );
+ if ( $attachment_id < 1 ) {
+ wp_send_json_error();
+ }
+
+ update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_stylesheet() );
+
+ wp_send_json_success();
+ }
+
+ /**
+ *
+ * @since 3.4.0
+ * @deprecated 3.5.0
+ */
+ public function attachment_fields_to_edit( $form_fields ) {
+ return $form_fields;
+ }
+
+ /**
+ *
+ * @since 3.4.0
+ * @deprecated 3.5.0
+ */
+ public function filter_upload_tabs( $tabs ) {
+ return $tabs;
+ }
+
+ /**
+ *
+ * @since 3.4.0
+ * @deprecated 3.5.0
+ */
+ public function wp_set_background_image() {
+ if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit;
+ $attachment_id = absint($_POST['attachment_id']);
+ /** This filter is documented in wp-admin/includes/media.php */
+ $sizes = array_keys(apply_filters( 'image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size')) ));
+ $size = 'thumbnail';
+ if ( in_array( $_POST['size'], $sizes ) )
+ $size = esc_attr( $_POST['size'] );
+
+ update_post_meta( $attachment_id, '_wp_attachment_is_custom_background', get_option('stylesheet' ) );
+ $url = wp_get_attachment_image_src( $attachment_id, $size );
+ $thumbnail = wp_get_attachment_image_src( $attachment_id, 'thumbnail' );
+ set_theme_mod( 'background_image', esc_url_raw( $url[0] ) );
+ set_theme_mod( 'background_image_thumb', esc_url_raw( $thumbnail[0] ) );
+ exit;
+ }
+}
diff --git a/wp-admin/custom-header.php b/wp-admin/custom-header.php
new file mode 100644
index 0000000..0e5ffa6
--- /dev/null
+++ b/wp-admin/custom-header.php
@@ -0,0 +1,1381 @@
+admin_header_callback = $admin_header_callback;
+ $this->admin_image_div_callback = $admin_image_div_callback;
+
+ add_action( 'admin_menu', array( $this, 'init' ) );
+
+ add_action( 'customize_save_after', array( $this, 'customize_set_last_used' ) );
+ add_action( 'wp_ajax_custom-header-crop', array( $this, 'ajax_header_crop' ) );
+ add_action( 'wp_ajax_custom-header-add', array( $this, 'ajax_header_add' ) );
+ add_action( 'wp_ajax_custom-header-remove', array( $this, 'ajax_header_remove' ) );
+ }
+
+ /**
+ * Make private properties readable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to get.
+ * @return mixed Property.
+ */
+ public function __get( $name ) {
+ return $this->$name;
+ }
+
+ /**
+ * Make private properties settable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to set.
+ * @param mixed $value Property value.
+ * @return mixed Newly-set property.
+ */
+ public function __set( $name, $value ) {
+ return $this->$name = $value;
+ }
+
+ /**
+ * Make private properties checkable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to check if set.
+ * @return bool Whether the property is set.
+ */
+ public function __isset( $name ) {
+ return isset( $this->$name );
+ }
+
+ /**
+ * Make private properties un-settable for backwards compatibility.
+ *
+ * @since 4.0.0
+ * @access public
+ *
+ * @param string $name Property to unset.
+ */
+ public function __unset( $name ) {
+ unset( $this->$name );
+ }
+
+ /**
+ * Set up the hooks for the Custom Header admin page.
+ *
+ * @since 2.1.0
+ */
+ public function init() {
+ if ( ! current_user_can('edit_theme_options') )
+ return;
+
+ $this->page = $page = add_theme_page(__('Header'), __('Header'), 'edit_theme_options', 'custom-header', array($this, 'admin_page'));
+
+ add_action("admin_print_scripts-$page", array($this, 'js_includes'));
+ add_action("admin_print_styles-$page", array($this, 'css_includes'));
+ add_action("admin_head-$page", array($this, 'help') );
+ add_action("admin_head-$page", array($this, 'take_action'), 50);
+ add_action("admin_head-$page", array($this, 'js'), 50);
+ if ( $this->admin_header_callback )
+ add_action("admin_head-$page", $this->admin_header_callback, 51);
+
+ }
+
+ /**
+ * Adds contextual help.
+ *
+ * @since 3.0.0
+ */
+ public function help() {
+ get_current_screen()->add_help_tab( array(
+ 'id' => 'overview',
+ 'title' => __('Overview'),
+ 'content' =>
+ '' . __( 'This screen is used to customize the header section of your theme.') . '
' .
+ '' . __( 'You can choose from the theme’s default header images, or use one of your own. You can also customize how your Site Title and Tagline are displayed.') . '
'
+ ) );
+
+ get_current_screen()->add_help_tab( array(
+ 'id' => 'set-header-image',
+ 'title' => __('Header Image'),
+ 'content' =>
+ '
' . __( 'You can set a custom image header for your site. Simply upload the image and crop it, and the new header will go live immediately. Alternatively, you can use an image that has already been uploaded to your Media Library by clicking the “Choose Image” button.' ) . '
' .
+ '' . __( 'Some themes come with additional header images bundled. If you see multiple images displayed, select the one you’d like and click the “Save Changes” button.' ) . '
' .
+ '' . __( 'If your theme has more than one default header image, or you have uploaded more than one custom header image, you have the option of having WordPress display a randomly different image on each page of your site. Click the “Random” radio button next to the Uploaded Images or Default Images section to enable this feature.') . '
' .
+ '' . __( 'If you don’t want a header image to be displayed on your site at all, click the “Remove Header Image” button at the bottom of the Header Image section of this page. If you want to re-enable the header image later, you just have to select one of the other image options and click “Save Changes”.') . '
'
+ ) );
+
+ get_current_screen()->add_help_tab( array(
+ 'id' => 'set-header-text',
+ 'title' => __('Header Text'),
+ 'content' =>
+ '' . sprintf( __( 'For most themes, the header text is your Site Title and Tagline, as defined in the General Settings section.' ), admin_url( 'options-general.php' ) ) . '
' .
+ '
' . __( 'In the Header Text section of this page, you can choose whether to display this text or hide it. You can also choose a color for the text by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. “#ff0000” for red, or by choosing a color using the color picker.' ) . '
' .
+ '' . __( 'Don’t forget to click “Save Changes” when you’re done!') . '
'
+ ) );
+
+ get_current_screen()->set_help_sidebar(
+ '' . __( 'For more information:' ) . '
' .
+ '' . __( 'Documentation on Custom Header ' ) . '
' .
+ '' . __( 'Support Forums ' ) . '
'
+ );
+ }
+
+ /**
+ * Get the current step.
+ *
+ * @since 2.6.0
+ *
+ * @return int Current step
+ */
+ public function step() {
+ if ( ! isset( $_GET['step'] ) )
+ return 1;
+
+ $step = (int) $_GET['step'];
+ if ( $step < 1 || 3 < $step ||
+ ( 2 == $step && ! wp_verify_nonce( $_REQUEST['_wpnonce-custom-header-upload'], 'custom-header-upload' ) ) ||
+ ( 3 == $step && ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'custom-header-crop-image' ) )
+ )
+ return 1;
+
+ return $step;
+ }
+
+ /**
+ * Set up the enqueue for the JavaScript files.
+ *
+ * @since 2.1.0
+ */
+ public function js_includes() {
+ $step = $this->step();
+
+ if ( ( 1 == $step || 3 == $step ) ) {
+ wp_enqueue_media();
+ wp_enqueue_script( 'custom-header' );
+ if ( current_theme_supports( 'custom-header', 'header-text' ) )
+ wp_enqueue_script( 'wp-color-picker' );
+ } elseif ( 2 == $step ) {
+ wp_enqueue_script('imgareaselect');
+ }
+ }
+
+ /**
+ * Set up the enqueue for the CSS files
+ *
+ * @since 2.7.0
+ */
+ public function css_includes() {
+ $step = $this->step();
+
+ if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) )
+ wp_enqueue_style( 'wp-color-picker' );
+ elseif ( 2 == $step )
+ wp_enqueue_style('imgareaselect');
+ }
+
+ /**
+ * Execute custom header modification.
+ *
+ * @since 2.6.0
+ */
+ public function take_action() {
+ if ( ! current_user_can('edit_theme_options') )
+ return;
+
+ if ( empty( $_POST ) )
+ return;
+
+ $this->updated = true;
+
+ if ( isset( $_POST['resetheader'] ) ) {
+ check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
+ $this->reset_header_image();
+ return;
+ }
+
+ if ( isset( $_POST['removeheader'] ) ) {
+ check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
+ $this->remove_header_image();
+ return;
+ }
+
+ if ( isset( $_POST['text-color'] ) && ! isset( $_POST['display-header-text'] ) ) {
+ check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
+ set_theme_mod( 'header_textcolor', 'blank' );
+ } elseif ( isset( $_POST['text-color'] ) ) {
+ check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
+ $_POST['text-color'] = str_replace( '#', '', $_POST['text-color'] );
+ $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['text-color']);
+ if ( strlen($color) == 6 || strlen($color) == 3 )
+ set_theme_mod('header_textcolor', $color);
+ elseif ( ! $color )
+ set_theme_mod( 'header_textcolor', 'blank' );
+ }
+
+ if ( isset( $_POST['default-header'] ) ) {
+ check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
+ $this->set_header_image( $_POST['default-header'] );
+ return;
+ }
+ }
+
+ /**
+ * Process the default headers
+ *
+ * @since 3.0.0
+ */
+ public function process_default_headers() {
+ global $_wp_default_headers;
+
+ if ( !isset($_wp_default_headers) )
+ return;
+
+ if ( ! empty( $this->default_headers ) ) {
+ return;
+ }
+
+ $this->default_headers = $_wp_default_headers;
+ $template_directory_uri = get_template_directory_uri();
+ $stylesheet_directory_uri = get_stylesheet_directory_uri();
+ foreach ( array_keys($this->default_headers) as $header ) {
+ $this->default_headers[$header]['url'] = sprintf( $this->default_headers[$header]['url'], $template_directory_uri, $stylesheet_directory_uri );
+ $this->default_headers[$header]['thumbnail_url'] = sprintf( $this->default_headers[$header]['thumbnail_url'], $template_directory_uri, $stylesheet_directory_uri );
+ }
+ }
+
+ /**
+ * Display UI for selecting one of several default headers.
+ *
+ * Show the random image option if this theme has multiple header images.
+ * Random image option is on by default if no header has been set.
+ *
+ * @since 3.0.0
+ */
+ public function show_header_selector( $type = 'default' ) {
+ if ( 'default' == $type ) {
+ $headers = $this->default_headers;
+ } else {
+ $headers = get_uploaded_header_images();
+ $type = 'uploaded';
+ }
+
+ if ( 1 < count( $headers ) ) {
+ echo '';
+ echo ' ';
+ echo __( 'Random: Show a different image on each page.' );
+ echo ' ';
+ echo '
';
+ }
+
+ echo '';
+ }
+
+ /**
+ * Execute JavaScript depending on step.
+ *
+ * @since 2.1.0
+ */
+ public function js() {
+ $step = $this->step();
+ if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) )
+ $this->js_1();
+ elseif ( 2 == $step )
+ $this->js_2();
+ }
+
+ /**
+ * Display JavaScript based on Step 1 and 3.
+ *
+ * @since 2.6.0
+ */
+ public function js_1() {
+ $default_color = '';
+ if ( current_theme_supports( 'custom-header', 'default-text-color' ) ) {
+ $default_color = get_theme_support( 'custom-header', 'default-text-color' );
+ if ( $default_color && false === strpos( $default_color, '#' ) ) {
+ $default_color = '#' . $default_color;
+ }
+ }
+ ?>
+
+
+
+
+process_default_headers();
+?>
+
+
+
+
+
+
+
+ Customizer.' ),
+ admin_url( 'customize.php?autofocus[control]=header_image' )
+ );
+ ?>
+
+
+
+
+updated ) ) { ?>
+
+
Visit your site to see how it looks.' ), home_url( '/' ) ); ?>
+
+
+
+
+
+
+
+
+
+
+step_2_manage_upload();
+ $attachment_id = $data['attachment_id'];
+ $file = $data['file'];
+ $url = $data['url'];
+ }
+
+ if ( file_exists( $file ) ) {
+ list( $width, $height, $type, $attr ) = getimagesize( $file );
+ } else {
+ $data = wp_get_attachment_metadata( $attachment_id );
+ $height = isset( $data[ 'height' ] ) ? $data[ 'height' ] : 0;
+ $width = isset( $data[ 'width' ] ) ? $data[ 'width' ] : 0;
+ unset( $data );
+ }
+
+ $max_width = 0;
+ // For flex, limit size of image displayed to 1500px unless theme says otherwise
+ if ( current_theme_supports( 'custom-header', 'flex-width' ) )
+ $max_width = 1500;
+
+ if ( current_theme_supports( 'custom-header', 'max-width' ) )
+ $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) );
+ $max_width = max( $max_width, get_theme_support( 'custom-header', 'width' ) );
+
+ // If flexible height isn't supported and the image is the exact right size
+ if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' )
+ && $width == get_theme_support( 'custom-header', 'width' ) && $height == get_theme_support( 'custom-header', 'height' ) )
+ {
+ // Add the meta-data
+ if ( file_exists( $file ) )
+ wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );
+
+ $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) );
+
+ /**
+ * Fires after the header image is set or an error is returned.
+ *
+ * @since 2.1.0
+ *
+ * @param string $file Path to the file.
+ * @param int $attachment_id Attachment ID.
+ */
+ do_action( 'wp_create_file_in_uploads', $file, $attachment_id ); // For replication
+
+ return $this->finished();
+ } elseif ( $width > $max_width ) {
+ $oitar = $width / $max_width;
+ $image = wp_crop_image($attachment_id, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file));
+ if ( ! $image || is_wp_error( $image ) )
+ wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
+
+ /** This filter is documented in wp-admin/custom-header.php */
+ $image = apply_filters( 'wp_create_file_in_uploads', $image, $attachment_id ); // For replication
+
+ $url = str_replace(basename($url), basename($image), $url);
+ $width = $width / $oitar;
+ $height = $height / $oitar;
+ } else {
+ $oitar = 1;
+ }
+ ?>
+
+
+ false);
+
+ $uploaded_file = $_FILES['import'];
+ $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'], false );
+ if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) )
+ wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) );
+
+ $file = wp_handle_upload($uploaded_file, $overrides);
+
+ if ( isset($file['error']) )
+ wp_die( $file['error'], __( 'Image Upload Error' ) );
+
+ $url = $file['url'];
+ $type = $file['type'];
+ $file = $file['file'];
+ $filename = basename($file);
+
+ // Construct the object array
+ $object = array(
+ 'post_title' => $filename,
+ 'post_content' => $url,
+ 'post_mime_type' => $type,
+ 'guid' => $url,
+ 'context' => 'custom-header'
+ );
+
+ // Save the data
+ $attachment_id = wp_insert_attachment( $object, $file );
+ return compact( 'attachment_id', 'file', 'filename', 'url', 'type' );
+ }
+
+ /**
+ * Display third step of custom header image page.
+ *
+ * @since 2.1.0
+ */
+ public function step_3() {
+ check_admin_referer( 'custom-header-crop-image' );
+
+ if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
+ wp_die( __( 'Cheatin’ uh?' ), 403 );
+
+ if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) )
+ wp_die( __( 'Cheatin’ uh?' ), 403 );
+
+ if ( $_POST['oitar'] > 1 ) {
+ $_POST['x1'] = $_POST['x1'] * $_POST['oitar'];
+ $_POST['y1'] = $_POST['y1'] * $_POST['oitar'];
+ $_POST['width'] = $_POST['width'] * $_POST['oitar'];
+ $_POST['height'] = $_POST['height'] * $_POST['oitar'];
+ }
+
+ $attachment_id = absint( $_POST['attachment_id'] );
+ $original = get_attached_file($attachment_id);
+
+ $dimensions = $this->get_header_dimensions( array(
+ 'height' => $_POST['height'],
+ 'width' => $_POST['width'],
+ ) );
+ $height = $dimensions['dst_height'];
+ $width = $dimensions['dst_width'];
+
+ if ( empty( $_POST['skip-cropping'] ) )
+ $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], $width, $height );
+ elseif ( ! empty( $_POST['create-new-attachment'] ) )
+ $cropped = _copy_image_file( $attachment_id );
+ else
+ $cropped = get_attached_file( $attachment_id );
+
+ if ( ! $cropped || is_wp_error( $cropped ) )
+ wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
+
+ /** This filter is documented in wp-admin/custom-header.php */
+ $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication
+
+ $object = $this->create_attachment_object( $cropped, $attachment_id );
+
+ if ( ! empty( $_POST['create-new-attachment'] ) )
+ unset( $object['ID'] );
+
+ // Update the attachment
+ $attachment_id = $this->insert_attachment( $object, $cropped );
+
+ $url = $object['guid'];
+ $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) );
+
+ // Cleanup.
+ $medium = str_replace( basename( $original ), 'midsize-' . basename( $original ), $original );
+ if ( file_exists( $medium ) ) {
+ /**
+ * Filter the path of the file to delete.
+ *
+ * @since 2.1.0
+ *
+ * @param string $medium Path to the file to delete.
+ */
+ @unlink( apply_filters( 'wp_delete_file', $medium ) );
+ }
+
+ if ( empty( $_POST['create-new-attachment'] ) && empty( $_POST['skip-cropping'] ) ) {
+ /** This filter is documented in wp-admin/custom-header.php */
+ @unlink( apply_filters( 'wp_delete_file', $original ) );
+ }
+
+ return $this->finished();
+ }
+
+ /**
+ * Display last step of custom header image page.
+ *
+ * @since 2.1.0
+ */
+ public function finished() {
+ $this->updated = true;
+ $this->step_1();
+ }
+
+ /**
+ * Display the page based on the current step.
+ *
+ * @since 2.1.0
+ */
+ public function admin_page() {
+ if ( ! current_user_can('edit_theme_options') )
+ wp_die(__('You do not have permission to customize headers.'));
+ $step = $this->step();
+ if ( 2 == $step )
+ $this->step_2();
+ elseif ( 3 == $step )
+ $this->step_3();
+ else
+ $this->step_1();
+ }
+
+ /**
+ * Unused since 3.5.0.
+ *
+ * @since 3.4.0
+ */
+ public function attachment_fields_to_edit( $form_fields ) {
+ return $form_fields;
+ }
+
+ /**
+ * Unused since 3.5.0.
+ *
+ * @since 3.4.0
+ */
+ public function filter_upload_tabs( $tabs ) {
+ return $tabs;
+ }
+
+ /**
+ * Choose a header image, selected from existing uploaded and default headers,
+ * or provide an array of uploaded header data (either new, or from media library).
+ *
+ * @param mixed $choice Which header image to select. Allows for values of 'random-default-image',
+ * for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling
+ * among the uploaded images; the key of a default image registered for that theme; and
+ * the key of an image uploaded for that theme (the basename of the URL).
+ * Or an array of arguments: attachment_id, url, width, height. All are required.
+ *
+ * @since 3.4.0
+ */
+ final public function set_header_image( $choice ) {
+ if ( is_array( $choice ) || is_object( $choice ) ) {
+ $choice = (array) $choice;
+ if ( ! isset( $choice['attachment_id'] ) || ! isset( $choice['url'] ) )
+ return;
+
+ $choice['url'] = esc_url_raw( $choice['url'] );
+
+ $header_image_data = (object) array(
+ 'attachment_id' => $choice['attachment_id'],
+ 'url' => $choice['url'],
+ 'thumbnail_url' => $choice['url'],
+ 'height' => $choice['height'],
+ 'width' => $choice['width'],
+ );
+
+ update_post_meta( $choice['attachment_id'], '_wp_attachment_is_custom_header', get_stylesheet() );
+ set_theme_mod( 'header_image', $choice['url'] );
+ set_theme_mod( 'header_image_data', $header_image_data );
+ return;
+ }
+
+ if ( in_array( $choice, array( 'remove-header', 'random-default-image', 'random-uploaded-image' ) ) ) {
+ set_theme_mod( 'header_image', $choice );
+ remove_theme_mod( 'header_image_data' );
+ return;
+ }
+
+ $uploaded = get_uploaded_header_images();
+ if ( $uploaded && isset( $uploaded[ $choice ] ) ) {
+ $header_image_data = $uploaded[ $choice ];
+
+ } else {
+ $this->process_default_headers();
+ if ( isset( $this->default_headers[ $choice ] ) )
+ $header_image_data = $this->default_headers[ $choice ];
+ else
+ return;
+ }
+
+ set_theme_mod( 'header_image', esc_url_raw( $header_image_data['url'] ) );
+ set_theme_mod( 'header_image_data', $header_image_data );
+ }
+
+ /**
+ * Remove a header image.
+ *
+ * @since 3.4.0
+ */
+ final public function remove_header_image() {
+ return $this->set_header_image( 'remove-header' );
+ }
+
+ /**
+ * Reset a header image to the default image for the theme.
+ *
+ * This method does not do anything if the theme does not have a default header image.
+ *
+ * @since 3.4.0
+ */
+ final public function reset_header_image() {
+ $this->process_default_headers();
+ $default = get_theme_support( 'custom-header', 'default-image' );
+
+ if ( ! $default )
+ return $this->remove_header_image();
+
+ $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
+
+ $default_data = array();
+ foreach ( $this->default_headers as $header => $details ) {
+ if ( $details['url'] == $default ) {
+ $default_data = $details;
+ break;
+ }
+ }
+
+ set_theme_mod( 'header_image', $default );
+ set_theme_mod( 'header_image_data', (object) $default_data );
+ }
+
+ /**
+ * Calculate width and height based on what the currently selected theme supports.
+ *
+ * @return array dst_height and dst_width of header image.
+ */
+ final public function get_header_dimensions( $dimensions ) {
+ $max_width = 0;
+ $width = absint( $dimensions['width'] );
+ $height = absint( $dimensions['height'] );
+ $theme_height = get_theme_support( 'custom-header', 'height' );
+ $theme_width = get_theme_support( 'custom-header', 'width' );
+ $has_flex_width = current_theme_supports( 'custom-header', 'flex-width' );
+ $has_flex_height = current_theme_supports( 'custom-header', 'flex-height' );
+ $has_max_width = current_theme_supports( 'custom-header', 'max-width' ) ;
+ $dst = array( 'dst_height' => null, 'dst_width' => null );
+
+ // For flex, limit size of image displayed to 1500px unless theme says otherwise
+ if ( $has_flex_width ) {
+ $max_width = 1500;
+ }
+
+ if ( $has_max_width ) {
+ $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) );
+ }
+ $max_width = max( $max_width, $theme_width );
+
+ if ( $has_flex_height && ( ! $has_flex_width || $width > $max_width ) ) {
+ $dst['dst_height'] = absint( $height * ( $max_width / $width ) );
+ }
+ elseif ( $has_flex_height && $has_flex_width ) {
+ $dst['dst_height'] = $height;
+ }
+ else {
+ $dst['dst_height'] = $theme_height;
+ }
+
+ if ( $has_flex_width && ( ! $has_flex_height || $width > $max_width ) ) {
+ $dst['dst_width'] = absint( $width * ( $max_width / $width ) );
+ }
+ elseif ( $has_flex_width && $has_flex_height ) {
+ $dst['dst_width'] = $width;
+ }
+ else {
+ $dst['dst_width'] = $theme_width;
+ }
+
+ return $dst;
+ }
+
+ /**
+ * Create an attachment 'object'.
+ *
+ * @param string $cropped Cropped image URL.
+ * @param int $parent_attachment_id Attachment ID of parent image.
+ *
+ * @return array Attachment object.
+ */
+ final public function create_attachment_object( $cropped, $parent_attachment_id ) {
+ $parent = get_post( $parent_attachment_id );
+ $parent_url = $parent->guid;
+ $url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url );
+
+ $size = @getimagesize( $cropped );
+ $image_type = ( $size ) ? $size['mime'] : 'image/jpeg';
+
+ $object = array(
+ 'ID' => $parent_attachment_id,
+ 'post_title' => basename($cropped),
+ 'post_content' => $url,
+ 'post_mime_type' => $image_type,
+ 'guid' => $url,
+ 'context' => 'custom-header'
+ );
+
+ return $object;
+ }
+
+ /**
+ * Insert an attachment and its metadata.
+ *
+ * @param array $object Attachment object.
+ * @param string $cropped Cropped image URL.
+ *
+ * @return int Attachment ID.
+ */
+ final public function insert_attachment( $object, $cropped ) {
+ $attachment_id = wp_insert_attachment( $object, $cropped );
+ $metadata = wp_generate_attachment_metadata( $attachment_id, $cropped );
+ /**
+ * Filter the header image attachment metadata.
+ *
+ * @since 3.9.0
+ *
+ * @see wp_generate_attachment_metadata()
+ *
+ * @param array $metadata Attachment metadata.
+ */
+ $metadata = apply_filters( 'wp_header_image_attachment_metadata', $metadata );
+ wp_update_attachment_metadata( $attachment_id, $metadata );
+ return $attachment_id;
+ }
+
+ /**
+ * Gets attachment uploaded by Media Manager, crops it, then saves it as a
+ * new object. Returns JSON-encoded object details.
+ */
+ public function ajax_header_crop() {
+ check_ajax_referer( 'image_editor-' . $_POST['id'], 'nonce' );
+
+ if ( ! current_user_can( 'edit_theme_options' ) ) {
+ wp_send_json_error();
+ }
+
+ if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) {
+ wp_send_json_error();
+ }
+
+ $crop_details = $_POST['cropDetails'];
+
+ $dimensions = $this->get_header_dimensions( array(
+ 'height' => $crop_details['height'],
+ 'width' => $crop_details['width'],
+ ) );
+
+ $attachment_id = absint( $_POST['id'] );
+
+ $cropped = wp_crop_image(
+ $attachment_id,
+ (int) $crop_details['x1'],
+ (int) $crop_details['y1'],
+ (int) $crop_details['width'],
+ (int) $crop_details['height'],
+ (int) $dimensions['dst_width'],
+ (int) $dimensions['dst_height']
+ );
+
+ if ( ! $cropped || is_wp_error( $cropped ) ) {
+ wp_send_json_error( array( 'message' => __( 'Image could not be processed. Please go back and try again.' ) ) );
+ }
+
+ /** This filter is documented in wp-admin/custom-header.php */
+ $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication
+
+ $object = $this->create_attachment_object( $cropped, $attachment_id );
+
+ unset( $object['ID'] );
+
+ $new_attachment_id = $this->insert_attachment( $object, $cropped );
+
+ $object['attachment_id'] = $new_attachment_id;
+ $object['width'] = $dimensions['dst_width'];
+ $object['height'] = $dimensions['dst_height'];
+
+ wp_send_json_success( $object );
+ }
+
+ /**
+ * Given an attachment ID for a header image, updates its "last used"
+ * timestamp to now.
+ *
+ * Triggered when the user tries adds a new header image from the
+ * Media Manager, even if s/he doesn't save that change.
+ */
+ public function ajax_header_add() {
+ check_ajax_referer( 'header-add', 'nonce' );
+
+ if ( ! current_user_can( 'edit_theme_options' ) ) {
+ wp_send_json_error();
+ }
+
+ $attachment_id = absint( $_POST['attachment_id'] );
+ if ( $attachment_id < 1 ) {
+ wp_send_json_error();
+ }
+
+ $key = '_wp_attachment_custom_header_last_used_' . get_stylesheet();
+ update_post_meta( $attachment_id, $key, time() );
+ update_post_meta( $attachment_id, '_wp_attachment_is_custom_header', get_stylesheet() );
+
+ wp_send_json_success();
+ }
+
+ /**
+ * Given an attachment ID for a header image, unsets it as a user-uploaded
+ * header image for the current theme.
+ *
+ * Triggered when the user clicks the overlay "X" button next to each image
+ * choice in the Customizer's Header tool.
+ */
+ public function ajax_header_remove() {
+ check_ajax_referer( 'header-remove', 'nonce' );
+
+ if ( ! current_user_can( 'edit_theme_options' ) ) {
+ wp_send_json_error();
+ }
+
+ $attachment_id = absint( $_POST['attachment_id'] );
+ if ( $attachment_id < 1 ) {
+ wp_send_json_error();
+ }
+
+ $key = '_wp_attachment_custom_header_last_used_' . get_stylesheet();
+ delete_post_meta( $attachment_id, $key );
+ delete_post_meta( $attachment_id, '_wp_attachment_is_custom_header', get_stylesheet() );
+
+ wp_send_json_success();
+ }
+
+ public function customize_set_last_used( $wp_customize ) {
+ $data = $wp_customize->get_setting( 'header_image_data' )->post_value();
+
+ if ( ! isset( $data['attachment_id'] ) ) {
+ return;
+ }
+
+ $attachment_id = $data['attachment_id'];
+ $key = '_wp_attachment_custom_header_last_used_' . get_stylesheet();
+ update_post_meta( $attachment_id, $key, time() );
+ }
+
+ public function get_default_header_images() {
+ $this->process_default_headers();
+
+ // Get the default image if there is one.
+ $default = get_theme_support( 'custom-header', 'default-image' );
+
+ if ( ! $default ) { // If not,
+ return $this->default_headers; // easy peasy.
+ }
+
+ $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
+ $already_has_default = false;
+
+ foreach ( $this->default_headers as $k => $h ) {
+ if ( $h['url'] === $default ) {
+ $already_has_default = true;
+ break;
+ }
+ }
+
+ if ( $already_has_default ) {
+ return $this->default_headers;
+ }
+
+ // If the one true image isn't included in the default set, prepend it.
+ $header_images = array();
+ $header_images['default'] = array(
+ 'url' => $default,
+ 'thumbnail_url' => $default,
+ 'description' => 'Default'
+ );
+
+ // The rest of the set comes after.
+ $header_images = array_merge( $header_images, $this->default_headers );
+ return $header_images;
+ }
+
+ public function get_uploaded_header_images() {
+ $header_images = get_uploaded_header_images();
+ $timestamp_key = '_wp_attachment_custom_header_last_used_' . get_stylesheet();
+ $alt_text_key = '_wp_attachment_image_alt';
+
+ foreach ( $header_images as &$header_image ) {
+ $header_meta = get_post_meta( $header_image['attachment_id'] );
+ $header_image['timestamp'] = isset( $header_meta[ $timestamp_key ] ) ? $header_meta[ $timestamp_key ] : '';
+ $header_image['alt_text'] = isset( $header_meta[ $alt_text_key ] ) ? $header_meta[ $alt_text_key ] : '';
+ }
+
+ return $header_images;
+ }
+}
diff --git a/wp-admin/customize.php b/wp-admin/customize.php
new file mode 100644
index 0000000..178db28
--- /dev/null
+++ b/wp-admin/customize.php
@@ -0,0 +1,313 @@
+registered;
+$wp_scripts = new WP_Scripts;
+$wp_scripts->registered = $registered;
+
+add_action( 'customize_controls_print_scripts', 'print_head_scripts', 20 );
+add_action( 'customize_controls_print_footer_scripts', '_wp_footer_scripts' );
+add_action( 'customize_controls_print_styles', 'print_admin_styles', 20 );
+
+/**
+ * Fires when Customizer controls are initialized, before scripts are enqueued.
+ *
+ * @since 3.4.0
+ */
+do_action( 'customize_controls_init' );
+
+wp_enqueue_script( 'customize-controls' );
+wp_enqueue_style( 'customize-controls' );
+
+/**
+ * Enqueue Customizer control scripts.
+ *
+ * @since 3.4.0
+ */
+do_action( 'customize_controls_enqueue_scripts' );
+
+// Let's roll.
+@header('Content-Type: ' . get_option('html_type') . '; charset=' . get_option('blog_charset'));
+
+wp_user_settings();
+_wp_admin_html_begin();
+
+$body_class = 'wp-core-ui wp-customizer js';
+
+if ( wp_is_mobile() ) :
+ $body_class .= ' mobile';
+
+ ?> is_theme_active() ) {
+ $document_title_tmpl = _x( 'Customize: %s', 'Placeholder is the document title from the preview' );
+} else {
+ $document_title_tmpl = _x( 'Live Preview: %s', 'Placeholder is the document title from the preview' );
+}
+$document_title_tmpl = html_entity_decode( $document_title_tmpl, ENT_QUOTES, 'UTF-8' ); // because exported to JS and assigned to document.title
+$admin_title = sprintf( $document_title_tmpl, __( 'Loading…' ) );
+
+?>
+
+
+
+
+
+
+
+
+
+ render_control_templates();
+
+ /**
+ * Print Customizer control scripts in the footer.
+ *
+ * @since 3.4.0
+ */
+ do_action( 'customize_controls_print_footer_scripts' );
+
+ /*
+ * If the frontend and the admin are served from the same domain, load the
+ * preview over ssl if the Customizer is being loaded over ssl. This avoids
+ * insecure content warnings. This is not attempted if the admin and frontend
+ * are on different domains to avoid the case where the frontend doesn't have
+ * ssl certs. Domain mapping plugins can allow other urls in these conditions
+ * using the customize_allowed_urls filter.
+ */
+
+ $allowed_urls = array( home_url('/') );
+ $admin_origin = parse_url( admin_url() );
+ $home_origin = parse_url( home_url() );
+ $cross_domain = ( strtolower( $admin_origin[ 'host' ] ) != strtolower( $home_origin[ 'host' ] ) );
+
+ if ( is_ssl() && ! $cross_domain )
+ $allowed_urls[] = home_url( '/', 'https' );
+
+ /**
+ * Filter the list of URLs allowed to be clicked and followed in the Customizer preview.
+ *
+ * @since 3.4.0
+ *
+ * @param array $allowed_urls An array of allowed URLs.
+ */
+ $allowed_urls = array_unique( apply_filters( 'customize_allowed_urls', $allowed_urls ) );
+
+ $fallback_url = add_query_arg( array(
+ 'preview' => 1,
+ 'template' => $wp_customize->get_template(),
+ 'stylesheet' => $wp_customize->get_stylesheet(),
+ 'preview_iframe' => true,
+ 'TB_iframe' => 'true'
+ ), home_url( '/' ) );
+
+ $login_url = add_query_arg( array(
+ 'interim-login' => 1,
+ 'customize-login' => 1
+ ), wp_login_url() );
+
+ // Prepare Customizer settings to pass to JavaScript.
+ $settings = array(
+ 'theme' => array(
+ 'stylesheet' => $wp_customize->get_stylesheet(),
+ 'active' => $wp_customize->is_theme_active(),
+ ),
+ 'url' => array(
+ 'preview' => esc_url_raw( $url ? $url : home_url( '/' ) ),
+ 'parent' => esc_url_raw( admin_url() ),
+ 'activated' => esc_url_raw( admin_url( 'themes.php?activated=true&previewed' ) ),
+ 'ajax' => esc_url_raw( admin_url( 'admin-ajax.php', 'relative' ) ),
+ 'allowed' => array_map( 'esc_url_raw', $allowed_urls ),
+ 'isCrossDomain' => $cross_domain,
+ 'fallback' => esc_url_raw( $fallback_url ),
+ 'home' => esc_url_raw( home_url( '/' ) ),
+ 'login' => esc_url_raw( $login_url ),
+ ),
+ 'browser' => array(
+ 'mobile' => wp_is_mobile(),
+ 'ios' => $is_ios,
+ ),
+ 'settings' => array(),
+ 'controls' => array(),
+ 'panels' => array(),
+ 'sections' => array(),
+ 'nonce' => array(
+ 'save' => wp_create_nonce( 'save-customize_' . $wp_customize->get_stylesheet() ),
+ 'preview' => wp_create_nonce( 'preview-customize_' . $wp_customize->get_stylesheet() )
+ ),
+ 'autofocus' => array(),
+ 'documentTitleTmpl' => $document_title_tmpl,
+ );
+
+ // Prepare Customize Setting objects to pass to JavaScript.
+ foreach ( $wp_customize->settings() as $id => $setting ) {
+ $settings['settings'][ $id ] = array(
+ 'value' => $setting->js_value(),
+ 'transport' => $setting->transport,
+ );
+ }
+
+ // Prepare Customize Control objects to pass to JavaScript.
+ foreach ( $wp_customize->controls() as $id => $control ) {
+ $settings['controls'][ $id ] = $control->json();
+ }
+
+ // Prepare Customize Section objects to pass to JavaScript.
+ foreach ( $wp_customize->sections() as $id => $section ) {
+ $settings['sections'][ $id ] = $section->json();
+ }
+
+ // Prepare Customize Panel objects to pass to JavaScript.
+ foreach ( $wp_customize->panels() as $id => $panel ) {
+ $settings['panels'][ $id ] = $panel->json();
+ foreach ( $panel->sections as $section_id => $section ) {
+ $settings['sections'][ $section_id ] = $section->json();
+ }
+ }
+
+ // Pass to frontend the Customizer construct being deeplinked
+ if ( isset( $_GET['autofocus'] ) ) {
+ $autofocus = wp_unslash( $_GET['autofocus'] );
+ if ( is_array( $autofocus ) ) {
+ foreach ( $autofocus as $type => $id ) {
+ if ( isset( $settings[ $type . 's' ][ $id ] ) ) {
+ $settings['autofocus'][ $type ] = $id;
+ }
+ }
+ }
+ }
+
+ ?>
+
+
+
+