diff --git a/diff.module b/diff.module
index 537b8e1..be45945 100644
--- a/diff.module
+++ b/diff.module
@@ -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',
);
@@ -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;
}
}
@@ -545,10 +527,10 @@ 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}",
@@ -556,7 +538,7 @@ function diff_inline_form($form, $form_state, $node, $revisions) {
),
);
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),
));
@@ -576,7 +558,7 @@ 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 "
" . diff_inline_show($node, $vid) . "
";
}
@@ -584,10 +566,10 @@ function diff_inline_ajax($form, $form_state) {
* 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;
}
}
diff --git a/diff.pages.inc b/diff.pages.inc
index a003ed2..50a7a68 100644
--- a/diff.pages.inc
+++ b/diff.pages.inc
@@ -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}");
}
/**
@@ -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,
@@ -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;
}
/**
@@ -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])),
));
@@ -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 = '';
@@ -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) {
diff --git a/diff.theme.inc b/diff.theme.inc
index 39cac72..5bd1c44 100644
--- a/diff.theme.inc
+++ b/diff.theme.inc
@@ -53,7 +53,7 @@ function theme_diff_node_revisions($vars) {
'class' => array('revision-current'),
);
$row[] = array(
- 'data' => '' . t('This is the published revision.') . '',
+ 'data' => '' . t('This is the current revision.') . '',
'class' => array('revision-current'),
'colspan' => '2',
);