*/
require_once dirname(__FILE__) . '/lib/base.php';
-require_once 'Horde/Text/Filter.php';
/* Spawn the file object. */
$fl = $VC->getFileObject($where, $cache);
-$rev_ob = $VC->getRevisionObject();
Chora::checkError($fl);
+$rev_ob = $VC->getRevisionObject();
/* Retrieve the desired revision from the GET variable. */
$rev = Util::getFormData('rev', '1.1');
Chora::fatal(sprintf(_("Revision %s not found"), $rev), '404 Not Found');
}
+switch (Util::getFormData('actionID')) {
+case 'log':
+ if (isset($fl->logs[$rev])) {
+ $log = $fl->logs[$rev];
+ $out = '<em>' . _("Author") . ':</em> ' . Chora::showAuthorName($log->queryAuthor(), true) . '<br />' .
+ '<em>' . _("Date") . ':</em> ' . Chora::formatDate($log->queryDate()) . '<br /><br />' .
+ Chora::formatLogMessage($log->queryLog());
+ } else {
+ $out = '';
+ }
+ echo $out;
+ exit;
+}
+
$ann = &$VC->getAnnotateObject($fl);
Chora::checkError($lines = $ann->doAnnotate($rev));
Chora::url('co', $where, array('r' => $rev)), _("View"),
Chora::url('co', $where, array('r' => $rev, 'p' => 1)), _("Download"));
-$author = '';
-$i = $style = 0;
+Horde::addScriptFile('prototype.js', 'chora', true);
+Horde::addScriptFile('annotate.js', 'chora', true);
-/* Map of revisions for finding the previous revision to a change. */
-$revMap = $fl->revs;
-sort($revMap);
-$rrevMap = array_flip($revMap);
+$js_vars = array(
+ 'ANNOTATE_URL' => Util::addParameter(Horde::applicationUrl('annotate.php'), array('actionID' => 'log', 'f' => $where, 'rev' => ''), null, false),
+ 'loading_text' => _("Loading...")
+);
require CHORA_TEMPLATES . '/common-header.inc';
require CHORA_TEMPLATES . '/menu.inc';
require CHORA_TEMPLATES . '/headerbar.inc';
require CHORA_TEMPLATES . '/annotate/header.inc';
+$author = '';
+$i = $style = 0;
+
/* Use this counter so that we can give each tooltip object a unique
* id attribute (which we use to set the tooltip text later). */
while (list(,$line) = each($lines)) {
if ($prevRev != $rev) {
$style = (++$style % 2);
}
- $prev = (isset($rrevMap[$rev]) && isset($revMap[$rrevMap[$rev] - 1]))
- ? $revMap[$rrevMap[$rev] - 1]
- : null;
+
+ $prev_key = array_search($rev, $fl->revs);
+ $prev = isset($fl->revs[$prev_key + 1])
+ ? $fl->revs[$prev_key + 1]
+ : null;
+
$line = Text::htmlAllSpaces($line['line']);
include CHORA_TEMPLATES . '/annotate/line.inc';
++$i;
--- /dev/null
+/**
+ * Chora annotate.php javascript code.
+ *
+ * @author Michael Slusarz <slusarz@horde.org>
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ */
+
+var Chora_Annotate = {
+ showLog: function(e) {
+ var elt = e.findElement('SPAN').hide(),
+ rev = elt.up('TD').down('A').readAttribute('id').slice(4, -2),
+ newelt = new Element('TD', { colspan: 5 }).insert(Chora.loading_text);
+ elt.up('TR').insert({ after: new Element('TR').insert(newelt) });
+
+ new Ajax.Updater(newelt, Chora.ANNOTATE_URL + rev);
+ }
+};
+
+document.observe('dom:loaded', function() {
+ $$('.logdisplay').invoke('observe', 'click', Chora_Annotate.showLog.bindAsEventListener(Chora_Annotate));
+});
<?php echo $author ?>
</td>
<td class="rev">
- <a id="rev_<?php echo $rev . '_' . $i ?>" href="<?php echo Chora::url('co', $where, array('r' => $rev)) ?>" title="<?php echo htmlspecialchars($rev) ?>"><?php echo htmlspecialchars($rev_ob->abbrev($rev)) ?></a>
+ <a id="rev_<?php echo htmlspecialchars($rev) . '_' . $i ?>" href="<?php echo Chora::url('co', $where, array('r' => $rev)) ?>" title="<?php echo htmlspecialchars($rev) ?>"><?php echo htmlspecialchars($rev_ob->abbrev($rev)) ?></a>
<?php if ($prev): ?>
<a href="<?php echo Chora::url('diff', $where, array('r1' => $prev, 'r2' => $rev)) ?>" title="<?php echo sprintf(_("Diff to %s"), htmlspecialchars($prev)) ?>"><?php echo Horde::img('diff.png') ?></a>
+ <span class="logdisplay"><?php echo Horde::img('log.png') ?></span>
+<?php endif; ?>
+ </td>
+ <td class="rev">
+<?php if ($prev): ?>
+ <a id="prev_<?php echo htmlspecialchars($prev) . '_' . $i ?>" href="<?php echo Chora::url('annotate', $where, array('rev' => $prev)) . '#l' . $lineno ?>" title="<?php echo htmlspecialchars($prev) ?>"><?php echo htmlspecialchars($rev_ob->abbrev($prev)) ?></a>
<?php endif; ?>
</td>
<td class="item<?php echo $style ?>">