-
- /*
- * Summary pad
- */
- /* set up some defaults so weird themes don't override us too badly. */
- .views-tabset {
- color: #494949;
- background-color: white;
- }
-
- .views-tabset a:visited,
- .views-tabset a:hover,
- .views-tabset a {
- color: #027AC6;
- }
-
- .views-tabset .views-tab fieldset {
- margin-top: 0;
- }
-
- /*
- * First column: display drawers
-/* $Id: views-admin.css,v 1.14.4.12 2010/12/24 13:42:00 dereine Exp $ */
-
+ /**
+ * The .css file is intended to only contain positioning and size declarations
+ * For example: display, position, float, clear, and overflow.
*/
- .views-tabset .views-tabs {
- background: #F6F6F6;
- border-top: #D6DBDE 1px solid;
- border-bottom: #D6DBDE 1px solid;
- border-left: #D6DBDE 1px solid;
- float: left;
- width: 117px;
- margin-right: 0;
- }
-
- * html .views-tabset .views-tabs {
- width: 114px;
- position: relative;
- left: 4px;
- }
-
- .views-tabset .views-tabs ul {
- list-style-type: none !important;
- list-style-image: none !important;
- padding: 0;
- margin: 0;
- position: relative;
- }
-
- .views-tabset .views-tabs ul li {
- background: #efefef;
- list-style-type: none;
- list-style-image: none;
- line-height: 100%;
- border-bottom: #D6DBDE 1px solid;
- margin: 0;
- padding: 0;
- position: relative;
- }
-
- .views-tabset .views-tabs ul li.active {
- background: #fff url(../images/arrow-active.png) no-repeat right;
- position: relative;
- width: 118px;
- margin-right: -1px;
- }
-
- .views-tabset .views-tabs ul li a {
- display: block;
- font-size: 90%;
- color: #777;
- font-weight: normal;
- padding: 0.5em;
- }
-
- .views-tabset .views-tabs ul li a:hover {
- background-color: #f6f6f6;
- text-decoration: none;
- }
-
- .views-tabset .views-tabs ul li.active a {
- color: #000;
- font-weight: bold;
- }
-
- .views-tabset .views-tabs ul li.active a:hover {
- color: #000;
- background: #fff url(../images/arrow-active.png) no-repeat right;
- }
-
- .views-tabset .extra {
- text-align: center;
- margin-right: 0;
- }
-
- .views-tabset .extra input {
- margin-top: 0;
- margin-right: 0;
- font-size: 10px;
- white-space: normal;
- }
-
- /*
- * Three columns with setting-summaries
- */
- .views-tabset .views-display {
- border: #D6DBDE 1px solid;
- margin-left: 118px; /* 118 -1 causes borders to overlap */
- min-height: 302px;
- _height: 300px; /*stupid IE hack */
- }
-
- * html .views-tabset .views-display {
- margin-left: 114px;
- }
-
- div.views-display-deleted,
- div.views-display-deleted div.top,
- div.views-display-deleted div.tab-section {
- background-color: #eee;
- }
-
- .views-display {
- background: #fff;
- }
-
- .views-display div {
- font-size: 8pt;
- line-height: 12pt;
- }
-
- .views-display .top {
- padding: 0.5em 0em 0em 1em;
- background: #fff;
- }
-
- .views-display .top .display-title {
- font-weight: bold;
- }
- .views-display .top .display-description {
- margin-left: 1em;
- font-style: italic;
- overflow: hide;
- white-space: nowrap;
- font-size: 90%;
- }
-
- .views-display .tab-section {
- width: 32.5%;
- padding: 0;
- margin: 0;
- float: left;
- min-height: 273px;
- _height: 274px;
- }
-
- .views-display .tab-section .inside {
- margin: 0.5em 0.5em 0.5em 1em;
- }
- .views-display .tab-section .inside .views-category {
- margin-bottom: 1em;
- background: #f6f6f6;
- border: 1px #efefef solid;
- }
-
- .views-display .tab-section .inside .views-category-content {
- padding: 0em 0em 0.5em 1em;
- }
+ /* @group Inline lists */
- .views-display .tab-section .inside .views-category-title {
- padding: .1em .1em .1em .3em;
- margin: 0 0 .1em 0;
- font-size: 9pt;
- font-weight: bold;
- background-color: #efefef;
- border-bottom: 1px #efefef solid;
+ .horizontal > * {
+ clear: none;
+ float: left; /* LTR */
}
- .views-display .tab-section .links {
+ .horizontal.right {
float: right;
- font-size: 6pt;
- position: relative;
- display: inline;
- }
-
- .views-display .tab-section .links a {
- font-size: 6pt;
- font-style: italic;
- }
-
- .views-display .form-submit,
- #views-ajax-pad .form-submit {
- margin: 0;
}
- .views-display .middle {
- width: 34%;
+ .horizontal label {
+ position: absolute;
}
- .views-basic-info {
- margin: 0.5em 0em 0 0;
- padding: 0.5em;
- }
-
- /*
- * AJAX pad, the bottom part where settings are edited.
- */
- #views-ajax-pad {
- background: transparent;
- margin-top: 0px;
- }
-
- #views-ajax-pad > div.ajax-progress {
- display: none;
+ .horizontal .form-item > [class] {
+ margin-top: 25px;
}
- #views-ajax-title {
- background: #f6f6f6;
- color: #000;
- border-left: #D6DBDE 1px solid;
- border-right: #D6DBDE 1px solid;
- margin: 0 0 0 118px;
- padding: 1em 1em 0em 1em;
- font-weight: bold;
- }
-
- #views-ajax-pad .message {
- background: #f6f6f6;
- color: #000;
- margin-left: 118px;
- border: #D6DBDE 1px solid;
- border-top: 0;
- /* padding: 3em 0em; */
- text-align: center;
- font-style: italic;
- }
-
- #views-ajax-pad form {
- background: #fff;
- color: #000;
- margin-left: 118px;
- border: #D6DBDE 1px solid;
- padding-top: 3px;
- border-top: 0;
- float: none;
- }
-
- #views-ajax-pad .views-messages {
- background: transparent;
- margin-left: 118px;
- padding: 5px;
- border: #D6DBDE 1px solid;
- border-top: 0;
- }
-
- #views-ajax-pad .form-buttons {
- margin: 0;
- padding: 0.5em 1em;
- background: #f6f6f6;
- clear: left;
- }
-
- #views-ajax-pad .clear {
- clear: left;
- }
-
- #views-ajax-pad .form-buttons .form-submit {
- font-size: 10px;
- }
-
- #views-ajax-pad .form-item {
- margin: 0.5em;
- padding: 0em 0.5em;
- }
-
- /* These put checkboxes closer together */
- #views-ajax-pad .form-checkboxes .form-item,
- #views-ajax-pad .form-checkboxes .description,
- #views-ajax-pad .form-checkboxes input,
- #views-ajax-pad .form-radios .form-item,
- #views-ajax-pad .form-radios label,
- #views-ajax-pad .form-radios input {
+ .horizontal .form-item > [class] + [class] {
margin-top: 0;
- margin-bottom: 0;
}
- #views-ajax-pad .form-item .form-checkboxes,
- #views-ajax-pad .form-checkboxes input,
- #views-ajax-pad .form-checkboxes label,
- #views-ajax-pad .form-item .form-checkboxes .form-item,
- #views-ajax-pad .form-item .form-radios,
- #views-ajax-pad .form-radios input,
- #views-ajax-pad .form-radios label,
- #views-ajax-pad .form-item .form-radios .form-item {
- padding-left: 0;
- margin-left: 0;
- }
-
- #views-ajax-pad .form-checkboxes .description,
- #views-ajax-pad .form-radios .description {
- margin-left: 2em;
- }
-
- #views-ajax-pad {
- display: none;
- }
-
- html.js #views-ajax-pad {
- display: block;
- }
+ /* @end */
+
+ /* @group Columns */
- .views-override,
- .views-expose {
- padding: 0.5em 1em 0em 1em;
- }
-
- #views-ajax-pad .views-override .form-submit,
- #views-ajax-pad .views-expose .form-submit {
- float: right;
- margin: 0 .5em 0 1em;
- }
-
- #views-ajax-pad .views-expose .description,
- #views-ajax-pad .views-override .description {
- margin-bottom: .25em;
- }
-
- /*
- * Some column widths for use within the ajax pad
- */
- #views-ajax-pad .views-left-10 {
- float: left;
- width: 10%;
- }
-
- #views-ajax-pad .views-left-20 {
- float: left;
- width: 20%;
- }
-
- #views-ajax-pad .views-left-25 {
+ .views-left-25 {
float: left;
width: 25%;
}
$new_fields[$field] = $old_fields[$field];
}
- // Save if the actual update button was clicked.
- if (!empty($form_state['clicked_button']['#group'])) {
- if ($form_state['clicked_button']['#group'] == 'add') {
- // Add a new group
- $groups['groups'][] = 'AND';
- }
- else {
- // Renumber groups above the removed one down.
- foreach (array_keys($groups['groups']) as $group_id) {
- if ($group_id >= $form_state['clicked_button']['#group']) {
- $old_group = $group_id + 1;
- if (isset($groups['groups'][$old_group])) {
- $groups['groups'][$group_id] = $groups['groups'][$old_group];
- if (isset($remember_groups[$old_group])) {
- foreach ($remember_groups[$old_group] as $id) {
- $new_fields[$id]['group'] = $group_id;
- }
- }
- }
- else {
- // If this is the last one, just unset it.
- unset($groups['groups'][$group_id]);
- }
- }
- }
- }
- // Update our cache with values so that cancel still works the way
- // people expect.
- $form_state['view']->form_cache = array(
- 'key' => 'rearrange-filter',
- 'groups' => $groups,
- 'handlers' => $new_fields,
- );
+ // If the #group property is set on the clicked button, that means we are
+ // either adding or removing a group, not actually updating the filters.
+ if (!empty($form_state['clicked_button']['#group'])) {
+ if ($form_state['clicked_button']['#group'] == 'add') {
- // Add a new group.
++ // Add a new group
+ $groups['groups'][] = 'AND';
+ }
+ else {
+ // Renumber groups above the removed one down.
+ foreach (array_keys($groups['groups']) as $group_id) {
+ if ($group_id >= $form_state['clicked_button']['#group']) {
+ $old_group = $group_id + 1;
+ if (isset($groups['groups'][$old_group])) {
+ $groups['groups'][$group_id] = $groups['groups'][$old_group];
+ if (isset($remember_groups[$old_group])) {
+ foreach ($remember_groups[$old_group] as $id) {
+ $new_fields[$id]['group'] = $group_id;
+ }
+ }
+ }
+ else {
+ // If this is the last one, just unset it.
+ unset($groups['groups'][$group_id]);
+ }
+ }
+ }
+ }
+ // Update our cache with values so that cancel still works the way
+ // people expect.
+ $form_state['view']->form_cache = array(
+ 'key' => 'rearrange-filter',
+ 'groups' => $groups,
+ 'handlers' => $new_fields,
+ );
+
+ // Return to this form except on actual Update.
+ views_ui_add_form_to_stack('rearrange-filter', $form_state['view'], $form_state['display_id'], array($form_state['type']));
+ }
+ else {
+ // The actual update button was clicked. Remove the empty groups, and
+ // renumber them sequentially.
+ ksort($remember_groups);
+ $groups['groups'] = array_values(array_intersect_key($groups['groups'], $remember_groups));
+ // Change the 'group' key on each field to match. Here, $mapping is an
+ // array whose keys are the old group numbers and whose values are the new
+ // (sequentially numbered) ones.
+ $mapping = array_flip(array_keys($remember_groups));
+ foreach ($new_fields as &$new_field) {
+ $new_field['group'] = $mapping[$new_field['group']];
+ }
+
+ // Write the changed handler values.
+ $display->handler->set_option($types[$form_state['type']]['plural'], $new_fields);
+ $display->handler->set_option('filter_groups', $groups);
+ if (isset($form_state['view']->form_cache)) {
+ unset($form_state['view']->form_cache);
+ }
+ }
+
+ // Store in cache.
+ views_ui_cache_set($form_state['view']);
+ }
+
+ /**
+ * Form to delete multiple items at once.
+ *
+ * @todo: All this relationship stuff is there three times. This should be abstracted out.
+ */
+ function views_ui_item_delete_form($form, &$form_state) {
+ $view = &$form_state['view'];
+ $display_id = $form_state['display_id'];
+ $type = $form_state['type'];
+
+ $types = views_object_types();
+ if (!$view->set_display($display_id)) {
+ views_ajax_error(t('Invalid display id @display', array('@display' => $display_id)));
+ }
+ $display = &$view->display[$display_id];
+ $form['#title'] = t('Delete @type', array('@type' => $types[$type]['ltitle']));
+ $form['#section'] = $display_id . 'delete-item';
+
+ if ($display->handler->defaultable_sections($types[$type]['plural'])) {
+ $form_state['section'] = $types[$type]['plural'];
+ views_ui_standard_display_dropdown($form, $form_state, $form_state['section']);
+ }
+
+ $count = 0;
+
+ // Get relationship labels
+ $relationships = array();
+ foreach ($display->handler->get_handlers('relationship') as $id => $handler) {
+ $relationships[$id] = $handler->label();
+ $handlers = $display->handler->get_option('relationships');
+ if ($handlers) {
+ foreach ($handlers as $id => $info) {
+ $handler = $display->handler->get_handler('relationship', $id);
+ $relationships[$id] = $handler->label();
+ }
+ }
+ }
+
+ // Filters can now be grouped so we do a little bit extra:
+ $groups = array();
+ $grouping = FALSE;
+ if ($type == 'filter') {
+ $group_info = $view->display_handler->get_option('filter_groups');
+ if (!empty($group_info['groups']) && count($group_info['groups']) > 1) {
+ $grouping = TRUE;
+ $groups = array(0 => array());
+ }
+ }
+
+ foreach ($display->handler->get_option($types[$type]['plural']) as $id => $field) {
+ $form['fields'][$id] = array('#tree' => TRUE);
+ $handler = $display->handler->get_handler($type, $id);
+ if ($handler) {
+ $name = $handler->ui_name() . ' ' . $handler->admin_summary();
+ if (!empty($field['relationship']) && !empty($relationships[$field['relationship']])) {
+ $name = '(' . $relationships[$field['relationship']] . ') ' . $name;
+ }
+
+ $form['fields'][$id]['name'] = array(
+ '#markup' => $name,
+ );
+ }
+ else {
+ $form['fields'][$id]['name'] = array('#markup' => t('Broken field @id', array('@id' => $id)));
+ }
+ $form['fields'][$id]['removed'] = array(
+ '#type' => 'checkbox',
+ '#id' => 'views-removed-' . $id,
+ '#attributes' => array('class' => array('views-remove-checkbox')),
+ '#default_value' => 0,
+ );
+ }
+
+ $name = NULL;
+ if (isset($form_state['update_name'])) {
+ $name = $form_state['update_name'];
+ }
+
+ views_ui_standard_form_buttons($form, $form_state, 'views_ui_item_delete_form');
+ return $form;
+ }
+
+ /**
+ * Submit handler for delete form
+ */
+ function views_ui_item_delete_form_submit($form, &$form_state) {
+ $types = views_object_types();
+ $display = &$form_state['view']->display[$form_state['display_id']];
+
+ $old_fields = $display->handler->get_option($types[$form_state['type']]['plural']);
+ $new_fields = $order = array();
+
+ // Make an array with the weights
+ foreach ($form_state['values'] as $field => $info) {
+ // add each value that is a field, but only if
+ // it has had its 'removed' checkbox checked.
+ if (is_array($info) && empty($info['removed'])) {
+ $order[$field] = $field;
+ }
+ }
+
+ // Sort the array
+ asort($order);
+
+ // Create a new list of fields in the new order.
+ foreach (array_keys($order) as $field) {
+ $new_fields[$field] = $old_fields[$field];
+ }
+ $display->handler->set_option($types[$form_state['type']]['plural'], $new_fields);
+
+ // Store in cache
+ views_ui_cache_set($form_state['view']);
+ }
- // Return to this form except on actual Update.
- views_ui_add_form_to_stack('rearrange-filter', $form_state['view'], $form_state['display_id'], array($form_state['type']));
- }
- else {
- // Actually write changed handler values.
- $display->handler->set_option($types[$form_state['type']]['plural'], $new_fields);
- $display->handler->set_option('filter_groups', $groups);
- if (isset($form_state['view']->form_cache)) {
- unset($form_state['view']->form_cache);
+ /**
+ * Turn the rearrange form into a proper table
+ */
+ function theme_views_ui_item_delete_form($variables) {
+ $form = $variables['form'];
+
+ $rows = array();
+ foreach (element_children($form['fields']) as $id) {
+ if (isset($form['fields'][$id]['name'])) {
+ $row = array();
+ $row[] = drupal_render($form['fields'][$id]['name']);
+ $row[] = drupal_render($form['fields'][$id]['removed']) . l('<span>' . t('Remove') . '</span>', 'javascript:void()', array('attributes' => array('id' => 'views-remove-link-' . $id, 'class' => array('views-hidden', 'views-button-remove', 'views-remove-link'), 'alt' => t('Remove this item'), 'title' => t('Remove this item')), 'html' => TRUE));
+ $rows[] = array('data' => $row, 'class' => array('draggable'), 'id' => 'views-row-' . $id);
}
}
+ if (empty($rows)) {
+ $rows[] = array(array('data' => t('No fields available.'), 'colspan' => '2'));
+ }
- // Store in cache
- views_ui_cache_set($form_state['view']);
+ $header = array('', t('Remove'));
+ $output = drupal_render($form['override']);
+ $output .= '<div class="scroll">';
+ $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'arrange')));
+ $output .= '</div>';
+ $output .= drupal_render_children($form);
+
+ return $output;
}
+
/**
* Form to add_item items in the views UI.
*/