Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 22 additions & 40 deletions diff.module
Original file line number Diff line number Diff line change
Expand Up @@ -61,36 +61,37 @@ function diff_menu() {
* a parent that can be accessed by its full path, it seems to work as
* desired. Breadcrumbs work decently, at least the node link is among the
* crumbs. For some reason any breadcrumbs "before/above" the node is only
* seen at 'node/%node/revisions/%/view'.
* seen at 'node/%node/compare/%/%'.
*/

// Not used directly, but was created to get the other menu items to work.
$items['node/%node/revisions/list'] = array(
'title' => 'List revisions',
// Non-conflicting compare routes that do not override core revisions paths.
$items['node/%node/compare'] = array(
'title' => 'Compare',
'page callback' => 'diff_diffs_overview',
'type' => MENU_DEFAULT_LOCAL_TASK,
'page arguments' => array(1),
'type' => MENU_LOCAL_TASK,
'access callback' => 'diff_node_revision_access',
'access arguments' => array(1),
'weight' => 3,
'file' => 'diff.pages.inc',
);
$items['node/%node/revisions/view'] = array(
$items['node/%node/compare/%/%'] = array(
'title' => 'Compare revisions',
'page callback' => 'diff_diffs_show',
'page arguments' => array(1, 4, 5, 6),
'page arguments' => array(1, 3, 4, 5),
'type' => MENU_LOCAL_TASK,
'access callback' => 'diff_node_revision_access',
'access arguments' => array(1),
'tab_parent' => 'node/%/revisions/list',
'tab_parent' => 'node/%/compare',
'file' => 'diff.pages.inc',
);

$items['node/%node/revisions/view/latest'] = array(
$items['node/%node/compare/latest'] = array(
'title' => 'Show latest difference',
'page callback' => 'diff_latest',
'page arguments' => array(1),
'type' => MENU_LOCAL_TASK,
'access arguments' => array('access content'),
'tab_parent' => 'node/%/revisions/view',
'tab_parent' => 'node/%/compare',
'file' => 'diff.pages.inc',
);

Expand Down Expand Up @@ -154,33 +155,14 @@ function diff_menu() {
return $items;
}

/**
* Implements hook_menu_alter().
*/
function diff_menu_alter(&$callbacks) {
// Overwrite the default 'Revisions' page.
$callbacks['node/%node/revisions']['page callback'] = 'diff_diffs_overview';
$callbacks['node/%node/revisions']['module'] = 'diff';
$callbacks['node/%node/revisions']['file'] = 'diff.pages.inc';

$callbacks['node/%node/revisions/%/view']['tab_parent'] = 'node/%/revisions/list';
$callbacks['node/%node/revisions/%/revert']['tab_parent'] = 'node/%/revisions/%/view';
$callbacks['node/%node/revisions/%/delete']['tab_parent'] = 'node/%/revisions/%/view';

$callbacks['node/%node/revisions']['access callback']
= $callbacks['node/%node/revisions/%/view']['access callback']
= $callbacks['node/%node/revisions/%/revert']['access callback']
= $callbacks['node/%node/revisions/%/delete']['access callback'] = 'diff_node_revision_access';
}

/**
* Implements hook_admin_paths_alter().
*/
function diff_admin_paths_alter(&$paths) {
// By default, treat all diff pages as administrative.
// Treat compare pages as administrative if configured.
if (config_get('diff.settings', 'diff_admin_path.node')) {
$paths['node/*/revisions/view'] = TRUE;
$paths['node/*/revisions/view/*/*'] = TRUE;
$paths['node/*/compare'] = TRUE;
$paths['node/*/compare/*/*'] = TRUE;
}
}

Expand Down Expand Up @@ -545,18 +527,18 @@ function diff_inline_form($form, $form_state, $node, $revisions) {
'#type' => 'value',
'#value' => $node,
);
$form['revision'] = array(
$form['compare'] = array(
'#type' => 'select',
'#options' => array(0 => t('- No highlighting -')),
'#default_value' => (arg(2) === 'revisions' && arg(3) === $node->vid) ? $node->vid : 0,
'#default_value' => ((arg(2) === 'revisions' && arg(3) === $node->vid) || (arg(2) === 'compare')) ? $node->vid : 0,
'#ajax' => array(
'callback' => 'diff_inline_ajax',
'wrapper' => "node-{$node->nid}",
'method' => 'replace',
),
);
foreach ($revisions as $revision) {
$form['revision']['#options'][$revision->vid] = t('@revision by @name', array(
$form['compare']['#options'][$revision->vid] = t('@revision by @name', array(
'@revision' => format_date($revision->timestamp, 'short'),
'@name' => user_format_name($revision),
));
Expand All @@ -576,18 +558,18 @@ function diff_inline_form($form, $form_state, $node, $revisions) {
function diff_inline_ajax($form, $form_state) {
module_load_include('inc', 'diff', 'diff.pages');
$node = $form['node']['#value'];
$vid = isset($form_state['values']['revision']) ? $form_state['values']['revision'] : 0;
$vid = isset($form_state['values']['compare']) ? $form_state['values']['compare'] : 0;
return "<div id='node-{$node->nid}'>" . diff_inline_show($node, $vid) . "</div>";
}

/**
* Form submission handler for diff_inline_form() for JS-disabled clients.
*/
function diff_inline_form_submit(&$form, &$form_state) {
if (isset($form_state['values']['revision'], $form_state['values']['node'])) {
if (isset($form_state['values']['compare'], $form_state['values']['node'])) {
$node = $form_state['values']['node'];
$vid = $form_state['values']['revision'];
$form_state['redirect'] = "node/{$node->nid}/revisions/{$vid}/view";
$vid = $form_state['values']['compare'];
$form_state['redirect'] = "node/{$node->nid}/compare/{$vid}/" . $node->vid;
}
}

Expand Down
16 changes: 8 additions & 8 deletions diff.pages.inc
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function diff_latest($node) {
}
$new = array_shift($revisions);
$old = array_shift($revisions);
backdrop_goto("node/{$node->nid}/revisions/view/{$old->vid}/{$new->vid}");
backdrop_goto("node/{$node->nid}/compare/{$old->vid}/{$new->vid}");
}

/**
Expand Down Expand Up @@ -85,7 +85,7 @@ function diff_node_revisions($form, $form_state, $node) {
);
}
else {
$diff_date = l(format_date($revision->timestamp, 'small'), "node/$node->nid/revisions/$revision->vid/view");
$diff_date = l(format_date($revision->timestamp, 'small'), "node/$node->nid/compare/$revision->vid/" . $node->vid);
$form['info'][$revision->vid] = array(
'#markup' => t('!date by !username', array(
'!date' => $diff_date,
Expand Down Expand Up @@ -140,7 +140,7 @@ function diff_node_revisions_submit($form, &$form_state) {
// The node IDs are ordered so that the old revision is always on the left.
$old_vid = min($form_state['values']['old'], $form_state['values']['new']);
$new_vid = max($form_state['values']['old'], $form_state['values']['new']);
$form_state['redirect'] = 'node/' . $form_state['values']['nid'] . '/revisions/view/' . $old_vid . '/' . $new_vid;
$form_state['redirect'] = 'node/' . $form_state['values']['nid'] . '/compare/' . $old_vid . '/' . $new_vid;
}

/**
Expand Down Expand Up @@ -190,11 +190,11 @@ function diff_diffs_show(Node $node, $old_vid, $new_vid, $state = '') {

// Generate table header (date, username, log message).
$old_header = t('!date by !username', array(
'!date' => l(format_date($old_node->revision_timestamp), "node/$node->nid/revisions/$old_node->vid/view", array('absolute' => 1)),
'!date' => l(format_date($old_node->revision_timestamp), "node/$node->nid/compare/$old_node->vid/" . $new_vid, array('absolute' => 1)),
'!username' => theme('username', array('account' => $node_revisions[$old_vid])),
));
$new_header = t('!date by !username', array(
'!date' => l(format_date($new_node->revision_timestamp), "node/$node->nid/revisions/$new_node->vid/view", array('absolute' => 1)),
'!date' => l(format_date($new_node->revision_timestamp), "node/$node->nid/compare/$old_vid/" . $new_node->vid, array('absolute' => 1)),
'!username' => theme('username', array('account' => $node_revisions[$new_vid])),
));

Expand All @@ -205,14 +205,14 @@ function diff_diffs_show(Node $node, $old_vid, $new_vid, $state = '') {
$nav_suffix = ($default_state != $state) ? '/' . str_replace('_', '-', $state) : '';
$next_vid = _diff_get_next_vid($node_revisions, $new_vid);
if ($next_vid) {
$next_link = l(t('Next difference >'), 'node/' . $node->nid . '/revisions/view/' . $new_vid . '/' . $next_vid . $nav_suffix, array('absolute' => 1));
$next_link = l(t('Next difference >'), 'node/' . $node->nid . '/compare/' . $new_vid . '/' . $next_vid . $nav_suffix, array('absolute' => 1));
}
else {
$next_link = '';
}
$prev_vid = _diff_get_previous_vid($node_revisions, $old_vid);
if ($prev_vid) {
$prev_link = l(t('< Previous difference'), 'node/' . $node->nid . '/revisions/view/' . $prev_vid . '/' . $old_vid . $nav_suffix, array('absolute' => 1));
$prev_link = l(t('< Previous difference'), 'node/' . $node->nid . '/compare/' . $prev_vid . '/' . $old_vid . $nav_suffix, array('absolute' => 1));
}
else {
$prev_link = '';
Expand Down Expand Up @@ -249,7 +249,7 @@ function diff_diffs_show(Node $node, $old_vid, $new_vid, $state = '') {
foreach (diff_available_states('node') as $alternative_state => $label) {
$links[$alternative_state] = array(
'title' => $label,
'href' => "node/{$node->nid}/revisions/view/{$old_vid}/{$new_vid}" . ($alternative_state == $default_state ? '' : '/' . str_replace('_', '-', $alternative_state)),
'href' => "node/{$node->nid}/compare/{$old_vid}/{$new_vid}" . ($alternative_state == $default_state ? '' : '/' . str_replace('_', '-', $alternative_state)),
);
}
if (count($links) > 1) {
Expand Down
2 changes: 1 addition & 1 deletion diff.theme.inc
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ function theme_diff_node_revisions($vars) {
'class' => array('revision-current'),
);
$row[] = array(
'data' => '<strong>' . t('This is the published revision.') . '</strong>',
'data' => '<strong>' . t('This is the current revision.') . '</strong>',
'class' => array('revision-current'),
'colspan' => '2',
);
Expand Down