No changes between revisions
/WebSVN/multiviews.php |
---|
File deleted |
\ No newline at end of file |
/WebSVN/composer.json |
---|
File deleted |
/WebSVN/javascript/blame-popup.js |
---|
File deleted |
/WebSVN/javascript/compare-checkboxes.js |
---|
File deleted |
/WebSVN/javascript/ie-png-transparency.js |
---|
File deleted |
/WebSVN/javascript/jquery.min.1.9.1.js |
---|
File deleted |
\ No newline at end of file |
/WebSVN/javascript/collapsible.js |
---|
File deleted |
/WebSVN/search.php |
---|
File deleted |
/WebSVN/revision.php |
---|
File deleted |
/WebSVN/README.md |
---|
File deleted |
/WebSVN/browse.php |
---|
File deleted |
/WebSVN/license.txt |
---|
File deleted |
/WebSVN/filedetails.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
22,70 → 24,55 |
// |
// Simply lists the contents of a file |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/utils.php'; |
require_once 'include/template.php'; |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
require_once("include/utils.inc"); |
require_once("include/template.inc"); |
// Make sure that we have a repository |
if (!$rep) |
if (!isset($rep)) |
{ |
renderTemplate404('file','NOREP'); |
echo $lang["NOREP"]; |
exit; |
} |
$svnrep = new SVNRepository($rep); |
if ($path[0] != '/') |
{ |
$ppath = '/'.$path; |
} |
if ($path{0} != "/") |
$ppath = "/".$path; |
else |
{ |
$ppath = $path; |
} |
$useMime = false; |
$passrev = $rev; |
// If there's no revision info, go to the lastest revision for this path |
$history = $svnrep->getLog($path, 'HEAD', 1, false, 2, ($path == '/') ? '' : $peg); |
$history = $svnrep->getLog($path, "", "", true); |
$youngest = $history->entries[0]->rev; |
if (!$history) |
{ |
unset($vars['error']); |
$history = $svnrep->getLog($path, '', '', false, 2, ($path == '/') ? '' : $peg); |
if (!$history) |
{ |
renderTemplate404('file','NOPATH'); |
} |
} |
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : false; |
if (empty($rev)) |
{ |
$rev = !$peg ? $youngest : min($peg, $youngest); |
} |
$rev = $youngest; |
$extn = strtolower(strrchr($path, '.')); |
$extn = strrchr($path, "."); |
// Check to see if the user has requested that this type be zipped and sent |
// to the browser as an attachment |
if ($history && isset($zipped) && in_array($extn, $zipped) && $rep->hasReadAccess($path, false)) |
if (in_array($extn, $zipped)) |
{ |
$base = basename($path); |
header('Content-Type: application/gzip'); |
header("Content-Disposition: attachment; filename*=UTF-8''".rawurlencode($base).'.gz'); |
header("Content-Type: application/x-gzip"); |
header("Content-Disposition: attachment; filename=".urlencode($base).".gz"); |
// Get the file contents and pipe into gzip. All this without creating |
// a temporary file. Damn clever. |
$svnrep->getFileContents($path, '', $rev, $peg, '| '.$config->gzip.' -n -f'); |
$svnrep->getFileContents($path, "", $rev, "| ".$config->gzip." -n -f"); |
exit; |
} |
// Check to see if we should serve it with a particular content-type. |
// The content-type could come from an svn:mime-type property on the |
// file, or from the $contentType array in setup.php. |
// file, or from the $contentType array in setup.inc. |
if (!$rep->getIgnoreSvnMimeTypes()) |
{ |
97,152 → 84,91 |
$setupContentType = @$contentType[$extn]; |
} |
// Use the documented priorities when establishing what content-type to use. |
// Use this set of priorities when establishing what content-type to |
// actually use. |
if (!empty($svnMimeType) && $svnMimeType != 'application/octet-stream') |
{ |
$mimeType = $svnMimeType; |
$cont = $svnMimeType; |
} |
else if (!empty($setupContentType)) |
{ |
$mimeType = $setupContentType; |
$cont = $setupContentType; |
} |
else if (!empty($svnMimeType)) |
{ |
$mimeType = $svnMimeType; // Use SVN's default of 'application/octet-stream' |
// It now is equal to application/octet-stream due to logic |
// above.... |
$cont = $svnMimeType; |
} |
else |
{ |
$mimeType = ''; |
} |
$useMime = ($mimeType) ? @$_REQUEST['usemime'] : false; |
// If there's a MIME type associated with this format, then we deliver it |
// with this information |
if ($history && !empty($mimeType) && !$useMime) |
if (!empty($cont)) |
{ |
$useMime = $mimeType; // Save MIME type for later before possibly clobbering |
// If a MIME type exists but is set to be ignored, set it to an empty string. |
foreach ($config->inlineMimeTypes as $inlineType) |
{ |
if (preg_match('|'.$inlineType.'|', $mimeType)) |
{ |
$mimeType = ''; |
break; |
} |
} |
} |
// If a MIME type is associated with the file, deliver with Content-Type header. |
if ($history && !empty($mimeType) && $rep->hasReadAccess($path, false)) |
{ |
$base = basename($path); |
header('Content-Type: '.$mimeType); |
//header('Content-Length: '.$size); |
header("Content-Disposition: inline; filename*=UTF-8''".rawurlencode($base)); |
$svnrep->getFileContents($path, '', $rev, $peg); |
exit; |
} |
// Display the file inline using WebSVN. |
header("Content-Type: $cont"); |
//header("Content-Length: $size"); |
header("Content-Disposition: inline; filename=".urlencode($base)); |
$vars['action'] = ''; |
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath)); |
$vars['safepath'] = escape($ppath); |
$svnrep->getFileContents($path, "", $rev); |
if (isset($history->entries[0])) |
{ |
$vars['log'] = xml_entities($history->entries[0]->msg); |
$vars['date'] = $history->entries[0]->date; |
$vars['age'] = datetimeFormatDuration(time() - strtotime($history->entries[0]->date)); |
$vars['author'] = $history->entries[0]->author; |
exit; |
} |
createPathLinks($rep, $ppath, !$passrev && $peg ? $rev : $passrev, $peg); |
$passRevString = createRevAndPegString($rev, $peg); |
if ($rev != $youngest) |
// Explicitly requested file as attachment |
if (isset($_REQUEST['getfile'])) |
{ |
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'file').createRevAndPegString($youngest, $peg); |
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>'; |
} |
$base = basename($path); |
$revurl = $config->getURL($rep, $path, 'file'); |
header("Content-Type: application/octet-stream"); |
header("Content-Length: $size"); |
header("Content-Disposition: inline; filename=".urlencode($base)); |
if ($rev < $youngest) |
{ |
$history2 = $svnrep->getLog($path, $rev, $youngest, true, 2, $peg ? $peg : 'HEAD'); |
$svnrep->getFileContents($path, "", $rev); |
if (isset($history2->entries[1])) |
{ |
$nextRev = $history2->entries[1]->rev; |
if ($nextRev != $youngest) |
{ |
$vars['nextrev'] = $nextRev; |
$vars['nextrevurl'] = $revurl.createRevAndPegString($nextRev, $peg); |
exit; |
} |
} |
unset($vars['error']); |
} |
// There's no associated MIME type. Show the file using WebSVN. |
$history3 = $svnrep->getLog($path, $rev, 1, true, 2, $peg ? $peg : 'HEAD'); |
$url = $config->getURL($rep, $path, "file"); |
if (isset($history3->entries[1])) |
{ |
$prevRev = $history3->entries[1]->rev; |
$prevPath = $history3->entries[1]->path; |
$vars['prevrev'] = $prevRev; |
$vars['prevrevurl'] = $revurl.createRevAndPegString($prevRev, $peg); |
} |
if ($rev != $youngest) |
$vars["goyoungestlink"] = "<a href=\"${url}sc=1\">${lang["GOYOUNGEST"]}</a>"; |
else |
$vars["goyoungestlink"] = ""; |
unset($vars['error']); |
$vars["action"] = ""; |
$vars["repname"] = $rep->getDisplayName(); |
$vars["rev"] = $rev; |
$vars["path"] = $ppath; |
$vars['revurl'] = $config->getURL($rep, $path, 'revision').$passRevString; |
$vars['revlink'] = '<a href="'.$vars['revurl'].'">'.$lang['LASTMOD'].'</a>'; |
createDirLinks($rep, $ppath, $passrev, $showchanged); |
$vars['logurl'] = $config->getURL($rep, $path, 'log').$passRevString; |
$vars['loglink'] = '<a href="'.$vars['logurl'].'">'.$lang['VIEWLOG'].'</a>'; |
$url = $config->getURL($rep, $path, "log"); |
$vars["fileviewloglink"] = "<a href=\"${url}rev=$passrev&sc=$showchanged&isdir=0\">${lang["VIEWLOG"]}</a>"; |
$vars['blameurl'] = $config->getURL($rep, $path, 'blame').$passRevString; |
$vars['blamelink'] = '<a href="'.$vars['blameurl'].'">'.$lang['BLAME'].'</a>'; |
$url = $config->getURL($rep, $path, "diff"); |
$vars["prevdifflink"] = "<a href=\"${url}rev=$passrev&sc=$showchanged\">${lang["DIFFPREV"]}</a>"; |
if ($history == null || count($history->entries) > 1) |
{ |
$vars['diffurl'] = $config->getURL($rep, $path, 'diff').$passRevString; |
$vars['difflink'] = '<a href="'.$vars['diffurl'].'">'.$lang['DIFFPREV'].'</a>'; |
} |
$url = $config->getURL($rep, $path, "blame"); |
$vars["blamelink"] = "<a href=\"${url}rev=$passrev&sc=$showchanged\">${lang["BLAME"]}</a>"; |
if ($rep->isDownloadAllowed($path)) |
{ |
$vars['downloadlurl'] = $config->getURL($rep, $path, 'dl').$passRevString; |
$vars['downloadlink'] = '<a href="'.$vars['downloadlurl'].'">'.$lang['DOWNLOAD'].'</a>'; |
} |
#$url = $config->getURL($rep, $path, "get"); |
$url = $config->getURL($rep, $path, "file"); |
$vars["getfile"] = "<a href=\"${url}getfile&rev=$passrev&sc=$showchanged\">${lang["GETFILE"]}</a>"; |
if ($rep->isRssEnabled()) |
{ |
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').createRevAndPegString('', $peg); |
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>'; |
} |
$listing = array (); |
$mimeType = $useMime; // Restore preserved value to use for 'mimelink' variable. |
// If there was a MIME type, create a link to display file with that type. |
if ($mimeType && !isset($vars['warning'])) |
{ |
$vars['mimeurl'] = $config->getURL($rep, $path, 'file').'usemime=1&'.$passRevString; |
$vars['mimelink'] = '<a href="'.$vars['mimeurl'].'">'.$lang['VIEWAS'].' "'.$mimeType.'"</a>'; |
} |
$vars["version"] = $version; |
$vars['rev'] = $rev; |
$vars['peg'] = $peg; |
if (!$rep->hasReadAccess($path, false)) |
$vars["noaccess"] = true; |
if (!$rep->hasReadAccess($path)) |
{ |
$vars['error'] = $lang['NOACCESS']; |
sendHeaderForbidden(); |
} |
else if (!$svnrep->isFile($path, $rev, $peg)) |
{ |
renderTemplate404('file','NOPATH'); |
} |
// $listing is populated with file data when file.tmpl calls [websvn-getlisting] |
renderTemplate('file'); |
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."file.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing); |
?> |
/WebSVN/include/template.php |
---|
File deleted |
\ No newline at end of file |
/WebSVN/include/command.php |
---|
File deleted |
/WebSVN/include/diff_util.php |
---|
File deleted |
/WebSVN/include/utils.php |
---|
File deleted |
/WebSVN/include/setup.php |
---|
File deleted |
/WebSVN/include/configclass.php |
---|
File deleted |
/WebSVN/include/svnlook.php |
---|
File deleted |
/WebSVN/include/bugtraq.php |
---|
File deleted |
/WebSVN/include/version.php |
---|
File deleted |
/WebSVN/include/.gitignore |
---|
File deleted |
/WebSVN/include/authz.php |
---|
File deleted |
/WebSVN/include/diff_inc.php |
---|
File deleted |
/WebSVN/include/distconfig.php |
---|
File deleted |
/WebSVN/include/configclass.inc |
---|
0,0 → 1,1270 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// configclass.inc4 |
// |
// General class for handling configuration options |
require_once("include/command.inc"); |
require_once("include/auth.inc"); |
require_once("include/version.inc"); |
// Auxillary functions used to sort repositories by name/group |
// {{{ cmpReps($a, $b) |
function cmpReps($a, $b) |
{ |
// First, sort by group |
$g = strcasecmp($a->group, $b->group); |
if ($g) |
return $g; |
// Same group? Sort by name |
return strcasecmp($a->name, $b->name); |
} |
// }}} |
// {{{ cmpGroups($a, $b) |
function cmpGroups($a, $b) |
{ |
$g = strcasecmp($a->group, $b->group); |
if ($g) |
return $g; |
return 0; |
} |
// }}} |
// {{{ mergesort(&$array, [$cmp_function]) |
function mergesort(&$array, $cmp_function = 'strcmp') |
{ |
// Arrays of size < 2 require no action |
if (count($array) < 2) |
return; |
// Split the array in half |
$halfway = count($array) / 2; |
$array1 = array_slice($array, 0, $halfway); |
$array2 = array_slice($array, $halfway); |
// Recurse to sort the two halves |
mergesort($array1, $cmp_function); |
mergesort($array2, $cmp_function); |
// If all of $array1 is <= all of $array2, just append them. |
if (call_user_func($cmp_function, end($array1), $array2[0]) < 1) |
{ |
$array = array_merge($array1, $array2); |
return; |
} |
// Merge the two sorted arrays into a single sorted array |
$array = array(); |
$ptr1 = $ptr2 = 0; |
while ($ptr1 < count($array1) && $ptr2 < count($array2)) |
{ |
if (call_user_func($cmp_function, $array1[$ptr1], $array2[$ptr2]) < 1) |
{ |
$array[] = $array1[$ptr1++]; |
} |
else |
{ |
$array[] = $array2[$ptr2++]; |
} |
} |
// Merge the remainder |
while ($ptr1 < count($array1)) $array[] = $array1[$ptr1++]; |
while ($ptr2 < count($array2)) $array[] = $array2[$ptr2++]; |
return; |
} |
// }}} |
// A Repository configuration class |
Class Repository |
{ |
// {{{ Properties |
var $name; |
var $svnName; |
var $path; |
var $group; |
var $username; |
var $password; |
// Local configuration options must start off unset |
var $allowDownload; |
var $minDownloadLevel; |
var $allowedExceptions = array(); |
var $disallowedExceptions = array(); |
var $rss; |
var $spaces; |
var $ignoreSvnMimeTypes; |
var $ignoreWebSVNContentTypes; |
var $bugtraq; |
var $auth; |
var $contentEnc; |
var $templatePath; |
// }}} |
// {{{ __construct($name, $svnName, $path, [$group, [$username, [$password]]]) |
function Repository($name, $svnName, $path, $group = NULL, $username = NULL, $password = NULL) |
{ |
$this->name = $name; |
$this->svnName = $svnName; |
$this->path = $path; |
$this->group = $group; |
$this->username = $username; |
$this->password = $password; |
} |
// }}} |
// {{{ getDisplayName() |
function getDisplayName() |
{ |
if(!empty($this->group)) |
return $this->group.".".$this->name; |
else |
return $this->name; |
} |
// }}} |
// {{{ svnParams |
function svnParams() |
{ |
if (!empty($this->username)) |
return " --username ".$this->username." --password ".$this->password." "; |
else |
return " "; |
} |
// }}} |
// Local configuration accessors |
// {{{ RSS Feed |
function hideRSS() |
{ |
$this->rss = false; |
} |
function showRSS() |
{ |
$this->rss = true; |
} |
function getHideRSS() |
{ |
global $config; |
if (isset($this->rss)) |
return $this->rss; |
return $config->getHideRSS(); |
} |
// }}} |
// {{{ Download |
function allowDownload() |
{ |
$this->allowDownload = true; |
} |
function disallowDownload() |
{ |
$this->allowDownload = false; |
} |
function getAllowDownload() |
{ |
global $config; |
if (isset($this->allowDownload)) |
return $this->allowDownload; |
return $config->getAllowDownload(); |
} |
function setMinDownloadLevel($level) |
{ |
$this->minDownloadLevel = $level; |
} |
function getMinDownloadLevel() |
{ |
global $config; |
if (isset($this->minDownloadLevel)) |
return $this->minDownloadLevel; |
return $config->getMinDownloadLevel(); |
} |
function addAllowedDownloadException($path) |
{ |
if ($path{strlen($path) - 1} != "/") |
$path .= "/"; |
$this->allowedExceptions[] = $path; |
} |
function addDisallowedDownloadException($path) |
{ |
if ($path{strlen($path) - 1} != "/") |
$path .= "/"; |
$this->disallowedExceptions[] = $path; |
} |
function isDownloadAllowed($path) |
{ |
global $config; |
// Check global download option |
if (!$this->getAllowDownload()) |
return false; |
// Check with access module |
if (!$this->hasUnrestrictedReadAccess($path)) |
return false; |
$subs = explode("/", $path); |
$level = count($subs) - 2; |
if ($level >= $this->getMinDownloadLevel()) |
{ |
// Level OK, search for disallowed exceptions |
if ($config->findException($path, $this->disallowedExceptions)) |
return false; |
if ($config->findException($path, $config->disallowedExceptions)) |
return false; |
return true; |
} |
else |
{ |
// Level not OK, search for disallowed exceptions |
if ($config->findException($path, $this->allowedExceptions)) |
return true; |
if ($config->findException($path, $config->allowedExceptions)) |
return true; |
return false; |
} |
} |
// }}} |
// {{{ Templates |
function setTemplatePath($path) |
{ |
$lastchar = substr($path, -1, 1); |
if (!($lastchar == DIRECTORY_SEPARATOR || |
$lastchar == '/' || |
$lastchar == '\\')) |
$path .= DIRECTORY_SEPARATOR; |
$this->templatePath = $path; |
} |
function getTemplatePath() |
{ |
global $config; |
if (!empty($this->templatePath)) |
return $this->templatePath; |
else |
return $config->getTemplatePath(); |
} |
// }}} |
// {{{ Tab expansion |
function expandTabsBy($sp) |
{ |
$this->spaces = $sp; |
} |
function getExpandTabsBy() |
{ |
global $config; |
if (isset($this->spaces)) |
return $this->spaces; |
return $config->getExpandTabsBy(); |
} |
// }}} |
// {{{ MIME-Type Handing |
function ignoreSvnMimeTypes() |
{ |
$this->ignoreSvnMimeTypes = true; |
} |
function useSvnMimeTypes() |
{ |
$this->ignoreSvnMimeTypes = false; |
} |
function getIgnoreSvnMimeTypes() |
{ |
global $config; |
if (isset($this->ignoreSvnMimeTypes)) |
return $this->ignoreSvnMimeTypes; |
return $config->getIgnoreSvnMimeTypes(); |
} |
function ignoreWebSVNContentTypes() |
{ |
$this->ignoreWebSVNContentTypes = true; |
} |
function useWebSVNContentTypes() |
{ |
$this->ignoreWebSVNContentTypes = false; |
} |
function getIgnoreWebSVNContentTypes() |
{ |
global $config; |
if (isset($this->ignoreWebSVNContentTypes)) |
return $this->ignoreWebSVNContentTypes; |
return $config->getIgnoreWebSVNContentTypes(); |
} |
// }}} |
// {{{ Issue Tracking |
function useBugtraqProperties() |
{ |
$this->bugtraq = true; |
} |
function ignoreBugtraqProperties() |
{ |
$this->bugtraq = false; |
} |
function getBugtraq() |
{ |
global $config; |
if (isset($this->bugtraq)) |
return $this->bugtraq; |
return $config->getBugtraq(); |
} |
// }}} |
// {{{ Encodings |
function setContentEncoding($contentEnc) |
{ |
$this->contentEnc = $contentEnc; |
} |
function getContentEncoding() |
{ |
global $config; |
if (isset($this->contentEnc)) |
return $this->contentEnc; |
return $config->getContentEncoding(); |
} |
// }}} |
// {{{ Authentication |
function useAuthenticationFile($file) |
{ |
if (is_readable($file)) |
$this->auth =& new Authentication($file); |
else |
die('Unable to read authentication file "'.$file.'"'); |
} |
function hasReadAccess($path, $checkSubFolders = false) |
{ |
global $config; |
$a = null; |
if (isset($this->auth)) |
$a =& $this->auth; |
else |
$a =& $config->getAuth(); |
if (!empty($a)) |
return $a->hasReadAccess($this->svnName, $path, $checkSubFolders); |
// No auth file - free access... |
return true; |
} |
function hasUnrestrictedReadAccess($path) |
{ |
global $config; |
$a = null; |
if (isset($this->auth)) |
$a =& $this->auth; |
else |
$a =& $config->getAuth(); |
if (!empty($a)) |
return $a->hasUnrestrictedReadAccess($this->svnName, $path); |
// No auth file - free access... |
return true; |
} |
// }}} |
} |
// The general configuration class |
Class Config |
{ |
// {{{ Properties |
// Tool path locations |
var $svnlook = "svnlook"; |
var $svn = "svn --non-interactive --config-dir /tmp"; |
var $svn_noparams = "svn --config-dir /tmp"; |
var $diff = "diff"; |
var $enscript ="enscript"; |
var $sed = "sed"; |
var $gzip = "gzip"; |
var $tar = "tar"; |
// Other configuration items |
var $treeView = true; |
var $flatIndex = true; |
var $openTree = false; |
var $serverIsWindows = false; |
var $phpCompatEnabled = false; |
var $cacheResults = false; |
var $multiViews = false; |
var $useEnscript = false; |
var $allowDownload = false; |
var $minDownloadLevel = 0; |
var $allowedExceptions = array(); |
var $disallowedExceptions = array(); |
var $rss = true; |
var $spaces = 8; |
var $bugtraq = false; |
var $auth = ""; |
var $templatePath = "./templates/Standard/"; |
var $phpCompatPath = './include/PHP/Compat.php'; |
var $ignoreSvnMimeTypes = false; |
var $ignoreWebSVNContentTypes = false; |
var $subversionMajorVersion = ""; |
var $subversionMinorVersion = ""; |
// Default character encodings |
var $inputEnc = ""; // Encoding of output returned from command line |
var $contentEnc = ""; // Encoding of repository content |
var $outputEnc = "UTF-8"; // Encoding of web page. Now forced to UTF-8 |
var $quote = "'"; |
var $pathSeparator = ":"; |
var $_repositories; |
// }}} |
// {{{ __construct() |
function Config() |
{ |
} |
// }}} |
// {{{ Repository configuration |
function addRepository($name, $url, $group = NULL, $username = NULL, $password = NULL) |
{ |
$url = str_replace(DIRECTORY_SEPARATOR, "/", $url); |
if ($url{strlen($url) - 1} == "/") |
$url = substr($url, 0, -1); |
$svnName = substr($url, strrpos($url, "/") + 1); |
$this->_repositories[] = new Repository($name, $svnName, $url, $group, $username, $password); |
} |
function getRepositories() |
{ |
return $this->_repositories; |
} |
function &findRepository($name) |
{ |
foreach ($this->_repositories as $index => $rep) |
{ |
if (strcmp($rep->getDisplayName(), $name) == 0) |
{ |
$repref =& $this->_repositories[$index]; |
return $repref; |
} |
} |
print "ERROR: Unable to find repository '$name'"; |
exit; |
} |
// }}} |
// {{{ setServerIsWindows |
// |
// The server is running on Windows |
function setServerIsWindows() |
{ |
$this->serverIsWindows = true; |
// Try to set the input encoding intelligently |
$cp = 0; |
if ($cp = @shell_exec("CHCP")) |
{ |
$cp = trim(substr($cp, strpos($cp, ":") + 1)); |
settype($cp, "integer"); |
} |
// Use the most sensible default value if that failed |
if ($cp == 0) $cp = 850; |
// We assume, as a default, that the encoding of the repository contents is |
// in iso-8859-1, to be compatible with compilers and the like. |
$this->setInputEncoding("CP$cp", "iso-8859-1"); |
// On Windows machines, use double quotes around command line parameters |
$this->quote = '"'; |
// On Windows, semicolon separates path entries in a list rather than colon. |
$this->pathSeparator = ";"; |
} |
// }}} |
// {{{ setPHPCompatEnabled |
// |
// Used for PHP4 |
function setPHPCompatEnabled() { |
$this->phpCompatEnabled = true; |
} |
function isPHPCompatEnabled() { |
return $this->phpCompatEnabled; |
} |
// }}} |
// {{{ Caching |
// setCachingOn |
// |
// Set result caching on |
function setCachingOn() |
{ |
$this->cacheResults = true; |
} |
function isCachingOn() |
{ |
return $this->cacheResults; |
} |
// }}} |
// {{{ MultiViews |
// useMultiViews |
// |
// Use MultiViews to access the repository |
function useMultiViews() |
{ |
$this->multiViews = true; |
} |
function getUseMultiViews() |
{ |
return $this->multiViews; |
} |
// }}} |
// {{{ Enscript |
// useEnscript |
// |
// Use Enscript to colourise listings |
function useEnscript() |
{ |
$this->useEnscript = true; |
} |
function getUseEnscript() |
{ |
return $this->useEnscript; |
} |
// }}} |
// {{{ RSS |
// offerRSS |
// |
// Use Enscript to colourise listings |
function hideRSS($myrep = 0) |
{ |
if (empty($myrep)) |
$this->rss = false; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->hideRSS(); |
} |
} |
function getHideRSS() |
{ |
return $this->rss; |
} |
// }}} |
// {{{ Downloads |
// allowDownload |
// |
// Allow download of tarballs |
function allowDownload($myrep = 0) |
{ |
if (empty($myrep)) |
$this->allowDownload = true; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->allowDownload(); |
} |
} |
function disallowDownload($myrep = 0) |
{ |
if (empty($myrep)) |
$this->allowDownload = false; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->disallowDownload(); |
} |
} |
function getAllowDownload() |
{ |
return $this->allowDownload; |
} |
function setMinDownloadLevel($level, $myrep = 0) |
{ |
if (empty($myrep)) |
$this->minDownloadLevel = $level; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->setMinDownloadLevel($level); |
} |
} |
function getMinDownloadLevel() |
{ |
return $this->minDownloadLevel; |
} |
function addAllowedDownloadException($path, $myrep = 0) |
{ |
if ($path{strlen($path) - 1} != "/") |
$path .= "/"; |
if (empty($myrep)) |
$this->allowedExceptions[] = $path; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->addAllowedDownloadException($path); |
} |
} |
function addDisallowedDownloadException($path, $myrep = 0) |
{ |
if ($path{strlen($path) - 1} != "/") |
$path .= "/"; |
if (empty($myrep)) |
$this->disallowedExceptions[] = $path; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->addDisallowedDownloadException($path); |
} |
} |
function findException($path, $exceptions) |
{ |
foreach ($exceptions As $key => $exc) |
{ |
if (strncmp($exc, $path, strlen($exc)) == 0) |
return true; |
} |
return false; |
} |
// }}} |
// {{{ getURL |
// |
// Get the URL to a path name based on the current config |
function getURL($rep, $path, $op) |
{ |
$base = $_SERVER["SCRIPT_NAME"]; |
if ($this->multiViews) |
{ |
// Remove the .php |
if (eregi(".php$", $base)) |
{ |
// Remove the .php |
$base = substr($base, 0, -4); |
} |
if ($path && $path{0} != "/") $path = "/".$path; |
$url = $base; |
if (is_object($rep)) |
{ |
$url .= "/".$rep->getDisplayName().str_replace('%2F', '/', urlencode($path)); |
if ($op != "dir" && $op != "file") |
$url .= "?op=$op&"; |
else |
$url .= "?"; |
} |
return $url; |
} |
else |
{ |
switch ($op) |
{ |
case "dir": |
$fname = "listing.php"; |
break; |
case "file": |
$fname = "filedetails.php"; |
break; |
case "log": |
$fname = "log.php"; |
break; |
case "diff": |
$fname = "diff.php"; |
break; |
case "blame": |
$fname = "blame.php"; |
break; |
case "form": |
$fname = "form.php"; |
break; |
case "rss": |
$fname = "rss.php"; |
break; |
case "dl": |
$fname = "dl.php"; |
break; |
case "comp": |
$fname = "comp.php"; |
break; |
} |
# if ($rep == -1) |
if (!is_object($rep)) |
return $fname."?path=".urlencode($path)."&"; |
else |
return $fname."?repname=".urlencode($rep->getDisplayName())."&path=".urlencode($path)."&"; |
} |
} |
// }}} |
// {{{ Paths and Commands |
// setPath |
// |
// Set the location of the given path |
function setPath(&$var, $path, $name, $params = "") |
{ |
$lastchar = substr($path, -1, 1); |
$isDir = ($lastchar == DIRECTORY_SEPARATOR || |
$lastchar == "/" || |
$lastchar == "\\"); |
if (!$isDir) |
{ |
$path .= DIRECTORY_SEPARATOR; |
} |
// On a windows machine we need to put spaces around the entire command |
// to allow for spaces in the path |
if ($this->serverIsWindows) |
$var = "\"$path$name\""; |
else |
$var = "$path$name"; |
$var .= " ".$params; |
} |
// setSVNCommandPath |
// |
// Define the location of the svn and svnlook commands |
function setSVNCommandPath($path) |
{ |
$this->setPath($this->svn, $path, "svn", "--non-interactive --config-dir /tmp"); |
$this->setPath($this->svn_noparams, $path, "svn", " --config-dir /tmp"); |
$this->setPath($this->svnlook, $path, "svnlook"); |
} |
function getSvnCommand() |
{ |
return $this->svn; |
} |
function getCleanSvnCommand() |
{ |
return $this->svn_noparams; |
} |
function getSvnlookCommand() |
{ |
return $this->svnlook; |
} |
// setDiffPath |
// |
// Define the location of the diff command |
function setDiffPath($path) |
{ |
$this->setPath($this->diff, $path, "diff"); |
} |
function getDiffCommand() |
{ |
return $this->diff; |
} |
// setEnscriptPath |
// |
// Define the location of the enscript command |
function setEnscriptPath($path) |
{ |
$this->setPath($this->enscript, $path, "enscript"); |
} |
function getEnscriptCommand() |
{ |
return $this->enscript; |
} |
// setSedPath |
// |
// Define the location of the sed command |
function setSedPath($path) |
{ |
$this->setPath($this->sed, $path, "sed"); |
} |
function getSedCommand() |
{ |
return $this->sed; |
} |
// setTarPath |
// |
// Define the location of the tar command |
function setTarPath($path) |
{ |
$this->setPath($this->tar, $path, "tar"); |
} |
function getTarCommand() |
{ |
return $this->tar; |
} |
// setGzipPath |
// |
// Define the location of the GZip command |
function setGzipPath($path) |
{ |
$this->setPath($this->gzip, $path, "gzip"); |
} |
function getGzipCommand() |
{ |
return $this->gzip; |
} |
// Templates |
function setTemplatePath($path, $myrep = 0) |
{ |
if (empty($myrep)) |
{ |
$lastchar = substr($path, -1, 1); |
if (!($lastchar == DIRECTORY_SEPARATOR || |
$lastchar == '/' || |
$lastchar == '\\')) |
$path .= DIRECTORY_SEPARATOR; |
$this->templatePath = $path; |
} |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->setTemplatePath($path); |
} |
} |
function getTemplatePath() |
{ |
return $this->templatePath; |
} |
// PHP Compat file (from PEAR) |
function setPHPCompatPath($path) |
{ |
$this->setPath($this->phpCompatPath, $path, 'Compat.php'); |
} |
function getPHPCompatFile() |
{ |
return trim($this->phpCompatPath); |
} |
// }}} |
// {{{ parentPath |
// |
// Automatically set up the repositories based on a parent path |
function parentPath($path, $group = NULL) |
{ |
if ($handle = @opendir($path)) |
{ |
// For each file... |
while (false !== ($file = readdir($handle))) |
{ |
// That's also a non hidden directory |
if (is_dir($path.DIRECTORY_SEPARATOR.$file) && $file{0} != ".") |
{ |
// And that contains a db directory (in an attempt to not include |
// non svn repositories. |
if (is_dir($path.DIRECTORY_SEPARATOR.$file.DIRECTORY_SEPARATOR."db")) |
{ |
// We add the repository to the list |
$this->addRepository($file, "file:///".$path.DIRECTORY_SEPARATOR.$file, $group); |
} |
} |
} |
closedir($handle); |
} |
// Sort the repositories into alphabetical order |
if (!empty($this->_repositories)) |
usort($this->_repositories, "cmpReps"); |
} |
// }}} |
// {{{ Encoding functions |
function setInputEncoding($systemEnc) |
{ |
$this->inputEnc = $systemEnc; |
if (!isset($this->contentEnc)) |
$this->contentEnc = $systemEnc; |
} |
function getInputEncoding() |
{ |
return $this->inputEnc; |
} |
function setContentEncoding($contentEnc, $myrep = 0) |
{ |
if (empty($myrep)) |
$this->contentEnc = $contentEnc; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->setContentEncoding($contentEnc); |
} |
} |
function getContentEncoding() |
{ |
return $this->contentEnc; |
} |
// }}} |
// {{{ Tab expansion functions |
function expandTabsBy($sp, $myrep = 0) |
{ |
if (empty($myrep)) |
$this->spaces = $sp; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->expandTabsBy($sp); |
} |
} |
function getExpandTabsBy() |
{ |
return $this->spaces; |
} |
// }}} |
// {{{ Misc settings |
function ignoreSvnMimeTypes() |
{ |
$this->ignoreSvnMimeTypes = true; |
} |
function getIgnoreSvnMimeTypes() |
{ |
return $this->ignoreSvnMimeTypes; |
} |
function ignoreWebSVNContentTypes() |
{ |
$this->ignoreWebSVNContentTypes = true; |
} |
function getIgnoreWebSVNContentTypes() |
{ |
return $this->ignoreWebSVNContentTypes; |
} |
function useBugtraqProperties($myrep = 0) |
{ |
if (empty($myrep)) |
$this->bugtraq = true; |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->useBugtraqProperties(); |
} |
} |
function getBugtraq() |
{ |
return $this->bugtraq; |
} |
function useAuthenticationFile($file, $myrep = 0) |
{ |
if (empty($myrep)) |
{ |
if (is_readable($file)) |
$this->auth = new Authentication($file); |
else |
{ |
echo "Unable to read authentication file '$file'"; |
exit; |
} |
} |
else |
{ |
$repo =& $this->findRepository($myrep); |
$repo->useAuthenticationFile($file); |
} |
} |
function &getAuth() |
{ |
return $this->auth; |
} |
function useTreeView() |
{ |
$this->treeView = true; |
} |
function getUseTreeView() |
{ |
return $this->treeView; |
} |
function useFlatView() |
{ |
$this->treeView = false; |
} |
function useTreeIndex($open) |
{ |
$this->flatIndex = false; |
$this->openTree = $open; |
} |
function getUseFlatIndex() |
{ |
return $this->flatIndex; |
} |
function getOpenTree() |
{ |
return $this->openTree; |
} |
// setSubversionMajorVersion |
// |
// Set subversion major version |
function setSubversionMajorVersion($subversionMajorVersion) |
{ |
$this->subversionMajorVersion = $subversionMajorVersion; |
} |
function getSubversionMajorVersion() |
{ |
return $this->subversionMajorVersion; |
} |
// setSubversionMinorVersion |
// |
// Set subversion minor version |
function setSubversionMinorVersion($subversionMinorVersion) |
{ |
$this->subversionMinorVersion = $subversionMinorVersion; |
} |
function getSubversionMinorVersion() |
{ |
return $this->subversionMinorVersion; |
} |
// }}} |
// {{{ Sort the repostories |
// |
// This function sorts the repositories by group name. The contents of the |
// group are left in there original order, which will either be sorted if the |
// group was added using the parentPath function, or defined for the order in |
// which the repositories were included in the user's config file. |
// |
// Note that as of PHP 4.0.6 the usort command no longer preserves the order |
// of items that are considered equal (in our case, part of the same group). |
// The mergesort function preserves this order. |
function sortByGroup() |
{ |
if (!empty($this->_repositories)) |
mergesort($this->_repositories, "cmpGroups"); |
} |
// }}} |
} |
?> |
/WebSVN/include/config.inc |
---|
0,0 → 1,386 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// config.inc |
// |
// Configuration parameters |
// --- FOLLOW THE INSTRUCTIONS BELOW TO CONFIGURE YOUR SETUP --- |
// {{{ PLATFORM CONFIGURATION --- |
// Uncomment the next line if your running a windows server |
// |
// $config->setServerIsWindows(); |
// Configure these lines if your commands aren't on your path. |
// |
// $config->setSVNCommandPath('Path/to/svn and svnlook/ e.g. c:\\program files\\subversion\\bin'); |
// $config->setDiffPath('Path/to/diff/command/'); |
// For syntax colouring, if option enabled... |
// $config->setEnscriptPath('Path/to/enscript/command/'); |
// $config->setSedPath('Path/to/sed/command/'); |
// For delivered tarballs, if option enabled... |
// $config->setTarPath('Path/to/tar/command/'); |
// For delivered GZIP'd files and tarballs, if option enabled... |
// $config->setGZipPath('Path/to/gzip/command/'); |
// }}} |
// {{{ REPOSITORY SETUP --- |
// There are 2 methods for defining the repositiories available on the system. Either you list |
// them by hand, in which case you can give each one the name of your choice, or you use the |
// parent path function, in which case the name of the directory is used as the repository name. |
// |
// In all cases, you may optionally supply a group name to the repositories. This is useful in the |
// case that you need to separate your projects. Grouped Repositories are referred to using the |
// convention GroupName.RepositoryName |
// |
// Performance is much better on local repositories (e.g. accessed by file:///). However, you |
// can also provide an interface onto a remote repository. In this case you should supply the |
// username and password needed to access it. |
// |
// To configure the repositories by hand, copy the appropriate line below, uncomment it and |
// replace the name and URL of your repository. |
// Local repositories (without and with optional group): |
// |
// $config->addRepository('NameToDisplay', 'URL to repository (e.g. file:///c:/svn/proj)'); |
// $config->addRepository('NameToDisplay', 'URL to repository (e.g. file:///c:/svn/proj)', 'group'); |
$config->addRepository('MLAB', 'file:///data/svnData/MLAB'); |
$config->addRepository('library', 'file:///data/svnData/library'); |
$config->addRepository('svnkaklik', 'file:///data/svnData/svnkaklik'); |
$config->addRepository('MLAB_E', 'file:///data/svnData/MLAB_E'); |
$config->addRepository('8magsvn', 'file:///data/svnData/8magsvn'); |
// Remote repositories (without and with optional group): |
// |
// $config->addRepository('NameToDisplay', 'URL (e.g. http://path/to/rep)', NULL, 'username', 'password'); |
// $config->addRepository('NameToDisplay', 'URL (e.g. http://path/to/rep)', 'group', 'username', 'password'); |
// |
// To use the parent path method, uncomment the newt line and and replace the path with your one. You |
// can call the function several times if you have several parent paths. Note that in this case the |
// path is a filesystem path |
// |
// $config->parentPath('Path/to/parent (e.g. c:\\svn)'); |
// }}} |
// {{{ LOOK AND FEEL --- |
// |
// Uncomment ONLY the template file that you want. |
// $config->setTemplatePath("$locwebsvnreal/templates/Standard/"); |
// $config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/"); |
// $config->setTemplatePath("$locwebsvnreal/templates/Zinn/"); |
// You may also specify a per repository template file by uncommenting and changing the following |
// line as necessary. Use the convention "groupname.myrep" if your repository is in a group. |
// $config->setTemplatePath('$locwebsvnreal/templates/Standard/', 'myrep'); // Access file for myrep |
$config->setTemplatePath("$locwebsvnreal/templates/MLAB/", "MLAB"); |
$config->setTemplatePath("$locwebsvnreal/templates/MLAB/", "library"); |
$config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/", "8magsvn"); |
$config->setTemplatePath("$locwebsvnreal/templates/Standard/", "svnkaklik"); |
$config->setTemplatePath("$locwebsvnreal/templates/MLAB/", "MLAB_E"); |
// The index page containing the projects may either be displayed as a flat view (the default), |
// where grouped repositories are displayed as "GroupName.RepName" or as a tree view. |
// In the case of a tree view, you may choose whether the entire tree is open by default. |
// $config->useTreeIndex(false); // Tree index, closed by default |
// $config->useTreeIndex(true); // Tree index, open by default |
// By default, WebSVN displays a tree view onto the current directory. You can however |
// choose to display a flat view of the current directory only, which may make the display |
// load faster. Uncomment this line if you want that. |
// $config->useFlatView(); |
// }}} |
// {{{ LANGUAGE SETUP --- |
// WebSVN uses the iconv module to convert messages from your system's character set to the |
// UTF-8 output encoding. If you find that your log messages aren't displayed correctly then |
// you'll need to change the value here. |
// |
// You may also specify the character encoding of the repository contents if different from |
// the system encoding. This is typically the case for windows users, whereby the command |
// line returns, for example, CP850 encoded strings, whereas the source files are encoded |
// as iso-8859-1 by Windows based text editors. When display text file, WebSVN will convert |
// them from the content encoding to the output encoding (UTF-8). |
// |
// WebSVN does its best to automate all this, so only use the following if it doesn't work |
// "out of the box". Uncomment and change one of the examples below. |
// |
// $config->setInputEncoding('CP850'); // Encoding of result returned by svn command line, etc. |
// $config->setContentEncoding('iso-8859-1'); // Content encoding of all your repositories // repositories |
// You may also specify a content encoding on a per repository basis. Uncomment and copy this |
// line as necessary. |
// |
// $config->setContentEncoding('iso-8859-1', 'MyEnc'); |
// Note for Windows users: To enable iconv you'll need to enable the extension in your php.ini file |
// AND copy iconv.dll (not php_iconv.dll) to your Windows system folder. In most cases the correct |
// encoding is set when you call $config->setServerIsWindows();. |
// Note for *nix users. You'll need to have iconv compiled into your binary. The default input and |
// output encodings are taken from your locale informations. Override these if they aren't correct. |
// Uncomment the default language. If you want English then don't do anything here. |
// |
include 'languages/czech.inc'; |
// include 'languages/catalan.inc'; |
// include 'languages/danish.inc'; |
// include 'languages/dutch.inc'; |
// include 'languages/finnish.inc'; |
// include 'languages/french.inc'; |
// include 'languages/german.inc'; |
// include 'languages/japanese.inc'; |
// include 'languages/korean.inc'; |
// include 'languages/norwegian.inc'; |
// include 'languages/polish.inc'; |
// include 'languages/portuguese.inc'; |
// include 'languages/russian.inc'; |
// include 'languages/schinese.inc'; |
// include 'languages/slovenian.inc'; |
// include 'languages/spanish.inc'; |
// include 'languages/swedish.inc'; |
// include 'languages/tchinese.inc'; |
// include 'languages/turkish.inc'; |
// }}} |
// {{{ MULTIVIEWS --- |
// Uncomment this line if you want to use MultiView to access the repository by, for example: |
// |
// http://servername/wsvn/repname/path/in/repository |
// |
// Note: The websvn directory will need to have Multiviews turned on in Apache, and you'll need to configure |
// wsvn.php |
// $config->useMultiViews(); |
// }}} |
// {{{ ACCESS RIGHTS --- |
// Uncomment this line if you want to use your Subversion access file to control access |
// rights via WebSVN. For this to work, you'll need to set up the same Apache based authentication |
// to the WebSVN (or wsvn) directory as you have for Subversion itself. More information can be |
// found in install.txt |
// $config->useAuthenticationFile('/path/to/accessfile'); // Global access file |
// You may also specify a per repository access file by uncommenting and copying the following |
// line as necessary. Use the convention 'groupname.myrep' if your repository is in a group. |
$config->useAuthenticationFile('/data/svnData/MLAB/conf/authz', 'MLAB'); // Access file for MLAB |
$config->useAuthenticationFile('/data/svnData/svnkaklik/conf/authz', 'svnkaklik'); // Access file for svnkaklik |
// }}} |
// {{{ FILE CONTENT --- |
// |
// You may wish certain file types to be GZIP'd and delieved to the user when clicked apon. |
// This is useful for binary files and the like that don't display well in a browser window! |
// Copy, uncomment and modify this line for each extension to which this rule should apply. |
// (Don't forget the . before the extension. You don't need an index between the []'s). |
// If you'd rather that the files were delivered uncompressed with the associated MIME type, |
// then read below. |
// |
// $zipped[] = '.dll'; |
// Subversion controlled files have an svn:mime-type property that can |
// be set on a file indicating its mime type. By default binary files |
// are set to the generic appcliation/octet-stream, and other files |
// don't have it set at all. WebSVN also has a built-in list of |
// associations from file extension to MIME content type. (You can |
// view this list in setup.inc). |
// |
// Determining the content-type: By default, if the svn:mime-type |
// property exists and is different from application/octet-stream, it |
// is used. Otherwise, if the built-in list has a contentType entry |
// for the extension of the file, that is used. Otherwise, if the |
// svn:mime-type property exists has the generic binary value of |
// application/octet-stream, the file will be served as a binary |
// file. Otherwise, the file will be brought up as ASCII text in the |
// browser window (although this text may optionally be colourised. |
// See below). |
// |
// Uncomment this if you want to ignore any svn:mime-type property on your |
// files. |
// |
// $config->ignoreSvnMimeTypes(); |
// |
// Uncomment this if you want skip WebSVN's custom mime-type handling |
// |
// $config->ignoreWebSVNContentTypes(); |
// |
// Following the examples below, you can add new associations, modify |
// the default ones or even delete them entirely (to show them in |
// ASCII via WebSVN). |
// $contentType['.c'] = 'plain/text'; // Create a new association |
// $contentType['.doc'] = 'plain/text'; // Modify an existing one |
// unset($contentType['.m'] // Remove a default association |
// }}} |
// {{{ TARBALLS --- |
// You need tar and gzip installed on your system. Set the paths above if necessary |
// |
// Uncomment the line below to offer a tarball download option across all your |
// repositories. |
// |
$config->allowDownload(); |
// |
// To change the global option for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->allowDownload('myrep'); // Specifically allow downloading for 'myrep' |
// $config->disallowDownload('myrep'); // Specifically disallow downloading for 'myrep' |
// You can also choose the minimum directory level from which you'll allow downloading. |
// A value of zero will allow downloading from the root. 1 will allow downloding of directories |
// in the root, etc. |
// |
// If your project is arranged with trunk, tags and branches at the root level, then a value of 2 |
// would allow the downloading of directories within branches/tags while disallowing the download |
// of the entire branches or tags directories. This would also stop downloading of the trunk, but |
// see after for path exceptions. |
// |
// Change the line below to set the download level across all your repositories. |
$config->setMinDownloadLevel(2); |
// To change the level for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->setMinDownloadLevel(2, 'myrep'); |
// Finally, you may add or remove certain directories (and their contents) either globally |
// or on a per repository basis. Uncomment and copy the following lines as necessary. Note |
// that the these are searched in the order than you give them until a match is made (with the |
// exception that all the per repository exceptions are tested before the global ones). This means |
// that you must disallow /a/b/c/ before you allow /a/b/ otherwise the allowed match on /a/b/ will |
// stop any further searching, thereby allowing downloads on /a/b/c/. |
// Global exceptions possibilties: |
// |
// $config->addAllowedDownloadException('/path/to/allowed/directory/'); |
// $config->addDisAllowedDownloadException('/path/to/disallowed/directory/'); |
// |
// Per repository exception possibilties: |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// |
// $config->addAllowedDownloadException('/path/to/allowed/directory/', 'myrep'); |
// $config->addDisAllowedDownloadException('/path/to/disallowed/directory/', 'myrep'); |
// }}} |
// {{{ COLOURISATION --- |
// Uncomment this line if you want to use Enscript to colourise your file listings |
// |
// You'll need Enscript version 1.6 or higher AND Sed installed to use this feature. |
// Set the path above. |
// |
// $config->useEnscript(); |
// Enscript need to be told what the contents of a file are so that it can be colourised |
// correctly. WebSVN includes a predefined list of mappings from file extension to Enscript |
// file type (viewable in setup.inc). |
// |
// Here you should add and other extensions not already listed or redefine the default ones. eg: |
// |
// $extEnscript['.pas'] = 'pascal'; |
// |
// Note that extensions are case sensitive. |
// }}} |
// {{{ RSSFEED --- |
// Uncomment this line if you wish to hide the RSS feed links across all repositories |
// |
$config->hideRSS(); |
// |
// To change the global option for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->hideRSS('myrep'); // Specifically hide RSS links for 'myrep' |
// $config->showRSS('myrep'); // Specifically show RSS links for 'myrep' |
// }}} |
// {{{ BUGTRAQ --- |
// Uncomment this line if you wish to use bugtraq: properties to show links to your BugTracker |
// from the log messages. |
// |
// $config->useBugtraqProperties(); |
// |
// To change the global option for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->useBugtraqProperties('myrep'); // Specifically use bugtraq properties for 'myrep' |
// $config->ignoreBugtraqProperties('myrep'); // Specifically ignore bugtraq properties for 'myrep' |
// }}} |
// {{{ MISCELLANEOUS --- |
// Comment out this if you don't have the right to use it. Be warned that you may need it however! |
set_time_limit(0); |
// Comment this line to turn off caching of repo information. This will slow down your browsing. |
$config->setCachingOn(); |
// Number of spaces to expand tabs to in diff/listing view across all repositories |
$config->expandTabsBy(8); |
// To change the global option for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->expandTabsBy(3, 'myrep'); // Expand Tabs by 3 for repository 'myrep' |
// For installations without PHP5, a copy of PEAR's PHP Compat library is included. |
// If you have your own version of Compat you wish to use, go ahead and specify here. |
// $config->setPHPCompatPath('/usr/share/php/PHP/'); |
// }}} |
?> |
/WebSVN/include/setup.inc |
---|
0,0 → 1,459 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// setup.inc |
// |
// Global setup |
// --- DON'T CHANGE THIS FILE --- |
// |
// User changes should be done in config.ini |
// Include the configuration class |
require_once 'include/configclass.inc'; |
// Create the config |
$config = new Config; |
// Set up the default character encodings |
if (function_exists('iconv_get_encoding')) |
{ |
$config->setInputEncoding(iconv_get_encoding('input_encoding')); |
} |
// Define the language array |
$lang = array(); |
$langNames = array(); |
// Set up locwebsvnhttp |
// Note: we will use nothing in MultiViews mode so that the URLs use the root |
// directory by default. |
if (empty($locwebsvnhttp)) |
$locwebsvnhttp = defined('WSVN_MULTIVIEWS') ? '' : '.'; |
if (empty($locwebsvnreal)) |
$locwebsvnreal = '.'; |
$vars['locwebsvnhttp'] = $locwebsvnhttp; |
// Include a default language file (must go before config.inc) |
require 'languages/english.inc'; |
// Get the user's personalised config (requires the locwebsvnhttp stuff above) |
require_once 'config.inc'; |
// Load PHP_Compat if we're going to use it. This needs to be done after including config.inc (which contains |
// the setting) but before svnlook.inc (which requires util.inc, which contains PHP4-incompatible functions) |
if ($config->isPHPCompatEnabled()) { |
require_once($config->getPHPCompatFile()); |
require_once 'include/php5compat.inc'; |
} |
require_once 'include/svnlook.inc'; |
// Make sure that the input locale is set up correctly |
setlocale(LC_ALL, ''); |
// {{{ Content-Type's |
// Set up the default content-type extension handling |
$contentType = array ( |
'.dwg' => 'application/acad', // AutoCAD Drawing files |
'.DWG' => 'application/acad', // AutoCAD Drawing files |
'.arj' => 'application/arj', // |
'.ccAD' => 'application/clariscad', // ClarisCAD files |
'.DRW' => 'application/drafting', // MATRA Prelude drafting |
'.dxf' => 'application/dxf', // DXF (AutoCAD) |
'.DXF' => 'application/dxf', // DXF (AutoCAD) |
'.unv' => 'application/i-deas', //SDRC I-DEAS files |
'.UNV' => 'application/i-deas', //SDRC I-DEAS files |
'.igs' => 'application/iges', // IGES graphics format |
'.iges' => 'application/iges', // IGES graphics format |
'.IGS' => 'application/iges', // IGES graphics format |
'.IGES' => 'application/iges', // IGES graphics format |
'.hqx' => 'application/mac-binhex40', // Macintosh BinHex format |
'.word' => 'application/msword', // Microsoft Word |
'.w6w' => 'application/msword', // Microsoft Word |
'.doc' => 'application/msword', // Microsoft Word |
'.DOC' => 'application/msword', // Microsoft Word |
'.wri' => 'application/mswrite', // Microsoft Write |
'.bin' => 'application/octet-stream', // Uninterpreted binary |
'.exe' => 'application/x-msdownload', // Windows EXE |
'.EXE' => 'application/x-msdownload', // Windows EXE |
'.oda' => 'application/oda', // |
'.pdf' => 'application/pdf', // PDF (Adobe Acrobat) |
'.PDF' => 'application/pdf', // PDF (Adobe Acrobat) |
'.ai' => 'application/postscript', // PostScript |
'.PS' => 'application/postscript', // PostScript |
'.ps' => 'application/postscript', // PostScript |
'.eps' => 'application/postscript', // PostScript |
'.prt' => 'application/pro_eng', // PTC Pro/ENGINEER |
'.PRT' => 'application/pro_eng', // PTC Pro/ENGINEER |
'.part' => 'application/pro_eng', // PTC Pro/ENGINEER |
'.rtf' => 'application/rtf', // Rich Text Format |
'.set' => 'application/set', // SET (French CAD standard) |
'.SET' => 'application/set', // SET (French CAD standard) |
'.stl' => 'application/sla', // Stereolithography |
'.STL' => 'application/sla', // Stereolithography |
'.SOL' => 'application/solids', // MATRA Prelude Solids |
'.stp' => 'application/STEP', // ISO-10303 STEP data files |
'.STP' => 'application/STEP', // ISO-10303 STEP data files |
'.step' => 'application/STEP', // ISO-10303 STEP data files |
'.STEP' => 'application/STEP', // ISO-10303 STEP data files |
'.svg' => 'application/svg', // Scalable Vector Graphics |
'.vda' => 'application/vda', // VDA-FS Surface data |
'.VDA' => 'application/vda', // VDA-FS Surface data |
'.dir' => 'application/x-director', // Macromedia Director |
'.dcr' => 'application/x-director', // Macromedia Director |
'.dxr' => 'application/x-director', // Macromedia Director |
'.mif' => 'application/x-mif', // FrameMaker MIF Format |
'.csh' => 'application/x-csh', // C-shell script |
'.dvi' => 'application/x-dvi', // TeX DVI |
'.gz' => 'application/x-gzip', // GNU Zip |
'.gzip' => 'application/x-gzip', // GNU Zip |
'.hdf' => 'application/x-hdf', // ncSA HDF Data File |
'.latex' => 'application/x-latex', // LaTeX source |
'.nc' => 'application/x-netcdf', // Unidata netCDF |
'.cdf' => 'application/x-netcdf', // Unidata netCDF |
'.sit' => 'application/x-stuffit', // Stiffut Archive |
'.tcl' => 'application/x-tcl', // TCL script |
'.texinfo' => 'application/x-texinfo', // Texinfo (Emacs) |
'.texi' => 'application/x-texinfo', // Texinfo (Emacs) |
'.t' => 'application/x-troff', // Troff |
'.tr' => 'application/x-troff', // Troff |
'.roff' => 'application/x-troff', // Troff |
'.man' => 'application/x-troff-man', // Troff with MAN macros |
'.me' => 'application/x-troff-me', // Troff with ME macros |
'.ms' => 'application/x-troff-ms', // Troff with MS macros |
'.src' => 'application/x-wais-source', // WAIS source |
'.bcpio' => 'application/x-bcpio', // Old binary CPIO |
'.cpio' => 'application/x-cpio', // POSIX CPIO |
'.gtar' => 'application/x-gtar', // GNU tar |
'.shar' => 'application/x-shar', // Shell archive |
'.sv4cpio' => 'application/x-sv4cpio', // SVR4 CPIO |
'.sv4crc' => 'application/x-sv4crc', // SVR4 CPIO with CRC |
'.tar' => 'application/x-tar', // 4.3BSD tar format |
'.ustar' => 'application/x-ustar', // POSIX tar format |
'.hlp' => 'application/x-winhelp', // Windows Help |
'.zip' => 'application/zip', // ZIP archive |
'.au' => 'audio/basic', // Basic audio (usually m-law) |
'.snd' => 'audio/basic', // Basic audio (usually m-law) |
'.aif' => 'audio/x-aiff', // AIFF audio |
'.aiff' => 'audio/x-aiff', // AIFF audio |
'.aifc' => 'audio/x-aiff', // AIFF audio |
'.ra' => 'audio/x-pn-realaudio', // RealAudio |
'.ram' => 'audio/x-pn-realaudio', // RealAudio |
'.rpm' => 'audio/x-pn-realaudio-plugin', // RealAudio (plug-in) |
'.wav' => 'audio/x-wav', // Windows WAVE audio |
'.mp3' => 'audio/x-mp3', // MP3 files |
'.gif' => 'image/gif', // gif image |
'.ief' => 'image/ief', // Image Exchange Format |
'.jpg' => 'image/jpeg', // JPEG image |
'.JPG' => 'image/jpeg', // JPEG image |
'.JPE' => 'image/jpeg', // JPEG image |
'.jpe' => 'image/jpeg', // JPEG image |
'.JPEG' => 'image/jpeg', // JPEG image |
'.jpeg' => 'image/jpeg', // JPEG image |
'.pict' => 'image/pict', // Macintosh PICT |
'.tiff' => 'image/tiff', // TIFF image |
'.tif' => 'image/tiff', // TIFF image |
'.ras' => 'image/x-cmu-raster', // CMU raster |
'.pnm' => 'image/x-portable-anymap', // PBM Anymap format |
'.pbm' => 'image/x-portable-bitmap', // PBM Bitmap format |
'.pgm' => 'image/x-portable-graymap', // PBM Graymap format |
'.ppm' => 'image/x-portable-pixmap', // PBM Pixmap format |
'.rgb' => 'image/x-rgb', // RGB Image |
'.xbm' => 'image/x-xbitmap', // X Bitmap |
'.xpm' => 'image/x-xpixmap', // X Pixmap |
'.xl' => 'application/excel', // Microsoft Excel |
'.xls' => 'application/excel', // Microsoft Excel |
'.XLS' => 'application/excel', // Microsoft Excel |
'.xwd' => 'image/x-xwindowdump', // X Windows dump (xwd) format |
'.zip' => 'multipart/x-zip', // PKZIP Archive |
'.gzip' => 'multipart/x-gzip', // GNU ZIP Archive |
'.mpeg' => 'video/mpeg', // MPEG video |
'.mpg' => 'video/mpeg', // MPEG video |
'.MPG' => 'video/mpeg', // MPEG video |
'.MPE' => 'video/mpeg', // MPEG video |
'.mpe' => 'video/mpeg', // MPEG video |
'.MPEG' => 'video/mpeg', // MPEG video |
'.mpeg' => 'video/mpeg', // MPEG video |
'.qt' => 'video/quicktime', // QuickTime Video |
'.mov' => 'video/quicktime', // QuickTime Video |
'.avi' => 'video/msvideo', // Microsoft Windows Video |
'.movie' => 'video/x-sgi-movie', // SGI Movieplayer format |
'.wrl' => 'x-world/x-vrml', // VRML Worlds |
'.odt' => 'application/vnd.oasis.opendocument.text', // OpenDocument Text |
'.ott' => 'application/vnd.oasis.opendocument.text-template', // OpenDocument Text Template |
'.ods' => 'application/vnd.oasis.opendocument.spreadsheet', // OpenDocument Spreadsheet |
'.ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', // OpenDocument Spreadsheet Template |
'.odp' => 'application/vnd.oasis.opendocument.presentation', // OpenDocument Presentation |
'.otp' => 'application/vnd.oasis.opendocument.presentation-template', // OpenDocument Presentation Template |
'.odg' => 'application/vnd.oasis.opendocument.graphics', // OpenDocument Drawing |
'.otg' => 'application/vnd.oasis.opendocument.graphics-template', // OpenDocument Drawing Template |
'.odc' => 'application/vnd.oasis.opendocument.chart', // OpenDocument Chart |
'.otc' => 'application/vnd.oasis.opendocument.chart-template', // OpenDocument Chart Template |
'.odf' => 'application/vnd.oasis.opendocument.formula', // OpenDocument Formula |
'.otf' => 'application/vnd.oasis.opendocument.formula-template', // OpenDocument Formula Template |
'.odi' => 'application/vnd.oasis.opendocument.image', // OpenDocument Image |
'.oti' => 'application/vnd.oasis.opendocument.image-template', // OpenDocument Image Template |
'.odm' => 'application/vnd.oasis.opendocument.text-master', // OpenDocument Master Document |
'.oth' => 'application/vnd.oasis.opendocument.text-web', // HTML Document Template |
'.odb' => 'application/vnd.oasis.opendocument.database', // OpenDocument Database |
); |
// }}} |
// {{{ Enscript file extensions |
// List of extensions recognised by enscript. |
$extEnscript = array |
( |
'.ada' => 'ada', |
'.adb' => 'ada', |
'.ads' => 'ada', |
'.awk' => 'awk', |
'.c' => 'c', |
'.c++' => 'cpp', |
'.cc' => 'cpp', |
'.cpp' => 'cpp', |
'.csh' => 'csh', |
'.cxx' => 'cpp', |
'.diff' => 'diffu', |
'.dpr' => 'delphi', |
'.el' => 'elisp', |
'.eps' => 'postscript', |
'.f' => 'fortran', |
'.for' => 'fortran', |
'.gs' => 'haskell', |
'.h' => 'c', |
'.hpp' => 'cpp', |
'.hs' => 'haskell', |
'.htm' => 'html', |
'.html' => 'html', |
'.idl' => 'idl', |
'.java' => 'java', |
'.js' => 'javascript', |
'.lgs' => 'haskell', |
'.lhs' => 'haskell', |
'.m' => 'objc', |
'.m4' => 'm4', |
'.man' => 'nroff', |
'.nr' => 'nroff', |
'.p' => 'pascal', |
'.pas' => 'delphi', |
'.patch' => 'diffu', |
'.pkg' => 'sql', |
'.pl' => 'perl', |
'.pm' => 'perl', |
'.pp' => 'pascal', |
'.ps' => 'postscript', |
'.s' => 'asm', |
'.scheme' => 'scheme', |
'.scm' => 'scheme', |
'.scr' => 'synopsys', |
'.sh' => 'sh', |
'.shtml' => 'html', |
'.sql' => 'sql', |
'.st' => 'states', |
'.syn' => 'synopsys', |
'.synth' => 'synopsys', |
'.tcl' => 'tcl', |
'.tex' => 'tex', |
'.texi' => 'tex', |
'.texinfo' => 'tex', |
'.v' => 'verilog', |
'.vba' => 'vba', |
'.vh' => 'verilog', |
'.vhd' => 'vhdl', |
'.vhdl' => 'vhdl', |
'.py' => 'python', |
// The following are handled internally by WebSVN, since there's no |
// support for them in Enscript |
'.php' => 'php', |
'.phtml' => 'php', |
'.php3' => 'php', |
'.inc' => 'php' |
); |
// }}} |
// Default 'zipped' array |
$zipped = array (); |
// Set up the version info |
initSvnVersion($major,$minor); |
// Get the language choice as defained as the default by config.inc |
$user_defaultLang = $lang['LANGUAGENAME']; |
// Override this with the user choice if there is one, and memorise the setting |
// as a cookie (since we don't have user accounts, we can't store the setting |
// anywhere else). We try to memorise a permanant cookie and a per session cookie |
// in case the user's disabled permanant ones. |
if (!empty($_REQUEST['langchoice'])) |
{ |
$user_defaultLang = $_REQUEST['langchoice']; |
setcookie('storedlang', $_REQUEST['langchoice'], time()+(3600*24*356*10), '/'); |
setcookie('storedsesslang', $_REQUEST['langchoice']); |
} |
else // Try to read an existing cookie if there is one |
{ |
if (!empty($_COOKIE['storedlang'])) $user_defaultLang = $_COOKIE['storedlang']; |
else if (!empty($_COOKIE['storedsesslang'])) $user_defaultLang = $_COOKIE['storedsesslang']; |
} |
$user_defaultFile = ''; |
if ($handle = opendir('languages')) |
{ |
// Read the language name for each language. |
while (false !== ($file = readdir($handle))) |
{ |
if ($file{0} != '.' && !is_dir('languages'.DIRECTORY_SEPARATOR.$file)) |
{ |
$lang['LANGUAGENAME'] = ''; |
require 'languages/'.$file; |
if ($lang['LANGUAGENAME'] != '') |
{ |
$langNames[] = $lang['LANGUAGENAME']; |
if ($lang['LANGUAGENAME'] == $user_defaultLang) |
$user_defaultFile = $file; |
} |
} |
} |
closedir($handle); |
// XXX: this shouldn't be necessary |
// ^ i.e. just require english.inc, then the desired language |
// Reload english to get untranslated strings |
require 'languages/english.inc'; |
// Reload the default language |
if (!empty($user_defaultFile)) |
require 'languages/'.$user_defaultFile; |
$url = getParameterisedSelfUrl(true); |
$vars["lang_form"] = "<form action=\"$url\" method=\"post\" id=\"langform\">"; |
$vars["lang_select"] = "<select name=\"langchoice\" onchange=\"javascript:this.form.submit();\">"; |
reset($langNames); |
foreach ($langNames as $name) |
{ |
$sel = ""; |
if ($name == $user_defaultLang) $sel = "selected"; |
$vars["lang_select"] .= "<option value=\"$name\" $sel>$name</option>"; |
} |
$vars["lang_select"] .= "</select>"; |
$vars["lang_submit"] = "<input type=\"submit\" value=\"${lang["GO"]}\">"; |
$vars["lang_endform"] = "</form>"; |
} |
// Set up headers |
header('Content-Type: text/html; charset=UTF-8'); |
// Make sure that the user has set up a repository |
$reps = $config->getRepositories(); |
if (empty($reps[0])) |
{ |
echo $lang["SUPPLYREP"]; |
exit; |
} |
// Override the rep parameter with the repository name if it's available |
$repname = @$_REQUEST["repname"]; |
if (isset($repname)) |
{ |
$rep = $config->findRepository($repname); |
} |
else |
$rep = $reps[0]; |
// Retrieve other standard parameters |
# due to possible XSS exploit, we need to clean up path first |
$path = !empty($_REQUEST['path']) ? $_REQUEST['path'] : null; |
$vars['safepath'] = htmlentities($path); |
$rev = (int)@$_REQUEST["rev"]; |
$showchanged = (@$_REQUEST["sc"] == 1)?1:0; |
// Function to create the project selection HTML form |
function createProjectSelectionForm() |
{ |
global $config, $vars, $rep, $lang, $showchanged; |
$url = $config->getURL(-1, "", "form"); |
$vars["projects_form"] = "<form action=\"$url\" method=\"post\" id=\"projectform\">"; |
$reps = $config->getRepositories(); |
$vars["projects_select"] = "<select name=\"repname\" onchange=\"javascript:this.form.submit();\">"; |
foreach ($reps as $trep) |
{ |
if ($trep->hasReadAccess("/", true)) |
{ |
if ($rep->getDisplayName() == $trep->getDisplayName()) |
$sel = "selected"; |
else |
$sel = ""; |
$vars["projects_select"] .= "<option value=\"".$trep->getDisplayName()."\" $sel>".$trep->getDisplayName()."</option>"; |
} |
} |
$vars["projects_select"] .= "</select>"; |
$vars["projects_submit"] = "<input type=\"submit\" value=\"${lang["GO"]}\" />"; |
$vars["projects_endform"] = "<input type=\"hidden\" name=\"selectproj\" value=\"1\" /><input type=\"hidden\" name=\"op\" value=\"form\" /><input type=\"hidden\" name=\"sc\" value=\"$showchanged\" /></form>"; |
} |
// Create the form if we're not in MultiViews. Otherwise wsvn must create the form once the current project has |
// been found |
if (!$config->multiViews) |
{ |
createProjectSelectionForm(); |
} |
if ($rep) |
{ |
$vars["allowdownload"] = $rep->getAllowDownload(); |
$vars["repname"] = $rep->getDisplayName(); |
} |
// As of version 1.70 the output encoding is forced to be UTF-8, since this is the output |
// encoding returned by svn log --xml. This is good, since we are no longer reliant on PHP's |
// rudimentary conversions. |
$vars["charset"] = "UTF-8"; |
?> |
/WebSVN/include/auth.inc |
---|
0,0 → 1,242 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// auth.inc |
// |
// Handle reading and interpretation of an SVN auth file |
require_once("include/accessfile.inc"); |
define("UNDEFINED", 0); |
define("ALLOW", 1); |
define("DENY", 2); |
class Authentication |
{ |
var $rights; |
var $user; |
var $usersGroups = array(); |
// {{{ __construct |
function Authentication($accessfile) |
{ |
$this->rights = new IniFile(); |
$this->rights->readIniFile($accessfile); |
$this->setUsername(""); |
$this->identifyGroups(); |
} |
// }}} |
// {{{ setUsername($username) |
// |
// Set the username if it is given, or |
// get the user of the current http session |
function setUsername($username) |
{ |
if ($username == "") // Use the current user |
{ |
$this->user = @$_SERVER["REMOTE_USER"]; |
} |
else |
{ |
$this->user = $username; |
} |
} |
// }}} |
// {{{ identifyGroups() |
// |
// Checks to see which groups the user belongs to |
function identifyGroups() |
{ |
$this->usersGroups[] = "*"; |
if (is_array($this->rights->getValues("groups"))) |
{ |
foreach ($this->rights->getValues("groups") as $group => $names) |
{ |
if (in_array(strtolower($this->user), preg_split('/\s*,\s*/', $names))) |
$this->usersGroups[] = "@" . $group; |
} |
} |
} |
// }}} |
// {{{ inList |
// |
// Check if the user is in the given list and return their read status |
// if they are (UNDEFINED, ALLOW or DENY) |
function inList($accessors, $user) |
{ |
$output = UNDEFINED; |
foreach($accessors As $key => $rights) |
{ |
$keymatch = false; |
if (in_array($key, $this->usersGroups) || !strcmp($key, strtolower($user))) |
$keymatch = true; |
if ($keymatch) |
{ |
if (strpos($rights, "r") !== false) |
return ALLOW; |
else |
$output = DENY; |
} |
} |
return $output; |
} |
// }}} |
// {{{ hasReadAccess |
// |
// Returns true if the user has read access to the given path |
function hasReadAccess($repos, $path, $checkSubFolders = false) |
{ |
$access = UNDEFINED; |
if ($path{0} != "/") |
$path = "/$path"; |
// If were told to, we should check sub folders of the path to see if there's |
// a read access below this level. This is used to display the folders needed |
// to get to the folder to which read access is granted. |
if ($checkSubFolders) |
{ |
$sections = $this->rights->getSections(); |
foreach($sections As $section => $accessers) |
{ |
$qualified = $repos.":".$path; |
$len = strlen($qualified); |
if ($len < strlen($section) && strncmp($section, $qualified, strlen($qualified)) == 0) |
{ |
$access = $this->inList($accessers, $this->user); |
} |
if ($access != ALLOW) |
{ |
$len = strlen($path); |
if ($len < strlen($section) && strncmp($section, $path, strlen($path)) == 0) |
{ |
$access = $this->inList($accessers, $this->user); |
} |
} |
if ($access == ALLOW) |
break; |
} |
} |
// If we still don't have access, check each subpath of the path until we find an |
// access level... |
if ($access != ALLOW) |
{ |
$access = UNDEFINED; |
do |
{ |
$accessers = $this->rights->getValues($repos.":".$path); |
if (!empty($accessers)) |
$access = $this->inList($accessers, $this->user); |
if ($access == UNDEFINED) |
{ |
$accessers = $this->rights->getValues($path); |
if (!empty($accessers)) |
$access = $this->inList($accessers, $this->user); |
} |
// If we've not got a match, remove the sub directory and start again |
if ($access == UNDEFINED) |
{ |
if ($path == "/") break; |
$path = substr($path, 0, strrpos(substr($path, 0, -1), "/") + 1); |
} |
} while ($access == UNDEFINED && $path != ""); |
} |
return $access == ALLOW; |
} |
// }}} |
// {{{ hasUnrestrictedReadAccess |
// |
// Returns true if the user has read access to the given path and too |
// all subfolders |
function hasUnrestrictedReadAccess($repos, $path) |
{ |
// First make sure that we have full read access at this level |
if (!$this->hasReadAccess($repos, $path, false)) |
return false; |
// Now check to see if there is a sub folder that's protected |
$sections = $this->rights->getSections(); |
foreach($sections As $section => $accessers) |
{ |
$qualified = $repos.":".$path; |
$len = strlen($qualified); |
$access = UNDEFINED; |
if ($len < strlen($section) && strncmp($section, $qualified, strlen($qualified)) == 0) |
{ |
$access = $this->inList($accessers, $this->user); |
} |
if ($access != DENY) |
{ |
$len = strlen($path); |
if ($len < strlen($section) && strncmp($section, $path, strlen($qualified)) == 0) |
{ |
$access = $this->inList($accessers, $this->user); |
} |
} |
if ($access == DENY) |
return false; |
} |
return true; |
} |
// }}} |
} |
?> |
/WebSVN/include/bugtraq.inc |
---|
0,0 → 1,390 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// bugtraq.inc |
// |
// Functions for accessing the bugtraq properties and replacing issue IDs |
// with URLs. |
// |
// For more information about bugtraq, see |
// http://svn.collab.net/repos/tortoisesvn/trunk/doc/issuetrackers.txt |
class Bugtraq |
{ |
// {{{ Properties |
var $msgstring; |
var $urlstring; |
var $logregex; |
var $append; |
var $firstPart; |
var $firstPartLen; |
var $lastPart; |
var $lastPartLen; |
var $propsfound = false; |
// }}} |
// {{{ __construct($rep, $svnrep, $path) |
function Bugtraq($rep, $svnrep, $path) |
{ |
global $config; |
if ($rep->getBugtraq()) |
{ |
$pos = strrpos($path, "/"); |
$parent = substr($path, 0, $pos + 1); |
$this->append = true; |
$enoughdata = false; |
while(!$enoughdata && (strpos($parent, "/") !== false)) |
{ |
if (empty($this->msgstring)) $this->msgstring = $svnrep->getProperty($parent, 'bugtraq:message'); |
if (empty($this->logregex)) $this->logregex = $svnrep->getProperty($parent, 'bugtraq:logregex'); |
if (empty($this->urlstring)) $this->urlstring = $svnrep->getProperty($parent, 'bugtraq:url'); |
if (empty($this->append)) $this->append = ($svnrep->getProperty($parent, 'bugtraq:append') == "true"); |
$parent = substr($parent, 0, -1); // Remove the trailing slash |
$pos = strrpos($parent, "/"); // Find the last trailing slash |
$parent = substr($parent, 0, $pos + 1); // Find the previous parent directory |
$enoughdata = ((!empty($this->msgstring) || !empty($this->logregex)) && !empty($this->urlstring)); |
} |
$this->msgstring = trim(@$this->msgstring); |
$this->urlstring = trim(@$this->urlstring); |
if ($enoughdata && !empty($this->msgstring)) |
$this->initPartInfo(); |
if ($enoughdata) |
$this->propsfound = true; |
} |
} |
// }}} |
// {{{ initPartInfo() |
function initPartInfo() |
{ |
if (($bugidpos = strpos($this->msgstring, "%BUGID%")) !== false && strpos($this->urlstring, "%BUGID%") !== false) |
{ |
// Get the textual parts of the message string for comparison purposes |
$this->firstPart = substr($this->msgstring, 0, $bugidpos); |
$this->firstPartLen = strlen($this->firstPart); |
$this->lastPart = substr($this->msgstring, $bugidpos + 7); |
$this->lastPartLen = strlen($this->lastPart); |
} |
} |
// }}} |
// {{{ replaceIDs($message) |
function replaceIDs($message) |
{ |
if ($this->propsfound) |
{ |
// First we search for the message string |
$logmsg = ""; |
$message = rtrim($message); |
if ($this->append) |
{ |
// Just compare the last line |
if (($offset = strrpos($message, "\n")) !== false) |
{ |
$logmsg = substr($message, 0, $offset + 1); |
$bugLine = substr($message, $offset + 1); |
} |
else |
$bugLine = $message; |
} |
else |
{ |
if (($offset = strpos($message, "\n")) !== false) |
{ |
$bugLine = substr($message, 0, $offset); |
$logmsg = substr($message, $offset); |
} |
else |
$bugLine = $message; |
} |
// Make sure that our line really is an issue tracker message |
if (((strncmp($bugLine, $this->firstPart, $this->firstPartLen) == 0)) && |
strcmp(substr($bugLine, -$this->lastPartLen, $this->lastPartLen), $this->lastPart) == 0) |
{ |
// Get the issues list |
if ($this->lastPartLen > 0) |
$issues = substr($bugLine, $this->firstPartLen, -$this->lastPartLen); |
else |
$issues = substr($bugLine, $this->firstPartLen); |
// Add each reference to the first part of the line |
$line = $this->firstPart; |
while ($pos = strpos($issues, ",")) |
{ |
$issue = trim(substr($issues, 0, $pos)); |
$issues = substr($issues, $pos + 1); |
$line .= "<a href=\"".str_replace("%BUGID%", $issue, $this->urlstring)."\">$issue</a>, "; |
} |
$line .= "<a href=\"".str_replace("%BUGID%", trim($issues), $this->urlstring)."\">".trim($issues)."</a>".$this->lastPart; |
if ($this->append) |
$message = $logmsg.$line; |
else |
$message = $line.$logmsg; |
} |
// Now replace all other instances of bug IDs that match the regex |
if ($this->logregex) |
{ |
$message = rtrim($message); |
$line = ""; |
$allissues = ""; |
$lines = split("\n", $this->logregex); |
$regex_all = "~".$lines[0]."~"; |
$regex_single = @$lines[1]; |
if (empty($regex_single)) |
{ |
// If the property only contains one line, then the pattern is only designed |
// to find one issue number at a time. e.g. [Ii]ssue #?(\d+). In this case |
// we need to replace the matched issue ID with the link. |
if ($numMatches = preg_match_all($regex_all, $message, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) |
{ |
$addedOffset = 0; |
for ($match = 0; $match < $numMatches; $match++) |
{ |
$issue = $matches[$match][1][0]; |
$issueOffset = $matches[$match][1][1]; |
$issueLink = "<a href=\"".str_replace("%BUGID%", $issue, $this->urlstring)."\">".$issue."</a>"; |
$message = substr_replace($message, $issueLink, $issueOffset + $addedOffset, strlen($issue)); |
$addedOffset += strlen($issueLink) - strlen($issue); |
} |
} |
} |
else |
{ |
// It the property contains two lines, then the first is a pattern for extracting |
// multiple issue numbers, and the second is a pattern extracting each issue |
// number from the multiple match. e.g. [Ii]ssue #?(\d+)(,? ?#?(\d+))+ and (\d+) |
while (preg_match($regex_all, $message, $matches, PREG_OFFSET_CAPTURE)) |
{ |
$completeMatch = $matches[0][0]; |
$completeMatchOffset = $matches[0][1]; |
$replacement = $completeMatch; |
if ($numMatches = preg_match_all("~".$regex_single."~", $replacement, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) |
{ |
$addedOffset = 0; |
for ($match = 0; $match < $numMatches; $match++) |
{ |
$issue = $matches[$match][1][0]; |
$issueOffset = $matches[$match][1][1]; |
$issueLink = "<a href=\"".str_replace("%BUGID%", $issue, $this->urlstring)."\">".$issue."</a>"; |
$replacement = substr_replace($replacement, $issueLink, $issueOffset + $addedOffset, strlen($issue)); |
$addedOffset += strlen($issueLink) - strlen($issue); |
} |
} |
$message = substr_replace($message, $replacement, $completeMatchOffset, strlen($completeMatch)); |
} |
} |
} |
} |
return $message; |
} |
// }}} |
} |
// The BugtraqTestable class is a derived class that is used to test the matching |
// abilities of the Bugtraq class. In particular, it allows for the initialisation of the |
// class without the need for a repository. |
class BugtraqTestable extends Bugtraq |
{ |
// {{{ __construct() |
function BugtraqTestable() |
{ |
// This constructor serves to assure that the parent constructor is not |
// called. |
} |
// }}} |
// {{{ setUpVars($message, $url, $regex, $append) |
function setUpVars($message, $url, $regex, $append) |
{ |
$this->msgstring = $message; |
$this->urlstring = $url; |
$this->logregex = $regex; |
$this->append = $append; |
$this->propsfound = true; |
$this->initPartInfo(); |
} |
// }}} |
// {{{ setMessage($message) |
function setMessage($message) |
{ |
$this->msgstring = $message; |
} |
// }}} |
// {{{ setUrl($url) |
function setUrl($url) |
{ |
$this->urlstring = $url; |
} |
// }}} |
// {{{ setRegex($regex) |
function setRegEx($regex) |
{ |
$this->logregex = $regex; |
} |
// }}} |
// {{{ setAppend($append) |
function setAppend($append) |
{ |
$this->append = $append; |
} |
// }}} |
// {{{ printVars() |
function printVars() |
{ |
echo "msgstring = ".$this->msgstring."\n"; |
echo "urlstring = ".$this->urlstring."\n"; |
echo "logregex = ".$this->logregex."\n"; |
echo "append = ".$this->append."\n"; |
echo "firstPart = ".$this->firstPart."\n"; |
echo "firstPartLen = ".$this->firstPartLen."\n"; |
echo "lastPart = ".$this->lastPart."\n"; |
echo "lastPartLen = ".$this->lastPartLen."\n"; |
} |
// }}} |
} |
// {{{ test_bugtraq() |
function test_bugtraq() |
{ |
$tester = new BugtraqTestable; |
$tester->setUpVars("BugID: %BUGID%", |
"http://bugtracker/?id=%BUGID%", |
"[Ii]ssue #?(\d+)", |
true); |
//$tester->printVars(); |
$res = $tester->replaceIDs("BugID: 789\n". |
"This is a test message that refers to issue #123 and\n". |
"issue #456.\n". |
"BugID: 789"); |
echo nl2br($res)."<p>"; |
$res = $tester->replaceIDs("BugID: 789, 101112\n". |
"This is a test message that refers to issue #123 and\n". |
"issue #456.\n". |
"BugID: 789, 101112"); |
echo nl2br($res)."<p>"; |
$tester->setAppend(false); |
$res = $tester->replaceIDs("BugID: 789\n". |
"This is a test message that refers to issue #123 and\n". |
"issue #456.\n". |
"BugID: 789"); |
echo nl2br($res)."<p>"; |
$res = $tester->replaceIDs("BugID: 789, 101112\n". |
"This is a test message that refers to issue #123 and\n". |
"issue #456.\n". |
"BugID: 789, 101112"); |
echo nl2br($res)."<p>"; |
$tester->setUpVars("BugID: %BUGID%", |
"http://bugtracker/?id=%BUGID%", |
"[Ii]ssues?:?(\s*(,|and)?\s*#\d+)+\n(\d+)", |
true); |
$res = $tester->replaceIDs("BugID: 789, 101112\n". |
"This is a test message that refers to issue #123 and\n". |
"issues #456, #654 and #321.\n". |
"BugID: 789, 101112"); |
echo nl2br($res)."<p>"; |
$tester->setUpVars("Test: %BUGID%", |
"http://bugtracker/?id=%BUGID%", |
"\s*[Cc]ases*\s*[IDs]*\s*[#: ]+((\d+[ ,:;#]*)+)\n(\d+)", |
true); |
$res = $tester->replaceIDs("Cosmetic change\n". |
"CaseIDs: 48"); |
echo nl2br($res)."<p>"; |
} |
// }}} |
?> |
/WebSVN/include/command.inc |
---|
0,0 → 1,171 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// command.inc |
// |
// External command handling |
// {{{ replaceEntities |
// |
// Replace character codes with HTML entities for display purposes. |
// This routine assumes that the character encoding of the string is |
// that of the local system (i.e., it's a string returned from a command |
// line command). |
function replaceEntities($str, $rep) |
{ |
global $config; |
// Ideally, we'd do this: |
// |
// $str = htmlentities($str, ENT_COMPAT, $config->inputEnc); |
// |
// However, htmlentities is very limited in it's ability to process |
// character encodings. We have to rely on something more powerful. |
if (version_compare(phpversion(), "4.1.0", "<")) |
{ |
// In this case, we can't do any better than assume that the |
// input encoding is ISO-8859-1. |
$str = htmlentities($str); |
} |
else |
{ |
$str = toOutputEncoding($str, $rep->getContentEncoding()); |
// $str is now encoded as UTF-8. |
$str = htmlentities($str, ENT_COMPAT, $config->outputEnc); |
} |
return $str; |
} |
// }}} |
// {{{ toOutputEncoding |
function toOutputEncoding($str, $inputEncoding = "") |
{ |
global $config; |
if (empty($inputEncoding)) |
$inputEncoding = $config->inputEnc; |
// Try to convert the messages based on the locale information |
if ($config->inputEnc && $config->outputEnc) |
{ |
if (function_exists("iconv")) |
{ |
$output = @iconv($inputEncoding, $config->outputEnc, $str); |
if (!empty($output)) |
$str = $output; |
} |
} |
return $str; |
} |
// }}} |
// {{{ quoteCommand |
function quoteCommand($cmd, $redirecterr) |
{ |
global $config; |
if ($redirecterr) |
$cmd .= " 2>&1"; |
// On Windows machines, the whole line needs quotes round it so that it's |
// passed to cmd.exe correctly |
if ($config->serverIsWindows) |
$cmd = "\"$cmd\""; |
return $cmd; |
} |
// }}} |
// {{{ runCommand |
function runCommand($cmd, $mayReturnNothing = false) |
{ |
global $lang; |
$output = array (); |
$err = false; |
$c = quoteCommand($cmd, false); |
// Try to run the command normally |
if ($handle = popen($c, 'r')) |
{ |
$firstline = true; |
while (!feof($handle)) |
{ |
$line = fgets($handle); |
if ($firstline && empty($line) && !$mayReturnNothing) |
{ |
$err = true; |
} |
$firstline = false; |
$output[] = toOutputEncoding(rtrim($line)); |
} |
pclose($handle); |
if (!$err) |
return $output; |
} |
echo '<p>',$lang['BADCMD'],': <code>',$cmd,'</code></p>'; |
// Rerun the command, this time grabbing the error information |
$c = quoteCommand($cmd, true); |
$output = toOutputEncoding(shell_exec($c)); |
if (!empty($output)) |
echo '<p>',nl2br($output),'</p>'; |
exit; |
} |
// }}} |
// {{{ quote |
// |
// Quote a string to send to the command line |
function quote($str) |
{ |
global $config; |
if ($config->serverIsWindows) |
return "\"$str\""; |
else |
return escapeshellarg($str); |
} |
// }}} |
?> |
/WebSVN/include/distconfig.inc |
---|
0,0 → 1,376 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// config.inc |
// |
// Configuration parameters |
// --- FOLLOW THE INSTRUCTIONS BELOW TO CONFIGURE YOUR SETUP --- |
// {{{ PLATFORM CONFIGURATION --- |
// Uncomment the next line if your running a windows server |
// |
// $config->setServerIsWindows(); |
// Configure these lines if your commands aren't on your path. |
// |
// $config->setSVNCommandPath('Path/to/svn and svnlook/ e.g. c:\\program files\\subversion\\bin'); |
// $config->setDiffPath('Path/to/diff/command/'); |
// For syntax colouring, if option enabled... |
// $config->setEnscriptPath('Path/to/enscript/command/'); |
// $config->setSedPath('Path/to/sed/command/'); |
// For delivered tarballs, if option enabled... |
// $config->setTarPath('Path/to/tar/command/'); |
// For delivered GZIP'd files and tarballs, if option enabled... |
// $config->setGZipPath('Path/to/gzip/command/'); |
// }}} |
// {{{ REPOSITORY SETUP --- |
// There are 2 methods for defining the repositiories available on the system. Either you list |
// them by hand, in which case you can give each one the name of your choice, or you use the |
// parent path function, in which case the name of the directory is used as the repository name. |
// |
// In all cases, you may optionally supply a group name to the repositories. This is useful in the |
// case that you need to separate your projects. Grouped Repositories are referred to using the |
// convention GroupName.RepositoryName |
// |
// Performance is much better on local repositories (e.g. accessed by file:///). However, you |
// can also provide an interface onto a remote repository. In this case you should supply the |
// username and password needed to access it. |
// |
// To configure the repositories by hand, copy the appropriate line below, uncomment it and |
// replace the name and URL of your repository. |
// Local repositories (without and with optional group): |
// |
// $config->addRepository('NameToDisplay', 'URL to repository (e.g. file:///c:/svn/proj)'); |
// $config->addRepository('NameToDisplay', 'URL to repository (e.g. file:///c:/svn/proj)', 'group'); |
// |
// Remote repositories (without and with optional group): |
// |
// $config->addRepository('NameToDisplay', 'URL (e.g. http://path/to/rep)', NULL, 'username', 'password'); |
// $config->addRepository('NameToDisplay', 'URL (e.g. http://path/to/rep)', 'group', 'username', 'password'); |
// |
// To use the parent path method, uncomment the newt line and and replace the path with your one. You |
// can call the function several times if you have several parent paths. Note that in this case the |
// path is a filesystem path |
// |
// $config->parentPath('Path/to/parent (e.g. c:\\svn)'); |
// }}} |
// {{{ LOOK AND FEEL --- |
// |
// Uncomment ONLY the template file that you want. |
$config->setTemplatePath("$locwebsvnreal/templates/Standard/"); |
// $config->setTemplatePath("$locwebsvnreal/templates/BlueGrey/"); |
// $config->setTemplatePath("$locwebsvnreal/templates/Zinn/"); |
// You may also specify a per repository template file by uncommenting and changing the following |
// line as necessary. Use the convention "groupname.myrep" if your repository is in a group. |
// $config->setTemplatePath('$locwebsvnreal/templates/Standard/', 'myrep'); // Access file for myrep |
// The index page containing the projects may either be displayed as a flat view (the default), |
// where grouped repositories are displayed as "GroupName.RepName" or as a tree view. |
// In the case of a tree view, you may choose whether the entire tree is open by default. |
// $config->useTreeIndex(false); // Tree index, closed by default |
// $config->useTreeIndex(true); // Tree index, open by default |
// By default, WebSVN displays a tree view onto the current directory. You can however |
// choose to display a flat view of the current directory only, which may make the display |
// load faster. Uncomment this line if you want that. |
// $config->useFlatView(); |
// }}} |
// {{{ LANGUAGE SETUP --- |
// WebSVN uses the iconv module to convert messages from your system's character set to the |
// UTF-8 output encoding. If you find that your log messages aren't displayed correctly then |
// you'll need to change the value here. |
// |
// You may also specify the character encoding of the repository contents if different from |
// the system encoding. This is typically the case for windows users, whereby the command |
// line returns, for example, CP850 encoded strings, whereas the source files are encoded |
// as iso-8859-1 by Windows based text editors. When display text file, WebSVN will convert |
// them from the content encoding to the output encoding (UTF-8). |
// |
// WebSVN does its best to automate all this, so only use the following if it doesn't work |
// "out of the box". Uncomment and change one of the examples below. |
// |
// $config->setInputEncoding('CP850'); // Encoding of result returned by svn command line, etc. |
// $config->setContentEncoding('iso-8859-1'); // Content encoding of all your repositories // repositories |
// You may also specify a content encoding on a per repository basis. Uncomment and copy this |
// line as necessary. |
// |
// $config->setContentEncoding('iso-8859-1', 'MyEnc'); |
// Note for Windows users: To enable iconv you'll need to enable the extension in your php.ini file |
// AND copy iconv.dll (not php_iconv.dll) to your Windows system folder. In most cases the correct |
// encoding is set when you call $config->setServerIsWindows();. |
// Note for *nix users. You'll need to have iconv compiled into your binary. The default input and |
// output encodings are taken from your locale informations. Override these if they aren't correct. |
// Uncomment the default language. If you want English then don't do anything here. |
// |
// include 'languages/catalan.inc'; |
// include 'languages/czech.inc'; |
// include 'languages/danish.inc'; |
// include 'languages/dutch.inc'; |
// include 'languages/finnish.inc'; |
// include 'languages/french.inc'; |
// include 'languages/german.inc'; |
// include 'languages/japanese.inc'; |
// include 'languages/korean.inc'; |
// include 'languages/norwegian.inc'; |
// include 'languages/polish.inc'; |
// include 'languages/portuguese.inc'; |
// include 'languages/russian.inc'; |
// include 'languages/schinese.inc'; |
// include 'languages/slovenian.inc'; |
// include 'languages/spanish.inc'; |
// include 'languages/swedish.inc'; |
// include 'languages/tchinese.inc'; |
// include 'languages/turkish.inc'; |
// }}} |
// {{{ MULTIVIEWS --- |
// Uncomment this line if you want to use MultiView to access the repository by, for example: |
// |
// http://servername/wsvn/repname/path/in/repository |
// |
// Note: The websvn directory will need to have Multiviews turned on in Apache, and you'll need to configure |
// wsvn.php |
// $config->useMultiViews(); |
// }}} |
// {{{ ACCESS RIGHTS --- |
// Uncomment this line if you want to use your Subversion access file to control access |
// rights via WebSVN. For this to work, you'll need to set up the same Apache based authentication |
// to the WebSVN (or wsvn) directory as you have for Subversion itself. More information can be |
// found in install.txt |
// $config->useAuthenticationFile('/path/to/accessfile'); // Global access file |
// You may also specify a per repository access file by uncommenting and copying the following |
// line as necessary. Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->useAuthenticationFile('/path/to/accessfile', 'myrep'); // Access file for myrep |
// }}} |
// {{{ FILE CONTENT --- |
// |
// You may wish certain file types to be GZIP'd and delieved to the user when clicked apon. |
// This is useful for binary files and the like that don't display well in a browser window! |
// Copy, uncomment and modify this line for each extension to which this rule should apply. |
// (Don't forget the . before the extension. You don't need an index between the []'s). |
// If you'd rather that the files were delivered uncompressed with the associated MIME type, |
// then read below. |
// |
// $zipped[] = '.dll'; |
// Subversion controlled files have an svn:mime-type property that can |
// be set on a file indicating its mime type. By default binary files |
// are set to the generic appcliation/octet-stream, and other files |
// don't have it set at all. WebSVN also has a built-in list of |
// associations from file extension to MIME content type. (You can |
// view this list in setup.inc). |
// |
// Determining the content-type: By default, if the svn:mime-type |
// property exists and is different from application/octet-stream, it |
// is used. Otherwise, if the built-in list has a contentType entry |
// for the extension of the file, that is used. Otherwise, if the |
// svn:mime-type property exists has the generic binary value of |
// application/octet-stream, the file will be served as a binary |
// file. Otherwise, the file will be brought up as ASCII text in the |
// browser window (although this text may optionally be colourised. |
// See below). |
// |
// Uncomment this if you want to ignore any svn:mime-type property on your |
// files. |
// |
// $config->ignoreSvnMimeTypes(); |
// |
// Uncomment this if you want skip WebSVN's custom mime-type handling |
// |
// $config->ignoreWebSVNContentTypes(); |
// |
// Following the examples below, you can add new associations, modify |
// the default ones or even delete them entirely (to show them in |
// ASCII via WebSVN). |
// $contentType['.c'] = 'plain/text'; // Create a new association |
// $contentType['.doc'] = 'plain/text'; // Modify an existing one |
// unset($contentType['.m'] // Remove a default association |
// }}} |
// {{{ TARBALLS --- |
// You need tar and gzip installed on your system. Set the paths above if necessary |
// |
// Uncomment the line below to offer a tarball download option across all your |
// repositories. |
// |
// $config->allowDownload(); |
// |
// To change the global option for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->allowDownload('myrep'); // Specifically allow downloading for 'myrep' |
// $config->disallowDownload('myrep'); // Specifically disallow downloading for 'myrep' |
// You can also choose the minimum directory level from which you'll allow downloading. |
// A value of zero will allow downloading from the root. 1 will allow downloding of directories |
// in the root, etc. |
// |
// If your project is arranged with trunk, tags and branches at the root level, then a value of 2 |
// would allow the downloading of directories within branches/tags while disallowing the download |
// of the entire branches or tags directories. This would also stop downloading of the trunk, but |
// see after for path exceptions. |
// |
// Change the line below to set the download level across all your repositories. |
$config->setMinDownloadLevel(2); |
// To change the level for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->setMinDownloadLevel(2, 'myrep'); |
// Finally, you may add or remove certain directories (and their contents) either globally |
// or on a per repository basis. Uncomment and copy the following lines as necessary. Note |
// that the these are searched in the order than you give them until a match is made (with the |
// exception that all the per repository exceptions are tested before the global ones). This means |
// that you must disallow /a/b/c/ before you allow /a/b/ otherwise the allowed match on /a/b/ will |
// stop any further searching, thereby allowing downloads on /a/b/c/. |
// Global exceptions possibilties: |
// |
// $config->addAllowedDownloadException('/path/to/allowed/directory/'); |
// $config->addDisAllowedDownloadException('/path/to/disallowed/directory/'); |
// |
// Per repository exception possibilties: |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// |
// $config->addAllowedDownloadException('/path/to/allowed/directory/', 'myrep'); |
// $config->addDisAllowedDownloadException('/path/to/disallowed/directory/', 'myrep'); |
// }}} |
// {{{ COLOURISATION --- |
// Uncomment this line if you want to use Enscript to colourise your file listings |
// |
// You'll need Enscript version 1.6 or higher AND Sed installed to use this feature. |
// Set the path above. |
// |
// $config->useEnscript(); |
// Enscript need to be told what the contents of a file are so that it can be colourised |
// correctly. WebSVN includes a predefined list of mappings from file extension to Enscript |
// file type (viewable in setup.inc). |
// |
// Here you should add and other extensions not already listed or redefine the default ones. eg: |
// |
// $extEnscript['.pas'] = 'pascal'; |
// |
// Note that extensions are case sensitive. |
// }}} |
// {{{ RSSFEED --- |
// Uncomment this line if you wish to hide the RSS feed links across all repositories |
// |
// $config->hideRSS(); |
// |
// To change the global option for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->hideRSS('myrep'); // Specifically hide RSS links for 'myrep' |
// $config->showRSS('myrep'); // Specifically show RSS links for 'myrep' |
// }}} |
// {{{ BUGTRAQ --- |
// Uncomment this line if you wish to use bugtraq: properties to show links to your BugTracker |
// from the log messages. |
// |
// $config->useBugtraqProperties(); |
// |
// To change the global option for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->useBugtraqProperties('myrep'); // Specifically use bugtraq properties for 'myrep' |
// $config->ignoreBugtraqProperties('myrep'); // Specifically ignore bugtraq properties for 'myrep' |
// }}} |
// {{{ MISCELLANEOUS --- |
// Comment out this if you don't have the right to use it. Be warned that you may need it however! |
set_time_limit(0); |
// Comment this line to turn off caching of repo information. This will slow down your browsing. |
$config->setCachingOn(); |
// Number of spaces to expand tabs to in diff/listing view across all repositories |
$config->expandTabsBy(8); |
// To change the global option for individual repositories, uncomment and replicate |
// the required line below (replacing 'myrep' for the name of the repository to be changed). |
// Use the convention 'groupname.myrep' if your repository is in a group. |
// $config->expandTabsBy(3, 'myrep'); // Expand Tabs by 3 for repository 'myrep' |
// For installations without PHP5, a copy of PEAR's PHP Compat library is included. |
// If you have your own version of Compat you wish to use, go ahead and specify here. |
// $config->setPHPCompatPath('/usr/share/php/PHP/'); |
// }}} |
?> |
/WebSVN/include/feedcreator.class.php |
---|
0,0 → 1,1153 |
<?php |
# vim:et:ts=4:sts=4:sw=4:fdm=marker: |
# {{{ Info |
/*************************************************************************** |
FeedCreator class v1.6 |
originally (c) Kai Blankenhorn |
www.bitfolge.de |
kaib@bitfolge.de |
v1.3 work by Scott Reynen (scott@randomchaos.com) and Kai Blankenhorn |
v1.5 OPML support by Dirk Clemens |
This program is free software; you can redistribute it and/or |
modify it under the terms of the GNU General Public License |
as published by the Free Software Foundation; either version 2 |
of the License, or (at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details: <http://www.gnu.org/licenses/gpl.txt> |
**************************************************************************** |
Changelog: |
Modifications for WebSVN: |
The main description link wasn't put through htmlspecialcharacters |
Output encoding now defined by $config |
Remove hardcoded time zone |
v1.6 05-10-04 |
added stylesheet to RSS 1.0 feeds |
fixed generator comment (thanks Kevin L. Papendick and Tanguy Pruvot) |
fixed RFC822 date bug (thanks Tanguy Pruvot) |
added TimeZone customization for RFC8601 (thanks Tanguy Pruvot) |
fixed Content-type could be empty (thanks Tanguy Pruvot) |
fixed author/creator in RSS1.0 (thanks Tanguy Pruvot) |
v1.6 beta 02-28-04 |
added Atom 0.3 support (not all features, though) |
improved OPML 1.0 support (hopefully - added more elements) |
added support for arbitrary additional elements (use with caution) |
code beautification :-) |
considered beta due to some internal changes |
v1.5.1 01-27-04 |
fixed some RSS 1.0 glitches (thanks to Stéphane Vanpoperynghe) |
fixed some inconsistencies between documentation and code (thanks to Timothy Martin) |
v1.5 01-06-04 |
added support for OPML 1.0 |
added more documentation |
v1.4 11-11-03 |
optional feed saving and caching |
improved documentation |
minor improvements |
v1.3 10-02-03 |
renamed to FeedCreator, as it not only creates RSS anymore |
added support for mbox |
tentative support for echo/necho/atom/pie/??? |
v1.2 07-20-03 |
intelligent auto-truncating of RSS 0.91 attributes |
don't create some attributes when they're not set |
documentation improved |
fixed a real and a possible bug with date conversions |
code cleanup |
v1.1 06-29-03 |
added images to feeds |
now includes most RSS 0.91 attributes |
added RSS 2.0 feeds |
v1.0 06-24-03 |
initial release |
***************************************************************************/ |
/*** GENERAL USAGE ********************************************************* |
include("feedcreator.class.php"); |
$rss = new UniversalFeedCreator(); |
$rss->useCached(); // use cached version if age<1 hour |
$rss->title = "PHP news"; |
$rss->description = "daily news from the PHP scripting world"; |
$rss->link = "http://www.dailyphp.net/news"; |
$rss->syndicationURL = "http://www.dailyphp.net/".$_SERVER["PHP_SELF"]; |
$image = new FeedImage(); |
$image->title = "dailyphp.net logo"; |
$image->url = "http://www.dailyphp.net/images/logo.gif"; |
$image->link = "http://www.dailyphp.net"; |
$image->description = "Feed provided by dailyphp.net. Click to visit."; |
$rss->image = $image; |
// get your news items from somewhere, e.g. your database: |
mysql_select_db($dbHost, $dbUser, $dbPass); |
$res = mysql_query("SELECT * FROM news ORDER BY newsdate DESC"); |
while ($data = mysql_fetch_object($res)) { |
$item = new FeedItem(); |
$item->title = $data->title; |
$item->link = $data->url; |
$item->description = $data->short; |
$item->date = $data->newsdate; |
$item->source = "http://www.dailyphp.net"; |
$item->author = "John Doe"; |
$rss->addItem($item); |
} |
// valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1 (deprecated), |
// MBOX, OPML, ATOM0.3 |
echo $rss->saveFeed("RSS1.0", "news/feed.xml"); |
# }}} |
*************************************************************************** |
* A little setup * |
**************************************************************************/ |
/** |
* Version string. |
**/ |
define("FEEDCREATOR_VERSION", "FeedCreator 1.6"); |
/** |
* A FeedItem is a part of a FeedCreator feed. |
* |
* @author Kai Blankenhorn <kaib@bitfolge.de> |
* @since 1.3 |
*/ |
class FeedItem { |
# {{{ Properties |
/** |
* Mandatory attributes of an item. |
*/ |
var $title, $description, $link; |
/** |
* Optional attributes of an item. |
*/ |
var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator; |
/** |
* Publishing date of an item. May be in one of the following formats: |
* |
* RFC 822: |
* "Mon, 20 Jan 03 18:05:41 +0400" |
* "20 Jan 03 18:05:41 +0000" |
* |
* ISO 8601: |
* "2003-01-20T18:05:41+04:00" |
* |
* Unix: |
* 1043082341 |
*/ |
var $date; |
/** |
* Any additional elements to include as an assiciated array. All $key => $value pairs |
* will be included unencoded in the feed item in the form |
* <$key>$value</$key> |
* Again: No encoding will be used! This means you can invalidate or enhance the feed |
* if $value contains markup. This may be abused to embed tags not implemented by |
* the FeedCreator class used. |
*/ |
var $additionalElements = Array(); |
// on hold |
// var $source; |
# }}} |
} |
/** |
* An FeedImage may be added to a FeedCreator feed. |
* @author Kai Blankenhorn <kaib@bitfolge.de> |
* @since 1.3 |
*/ |
class FeedImage { |
# {{{ Properties |
/** |
* Mandatory attributes of an image. |
*/ |
var $title, $url, $link; |
/** |
* Optional attributes of an image. |
*/ |
var $width, $height, $description; |
# }}} |
} |
/** |
* UniversalFeedCreator lets you choose during runtime which |
* format to build. |
* For general usage of a feed class, see the FeedCreator class |
* below or the example above. |
* |
* @since 1.3 |
* @author Kai Blankenhorn <kaib@bitfolge.de> |
*/ |
class UniversalFeedCreator extends FeedCreator { |
var $_feed; |
# {{{ _setFormat |
function _setFormat($format) { |
switch (strtoupper($format)) { |
case "2.0": |
// fall through |
case "RSS2.0": |
$this->_feed = new RSSCreator20(); |
break; |
case "1.0": |
// fall through |
case "RSS1.0": |
$this->_feed = new RSSCreator10(); |
break; |
case "0.91": |
// fall through |
case "RSS0.91": |
$this->_feed = new RSSCreator091(); |
break; |
case "PIE0.1": |
$this->_feed = new PIECreator01(); |
break; |
case "MBOX": |
$this->_feed = new MBOXCreator(); |
break; |
case "OPML": |
$this->_feed = new OPMLCreator(); |
break; |
case "ATOM0.3": |
$this->_feed = new AtomCreator03(); |
break; |
default: |
$this->_feed = new RSSCreator091(); |
break; |
} |
$vars = get_object_vars($this); |
foreach ($vars as $key => $value) { |
if ($key!="feed") { |
$this->_feed->{$key} = $this->{$key}; |
} |
} |
} |
# }}} |
# {{{ createFeed |
/** |
* Creates a syndication feed based on the items previously added. |
* |
* @see FeedCreator::addItem() |
* @param string format format the feed should comply to. Valid values are: |
* "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML". |
* @return string the contents of the feed. |
*/ |
function createFeed($format = "RSS0.91") { |
$this->_setFormat($format); |
return $this->_feed->createFeed(); |
} |
# }}} |
# {{{ saveFeed |
/** |
* Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect |
* header may be sent to redirect the use to the newly created file. |
* @since 1.4 |
* |
* @param string format format the feed should comply to. Valid values are: |
* "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3". |
* @param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). |
* @param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response. |
*/ |
function saveFeed($format="RSS0.91", $filename="", $displayContents=true) { |
$this->_setFormat($format); |
$this->_feed->saveFeed($filename, $displayContents); |
} |
# }}} |
} |
/** |
* FeedCreator is the abstract base implementation for concrete |
* implementations that implement a specific format of syndication. |
* |
* @abstract |
* @author Kai Blankenhorn <kaib@bitfolge.de> |
* @since 1.4 |
*/ |
class FeedCreator { |
# {{{ Properties |
/** |
* Mandatory attributes of a feed. |
*/ |
var $title, $description, $link; |
/** |
* Optional attributes of a feed. |
*/ |
var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays; |
/** |
* @access private |
*/ |
var $items = Array(); |
/** |
* This feed's MIME content type. |
* @since 1.4 |
* @access private |
*/ |
var $contentType = "text/xml"; |
/** |
* Any additional elements to include as an assiciated array. All $key => $value pairs |
* will be included unencoded in the feed in the form |
* <$key>$value</$key> |
* Again: No encoding will be used! This means you can invalidate or enhance the feed |
* if $value contains markup. This may be abused to embed tags not implemented by |
* the FeedCreator class used. |
*/ |
var $additionalElements = Array(); |
# }}} |
# {{{ addItem |
/** |
* Adds an FeedItem to the feed. |
* |
* @param object FeedItem $item The FeedItem to add to the feed. |
* @access public |
*/ |
function addItem($item) { |
$this->items[] = $item; |
} |
# }}} |
# {{{ iTrunc |
/** |
* Truncates a string to a certain length at the most sensible point. |
* First, if there's a '.' character near the end of the string, the string is truncated after this character. |
* If there is no '.', the string is truncated after the last ' ' character. |
* If the string is truncated, " ..." is appended. |
* If the string is already shorter than $length, it is returned unchanged. |
* |
* @static |
* @param string string A string to be truncated. |
* @param int length the maximum length the string should be truncated to |
* @return string the truncated string |
*/ |
function iTrunc($string, $length) { |
if (strlen($string)<=$length) { |
return $string; |
} |
$pos = strrpos($string,"."); |
if ($pos>=$length-4) { |
$string = substr($string,0,$length-4); |
$pos = strrpos($string,"."); |
} |
if ($pos>=$length*0.4) { |
return substr($string,0,$pos+1)." ..."; |
} |
$pos = strrpos($string," "); |
if ($pos>=$length-4) { |
$string = substr($string,0,$length-4); |
$pos = strrpos($string," "); |
} |
if ($pos>=$length*0.4) { |
return substr($string,0,$pos)." ..."; |
} |
return substr($string,0,$length-4)." ..."; |
} |
# }}} |
# {{{ _createGeneratorComment |
/** |
* Creates a comment indicating the generator of this feed. |
* The format of this comment seems to be recognized by |
* Syndic8.com. |
*/ |
function _createGeneratorComment() { |
return "<!-- generator=\"".FEEDCREATOR_VERSION."\" -->\n"; |
} |
# }}} |
# {{{ _createAdditionalElements |
/** |
* Creates a string containing all additional elements specified in |
* $additionalElements. |
* @param elements array an associative array containing key => value pairs |
* @param indentString string a string that will be inserted before every generated line |
* @return string the XML tags corresponding to $additionalElements |
*/ |
function _createAdditionalElements($elements, $indentString="") { |
$ae = ""; |
if (is_array($elements)) { |
foreach($elements AS $key => $value) { |
$ae.= $indentString."<$key>$value</$key>\n"; |
} |
} |
return $ae; |
} |
# }}} |
# {{{ createFeed |
/** |
* Builds the feed's text. |
* @abstract |
* @return string the feed's complete text |
*/ |
function createFeed() { |
} |
# }}} |
# {{{ _generateFilename |
/** |
* Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml. |
* For example: |
* |
* echo $_SERVER["PHP_SELF"]."\n"; |
* echo FeedCreator::_generateFilename(); |
* |
* would produce: |
* |
* /rss/latestnews.php |
* latestnews.xml |
* |
* @return string the feed cache filename |
* @since 1.4 |
* @access private |
*/ |
function _generateFilename() { |
$fileInfo = pathinfo($_SERVER["PHP_SELF"]); |
return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml"; |
} |
# }}} |
# {{{ _redirect |
/** |
* @since 1.4 |
* @access private |
*/ |
function _redirect($filename) { |
// attention, heavily-commented-out-area |
// maybe use this in addition to file time checking |
//Header("Expires: ".date("r",time()+$this->_timeout)); |
/* no caching at all, doesn't seem to work as good: |
Header("Cache-Control: no-cache"); |
Header("Pragma: no-cache"); |
*/ |
// HTTP redirect, some feed readers' simple HTTP implementations don't follow it |
//Header("Location: ".$filename); |
Header("Content-Type: ".$this->contentType."; filename=".basename($filename)); |
Header("Content-Disposition: inline; filename=".basename($filename)); |
readfile($filename, "r"); |
die(); |
} |
# }}} |
# {{{ useCached |
/** |
* Turns on caching and checks if there is a recent version of this feed in the cache. |
* If there is, an HTTP redirect header is sent. |
* To effectively use caching, you should create the FeedCreator object and call this method |
* before anything else, especially before you do the time consuming task to build the feed |
* (web fetching, for example). |
* @since 1.4 |
* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). |
* @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour) |
*/ |
function useCached($filename="", $timeout=3600) { |
$this->_timeout = $timeout; |
if ($filename=="") { |
$filename = $this->_generateFilename(); |
} |
if (file_exists($filename) AND (time()-filemtime($filename) < $timeout)) { |
$this->_redirect($filename); |
} |
} |
# }}} |
# {{{ saveFeed |
/** |
* Saves this feed as a file on the local disk. After the file is saved, a redirect |
* header may be sent to redirect the user to the newly created file. |
* @since 1.4 |
* |
* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). |
* @param redirect boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file. |
*/ |
function saveFeed($filename="", $displayContents=true) { |
if ($filename=="") { |
$filename = $this->_generateFilename(); |
} |
$feedFile = fopen($filename, "w+"); |
if ($feedFile) { |
fputs($feedFile,$this->createFeed()); |
fclose($feedFile); |
if ($displayContents) { |
$this->_redirect($filename); |
} |
} else { |
echo "<br /><b>Error creating feed file, please check write permissions.</b><br />"; |
} |
} |
# }}} |
} |
/** |
* FeedDate is an internal class that stores a date for a feed or feed item. |
* Usually, you won't need to use this. |
*/ |
class FeedDate { |
var $unix; |
# {{{ __construct |
/** |
* Creates a new instance of FeedDate representing a given date. |
* Accepts RFC 822, ISO 8601 date formats as well as unix time stamps. |
* @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used. |
*/ |
function FeedDate($dateString="") { |
if ($dateString=="") $dateString = date("r"); |
if (is_integer($dateString)) { |
$this->unix = $dateString; |
return; |
} |
if (preg_match("~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s+)?(\\d{1,2})\\s+([a-zA-Z]{3})\\s+(\\d{4})\\s+(\\d{2}):(\\d{2}):(\\d{2})\\s+(.*)~",$dateString,$matches)) { |
$months = Array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12); |
$this->unix = mktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]); |
if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') { |
$tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60; |
} else { |
if (strlen($matches[7])==1) { |
$oneHour = 3600; |
$ord = ord($matches[7]); |
if ($ord < ord("M")) { |
$tzOffset = (ord("A") - $ord - 1) * $oneHour; |
} elseif ($ord >= ord("M") AND $matches[7]!="Z") { |
$tzOffset = ($ord - ord("M")) * $oneHour; |
} elseif ($matches[7]=="Z") { |
$tzOffset = 0; |
} |
} |
switch ($matches[7]) { |
case "UT": |
case "GMT": $tzOffset = 0; |
} |
} |
$this->unix += $tzOffset; |
return; |
} |
if (preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(.*)~",$dateString,$matches)) { |
$this->unix = mktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]); |
if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') { |
$tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60; |
} else { |
if ($matches[7]=="Z") { |
$tzOffset = 0; |
} |
} |
$this->unix += $tzOffset; |
return; |
} |
$this->unix = 0; |
} |
# }}} |
# {{{ rfc822 |
/** |
* Gets the date stored in this FeedDate as an RFC 822 date. |
* |
* @return a date in RFC 822 format |
*/ |
function rfc822() { |
return gmdate("r",$this->unix); |
} |
# }}} |
# {{{ iso8601 |
/** |
* Gets the date stored in this FeedDate as an ISO 8601 date. |
* |
* @return a date in ISO 8601 format |
*/ |
function iso8601() { |
$date = gmdate("Y-m-d\TH:i:sO",$this->unix); |
$date = substr($date,0,22) . ':' . substr($date,-2); |
return $date; |
} |
# }}} |
# {{{ unix |
/** |
* Gets the date stored in this FeedDate as unix time stamp. |
* |
* @return a date as a unix time stamp |
*/ |
function unix() { |
return $this->unix; |
} |
# }}} |
} |
/** |
* RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0. |
* |
* @see http://www.purl.org/rss/1.0/ |
* @since 1.3 |
* @author Kai Blankenhorn <kaib@bitfolge.de> |
*/ |
class RSSCreator10 extends FeedCreator { |
# {{{ createFeed |
/** |
* Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0. |
* The feed will contain all items previously added in the same order. |
* @return string the feed's complete text |
*/ |
function createFeed() { |
global $config; |
$feed = "<?xml version=\"1.0\" encoding=\"".$config->outputEnc."\"?>\n"; |
$feed.= "<?xml-stylesheet href=\"http://www.w3.org/2000/08/w3c-synd/style.css\" type=\"text/css\"?>\n"; |
$feed.= $this->_createGeneratorComment(); |
$feed.= "<rdf:RDF\n"; |
$feed.= " xmlns=\"http://purl.org/rss/1.0/\"\n"; |
$feed.= " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n"; |
$feed.= " xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n"; |
$feed.= " <channel rdf:about=\"".htmlspecialchars($this->syndicationURL)."\">\n"; |
$feed.= " <title>".htmlspecialchars($this->title)."</title>\n"; |
$feed.= " <description>".htmlspecialchars($this->description)."</description>\n"; |
$feed.= " <link>".htmlspecialchars($this->link)."</link>\n"; |
if ($this->image!=null) { |
$feed.= " <image rdf:resource=\"".$this->image->url."\" />\n"; |
} |
$now = new FeedDate(); |
$feed.= " <dc:date>".htmlspecialchars($now->iso8601())."</dc:date>\n"; |
$feed.= " <items>\n"; |
$feed.= " <rdf:Seq>\n"; |
for ($i=0;$i<count($this->items);$i++) { |
$feed.= " <rdf:li rdf:resource=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n"; |
} |
$feed.= " </rdf:Seq>\n"; |
$feed.= " </items>\n"; |
$feed.= " </channel>\n"; |
if ($this->image!=null) { |
$feed.= " <image rdf:about=\"".$this->image->url."\">\n"; |
$feed.= " <title>".$this->image->title."</title>\n"; |
$feed.= " <link>".$this->image->link."</link>\n"; |
$feed.= " <url>".$this->image->url."</url>\n"; |
$feed.= " </image>\n"; |
} |
//$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); |
for ($i=0;$i<count($this->items);$i++) { |
$feed.= " <item rdf:about=\"".htmlspecialchars($this->items[$i]->link)."\">\n"; |
//$feed.= " <dc:type>Posting</dc:type>\n"; |
$feed.= " <dc:format>text/html</dc:format>\n"; |
if ($this->items[$i]->date!=null) { |
$itemDate = new FeedDate($this->items[$i]->date); |
$feed.= " <dc:date>".htmlspecialchars($itemDate->iso8601())."</dc:date>\n"; |
} |
if ($this->items[$i]->source!="") { |
$feed.= " <dc:source>".htmlspecialchars($this->items[$i]->source)."</dc:source>\n"; |
} |
if ($this->items[$i]->author!="") { |
$feed.= " <dc:creator>".htmlspecialchars($this->items[$i]->author)."</dc:creator>\n"; |
} |
$feed.= " <title>".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")))."</title>\n"; |
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n"; |
$feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n"; |
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); |
$feed.= " </item>\n"; |
} |
$feed.= "</rdf:RDF>\n"; |
return $feed; |
} |
# }}} |
} |
/** |
* RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3. |
* |
* @see http://my.netscape.com/publish/formats/rss-spec-0.91.html |
* @since 1.3 |
* @author Kai Blankenhorn <kaib@bitfolge.de> |
*/ |
class RSSCreator091 extends FeedCreator { |
/** |
* Stores this RSS feed's version number. |
* @access private |
*/ |
var $RSSVersion; |
# {{{ __construct |
function RSSCreator091() { |
$this->_setRSSVersion("0.91"); |
$this->contentType = "application/rss+xml"; |
} |
# }}} |
# {{{ _setRSSVersion |
/** |
* Sets this RSS feed's version number. |
* @access private |
*/ |
function _setRSSVersion($version) { |
$this->RSSVersion = $version; |
} |
# }}} |
# {{{ createFeed |
/** |
* Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0. |
* The feed will contain all items previously added in the same order. |
* @return string the feed's complete text |
*/ |
function createFeed() { |
global $config; |
$feed = "<?xml version=\"1.0\" encoding=\"".$config->outputEnc."\"?>\n"; |
$feed.= $this->_createGeneratorComment(); |
$feed.= "<rss version=\"".$this->RSSVersion."\">\n"; |
$feed.= " <channel>\n"; |
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n"; |
$feed.= " <description>".FeedCreator::iTrunc(htmlspecialchars($this->description),500)."</description>\n"; |
$feed.= " <link>".htmlspecialchars($this->link)."</link>\n"; |
$now = new FeedDate(); |
$feed.= " <lastBuildDate>".htmlspecialchars($now->rfc822())."</lastBuildDate>\n"; |
$feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n"; |
if ($this->image!=null) { |
$feed.= " <image>\n"; |
$feed.= " <url>".$this->image->url."</url>\n"; |
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->image->title),100)."</title>\n"; |
$feed.= " <link>".$this->image->link."</link>\n"; |
if ($this->image->width!="") { |
$feed.= " <width>".$this->image->width."</width>\n"; |
} |
if ($this->image->height!="") { |
$feed.= " <height>".$this->image->height."</height>\n"; |
} |
if ($this->image->description!="") { |
$feed.= " <description>".htmlspecialchars($this->image->description)."</description>\n"; |
} |
$feed.= " </image>\n"; |
} |
if ($this->language!="") { |
$feed.= " <language>".$this->language."</language>\n"; |
} |
if ($this->copyright!="") { |
$feed.= " <copyright>".FeedCreator::iTrunc(htmlspecialchars($this->copyright),100)."</copyright>\n"; |
} |
if ($this->editor!="") { |
$feed.= " <managingEditor>".FeedCreator::iTrunc(htmlspecialchars($this->editor),100)."</managingEditor>\n"; |
} |
if ($this->webmaster!="") { |
$feed.= " <webMaster>".FeedCreator::iTrunc(htmlspecialchars($this->webmaster),100)."</webMaster>\n"; |
} |
if ($this->pubDate!="") { |
$pubDate = new FeedDate($this->pubDate); |
$feed.= " <pubDate>".htmlspecialchars($pubDate->rfc822())."</pubDate>\n"; |
} |
if ($this->category!="") { |
$feed.= " <category>".htmlspecialchars($this->category)."</category>\n"; |
} |
if ($this->docs!="") { |
$feed.= " <docs>".FeedCreator::iTrunc(htmlspecialchars($this->docs),500)."</docs>\n"; |
} |
if ($this->ttl!="") { |
$feed.= " <ttl>".htmlspecialchars($this->ttl)."</ttl>\n"; |
} |
if ($this->rating!="") { |
$feed.= " <rating>".FeedCreator::iTrunc(htmlspecialchars($this->rating),500)."</rating>\n"; |
} |
if ($this->skipHours!="") { |
$feed.= " <skipHours>".htmlspecialchars($this->skipHours)."</skipHours>\n"; |
} |
if ($this->skipDays!="") { |
$feed.= " <skipDays>".htmlspecialchars($this->skipDays)."</skipDays>\n"; |
} |
$feed.= $this->_createAdditionalElements($this->additionalElements, " "); |
for ($i=0;$i<count($this->items);$i++) { |
$feed.= " <item>\n"; |
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n"; |
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n"; |
$feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n"; |
if ($this->items[$i]->author!="") { |
$feed.= " <author>".htmlspecialchars($this->items[$i]->author)."</author>\n"; |
} |
/* |
// on hold |
if ($this->items[$i]->source!="") { |
$feed.= " <source>".htmlspecialchars($this->items[$i]->source)."</source>\n"; |
} |
*/ |
if ($this->items[$i]->category!="") { |
$feed.= " <category>".htmlspecialchars($this->items[$i]->category)."</category>\n"; |
} |
if ($this->items[$i]->comments!="") { |
$feed.= " <comments>".$this->items[$i]->comments."</comments>\n"; |
} |
if ($this->items[$i]->date!="") { |
$itemDate = new FeedDate($this->items[$i]->date); |
$feed.= " <pubDate>".htmlspecialchars($itemDate->rfc822())."</pubDate>\n"; |
} |
if ($this->items[$i]->guid!="") { |
$feed.= " <guid>".$this->items[$i]->guid."</guid>\n"; |
} |
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); |
$feed.= " </item>\n"; |
} |
$feed.= " </channel>\n"; |
$feed.= "</rss>\n"; |
return $feed; |
} |
# }}} |
} |
/** |
* RSSCreator20 is a FeedCreator that implements RDF Site Summary (RSS) 2.0. |
* |
* @see http://backend.userland.com/rss |
* @since 1.3 |
* @author Kai Blankenhorn <kaib@bitfolge.de> |
*/ |
class RSSCreator20 extends RSSCreator091 { |
# {{{ __construct |
function RSSCreator20() { |
parent::_setRSSVersion("2.0"); |
} |
# }}} |
} |
/** |
* PIECreator01 is a FeedCreator that implements the emerging PIE specification, |
* as in http://intertwingly.net/wiki/pie/Syntax. |
* |
* @deprecated |
* @since 1.3 |
* @author Scott Reynen <scott@randomchaos.com> and Kai Blankenhorn <kaib@bitfolge.de> |
*/ |
class PIECreator01 extends FeedCreator { |
# {{{ createFeed |
function createFeed() { |
$feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; |
$feed.= "<feed version=\"0.1\" xmlns=\"http://example.com/newformat#\">\n"; |
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n"; |
$feed.= " <subtitle>".FeedCreator::iTrunc(htmlspecialchars($this->description),500)."</subtitle>\n"; |
$feed.= " <link>".$this->link."</link>\n"; |
for ($i=0;$i<count($this->items);$i++) { |
$feed.= " <entry>\n"; |
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n"; |
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n"; |
$itemDate = new FeedDate($this->items[$i]->date); |
$feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n"; |
$feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n"; |
$feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n"; |
$feed.= " <id>".$this->items[$i]->guid."</id>\n"; |
if ($this->items[$i]->author!="") { |
$feed.= " <author>\n"; |
$feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n"; |
if ($this->items[$i]->authorEmail!="") { |
$feed.= " <email>".$this->items[$i]->authorEmail."</email>\n"; |
} |
$feed.=" </author>\n"; |
} |
$feed.= " <content type=\"text/html\" xml:lang=\"en-us\">\n"; |
$feed.= " <div xmlns=\"http://www.w3.org/1999/xhtml\">".$this->items[$i]->description."</div>\n"; |
$feed.= " </content>\n"; |
$feed.= " </entry>\n"; |
} |
$feed.= "</feed>\n"; |
return $feed; |
} |
# }}} |
} |
/** |
* AtomCreator03 is a FeedCreator that implements the atom specification, |
* as in http://www.intertwingly.net/wiki/pie/FrontPage. |
* Please note that just by using AtomCreator03 you won't automatically |
* produce valid atom files. For example, you have to specify either an editor |
* for the feed or an author for every single feed item. |
* |
* Some elements have not been implemented yet. These are (incomplete list): |
* author URL, item author's email and URL, item contents, alternate links, |
* other link content types than text/html. Some of them may be created with |
* AtomCreator03::additionalElements. |
* |
* @see FeedCreator#additionalElements |
* @since 1.6 |
* @author Kai Blankenhorn <kaib@bitfolge.de>, Scott Reynen <scott@randomchaos.com> |
*/ |
class AtomCreator03 extends FeedCreator { |
# {{{ __construct |
function AtomCreator03() { |
$this->contentType = "application/atom+xml"; |
} |
# }}} |
# {{{ createFeed |
function createFeed() { |
$feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; |
$feed.= $this->_createGeneratorComment(); |
$feed.= "<feed version=\"0.3\" xmlns=\"http://purl.org/atom/ns#\""; |
if ($this->language!="") { |
$feed.= " xml:lang:\"".$this->language."\""; |
} |
$feed.= ">\n"; |
$feed.= " <title>".htmlspecialchars($this->title)."</title>\n"; |
$feed.= " <tagline>".htmlspecialchars($this->description)."</tagline>\n"; |
$feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->link)."\"/>\n"; |
$feed.= " <id>".$this->link."</id>\n"; |
$now = new FeedDate(); |
$feed.= " <modified>".htmlspecialchars($now->iso8601())."</modified>\n"; |
if ($this->editor!="") { |
$feed.= " <author>\n"; |
$feed.= " <name>".$this->editor."</name>\n"; |
if ($this->editorEmail!="") { |
$feed.= " <email>".$this->editorEmail."</email>\n"; |
} |
$feed.= " </author>\n"; |
} |
$feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n"; |
$feed.= $this->_createAdditionalElements($this->additionalElements, " "); |
for ($i=0;$i<count($this->items);$i++) { |
$feed.= " <entry>\n"; |
$feed.= " <title>".htmlspecialchars(strip_tags($this->items[$i]->title))."</title>\n"; |
$feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n"; |
if ($this->items[$i]->date=="") { |
$this->items[$i]->date = time(); |
} |
$itemDate = new FeedDate($this->items[$i]->date); |
$feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n"; |
$feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n"; |
$feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n"; |
$feed.= " <id>".$this->items[$i]->link."</id>\n"; |
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); |
if ($this->items[$i]->author!="") { |
$feed.= " <author>\n"; |
$feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n"; |
$feed.= " </author>\n"; |
} |
if ($this->items[$i]->description!="") { |
$feed.= " <summary>".htmlspecialchars($this->items[$i]->description)."</summary>\n"; |
} |
$feed.= " </entry>\n"; |
} |
$feed.= "</feed>\n"; |
return $feed; |
} |
# }}} |
} |
/** |
* MBOXCreator is a FeedCreator that implements the mbox format |
* as described in http://www.qmail.org/man/man5/mbox.html |
* |
* @since 1.3 |
* @author Kai Blankenhorn <kaib@bitfolge.de> |
*/ |
class MBOXCreator extends FeedCreator { |
# {{{ __construct |
function MBOXCreator() { |
$this->contentType = "text/plain"; |
} |
# }}} |
# {{{ qp_enc |
function qp_enc($input = "", $line_max = 76) { |
$hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); |
$lines = preg_split("/(?:\r\n|\r|\n)/", $input); |
$eol = "\r\n"; |
$escape = "="; |
$output = ""; |
while( list(, $line) = each($lines) ) { |
//$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary |
$linlen = strlen($line); |
$newline = ""; |
for($i = 0; $i < $linlen; $i++) { |
$c = substr($line, $i, 1); |
$dec = ord($c); |
if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only |
$c = "=20"; |
} elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required |
$h2 = floor($dec/16); $h1 = floor($dec%16); |
$c = $escape.$hex["$h2"].$hex["$h1"]; |
} |
if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted |
$output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay |
$newline = ""; |
} |
$newline .= $c; |
} // end of for |
$output .= $newline.$eol; |
} |
return trim($output); |
} |
# }}} |
# {{{ createFeed |
/** |
* Builds the MBOX contents. |
* @return string the feed's complete text |
*/ |
function createFeed() { |
global $config; |
for ($i=0;$i<count($this->items);$i++) { |
if ($this->items[$i]->author!="") { |
$from = $this->items[$i]->author; |
} else { |
$from = $this->title; |
} |
$itemDate = new FeedDate($this->items[$i]->date); |
$feed.= "From ".strtr(MBOXCreator::qp_enc($from)," ","_")." ".date("D M d H:i:s Y",$itemDate->unix())."\n"; |
$feed.= "Content-Type: text/plain;\n"; |
$feed.= " charset=\"".$config->outputEnc."\"\n"; |
$feed.= "Content-Transfer-Encoding: quoted-printable\n"; |
$feed.= "Content-Type: text/plain\n"; |
$feed.= "From: \"".MBOXCreator::qp_enc($from)."\"\n"; |
$feed.= "Date: ".$itemDate->rfc822()."\n"; |
$feed.= "Subject: ".MBOXCreator::qp_enc(FeedCreator::iTrunc($this->items[$i]->title,100))."\n"; |
$feed.= "\n"; |
$body = chunk_split(MBOXCreator::qp_enc($this->items[$i]->description)); |
$feed.= preg_replace("~\nFrom ([^\n]*)(\n?)~","\n>From $1$2\n",$body); |
$feed.= "\n"; |
$feed.= "\n"; |
} |
return $feed; |
} |
# }}} |
# {{{ _generateFilename |
/** |
* Generate a filename for the feed cache file. Overridden from FeedCreator to prevent XML data types. |
* @return string the feed cache filename |
* @since 1.4 |
* @access private |
*/ |
function _generateFilename() { |
$fileInfo = pathinfo($_SERVER["PHP_SELF"]); |
return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".mbox"; |
} |
# }}} |
} |
/** |
* OPMLCreator is a FeedCreator that implements OPML 1.0. |
* |
* @see http://opml.scripting.com/spec |
* @author Dirk Clemens, Kai Blankenhorn |
* @since 1.5 |
*/ |
class OPMLCreator extends FeedCreator { |
# {{{ createFeed |
function createFeed() { |
$feed = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; |
$feed.= $this->_createGeneratorComment(); |
$feed.= "<opml xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"; |
$feed.= " <head>\n"; |
$feed.= " <title>".htmlspecialchars($this->title)."</title>\n"; |
if ($this->pubDate!="") { |
$date = new FeedDate($this->pubDate); |
$feed.= " <dateCreated>".$date->rfc822()."</dateCreated>\n"; |
} |
if ($this->lastBuildDate!="") { |
$date = new FeedDate($this->lastBuildDate); |
$feed.= " <dateModified>".$date->rfc822()."</dateModified>\n"; |
} |
if ($this->editor!="") { |
$feed.= " <ownerName>".$this->editor."</ownerName>\n"; |
} |
if ($this->editorEmail!="") { |
$feed.= " <ownerEmail>".$this->editorEmail."</ownerEmail>\n"; |
} |
$feed.= " </head>\n"; |
$feed.= " <body>\n"; |
for ($i=0;$i<count($this->items);$i++) { |
$feed.= " <outline type=\"rss\" "; |
$title = htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," "))); |
$feed.= " title=\"".$title."\""; |
$feed.= " text=\"".$title."\""; |
//$feed.= " description=\"".htmlspecialchars($this->items[$i]->description)."\""; |
$feed.= " url=\"".htmlspecialchars($this->items[$i]->link)."\""; |
$feed.= "/>\n"; |
} |
$feed.= " </body>\n"; |
$feed.= "</opml>\n"; |
return $feed; |
} |
# }}} |
} |
?> |
/WebSVN/include/php5compat.inc |
---|
0,0 → 1,26 |
<?php |
if (version_compare(phpversion(), '5.0.0', 'lt')) { |
// Configure necessary functions here |
$funcs = array( |
'stripos', |
'http_build_query', |
); |
// End configuration |
// JB: PHP_Compat expects to be able to find functions by including |
// 'PHP/Compat/Functions/functionname.php', but that hardcoded path |
// isn't relative to the standard include path '.' (it's instead relative |
// to './include'). So rather than hack PHP_Compat to work, just add |
// './include' to our include path. |
ini_set("include_path", ini_get("include_path").$config->pathSeparator."./include"); |
foreach ($funcs as $fn) { |
if (PHP_Compat::loadFunction($fn) != true) |
error_log('Could not load function `'.$fn.'\' as required by PHP Compat.'); |
} |
} |
?> |
/WebSVN/include/svnlook.inc |
---|
0,0 → 1,769 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// svn-look.inc |
// |
// Svn bindings |
// |
// These binding currently use the svn command line to achieve their goal. Once a proper |
// SWIG binding has been produced for PHP, there'll be an option to use that instead. |
require_once("include/utils.inc"); |
// {{{ Classes for retaining log information --- |
$debugxml = false; |
Class SVNMod |
{ |
var $action = ''; |
var $copyfrom = ''; |
var $copyrev = ''; |
var $path = ''; |
} |
Class SVNLogEntry |
{ |
var $rev = 1; |
var $author = ''; |
var $date = ''; |
var $committime; |
var $age = ''; |
var $msg = ''; |
var $path = ''; |
var $mods; |
var $curMod; |
} |
Class SVNLog |
{ |
var $entries; // Array of entries |
var $curEntry; // Current entry |
var $path = ''; // Temporary variable used to trace path history |
// findEntry |
// |
// Return the entry for a given revision |
function findEntry($rev) |
{ |
foreach ($this->entries as $index => $entry) |
{ |
if ($entry->rev == $rev) |
return $index; |
} |
} |
} |
// }}} |
// {{{ XML parsing functions--- |
$curLog = 0; |
$curTag = ''; |
// {{{ startElement |
function startElement($parser, $name, $attrs) |
{ |
global $curLog, $curTag, $debugxml; |
switch ($name) |
{ |
case "LOGENTRY": |
if ($debugxml) print "Creating new log entry\n"; |
$curLog->curEntry = new SVNLogEntry; |
$curLog->curEntry->mods = array(); |
$curLog->curEntry->path = $curLog->path; |
if (sizeof($attrs)) |
{ |
while (list($k, $v) = each($attrs)) |
{ |
switch ($k) |
{ |
case "REVISION": |
if ($debugxml) print "Revision $v\n"; |
$curLog->curEntry->rev = $v; |
break; |
} |
} |
} |
break; |
case "PATH": |
if ($debugxml) print "Creating new path\n"; |
$curLog->curEntry->curMod = new SVNMod; |
if (sizeof($attrs)) |
{ |
while (list($k, $v) = each($attrs)) |
{ |
switch ($k) |
{ |
case "ACTION": |
if ($debugxml) print "Action $v\n"; |
$curLog->curEntry->curMod->action = $v; |
break; |
case "COPYFROM-PATH": |
if ($debugxml) print "Copy from: $v\n"; |
$curLog->curEntry->curMod->copyfrom = $v; |
break; |
case "COPYFROM-REV": |
$curLog->curEntry->curMod->copyrev = $v; |
break; |
} |
} |
} |
$curTag = $name; |
break; |
default: |
$curTag = $name; |
break; |
} |
} |
// }}} |
// {{{ endElement |
function endElement($parser, $name) |
{ |
global $curLog, $debugxml, $curTag; |
switch ($name) |
{ |
case "LOGENTRY": |
if ($debugxml) print "Ending new log entry\n"; |
$curLog->entries[] = $curLog->curEntry; |
break; |
case "PATH": |
if ($debugxml) print "Ending path\n"; |
$curLog->curEntry->mods[] = $curLog->curEntry->curMod; |
break; |
case "MSG": |
$curLog->curEntry->msg = trim($curLog->curEntry->msg); |
if ($debugxml) print "Completed msg = '".$curLog->curEntry->msg."'\n"; |
break; |
} |
$curTag = ""; |
} |
// }}} |
// {{{ characterData |
function characterData($parser, $data) |
{ |
global $curLog, $curTag, $lang, $debugxml; |
switch ($curTag) |
{ |
case "AUTHOR": |
if ($debugxml) print "Author: $data\n"; |
if (empty($data)) return; |
$curLog->curEntry->author .= htmlentities($data, ENT_COMPAT, "UTF-8"); |
break; |
case "DATE": |
if ($debugxml) print "Date: $data\n"; |
$data = trim($data); |
if (empty($data)) return; |
sscanf($data, "%d-%d-%dT%d:%d:%d.", $y, $mo, $d, $h, $m, $s); |
$mo = substr("00".$mo, -2); |
$d = substr("00".$d, -2); |
$h = substr("00".$h, -2); |
$m = substr("00".$m, -2); |
$s = substr("00".$s, -2); |
$curLog->curEntry->date = "$y-$mo-$d $h:$m:$s GMT"; |
$committime = strtotime($curLog->curEntry->date); |
$curLog->curEntry->committime = $committime; |
$curtime = time(); |
// Get the number of seconds since the commit |
$agesecs = $curtime - $committime; |
if ($agesecs < 0) $agesecs = 0; |
$curLog->curEntry->age = datetimeFormatDuration($agesecs, true, true); |
break; |
case "MSG": |
if ($debugxml) print "Msg: '$data'\n"; |
$curLog->curEntry->msg .= htmlentities($data, ENT_COMPAT, "UTF-8"); |
break; |
case "PATH": |
if ($debugxml) print "Path name: '$data'\n"; |
$data = trim($data); |
if (empty($data)) return; |
$curLog->curEntry->curMod->path .= $data; |
// The XML returned when a file is renamed/branched in inconsistant. In the case |
// of a branch, the path information doesn't include the leafname. In the case of |
// a rename, it does. Ludicrous. |
if (!empty($curLog->path)) |
{ |
$pos = strrpos($curLog->path, "/"); |
$curpath = substr($curLog->path, 0, $pos); |
$leafname = substr($curLog->path, $pos + 1); |
} |
else |
{ |
$curpath = ""; |
$leafname = ""; |
} |
if ($curLog->curEntry->curMod->action == "A") |
{ |
if ($debugxml) print "Examining added path '".$curLog->curEntry->curMod->copyfrom."' - Current path = '$curpath', leafname = '$leafname'\n"; |
if ($data == $curLog->path) // For directories and renames |
{ |
if ($debugxml) print "New path for comparison: '".$curLog->curEntry->curMod->copyfrom."'\n"; |
$curLog->path = $curLog->curEntry->curMod->copyfrom; |
} |
else if ($data == $curpath || $data == $curpath."/") // Logs of files that have moved due to branching |
{ |
if ($debugxml) print "New path for comparison: '".$curLog->curEntry->curMod->copyfrom."/$leafname'\n"; |
$curLog->path = $curLog->curEntry->curMod->copyfrom."/$leafname"; |
} |
} |
break; |
} |
} |
// }}} |
// }}} |
// Function returns true if the give entry in a directory tree is at the top level |
function _topLevel($entry) |
{ |
// To be at top level, there must be one space before the entry |
return (strlen($entry) > 1 && $entry{0} == " " && $entry{1} != " "); |
} |
// Function to sort two given directory entries. Directories go at the top |
function _dirSort($e1, $e2) |
{ |
$isDir1 = $e1{strlen($e1) - 1} == "/"; |
$isDir2 = $e2{strlen($e2) - 1} == "/"; |
if ($isDir1 && !$isDir2) return -1; |
if ($isDir2 && !$isDir1) return 1; |
return strnatcasecmp($e1, $e2); |
} |
// Return the revision string to pass to a command |
function _revStr($rev) |
{ |
if ($rev > 0) |
return "-r $rev"; |
else |
return ""; |
} |
// {{{ encodePath |
// Function to encode a URL without encoding the /'s |
function encodePath($uri) |
{ |
global $config; |
$uri = str_replace(DIRECTORY_SEPARATOR, "/", $uri); |
$parts = explode('/', $uri); |
for ($i = 0; $i < count($parts); $i++) |
{ |
if ( function_exists("mb_detect_encoding") && function_exists("mb_convert_encoding")) |
{ |
$parts[$i] = mb_convert_encoding($parts[$i], "UTF-8", mb_detect_encoding($parts[$i])); |
} |
$parts[$i] = rawurlencode($parts[$i]); |
} |
$uri = implode('/', $parts); |
// Quick hack. Subversion seems to have a bug surrounding the use of %3A instead of : |
$uri = str_replace("%3A" ,":", $uri); |
// Correct for Window share names |
if ( $config->serverIsWindows==true ) |
{ |
if ( substr($uri, 0,2)=="//" ) |
$uri="\\".substr($uri, 2, strlen($uri)); |
} |
return $uri; |
} |
// }}} |
// The SVNRepository Class |
Class SVNRepository |
{ |
var $repConfig; |
function SVNRepository($repConfig) |
{ |
$this->repConfig = $repConfig; |
} |
// {{{ dirContents |
function dirContents($path, $rev = 0) |
{ |
global $config, $locwebsvnreal; |
$revstr = _revStr($rev); |
$tree = array(); |
if ($rev == 0) |
{ |
$headlog = $this->getLog("/", "", "", true, 1); |
$rev = $headlog->entries[0]->rev; |
} |
$path = encodepath($this->repConfig->path.$path); |
$output = runCommand($config->svn." list $revstr ".$this->repConfig->svnParams().quote($path), true); |
foreach ($output as $entry) |
{ |
if ($entry != "") |
$tree[] = $entry; |
} |
// Sort the entries into alphabetical order with the directories at the top of the list |
usort($tree, "_dirSort"); |
return $tree; |
} |
// }}} |
// {{{ highlightLine |
// |
// Distill line-spanning syntax highlighting so that each line can stand alone |
// (when invoking on the first line, $attributes should be an empty array) |
// Invoked to make sure all open syntax highlighting tags (<font>, <i>, <b>, etc.) |
// are closed at the end of each line and re-opened on the next line |
function highlightLine($line, &$attributes) |
{ |
$hline = ""; |
// Apply any highlighting in effect from the previous line |
foreach($attributes as $attr) |
{ |
$hline.=$attr['text']; |
} |
// append the new line |
$hline.=$line; |
// update attributes |
for ($line = strstr($line, "<"); $line; $line = strstr(substr($line,1), "<")) |
{ |
// if this closes a tag, remove most recent corresponding opener |
if (substr($line,1,1) == "/") |
{ |
$tagNamLen = strcspn($line, "> \t", 2); |
$tagNam = substr($line,2,$tagNamLen); |
foreach(array_reverse(array_keys($attributes)) as $k) |
{ |
if ($attributes[$k]['tag'] == $tagNam) |
{ |
unset($attributes[$k]); |
break; |
} |
} |
} |
else |
// if this opens a tag, add it to the list |
{ |
$tagNamLen = strcspn($line, "> \t", 1); |
$tagNam = substr($line,1,$tagNamLen); |
$tagLen = strcspn($line, ">") + 1; |
$attributes[] = array('tag' => $tagNam, 'text' => substr($line,0,$tagLen)); |
} |
} |
// close any still-open tags |
foreach(array_reverse($attributes) as $attr) |
{ |
$hline.="</".$attr['tag'].">"; |
} |
return($hline); |
} |
// }}} |
// {{{ getFileContents |
// |
// Dump the content of a file to the given filename |
function getFileContents($path, $filename, $rev = 0, $pipe = "", $perLineHighlighting = false) |
{ |
global $config, $extEnscript; |
$revstr = _revStr($rev); |
// If there's no filename, we'll just deliver the contents as it is to the user |
if ($filename == "") |
{ |
$path = encodepath($this->repConfig->path.$path); |
passthru(quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." $pipe", false)); |
return; |
} |
// Get the file contents info |
$ext = strrchr($path, "."); |
$l = @$extEnscript[$ext]; |
if ($l == "php") |
{ |
// Output the file to the filename |
$path = encodepath($this->repConfig->path.$path); |
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." > $filename", false); |
@exec($cmd); |
// Get the file as a string (memory hogging, but we have no other options) |
$content = highlight_file($filename, true); |
// Destroy the previous version, and replace it with the highlighted version |
$f = fopen($filename, "w"); |
if ($f) |
{ |
// The highlight file function doesn't deal with line endings very nicely at all. We'll have to do it |
// by hand. |
// Remove the first line generated by highlight() |
$pos = strpos($content, "\n"); |
$content = substr($content, $pos+1); |
$content = explode("<br />", $content); |
if ($perLineHighlighting) |
{ |
// If we need each line independently highlighted (e.g. for diff or blame) |
// hen we'll need to filter the output of the highlighter |
// to make sure tags like <font>, <i> or <b> don't span lines |
// $attributes is used to remember what highlighting attributes |
// are in effect from one line to the next |
$attributes = array(); // start with no attributes in effect |
foreach ($content as $line) |
{ |
fputs($f, $this->highlightLine(rtrim($line),$attributes)."\n"); |
} |
} |
else |
{ |
foreach ($content as $line) |
{ |
fputs($f, rtrim($line)."\n"); |
} |
} |
fclose($f); |
} |
} |
else |
{ |
if ($config->useEnscript) |
{ |
// Get the files, feed it through enscript, then remove the enscript headers using sed |
// |
// Note that the sec command returns only the part of the file between <PRE> and </PRE>. |
// It's complicated because it's designed not to return those lines themselves. |
$path = encodepath($this->repConfig->path.$path); |
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." | ". |
$config->enscript." --language=html ". |
($l ? "--color --pretty-print=$l" : "")." -o - | ". |
$config->sed." -n ".$config->quote."1,/^<PRE.$/!{/^<\\/PRE.$/,/^<PRE.$/!p;}".$config->quote." > $filename", false); |
@exec($cmd); |
} |
else |
{ |
$path = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $this->repConfig->path.$path)); |
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." > $filename", false); |
@exec($cmd); |
} |
} |
} |
// }}} |
// {{{ listFileContents |
// |
// Print the contents of a file without filling up Apache's memory |
function listFileContents($path, $rev = 0) |
{ |
global $config, $extEnscript; |
$revstr = _revStr($rev); |
$pre = false; |
// Get the file contents info |
$ext = strrchr($path, "."); |
$l = @$extEnscript[$ext]; |
// Deal with php highlighting internally |
if ($l == "php") |
{ |
$tmp = tempnam("temp", "wsvn"); |
// Output the file to a temporary file |
$path = encodepath($this->repConfig->path.$path); |
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." > $tmp", false); |
@exec($cmd); |
highlight_file($tmp); |
unlink($tmp); |
} |
else |
{ |
if ($config->useEnscript) |
{ |
$path = encodepath($this->repConfig->path.$path); |
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." | ". |
$config->enscript." --language=html ". |
($l ? "--color --pretty-print=$l" : "")." -o - | ". |
$config->sed." -n ".$config->quote."/^<PRE.$/,/^<\\/PRE.$/p".$config->quote." 2>&1", false); |
if (!($result = popen($cmd, "r"))) |
return; |
} |
else |
{ |
$path = encodepath($this->repConfig->path.$path); |
$cmd = quoteCommand($config->svn." cat $revstr ".$this->repConfig->svnParams().quote($path)." 2>&1", false); |
if (!($result = popen($cmd, "r"))) |
return; |
$pre = true; |
} |
if ($pre) |
echo "<PRE>"; |
while (!feof($result)) |
{ |
$line = fgets($result, 1024); |
if ($pre) $line = replaceEntities($line, $this->repConfig); |
print hardspace($line); |
} |
if ($pre) |
echo "</PRE>"; |
pclose($result); |
} |
} |
// }}} |
// {{{ getBlameDetails |
// |
// Dump the blame content of a file to the given filename |
function getBlameDetails($path, $filename, $rev = 0) |
{ |
global $config; |
$revstr = _revStr($rev); |
$path = encodepath($this->repConfig->path.$path); |
$cmd = quoteCommand($config->svn." blame $revstr ".$this->repConfig->svnParams().quote($path)." > $filename", false); |
@exec($cmd); |
} |
// }}} |
// {{{ getProperty |
function getProperty($path, $property, $rev = 0) |
{ |
global $config; |
$revstr = _revStr($rev); |
$path = encodepath($this->repConfig->path.$path); |
$ret = runCommand($config->svn." propget $property $revstr ".$this->repConfig->svnParams().quote($path), true); |
// Remove the surplus newline |
if (count($ret)) |
unset($ret[count($ret) - 1]); |
return implode("\n", $ret); |
} |
// }}} |
// {{{ exportDirectory |
// |
// Exports the directory to the given location |
function exportDirectory($path, $filename, $rev = 0) |
{ |
global $config; |
$revstr = _revStr($rev); |
$path = encodepath($this->repConfig->path.$path); |
$cmd = quoteCommand($config->svn." export $revstr ".$this->repConfig->svnParams().quote($path)." ".quote($filename), false); |
@exec($cmd); |
} |
// }}} |
// {{{ getLog |
function getLog($path, $brev = "", $erev = 1, $quiet = false, $limit = 2) |
{ |
global $config, $curLog, $vars, $lang; |
$xml_parser = xml_parser_create("UTF-8"); |
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); |
xml_set_element_handler($xml_parser, "startElement", "endElement"); |
xml_set_character_data_handler($xml_parser, "characterData"); |
// Since directories returned by svn log don't have trailing slashes (:-(), we need to remove |
// the trailing slash from the path for comparison purposes |
if ($path{strlen($path) - 1} == "/" && $path != "/") |
$path = substr($path, 0, -1); |
$curLog = new SVNLog; |
$curLog->entries = array(); |
$curLog->path = $path; |
$revStr = ""; |
if ($brev && $erev) |
$revStr = "-r$brev:$erev"; |
else if ($brev) |
$revStr = "-r$brev:1"; |
if (($config->subversionMajorVersion > 1 || $config->subversionMinorVersion >=2) && $limit != 0) |
$revStr .= " --limit $limit"; |
// Get the log info |
$path = encodepath($this->repConfig->path.$path); |
$info = "--verbose"; |
if ($quiet) |
$info = "--quiet"; |
$cmd = quoteCommand($config->svn." log --xml $info $revStr ".$this->repConfig->svnParams().quote($path), false); |
if ($handle = popen($cmd, "r")) |
{ |
$firstline = true; |
while (!feof($handle)) |
{ |
$line = fgets($handle); |
if (!xml_parse($xml_parser, $line, feof($handle))) |
{ |
if (xml_get_error_code($xml_parser) != 5) |
{ |
die(sprintf("XML error: %s (%d) at line %d column %d byte %d<br>cmd: %s<nr>", |
xml_error_string(xml_get_error_code($xml_parser)), |
xml_get_error_code($xml_parser), |
xml_get_current_line_number($xml_parser), |
xml_get_current_column_number($xml_parser), |
xml_get_current_byte_index($xml_parser), |
$cmd)); |
} |
else |
{ |
$vars["error"] = $lang["UNKNOWNREVISION"]; |
return 0; |
} |
} |
} |
pclose($handle); |
} |
xml_parser_free($xml_parser); |
return $curLog; |
} |
// }}} |
} |
// {{{ initSvnVersion |
function initSvnVersion(&$major, &$minor) |
{ |
global $config; |
$ret = runCommand($config->svn_noparams." --version", false); |
if (preg_match("~([0-9]?)\.([0-9]?)\.([0-9]?)~",$ret[0],$matches)) |
{ |
$major = $matches[1]; |
$minor = $matches[2]; |
} |
$config->setSubversionMajorVersion($major); |
$config->setSubversionMinorVersion($minor); |
} |
// }}} |
?> |
/WebSVN/include/template.inc |
---|
0,0 → 1,306 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// templates.inc |
// |
// Templating system to allow advanced page customisation |
$ignore = false; |
// Stack of previous test results |
$ignorestack = array(); |
// Number of test levels currently ignored |
$ignorelevel = 0; |
// parseCommand |
// |
// Parse a special command |
function parseCommand($line, $vars, $handle) |
{ |
global $ignore, $ignorestack, $ignorelevel; |
// Check for test conditions |
if (strncmp(trim($line), "[websvn-test:", 13) == 0) |
{ |
if (!$ignore) |
{ |
$line = trim($line); |
$var = substr($line, 13, -1); |
if (empty($vars[$var])) |
{ |
array_push($ignorestack, $ignore); |
$ignore = true; |
} |
} |
else |
{ |
$ignorelevel++; |
} |
return true; |
} |
if (strncmp(trim($line), "[websvn-else]", 13) == 0) |
{ |
if ($ignorelevel == 0) |
{ |
$ignore = !$ignore; |
} |
return true; |
} |
if (strncmp(trim($line), "[websvn-endtest]", 16) == 0) |
{ |
if ($ignorelevel > 0) |
{ |
$ignorelevel--; |
} |
else |
{ |
$ignore = array_pop($ignorestack); |
} |
return true; |
} |
if (strncmp(trim($line), "[websvn-getlisting]", 19) == 0) |
{ |
global $path, $rev, $svnrep; |
if (!$ignore) |
$svnrep->listFileContents($path, $rev); |
return true; |
} |
if (strncmp(trim($line), "[websvn-defineicons]", 19) == 0) |
{ |
global $icons; |
if (!isset($icons)) |
$icons = array(); |
// Read all the lines until we reach the end of the definition, storing |
// each one... |
if (!$ignore) |
{ |
while (!feof($handle)) |
{ |
$line = trim(fgets($handle)); |
if (strncmp($line, "[websvn-enddefineicons]", 22) == 0) |
{ |
return true; |
} |
$eqsign = strpos($line, "="); |
$match = substr($line, 0, $eqsign); |
$def = substr($line, $eqsign + 1); |
$icons[$match] = $def; |
} |
} |
return true; |
} |
if (strncmp(trim($line), "[websvn-icon]", 13) == 0) |
{ |
global $icons, $vars; |
if (!$ignore) |
{ |
// The current filetype should be defined my $vars["filetype"] |
if (!empty($icons[$vars["filetype"]])) |
{ |
echo parseTags($icons[$vars["filetype"]], $vars); |
} |
else if (!empty($icons["*"])) |
{ |
echo parseTags($icons["*"], $vars); |
} |
} |
return true; |
} |
if (strncmp(trim($line), "[websvn-treenode]", 17) == 0) |
{ |
global $icons, $vars; |
if (!$ignore) |
{ |
if ((!empty($icons["i-node"])) && (!empty($icons["t-node"])) && (!empty($icons["l-node"]))) |
{ |
for ($n = 1; $n < $vars["level"]; $n++) |
{ |
if ($vars["last_i_node"][$n]) |
{ |
echo parseTags($icons["e-node"], $vars); |
} |
else |
{ |
echo parseTags($icons["i-node"], $vars); |
} |
} |
if ($vars["level"] != 0) |
{ |
if ($vars["node"] == 0) |
{ |
echo parseTags($icons["t-node"], $vars); |
} |
else |
{ |
echo parseTags($icons["l-node"], $vars); |
$vars["last_i_node"][$vars["level"]] = TRUE; |
} |
} |
} |
} |
return true; |
} |
return false; |
} |
// parseTemplate |
// |
// Parse the given template, replacing the variables with the values passed |
function parseTemplate($template, $vars, $listing) |
{ |
global $ignore, $vars; |
if (!is_file($template)) |
{ |
print "No template file found ($template)"; |
exit; |
} |
$handle = fopen($template, "r"); |
$inListing = false; |
$ignore = false; |
$listLines = array(); |
while (!feof($handle)) |
{ |
$line = fgets($handle); |
// Check for the end of the file list |
if ($inListing) |
{ |
if (strcmp(trim($line), "[websvn-endlisting]") == 0) |
{ |
$inListing = false; |
// For each item in the list |
foreach ($listing as $listvars) |
{ |
// Copy the value for this list item into the $vars array |
foreach ($listvars as $id => $value) |
{ |
$vars[$id] = $value; |
} |
// Output the list item |
foreach ($listLines as $line) |
{ |
if (!parseCommand($line, $vars, $handle)) |
{ |
if (!$ignore) |
print parseTags($line, $vars); |
} |
} |
} |
} |
else |
{ |
if ($ignore == false) |
$listLines[] = $line; |
} |
} |
else if (parseCommand($line, $vars, $handle)) |
{ |
continue; |
} |
else |
{ |
// Check for the start of the file list |
if (strncmp(trim($line), "[websvn-startlisting]", 21) == 0) |
{ |
$inListing = true; |
} |
else |
{ |
if ($ignore == false) |
print parseTags($line, $vars); |
} |
} |
} |
fclose($handle); |
} |
// parseTags |
// |
// Replace all occurences of [websvn:varname] with the give variable |
function parseTags($line, $vars) |
{ |
global $lang; |
// Replace the websvn variables |
while (ereg("\[websvn:([a-zA-Z0-9_]+)\]", $line, $matches)) |
{ |
// Make sure that the variable exists |
if (!isset($vars[$matches[1]])) |
{ |
$vars[$matches[1]] = "?${matches[1]}?"; |
} |
$line = str_replace($matches[0], $vars[$matches[1]], $line); |
} |
// Replace the language strings |
while (ereg("\[lang:([a-zA-Z0-9_]+)\]", $line, $matches)) |
{ |
// Make sure that the variable exists |
if (!isset($lang[$matches[1]])) |
{ |
$lang[$matches[1]] = "?${matches[1]}?"; |
} |
$line = str_replace($matches[0], $lang[$matches[1]], $line); |
} |
// Return the results |
return $line; |
} |
?> |
/WebSVN/include/utils.inc |
---|
0,0 → 1,340 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// utils.inc |
// |
// General utility commands |
// {{{ createDirLinks |
// |
// Create a list of links to the current path that'll be available from the template |
function createDirLinks($rep, $path, $rev, $showchanged) |
{ |
global $vars, $config; |
$subs = explode('/', htmlentities($path)); |
$sofar = ""; |
$count = count($subs); |
$vars["curdirlinks"] = ""; |
// The number of links depends on the last item. It's empty if |
// we're looing at a directory, and full if it's a file |
if (empty($subs[$count - 1])) |
{ |
$limit = $count - 2; |
$dir = true; |
} |
else |
{ |
$limit = $count - 1; |
$dir = false; |
} |
for ($n = 0; $n < $limit; $n++) |
{ |
$sofar .= html_entity_decode($subs[$n])."/"; |
$sofarurl = $config->getURL($rep, $sofar, "dir"); |
$vars["curdirlinks"] .= "[<a href=\"${sofarurl}rev=$rev&sc=$showchanged\">".$subs[$n]."/]</a> "; |
} |
if ($dir) |
{ |
$vars["curdirlinks"] .= "[<b>".html_entity_decode($subs[$n])."</b>/]"; |
} |
else |
{ |
$vars["curdirlinks"] .= "[<b>".html_entity_decode($subs[$n])."</b>]"; |
} |
} |
// }}} |
// {{{ create_anchors |
// |
// Create links out of http:// and mailto: tags |
# TODO: the target="_blank" nonsense should be optional (or specified by the template) |
function create_anchors($text) |
{ |
$ret = $text; |
// Match correctly formed URLs that aren't already links |
$ret = preg_replace("#\b(?<!href=\")([a-z]+?)://(\S*)([\w/]+)#i", |
"<a href=\"\\1://\\2\\3\" target=\"_blank\">\\1://\\2\\3</a>", |
$ret); |
// Now match anything beginning with www, as long as it's not //www since they were matched above |
$ret = preg_replace("#\b(?<!//)www\.(\S*)([\w/]+)#i", |
"<a href=\"http://www.\\1\\2\" target=\"_blank\">www.\\1\\2</a>", |
$ret); |
// Match email addresses |
$ret = preg_replace("#\b([\w\-_.]+)@([\w\-.]+)\b#i", |
"<a href=\"mailto:\\1@\\2\">\\1@\\2</a>", |
$ret); |
return ($ret); |
} |
// }}} |
// {{{ getFullURL |
function getFullURL($loc) |
{ |
$protocol = 'http'; |
if (isset($_SERVER["HTTPS"]) && (strtolower($_SERVER["HTTPS"]) != "off")) |
{ |
$protocol = "https"; |
} |
$port = ":".$_SERVER["SERVER_PORT"]; |
if ((":80" == $port && "http" == $protocol) || |
(":443" == $port && "https" == $protocol)) |
{ |
$port = ""; |
} |
if (isset($_SERVER["HTTP_HOST"])) |
{ |
$host = $_SERVER["HTTP_HOST"]; |
} |
else if (isset($_SERVER["SERVER_NAME"])) |
{ |
$host = $_SERVER["SERVER_NAME"].$port; |
} |
else if (isset($_SERVER["SERVER_ADDR"])) |
{ |
$host = $_SERVER["SERVER_ADDR"].$port; |
} |
else |
{ |
print "Unable to redirect"; |
exit; |
} |
$url = $protocol . "://" . $host . $loc; |
return $url; |
} |
// }}} |
// {{{ hardspace |
// |
// Replace the spaces at the front of a line with hard spaces |
# XXX: this is an unnecessary function; you can prevent whitespace from being |
# trimmed via CSS (use the "white-space: pre;" properties). ~J |
# in the meantime, here's an improved function (does nothing) |
function hardspace($s) |
{ |
return '<code>' . expandTabs($s) . '</code>'; |
} |
// }}} |
// {{{ expandTabs |
/** |
* Expands the tabs in a line that may or may not include HTML. |
* |
* Enscript generates code with HTML, so we need to take that into account. |
* |
* @param string $s Line of possibly HTML-encoded text to expand |
* @param int $tabwidth Tab width, -1 to use repository's default, 0 to collapse |
* all tabs. |
* @return string The expanded line. |
* @since 2.1 |
*/ |
function expandTabs($s, $tabwidth = -1) |
{ |
global $rep; |
if ($tabwidth == -1) |
$tabwidth = $rep->getExpandTabsBy(); |
$pos = 0; |
// Parse the string into chunks that are either 1 of: HTML tag, tab char, run of any other stuff |
$chunks = preg_split("/((?:<.+?>)|(?:&.+?;)|(?:\t))/", $s, -1, PREG_SPLIT_DELIM_CAPTURE); |
// Count the sizes of the chunks and replace tabs as we go |
for ($i = 0; $i < count($chunks); $i++) |
{ |
# make sure we're not dealing with an empty string |
if (empty($chunks[$i])) continue; |
switch ($chunks[$i]{0}) |
{ |
case '<': // HTML tag : ignore its width by doing nothing |
break; |
case '&': // HTML entity: count its width as 1 char |
$pos += 1; |
break; |
case "\t": // Tab char: replace it with a run of spaces between length tabwidth and 1 |
$tabsize = $tabwidth - ($pos % $tabwidth); |
$chunks[$i] = str_repeat(' ', $tabsize); |
$pos += $tabsize; |
break; |
default: // Anything else: just keep track of its width |
$pos += strlen($chunks[$i]); |
break; |
} |
} |
// Put the chunks back together and we've got the original line, detabbed. |
return join('', $chunks); |
} |
// }}} |
// {{{ datetimeFormatDuration |
// |
// Formats a duration of seconds for display. |
// |
// $seconds the number of seconds until something |
// $nbsp true if spaces should be replaced by nbsp |
// $skipSeconds true if seconds should be omitted |
// |
// return the formatted duration (e.g. @c "8h 6m 1s") |
function datetimeFormatDuration($seconds, $nbsp = false, $skipSeconds = false) |
{ |
global $lang; |
if ($seconds < 0) |
{ |
$seconds = -$seconds; |
$neg = true; |
} |
else |
$neg = false; |
$qty = array(); |
$qty[] = (int)($seconds / (60 * 60 * 24)); |
$seconds %= 60 * 60 * 24; |
$qty[] = (int)($seconds / (60 * 60)); |
$seconds %= 60 * 60; |
$qty[] = (int)($seconds / 60); |
$qty[] = (int)($seconds % 60); |
$text = ""; |
$names = $lang["DAYLETTER"].$lang["HOURLETTER"].$lang["MINUTELETTER"]; |
if (!$skipSeconds) $names .= $lang["SECONDLETTER"]; |
$any = false; |
for ($i = 0; $i < strlen($names); $i++) |
// If a "higher valued" time slot had a value or this time slot |
// has a value or this is the very last entry (i.e. all values |
// are 0 and we still want to print seconds) |
if ($any || $qty[$i] || $i == sizeof($qty) - 1) |
{ |
$any = true; |
if ($i) |
$text .= sprintf("%2d", $qty[$i]); |
else |
$text .= $qty[$i]; |
$text .= "{$names{$i}} "; |
} |
$text = trim($text); |
if ($neg) |
$text = "-$text"; |
return $nbsp ? str_replace(" ", " ", $text) : $text; |
} |
// }}} |
// {{{ getParameterisedSelfUrl |
// |
// Get the relative URL (PHP_SELF) with GET and POST data |
function getParameterisedSelfUrl($params = true) |
{ |
global $config; |
$url = null; |
if ($config->multiViews) |
{ |
// Get rid of the file's name |
$url = preg_replace('/\.php/', '', $_SERVER['PHP_SELF'], 1); |
} |
else |
{ |
$url = basename($_SERVER['PHP_SELF']); |
// Sometimes the .php isn't on the end. Damn strange... |
if (strchr($url, '.') === false) |
$url .= '.php'; |
} |
if ($params) |
{ |
$arr = $_GET + $_POST; |
# XXX: the point of HTTP POST is that URIs have a set size limit, so POST |
# data is typically too large to bother with; why include it? |
$url .= '?'.htmlentities(http_build_query($arr)); |
} |
return $url; |
} |
// }}} |
// {{{ getUserLanguage |
function getUserLanguage() { |
$languages = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : 'en'; |
if (strpos($languages, ',') === false) return $languages; # only one specified |
# split off the languages into an array of languages and q-values |
$qvals = array(); |
$langs = array(); |
preg_match_all('#(\S+?)\s*(?:;q=([01](?:\.\d{1,3})?))?\s*,\s*#', $languages, $qvals, PREG_SET_ORDER); |
foreach ($qvals as $q) { |
$langs[] = array ( |
$q[1], |
floatval(!empty($q[2]) ? $q[2] : 1.0) |
); |
} |
# XXX: now, we should loop through our available languages and choose an |
# appropriate one for the user |
# note that we shouldn't match the region unless we have a specific region |
# to use (e.g. zh-CN vs. zh-TW) |
# FIXME: see above; otherwise, this function doesn't really do anything |
} |
// }}} |
?> |
/WebSVN/include/version.inc |
---|
0,0 → 1,28 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// version.inc |
// |
// Version information |
$version = '2.1 alpha 1'; |
?> |
/WebSVN/include/PHP/Compat/Components.php |
---|
0,0 → 1,108 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Components.php,v 1.10 2005/12/05 14:49:56 aidan Exp $ |
// Functions |
$components['function']['array_change_key_case'] = '4.2.0'; |
$components['function']['array_chunk'] = '4.2.0'; |
$components['function']['array_combine'] = '5.0.0'; |
$components['function']['array_diff_assoc'] = '4.3.0'; |
$components['function']['array_diff_key'] = '5.0.2'; |
$components['function']['array_diff_uassoc'] = '5.0.0'; |
$components['function']['array_diff_ukey'] = '5.0.2'; |
$components['function']['array_intersect_assoc'] = '5.0.0'; |
$components['function']['array_intersect_key'] = '5.0.2'; |
$components['function']['array_intersect_uassoc'] = '5.0.0'; |
$components['function']['array_intersect_ukey'] = '5.0.2'; |
$components['function']['array_key_exists'] = '4.1.0'; |
$components['function']['array_product'] = '5.1.0'; |
$components['function']['array_search'] = '4.0.5'; |
$components['function']['array_udiff'] = '5.0.0'; |
$components['function']['array_udiff_assoc'] = '5.0.0'; |
$components['function']['array_udiff_uassoc'] = '5.0.0'; |
$components['function']['array_uintersect'] = '5.0.0'; |
$components['function']['array_uintersect_assoc'] = '5.0.0'; |
$components['function']['array_uintersect_uassoc'] = '5.0.0'; |
$components['function']['array_walk_recursive'] = '5.0.0'; |
$components['function']['bcinvert'] = '5.2.0'; |
$components['function']['bcpowmod'] = '5.0.0'; |
$components['function']['call_user_func_array'] = '4.0.4'; |
$components['function']['clone'] = '5.0.0'; |
$components['function']['constant'] = '4.0.4'; |
$components['function']['convert_uudecode'] = '5.0.0'; |
$components['function']['convert_uuencode'] = '5.0.0'; |
$components['function']['debug_print_backtrace'] = '5.0.0'; |
$components['function']['file_get_contents'] = '4.3.0'; |
$components['function']['file_put_contents'] = '5.0.0'; |
$components['function']['floatval'] = '4.2.0'; |
$components['function']['fprintf'] = '5.0.0'; |
$components['function']['fputcsv'] = '5.0.0'; |
$components['function']['get_headers'] = '5.0.0'; |
$components['function']['get_include_path'] = '4.3.0'; |
$components['function']['html_entity_decode'] = '4.3.0'; |
$components['function']['htmlspecialchars_decode'] = '5.1.0'; |
$components['function']['http_build_query'] = '5.0.0'; |
$components['function']['ibase_timefmt'] = '5.0.0'; |
$components['function']['idate'] = '5.1.0'; |
$components['function']['image_type_to_mime_type'] = '4.3.0'; |
$components['function']['inet_ntop'] = '5.1.0'; |
$components['function']['inet_pton'] = '5.1.0'; |
$components['function']['ini_get_all'] = '4.2.0'; |
$components['function']['is_a'] = '4.2.0'; |
$components['function']['is_scalar'] = '4.0.5'; |
$components['function']['md5_file'] = '4.2.0'; |
$components['function']['mhash'] = '4.0.0'; |
$components['function']['mime_content_type'] = '4.3.0'; |
$components['function']['ob_clean'] = '4.2.0'; |
$components['function']['ob_flush'] = '4.2.0'; |
$components['function']['ob_get_clean'] = '4.3.0'; |
$components['function']['ob_get_flush'] = '4.3.0'; |
$components['function']['php_strip_whitespace'] = '5.0.0'; |
$components['function']['property_exists'] = '5.1.0'; |
$components['function']['pg_affected_rows'] = '4.2.0'; |
$components['function']['pg_escape_bytea'] = '4.2.0'; |
$components['function']['pg_unescape_bytea'] = '4.2.0'; |
$components['function']['restore_include_path'] = '4.3.0'; |
$components['function']['scandir'] = '5.0.0'; |
$components['function']['set_include_path'] = '4.3.0'; |
$components['function']['str_ireplace'] = '5.0.0'; |
$components['function']['str_rot13'] = '4.2.0'; |
$components['function']['str_shuffle'] = '4.3.0'; |
$components['function']['str_split'] = '5.0.0'; |
$components['function']['str_word_count'] = '4.3.0'; |
$components['function']['stripos'] = '5.0.0'; |
$components['function']['strpbrk'] = '5.0.0'; |
$components['function']['strripos'] = '5.0.0'; |
$components['function']['substr_compare'] = '5.0.0'; |
$components['function']['time_sleep_until'] = '5.1.0'; |
$components['function']['var_export'] = '4.2.0'; |
$components['function']['version_compare'] = '4.1.0'; |
$components['function']['vprintf'] = '4.1.0'; |
$components['function']['vsprintf'] = '4.1.0'; |
// Constants |
$components['constant']['DIRECTORY_SEPARATOR'] = '4.0.6'; |
$components['constant']['E_STRICT'] = '5.0.0'; |
$components['constant']['FILE'] = '4.3.0'; |
$components['constant']['PATH_SEPARATOR'] = '4.3.0'; |
$components['constant']['PHP_EOL'] = '5.0.1'; |
$components['constant']['STD'] = '4.3.0'; |
$components['constant']['T'] = '5.0.0'; |
$components['constant']['UPLOAD_ERR'] = '4.3.0'; |
?> |
/WebSVN/include/PHP/Compat/Constant/DIRECTORY_SEPARATOR.php |
---|
0,0 → 1,37 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: DIRECTORY_SEPARATOR.php,v 1.1 2004/11/28 03:55:28 aidan Exp $ |
/** |
* Replace constant DIRECTORY_SEPARATOR |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/reserved.constants.standard |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.1 $ |
* @since PHP 4.0.6 |
*/ |
if (!defined('DIRECTORY_SEPARATOR')) { |
define('DIRECTORY_SEPARATOR', |
strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? '\\' : '/' |
); |
} |
?> |
/WebSVN/include/PHP/Compat/Constant/E_STRICT.php |
---|
0,0 → 1,35 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: E_STRICT.php,v 1.11 2004/08/19 10:09:52 aidan Exp $ |
/** |
* Replace constant E_STRICT |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/ref.errorfunc |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.11 $ |
* @since PHP 5 |
*/ |
if (!defined('E_STRICT')) { |
define('E_STRICT', 2048); |
} |
?> |
/WebSVN/include/PHP/Compat/Constant/FILE.php |
---|
0,0 → 1,51 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: FILE.php,v 1.8 2004/08/19 10:09:52 aidan Exp $ |
/** |
* Replace filesystem constants |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/ref.filesystem |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.8 $ |
* @since PHP 5 |
*/ |
if (!defined('FILE_USE_INCLUDE_PATH')) { |
define('FILE_USE_INCLUDE_PATH', 1); |
} |
if (!defined('FILE_IGNORE_NEW_LINES')) { |
define('FILE_IGNORE_NEW_LINES', 2); |
} |
if (!defined('FILE_SKIP_EMPTY_LINES')) { |
define('FILE_SKIP_EMPTY_LINES', 4); |
} |
if (!defined('FILE_APPEND')) { |
define('FILE_APPEND', 8); |
} |
if (!defined('FILE_NO_DEFAULT_CONTEXT')) { |
define('FILE_NO_DEFAULT_CONTEXT', 16); |
} |
?> |
/WebSVN/include/PHP/Compat/Constant/PATH_SEPARATOR.php |
---|
0,0 → 1,37 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: PATH_SEPARATOR.php,v 1.13 2004/11/14 16:10:18 aidan Exp $ |
/** |
* Replace constant PATH_SEPARATOR |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/ref.dir |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.13 $ |
* @since PHP 4.3.0 |
*/ |
if (!defined('PATH_SEPARATOR')) { |
define('PATH_SEPARATOR', |
strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? ';' : ':' |
); |
} |
?> |
/WebSVN/include/PHP/Compat/Constant/PHP_EOL.php |
---|
0,0 → 1,49 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: PHP_EOL.php,v 1.2 2004/10/10 13:58:09 aidan Exp $ |
/** |
* Replace PHP_EOL constant |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/reserved.constants.core |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.2 $ |
* @since PHP 5.0.2 |
*/ |
if (!defined('PHP_EOL')) { |
switch (strtoupper(substr(PHP_OS, 0, 3))) { |
// Windows |
case 'WIN': |
define('PHP_EOL', "\r\n"); |
break; |
// Mac |
case 'DAR': |
define('PHP_EOL', "\r"); |
break; |
// Unix |
default: |
define('PHP_EOL', "\n"); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Constant/STD.php |
---|
0,0 → 1,43 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: STD.php,v 1.9 2004/08/19 10:09:52 aidan Exp $ |
/** |
* Replace commandline constants |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/features.commandline |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.9 $ |
* @since PHP 4.3.0 |
*/ |
if (!defined('STDIN')) { |
define('STDIN', fopen('php://stdin', 'r')); |
} |
if (!defined('STDOUT')) { |
define('STDOUT', fopen('php://stdout', 'w')); |
} |
if (!defined('STDERR')) { |
define('STDERR', fopen('php://stderr', 'w')); |
} |
?> |
/WebSVN/include/PHP/Compat/Constant/T.php |
---|
0,0 → 1,72 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: T.php,v 1.4 2004/11/14 16:43:40 aidan Exp $ |
/** |
* Replace tokenizer constants |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/ref.tokenizer |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 5 |
*/ |
if (!defined('T_ML_COMMENT')) { |
define('T_ML_COMMENT', T_COMMENT); |
} |
if (!defined('T_DOC_COMMENT')) { |
define('T_DOC_COMMENT', T_ML_COMMENT); |
} |
if (!defined('T_OLD_FUNCTION')) { |
define('T_OLD_FUNCTION', -1); |
} |
if (!defined('T_ABSTRACT')) { |
define('T_ABSTRACT', -1); |
} |
if (!defined('T_CATCH')) { |
define('T_CATCH', -1); |
} |
if (!defined('T_FINAL')) { |
define('T_FINAL', -1); |
} |
if (!defined('T_INSTANCEOF')) { |
define('T_INSTANCEOF', -1); |
} |
if (!defined('T_PRIVATE')) { |
define('T_PRIVATE', -1); |
} |
if (!defined('T_PROTECTED')) { |
define('T_PROTECTED', -1); |
} |
if (!defined('T_PUBLIC')) { |
define('T_PUBLIC', -1); |
} |
if (!defined('T_THROW')) { |
define('T_THROW', -1); |
} |
if (!defined('T_TRY')) { |
define('T_TRY', -1); |
} |
if (!defined('T_CLONE')) { |
define('T_CLONE', -1); |
} |
?> |
/WebSVN/include/PHP/Compat/Constant/UPLOAD_ERR.php |
---|
0,0 → 1,51 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: UPLOAD_ERR.php,v 1.1 2004/10/12 08:41:11 aidan Exp $ |
/** |
* Replace upload error constants |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/features.file-upload.errors |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.1 $ |
* @since PHP 4.3.0 |
*/ |
if (!defined('UPLOAD_ERR_OK')) { |
define('UPLOAD_ERR_OK', 0); |
} |
if (!defined('UPLOAD_ERR_INI_SIZE')) { |
define('UPLOAD_ERR_INI_SIZE', 1); |
} |
if (!defined('UPLOAD_ERR_FORM_SIZE')) { |
define('UPLOAD_ERR_FORM_SIZE', 2); |
} |
if (!defined('UPLOAD_ERR_PARTIAL')) { |
define('UPLOAD_ERR_PARTIAL', 3); |
} |
if (!defined('UPLOAD_ERR_NO_FILE')) { |
define('UPLOAD_ERR_NO_FILE', 4); |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_change_key_case.php |
---|
0,0 → 1,64 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_change_key_case.php,v 1.11 2005/12/07 21:08:57 aidan Exp $ |
if (!defined('CASE_LOWER')) { |
define('CASE_LOWER', 0); |
} |
if (!defined('CASE_UPPER')) { |
define('CASE_UPPER', 1); |
} |
/** |
* Replace array_change_key_case() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_change_key_case |
* @author Stephan Schmidt <schst@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.11 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_change_key_case')) { |
function array_change_key_case($input, $case = CASE_LOWER) |
{ |
if (!is_array($input)) { |
user_error('array_change_key_case(): The argument should be an array', |
E_USER_WARNING); |
return false; |
} |
$output = array (); |
$keys = array_keys($input); |
$casefunc = ($case == CASE_LOWER) ? 'strtolower' : 'strtoupper'; |
foreach ($keys as $key) { |
$output[$casefunc($key)] = $input[$key]; |
} |
return $output; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_chunk.php |
---|
0,0 → 1,72 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_chunk.php,v 1.14 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_combine() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_chunk |
* @author Aidan Lister <aidan@php.net> |
* @author Thiemo Mättig (http://maettig.com) |
* @version $Revision: 1.14 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_chunk')) { |
function array_chunk($input, $size, $preserve_keys = false) |
{ |
if (!is_array($input)) { |
user_error('array_chunk() expects parameter 1 to be array, ' . |
gettype($input) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_numeric($size)) { |
user_error('array_chunk() expects parameter 2 to be long, ' . |
gettype($size) . ' given', E_USER_WARNING); |
return; |
} |
$size = (int)$size; |
if ($size <= 0) { |
user_error('array_chunk() Size parameter expected to be greater than 0', |
E_USER_WARNING); |
return; |
} |
$chunks = array(); |
$i = 0; |
if ($preserve_keys !== false) { |
foreach ($input as $key => $value) { |
$chunks[(int)($i++ / $size)][$key] = $value; |
} |
} else { |
foreach ($input as $value) { |
$chunks[(int)($i++ / $size)][] = $value; |
} |
} |
return $chunks; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_combine.php |
---|
0,0 → 1,71 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_combine.php,v 1.21 2005/01/28 02:27:52 aidan Exp $ |
/** |
* Replace array_combine() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_combine |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.21 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_combine')) { |
function array_combine($keys, $values) |
{ |
if (!is_array($keys)) { |
user_error('array_combine() expects parameter 1 to be array, ' . |
gettype($keys) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_array($values)) { |
user_error('array_combine() expects parameter 2 to be array, ' . |
gettype($values) . ' given', E_USER_WARNING); |
return; |
} |
$key_count = count($keys); |
$value_count = count($values); |
if ($key_count !== $value_count) { |
user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING); |
return false; |
} |
if ($key_count === 0 || $value_count === 0) { |
user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING); |
return false; |
} |
$keys = array_values($keys); |
$values = array_values($values); |
$combined = array(); |
for ($i = 0; $i < $key_count; $i++) { |
$combined[$keys[$i]] = $values[$i]; |
} |
return $combined; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_diff_assoc.php |
---|
0,0 → 1,76 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_diff_assoc.php,v 1.12 2005/12/07 21:08:57 aidan Exp $ |
/** |
* Replace array_diff_assoc() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_diff_assoc |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.12 $ |
* @since PHP 4.3.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_diff_assoc')) { |
function array_diff_assoc() |
{ |
// Check we have enough arguments |
$args = func_get_args(); |
$count = count($args); |
if (count($args) < 2) { |
user_error('Wrong parameter count for array_diff_assoc()', E_USER_WARNING); |
return; |
} |
// Check arrays |
for ($i = 0; $i < $count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_diff_assoc() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Get the comparison array |
$array_comp = array_shift($args); |
--$count; |
// Traverse values of the first array |
foreach ($array_comp as $key => $value) { |
// Loop through the other arrays |
for ($i = 0; $i < $count; $i++) { |
// Loop through this arrays key/value pairs and compare |
foreach ($args[$i] as $comp_key => $comp_value) { |
if ((string)$key === (string)$comp_key && |
(string)$value === (string)$comp_value) |
{ |
unset($array_comp[$key]); |
} |
} |
} |
} |
return $array_comp; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_diff_key.php |
---|
0,0 → 1,66 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_diff_key.php,v 1.4 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_diff_key() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_diff_key |
* @author Tom Buskens <ortega@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 5.0.2 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_diff_key')) { |
function array_diff_key() |
{ |
$args = func_get_args(); |
if (count($args) < 2) { |
user_error('Wrong parameter count for array_diff_key()', E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i !== $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_diff_key() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
$result = $args[0]; |
foreach ($args[0] as $key1 => $value1) { |
for ($i = 1; $i !== $array_count; $i++) { |
foreach ($args[$i] as $key2 => $value2) { |
if ((string) $key1 === (string) $key2) { |
unset($result[$key2]); |
break 2; |
} |
} |
} |
} |
return $result; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_diff_uassoc.php |
---|
0,0 → 1,83 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_diff_uassoc.php,v 1.2 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_diff_uassoc() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_diff_uassoc |
* @version $Revision: 1.2 $ |
* @since PHP 5.0.0 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_diff_uassoc')) { |
function array_diff_uassoc() |
{ |
// Sanity check |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('Wrong parameter count for array_diff_uassoc()', E_USER_WARNING); |
return; |
} |
// Get compare function |
$compare_func = array_pop($args); |
if (!is_callable($compare_func)) { |
if (is_array($compare_func)) { |
$compare_func = $compare_func[0] . '::' . $compare_func[1]; |
} |
user_error('array_diff_uassoc() Not a valid callback ' . |
$compare_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i !== $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_diff_uassoc() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Compare entries |
$result = array(); |
foreach ($args[0] as $k => $v) { |
for ($i = 1; $i < $array_count; $i++) { |
foreach ($args[$i] as $kk => $vv) { |
if ($v == $vv) { |
$compare = call_user_func_array($compare_func, array($k, $kk)); |
if ($compare == 0) { |
continue 3; |
} |
} |
} |
} |
$result[$k] = $v; |
} |
return $result; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_diff_ukey.php |
---|
0,0 → 1,79 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_diff_ukey.php,v 1.4 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_diff_ukey() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_diff_ukey |
* @author Tom Buskens <ortega@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 5.0.2 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_diff_ukey')) { |
function array_diff_ukey() |
{ |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('Wrong parameter count for array_diff_ukey()', E_USER_WARNING); |
return; |
} |
// Get compare function |
$compare_func = array_pop($args); |
if (!is_callable($compare_func)) { |
if (is_array($compare_func)) { |
$compare_func = $compare_func[0].'::'.$compare_func[1]; |
} |
user_error('array_diff_ukey() Not a valid callback ' . |
$compare_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i !== $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_diff_ukey() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Compare entries |
$result = $args[0]; |
foreach ($args[0] as $key1 => $value1) { |
for ($i = 1; $i !== $array_count; $i++) { |
foreach ($args[$i] as $key2 => $value2) { |
if (!(call_user_func($compare_func, (string) $key1, (string) $key2))) { |
unset($result[$key1]); |
break 2; |
} |
} |
} |
} |
return $result; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_intersect_assoc.php |
---|
0,0 → 1,69 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_intersect_assoc.php,v 1.4 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_intersect_assoc() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_intersect_assoc |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 4.3.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_intersect_assoc')) { |
function array_intersect_assoc() |
{ |
// Sanity check |
$args = func_get_args(); |
if (count($args) < 2) { |
user_error('wrong parameter count for array_intersect_assoc()', E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i !== $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_intersect_assoc() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Compare entries |
$intersect = array(); |
foreach ($args[0] as $key => $value) { |
$intersect[$key] = $value; |
for ($i = 1; $i < $array_count; $i++) { |
if (!isset($args[$i][$key]) || $args[$i][$key] != $value) { |
unset($intersect[$key]); |
break; |
} |
} |
} |
return $intersect; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_intersect_key.php |
---|
0,0 → 1,67 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_intersect_key.php,v 1.4 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_intersect_key() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_intersect_key |
* @author Tom Buskens <ortega@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 5.0.2 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_intersect_key')) { |
function array_intersect_key() |
{ |
$args = func_get_args(); |
if (count($args) < 2) { |
user_error('Wrong parameter count for array_intersect_key()', E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i !== $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_intersect_key() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Compare entries |
$result = array(); |
foreach ($args[0] as $key1 => $value1) { |
for ($i = 1; $i !== $array_count; $i++) { |
foreach ($args[$i] as $key2 => $value2) { |
if ((string) $key1 === (string) $key2) { |
$result[$key1] = $value1; |
} |
} |
} |
} |
return $result; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_intersect_uassoc.php |
---|
0,0 → 1,90 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_intersect_uassoc.php,v 1.5 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_intersect_assoc() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_intersect_uassoc |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.5 $ |
* @since PHP 5 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_intersect_uassoc')) { |
function array_intersect_uassoc() |
{ |
// Sanity check |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('Wrong parameter count for array_intersect_ukey()', E_USER_WARNING); |
return; |
} |
// Get compare function |
$compare_func = array_pop($args); |
if (!is_callable($compare_func)) { |
if (is_array($compare_func)) { |
$compare_func = $compare_func[0] . '::' . $compare_func[1]; |
} |
user_error('array_intersect_uassoc() Not a valid callback ' . |
$compare_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i !== $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_intersect_uassoc() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Compare entries |
$result = array(); |
foreach ($args[0] as $k => $v) { |
for ($i = 0; $i < $array_count; $i++) { |
$match = false; |
foreach ($args[$i] as $kk => $vv) { |
$compare = call_user_func_array($compare_func, array($k, $kk)); |
if ($compare === 0 && $v == $vv) { |
$match = true; |
continue 2; |
} |
} |
if ($match === false) { |
continue 2; |
} |
} |
if ($match === true) { |
$result[$k] = $v; |
} |
} |
return $result; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_intersect_ukey.php |
---|
0,0 → 1,79 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_intersect_ukey.php,v 1.4 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_intersect_ukey() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_intersect_ukey |
* @author Tom Buskens <ortega@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 5.0.2 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_intersect_ukey')) { |
function array_intersect_ukey() |
{ |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('Wrong parameter count for array_intersect_ukey()', E_USER_WARNING); |
return; |
} |
// Get compare function |
$compare_func = array_pop($args); |
if (!is_callable($compare_func)) { |
if (is_array($compare_func)) { |
$compare_func = $compare_func[0].'::'.$compare_func[1]; |
} |
user_error('array_diff_ukey() Not a valid callback ' . |
$compare_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i !== $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_intersect_ukey() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Compare entries |
$result = array(); |
foreach ($args[0] as $key1 => $value1) { |
for ($i = 1; $i !== $array_count; $i++) { |
foreach ($args[$i] as $key2 => $value2) { |
if (!(call_user_func($compare_func, (string) $key1, (string) $key2))) { |
$result[$key1] = $value1; |
break 2; |
} |
} |
} |
} |
return $result; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_key_exists.php |
---|
0,0 → 1,55 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_key_exists.php,v 1.7 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_key_exists() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_key_exists |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.7 $ |
* @since PHP 4.1.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_key_exists')) { |
function array_key_exists($key, $search) |
{ |
if (!is_scalar($key)) { |
user_error('array_key_exists() The first argument should be either a string or an integer', |
E_USER_WARNING); |
return false; |
} |
if (is_object($search)) { |
$search = get_object_vars($search); |
} |
if (!is_array($search)) { |
user_error('array_key_exists() The second argument should be either an array or an object', |
E_USER_WARNING); |
return false; |
} |
return in_array($key, array_keys($search)); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_product.php |
---|
0,0 → 1,53 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Arpad Ray <arpad@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_product.php,v 1.1 2005/12/05 14:49:08 aidan Exp $ |
/** |
* Replace array_product() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/time_sleep_until |
* @author Arpad Ray <arpad@php.net> |
* @version $Revision: 1.1 $ |
* @since PHP 5.1.0 |
* @require PHP 4.0.1 (trigger_error) |
*/ |
if (!function_exists('array_product')) { |
function array_product($array) |
{ |
if (!is_array($array)) { |
trigger_error('The argument should be an array', E_USER_WARNING); |
return; |
} |
if (empty($array)) { |
return 0; |
} |
$r = 1; |
foreach ($array as $v) { |
$r *= $v; |
} |
return $r; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_search.php |
---|
0,0 → 1,51 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_search.php,v 1.6 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_search() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_search |
* @author Aidan Lister <aidan@php.net> |
* @author Thiemo Mättig (http://maettig.com/) |
* @version $Revision: 1.6 $ |
* @since PHP 4.0.5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('array_search')) { |
function array_search($needle, $haystack, $strict = false) |
{ |
if (!is_array($haystack)) { |
user_error('array_search() Wrong datatype for second argument', E_USER_WARNING); |
return false; |
} |
foreach ($haystack as $key => $value) { |
if ($strict ? $value === $needle : $value == $needle) { |
return $key; |
} |
} |
return false; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_udiff.php |
---|
0,0 → 1,83 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_udiff.php,v 1.10 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_udiff() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_udiff |
* @author Stephan Schmidt <schst@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.10 $ |
* @since PHP 5 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_udiff')) { |
function array_udiff() |
{ |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('Wrong parameter count for array_udiff()', E_USER_WARNING); |
return; |
} |
// Get compare function |
$compare_func = array_pop($args); |
if (!is_callable($compare_func)) { |
if (is_array($compare_func)) { |
$compare_func = $compare_func[0] . '::' . $compare_func[1]; |
} |
user_error('array_udiff() Not a valid callback ' . |
$compare_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$cnt = count($args); |
for ($i = 0; $i < $cnt; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_udiff() Argument #' . |
($i + 1). ' is not an array', E_USER_WARNING); |
return; |
} |
} |
$diff = array (); |
// Traverse values of the first array |
foreach ($args[0] as $key => $value) { |
// Check all arrays |
for ($i = 1; $i < $cnt; $i++) { |
foreach ($args[$i] as $cmp_value) { |
$result = call_user_func($compare_func, $value, $cmp_value); |
if ($result === 0) { |
continue 3; |
} |
} |
} |
$diff[$key] = $value; |
} |
return $diff; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_udiff_assoc.php |
---|
0,0 → 1,85 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_udiff_assoc.php,v 1.14 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_udiff_assoc() |
* |
* @category PHP |
* @package PHP_Compat |
* @author Stephan Schmidt <schst@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.14 $ |
* @link http://php.net/function.array-udiff-assoc |
* @since PHP 5 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_udiff_assoc')) { |
function array_udiff_assoc() |
{ |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('Wrong parameter count for array_udiff_assoc()', E_USER_WARNING); |
return; |
} |
// Get compare function |
$compare_func = array_pop($args); |
if (!is_callable($compare_func)) { |
if (is_array($compare_func)) { |
$compare_func = $compare_func[0] . '::' . $compare_func[1]; |
} |
user_error('array_udiff_assoc() Not a valid callback ' . |
$compare_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$count = count($args); |
for ($i = 0; $i < $count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_udiff_assoc() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
$diff = array (); |
// Traverse values of the first array |
foreach ($args[0] as $key => $value) { |
// Check all arrays |
for ($i = 1; $i < $count; $i++) { |
if (!array_key_exists($key, $args[$i])) { |
continue; |
} |
$result = call_user_func($compare_func, $value, $args[$i][$key]); |
if ($result === 0) { |
continue 2; |
} |
} |
$diff[$key] = $value; |
} |
return $diff; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_udiff_uassoc.php |
---|
0,0 → 1,82 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_udiff_uassoc.php,v 1.8 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_udiff_uassoc() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_udiff_uassoc |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.8 $ |
* @since PHP 5 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_udiff_uassoc')) { |
function array_udiff_uassoc() |
{ |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('Wrong parameter count for array_udiff_uassoc()', E_USER_WARNING); |
return; |
} |
// Get compare function |
$compare_func = array_pop($args); |
if (!is_callable($compare_func)) { |
if (is_array($compare_func)) { |
$compare_func = $compare_func[0] . '::' . $compare_func[1]; |
} |
user_error('array_udiff_uassoc() Not a valid callback ' . $compare_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$count = count($args); |
for ($i = 0; $i < $count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_udiff_uassoc() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Traverse values of the first array |
$diff = array (); |
foreach ($args[0] as $key => $value) { |
// Check all arrays |
for ($i = 1; $i < $count; $i++) { |
if (!array_key_exists($key, $args[$i])) { |
continue; |
} |
$result = call_user_func($compare_func, $value, $args[$i][$key]); |
if ($result === 0) { |
continue 2; |
} |
} |
$diff[$key] = $value; |
} |
return $diff; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_uintersect.php |
---|
0,0 → 1,82 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Tom Buskens <ortega@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_uintersect.php,v 1.9 2005/05/10 12:05:48 aidan Exp $ |
/** |
* Replace array_uintersect() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_uintersect |
* @author Tom Buskens <ortega@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.9 $ |
* @since PHP 5 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_uintersect')) { |
function array_uintersect() |
{ |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('wrong parameter count for array_uintersect()', |
E_USER_WARNING); |
return; |
} |
// Get compare function |
$user_func = array_pop($args); |
if (!is_callable($user_func)) { |
if (is_array($user_func)) { |
$user_func = $user_func[0] . '::' . $user_func[1]; |
} |
user_error('array_uintersect() Not a valid callback ' . |
$user_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i < $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_uintersect() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Compare entries |
$output = array(); |
foreach ($args[0] as $key => $item) { |
for ($i = 1; $i !== $array_count; $i++) { |
$array = $args[$i]; |
foreach($array as $key0 => $item0) { |
if (!call_user_func($user_func, $item, $item0)) { |
$output[$key] = $item; |
} |
} |
} |
} |
return $output; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_uintersect_assoc.php |
---|
0,0 → 1,81 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Tom Buskens <ortega@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_uintersect_assoc.php,v 1.9 2005/05/10 07:50:08 aidan Exp $ |
/** |
* Replace array_uintersect_assoc() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_uintersect_assoc |
* @author Tom Buskens <ortega@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.9 $ |
* @since PHP 5 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_uintersect_assoc')) { |
function array_uintersect_assoc() |
{ |
$args = func_get_args(); |
if (count($args) < 3) { |
user_error('wrong parameter count for array_uintersect_assoc()', E_USER_WARNING); |
return; |
} |
// Get compare function |
$user_func = array_pop($args); |
if (!is_callable($user_func)) { |
if (is_array($user_func)) { |
$user_func = $user_func[0] . '::' . $user_func[1]; |
} |
user_error('array_uintersect_assoc() Not a valid callback ' . |
$user_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$array_count = count($args); |
for ($i = 0; $i < $array_count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_uintersect_assoc() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Compare entries |
$output = array(); |
foreach ($args[0] as $key => $item) { |
for ($i = 1; $i !== $array_count; $i++) { |
if (array_key_exists($key, $args[$i])) { |
$compare = call_user_func($user_func, $item, $args[$i][$key]); |
if ($compare === 0) { |
$output[$key] = $item; |
} |
} |
} |
} |
return $output; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_uintersect_uassoc.php |
---|
0,0 → 1,97 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_uintersect_uassoc.php,v 1.12 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_uintersect_uassoc() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_uintersect_uassoc |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.12 $ |
* @since PHP 5 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_uintersect_uassoc')) { |
function array_uintersect_uassoc() |
{ |
$args = func_get_args(); |
if (count($args) < 4) { |
user_error('Wrong parameter count for array_uintersect_uassoc()', |
E_USER_WARNING); |
return; |
} |
// Get key_compare_func |
$key_compare_func = array_pop($args); |
if (!is_callable($key_compare_func)) { |
if (is_array($key_compare_func)) { |
$key_compare_func = $key_compare_func[0] . '::' . $key_compare_func[1]; |
} |
user_error('array_uintersect_uassoc() Not a valid callback ' . |
$key_compare_func, E_USER_WARNING); |
return; |
} |
// Get data_compare_func |
$data_compare_func = array_pop($args); |
if (!is_callable($data_compare_func)) { |
if (is_array($data_compare_func)) { |
$data_compare_func = $data_compare_func[0] . '::' . $data_compare_func[1]; |
} |
user_error('array_uintersect_uassoc() Not a valid callback ' |
. $data_compare_func, E_USER_WARNING); |
return; |
} |
// Check arrays |
$count = count($args); |
for ($i = 0; $i !== $count; $i++) { |
if (!is_array($args[$i])) { |
user_error('array_uintersect_uassoc() Argument #' . |
($i + 1) . ' is not an array', E_USER_WARNING); |
return; |
} |
} |
// Traverse values of the first array |
$intersect = array (); |
foreach ($args[0] as $key => $value) { |
// Check against each array |
for ($i = 1; $i < $count; $i++) { |
// Traverse each element in current array |
foreach ($args[$i] as $ckey => $cvalue) { |
// Compare key and value |
if (call_user_func($key_compare_func, $key, $ckey) === 0 && |
call_user_func($data_compare_func, $value, $cvalue) === 0) |
{ |
$intersect[$key] = $value; |
continue; |
} |
} |
} |
} |
return $intersect; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/array_walk_recursive.php |
---|
0,0 → 1,68 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Tom Buskens <ortega@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: array_walk_recursive.php,v 1.7 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace array_walk_recursive() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.array_walk_recursive |
* @author Tom Buskens <ortega@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.7 $ |
* @since PHP 5 |
* @require PHP 4.0.6 (is_callable) |
*/ |
if (!function_exists('array_walk_recursive')) { |
function array_walk_recursive(&$input, $funcname) |
{ |
if (!is_callable($funcname)) { |
if (is_array($funcname)) { |
$funcname = $funcname[0] . '::' . $funcname[1]; |
} |
user_error('array_walk_recursive() Not a valid callback ' . $user_func, |
E_USER_WARNING); |
return; |
} |
if (!is_array($input)) { |
user_error('array_walk_recursive() The argument should be an array', |
E_USER_WARNING); |
return; |
} |
$args = func_get_args(); |
foreach ($input as $key => $item) { |
if (is_array($item)) { |
array_walk_recursive($item, $funcname, $args); |
$input[$key] = $item; |
} else { |
$args[0] = &$item; |
$args[1] = &$key; |
call_user_func_array($funcname, $args); |
$input[$key] = $item; |
} |
} |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/bcinvert.php |
---|
0,0 → 1,76 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: bcinvert.php,v 1.2 2005/11/22 20:24:45 aidan Exp $ |
/** |
* Replace bcinvert() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.bcinvert |
* @author Sara Golemon <pollita@php.net> |
* @version $Revision: 1.2 $ |
* @since PHP 5.2.0 |
* @require PHP 4.0.4 (call_user_func_array) |
*/ |
if (!function_exists('bcinvert')) { |
function bcinvert($a, $n) |
{ |
// Sanity check |
if (!is_scalar($a)) { |
user_error('bcinvert() expects parameter 1 to be string, ' . |
gettype($a) . ' given', E_USER_WARNING); |
return false; |
} |
if (!is_scalar($n)) { |
user_error('bcinvert() expects parameter 2 to be string, ' . |
gettype($n) . ' given', E_USER_WARNING); |
return false; |
} |
$u1 = $v2 = '1'; |
$u2 = $v1 = '0'; |
$u3 = $n; |
$v3 = $a; |
while (bccomp($v3, '0')) { |
$q0 = bcdiv($u3, $v3); |
$t1 = bcsub($u1, bcmul($q0, $v1)); |
$t2 = bcsub($u2, bcmul($q0, $v2)); |
$t3 = bcsub($u3, bcmul($q0, $v3)); |
$u1 = $v1; |
$u2 = $v2; |
$u3 = $v3; |
$v1 = $t1; |
$v2 = $t2; |
$v3 = $t3; |
} |
if (bccomp($u2, '0') < 0) { |
return bcadd($u2, $n); |
} else { |
return bcmod($u2, $n); |
} |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/bcpowmod.php |
---|
0,0 → 1,75 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: bcpowmod.php,v 1.2 2005/11/22 20:24:45 aidan Exp $ |
/** |
* Replace bcpowmod() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.bcpowmod |
* @author Sara Golemon <pollita@php.net> |
* @version $Revision: 1.2 $ |
* @since PHP 5.0.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('bcpowmod')) { |
function bcpowmod($x, $y, $modulus, $scale) |
{ |
// Sanity check |
if (!is_scalar($x)) { |
user_error('bcpowmod() expects parameter 1 to be string, ' . |
gettype($x) . ' given', E_USER_WARNING); |
return false; |
} |
if (!is_scalar($y)) { |
user_error('bcpowmod() expects parameter 2 to be string, ' . |
gettype($y) . ' given', E_USER_WARNING); |
return false; |
} |
if (!is_scalar($modulus)) { |
user_error('bcpowmod() expects parameter 3 to be string, ' . |
gettype($modulus) . ' given', E_USER_WARNING); |
return false; |
} |
if (!is_scalar($scale)) { |
user_error('bcpowmod() expects parameter 4 to be integer, ' . |
gettype($scale) . ' given', E_USER_WARNING); |
return false; |
} |
$t = '1'; |
while (bccomp($y, '0')) { |
if (bccomp(bcmod($y, '2'), '0')) { |
$t = bcmod(bcmul($t, $x), $modulus); |
$y = bcsub($y, '1'); |
} |
$x = bcmod(bcmul($x, $x), $modulus); |
$y = bcdiv($y, '2'); |
} |
return $t; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/call_user_func_array.php |
---|
0,0 → 1,75 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: call_user_func_array.php,v 1.13 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace call_user_func_array() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.call_user_func_array |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.13 $ |
* @since PHP 4.0.4 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('call_user_func_array')) { |
function call_user_func_array($function, $param_arr) |
{ |
$param_arr = array_values((array) $param_arr); |
// Sanity check |
if (!is_callable($function)) { |
if (is_array($function) && count($function) > 2) { |
$function = $function[0] . '::' . $function[1]; |
} |
$error = sprintf('call_user_func_array() First argument is expected ' . |
'to be a valid callback, \'%s\' was given', $function); |
user_error($error, E_USER_WARNING); |
return; |
} |
// Build argument string |
$arg_string = ''; |
$comma = ''; |
for ($i = 0, $x = count($param_arr); $i < $x; $i++) { |
$arg_string .= $comma . "\$param_arr[$i]"; |
$comma = ', '; |
} |
// Determine method of calling function |
if (is_array($function)) { |
$object =& $function[0]; |
$method = $function[1]; |
// Static vs method call |
if (is_string($function[0])) { |
eval("\$retval = $object::\$method($arg_string);"); |
} else { |
eval("\$retval = \$object->\$method($arg_string);"); |
} |
} else { |
eval("\$retval = \$function($arg_string);"); |
} |
return $retval; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/clone.php |
---|
0,0 → 1,56 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: clone.php,v 1.3 2005/05/01 10:40:59 aidan Exp $ |
/** |
* Replace clone() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/language.oop5.cloning |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.3 $ |
* @since PHP 5.0.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (version_compare(phpversion(), '5.0') === -1) { |
// Needs to be wrapped in eval as clone is a keyword in PHP5 |
eval(' |
function clone($object) |
{ |
// Sanity check |
if (!is_object($object)) { |
user_error(\'clone() __clone method called on non-object\', E_USER_WARNING); |
return; |
} |
// Use serialize/unserialize trick to deep copy the object |
$object = unserialize(serialize($object)); |
// If there is a __clone method call it on the "new" class |
if (method_exists($object, \'__clone\')) { |
$object->__clone(); |
} |
return $object; |
} |
'); |
} |
?> |
/WebSVN/include/PHP/Compat/Function/constant.php |
---|
0,0 → 1,47 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: constant.php,v 1.7 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace constant() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.constant |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.7 $ |
* @since PHP 4.0.4 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('constant')) { |
function constant($constant) |
{ |
if (!defined($constant)) { |
$error = sprintf('constant() Couldn\'t find constant %s', $constant); |
user_error($error, E_USER_WARNING); |
return false; |
} |
eval("\$value=$constant;"); |
return $value; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/convert_uudecode.php |
---|
0,0 → 1,79 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Michael Wallner <mike@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: convert_uudecode.php,v 1.8 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace convert_uudecode() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.convert_uudecode |
* @author Michael Wallner <mike@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.8 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('convert_uudecode')) { |
function convert_uudecode($string) |
{ |
// Sanity check |
if (!is_scalar($string)) { |
user_error('convert_uuencode() expects parameter 1 to be string, ' . |
gettype($string) . ' given', E_USER_WARNING); |
return false; |
} |
if (strlen($string) < 8) { |
user_error('convert_uuencode() The given parameter is not a valid uuencoded string', E_USER_WARNING); |
return false; |
} |
$decoded = ''; |
foreach (explode("\n", $string) as $line) { |
$c = count($bytes = unpack('c*', substr(trim($line), 1))); |
while ($c % 4) { |
$bytes[++$c] = 0; |
} |
foreach (array_chunk($bytes, 4) as $b) { |
$b0 = $b[0] == 0x60 ? 0 : $b[0] - 0x20; |
$b1 = $b[1] == 0x60 ? 0 : $b[1] - 0x20; |
$b2 = $b[2] == 0x60 ? 0 : $b[2] - 0x20; |
$b3 = $b[3] == 0x60 ? 0 : $b[3] - 0x20; |
$b0 <<= 2; |
$b0 |= ($b1 >> 4) & 0x03; |
$b1 <<= 4; |
$b1 |= ($b2 >> 2) & 0x0F; |
$b2 <<= 6; |
$b2 |= $b3 & 0x3F; |
$decoded .= pack('c*', $b0, $b1, $b2); |
} |
} |
return rtrim($decoded, "\0"); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/convert_uuencode.php |
---|
0,0 → 1,79 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Michael Wallner <mike@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: convert_uuencode.php,v 1.7 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace convert_uuencode() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.convert_uuencode |
* @author Michael Wallner <mike@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.7 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('convert_uuencode')) { |
function convert_uuencode($string) |
{ |
// Sanity check |
if (!is_scalar($string)) { |
user_error('convert_uuencode() expects parameter 1 to be string, ' . |
gettype($string) . ' given', E_USER_WARNING); |
return false; |
} |
$u = 0; |
$encoded = ''; |
while ($c = count($bytes = unpack('c*', substr($string, $u, 45)))) { |
$u += 45; |
$encoded .= pack('c', $c + 0x20); |
while ($c % 3) { |
$bytes[++$c] = 0; |
} |
foreach (array_chunk($bytes, 3) as $b) { |
$b0 = ($b[0] & 0xFC) >> 2; |
$b1 = (($b[0] & 0x03) << 4) + (($b[1] & 0xF0) >> 4); |
$b2 = (($b[1] & 0x0F) << 2) + (($b[2] & 0xC0) >> 6); |
$b3 = $b[2] & 0x3F; |
$b0 = $b0 ? $b0 + 0x20 : 0x60; |
$b1 = $b1 ? $b1 + 0x20 : 0x60; |
$b2 = $b2 ? $b2 + 0x20 : 0x60; |
$b3 = $b3 ? $b3 + 0x20 : 0x60; |
$encoded .= pack('c*', $b0, $b1, $b2, $b3); |
} |
$encoded .= "\n"; |
} |
// Add termination characters |
$encoded .= "\x60\n"; |
return $encoded; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/debug_print_backtrace.php |
---|
0,0 → 1,67 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Laurent Laville <pear@laurent-laville.org> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: debug_print_backtrace.php,v 1.3 2005/08/17 02:58:09 aidan Exp $ |
/** |
* Replace debug_print_backtrace() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.debug_print_backtrace |
* @author Laurent Laville <pear@laurent-laville.org> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.3 $ |
* @since PHP 5 |
* @require PHP 4.3.0 (debug_backtrace) |
*/ |
if (!function_exists('debug_print_backtrace')) { |
function debug_print_backtrace() |
{ |
// Get backtrace |
$backtrace = debug_backtrace(); |
// Unset call to debug_print_backtrace |
array_shift($backtrace); |
// Iterate backtrace |
$calls = array(); |
foreach ($backtrace as $i => $call) { |
$location = $call['file'] . ':' . $call['line']; |
$function = (isset($call['class'])) ? |
$call['class'] . '.' . $call['function'] : |
$call['function']; |
$params = ''; |
if (isset($call['args'])) { |
$params = implode(', ', $call['args']); |
} |
$calls[] = sprintf('#%d %s(%s) called at [%s]', |
$i, |
$function, |
$params, |
$location); |
} |
echo implode("\n", $calls); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/file_get_contents.php |
---|
0,0 → 1,57 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: file_get_contents.php,v 1.21 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace file_get_contents() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.file_get_contents |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.21 $ |
* @internal resource_context is not supported |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('file_get_contents')) { |
function file_get_contents($filename, $incpath = false, $resource_context = null) |
{ |
if (false === $fh = fopen($filename, 'rb', $incpath)) { |
user_error('file_get_contents() failed to open stream: No such file or directory', |
E_USER_WARNING); |
return false; |
} |
clearstatcache(); |
if ($fsize = @filesize($filename)) { |
$data = fread($fh, $fsize); |
} else { |
$data = ''; |
while (!feof($fh)) { |
$data .= fread($fh, 8192); |
} |
} |
fclose($fh); |
return $data; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/file_put_contents.php |
---|
0,0 → 1,116 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: file_put_contents.php,v 1.25 2005/12/05 09:25:15 aidan Exp $ |
if (!defined('FILE_USE_INCLUDE_PATH')) { |
define('FILE_USE_INCLUDE_PATH', 1); |
} |
if (!defined('LOCK_EX')) { |
define('LOCK_EX', 2); |
} |
if (!defined('FILE_APPEND')) { |
define('FILE_APPEND', 8); |
} |
/** |
* Replace file_put_contents() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.file_put_contents |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.25 $ |
* @internal resource_context is not supported |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('file_put_contents')) { |
function file_put_contents($filename, $content, $flags = null, $resource_context = null) |
{ |
// If $content is an array, convert it to a string |
if (is_array($content)) { |
$content = implode('', $content); |
} |
// If we don't have a string, throw an error |
if (!is_scalar($content)) { |
user_error('file_put_contents() The 2nd parameter should be either a string or an array', |
E_USER_WARNING); |
return false; |
} |
// Get the length of data to write |
$length = strlen($content); |
// Check what mode we are using |
$mode = ($flags & FILE_APPEND) ? |
'a' : |
'wb'; |
// Check if we're using the include path |
$use_inc_path = ($flags & FILE_USE_INCLUDE_PATH) ? |
true : |
false; |
// Open the file for writing |
if (($fh = @fopen($filename, $mode, $use_inc_path)) === false) { |
user_error('file_put_contents() failed to open stream: Permission denied', |
E_USER_WARNING); |
return false; |
} |
// Attempt to get an exclusive lock |
$use_lock = ($flags & LOCK_EX) ? true : false ; |
if ($use_lock === true) { |
if (!flock($fh, LOCK_EX)) { |
return false; |
} |
} |
// Write to the file |
$bytes = 0; |
if (($bytes = @fwrite($fh, $content)) === false) { |
$errormsg = sprintf('file_put_contents() Failed to write %d bytes to %s', |
$length, |
$filename); |
user_error($errormsg, E_USER_WARNING); |
return false; |
} |
// Close the handle |
@fclose($fh); |
// Check all the data was written |
if ($bytes != $length) { |
$errormsg = sprintf('file_put_contents() Only %d of %d bytes written, possibly out of free disk space.', |
$bytes, |
$length); |
user_error($errormsg, E_USER_WARNING); |
return false; |
} |
// Return length |
return $bytes; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/floatval.php |
---|
0,0 → 1,39 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: floatval.php,v 1.2 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace floatval() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.floatval |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.2 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) (Type Casting) |
*/ |
if (!function_exists('floatval')) { |
function floatval($var) |
{ |
return (float) $var; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/fprintf.php |
---|
0,0 → 1,54 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: fprintf.php,v 1.13 2005/05/28 17:25:25 aidan Exp $ |
/** |
* Replace fprintf() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.fprintf |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.13 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('fprintf')) { |
function fprintf() { |
$args = func_get_args(); |
if (count($args) < 2) { |
user_error('Wrong parameter count for fprintf()', E_USER_WARNING); |
return; |
} |
$resource_handle = array_shift($args); |
$format = array_shift($args); |
if (!is_resource($resource_handle)) { |
user_error('fprintf() supplied argument is not a valid stream resource', |
E_USER_WARNING); |
return false; |
} |
return fwrite($resource_handle, vsprintf($format, $args)); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/fputcsv.php |
---|
0,0 → 1,64 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: fputcsv.php,v 1.2 2005/11/22 08:28:16 aidan Exp $ |
/** |
* Replace fprintf() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.fprintf |
* @author Twebb <twebb@boisecenter.com> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.2 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('fputcsv')) { |
function fputcsv($handle, $fields, $delimiter = ',', $enclosure = '"') |
{ |
// Sanity Check |
if (!is_resource($handle)) { |
user_error('fputcsv() expects parameter 1 to be resource, ' . |
gettype($handle) . ' given', E_USER_WARNING); |
return false; |
} |
$str = ''; |
foreach ($fields as $cell) { |
$cell = str_replace($enclosure, $enclosure . $enclosure, $cell); |
if (strchr($cell, $delimiter) !== false || |
strchr($cell, $enclosure) !== false || |
strchr($cell, "\n") !== false) { |
$str .= $enclosure . $cell . $enclosure . $delimiter; |
} else { |
$str .= $cell . $delimiter; |
} |
} |
fputs($handle, substr($str, 0, -1) . "\n"); |
return strlen($str); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/get_headers.php |
---|
0,0 → 1,77 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: get_headers.php,v 1.1 2005/05/10 07:50:53 aidan Exp $ |
/** |
* Replace get_headers() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.get_headers |
* @author Aeontech <aeontech@gmail.com> |
* @author Cpurruc <cpurruc@fh-landshut.de> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.1 $ |
* @since PHP 5.0.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('get_headers')) { |
function get_headers($url, $format = 0) |
{ |
// Init |
$urlinfo = parse_url($url); |
$port = isset($urlinfo['port']) ? $urlinfo['port'] : 80; |
// Connect |
$fp = fsockopen($urlinfo['host'], $port, $errno, $errstr, 30); |
if ($fp === false) { |
return false; |
} |
// Send request |
$head = 'HEAD ' . $urlinfo['path'] . |
(isset($urlinfo['query']) ? '?' . $urlinfo['query'] : '') . |
' HTTP/1.0' . "\r\n" . |
'Host: ' . $urlinfo['host'] . "\r\n\r\n"; |
fputs($fp, $head); |
// Read |
while (!feof($fp)) { |
if ($header = trim(fgets($fp, 1024))) { |
list($key) = explode(':', $header); |
if ($format === 1) { |
// First element is the HTTP header type, such as HTTP 200 OK |
// It doesn't have a separate name, so check for it |
if ($key == $header) { |
$headers[] = $header; |
} else { |
$headers[$key] = substr($header, strlen($key)+2); |
} |
} else { |
$headers[] = $header; |
} |
} |
} |
return $headers; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/get_include_path.php |
---|
0,0 → 1,39 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: get_include_path.php,v 1.4 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace get_include_path() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.get_include_path |
* @author Stephan Schmidt <schst@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 4.3.0 |
* @require PHP 4.0.0 |
*/ |
if (!function_exists('get_include_path')) { |
function get_include_path() |
{ |
return ini_get('include_path'); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/html_entity_decode.php |
---|
0,0 → 1,73 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: David Irvine <dave@codexweb.co.za> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: html_entity_decode.php,v 1.8 2005/12/07 21:08:57 aidan Exp $ |
if (!defined('ENT_NOQUOTES')) { |
define('ENT_NOQUOTES', 0); |
} |
if (!defined('ENT_COMPAT')) { |
define('ENT_COMPAT', 2); |
} |
if (!defined('ENT_QUOTES')) { |
define('ENT_QUOTES', 3); |
} |
/** |
* Replace html_entity_decode() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.html_entity_decode |
* @author David Irvine <dave@codexweb.co.za> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.8 $ |
* @since PHP 4.3.0 |
* @internal Setting the charset will not do anything |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('html_entity_decode')) { |
function html_entity_decode($string, $quote_style = ENT_COMPAT, $charset = null) |
{ |
if (!is_int($quote_style)) { |
user_error('html_entity_decode() expects parameter 2 to be long, ' . |
gettype($quote_style) . ' given', E_USER_WARNING); |
return; |
} |
$trans_tbl = get_html_translation_table(HTML_ENTITIES); |
$trans_tbl = array_flip($trans_tbl); |
// Add single quote to translation table; |
$trans_tbl['''] = '\''; |
// Not translating double quotes |
if ($quote_style & ENT_NOQUOTES) { |
// Remove double quote from translation table |
unset($trans_tbl['"']); |
} |
return strtr($string, $trans_tbl); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/htmlspecialchars_decode.php |
---|
0,0 → 1,67 |
<?PHP |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: htmlspecialchars_decode.php,v 1.3 2005/06/18 14:02:09 aidan Exp $ |
/** |
* Replace function htmlspecialchars_decode() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.htmlspecialchars_decode |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.3 $ |
* @since PHP 5.1.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('htmlspecialchars_decode')) { |
function htmlspecialchars_decode($string, $quote_style = null) |
{ |
// Sanity check |
if (!is_scalar($string)) { |
user_error('htmlspecialchars_decode() expects parameter 1 to be string, ' . |
gettype($string) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_int($quote_style) && $quote_style !== null) { |
user_error('htmlspecialchars_decode() expects parameter 2 to be integer, ' . |
gettype($quote_style) . ' given', E_USER_WARNING); |
return; |
} |
// Init |
$from = array('&', '<', '>'); |
$to = array('&', '<', '>'); |
// The function does not behave as documented |
// This matches the actual behaviour of the function |
if ($quote_style & ENT_COMPAT || $quote_style & ENT_QUOTES) { |
$from[] = '"'; |
$to[] = '"'; |
$from[] = '''; |
$to[] = "'"; |
} |
return str_replace($from, $to, $string); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/http_build_query.php |
---|
0,0 → 1,100 |
<?PHP |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: http_build_query.php,v 1.16 2005/05/31 08:54:57 aidan Exp $ |
/** |
* Replace function http_build_query() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.http-build-query |
* @author Stephan Schmidt <schst@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.16 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('http_build_query')) { |
function http_build_query($formdata, $numeric_prefix = null) |
{ |
// If $formdata is an object, convert it to an array |
if (is_object($formdata)) { |
$formdata = get_object_vars($formdata); |
} |
// Check we have an array to work with |
if (!is_array($formdata)) { |
user_error('http_build_query() Parameter 1 expected to be Array or Object. Incorrect value given.', |
E_USER_WARNING); |
return false; |
} |
// If the array is empty, return null |
if (empty($formdata)) { |
return; |
} |
// Argument seperator |
$separator = ini_get('arg_separator.output'); |
// Start building the query |
$tmp = array (); |
foreach ($formdata as $key => $val) { |
if (is_integer($key) && $numeric_prefix != null) { |
$key = $numeric_prefix . $key; |
} |
if (is_scalar($val)) { |
array_push($tmp, urlencode($key).'='.urlencode($val)); |
continue; |
} |
// If the value is an array, recursively parse it |
if (is_array($val)) { |
array_push($tmp, __http_build_query($val, urlencode($key))); |
continue; |
} |
} |
return implode($separator, $tmp); |
} |
// Helper function |
function __http_build_query ($array, $name) |
{ |
$tmp = array (); |
foreach ($array as $key => $value) { |
if (is_array($value)) { |
array_push($tmp, __http_build_query($value, sprintf('%s[%s]', $name, $key))); |
} elseif (is_scalar($value)) { |
array_push($tmp, sprintf('%s[%s]=%s', $name, urlencode($key), urlencode($value))); |
} elseif (is_object($value)) { |
array_push($tmp, __http_build_query(get_object_vars($value), sprintf('%s[%s]', $name, $key))); |
} |
} |
// Argument seperator |
$separator = ini_get('arg_separator.output'); |
return implode($separator, $tmp); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/ibase_timefmt.php |
---|
0,0 → 1,56 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ibase_timefmt.php,v 1.1 2005/05/10 07:51:07 aidan Exp $ |
/** |
* Replace function ibase_timefmt() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.ibase_timefmt |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.1 $ |
* @since PHP 5.0.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('ibase_timefmt')) { |
function ibase_timefmt($format, $columntype = IBASE_TIMESTAMP) |
{ |
switch ($columntype) { |
case IBASE_TIMESTAMP: |
ini_set('ibase.dateformat', $format); |
break; |
case IBASE_DATE: |
ini_set('ibase.dateformat', $format); |
break; |
case IBASE_TIME: |
ini_set('ibase.timeformat', $format); |
break; |
default: |
return false; |
} |
return true; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/idate.php |
---|
0,0 → 1,52 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Arpad Ray <arpad@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: idate.php,v 1.2 2005/12/07 21:08:57 aidan Exp $ |
/** |
* Replace idate() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/idate |
* @author Arpad Ray <arpad@php.net> |
* @version $Revision: 1.2 $ |
* @since PHP 5.0.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('idate')) { |
function idate($format, $timestamp = false) |
{ |
if (strlen($format) !== 1) { |
user_error('idate format is one char', E_USER_WARNING); |
return false; |
} |
if (strpos('BdhHiILmstUwWyYzZ', $format) === false) { |
return 0; |
} |
if ($timestamp === false) { |
$timestamp = time(); |
} |
return intval(date($format, $timestamp)); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/image_type_to_mime_type.php |
---|
0,0 → 1,147 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: image_type_to_mime_type.php,v 1.8 2005/01/26 04:55:13 aidan Exp $ |
if (!defined('IMAGETYPE_GIF')) { |
define('IMAGETYPE_GIF', 1); |
} |
if (!defined('IMAGETYPE_JPEG')) { |
define('IMAGETYPE_JPEG', 2); |
} |
if (!defined('IMAGETYPE_PNG')) { |
define('IMAGETYPE_PNG', 3); |
} |
if (!defined('IMAGETYPE_SWF')) { |
define('IMAGETYPE_SWF', 4); |
} |
if (!defined('IMAGETYPE_PSD')) { |
define('IMAGETYPE_PSD', 5); |
} |
if (!defined('IMAGETYPE_BMP')) { |
define('IMAGETYPE_BMP', 6); |
} |
if (!defined('IMAGETYPE_TIFF_II')) { |
define('IMAGETYPE_TIFF_II', 7); |
} |
if (!defined('IMAGETYPE_TIFF_MM')) { |
define('IMAGETYPE_TIFF_MM', 8); |
} |
if (!defined('IMAGETYPE_JPC')) { |
define('IMAGETYPE_JPC', 9); |
} |
if (!defined('IMAGETYPE_JP2')) { |
define('IMAGETYPE_JP2', 10); |
} |
if (!defined('IMAGETYPE_JPX')) { |
define('IMAGETYPE_JPX', 11); |
} |
if (!defined('IMAGETYPE_JB2')) { |
define('IMAGETYPE_JB2', 12); |
} |
if (!defined('IMAGETYPE_SWC')) { |
define('IMAGETYPE_SWC', 13); |
} |
if (!defined('IMAGETYPE_IFF')) { |
define('IMAGETYPE_IFF', 14); |
} |
if (!defined('IMAGETYPE_WBMP')) { |
define('IMAGETYPE_WBMP', 15); |
} |
if (!defined('IMAGETYPE_XBM')) { |
define('IMAGETYPE_XBM', 16); |
} |
/** |
* Replace image_type_to_mime_type() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.image_type_to_mime_type |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.8 $ |
* @since PHP 4.3.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('image_type_to_mime_type')) { |
function image_type_to_mime_type($imagetype) |
{ |
switch ($imagetype): |
case IMAGETYPE_GIF: |
return 'image/gif'; |
break; |
case IMAGETYPE_JPEG: |
return 'image/jpeg'; |
break; |
case IMAGETYPE_PNG: |
return 'image/png'; |
break; |
case IMAGETYPE_SWF: |
case IMAGETYPE_SWC: |
return 'application/x-shockwave-flash'; |
break; |
case IMAGETYPE_PSD: |
return 'image/psd'; |
break; |
case IMAGETYPE_BMP: |
return 'image/bmp'; |
break; |
case IMAGETYPE_TIFF_MM: |
case IMAGETYPE_TIFF_II: |
return 'image/tiff'; |
break; |
case IMAGETYPE_JP2: |
return 'image/jp2'; |
break; |
case IMAGETYPE_IFF: |
return 'image/iff'; |
break; |
case IMAGETYPE_WBMP: |
return 'image/vnd.wap.wbmp'; |
break; |
case IMAGETYPE_XBM: |
return 'image/xbm'; |
break; |
case IMAGETYPE_JPX: |
case IMAGETYPE_JB2: |
case IMAGETYPE_JPC: |
default: |
return 'application/octet-stream'; |
break; |
endswitch; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/inet_ntop.php |
---|
0,0 → 1,53 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Arpad Ray <arpad@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: inet_ntop.php,v 1.3 2005/12/05 14:49:40 aidan Exp $ |
/** |
* Replace inet_ntop() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/inet_ntop |
* @author Arpad Ray <arpad@php.net> |
* @version $Revision: 1.3 $ |
* @since PHP 5.1.0 |
* @require PHP 4.0.0 (long2ip) |
*/ |
if (!function_exists('inet_ntop')) { |
function inet_ntop($in_addr) |
{ |
switch (strlen($in_addr)) { |
case 4: |
list(,$r) = unpack('N', $in_addr); |
return long2ip($r); |
case 16: |
$r = substr(chunk_split(bin2hex($in_addr), 4, ':'), 0, -1); |
$r = preg_replace( |
array('/(?::?\b0+\b:?){2,}/', '/\b0+([^0])/e'), |
array('::', '(int)"$1"?"$1":"0$1"'), |
$r); |
return $r; |
} |
return false; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/inet_pton.php |
---|
0,0 → 1,60 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Arpad Ray <arpad@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: inet_pton.php,v 1.2 2005/12/05 14:49:40 aidan Exp $ |
/** |
* Replace inet_pton() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/inet_pton |
* @author Arpad Ray <arpad@php.net> |
* @version $Revision: 1.2 $ |
* @since PHP 5.1.0 |
* @require PHP 4.2.0 (array_fill) |
*/ |
if (!function_exists('inet_pton')) { |
function inet_pton($address) |
{ |
$r = ip2long($address); |
if ($r !== false && $r != -1) { |
return pack('N', $r); |
} |
$delim_count = substr_count($address, ':'); |
if ($delim_count < 1 || $delim_count > 7) { |
return false; |
} |
$r = explode(':', $address); |
$rcount = count($r); |
if (($doub = array_search('', $r, 1)) !== false) { |
$length = (!$doub || $doub == $rcount - 1 ? 2 : 1); |
array_splice($r, $doub, $length, array_fill(0, 8 + $length - $rcount, 0)); |
} |
$r = array_map('hexdec', $r); |
array_unshift($r, 'n*'); |
$r = call_user_func_array('pack', $r); |
return $r; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/ini_get_all.php |
---|
0,0 → 1,85 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ini_get_all.php,v 1.3 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace ini_get_all() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.ini_get_all |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.3 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('ini_get_all')) { |
function ini_get_all($extension = null) |
{ |
// Sanity check |
if (!is_scalar($extension)) { |
user_error('ini_get_all() expects parameter 1 to be string, ' . |
gettype($extension) . ' given', E_USER_WARNING); |
return false; |
} |
// Get the location of php.ini |
ob_start(); |
phpinfo(INFO_GENERAL); |
$info = ob_get_contents(); |
ob_clean(); |
$info = explode("\n", $info); |
$line = array_values(preg_grep('#php.ini#', $info)); |
list (, $value) = explode('<td class="v">', $line[0]); |
$inifile = trim(strip_tags($value)); |
// Parse |
if ($extension !== null) { |
$ini_all = parse_ini_file($inifile, true); |
// Lowercase extension keys |
foreach ($ini_all as $key => $value) { |
$ini_arr[strtolower($key)] = $value; |
} |
$ini = $ini_arr[$extension]; |
} else { |
$ini = parse_ini_file($inifile); |
} |
// Order |
$ini_lc = array_map('strtolower', array_keys($ini)); |
array_multisort($ini_lc, SORT_ASC, SORT_STRING, $ini); |
// Format |
$info = array(); |
foreach ($ini as $key => $value) { |
$info[$key] = array( |
'global_value' => $value, |
'local_value' => ini_get($key), |
// No way to know this |
'access' => -1 |
); |
} |
return $info; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/is_a.php |
---|
0,0 → 1,47 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: is_a.php,v 1.16 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace function is_a() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.is_a |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.16 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) (is_subclass_of) |
*/ |
if (!function_exists('is_a')) { |
function is_a($object, $class) |
{ |
if (!is_object($object)) { |
return false; |
} |
if (get_class($object) == strtolower($class)) { |
return true; |
} else { |
return is_subclass_of($object, $class); |
} |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/md5_file.php |
---|
0,0 → 1,82 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: md5_file.php,v 1.3 2005/11/22 08:29:19 aidan Exp $ |
/** |
* Replace md5_file() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/md5_file |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.3 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('md5_file')) { |
function md5_file($filename, $raw_output = false) |
{ |
// Sanity check |
if (!is_scalar($filename)) { |
user_error('md5_file() expects parameter 1 to be string, ' . |
gettype($filename) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_scalar($raw_output)) { |
user_error('md5_file() expects parameter 2 to be bool, ' . |
gettype($raw_output) . ' given', E_USER_WARNING); |
return; |
} |
if (!file_exists($filename)) { |
user_error('md5_file() Unable to open file', E_USER_WARNING); |
return false; |
} |
// Read the file |
if (false === $fh = fopen($filename, 'rb')) { |
user_error('md5_file() failed to open stream: No such file or directory', |
E_USER_WARNING); |
return false; |
} |
clearstatcache(); |
if ($fsize = @filesize($filename)) { |
$data = fread($fh, $fsize); |
} else { |
$data = ''; |
while (!feof($fh)) { |
$data .= fread($fh, 8192); |
} |
} |
fclose($fh); |
// Return |
$data = md5($data); |
if ($raw_output === true) { |
$data = pack('H*', $data); |
} |
return $data; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/mhash.php |
---|
0,0 → 1,115 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: mhash.php,v 1.1 2005/05/10 07:56:44 aidan Exp $ |
if (!defined('MHASH_CRC32')) { |
define('MHASH_CRC32', 0); |
} |
if (!defined('MHASH_MD5')) { |
define('MHASH_MD5', 1); |
} |
if (!defined('MHASH_SHA1')) { |
define('MHASH_SHA1', 2); |
} |
if (!defined('MHASH_HAVAL256')) { |
define('MHASH_HAVAL256', 3); |
} |
if (!defined('MHASH_RIPEMD160')) { |
define('MHASH_RIPEMD160', 5); |
} |
if (!defined('MHASH_TIGER')) { |
define('MHASH_TIGER', 7); |
} |
if (!defined('MHASH_GOST')) { |
define('MHASH_GOST', 8); |
} |
if (!defined('MHASH_CRC32B')) { |
define('MHASH_CRC32B', 9); |
} |
if (!defined('MHASH_HAVAL192')) { |
define('MHASH_HAVAL192', 11); |
} |
if (!defined('MHASH_HAVAL160')) { |
define('MHASH_HAVAL160', 12); |
} |
if (!defined('MHASH_HAVAL128')) { |
define('MHASH_HAVAL128', 13); |
} |
if (!defined('MHASH_TIGER128')) { |
define('MHASH_TIGER128', 14); |
} |
if (!defined('MHASH_TIGER160')) { |
define('MHASH_TIGER160', 15); |
} |
if (!defined('MHASH_MD4')) { |
define('MHASH_MD4', 16); |
} |
if (!defined('MHASH_SHA256')) { |
define('MHASH_SHA256', 17); |
} |
if (!defined('MHASH_ADLER32')) { |
define('MHASH_ADLER32', 18); |
} |
/** |
* Replace mhash() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.mhash |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.1 $ |
* @since PHP 4.1.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('mhash')) { |
function mhash($hashtype, $data, $key = '') |
{ |
switch ($hashtype) { |
case MHASH_MD5: |
$key = str_pad((strlen($key) > 64 ? pack("H*", md5($key)) : $key), 64, chr(0x00)); |
$k_opad = $key ^ (str_pad('', 64, chr(0x5c))); |
$k_ipad = $key ^ (str_pad('', 64, chr(0x36))); |
return pack("H*", md5($k_opad . pack("H*", md5($k_ipad . $data)))); |
default: |
return false; |
break; |
} |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/mime_content_type.php |
---|
0,0 → 1,63 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Ian Eure <ieure@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: mime_content_type.php,v 1.3 2005/12/07 21:08:57 aidan Exp $ |
/** |
* Replace mime_content_type() |
* |
* You will need the `file` command installed and present in your $PATH. If |
* `file` is not available, the type 'application/octet-stream' is returned |
* for all files. |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.mime_content_type |
* @version $Revision: 1.3 $ |
* @author Ian Eure <ieure@php.net> |
* @since PHP 4.3.0 |
* @require PHP 4.0.3 (escapeshellarg) |
*/ |
if (!function_exists('mime_content_type')) { |
function mime_content_type($filename) |
{ |
// Sanity check |
if (!file_exists($filename)) { |
return false; |
} |
$filename = escapeshellarg($filename); |
$out = `file -iL $filename 2>/dev/null`; |
if (empty($out)) { |
return 'application/octet-stream'; |
} |
// Strip off filename |
$t = substr($out, strpos($out, ':') + 2); |
if (strpos($t, ';') !== false) { |
// Strip MIME parameters |
$t = substr($t, 0, strpos($t, ';')); |
} |
// Strip any remaining whitespace |
return trim($t); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/ob_clean.php |
---|
0,0 → 1,46 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ob_clean.php,v 1.6 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace ob_clean() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.ob_clean |
* @author Aidan Lister <aidan@php.net> |
* @author Thiemo Mättig (http://maettig.com/) |
* @version $Revision: 1.6 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('ob_clean')) { |
function ob_clean() |
{ |
if (@ob_end_clean()) { |
return ob_start(); |
} |
user_error("ob_clean() failed to delete buffer. No buffer to delete.", E_USER_NOTICE); |
return false; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/ob_flush.php |
---|
0,0 → 1,46 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ob_flush.php,v 1.6 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace ob_flush() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.ob_flush |
* @author Aidan Lister <aidan@php.net> |
* @author Thiemo Mättig (http://maettig.com/) |
* @version $Revision: 1.6 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('ob_flush')) { |
function ob_flush() |
{ |
if (@ob_end_flush()) { |
return ob_start(); |
} |
user_error("ob_flush() Failed to flush buffer. No buffer to flush.", E_USER_NOTICE); |
return false; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/ob_get_clean.php |
---|
0,0 → 1,46 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ob_get_clean.php,v 1.6 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace ob_get_clean() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.ob_get_clean |
* @author Aidan Lister <aidan@php.net> |
* @author Thiemo Mättig (http://maettig.com/) |
* @version $Revision: 1.6 $ |
* @since PHP 4.3.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('ob_get_clean')) { |
function ob_get_clean() |
{ |
$contents = ob_get_contents(); |
if ($contents !== false) { |
ob_end_clean(); |
} |
return $contents; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/ob_get_flush.php |
---|
0,0 → 1,46 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ob_get_flush.php,v 1.6 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace ob_get_flush() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.ob_get_flush |
* @author Aidan Lister <aidan@php.net> |
* @author Thiemo Mättig (http://maettig.com/) |
* @version $Revision: 1.6 $ |
* @since PHP 4.3.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('ob_get_flush')) { |
function ob_get_flush() |
{ |
$contents = ob_get_contents(); |
if ($contents !== false) { |
ob_end_flush(); |
} |
return $contents; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/pg_affected_rows.php |
---|
0,0 → 1,40 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Ian Eure <ieure@php.net> | |
// | Mocha (http://us4.php.net/pg_escape_bytea) | |
// +----------------------------------------------------------------------+ |
// |
// $Id: pg_affected_rows.php,v 1.1 2005/05/10 07:56:51 aidan Exp $ |
/** |
* Replace pg_affected_rows() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.pg_affectd_rows |
* @author Ian Eure <ieure@php.net> |
* @version $Revision@ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 |
*/ |
if (!function_exists('pg_affected_rows')) { |
function pg_affected_rows($resource) |
{ |
return pg_cmdtuples($resource); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/pg_escape_bytea.php |
---|
0,0 → 1,43 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Ian Eure <ieure@php.net> | |
// | Mocha (http://us4.php.net/pg_escape_bytea) | |
// +----------------------------------------------------------------------+ |
// |
// $Id: pg_escape_bytea.php,v 1.1 2005/05/10 07:56:51 aidan Exp $ |
/** |
* Replace pg_escape_bytea() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.pg_escape_bytea |
* @author Ian Eure <ieure@php.net> |
* @version $Revision@ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 |
*/ |
if (!function_exists('pg_escape_bytea')) { |
function pg_escape_bytea($data) |
{ |
return str_replace( |
array(chr(92), chr(0), chr(39)), |
array('\\\134', '\\\000', '\\\047'), |
$data); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/pg_unescape_bytea.php |
---|
0,0 → 1,43 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Ian Eure <ieure@php.net> | |
// | Tobias <php@tobias.olsson.be> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: pg_unescape_bytea.php,v 1.2 2005/12/07 21:08:57 aidan Exp $ |
/** |
* Replace pg_unescape_bytea() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.pg_unescape_bytea |
* @author Ian Eure <ieure@php.net> |
* @version $Revision@ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 |
*/ |
if (!function_exists('pg_unescape_bytea')) { |
function pg_unescape_bytea(&$data) |
{ |
return str_replace( |
array('$', '"'), |
array('\\$', '\\"'), |
$data); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/php_strip_whitespace.php |
---|
0,0 → 1,86 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: php_strip_whitespace.php,v 1.10 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace php_strip_whitespace() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.php_strip_whitespace |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.10 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) + Tokenizer extension |
*/ |
if (!function_exists('php_strip_whitespace')) { |
function php_strip_whitespace($file) |
{ |
// Sanity check |
if (!is_scalar($file)) { |
user_error('php_strip_whitespace() expects parameter 1 to be string, ' . |
gettype($file) . ' given', E_USER_WARNING); |
return; |
} |
// Load file / tokens |
$source = implode('', file($file)); |
$tokens = token_get_all($source); |
// Init |
$source = ''; |
$was_ws = false; |
// Process |
foreach ($tokens as $token) { |
if (is_string($token)) { |
// Single character tokens |
$source .= $token; |
} else { |
list($id, $text) = $token; |
switch ($id) { |
// Skip all comments |
case T_COMMENT: |
case T_ML_COMMENT: |
case T_DOC_COMMENT: |
break; |
// Remove whitespace |
case T_WHITESPACE: |
// We don't want more than one whitespace in a row replaced |
if ($was_ws !== true) { |
$source .= ' '; |
} |
$was_ws = true; |
break; |
default: |
$was_ws = false; |
$source .= $text; |
break; |
} |
} |
} |
return $source; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/restore_include_path.php |
---|
0,0 → 1,38 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: restore_include_path.php,v 1.4 2005/12/07 21:08:57 aidan Exp $ |
/** |
* Replace restore_include_path() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.restore_include_path |
* @author Stephan Schmidt <schst@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 4.3.0 |
*/ |
if (!function_exists('restore_include_path')) { |
function restore_include_path() |
{ |
return ini_restore('include_path'); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/scandir.php |
---|
0,0 → 1,69 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: scandir.php,v 1.18 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace scandir() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.scandir |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.18 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('scandir')) { |
function scandir($directory, $sorting_order = 0) |
{ |
if (!is_string($directory)) { |
user_error('scandir() expects parameter 1 to be string, ' . |
gettype($directory) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_int($sorting_order) && !is_bool($sorting_order)) { |
user_error('scandir() expects parameter 2 to be long, ' . |
gettype($sorting_order) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_dir($directory) || (false === $fh = @opendir($directory))) { |
user_error('scandir() failed to open dir: Invalid argument', E_USER_WARNING); |
return false; |
} |
$files = array (); |
while (false !== ($filename = readdir($fh))) { |
$files[] = $filename; |
} |
closedir($fh); |
if ($sorting_order == 1) { |
rsort($files); |
} else { |
sort($files); |
} |
return $files; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/set_include_path.php |
---|
0,0 → 1,38 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: set_include_path.php,v 1.4 2005/12/07 21:08:57 aidan Exp $ |
/** |
* Replace set_include_path() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.set_include_path |
* @author Stephan Schmidt <schst@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 4.3.0 |
*/ |
if (!function_exists('set_include_path')) { |
function set_include_path($new_include_path) |
{ |
return ini_set('include_path', $new_include_path); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/str_ireplace.php |
---|
0,0 → 1,113 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: str_ireplace.php,v 1.18 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace str_ireplace() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.str_ireplace |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.18 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
* @note count not by returned by reference, to enable |
* change '$count = null' to '&$count' |
*/ |
if (!function_exists('str_ireplace')) { |
function str_ireplace($search, $replace, $subject, $count = null) |
{ |
// Sanity check |
if (is_string($search) && is_array($replace)) { |
user_error('Array to string conversion', E_USER_NOTICE); |
$replace = (string) $replace; |
} |
// If search isn't an array, make it one |
if (!is_array($search)) { |
$search = array ($search); |
} |
$search = array_values($search); |
// If replace isn't an array, make it one, and pad it to the length of search |
if (!is_array($replace)) { |
$replace_string = $replace; |
$replace = array (); |
for ($i = 0, $c = count($search); $i < $c; $i++) { |
$replace[$i] = $replace_string; |
} |
} |
$replace = array_values($replace); |
// Check the replace array is padded to the correct length |
$length_replace = count($replace); |
$length_search = count($search); |
if ($length_replace < $length_search) { |
for ($i = $length_replace; $i < $length_search; $i++) { |
$replace[$i] = ''; |
} |
} |
// If subject is not an array, make it one |
$was_array = false; |
if (!is_array($subject)) { |
$was_array = true; |
$subject = array ($subject); |
} |
// Loop through each subject |
$count = 0; |
foreach ($subject as $subject_key => $subject_value) { |
// Loop through each search |
foreach ($search as $search_key => $search_value) { |
// Split the array into segments, in between each part is our search |
$segments = explode(strtolower($search_value), strtolower($subject_value)); |
// The number of replacements done is the number of segments minus the first |
$count += count($segments) - 1; |
$pos = 0; |
// Loop through each segment |
foreach ($segments as $segment_key => $segment_value) { |
// Replace the lowercase segments with the upper case versions |
$segments[$segment_key] = substr($subject_value, $pos, strlen($segment_value)); |
// Increase the position relative to the initial string |
$pos += strlen($segment_value) + strlen($search_value); |
} |
// Put our original string back together |
$subject_value = implode($replace[$search_key], $segments); |
} |
$result[$subject_key] = $subject_value; |
} |
// Check if subject was initially a string and return it as a string |
if ($was_array === true) { |
return $result[0]; |
} |
// Otherwise, just return the array |
return $result; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/str_rot13.php |
---|
0,0 → 1,43 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Alan Morey <alan@caint.com> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: str_rot13.php,v 1.4 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace str_rot13() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.str_rot13 |
* @author Alan Morey <alan@caint.com> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 4.0.0 |
*/ |
if (!function_exists('str_rot13')) { |
function str_rot13($str) |
{ |
$from = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; |
$to = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'; |
return strtr($str, $from, $to); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/str_shuffle.php |
---|
0,0 → 1,52 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: str_shuffle.php,v 1.6 2005/08/14 03:24:16 aidan Exp $ |
/** |
* Replace str_shuffle() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.str_shuffle |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.6 $ |
* @since PHP 4.3.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('str_shuffle')) { |
function str_shuffle($str) |
{ |
// Init |
$str = (string) $str; |
// Seed |
list($usec, $sec) = explode(' ', microtime()); |
$seed = (float) $sec + ((float) $usec * 100000); |
mt_srand($seed); |
// Shuffle |
for ($new = '', $len = strlen($str); $len > 0; $str{$p} = $str{$len}) { |
$new .= $str{$p = mt_rand(0, --$len)}; |
} |
return $new; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/str_split.php |
---|
0,0 → 1,71 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: str_split.php,v 1.15 2005/06/18 12:15:32 aidan Exp $ |
/** |
* Replace str_split() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.str_split |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.15 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('str_split')) { |
function str_split($string, $split_length = 1) |
{ |
if (!is_scalar($split_length)) { |
user_error('str_split() expects parameter 2 to be long, ' . |
gettype($split_length) . ' given', E_USER_WARNING); |
return false; |
} |
$split_length = (int) $split_length; |
if ($split_length < 1) { |
user_error('str_split() The length of each segment must be greater than zero', E_USER_WARNING); |
return false; |
} |
// Select split method |
if ($split_length < 65536) { |
// Faster, but only works for less than 2^16 |
preg_match_all('/.{1,' . $split_length . '}/s', $string, $matches); |
return $matches[0]; |
} else { |
// Required due to preg limitations |
$arr = array(); |
$idx = 0; |
$pos = 0; |
$len = strlen($string); |
while ($len > 0) { |
$blk = ($len < $split_length) ? $len : $split_length; |
$arr[$idx++] = substr($string, $pos, $blk); |
$pos += $blk; |
$len -= $blk; |
} |
return $arr; |
} |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/str_word_count.php |
---|
0,0 → 1,68 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: str_word_count.php,v 1.9 2005/02/28 11:45:28 aidan Exp $ |
/** |
* Replace str_word_count() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.str_word_count |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.9 $ |
* @since PHP 4.3.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('str_word_count')) { |
function str_word_count($string, $format = null) |
{ |
if ($format !== 1 && $format !== 2 && $format !== null) { |
user_error('str_word_count() The specified format parameter, "' . $format . '" is invalid', |
E_USER_WARNING); |
return false; |
} |
$word_string = preg_replace('/[0-9]+/', '', $string); |
$word_array = preg_split('/[^A-Za-z0-9_\']+/', $word_string, -1, PREG_SPLIT_NO_EMPTY); |
switch ($format) { |
case null: |
$result = count($word_array); |
break; |
case 1: |
$result = $word_array; |
break; |
case 2: |
$lastmatch = 0; |
$word_assoc = array(); |
foreach ($word_array as $word) { |
$word_assoc[$lastmatch = strpos($string, $word, $lastmatch)] = $word; |
$lastmatch += strlen($word); |
} |
$result = $word_assoc; |
break; |
} |
return $result; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/stripos.php |
---|
0,0 → 1,73 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: stripos.php,v 1.13 2005/05/30 20:33:03 aidan Exp $ |
/** |
* Replace stripos() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.stripos |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.13 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('stripos')) { |
function stripos($haystack, $needle, $offset = null) |
{ |
if (!is_scalar($haystack)) { |
user_error('stripos() expects parameter 1 to be string, ' . |
gettype($haystack) . ' given', E_USER_WARNING); |
return false; |
} |
if (!is_scalar($needle)) { |
user_error('stripos() needle is not a string or an integer.', E_USER_WARNING); |
return false; |
} |
if (!is_int($offset) && !is_bool($offset) && !is_null($offset)) { |
user_error('stripos() expects parameter 3 to be long, ' . |
gettype($offset) . ' given', E_USER_WARNING); |
return false; |
} |
// Manipulate the string if there is an offset |
$fix = 0; |
if (!is_null($offset)) { |
if ($offset > 0) { |
$haystack = substr($haystack, $offset, strlen($haystack) - $offset); |
$fix = $offset; |
} |
} |
$segments = explode(strtolower($needle), strtolower($haystack), 2); |
// Check there was a match |
if (count($segments) === 1) { |
return false; |
} |
$position = strlen($segments[0]) + $fix; |
return $position; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/strpbrk.php |
---|
0,0 → 1,63 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stephan Schmidt <schst@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: strpbrk.php,v 1.4 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace strpbrk() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.strpbrk |
* @author Stephan Schmidt <schst@php.net> |
* @version $Revision: 1.4 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('strpbrk')) { |
function strpbrk($haystack, $char_list) |
{ |
if (!is_scalar($haystack)) { |
user_error('strpbrk() expects parameter 1 to be string, ' . |
gettype($haystack) . ' given', E_USER_WARNING); |
return false; |
} |
if (!is_scalar($char_list)) { |
user_error('strpbrk() expects parameter 2 to be scalar, ' . |
gettype($needle) . ' given', E_USER_WARNING); |
return false; |
} |
$haystack = (string) $haystack; |
$char_list = (string) $char_list; |
$len = strlen($haystack); |
for ($i = 0; $i < $len; $i++) { |
$char = substr($haystack, $i, 1); |
if (strpos($char_list, $char) === false) { |
continue; |
} |
return substr($haystack, $i); |
} |
return false; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/strripos.php |
---|
0,0 → 1,79 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// | Stephan Schmidt <schst@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: strripos.php,v 1.24 2005/08/10 10:19:59 aidan Exp $ |
/** |
* Replace strripos() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.strripos |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.24 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('strripos')) { |
function strripos($haystack, $needle, $offset = null) |
{ |
// Sanity check |
if (!is_scalar($haystack)) { |
user_error('strripos() expects parameter 1 to be scalar, ' . |
gettype($haystack) . ' given', E_USER_WARNING); |
return false; |
} |
if (!is_scalar($needle)) { |
user_error('strripos() expects parameter 2 to be scalar, ' . |
gettype($needle) . ' given', E_USER_WARNING); |
return false; |
} |
if (!is_int($offset) && !is_bool($offset) && !is_null($offset)) { |
user_error('strripos() expects parameter 3 to be long, ' . |
gettype($offset) . ' given', E_USER_WARNING); |
return false; |
} |
// Initialise variables |
$needle = strtolower($needle); |
$haystack = strtolower($haystack); |
$needle_fc = $needle{0}; |
$needle_len = strlen($needle); |
$haystack_len = strlen($haystack); |
$offset = (int) $offset; |
$leftlimit = ($offset >= 0) ? $offset : 0; |
$p = ($offset >= 0) ? |
$haystack_len : |
$haystack_len + $offset + 1; |
// Reverse iterate haystack |
while (--$p >= $leftlimit) { |
if ($needle_fc === $haystack{$p} && |
substr($haystack, $p, $needle_len) === $needle) { |
return $p; |
} |
} |
return false; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/substr_compare.php |
---|
0,0 → 1,74 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Tom Buskens <ortega@php.net> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: substr_compare.php,v 1.5 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace substr_compare() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.substr_compare |
* @author Tom Buskens <ortega@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.5 $ |
* @since PHP 5 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('substr_compare')) { |
function substr_compare($main_str, $str, $offset, $length = null, $case_insensitive = false) |
{ |
if (!is_string($main_str)) { |
user_error('substr_compare() expects parameter 1 to be string, ' . |
gettype($main_str) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_string($str)) { |
user_error('substr_compare() expects parameter 2 to be string, ' . |
gettype($str) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_int($offset)) { |
user_error('substr_compare() expects parameter 3 to be long, ' . |
gettype($offset) . ' given', E_USER_WARNING); |
return; |
} |
if (is_null($length)) { |
$length = strlen($main_str) - $offset; |
} elseif ($offset >= strlen($main_str)) { |
user_error('substr_compare() The start position cannot exceed initial string length', |
E_USER_WARNING); |
return false; |
} |
$main_str = substr($main_str, $offset, $length); |
$str = substr($str, 0, strlen($main_str)); |
if ($case_insensitive === false) { |
return strcmp($main_str, $str); |
} else { |
return strcasecmp($main_str, $str); |
} |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/time_sleep_until.php |
---|
0,0 → 1,48 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Arpad Ray <arpad@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: time_sleep_until.php,v 1.2 2005/12/07 21:08:57 aidan Exp $ |
/** |
* Replace time_sleep_until() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/time_sleep_until |
* @author Arpad Ray <arpad@php.net> |
* @version $Revision: 1.2 $ |
* @since PHP 5.1.0 |
* @require PHP 4.0.1 (trigger_error) |
*/ |
if (!function_exists('time_sleep_until')) { |
function time_sleep_until($timestamp) |
{ |
list($usec, $sec) = explode(' ', microtime()); |
$now = $sec + $usec; |
if ($timestamp <= $now) { |
user_error('Specified timestamp is in the past', E_USER_WARNING); |
return false; |
} |
$diff = $timestamp - $now; |
usleep($diff * 1000000); |
return true; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/var_export.php |
---|
0,0 → 1,136 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: var_export.php,v 1.15 2005/12/05 14:24:27 aidan Exp $ |
/** |
* Replace var_export() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.var_export |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.15 $ |
* @since PHP 4.2.0 |
* @require PHP 4.0.0 (user_error) |
*/ |
if (!function_exists('var_export')) { |
function var_export($var, $return = false, $level = 0) |
{ |
// Init |
$indent = ' '; |
$doublearrow = ' => '; |
$lineend = ",\n"; |
$stringdelim = '\''; |
$newline = "\n"; |
$find = array(null, '\\', '\''); |
$replace = array('NULL', '\\\\', '\\\''); |
$out = ''; |
// Indent |
$level++; |
for ($i = 1, $previndent = ''; $i < $level; $i++) { |
$previndent .= $indent; |
} |
// Handle each type |
switch (gettype($var)) { |
// Array |
case 'array': |
$out = 'array (' . $newline; |
foreach ($var as $key => $value) { |
// Key |
if (is_string($key)) { |
// Make key safe |
for ($i = 0, $c = count($find); $i < $c; $i++) { |
$var = str_replace($find[$i], $replace[$i], $var); |
} |
$key = $stringdelim . $key . $stringdelim; |
} |
// Value |
if (is_array($value)) { |
$export = var_export($value, true, $level); |
$value = $newline . $previndent . $indent . $export; |
} else { |
$value = var_export($value, true, $level); |
} |
// Piece line together |
$out .= $previndent . $indent . $key . $doublearrow . $value . $lineend; |
} |
// End string |
$out .= $previndent . ')'; |
break; |
// String |
case 'string': |
// Make the string safe |
for ($i = 0, $c = count($find); $i < $c; $i++) { |
$var = str_replace($find[$i], $replace[$i], $var); |
} |
$out = $stringdelim . $var . $stringdelim; |
break; |
// Number |
case 'integer': |
case 'double': |
$out = (string) $var; |
break; |
// Boolean |
case 'boolean': |
$out = $var ? 'true' : 'false'; |
break; |
// NULLs |
case 'NULL': |
case 'resource': |
$out = 'NULL'; |
break; |
// Objects |
case 'object': |
// Start the object export |
$out = $newline . $previndent . 'class ' . get_class($var) . ' {' . $newline; |
// Export the object vars |
foreach (get_object_vars($var) as $key => $val) { |
$out .= $previndent . ' var $' . $key . ' = '; |
if (is_array($val)) { |
$export = var_export($val, true, $level); |
$out .= $newline . $previndent . $indent . $export . ';' . $newline; |
} else { |
$out .= var_export($val, true, $level) . ';' . $newline; |
} |
} |
$out .= $previndent . '}'; |
break; |
} |
// Method of output |
if ($return === true) { |
return $out; |
} else { |
echo $out; |
} |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/version_compare.php |
---|
0,0 → 1,182 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Philippe Jausions <Philippe.Jausions@11abacus.com> | |
// | Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: version_compare.php,v 1.13 2005/08/01 12:21:14 aidan Exp $ |
/** |
* Replace version_compare() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.version_compare |
* @author Philippe Jausions <Philippe.Jausions@11abacus.com> |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.13 $ |
* @since PHP 4.1.0 |
* @require PHP 4.0.5 (user_error) |
*/ |
if (!function_exists('version_compare')) { |
function version_compare($version1, $version2, $operator = '<') |
{ |
// Check input |
if (!is_scalar($version1)) { |
user_error('version_compare() expects parameter 1 to be string, ' . |
gettype($version1) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_scalar($version2)) { |
user_error('version_compare() expects parameter 2 to be string, ' . |
gettype($version2) . ' given', E_USER_WARNING); |
return; |
} |
if (!is_scalar($operator)) { |
user_error('version_compare() expects parameter 3 to be string, ' . |
gettype($operator) . ' given', E_USER_WARNING); |
return; |
} |
// Standardise versions |
$v1 = explode('.', |
str_replace('..', '.', |
preg_replace('/([^0-9\.]+)/', '.$1.', |
str_replace(array('-', '_', '+'), '.', |
trim($version1))))); |
$v2 = explode('.', |
str_replace('..', '.', |
preg_replace('/([^0-9\.]+)/', '.$1.', |
str_replace(array('-', '_', '+'), '.', |
trim($version2))))); |
// Replace empty entries at the start of the array |
while (empty($v1[0]) && array_shift($v1)) {} |
while (empty($v2[0]) && array_shift($v2)) {} |
// Release state order |
// '#' stands for any number |
$versions = array( |
'dev' => 0, |
'alpha' => 1, |
'a' => 1, |
'beta' => 2, |
'b' => 2, |
'RC' => 3, |
'#' => 4, |
'p' => 5, |
'pl' => 5); |
// Loop through each segment in the version string |
$compare = 0; |
for ($i = 0, $x = min(count($v1), count($v2)); $i < $x; $i++) { |
if ($v1[$i] == $v2[$i]) { |
continue; |
} |
$i1 = $v1[$i]; |
$i2 = $v2[$i]; |
if (is_numeric($i1) && is_numeric($i2)) { |
$compare = ($i1 < $i2) ? -1 : 1; |
break; |
} |
// We use the position of '#' in the versions list |
// for numbers... (so take care of # in original string) |
if ($i1 == '#') { |
$i1 = ''; |
} elseif (is_numeric($i1)) { |
$i1 = '#'; |
} |
if ($i2 == '#') { |
$i2 = ''; |
} elseif (is_numeric($i2)) { |
$i2 = '#'; |
} |
if (isset($versions[$i1]) && isset($versions[$i2])) { |
$compare = ($versions[$i1] < $versions[$i2]) ? -1 : 1; |
} elseif (isset($versions[$i1])) { |
$compare = 1; |
} elseif (isset($versions[$i2])) { |
$compare = -1; |
} else { |
$compare = 0; |
} |
break; |
} |
// If previous loop didn't find anything, compare the "extra" segments |
if ($compare == 0) { |
if (count($v2) > count($v1)) { |
if (isset($versions[$v2[$i]])) { |
$compare = ($versions[$v2[$i]] < 4) ? 1 : -1; |
} else { |
$compare = -1; |
} |
} elseif (count($v2) < count($v1)) { |
if (isset($versions[$v1[$i]])) { |
$compare = ($versions[$v1[$i]] < 4) ? -1 : 1; |
} else { |
$compare = 1; |
} |
} |
} |
// Compare the versions |
if (func_num_args() > 2) { |
switch ($operator) { |
case '>': |
case 'gt': |
return (bool) ($compare > 0); |
break; |
case '>=': |
case 'ge': |
return (bool) ($compare >= 0); |
break; |
case '<=': |
case 'le': |
return (bool) ($compare <= 0); |
break; |
case '==': |
case '=': |
case 'eq': |
return (bool) ($compare == 0); |
break; |
case '<>': |
case '!=': |
case 'ne': |
return (bool) ($compare != 0); |
break; |
case '': |
case '<': |
case 'lt': |
return (bool) ($compare < 0); |
break; |
default: |
return; |
} |
} |
return $compare; |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/vprintf.php |
---|
0,0 → 1,45 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: vprintf.php,v 1.14 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace vprintf() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.vprintf |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.14 $ |
* @since PHP 4.1.0 |
* @require PHP 4.0.4 (call_user_func_array) |
*/ |
if (!function_exists('vprintf')) { |
function vprintf ($format, $args) |
{ |
if (count($args) < 2) { |
user_error('vprintf() Too few arguments', E_USER_WARNING); |
return; |
} |
array_unshift($args, $format); |
return call_user_func_array('printf', $args); |
} |
} |
?> |
/WebSVN/include/PHP/Compat/Function/vsprintf.php |
---|
0,0 → 1,45 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: vsprintf.php,v 1.10 2005/01/26 04:55:13 aidan Exp $ |
/** |
* Replace vsprintf() |
* |
* @category PHP |
* @package PHP_Compat |
* @link http://php.net/function.vsprintf |
* @author Aidan Lister <aidan@php.net> |
* @version $Revision: 1.10 $ |
* @since PHP 4.1.0 |
* @require PHP 4.0.4 (call_user_func_array) |
*/ |
if (!function_exists('vsprintf')) { |
function vsprintf ($format, $args) |
{ |
if (count($args) < 2) { |
user_error('vsprintf() Too few arguments', E_USER_WARNING); |
return; |
} |
array_unshift($args, $format); |
return call_user_func_array('sprintf', $args); |
} |
} |
?> |
/WebSVN/include/PHP/Compat.php |
---|
0,0 → 1,133 |
<?php |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Aidan Lister <aidan@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Compat.php,v 1.19 2005/05/10 12:05:36 aidan Exp $ |
/** |
* Provides missing functionality in the form of constants and functions |
* for older versions of PHP |
* |
* Optionally, you may simply include the file. |
* e.g. require_once 'PHP/Compat/Function/scandir.php'; |
* |
* @category PHP |
* @package PHP_Compat |
* @version $Revision: 1.19 $ |
* @author Aidan Lister <aidan@php.net> |
* @static |
*/ |
class PHP_Compat |
{ |
/** |
* Load a function, or array of functions |
* |
* @param string|array $function The function or functions to load |
* @return bool|array TRUE if loaded, FALSE if not |
*/ |
function loadFunction($function) |
{ |
// Recursiveness |
if (is_array($function)) { |
$res = array(); |
foreach ($function as $singlefunc) { |
$res[$singlefunc] = PHP_Compat::loadFunction($singlefunc); |
} |
return $res; |
} |
// Load function |
if (!function_exists($function)) { |
$file = sprintf('PHP/Compat/Function/%s.php', $function); |
if ((@include_once $file) !== false) { |
return true; |
} |
} |
return false; |
} |
/** |
* Load a constant, or array of constants |
* |
* @param string|array $constant The constant or constants to load |
* @return bool|array TRUE if loaded, FALSE if not |
*/ |
function loadConstant($constant) |
{ |
// Recursiveness |
if (is_array($constant)) { |
$res = array(); |
foreach ($constant as $singleconst) { |
$res[$singleconst] = PHP_Compat::loadConstant($singleconst); |
} |
return $res; |
} |
// Load constant |
$file = sprintf('PHP/Compat/Constant/%s.php', $constant); |
if ((@include_once $file) !== false) { |
return true; |
} |
return false; |
} |
/** |
* Load components for a PHP version |
* |
* @param string $version PHP Version to load |
* @return array An associative array of component names loaded |
*/ |
function loadVersion($version = null) |
{ |
// Include list of components |
require 'PHP/Compat/Components.php'; |
// Include version_compare to work with older versions |
PHP_Compat::loadFunction('version_compare'); |
// Init |
$phpversion = phpversion(); |
$methods = array( |
'function' => 'loadFunction', |
'constant' => 'loadConstant'); |
$res = array(); |
// Iterate each component |
foreach ($components as $type => $slice) { |
foreach ($slice as $component => $compversion) { |
if (($version === null && |
1 === version_compare($compversion, $phpversion)) || // C > PHP |
(0 === version_compare($compversion, $version) || // C = S |
1 === version_compare($compversion, $phpversion))) { // C > PHP |
$res[$type][$component] = |
call_user_func(array('PHP_Compat', $methods[$type]), $component); |
} |
} |
} |
return $res; |
} |
} |
?> |
/WebSVN/include/header |
---|
1,5 → 1,7 |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
/WebSVN/include/accessfile.inc |
---|
0,0 → 1,102 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// accessfile.inc |
// |
// Read a .ini style file |
class IniFile |
{ |
var $sections; |
// {{{ __construct |
function IniFile() |
{ |
$this->sections = array(); |
} |
// }}} |
// {{{ readIniFile |
function readIniFile ($name) |
{ |
$contents = file($name); |
$cursection = ''; |
$first = true; |
foreach ($contents as $str) |
{ |
$str = trim($str); |
if (empty($str)) continue; |
if ($str{0} == '#' or $str{0} == "'") |
continue; |
if ($str{0} == '[') |
{ |
$cursection = strtolower(substr($str, 1, strlen($str) - 2)); |
if (!($str{strlen($str) - 2} == '/' or $str == '[groups]')) $cursection .= '/'; |
$first = true; |
} |
elseif (!empty($cursection)) |
{ |
if ($first === true) $this->sections[$cursection] = array(); |
list ($key, $val) = split('=', $str); |
$this->sections[$cursection][strtolower(trim($key))] = strtolower(trim($val)); |
$first = false; |
} |
} |
} |
// }}} |
// {{{ getSections |
function &getSections() |
{ |
return $this->sections; |
} |
// }}} |
// {{{ getValues |
function getValues($section) |
{ |
return @$this->sections[strtolower($section)]; |
} |
// }}} |
// {{{ getValue |
function getValue($section, $key) |
{ |
return @$this->sections[strtolower($section)][strtolower($key)]; |
} |
// }}} |
} |
?> |
/WebSVN/dl.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
20,307 → 22,101 |
// |
// dl.php |
// |
// Allow for file and directory downloads, creating zip/tar/gz files if needed. |
// Create gz/tar files of the requested item |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/utils.php'; |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
require_once("include/utils.inc"); |
if (!defined('USE_AUTOLOADER')) { |
@include_once 'Archive/Tar.php'; |
} |
// Make sure that this operation is allowed |
function setDirectoryTimestamp($dir, $timestamp) { |
global $config; |
// Changing the timestamp of a directory in Windows is only supported in PHP 5.3.0+ |
touch($dir, $timestamp); |
if (is_dir($dir)) { |
// Set timestamp for all contents, recursing into subdirectories |
$handle = opendir($dir); |
if ($handle) { |
while (($file = readdir($handle)) !== false) { |
if ($file == '.' || $file == '..') { |
continue; |
} |
$f = $dir.DIRECTORY_SEPARATOR.$file; |
if (is_dir($f)) { |
setDirectoryTimestamp($f, $timestamp); |
} |
} |
closedir($handle); |
} |
} |
} |
// Make sure that downloading the specified file/directory is permitted |
if (!$rep) |
{ |
http_response_code(404); |
if (!$rep->isDownloadAllowed($path)) |
exit; |
} |
if (!$rep->isDownloadAllowed($path)) { |
http_response_code(403); |
error_log('Unable to download resource at path: '.$path); |
print 'Unable to download resource at path: '.xml_entities($path); |
exit; |
} |
$svnrep = new SVNRepository($rep); |
// Fetch information about a revision (if unspecified, the latest) for this path |
if (empty($rev)) |
{ |
$history = $svnrep->getLog($path, 'HEAD', '', true, 1, $peg); |
} |
else if ($rev == $peg) |
{ |
$history = $svnrep->getLog($path, '', 1, true, 1, $peg); |
} |
if ($path{0} != "/") |
$ppath = "/".$path; |
else |
{ |
$history = $svnrep->getLog($path, $rev, $rev - 1, true, 1, $peg); |
} |
$ppath = $path; |
$logEntry = ($history && !empty($history->entries)) ? $history->entries[0] : null; |
// If there's no revision info, go to the lastest revision for this path |
$history = $svnrep->getLog($path, "", "", true); |
$youngest = $history->entries[0]->rev; |
if (!$logEntry) |
{ |
http_response_code(404); |
error_log('Unable to download resource at path: '.$path); |
print 'Unable to download resource at path: '.xml_entities($path); |
exit(0); |
} |
if (empty($rev)) |
{ |
$rev = $logEntry->rev; |
} |
$rev = $youngest; |
// Create a temporary filename to be used for a directory to archive a download. |
// Here we have an unavoidable but highly unlikely to occur race condition. |
$tempDir = tempnamWithCheck($config->getTempDir(), 'websvn'); |
// Create a temporary directory. Here we have an unavoidable but highly |
// unlikely to occure race condition |
@unlink($tempDir); |
mkdir($tempDir); |
// Create the name of the directory being archived |
$archiveName = $path; |
$isDir = (substr($archiveName, -1) == '/'); |
if ($isDir) |
if (count(glob("/tmp/wsvn-*"))<=40) // Omezeni na pocet soucasne stahovanych souboru |
{ |
$archiveName = substr($archiveName, 0, -1); |
} |
$archiveName = basename($archiveName); |
// Ošetření doběhnutí skriptu i když klient klikne jinam (smazání tmp) |
ignore_user_abort(true); |
if ($archiveName == '') |
$tmpname1 = tempnam("temp", "wsvn-"); |
$tmpname = $tmpname1; |
$tmpname .= "dir"; |
if (mkdir($tmpname)) |
{ |
$archiveName = $rep->name; |
} |
// Get the name of the directory being archived |
$arcname = substr($path, 0, -1); |
$arcname = basename($arcname); |
if (empty($arcname)) |
$arcname = $rep->name; |
$plainfilename = $archiveName; |
$archiveName .= '.r'.$rev; |
$svnrep->exportDirectory($path, $tmpname.DIRECTORY_SEPARATOR.$arcname, $rev); |
// Export the requested path from SVN repository to the temp directory |
$svnExportResult = $svnrep->exportRepositoryPath($path, $tempDir.DIRECTORY_SEPARATOR.$archiveName, $rev, $peg); |
// ZIP it up |
chdir($tmpname); |
if (! connection_aborted()) |
exec("zip -r ".quote("$arcname")." ."); |
if ($svnExportResult != 0) |
{ |
http_response_code(500); |
error_log('svn export failed for: '.$archiveName); |
print 'svn export failed for "'.xml_entities($archiveName).'".'; |
removeDirectory($tempDir); |
exit(0); |
} |
$size = filesize("$arcname.zip"); |
// For security reasons, disallow direct downloads of filenames that |
// are a symlink, since they may be a symlink to anywhere (/etc/passwd) |
// Deciding whether the symlink is relative and legal within the |
// repository would be nice but seems to error prone at this moment. |
if ( is_link($tempDir.DIRECTORY_SEPARATOR.$archiveName) ) |
{ |
http_response_code(500); |
error_log('to be downloaded file is symlink, aborting: '.$archiveName); |
print 'Download of symlinks disallowed: "'.xml_entities($archiveName).'".'; |
removeDirectory($tempDir); |
exit(0); |
} |
// Give the file to the browser |
// Set timestamp of exported directory (and subdirectories) to timestamp of |
// the revision so every archive of a given revision has the same timestamp. |
$revDate = $logEntry->date; |
$timestamp = mktime(substr($revDate, 11, 2), // hour |
substr($revDate, 14, 2), // minute |
substr($revDate, 17, 2), // second |
substr($revDate, 5, 2), // month |
substr($revDate, 8, 2), // day |
substr($revDate, 0, 4)); // year |
setDirectoryTimestamp($tempDir, $timestamp); |
// Change to temp directory so that only relative paths are stored in archive. |
$oldcwd = getcwd(); |
chdir($tempDir); |
if ($isDir) |
if (!connection_aborted() && $fp = @fopen("$arcname.zip","rb")) |
{ |
$downloadMode = $config->getDefaultDirectoryDlMode(); |
} |
else |
header("Content-Type: application/zip"); |
header("Content-Length: $size"); |
header("Content-Disposition: attachment; filename=\"".$rep->name."-$arcname.zip\""); |
// Use a loop to transfer the data 4KB at a time. |
while(!feof($fp)) |
{ |
$downloadMode = $config->getDefaultFileDlMode(); |
echo fread($fp, 4096); |
ob_flush(); |
} |
// $_REQUEST parameter can override dlmode |
if (!empty($_REQUEST['dlmode'])) |
{ |
$downloadMode = $_REQUEST['dlmode']; |
if (substr($logEntry->path, -1) == '/') |
{ |
if (!in_array($downloadMode, $config->validDirectoryDlModes)) |
{ |
$downloadMode = $config->getDefaultDirectoryDlMode(); |
} |
} |
else |
{ |
if (!in_array($downloadMode, $config->validFileDlModes)) |
{ |
$downloadMode = $config->getDefaultFileDlMode(); |
print "Unable to open file $arcname.zip"; |
} |
} |
} |
$downloadArchive = $archiveName; |
fclose($fp); |
if ($downloadMode == 'plain') |
{ |
$downloadMimeType = 'application/octet-stream'; |
chdir(".."); |
} |
else if ($downloadMode == 'zip') |
{ |
$downloadMimeType = 'application/zip'; |
$downloadArchive .= '.zip'; |
// Create zip file |
$cmd = $config->zip.' --symlinks -r '.quote($downloadArchive).' '.quote($archiveName); |
execCommand($cmd, $retcode); |
// Delete the directory. Why doesn't PHP have a generic recursive directory |
// deletion command? It's stupid. |
if ($retcode != 0) |
{ |
error_log('Unable to call zip command: '.$cmd); |
print 'Unable to call zip command. See webserver error log for details.'; |
} |
} |
else |
{ |
$downloadMimeType = 'application/gzip'; |
$downloadArchive .= '.tar.gz'; |
$tarArchive = $archiveName.'.tar'; |
// if ($config->serverIsWindows) |
// { |
// $cmd = quoteCommand("rmdir /S /Q ".quote($tmpname), false); |
// } |
// else |
// { |
$cmd = quoteCommand("rm -fr ".quote($tmpname), false); |
// } |
// Create the tar file |
$retcode = 0; |
if (class_exists('Archive_Tar')) |
{ |
$tar = new Archive_Tar($tarArchive); |
$created = $tar->create(array($archiveName)); |
if (!$created) |
{ |
$retcode = 1; |
http_response_code(500); |
print 'Unable to create tar archive.'; |
@exec($cmd); |
} |
unlink($tmpname1); // Pomocny soubor smazeme az po smazani adresare |
} |
else |
{ |
$cmd = $config->tar.' -cf '.quote($tarArchive).' '.quote($archiveName); |
execCommand($cmd, $retcode); |
if ($retcode != 0) |
{ |
http_response_code(500); |
error_log('Unable to call tar command: '.$cmd); |
print 'Unable to call tar command. See webserver error log for details.'; |
print "We are sorry. The server is overloaded..."; |
} |
} |
if ($retcode != 0) |
{ |
chdir($oldcwd); |
removeDirectory($tempDir); |
exit(0); |
} |
// Set timestamp of tar file to timestamp of revision |
touch($tarArchive, $timestamp); |
// GZIP it up |
if (function_exists('gzopen')) |
{ |
$srcHandle = fopen($tarArchive, 'rb'); |
$dstHandle = gzopen($downloadArchive, 'wb'); |
if (!$srcHandle || !$dstHandle) |
{ |
http_response_code(500); |
print 'Unable to open file for gz-compression.'; |
chdir($oldcwd); |
removeDirectory($tempDir); |
exit(0); |
} |
while (!feof($srcHandle)) |
{ |
gzwrite($dstHandle, fread($srcHandle, 1024 * 512)); |
} |
fclose($srcHandle); |
gzclose($dstHandle); |
} |
else |
{ |
$cmd = $config->gzip.' '.quote($tarArchive); |
$retcode = 0; |
execCommand($cmd, $retcode); |
if ($retcode != 0) |
{ |
http_response_code(500); |
error_log('Unable to call gzip command: '.$cmd); |
print 'Unable to call gzip command. See webserver error log for details.'; |
chdir($oldcwd); |
removeDirectory($tempDir); |
exit(0); |
} |
} |
} |
// Give the file to the browser |
if (is_readable($downloadArchive)) |
{ |
if ($downloadMode == 'plain') |
{ |
$downloadFilename = $plainfilename; |
} |
else |
{ |
$downloadFilename = $rep->name.'-'.$downloadArchive; |
} |
header('Content-Type: '.$downloadMimeType); |
header('Content-Length: '.filesize($downloadArchive)); |
header("Content-Disposition: attachment; filename*=UTF-8''".rawurlencode($downloadFilename)); |
readfile($downloadArchive); |
} |
else |
{ |
http_response_code(404); |
print 'Unable to open file: '.xml_entities($downloadArchive); |
} |
chdir($oldcwd); |
removeDirectory($tempDir); |
?> |
/WebSVN/templates/calm/index.tmpl |
---|
File deleted |
/WebSVN/templates/calm/diff.tmpl |
---|
File deleted |
/WebSVN/templates/calm/header.tmpl |
---|
File deleted |
/WebSVN/templates/calm/images/pilcrow_delete.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/delete.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/toggle-up.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/exclamation.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/script.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/directory.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/filepaint.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/favicon.ico |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/next.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/l-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/pilcrow.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/arrow_in.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/blame.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/log.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/bullet_yellow.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/eye.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:executable |
-* |
\ No newline at end of property |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/page_white_add.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/up.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/toggle-down.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/t-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/filephp.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/css.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/add.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/compress.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/textbg.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/bullet_add.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/sitemap_color.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/html.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/e-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/diff.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/bullet_delete.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/i-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/previous.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/submitbg.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/file.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/filetxt.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/page_white_edit.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/arrow_out.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/xml.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/filec.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/filedb.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/fileh.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/link.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/page_white_delete.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/cube_green.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/images/filexml.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/calm/footer.tmpl |
---|
File deleted |
/WebSVN/templates/calm/revision.tmpl |
---|
File deleted |
/WebSVN/templates/calm/styles.css |
---|
File deleted |
/WebSVN/templates/calm/file.tmpl |
---|
File deleted |
/WebSVN/templates/calm/README.txt |
---|
File deleted |
/WebSVN/templates/calm/blame.tmpl |
---|
File deleted |
/WebSVN/templates/calm/log.tmpl |
---|
File deleted |
/WebSVN/templates/calm/user_greeting.tmpl |
---|
File deleted |
/WebSVN/templates/calm/directory.tmpl |
---|
File deleted |
/WebSVN/templates/calm/compare.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/footer.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/revision.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/styles.css |
---|
File deleted |
/WebSVN/templates/Elegant/revision-popup.js |
---|
File deleted |
/WebSVN/templates/Elegant/file.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/blame.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/log.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/user_greeting.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/directory.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/compare.tmpl |
---|
File deleted |
\ No newline at end of file |
/WebSVN/templates/Elegant/index.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/diff.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/header.tmpl |
---|
File deleted |
/WebSVN/templates/Elegant/images/parent.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/arrow-in.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-java.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/subversion-s.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-c.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/bg-table-divider.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/detail.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-h.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-py.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-css.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/deleted.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/download.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/rss.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/diff.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-m.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/previous.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-xml.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/information.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/repository24.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/blank.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/remove.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/bg-gray-light.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/revision.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/valid.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-cpp.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-image.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/arrow-out.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/added.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/bg-table-header.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/cube-blue.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-php.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/directory.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/warning.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/bg-gray-dark.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/favicon.ico |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/reverse.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/youngest.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/next.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/repository.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/pilcrow.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/modified.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/blame.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/file-html.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/log.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/eye.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/stop.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/README.txt |
---|
File deleted |
/WebSVN/templates/Elegant/images/home.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Elegant/images/bg-page-header.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/t-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/fileh.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/filepy.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/rss.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/filem.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/directory-open.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/directory.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/websvn.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/filehtml.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/repo.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/e-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/favicon.ico |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/i-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/l-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/file.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/filejava.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/filecpp.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/images/filec.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/revision.tmpl |
---|
File deleted |
/WebSVN/templates/BlueGrey/blame.tmpl |
---|
1,62 → 1,32 |
<h1>[websvn:repname] – [lang:BLAMEFOR] [websvn:rev]</h1> |
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
[websvn-test:error] |
<div id="error">[websvn:error]</div> |
<table cellspacing="0" cellpadding="0" border="0" width="100%"> |
<tr> |
<td align="left"><h1>[websvn:repname]</h1></td> |
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td> |
</tr> |
</table> |
[websvn:curdirlinks] - <h2> [lang:BLAMEFOR] [websvn:rev]</h2> |
<p> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div> |
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div> |
<div id="nav"> |
[websvn-test:prevrevurl] |
<a href="[websvn:prevrevurl]">[lang:REV] [websvn:prevrev]</a> – |
[websvn-endtest] |
[websvn-test:nextrevurl] |
<a href="[websvn:nextrevurl]">[lang:REV] [websvn:nextrev]</a> – |
[websvn-endtest] |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink] – |
[websvn-endtest] |
[websvn-test:mimelink] |
[websvn:mimelink] – |
[websvn-endtest] |
[websvn:filedetaillink] – |
[websvn-test:difflink] |
[websvn:difflink] – |
[websvn-endtest] |
[websvn-test:downloadlink] |
[websvn:downloadlink] – |
[websvn-endtest] |
[websvn:revlink] – |
[websvn:loglink] |
[websvn-test:clientrooturl] |
– <a href="[websvn:clientrooturl][websvn:path]">SVN</a> |
[websvn-endtest] |
[websvn-test:rssurl] |
– <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a> |
[websvn-endtest] |
</div> |
[websvn-test:warning] |
<div id="warning">[websvn:warning]</div> |
[websvn-else] |
<table> |
<thead> |
<table cellpadding="2px" cellspacing="0" width="100%"> |
<tr> |
<th>[lang:REV]</th> |
<th>[lang:AUTHOR]</th> |
<th>[lang:LINENO]</th> |
<th>[lang:LINE]</th> |
<th class="HdrClmn"><b>[lang:LINENO]</b></th> |
<th class="HdrClmn"><b>[lang:REV]</b></th> |
<th class="HdrClmn"><b>[lang:AUTHOR]</b></th> |
<th class="HdrClmnEnd"><b>[lang:LINE]</b></th> |
</tr> |
</thead> |
<tbody style="font-size: 90%;"> |
[websvn-startlisting] |
<tr class="[websvn:row_class]"> |
<th>[websvn:revision]</th> |
<th>[websvn:author]</th> |
<th><a name="l[websvn:lineno]" href="#l[websvn:lineno]">[websvn:lineno]</a></th> |
<td>[websvn:line]</td> |
<tr> |
<td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:lineno]</td> |
<td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:revision]</td> |
<td class="CatClmn0" style="border-right: 1px solid black" valign="top">[websvn:author]</td> |
<td style="border-right: 1px solid black" valign="top">[websvn:line]</td> |
</tr> |
[websvn-endlisting] |
</tbody> |
</table> |
[websvn:javascript] |
[websvn-endtest] |
[websvn-endtest] |
/WebSVN/templates/BlueGrey/collapse.js |
---|
0,0 → 1,169 |
/*********************************************** |
* Switch Content script- © Dynamic Drive (www.dynamicdrive.com) |
* This notice must stay intact for legal use. Last updated April 2nd, 2005. |
* Visit http://www.dynamicdrive.com/ for full source code |
***********************************************/ |
var enablepersist="on" // Enable saving state of content structure using session cookies? (on/off) |
var collapseprevious="yes" // Collapse previously open content when opening present? (yes/no) |
var contractsymbol='<div class="minusbox">-</div>' // HTML for contract symbol. For image, use: <img src="${prefix}whatever.gif"> |
var expandsymbol='<div class="plusbox">+</div>' // HTML for expand symbol. |
var expandonload=false |
if (document.getElementById) |
{ |
document.write('<style type="text/css">') |
document.write('.switchcontent{display:none;}') |
document.write('</style>') |
} |
function getElementbyClass(rootobj, classname) |
{ |
var temparray=new Array() |
var inc=0 |
for (i=0; i<rootobj.length; i++) |
{ |
if (rootobj[i].className==classname) |
temparray[inc++]=rootobj[i] |
} |
return temparray |
} |
function sweeptoggle(ec) |
{ |
var thestate=(ec=="expand")? "block" : "none" |
var inc=0 |
while (ccollect[inc]) |
{ |
ccollect[inc].style.display=thestate |
inc++ |
} |
revivestatus() |
collapseprevious = (ec=="expand")? "no" : "yes" |
} |
function contractcontent(omit) |
{ |
var inc=0 |
while (ccollect[inc]) |
{ |
if (ccollect[inc].id!=omit) |
ccollect[inc].style.display="none" |
inc++ |
} |
} |
function expandcontent(curobj, cid) |
{ |
var spantags=curobj.getElementsByTagName("SPAN") |
var showstateobj=getElementbyClass(spantags, "showstate") |
if (ccollect.length>0) |
{ |
if (collapseprevious=="yes") |
contractcontent(cid) |
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none" |
if (showstateobj.length>0) //if "showstate" span exists in header |
{ |
if (collapseprevious=="no") |
showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbol |
else |
revivestatus() |
} |
} |
} |
function revivecontent() |
{ |
contractcontent("omitnothing") |
selectedItem=getselectedItem() |
selectedComponents=selectedItem.split("|") |
collapseprevious=selectedComponents[0] |
for (i=1; i<selectedComponents.length-1; i++) |
document.getElementById(selectedComponents[i]).style.display="block" |
} |
function revivestatus() |
{ |
var inc=0 |
while (statecollect[inc]) |
{ |
if (ccollect[inc].style.display=="block") |
statecollect[inc].innerHTML=contractsymbol |
else |
statecollect[inc].innerHTML=expandsymbol |
inc++ |
} |
} |
function get_cookie(Name) |
{ |
var search = Name + "=" |
var returnvalue = ""; |
if (document.cookie.length > 0) |
{ |
offset = document.cookie.indexOf(search) |
if (offset != -1) |
{ |
offset += search.length |
end = document.cookie.indexOf(";", offset); |
if (end == -1) end = document.cookie.length; |
returnvalue=unescape(document.cookie.substring(offset, end)) |
} |
} |
return returnvalue; |
} |
function getselectedItem() |
{ |
if (get_cookie(window.location.pathname) != "") |
{ |
selectedItem=get_cookie(window.location.pathname) |
return selectedItem |
} |
else |
return "" |
} |
function saveswitchstate() |
{ |
var inc=0, selectedItem=collapseprevious+"|" |
while (ccollect[inc]) |
{ |
if (ccollect[inc].style.display=="block") |
selectedItem+=ccollect[inc].id+"|" |
inc++ |
} |
document.cookie=window.location.pathname+"="+selectedItem |
} |
function do_onload() |
{ |
uniqueidn=window.location.pathname+"firsttimeload" |
var alltags=document.all? document.all : document.getElementsByTagName("*") |
ccollect=getElementbyClass(alltags, "switchcontent") |
statecollect=getElementbyClass(alltags, "showstate") |
if (enablepersist=="on" && ccollect.length>0) |
{ |
document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0" |
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load |
if (!firsttimeload) |
revivecontent() |
} |
if (ccollect.length>0 && statecollect.length>0) |
revivestatus() |
if (expandonload) |
sweeptoggle('expand') |
} |
if (window.addEventListener) |
window.addEventListener("load", do_onload, false) |
else if (window.attachEvent) |
window.attachEvent("onload", do_onload) |
else if (document.getElementById) |
window.onload=do_onload |
if (enablepersist=="on" && document.getElementById) |
window.onunload=saveswitchstate |
/WebSVN/templates/BlueGrey/compare.tmpl |
---|
1,63 → 1,65 |
<h1>[websvn:repname]</h1> |
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
[websvn-test:error] |
<div id="error">[websvn:error]</div> |
[websvn-else] |
<center> |
[websvn:compare_form] |
<table id="params"> |
<table cellspacing="0" cellpadding="0" border="0" width="100%"> |
<tr> |
<td>[lang:COMPPATH]</td> |
<td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td> |
<td rowspan="2">[websvn:compare_submit]</td> |
<td align="left"><h1>[websvn:repname]</h1></td> |
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td> |
</tr> |
<tr> |
<td>[lang:WITHPATH]</td> |
<td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td> |
</tr> |
</table> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn:compare_form] |
<table> |
<tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr> |
<tr><td>[lang:WITHPATH]</td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr> |
</table> |
[websvn:compare_submit] |
[websvn:compare_endform] |
[websvn-test:warning] |
<div id="warning">[websvn:warning]</div> |
[websvn-endtest] |
[websvn-test:success] |
<div id="nav"> |
[websvn:reverselink] | |
[websvn-test:regardwhitespacelink] |
[websvn:regardwhitespacelink] |
[websvn-else] |
[websvn:ignorewhitespacelink] |
<hr> |
<p>[lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b> |
<p> |
[websvn:revlink] |
<p> |
[websvn-endtest] |
</div> |
<div><a href="[websvn:rev1url]">[websvn:safepath1] @ [websvn:rev1]</a> → <a href="[websvn:rev2url]">[websvn:safepath2] @ [websvn:rev2]</a></div> |
[websvn-endtest] |
</center> |
[websvn-startlisting] |
[websvn-test:newpath] |
<table class="comparison collapsible"> |
<thead> |
<tr><th><a href="[websvn:fileurl]">[websvn:newpath]</a></th></tr> |
</thead> |
<p> |
<div class="newpath"> |
<b>[websvn:newpath]</b><br> |
[websvn-endtest] |
[websvn-test:info] |
[websvn:info]<br /> |
[websvn:info]<br> |
[websvn-endtest] |
[websvn-test:difflines] |
<tr class="row1"><th>[websvn:difflines]</th></tr> |
<div class="difflines"> |
<p> |
[websvn:difflines]<br> |
<table class="diff" cellspacing="0"> |
[websvn-endtest] |
[websvn-test:diffclass] |
<tr><td class="[websvn:diffclass]">[websvn:line]</td></tr> |
[websvn-endtest] |
[websvn-test:endpath] |
[websvn-test:enddifflines] |
</table> |
</div> |
[websvn-endtest] |
[websvn-test:endpath] |
</div> |
<p><hr> |
[websvn-endtest] |
[websvn-test:properties] |
<p><i>[lang:PROPCHANGES]</i><p> |
[websvn-endtest] |
[websvn-endlisting] |
[websvn-endtest] |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/jquery.min.1.9.1.js"></script> |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/collapsible.js"></script> |
[websvn-endtest] |
</table> |
[websvn-endtest] |
/WebSVN/templates/BlueGrey/diff.tmpl |
---|
1,85 → 1,46 |
[websvn-test:rev2] |
<h1>[websvn:repname] – [lang:DIFFREVS] [websvn:rev2] [lang:AND] [websvn:rev1]</h1> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<h1>[websvn:repname] – [lang:DIFF]</h1> |
[websvn-endtest] |
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
[websvn-test:error] |
<div id="error">[websvn:error]</div> |
[websvn-else] |
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div> |
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div> |
<div id="nav"> |
[websvn-test:prevrevurl] |
<a href="[websvn:prevrevurl]">[lang:REV] [websvn:prevrev]</a> – |
[websvn-endtest] |
[websvn-test:nextrevurl] |
<a href="[websvn:nextrevurl]">[lang:REV] [websvn:nextrev]</a> – |
[websvn-endtest] |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink] – |
[websvn-endtest] |
[websvn:filedetaillink] – |
[websvn:blamelink] – |
[websvn-test:downloadlink] |
[websvn:downloadlink] – |
[websvn-endtest] |
[websvn:revlink] – |
[websvn:loglink] |
[websvn-test:clientrooturl] |
– <a href="[websvn:clientrooturl][websvn:path]">SVN</a> |
[websvn-endtest] |
[websvn-test:rssurl] |
– <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a> |
[websvn-endtest] |
</div> |
[websvn-test:warning] |
<div id="warning">[websvn:warning]</div> |
[websvn-else] |
[websvn-test:noprev] |
<div id="warning">[lang:NOPREVREV].</div> |
[lang:NOPREVREV] |
[websvn-else] |
<center> |
[websvn-test:showcompactlink] |
[websvn:showcompactlink] – |
[websvn-endtest] |
[websvn-test:showalllink] |
[websvn:showalllink] – |
[websvn-endtest] |
[websvn-test:regardwhitespacelink] |
[websvn:regardwhitespacelink] |
[websvn-endtest] |
[websvn-test:ignorewhitespacelink] |
[websvn:ignorewhitespacelink] |
[websvn-endtest] |
<table cellspacing="0" cellpadding="0" border="0" width="100%"> |
<tr> |
<td align="left"><h1>[websvn:repname]</h1></td> |
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td> |
</tr> |
</table> |
[websvn:curdirlinks] - [lang:DIFFREVS] <b>[websvn:rev2]</b> [lang:AND] <b>[websvn:rev1]</b> |
<p> |
<p><center> |
[websvn:showcompactlink] |
[websvn:showalllink] |
</center> |
<table class="diff" cellspacing="0"> |
<thead> |
<p> |
<table class="diff" width="100%" cellspacing="0"> |
<tr> |
<th width="50%" colspan="2"><a href="[websvn:prevrevurl]">[lang:REV] [websvn:rev2]</a></th> |
<td width="5"></td> |
<th width="50%" colspan="2"><a href="[websvn:revurl]">[lang:REV] [websvn:rev1]</a></th> |
<th class="HdrClmnEnd" style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th> |
<th width="5"></th> |
<th class="HdrClmnEnd" style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th> |
</tr> |
</thead> |
[websvn-startlisting] |
[websvn-test:startblock] |
[websvn-test:rev1lineno] |
<tr> |
<th class="row1" colspan="2">[lang:LINE] [websvn:rev1lineno]...</th> |
<td width="5" style="background: none;"></td> |
<th class="row1" colspan="2">[lang:LINE] [websvn:rev2lineno]...</th> |
</tr> |
[websvn-endtest] |
<td width="50%" style="padding: 3px 0 3px 0" align="center" class="row1"><b>[lang:LINE] [websvn:rev1lineno]...</b></td> |
<td width="5"></td> |
<td width="50%" style="padding: 3px 0 3px 0" align="center" class="row1"><b>[lang:LINE] [websvn:rev2lineno]...</b></td> |
<tr> |
<td class="lineno">[websvn:rev1lineno]</td> |
<td class="[websvn:rev1diffclass]">[websvn:rev1line]</td> |
[websvn-else] |
<tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td> |
<td width="5"></td> |
<td class="lineno">[websvn:rev2lineno]</td> |
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td> |
</tr> |
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr> |
[websvn-endtest] |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
[websvn-endtest] |
[websvn-endtest] |
[websvn-endtest] |
/WebSVN/templates/BlueGrey/directory.tmpl |
---|
1,142 → 1,142 |
<h1>[websvn:repname] – [lang:REV] [websvn:rev]</h1> |
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
[websvn-test:error] |
<div id="error">[websvn:error]</div> |
<table cellspacing="0" cellpadding="0" border="0" width="100%"> |
<tr> |
<td align="left"><h1>[websvn:repname]</h1></td> |
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td> |
</tr> |
</table> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div> |
[websvn-test:search] |
<div id="searchcss">[websvn:search_form]<div>[lang:SEARCH] [websvn:search_input]<span class="submit">[websvn:search_submit]</span></div>[websvn:search_endform]</div> |
<table cellpadding="2px" cellspacing="0px" class="outline"> |
<tr><th colspan=2 class="HdrClmnEnd">[lang:REVINFO]</th></tr> |
<tr><td class="CatClmn1" valign="top">[lang:CURDIR]:</td><td class="row1">[websvn:path]</td></tr> |
<tr><td class="CatClmn0">[lang:REV] & [lang:AUTHOR]:</td><td class="row0">[lang:REV] [websvn:rev] - [websvn:author] |
[websvn-test:goyoungestlink] |
- [websvn:goyoungestlink] |
[websvn-endtest] |
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div> |
[websvn-test:warning] |
[websvn-else] |
<table cellpadding="2" cellspacing="0" class="outline"> |
<thead> |
<tr><th colspan="2">[lang:REVINFO]</th></tr> |
</thead> |
</td></tr> |
[websvn-test:restricted] |
[websvn-else] |
<tr class="row0"><th>[lang:LASTMOD]:</th><td>[lang:REV] [websvn:lastchangedrev] – [websvn:author] – [websvn:date] |
[websvn-test:prevrevurl] |
– <a href="[websvn:prevrevurl]">[lang:REV] [websvn:prevrev]</a> |
<tr><td class="CatClmn1" valign="top">[lang:LASTMOD]:</td><td class="row1">[lang:REV] [websvn:lastchangedrev] - [websvn:date]</td></tr> |
<tr><td class="CatClmn0" valign="top">[lang:LOGMSG]:</td><td class="row0">[websvn:log]</td></tr> |
[websvn-test:hidechanges] |
<tr><td class="CatClmn1" valign="top"> </td><td class="row1">([websvn:showchangeslink])</td></tr> |
[websvn-else] |
[websvn:showchangeslink] |
<tr><td class="CatClmn1" valign="top"> </td><td class="row1">([websvn:hidechangeslink])</td></tr> |
[websvn-test:changedfilesbr] |
<tr><td class="CatClmn0" valign="top">[lang:CHANGEDFILES]:</td><td class="row0">[websvn:changedfilesbr]</td></tr> |
[websvn-endtest] |
[websvn-test:nextrevurl] |
– <a href="[websvn:nextrevurl]">[lang:REV] [websvn:nextrev]</a> |
[websvn-test:newfilesbr] |
[websvn-test:changedfilesbr] |
<tr><td class="CatClmn1" valign="top">[lang:NEWFILES]:</td><td class="row1">[websvn:newfilesbr]</td></tr> |
[websvn-else] |
<tr><td class="CatClmn0" valign="top">[lang:NEWFILES]:</td><td class="row0">[websvn:newfilesbr]</td></tr> |
[websvn-endtest] |
[websvn-test:goyoungestlink] |
– [websvn:goyoungestlink] |
[websvn-endtest] |
</td></tr> |
<tr class="row1"><th>[lang:LOGMSG]:</th><td>[websvn:log]</td></tr> |
[websvn-test:deletedfilesbr] |
[websvn-test:changedfilesbr] |
[websvn-test:newfilesbr] |
<tr><td class="CatClmn0" valign="top">[lang:DELETEDFILES]:</td><td class="row0">[websvn:deletedfilesbr]</td></tr> |
[websvn-else] |
<tr><td class="CatClmn1" valign="top">[lang:DELETEDFILES]:</td><td class="row1">[websvn:deletedfilesbr]</td></tr> |
[websvn-endtest] |
</table> |
[websvn-else] |
[websvn-test:newfilesbr] |
<tr><td class="CatClmn1" valign="top">[lang:DELETEDFILES]:</td><td class="row1">[websvn:deletedfilesbr]</td></tr> |
[websvn-else] |
<tr><td class="CatClmn0" valign="top">[lang:DELETEDFILES]:</td><td class="row0">[websvn:deletedfilesbr]</td></tr> |
[websvn-endtest] |
<div id="nav"> |
[websvn:revlink] – |
[websvn-test:comparelink] |
[websvn:comparelink] – |
[websvn-endtest] |
[websvn:loglink] |
[websvn-test:downloadurl] |
– <a href="[websvn:downloadurl]" rel="nofollow">[lang:DOWNLOAD]</a> |
[websvn-endtest] |
[websvn-test:clientrooturl] |
– <a href="[websvn:clientrooturl][websvn:path]">SVN</a> |
[websvn-endtest] |
[websvn-test:rssurl] |
– <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a> |
[websvn-endtest] |
</div> |
[websvn-test:warning] |
<div id="warning">[websvn:warning]</div> |
[websvn-else] |
</table> |
[websvn-defineicons] |
dir=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/directory.png" alt="[DIRECTORY]"/> |
diropen=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/directory.png" alt="[OPEN-DIRECTORY]"/> |
*=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/file.png" alt="[FILE]"/> |
.c=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filec.png" alt="[C-FILE]"/> |
.cpp=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filecpp.png" alt="[CPP-FILE]"/> |
.h=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/fileh.png" alt="[H-FILE]"/> |
.html=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filehtml.png" alt="[HTML-FILE]"/> |
.java=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filejava.png" alt="[JAVA-FILE]"/> |
.m=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filem.png" alt="[M-FILE]"/> |
.py=<img class="icon" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/filepy.png" alt="[PY-FILE]"/> |
dir=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder.png" alt="[FOLDER]"> |
diropen=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder.png" alt="[OPEN-FOLDER]"> |
*=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/file.png" alt="[FILE]"> |
.c=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filec.png" alt="[C-FILE]"> |
.cpp=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filecpp.png" alt="[CPP-FILE]"> |
.h=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/fileh.png" alt="[H-FILE]"> |
.html=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filehtml.png" alt="[HTML-FILE]"> |
.java=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filejava.png" alt="[JAVA-FILE]"> |
.m=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filem.png" alt="[M-FILE]"> |
.py=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filepy.png" alt="[PY-FILE]"> |
.s=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/files.png" alt="[S-FILE]"> |
i-node=<img class="icon" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/i-node.png" alt="[NODE]"/> |
t-node=<img class="icon" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/t-node.png" alt="[NODE]"/> |
l-node=<img class="icon" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/l-node.png" alt="[NODE]"/> |
e-node=<img class="icon" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/e-node.png" alt="[NODE]"/> |
i-node=<img align="middle" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/i-node.png" alt="[NODE]"> |
t-node=<img align="middle" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/t-node.png" alt="[NODE]"> |
l-node=<img align="middle" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/l-node.png" alt="[NODE]"> |
e-node=<img align="middle" border="0" width="24" height="22" src="[websvn:locwebsvnhttp]/templates/BlueGrey/e-node.png" alt="[NODE]"> |
[websvn-enddefineicons] |
<p><hr> |
[websvn:curdirlinks] - [websvn:curdirloglink] |
[websvn-test:curdircomplink] |
- [websvn:curdircomplink] |
[websvn-endtest] |
[websvn-test:curdirdllink] |
- [websvn:curdirdllink] |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
- [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a> |
[websvn-endtest] |
<p> |
[websvn:compare_form] |
<table cellpadding="2" cellspacing="0" id="listing"> |
<thead> |
<table cellpadding="2px" cellspacing="0px" width="100%" class="outline"> |
<tr> |
<th class="path">[lang:PATH]</th> |
[websvn-test:showlastmod] |
<th class="last_mod" scope="col" colspan="3">[lang:LASTMOD]</th> |
[websvn-endtest] |
<th class="view_log" nowrap="nowrap">[lang:VIEWLOG]</th> |
<th class="HdrClmn" width="100%"><b>[lang:PATH]</b></th> |
[websvn-test:allowdownload] |
<th class="download">[lang:DOWNLOAD]</th> |
[websvn-test:curdirrsslink] |
<th class="HdrClmn"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th> |
<th class="HdrClmn"><b>[lang:TARBALL]</b></th> |
<th class="HdrClmnEnd"><b>RSS</b></th> |
[websvn-else] |
<th class="HdrClmn"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th> |
<th class="HdrClmnEnd"><b>[lang:TARBALL]</b></th> |
[websvn-endtest] |
[websvn-test:clientrooturl] |
<th>SVN</th> |
[websvn-else] |
[websvn-test:curdirrsslink] |
<th class="HdrClmn"><b>[lang:LOG]</b></th> |
<th class="HdrClmnEnd"><b>RSS</b></th> |
[websvn-else] |
<th class="HdrClmnEnd"><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th> |
[websvn-endtest] |
[websvn-test:rssurl] |
<th>RSS</th> |
[websvn-endtest] |
</tr> |
</thead> |
<tbody> |
[websvn-startlisting] |
<tr class="row[websvn:rowparity]" |
[websvn-test:loadalldir] |
title="[websvn:classname]" |
[websvn-endtest] |
> |
<td class="path" valign="middle"> |
<tr> |
<td valign="middle" style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]"> |
[websvn:compare_box] |
[websvn-treenode] |
<a href="[websvn:fileurl]"> |
[websvn-icon] |
[websvn:filename] |
</a> |
[websvn:filelink] |
</td> |
[websvn-test:showlastmod] |
<td class="rev"><a href="[websvn:revurl]">[websvn:revision]</a> </td> |
[websvn-test:showageinsteadofdate] |
<td class="age" title="[websvn:date]">[websvn:age]</td> |
[websvn-test:allowdownload] |
[websvn-test:curdirrsslink] |
<td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td> |
<td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:fileviewdllink]</td> |
<td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td> |
[websvn-else] |
<td class="date" title="[websvn:age]">[websvn:date]</td> |
<td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td> |
<td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:fileviewdllink]</td> |
[websvn-endtest] |
<td class="author">[websvn:author]</td> |
[websvn-else] |
[websvn-test:curdirrsslink] |
<td style="border-right: 1px solid black; padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td> |
<td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td> |
[websvn-else] |
<td style="padding: 0 2px 0 2px;" class="row[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td> |
[websvn-endtest] |
<td><a href="[websvn:logurl]">[lang:LOG]</a></td> |
[websvn-test:allowdownload] |
<td> |
[websvn-test:downloadurl] |
<a href="[websvn:downloadurl]" rel="nofollow">[lang:DOWNLOAD]</a> |
[websvn-endtest] |
[websvn-test:downloadplainurl] |
<a href="[websvn:downloadplainurl]" rel="nofollow">[lang:DOWNLOAD]</a> |
[websvn-endtest] |
</td> |
[websvn-endtest] |
[websvn-test:clientrooturl] |
<td><a href="[websvn:clientrooturl][websvn:path]">SVN</a></td> |
[websvn-endtest] |
[websvn-test:rssurl] |
<td><a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a></td> |
[websvn-endtest] |
</tr> |
[websvn-endlisting] |
</tbody> |
</table> |
[websvn:compare_submit][websvn:compare_endform] |
<p> |
[websvn:compare_submit] |
[websvn:compare_endform] |
<hr> |
[websvn-endtest] |
[websvn-test:loadalldir] |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/jquery.min.1.9.1.js"></script> |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/collapsible.js"></script> |
[websvn-endtest] |
[websvn-endtest] |
/WebSVN/templates/BlueGrey/file.tmpl |
---|
1,48 → 1,19 |
<h1>[websvn:repname] – [lang:REV] [websvn:rev]</h1> |
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
[websvn-test:error] |
<div id="error">[websvn:error]</div> |
<table cellspacing="0" cellpadding="0" border="0" width="100%"> |
<tr> |
<td align="left"><h1>[websvn:repname]</h1></td> |
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td> |
</tr> |
</table> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div> |
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div> |
<div id="nav"> |
[websvn-test:prevrevurl] |
<a href="[websvn:prevrevurl]">[lang:REV] [websvn:prevrev]</a> – |
[websvn-endtest] |
[websvn-test:nextrevurl] |
<a href="[websvn:nextrevurl]">[lang:REV] [websvn:nextrev]</a> – |
[websvn-endtest] |
[websvn:curdirlinks] - [lang:REV] [websvn:rev] |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink] – |
[websvn:goyoungestlink]<p> |
[websvn-endtest] |
[websvn-test:mimelink] |
[websvn:mimelink] – |
[websvn-endtest] |
[websvn:blamelink] – |
[websvn-test:difflink] |
[websvn:difflink] – |
[websvn-endtest] |
[websvn:revlink] – |
[websvn:loglink] |
[websvn-test:downloadlink] |
– [websvn:downloadlink] |
[websvn-endtest] |
[websvn-test:clientrooturl] |
– <a href="[websvn:clientrooturl][websvn:path]">SVN</a> |
[websvn-endtest] |
[websvn-test:rssurl] |
– <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a> |
[websvn-endtest] |
</div> |
[websvn-test:warning] |
<div id="warning">[websvn:warning]</div> |
[websvn-else] |
<div id="listing"> |
<p>[websvn:prevdifflink] - [websvn:blamelink]</p> |
<hr /> |
[websvn-getlisting] |
</div> |
[websvn-test:warning] |
<!-- check for warnings generated by getlisting --> |
<div id="warning">[websvn:warning]</div> |
<hr /> |
[websvn-endtest] |
[websvn-endtest] |
[websvn-endtest] |
/WebSVN/templates/BlueGrey/footer.tmpl |
---|
1,4 → 1,3 |
</div> |
<div id="footer">[lang:POWERED] [websvn:version] [lang:AND] <a href="http://subversion.apache.org">Apache Subversion</a> [websvn:svnversion] ✓ <a href="http://validator.w3.org/check?uri=[websvn:validationurl]">XHTML</a> & <a href="http://jigsaw.w3.org/css-validator/validator?uri=[websvn:validationurl]">CSS</a></div> |
<p><center><font size="-1"><i><b>[lang:POWERED] v[websvn:version]</b></i></font></center> |
</body> |
</html> |
/WebSVN/templates/BlueGrey/header.tmpl |
---|
1,58 → 1,73 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="[websvn:language_code]" lang="[websvn:language_code]"> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
<html> |
<head> |
<meta http-equiv="content-type" content="text/html;charset=[websvn:charset]"> |
<link href="[websvn:locwebsvnhttp]/templates/BlueGrey/styles.css" rel="stylesheet" media="screen"> |
<!--[if lt IE 7]> |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/BlueGrey/png.js"></script> |
<![endif]--> |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/BlueGrey/collapse.js"></script> |
<title> |
WebSVN |
[websvn-test:repname] |
– [websvn:repname] |
- [websvn:repname] |
[websvn-endtest] |
[websvn-test:error] |
– ERROR |
[websvn-else] |
[websvn-test:action] |
– [websvn:action] |
- [websvn:action] |
[websvn-endtest] |
[websvn-test:rev2] |
[websvn-test:safepath2] |
– [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2] |
[websvn-test:path2] |
- [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2] |
[websvn-else] |
– [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2] |
- [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2] |
[websvn-endtest] |
[websvn-else] |
[websvn-test:rev] |
– [lang:REV] [websvn:rev] |
- [lang:REV] [websvn:rev] |
[websvn-endtest] |
[websvn-endtest] |
[websvn-test:safepath] |
– [websvn:safepath] |
[websvn-test:path] |
- [websvn:safepath] |
[websvn-endtest] |
[websvn-endtest] |
</title> |
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/> |
<meta http-equiv="generator" content="WebSVN [websvn:version]"/> <!-- leave this for stats --> |
[websvn-test:blockrobots] |
<meta name="robots" content="noindex,nofollow"/> |
<script type="text/javascript"> |
function checkCB(chBox) |
{ |
count = 0 |
first = null |
f = chBox.form |
for (i = 0 ; i < f.elements.length ; i++) |
if (f.elements[i].type == 'checkbox' && f.elements[i].checked) |
{ |
if (first == null && f.elements[i] != chBox) |
first = f.elements[i] |
count += 1 |
} |
if (count > 2) |
{ |
first.checked = false |
count -= 1 |
} |
} |
[websvn-test:opentree] |
expandonload = true |
[websvn-endtest] |
<link rel="shortcut icon" type="image/x-icon" href="[websvn:locwebsvnhttp]/templates/BlueGrey/images/favicon.ico"/> |
<link type="text/css" href="[websvn:locwebsvnhttp]/templates/BlueGrey/styles.css" rel="stylesheet" media="screen"/> |
[websvn-test:rssurl] |
<link rel="alternate" type="application/rss+xml" title="WebSVN RSS" href="[websvn:rssurl]"/> |
</script> |
[websvn-test:curdirrsslink] |
<link rel="alternate" type="application/rss+xml" title="WebSVN RSS" href="[websvn:curdirrsshref]"> |
[websvn-endtest] |
<!--[if lt IE 7]> |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/ie-png-transparency.js"></script> |
<![endif]--> |
</head> |
<body id="[websvn:template]"> |
<div id="header"> |
<table border="0"> |
<body> |
<table width="100%" border="0"> |
<tr> |
<td width="33%"> </td> |
<td width="33%" align="center"><a href="[websvn:indexurl]" title="[lang:PROJECTS]"><img style="border: 0; width: 272px; height: 64px;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/websvn.png" alt="WebSVN" /></a></td> |
<td width="33%"><div style="float: right"> |
[websvn:language_form][websvn:language_select][websvn:language_submit][websvn:language_endform] |
[websvn:template_form][websvn:template_select][websvn:template_submit][websvn:template_endform] |
</div></td> |
<td width="33%" align="center"><a href="http://subversion.tigris.org/"><img style="border: 0; width: 468px; height: 64px;" src="[websvn:locwebsvnhttp]/templates/BlueGrey/subversion.png" alt="Subversion" /></a></td> |
<td width="33%"><div style="float: right">[websvn:lang_form][websvn:lang_select][websvn:lang_submit][websvn:lang_endform]</div></td> |
</tr> |
</table> |
</div> |
<div id="content"> |
<hr /> |
/WebSVN/templates/BlueGrey/index.tmpl |
---|
1,69 → 1,26 |
[websvn-test:error] |
<div id="error">[websvn:error]</div> |
[websvn-else] |
<table> |
[websvn-test:showlastmod] |
<thead><tr><th colspan="4">[lang:PROJECTS]</th></tr></thead> |
[websvn-else] |
<thead><tr><th>[lang:PROJECTS]</th></tr></thead> |
[websvn-endtest] |
<p> |
[websvn-test:flatview] |
<table align="center" cellspacing="0" cellpadding="0" width="50%"> |
<tr><th align="center" colspan=2 class="HdrClmnEnd">[lang:PROJECTS]</th></tr> |
[websvn-startlisting] |
[websvn-test:groupid] |
[websvn-else] |
<tr class="row[websvn:rowparity]"> |
<td class="project"><a href="[websvn:projecturl]">[websvn:projectname]</a></td> |
[websvn-test:showlastmod] |
<td>[lang:REV] [websvn:revision]</td> |
[websvn-test:showageinsteadofdate] |
<td title="[websvn:date]">[websvn:age]</td> |
[websvn-else] |
<td title="[websvn:age]">[websvn:date]</td> |
[websvn-endtest] |
<td>[websvn:author]</td> |
[websvn-endtest] |
<tr><td class="row[websvn:rowparity]"><img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/repo.png" alt="[FOLDER]"> [websvn:projlink]</td> |
</tr> |
[websvn-endtest] |
[websvn-endlisting] |
</table> |
[websvn-else] |
<table align="center" cellspacing=0 cellpadding=0 width="50%"> |
<tr><th align="left" colspan=2 class="HdrClmnEnd">[lang:PROJECTS]</th></tr> |
<td> |
[websvn-startlisting] |
[websvn-test:groupid] |
[websvn-test:showlastmod] |
<tr><th onclick="toggleGroup('[websvn:groupname]');" colspan="4">[websvn:groupname]</th></tr> |
[websvn-test:isprojlink] |
<div class="row[websvn:rowparity]"><img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/repo.png" alt="[FOLDER]"> [websvn:listitem]</div> |
[websvn-else] |
<tr><th onclick="toggleGroup('[websvn:groupname]');">[websvn:groupname]</th></tr> |
[websvn:listitem] |
[websvn-endtest] |
[websvn-else] |
<tr title="[websvn:groupname]" class="row[websvn:groupparity]"> |
[websvn-test:groupname] |
<td class="project group"><a href="[websvn:projecturl]">[websvn:projectname]</a></td> |
[websvn-else] |
<td class="project"><a href="[websvn:projecturl]">[websvn:projectname]</a></td> |
[websvn-endtest] |
[websvn-test:showlastmod] |
<td>[lang:REV] [websvn:revision]</td> |
[websvn-test:showageinsteadofdate] |
<td title="[websvn:date]">[websvn:age]</td> |
[websvn-else] |
<td title="[websvn:age]">[websvn:date]</td> |
[websvn-endtest] |
<td>[websvn:author]</td> |
[websvn-endtest] |
[websvn-endlisting] |
</td> |
</tr> |
[websvn-endtest] |
[websvn-endlisting] |
[websvn-endtest] |
</table> |
[websvn-test:treeview] |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/jquery.min.1.9.1.js"></script> |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/javascript/collapsible.js"></script> |
[websvn-test:opentree] |
[websvn-else] |
<script type="text/javascript"> |
//<![CDATA[ |
collapseAllGroups(); |
//]]> |
</script> |
[websvn-endtest] |
[websvn-endtest] |
[websvn-endtest] |
<hr /> |
/WebSVN/templates/BlueGrey/log.tmpl |
---|
1,96 → 1,70 |
<h1>[websvn:repname]</h1> |
<div id="projects">[websvn:projects_form]<b>[lang:PROJECTS]:</b> [websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
[websvn-test:error] |
<div id="error">[websvn:error]</div> |
[websvn-else] |
<div id="revjump">[websvn:revision_form]<b>[lang:REV]:</b>[websvn:revision_input][websvn:revision_submit][websvn:revision_endform]</div> |
<div id="path_links">[websvn:path_links_root_config]/[websvn:path_links]</div> |
<div id="nav"> |
<table cellspacing="0" cellpadding="0" border="0" width="100%"> |
<tr> |
<td align="left"><h1>[websvn:repname] - [lang:REV] [websvn:rev]</h1></td> |
<td align="right"><b>[lang:PROJECTS]:</b> [websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</td> |
</tr> |
</table> |
[websvn:curdirlinks]<p> |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink] – |
[websvn:goyoungestlink]<p> |
[websvn-endtest] |
[websvn:changeslink] – |
[websvn-test:filedetaillink] |
[websvn:filedetaillink] – |
[websvn:blamelink] – |
[websvn:difflink] |
<hr> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn:directorylink] |
[websvn-endtest] |
[websvn-test:clientrooturl] |
– <a href="[websvn:clientrooturl][websvn:path]">SVN</a> |
[websvn-endtest] |
[websvn-test:rsslink] |
– <a href="[websvn:rssurl]"><img src="[websvn:locwebsvnhttp]/templates/BlueGrey/images/rss.gif" width="27" height="15" alt="[lang:RSSFEED]"/></a> |
[websvn-endtest] |
</div> |
[websvn-test:warning] |
<div id="warning">[websvn:warning]</div> |
[websvn-else] |
<center> |
[websvn:logsearch_form] |
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox] [lang:SHOWALL]:[websvn:logsearch_showall] |
<b>[lang:FILTER]</b><p> |
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox] |
[websvn:logsearch_submit] |
[websvn-test:logsearch_clearloglink] |
<br/>[websvn:logsearch_clearloglink] |
<p><font size="-1">[websvn:logsearch_clearloglink]</font><p> |
[websvn-endtest] |
[websvn:logsearch_endform] |
</center> |
[websvn-test:logsearch_nomatches] |
<p>[lang:NORESULTS]</p> |
<center>[lang:NORESULTS]</center> |
[websvn-endtest] |
[websvn-test:logsearch_nomorematches] |
<p>[lang:NOMORERESULTS]</p> |
[websvn-test:error] |
<center>[websvn:error]</center> |
[websvn-endtest] |
[websvn:logsearch_moreresultslink] |
<span id="logpagelinks">[websvn:pagelinks]</span> [websvn:showalllink] |
</center> |
[websvn-test:logsearch_resultsfound] |
[websvn:compare_form] |
<table cellpadding="2" cellspacing="0"> |
<thead> |
<table cellpadding="2px" cellspacing="0" width="100%"> |
<tr> |
<th>[lang:REV]</th> |
<th>[lang:AGE]</th> |
<th>[lang:AUTHOR]</th> |
<th>[lang:PATH]</th> |
<th>[lang:LOGMSG]</th> |
<th>[lang:DIFF]</th> |
[websvn-test:showchanges] |
<th>[lang:CHANGES]</th> |
[websvn-endtest] |
<th class="HdrClmn">[lang:REV]</th> |
<th class="HdrClmn">[lang:PATH]</th> |
<th class="HdrClmn">[lang:AUTHOR]</th> |
<th class="HdrClmn">[lang:AGE]</th> |
<th class="HdrClmnEnd">[lang:LOGMSG]</th> |
</tr> |
</thead> |
[websvn-startlisting] |
<tr class="row[websvn:rowparity]"> |
<td style="white-space: nowrap;">[websvn:compare_box][websvn:revlink]</td> |
[websvn-test:showageinsteadofdate] |
<td title="[websvn:revdate]">[websvn:revage]</td> |
[websvn-else] |
<td title="[websvn:revage]">[websvn:revdate]</td> |
[websvn-endtest] |
<td>[websvn:revauthor]</td> |
<td>[websvn:revpathlink]</td> |
<td valign="top">[websvn:revlog]</td> |
<td><a href="[websvn:compareurl]" title="[lang:DIFFPREV]">[lang:DIFF]</a></td> |
[websvn-test:showchanges] |
<td class="changes"><table> |
[websvn-test:revadded] |
<tr><td>A</td><td>[websvn:revadded]</td></tr> |
[websvn-endtest] |
[websvn-test:revdeleted] |
<tr><td>D</td><td>[websvn:revdeleted]</td></tr> |
[websvn-endtest] |
[websvn-test:revmodified] |
<tr><td>M</td><td>[websvn:revmodified]</td></tr> |
[websvn-endtest] |
</table></td> |
[websvn-endtest] |
<tr> |
<td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td> |
<td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revpathlink]</td> |
<td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revauthor]</td> |
<td style="border-right: 1px solid black" valign="top" class="row[websvn:rowparity]">[websvn:revage]</td> |
<td valign="top" class="row[websvn:rowparity]">[websvn:revlog]</td> |
</tr> |
[websvn-endlisting] |
</table> |
<center>[websvn:compare_submit]</center> |
<p> |
[websvn:compare_submit] |
[websvn:compare_endform] |
[websvn-endtest] |
[websvn-test:logsearch_nomorematches] |
<p><center>[lang:NOMORERESULTS]</center> |
[websvn-endtest] |
<p><center>[websvn:logsearch_moreresultslink]</center> |
<hr> |
<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center> |
[websvn-endtest] |
/WebSVN/templates/BlueGrey/png.js |
---|
0,0 → 1,39 |
// correctly handle PNG transparency in Win IE 5.5 or higher. |
function correctPNG() |
{ |
for(var i = 0; i < document.images.length; i++) |
{ |
var img = document.images[i] |
var imgName = img.src.toUpperCase() |
if (imgName.substring(imgName.length-3, imgName.length) == "PNG") |
{ |
var imgID = (img.id) ? "id='" + img.id + "' " : "" |
var imgClass = (img.className) ? "class='" + img.className + "' " : "" |
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' " |
var imgStyle = "display:inline-block;" + img.style.cssText |
var imgAttribs = img.attributes; |
for (var j=0; j<imgAttribs.length; j++) |
{ |
var imgAttrib = imgAttribs[j]; |
if (imgAttrib.nodeName == "align") |
{ |
if (imgAttrib.nodeValue == "left") imgStyle = "float:left;" + imgStyle |
if (imgAttrib.nodeValue == "right") imgStyle = "float:right;" + imgStyle |
break |
} |
} |
var strNewHTML = "<span " + imgID + imgClass + imgTitle |
strNewHTML += " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";" |
strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" |
strNewHTML += "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" |
img.outerHTML = strNewHTML |
i = i-1 |
} |
} |
} |
var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32"; |
if (supported) |
window.attachEvent("onload", correctPNG); |
/WebSVN/templates/BlueGrey/styles.css |
---|
1,401 → 1,131 |
/* @group General Styles */ |
body { |
margin: 0; |
font-family: Verdana, Helvetica, Arial, sans-serif; |
font-size: 10pt; |
body |
{ |
font-family: verdana, sans-serif; |
color: black; |
background-color: white; |
background-color: white |
} |
h1 { |
body * |
{ |
font-size: 10pt; |
} |
h1 |
{ |
font-size: 150%; |
margin: 0; |
float: left; |
} |
h2 { |
h2 |
{ |
font-size: 125%; |
} |
h3 { |
font-size: 105%; |
hr |
{ |
border: 0px; |
padding: 0px; |
height: 1px; |
background-color: #808080 |
} |
a:link, a:visited { |
a:link, a:visited |
{ |
color: #004080; |
text-decoration: none; |
} |
a:hover, a:active { |
a:hover, a:active |
{ |
text-decoration: underline; |
} |
thead th a:link, thead th a:visited { |
.HdrClmn, |
.HdrClmnEnd |
{ |
border: black 1px solid; |
font-weight: bold; |
color: white; |
background-color: #809cc8 |
} |
a img { |
border: none; |
} |
table { |
table |
{ |
border-width: 0px; |
border-collapse: collapse; |
width: 100%; |
} |
pre { |
padding: 4px; |
background-color: #eee; |
border: solid 1px #ccc; |
} |
code { |
white-space: pre-wrap; |
} |
/* Semantic sections */ |
#header { |
padding: 5px 0; |
border-bottom: 1px solid #555; |
} |
#projects, #revjump { |
float: right; |
} |
#revjump, #error { |
clear: both; |
} |
#path_links { |
clear: left; |
padding-top: 5px; |
} |
#nav { |
margin: 10px 0; |
} |
#content { |
margin: 10px; |
} |
#content table { |
border: 1px solid #555; |
margin: 10px 0; |
} |
#content th, #content td { |
padding: 0 3px; |
} |
#content thead th { |
border: 1px solid #555; |
font-weight: bold; |
color: white; |
background-color: #809cc8; |
padding: 1px 4px 2px 1px; |
} |
#content thead th.path { |
text-align: left; |
width: 60%; |
} |
#content thead th.last_mod { |
width: 25%; |
} |
#content thead th.view_log, |
#content thead th.download, |
#content thead th.rss { |
width: 5%; |
} |
.row0, .row1 { |
.row0, |
.row1 |
{ |
height:22px; |
border-width: 0px; |
} |
.row0 img, .row1 img { |
.row0 img, |
.row1 img { |
padding: 0px; |
margin: 0px; |
vertical-align: middle; |
} |
.row0 { |
.row0 |
{ |
background-color: #f0f0f0; |
} |
.row1 { |
.row1 |
{ |
background-color: #e0e0e0; |
} |
tr.row0 th, tr.row1 th, #content td { |
font-weight: normal; |
text-align: left; |
vertical-align: top; |
border-right: 1px solid #555; |
} |
tr.row0 th { |
.CatClmn0 |
{ |
border-right: black 1px solid; |
background-color: #e0e0ff |
} |
tr.row1 th { |
background-color: #d0d0ee; |
} |
th.row1 { |
background-color: #d0d0ee; |
border-right: 1px solid #555; |
} |
div.clearer { |
clear: both; |
height: 0; |
} |
#footer { |
padding: 3px; |
text-align: center; |
font-size: 80%; |
font-weight: bold; |
background-color: #e5e9fe; |
border: solid #555; |
border-width: 1px 0; |
} |
div#error, div#warning { |
font-weight: bold; |
display: table; |
padding: 5px; |
margin: 10px auto; |
border: 1px solid; |
} |
div#error { |
border-color: #b2595a; |
background-color: #ffe2e2; |
} |
div#warning { |
border-color: #b2ac00; |
background-color: #ffd; |
} |
/* @end */ |
/* @group blame.tmpl */ |
#blame #content table { |
width: 100%; |
} |
#blame #content table tbody th { |
font-weight: normal; |
text-align: right; |
} |
#blame #content table tbody .light th { |
.CatClmn1 |
{ |
border-right: black 1px solid; |
background-color: #e0e0ff; |
background-color: #d0d0ee |
} |
#blame #content table tbody .dark th { |
border-right: black 1px solid; |
background-color: #d0d0ee; |
table.outline |
{ |
border-collapse:collapse; |
border: 1px black solid; |
} |
div.blame-popup { |
position: absolute; |
text-align: left; |
background-color: white; |
border: solid 2px #809cc8; |
padding: 5px; |
max-width: 600px; |
} |
div.blame-popup .date { |
font-weight: bold; |
} |
/* @end */ |
/* @group compare.tmpl */ |
#compare #params, #params td { |
border-width: 0; |
} |
#compare #params td { |
vertical-align: middle; |
} |
#compare .comparison { |
width: 100%; |
margin: 20px 0 10px; |
} |
#compare .comparison tbody th { |
text-align: center; |
font-weight: bold; |
border: 1px solid #555; |
} |
#compare .comparison td { |
font-family: monospace; |
font-size: 90%; |
white-space: pre-wrap; |
} |
/* Whitespace hacks for IE 4-7 */ |
* html #compare .comparison td { |
white-space: pre; |
} |
*:first-child+html #compare .comparison td { |
white-space: pre; |
} |
/* @end */ |
/* @group diff.tmpl */ |
#diff td { |
font-size: 90%; |
} |
#diff td.lineno { |
text-align: right; |
vertical-align: top; |
} |
td.diffdeleted { |
td.diffdeleted |
{ |
font-size: 11px; |
background-color: #ff8888; |
} |
td.diffchanged { |
td.diffchanged |
{ |
font-size: 11px; |
background-color: #ffff88; |
} |
td.diffchanged ins { |
background-color: #88ff88; |
text-decoration: none; |
} |
td.diffchanged del { |
background-color: #ff8888; |
text-decoration: none; |
} |
td.diffadded { |
td.diffadded |
{ |
font-size: 11px; |
background-color: #88ff88; |
} |
td.diff { |
background-color: #f0f0f0; |
td.diff |
{ |
font-size: 11px; |
background-color: #F0F0F0; |
} |
div.newpath { |
div.newpath |
{ |
padding: 10px; |
background-color: #d0d0ee; |
background-color: #d0d0ee |
} |
div.difflines { |
div.difflines |
{ |
} |
#diff th.row1 { |
border: solid 1px #555; |
} |
.plusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #D0D0D0; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; } |
.minusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #809cc8; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; } |
/* @end */ |
.groupname { padding-left: 0px; text-indent: -25px; margin: 3px 0 3px 0;} |
.switchcontent { margin: 3px 0 0 20px; } |
.project { padding: 2px; } |
/* @group directory.tmpl */ |
#directory table#listing tbody tr { |
height: 22px; |
} |
#directory td.age, #directory td.date, #directory td.rev { |
border-right-width: 0; |
} |
img.icon { |
vertical-align: middle; |
} |
/* @end */ |
/* @group file.tmpl */ |
#file #listing { |
font-size: 90%; |
border: 1px solid #999; |
padding: 5px; |
background-color: #f0f0f0; |
} |
/* @end */ |
/* @group index.tmpl */ |
#index #content table { |
margin: 0 auto; |
} |
#index #content th { |
padding: 4px; |
} |
#index #content td { |
padding: 0px; |
vertical-align: middle; |
padding-right: 6px; |
border-width: 0; |
text-align: right; |
} |
#index #content td.project { |
text-align: left; |
} |
#index #content td a { |
background: url(images/repo.png) no-repeat 3px 3px; |
width: 100%; |
display: block; |
padding-top: 6px; |
padding-bottom: 6px; |
} |
#index #content td a, #index #content td.group, #index #content tbody th { |
padding-left: 32px; |
text-align: left; |
} |
#index #content tbody th { |
background-color: #D0D0D0; |
text-decoration: underline; |
} |
.groupname { |
font-weight: bold; |
padding-left: 0px; |
text-indent: 4px; |
margin: 3px 0 3px 0; |
} |
.switchcontent { |
margin: 3px 0 0 20px; |
} |
/* @end */ |
/* @group log.tmpl */ |
#logpagelinks > * { |
padding: 0 3px; |
} |
#content td.changes table { |
margin: 0; |
} |
#content td.changes * { |
border-width: 0; |
} |
/* @end */ |
/* @group revision.tmpl */ |
#revision del { |
color: #555; |
text-decoration: none; |
} |
#revision a.notinpath { |
color: #8d0208; |
} |
/* @end */ |
code |
{ |
white-space: pre-wrap; |
} |
/WebSVN/templates/BlueGrey/filecpp.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/filehtml.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/filejava.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/filem.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/filepy.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/e-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/file.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/filec.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/fileh.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/folder.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/i-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/l-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/t-node.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/files.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/folder-open.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/repo.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/subversion.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/BlueGrey/xml.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Standard/blame.tmpl |
---|
0,0 → 1,27 |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h2>[websvn:repname]</h2> |
[websvn:curdirlinks] - <h2> [lang:BLAMEFOR] [websvn:rev]</h2> |
<p> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<table border="1" class="blame" width="100%"> |
<tr> |
<th style="padding-bottom: 5px" align="left"><b>[lang:LINENO]</b></th> |
<th style="padding-bottom: 5px" align="left"><b>[lang:REV]</b></th> |
<th style="padding-bottom: 5px" align="left"><b>[lang:AUTHOR]</b></th> |
<th style="padding-bottom: 5px" align="left"><b>[lang:LINE]</b></th> |
</tr> |
[websvn-startlisting] |
<tr> |
<td>[websvn:lineno]</td> |
<td>[websvn:revision]</td> |
<td>[websvn:author]</td> |
<td>[websvn:line]</td> |
</tr> |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
/WebSVN/templates/Standard/collapse.js |
---|
0,0 → 1,169 |
/*********************************************** |
* Switch Content script- © Dynamic Drive (www.dynamicdrive.com) |
* This notice must stay intact for legal use. Last updated April 2nd, 2005. |
* Visit http://www.dynamicdrive.com/ for full source code |
***********************************************/ |
var enablepersist="on" // Enable saving state of content structure using session cookies? (on/off) |
var collapseprevious="yes" // Collapse previously open content when opening present? (yes/no) |
var contractsymbol='<div class="minusbox">-</div>' // HTML for contract symbol. For image, use: <img src="${prefix}whatever.gif"> |
var expandsymbol='<div class="plusbox">+</div>' // HTML for expand symbol. |
var expandonload=false |
if (document.getElementById) |
{ |
document.write('<style type="text/css">') |
document.write('.switchcontent{display:none;}') |
document.write('</style>') |
} |
function getElementbyClass(rootobj, classname) |
{ |
var temparray=new Array() |
var inc=0 |
for (i=0; i<rootobj.length; i++) |
{ |
if (rootobj[i].className==classname) |
temparray[inc++]=rootobj[i] |
} |
return temparray |
} |
function sweeptoggle(ec) |
{ |
var thestate=(ec=="expand")? "block" : "none" |
var inc=0 |
while (ccollect[inc]) |
{ |
ccollect[inc].style.display=thestate |
inc++ |
} |
revivestatus() |
collapseprevious = (ec=="expand")? "no" : "yes" |
} |
function contractcontent(omit) |
{ |
var inc=0 |
while (ccollect[inc]) |
{ |
if (ccollect[inc].id!=omit) |
ccollect[inc].style.display="none" |
inc++ |
} |
} |
function expandcontent(curobj, cid) |
{ |
var spantags=curobj.getElementsByTagName("SPAN") |
var showstateobj=getElementbyClass(spantags, "showstate") |
if (ccollect.length>0) |
{ |
if (collapseprevious=="yes") |
contractcontent(cid) |
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none" |
if (showstateobj.length>0) //if "showstate" span exists in header |
{ |
if (collapseprevious=="no") |
showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbol |
else |
revivestatus() |
} |
} |
} |
function revivecontent() |
{ |
contractcontent("omitnothing") |
selectedItem=getselectedItem() |
selectedComponents=selectedItem.split("|") |
collapseprevious=selectedComponents[0] |
for (i=1; i<selectedComponents.length-1; i++) |
document.getElementById(selectedComponents[i]).style.display="block" |
} |
function revivestatus() |
{ |
var inc=0 |
while (statecollect[inc]) |
{ |
if (ccollect[inc].style.display=="block") |
statecollect[inc].innerHTML=contractsymbol |
else |
statecollect[inc].innerHTML=expandsymbol |
inc++ |
} |
} |
function get_cookie(Name) |
{ |
var search = Name + "=" |
var returnvalue = ""; |
if (document.cookie.length > 0) |
{ |
offset = document.cookie.indexOf(search) |
if (offset != -1) |
{ |
offset += search.length |
end = document.cookie.indexOf(";", offset); |
if (end == -1) end = document.cookie.length; |
returnvalue=unescape(document.cookie.substring(offset, end)) |
} |
} |
return returnvalue; |
} |
function getselectedItem() |
{ |
if (get_cookie(window.location.pathname) != "") |
{ |
selectedItem=get_cookie(window.location.pathname) |
return selectedItem |
} |
else |
return "" |
} |
function saveswitchstate() |
{ |
var inc=0, selectedItem=collapseprevious+"|" |
while (ccollect[inc]) |
{ |
if (ccollect[inc].style.display=="block") |
selectedItem+=ccollect[inc].id+"|" |
inc++ |
} |
document.cookie=window.location.pathname+"="+selectedItem |
} |
function do_onload() |
{ |
uniqueidn=window.location.pathname+"firsttimeload" |
var alltags=document.all? document.all : document.getElementsByTagName("*") |
ccollect=getElementbyClass(alltags, "switchcontent") |
statecollect=getElementbyClass(alltags, "showstate") |
if (enablepersist=="on" && ccollect.length>0) |
{ |
document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0" |
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load |
if (!firsttimeload) |
revivecontent() |
} |
if (ccollect.length>0 && statecollect.length>0) |
revivestatus() |
if (expandonload) |
sweeptoggle('expand') |
} |
if (window.addEventListener) |
window.addEventListener("load", do_onload, false) |
else if (window.attachEvent) |
window.attachEvent("onload", do_onload) |
else if (document.getElementById) |
window.onload=do_onload |
if (enablepersist=="on" && document.getElementById) |
window.onunload=saveswitchstate |
/WebSVN/templates/Standard/compare.tmpl |
---|
0,0 → 1,66 |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h2>[websvn:repname]</h2> |
<p> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<center> |
[websvn:compare_form] |
<table> |
<tr><td> |
<table class="outlined"> |
<tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr> |
<tr><td>[lang:WITHPATH] </td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr> |
</table> |
</td><tr> |
<tr><td align="center">[websvn:compare_submit]</td></tr> |
</table> |
[websvn:compare_endform] |
</center> |
<hr> |
[websvn-test:success] |
[lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b> |
<p> |
[websvn:revlink] |
[websvn-endtest] |
<p> |
[websvn-startlisting] |
[websvn-test:newpath] |
<p> |
<div class="newpath"> |
<b>[websvn:newpath]</b><br> |
[websvn-endtest] |
[websvn-test:info] |
[websvn:info]<br> |
[websvn-endtest] |
[websvn-test:difflines] |
<div class="difflines"> |
<p> |
[websvn:difflines]<br> |
<table class="diff" cellspacing="0"> |
[websvn-endtest] |
[websvn-test:diffclass] |
<tr><td class="[websvn:diffclass]">[websvn:line]</td></tr> |
[websvn-endtest] |
[websvn-test:enddifflines] |
</table> |
</div> |
[websvn-endtest] |
[websvn-test:endpath] |
</div> |
<p><hr> |
[websvn-endtest] |
[websvn-test:properties] |
<p><i>[lang:PROPCHANGES]</i><p> |
[websvn-endtest] |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
/WebSVN/templates/Standard/diff.tmpl |
---|
0,0 → 1,40 |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn-test:noprev] |
[lang:NOPREVREV] |
[websvn-else] |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h2>[websvn:repname]</h2> |
[websvn:curdirlinks] - <h2>[lang:DIFFREVS] <b>[websvn:rev2]</b> [lang:AND] <b>[websvn:rev1]</b></h2> |
<p> |
<p><center> |
[websvn:showcompactlink] |
[websvn:showalllink] |
</center> |
<p> |
<table class="diff" width="100%"> |
<tr> |
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th> |
<th width="5"></th> |
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th> |
</tr> |
[websvn-startlisting] |
[websvn-test:rev1lineno] |
<tr> |
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td> |
<td width="5"></td> |
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td> |
<tr> |
[websvn-else] |
<tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td> |
<td width="5"></td> |
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr> |
[websvn-endtest] |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
[websvn-endtest] |
/WebSVN/templates/Standard/directory.tmpl |
---|
0,0 → 1,117 |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h1>[websvn:repname]</h1> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn-test:restricted] |
[websvn-else] |
<p><b>[lang:PATH]:</b> [websvn:path] |
<br><b>[lang:REV]:</b> [websvn:rev] |
[websvn-test:goyoungestlink] |
- [websvn:goyoungestlink] |
[websvn-endtest] |
<br><b>[lang:LASTMOD]:</b> [lang:REV] [websvn:lastchangedrev] - [websvn:author] - [websvn:date] |
<br><b>[lang:LOGMSG]:</b><br> |
[websvn:log] |
<p> |
[websvn-test:hidechanges] |
<p>[websvn:showchangeslink] |
[websvn-endtest] |
[websvn-test:showchanges] |
<p><b>[lang:CHANGES]:</b><br> |
<p>[websvn:hidechangeslink] |
<p> |
<center> |
<table border=1 class="bordered" cellpadding=4> |
<tr> |
<th><center><b>[lang:NEWFILES]</b></center></th> |
<th><center><b>[lang:CHANGEDFILES]</b></center></th> |
<th><center><b>[lang:DELETEDFILES]</b></center></th> |
</tr> |
<tr> |
<td valign="top"> |
[websvn-test:newfilesbr] |
[websvn:newfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
<td valign="top"> |
[websvn-test:changedfilesbr] |
[websvn:changedfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
<td valign="top"> |
[websvn-test:deletedfilesbr] |
[websvn:deletedfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
</tr> |
</table> |
</center> |
[websvn-endtest] |
[websvn-endtest] |
[websvn-defineicons] |
dir= |
diropen= |
i-node= |
t-node= |
l-node= |
e-node= |
*= |
[websvn-enddefineicons] |
<p><hr> |
<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink] |
[websvn-test:curdircomplink] |
- [websvn:curdircomplink] |
[websvn-endtest] |
[websvn-test:curdirdllink] |
- [websvn:curdirdllink] |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
- [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a> |
[websvn-endtest] |
<p> |
[websvn:compare_form] |
<table class="outlined" width="100%" cellpadding=2> |
<tr> |
<th width="100%"><b>[lang:PATH]</b></th> |
<th><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th> |
[websvn-test:allowdownload] |
<th><b>[lang:TARBALL]</b></th> |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
<th><b>[lang:RSSFEED]</b></th> |
[websvn-endtest] |
</tr> |
[websvn-startlisting] |
<tr> |
<td class="[websvn:rowparity]"> |
[websvn:compare_box] |
[websvn-treenode] |
[websvn:filelink] |
</td> |
<td class="[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td> |
[websvn-test:allowdownload] |
<td class="[websvn:rowparity]">[websvn:fileviewdllink]</td> |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
<td class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td> |
[websvn-endtest] |
</tr> |
[websvn-endlisting] |
</table> |
<p> |
[websvn:compare_submit] |
[websvn:compare_endform] |
[websvn-endtest] |
/WebSVN/templates/Standard/file.tmpl |
---|
0,0 → 1,18 |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h2>[websvn:repname]</h2> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn:curdirlinks] - [lang:REV] [websvn:rev]<p> |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink]<p> |
[websvn-endtest] |
[websvn:prevdifflink] - [websvn:blamelink] |
<p> |
<table width="100%" border=0><tr><td> |
[websvn-getlisting] |
</td></tr></table> |
[websvn-endtest] |
/WebSVN/templates/Standard/footer.tmpl |
---|
0,0 → 1,3 |
<p><center><font size="-1"><i><b>[lang:POWERED] v[websvn:version]</b></i></font></center> |
</body> |
</html> |
/WebSVN/templates/Standard/header.tmpl |
---|
0,0 → 1,73 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
<html> |
<head> |
<meta http-equiv="content-type" content="text/html;charset=[websvn:charset]"> |
<link href="[websvn:locwebsvnhttp]/templates/Standard/styles.css" rel="stylesheet" media="screen"> |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/Standard/collapse.js"></script> |
<script type="text/javascript"> |
function checkCB(chBox) |
{ |
count = 0 |
first = null |
f = chBox.form |
for (i = 0 ; i < f.elements.length ; i++) |
if (f.elements[i].type == 'checkbox' && f.elements[i].checked) |
{ |
if (first == null && f.elements[i] != chBox) |
first = f.elements[i] |
count += 1 |
} |
if (count > 2) |
{ |
first.checked = false |
count -= 1 |
} |
[websvn-test:opentree] |
expandonload = true |
[websvn-endtest] |
} |
</script> |
<title> |
WebSVN |
[websvn-test:repname] |
- [websvn:repname] |
[websvn-endtest] |
[websvn-test:action] |
- [websvn:action] |
[websvn-endtest] |
[websvn-test:rev2] |
[websvn-test:path2] |
- [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2] |
[websvn-else] |
- [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2] |
[websvn-endtest] |
[websvn-else] |
[websvn-test:rev] |
- [lang:REV] [websvn:rev] |
[websvn-endtest] |
[websvn-endtest] |
[websvn-test:path] |
- [websvn:safepath] |
[websvn-endtest] |
</title> |
[websvn-test:curdirrsslink] |
<link rel="alternate" type="application/rss+xml" title="WebSVN RSS" href="[websvn:curdirrsshref]"> |
[websvn-endtest] |
</head> |
<body> |
<table width="100%" border="0"> |
<tr> |
<td width="33%"> </td> |
<td width="33%" align="center"><h1>[lang:SERVER]</h1></td> |
<td width="33%"><div style="float: right">[websvn:lang_form][websvn:lang_select][websvn:lang_submit][websvn:lang_endform]</div></td> |
</tr> |
</table> |
<hr> |
<p> |
/WebSVN/templates/Standard/index.tmpl |
---|
0,0 → 1,35 |
[websvn-test:flatview] |
<table border=0 cellspacing=0 cellpadding=0 align="center"> |
<tr> |
<td align="center"> |
<br><h2>[lang:PROJECTS]:</h2> |
<table border=0> |
<tr><td><ul> |
[websvn-startlisting] |
<li><strong>[websvn:projlink]</strong></li> |
[websvn-endlisting] |
</ul></td></tr> |
</table> |
</td> |
</tr> |
</table> |
[websvn-else] |
<table border=0 cellspacing=0 cellpadding=0 align="center"> |
<tr> |
<td align="center"> |
<br><h2>[lang:PROJECTS]:</h2> |
<table border=0> |
<tr><td> |
[websvn-startlisting] |
[websvn-test:isprojlink] |
<div style="padding: 3px">[websvn:listitem]</div> |
[websvn-else] |
[websvn:listitem] |
[websvn-endtest] |
[websvn-endlisting] |
</td></tr> |
</table> |
</td> |
</tr> |
</table> |
[websvn-endtest] |
/WebSVN/templates/Standard/log.tmpl |
---|
0,0 → 1,64 |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h2>[websvn:repname] - [lang:REV] [websvn:rev]</h2> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn:curdirlinks]<p> |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink]<p> |
[websvn-endtest] |
<center> |
[websvn:logsearch_form] |
<b>[lang:FILTER]</b><p> |
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox] |
[websvn:logsearch_submit] |
[websvn-test:logsearch_clearloglink] |
<p><font size="-1">[websvn:logsearch_clearloglink]</font><p> |
[websvn-endtest] |
[websvn:logsearch_endform] |
</center> |
[websvn-test:logsearch_nomatches] |
<center>[lang:NORESULTS]</center> |
[websvn-endtest] |
[websvn-test:error] |
<center>[websvn:error]</center> |
[websvn-endtest] |
[websvn-test:logsearch_resultsfound] |
[websvn:compare_form] |
<table border=1 class="outlined" width="100%" cellpadding=2> |
<tr> |
<th>[lang:REV]</th> |
<th>[lang:PATH]</th> |
<th>[lang:AUTHOR]</th> |
<th>[lang:AGE]</th> |
<th>[lang:LOGMSG]</th> |
</tr> |
[websvn-startlisting] |
<tr> |
<td valign="top" class="[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revpathlink]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revauthor]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revage]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revlog]</td> |
</tr> |
[websvn-endlisting] |
</table> |
<p> |
[websvn:compare_submit] |
[websvn:compare_endform] |
[websvn-endtest] |
[websvn-test:logsearch_nomorematches] |
<p><center>[lang:NOMORERESULTS]</center> |
[websvn-endtest] |
<p><center>[websvn:logsearch_moreresultslink]</center> |
<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center> |
[websvn-endtest] |
/WebSVN/templates/Standard/styles.css |
---|
0,0 → 1,93 |
body |
{ |
font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif; |
background-color: white; |
margin: 20px; |
padding: 0px |
} |
h1 |
{ |
color: #99007E; |
font-size: 30px; |
font-weight: normal; |
font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif; |
text-decoration: none; |
} |
hr { color: #99007E; background-color: #99007E } |
.highlight { color: #99007E; font-style: italic; } |
table.bordered, table.outlined, table.blame |
{ |
border-collapse: collapse; |
border: solid 2px #99007E; |
} |
.bordered td, .bordered th |
{ |
border: solid 2px #99007E; |
} |
.outlined td |
{ |
padding: 0px 5px 0px 5px; |
} |
.outlined th, .blame th |
{ |
padding: 5px 5px 5px 5px; |
font-weight: bold; |
border: solid 2px #99007E; |
} |
.outlined td, .blame td |
{ |
padding: 1px 5px 1px 5px; |
border-right: solid 2px #99007E; |
border-bottom: solid 1px #F0F0F0; |
} |
td.diffdeleted |
{ |
font-size: 11px; |
background-color: red; |
} |
td.diffchanged |
{ |
font-size: 11px; |
background-color: yellow; |
} |
td.diffadded |
{ |
font-size: 11px; |
background-color: green; |
} |
td.diff |
{ |
font-size: 11px; |
background-color: #D0D0D0; |
} |
table.diff |
{ |
border-collapse: collapse; |
} |
div.newpath |
{ |
padding: 5px 5px 5px 5px; |
border: solid 2px #99007E; |
} |
.plusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #D0D0D0; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; } |
.minusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #99007E; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; } |
.groupname { padding-left: 0px; text-indent: -25px; margin: 3px 0 3px 0;} |
.switchcontent { margin: 3px 0 0 20px; } |
code { white-space: pre-wrap; } |
/WebSVN/templates/Standard/xml.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/StandardNG/collapse.js |
---|
0,0 → 1,169 |
/*********************************************** |
* Switch Content script- © Dynamic Drive (www.dynamicdrive.com) |
* This notice must stay intact for legal use. Last updated April 2nd, 2005. |
* Visit http://www.dynamicdrive.com/ for full source code |
***********************************************/ |
var enablepersist="on" // Enable saving state of content structure using session cookies? (on/off) |
var collapseprevious="yes" // Collapse previously open content when opening present? (yes/no) |
var contractsymbol='<div class="minusbox">-</div>' // HTML for contract symbol. For image, use: <img src="${prefix}whatever.gif"> |
var expandsymbol='<div class="plusbox">+</div>' // HTML for expand symbol. |
var expandonload=false |
if (document.getElementById) |
{ |
document.write('<style type="text/css">') |
document.write('.switchcontent{display:none;}') |
document.write('</style>') |
} |
function getElementbyClass(rootobj, classname) |
{ |
var temparray=new Array() |
var inc=0 |
for (i=0; i<rootobj.length; i++) |
{ |
if (rootobj[i].className==classname) |
temparray[inc++]=rootobj[i] |
} |
return temparray |
} |
function sweeptoggle(ec) |
{ |
var thestate=(ec=="expand")? "block" : "none" |
var inc=0 |
while (ccollect[inc]) |
{ |
ccollect[inc].style.display=thestate |
inc++ |
} |
revivestatus() |
collapseprevious = (ec=="expand")? "no" : "yes" |
} |
function contractcontent(omit) |
{ |
var inc=0 |
while (ccollect[inc]) |
{ |
if (ccollect[inc].id!=omit) |
ccollect[inc].style.display="none" |
inc++ |
} |
} |
function expandcontent(curobj, cid) |
{ |
var spantags=curobj.getElementsByTagName("SPAN") |
var showstateobj=getElementbyClass(spantags, "showstate") |
if (ccollect.length>0) |
{ |
if (collapseprevious=="yes") |
contractcontent(cid) |
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none" |
if (showstateobj.length>0) //if "showstate" span exists in header |
{ |
if (collapseprevious=="no") |
showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbol |
else |
revivestatus() |
} |
} |
} |
function revivecontent() |
{ |
contractcontent("omitnothing") |
selectedItem=getselectedItem() |
selectedComponents=selectedItem.split("|") |
collapseprevious=selectedComponents[0] |
for (i=1; i<selectedComponents.length-1; i++) |
document.getElementById(selectedComponents[i]).style.display="block" |
} |
function revivestatus() |
{ |
var inc=0 |
while (statecollect[inc]) |
{ |
if (ccollect[inc].style.display=="block") |
statecollect[inc].innerHTML=contractsymbol |
else |
statecollect[inc].innerHTML=expandsymbol |
inc++ |
} |
} |
function get_cookie(Name) |
{ |
var search = Name + "=" |
var returnvalue = ""; |
if (document.cookie.length > 0) |
{ |
offset = document.cookie.indexOf(search) |
if (offset != -1) |
{ |
offset += search.length |
end = document.cookie.indexOf(";", offset); |
if (end == -1) end = document.cookie.length; |
returnvalue=unescape(document.cookie.substring(offset, end)) |
} |
} |
return returnvalue; |
} |
function getselectedItem() |
{ |
if (get_cookie(window.location.pathname) != "") |
{ |
selectedItem=get_cookie(window.location.pathname) |
return selectedItem |
} |
else |
return "" |
} |
function saveswitchstate() |
{ |
var inc=0, selectedItem=collapseprevious+"|" |
while (ccollect[inc]) |
{ |
if (ccollect[inc].style.display=="block") |
selectedItem+=ccollect[inc].id+"|" |
inc++ |
} |
document.cookie=window.location.pathname+"="+selectedItem |
} |
function do_onload() |
{ |
uniqueidn=window.location.pathname+"firsttimeload" |
var alltags=document.all? document.all : document.getElementsByTagName("*") |
ccollect=getElementbyClass(alltags, "switchcontent") |
statecollect=getElementbyClass(alltags, "showstate") |
if (enablepersist=="on" && ccollect.length>0) |
{ |
document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0" |
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load |
if (!firsttimeload) |
revivecontent() |
} |
if (ccollect.length>0 && statecollect.length>0) |
revivestatus() |
if (expandonload) |
sweeptoggle('expand') |
} |
if (window.addEventListener) |
window.addEventListener("load", do_onload, false) |
else if (window.attachEvent) |
window.attachEvent("onload", do_onload) |
else if (document.getElementById) |
window.onload=do_onload |
if (enablepersist=="on" && document.getElementById) |
window.onunload=saveswitchstate |
/WebSVN/templates/StandardNG/diff.tmpl |
---|
0,0 → 1,37 |
[websvn-test:noprev] |
[lang:NOPREVREV] |
[websvn-else] |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h2>[websvn:repname]</h2> |
[websvn:curdirlinks] - <h2>[lang:DIFFREVS] <b>[websvn:rev2]</b> [lang:AND] <b>[websvn:rev1]</b></h2> |
<p> |
<p><center> |
[websvn:showcompactlink] |
[websvn:showalllink] |
</center> |
<p> |
<table class="diff" width="100%"> |
<tr> |
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th> |
<th width="5"></th> |
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th> |
</tr> |
[websvn-startlisting] |
[websvn-test:rev1lineno] |
<tr> |
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td> |
<td width="5"></td> |
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td> |
<tr> |
[websvn-else] |
<tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td> |
<td width="5"></td> |
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr> |
[websvn-endtest] |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
[websvn-endtest] |
/WebSVN/templates/StandardNG/ie7/ie7-base64.php |
---|
0,0 → 1,7 |
<?php |
$data = split(";", $_SERVER["REDIRECT_QUERY_STRING"]); |
$type = $data[0]; |
$data = split(",", $data[1]); |
header("Content-type: ".$type); |
echo base64_decode($data[1]); |
?> |
/WebSVN/templates/StandardNG/ie7/ie7-content.htc |
---|
0,0 → 1,14 |
<html> |
<!-- |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
--> |
<head> |
<object id="dummy" width="0" height="0"></object> |
<base id="base"> |
<style type="text/css">html,body,img{margin:0;}img{vertical-align:top}#dummy{display:inline}</style> |
<script type="text/javascript">public_description=new function(){var l=false;this.ie7_anon=true;this.load=function(o,c,u){if(l)return;l=true;base.href=o.document.URL;dummy.style.cssText=c;var _0=o.parentElement;var _1=Boolean(dummy.currentStyle.display=="inline");function r(){o.runtimeStyle.width=(_1)?image.offsetWidth:"100%";o.runtimeStyle.height=body.offsetHeight};image.onreadystatechange=function(){if(this.readyState=="complete")_2()};image.src=u;function _2(){function copy(p){try{body.style[p]=_0.currentStyle[p]}catch(i){}};for(var j in body.currentStyle)copy(j);body.style.width="";body.style.height="";body.style.border="none";body.style.padding="0";body.style.margin="0";body.style.textIndent="";body.style.position="static";while(_0&&_0.currentStyle.backgroundColor=="transparent"){_0=_0.parentElement}if(_0)document.body.style.backgroundColor=_0.currentStyle.backgroundColor;body.runtimeStyle.cssText=c;body.runtimeStyle.margin="0";if(_1)body.runtimeStyle.width="";r()}}};</script> |
</head> |
<body><span id="body"><img id="image"></span></body> |
</html> |
/WebSVN/templates/StandardNG/ie7/ie7-core.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('x(!1M.1j)z 6(){1l{1M.1j=8;4 1W=8.2m=z 26;8.O=6(){7"1j 2q 0.9 (5G)"};4 36=/36/.B(42.41.40);4 1G=(36)?6(m){1M.1G(1j+"\\n\\n"+m)}:1W;4 2t=5F.2t.1g(/5E (\\d\\.\\d)/)[1];4 2z=K.5D!="5C";x(/5B/.B(42.41.40)||2t<5||!/^5A/.B(K.1J.2A))7;4 1H=K.39=="1H";4 1t,5z;4 1J=K.1J,2s,3X,17=K.17;4 5y="!";4 22={};4 1u=1C;1j.2m=6(n,s){x(!22[n]){x(1u)1k("s="+2o(s));22[n]=z s()}};4 R=/^[\\w\\.]+[^:]*$/;6 1I(h,p){x(R.B(h))h=(p||"")+h;7 h};6 2e(h,p){h=1I(h,p);7 h.1d(0,h.3n("/")+1)};4 s=K.3Z[K.3Z.y-1];1l{1k(s.3z)}1i(i){}4 1R=2e(s.5x);4 1F;1l{4 l=(5w()>=5)?"5v":"5u";1F=z 5t(l+".5s")}1i(i){}4 2w={};6 2y(h,p){1l{h=1I(h,p);x(!2w[h]){1F.5r("5q",h,1C);1F.5p();x(1F.3Y==0||1F.3Y==5o){2w[h]=1F.5n}}}1i(i){1G("2x [1]: 30 5m 5l "+h)}37{7 2w[h]||""}};4 5k=1I("5j.5i",1R);6 1E(V){x(V!=1L){V.2v=13.16.2v;V.12=13.16.12}7 V};1E.12=6(p,c){x(!p)p={};x(!c)c=p.J;x(c=={}.J)c=z 26("8.2v()");c.Y=z 26("7 8");c.Y.16=z 8.Y;c.Y.16.12(p);c.16=z c.Y;c.Y.16.J=c.16.J=c;c.1r=8;c.12=F.32;c.2u=8.2u;7 c};1E.Y=z 26("7 8");1E.Y.16={J:1E,2v:6(){7 F.32.5h.1r.2k(8,F)},12:6(V){x(8==8.J.16&&8.J.12){7 8.J.Y.16.12(V)}D(4 i 5g V){2K(i){1o"J":1o"O":1o"Y":2X}x(2V V[i]=="6"&&V[i]!=8[i]){V[i].1r=8[i]}8[i]=V[i]}x(V.O!=8.O&&V.O!={}.O){V.O.1r=8.O;8.O=V.O}7 8}};6 13(){};8.13=1E.12({J:13,O:6(){7"[5f "+(8.J.2Z||"5e")+"]"},5d:6(1h){7 8.J==1h||1h.2u(8.J)}});13.2Z="13";13.1r=1L;13.2u=6(1h){1f(1h&&1h.1r!=8)1h=1h.1r;7 3J(1h)};13.Y.1r=1E;2a 8.13;4 3A=13.12({J:6(){8.5c=[];8.1p=[]},1s:1W});x(2t<5.5)1k(2y("Z-5b.3a",1R));4 35=1C;1j.1s=6(){1l{x(35)7;35=1H=1c;2s=K.2s;3X=(2z)?2s:1J;x(1K&&1t)1t.2k();15.2k();1n();1G("1u 5a")}1i(e){1G("2x [2]: "+e.38)}};4 1p=[];6 2C(r){1p.11(r)};6 1n(){H.3P();x(1K&&1t)1t.1n();15.1n();D(4 i=0;i<1p.y;i++)1p[i]()};6 23(){4 E=0,R=1,L=2;4 G=/\\(/g,S=/\\$\\d/,I=/^\\$\\d+$/,T=/([\'"])\\1\\+(.*)\\+\\1\\1$/,3Q=/\\\\./g,Q=/\'/,3W=/\\25[^\\25]*\\25/g;4 1X=8;8.18=6(e,r){x(!r)r="";4 l=(34(2o(e)).1g(G)||"").y+1;x(S.B(r)){x(I.B(r)){r=3e(r.1d(1))-1}1b{4 i=l;4 q=Q.B(34(r))?\'"\':"\'";1f(i)r=r.2S("$"+i--).2p(q+"+a[o+"+i+"]+"+q);r=z 26("a,o","7"+q+r.19(T,"$1")+q)}}3V(e||"/^$/",r,l)};8.1U=6(s){24.y=0;7 3R(3S(s,8.2r).19(z 1Z(1D,8.33?"2I":"g"),3T),8.2r).19(3W,"")};8.59=6(){1D.y=0};4 24=[];4 1D=[];4 3U=6(){7"("+2o(8[E]).1d(1,-1)+")"};1D.O=6(){7 8.2p("|")};6 3V(){F.O=3U;1D[1D.y]=F}6 3T(){x(!F[0])7"";4 i=1,j=0,p;1f(p=1D[j++]){x(F[i]){4 r=p[R];2K(2V r){1o"6":7 r(F,i);1o"58":7 F[r+i]}4 d=(F[i].57(1X.2r)==-1)?"":"\\25"+F[i]+"\\25";7 d+r}1b i+=p[L]}};6 3S(s,e){7 e?s.19(z 1Z("\\\\"+e+"(.)","g"),6(m,c){24[24.y]=c;7 e}):s};6 3R(s,e){4 i=0;7 e?s.19(z 1Z("\\\\"+e,"g"),6(){7 e+(24[i++]||"")}):s};6 34(s){7 s.19(3Q,"")}};23.16={J:23,33:1C,2r:""};13.12(23.16);4 1V=23.12({33:1c});4 H=6(){4 2q="2.0.2";4 C=/\\s*,\\s*/;4 H=6(s,14){1l{4 m=[];4 u=F.32.2Q&&!14;4 b=(14)?(14.J==3G)?14:[14]:[K];4 31=3D(s).2S(C),i;D(i=0;i<31.y;i++){s=2R(31[i]);x(3K&&s.1d(0,3).2p("")==" *#"){s=s.1d(2);14=3H([],b,s[1])}1b 14=b;4 j=0,t,f,a,c="";1f(j<s.y){t=s[j++];f=s[j++];c+=t+f;a="";x(s[j]=="("){1f(s[j++]!=")"&&j<s.y){a+=s[j]}a=a.1d(0,-1);c+="("+a+")"}14=(u&&1P[c])?1P[c]:3F(14,t,f,a);x(u)1P[c]=14}m=m.3t(14)}2a H.30;7 m}1i(e){H.30=e;7[]}};H.O=6(){7"6 H() {\\n [2q "+2q+"]\\n}"};4 1P={};H.2Q=1C;H.3P=6(s){x(s){s=2R(s).2p("");2a 1P[s]}1b 1P={}};4 22={};4 1u=1C;H.2m=6(n,s){x(1u)1k("s="+2o(s));22[n]=z s()};H.Y=6(c){7 c?1k(c):8};4 1B={};4 2n={};4 56={1g:/\\[([\\w-]+(\\|[\\w-]+)?)\\s*(\\W?=)?\\s*([^\\]]*)\\]/};4 55=[];1B[" "]=6(r,f,t,n){4 e,i,j;D(i=0;i<f.y;i++){4 s=2l(f[i],t,n);D(j=0;(e=s[j]);j++){x(1q(e)&&2T(e,n))r.11(e)}}};1B["#"]=6(r,f,i){4 e,j;D(j=0;(e=f[j]);j++)x(e.1a==i)r.11(e)};1B["."]=6(r,f,c){c=z 1Z("(^|\\\\s)"+c+"(\\\\s|$)");4 e,i;D(i=0;(e=f[i]);i++)x(c.B(e.2Z))r.11(e)};1B[":"]=6(r,f,p,a){4 t=2n[p],e,i;x(t)D(i=0;(e=f[i]);i++)x(t(e,a))r.11(e)};2n["21"]=6(e){4 d=2U(e);x(d.2Y)D(4 i=0;i<d.2Y.y;i++){x(d.2Y[i]==e)7 1c}};2n["2N"]=6(e){};4 1q=6(e){7(e&&e.3B==1&&e.2P!="!")?e:1L};4 3N=6(e){1f(e&&(e=e.54)&&!1q(e))2X;7 e};4 2W=6(e){1f(e&&(e=e.53)&&!1q(e))2X;7 e};4 3L=6(e){7 1q(e.3O)||2W(e.3O)};4 52=6(e){7 1q(e.3M)||3N(e.3M)};4 51=6(e){4 c=[];e=3L(e);1f(e){c.11(e);e=2W(e)}7 c};4 3K=1c;4 2O=6(e){4 d=2U(e);7(2V d.3I=="50")?/\\.4Z$/i.B(d.4Y):3J(d.3I=="4X 4W")};4 2U=6(e){7 e.4V||e.K};4 2l=6(e,t){7(t=="*"&&e.1A)?e.1A:e.2l(t)};4 4U=6(e,t,n){x(t=="*")7 1q(e);x(!2T(e,n))7 1C;x(!2O(e))t=t.4T();7 e.2P==t};4 2T=6(e,n){7!n||(n=="*")||(e.4S==n)};4 4R=6(e){7 e.4Q};6 3H(r,f,1a){4 m,i,j;D(i=0;i<f.y;i++){x(m=f[i].1A.4P(1a)){x(m.1a==1a)r.11(m);1b x(m.y!=1L){D(j=0;j<m.y;j++){x(m[j].1a==1a)r.11(m[j])}}}}7 r};x(![].11)3G.16.11=6(){D(4 i=0;i<F.y;i++){8[8.y]=F[i]}7 8.y};4 N=/\\|/;6 3F(14,t,f,a){x(N.B(f)){f=f.2S(N);a=f[0];f=f[1]}4 r=[];x(1B[t]){1B[t](r,14,f,a)}7 r};4 S=/^[^\\s>+~]/;4 3E=/[\\s#.:>+~()@]|[^\\s#.:>+~()@]+/g;6 2R(s){x(S.B(s))s=" "+s;7 s.1g(3E)||[]};4 W=/\\s*([\\s>+~(),]|^|$)\\s*/g;4 I=/([\\s>+~,]|[^(]\\+|^)([#.:@])/g;4 3D=6(s){7 s.19(W,"$1").19(I,"$1*$2")};4 1y={O:6(){7"\'"},1g:/^(\'[^\']*\')|("[^"]*")$/,B:6(s){7 8.1g.B(s)},18:6(s){7 8.B(s)?s:8+s+8},3C:6(s){7 8.B(s)?s.1d(1,-1):s}};4 1N=6(t){7 1y.3C(t)};4 E=/([\\/()[\\]?{}|*+-])/g;6 4O(s){7 s.19(E,"\\\\$1")};1u=1c;7 H}();H.2Q=1c;H.2m("Z",6(){1q=6(e){7(e&&e.3B==1&&e.2P!="!"&&!e.3d)?e:1L}});H.Y("1N=F[1]",3k);4 1K=!H.Y("2O(F[1])",1J);4 2h=":21{Z-21:21}:2N{Z-21:2N}"+(1K?"":"*{4N:0}");4 15=z(3A.12({2F:z 1V,1O:"",1w:"",2L:[],1s:6(){8.2M();8.2g()},2g:6(){15.1Y.X=2h+8.1O+8.1w},3y:6(){4 20=K.2l("1e"),s;D(4 i=20.y-1;(s=20[i]);i--){x(!s.2H&&!s.Z){8.2L.11(s.3z)}}},2k:6(){8.3y();8.2g();z 28("1O");8.3u()},3w:6(e,r){8.2F.18(e,r)},1n:6(){4 R=/3v\\d+/g;4 s=2h.1g(/[{,]/g).y;4 20=s+(8.1O.X.1g(/\\{/g)||"").y;4 3x=8.1Y.4M,r;4 2j,c,2i,e,i,j,k,1a;D(i=s;i<20;i++){r=3x[i];x(r&&(2j=r.1e.X.1g(R))){2i=H(r.4L);x(2i.y)D(j=0;j<2j.y;j++){1a=2j[j];c=15.1p[1a.1d(10)][2];D(k=0;(e=2i[k]);k++){x(e.1v[1a])c(e)}}}}},2C:6(p,t,h,r){t=z 1Z("([{;\\\\s])"+p+"\\\\s*:\\\\s*"+t+"[^;}]*");4 i=8.1p.y;x(r)r=p+":"+r;8.3w(t,6(m,o){7(r?m[o+1]+r:m[o])+";Z-"+m[o].1d(1)+";3v"+i+":1"});8.1p.11(F);7 i},1N:6(s){7 s.X||""},2M:6(){x(1H||!1K)K.2M();1b K.4K("<1e Z=1c></1e>");8.1Y=17[17.y-1];8.1Y.Z=1c;8.1Y.X=2h},3u:6(){D(4 i=0;i<17.y;i++){x(!17[i].Z&&17[i].X){17[i].X=""}}}}));6 28(m){8.1z=m;8.1S();15[m]=8;15.2g()};13.12({J:28,O:6(){7"@1z "+8.1z+"{"+8.X+"}"},1n:1W,1S:6(){8.X="";8.1N();8.3m();8.X=3j(8.X);f={}},1N:6(){4 3r=[].3t(15.2L);4 M=/@1z\\s+([^{]*)\\{([^@]+\\})\\s*\\}/2I;4 A=/\\4J\\b|^$/i,S=/\\4I\\b/i,P=/\\4H\\b/i;6 3q(c,m){2f.v=m;7 c.19(M,2f)};6 2f(4G,m,c){m=2J(m);2K(m){1o"1O":1o"1w":x(m!=2f.v)7"";1o"1A":7 c}7""};6 2J(m){x(A.B(m))7"1A";1b x(S.B(m))7(P.B(m))?"1A":"1O";1b x(P.B(m))7"1w"};4 1X=8;6 2G(s,p,m,l){4 c="";x(!l){m=2J(s.1z);l=0}x(m=="1A"||m==1X.1z){x(l<3){D(4 i=0;i<s.3s.y;i++){c+=2G(s.3s[i],2e(s.2d,p),m,l+1)}}c+=3l(s.2d?3p(s,p):3r.3h()||"");c=3q(c,1X.1z)}7 c};4 f={};6 3p(s,p){4 u=1I(s.2d,p);x(f[u])7"";f[u]=(s.2H)?"":3o(15.1N(s,p),2e(s.2d,p));7 f[u]};4 U=/(4F\\s*\\(\\s*[\'"]?)([\\w\\.]+[^:\\)]*[\'"]?\\))/2I;6 3o(c,p){7 c.19(U,"$1"+p.1d(0,p.3n("/")+1)+"$2")};D(4 i=0;i<17.y;i++){x(!17[i].2H&&!17[i].Z){8.X+=2G(17[i])}}},3m:6(){8.X=15.2F.1U(8.X)},1n:1W});4 1y=H.Y("1y");4 2b=[];6 3l(c){7 1x.1U(2c.1U(c))};6 2E(m,o){7 1y+(2b.11(m[o])-1)+1y};6 3k(v){7 1y.B(v)?1k(2b[1k(v)]):v};4 1x=z 1V;1x.18(/\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\//);1x.18(/\'[^\']*\'/,2E);1x.18(/"[^"]*"/,2E);1x.18(/\\s+/," ");1x.18(/@(4E|4D)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->/);4 2c=z 1V;2c.18(/\\\\\'/,"\\\\4C");2c.18(/\\\\"/,"\\\\4B");4 2D=z 1V;2D.18(/\'(\\d+)\'/,3i);6 3j(c){7 2D.1U(c)};6 3i(m,o){7 2b[m[o+1]]};4 2B=[];6 4A(h){2C(h);1Q(1M,"4z",h)};6 1Q(e,t,h){e.4y(t,h);2B.11(F)};6 3g(e,t,h){1l{e.4x(t,h)}1i(i){}};1Q(1M,"4w",6(){4 h;1f(h=2B.3h()){3g(h[0],h[1],h[2])}});6 4v(h,e,c){x(!h.29)h.29={};x(c)h.29[e.2A]=e;1b 2a h.29[e.2A];7 c};1Q(1M,"4u",6(){x(!15.1w)z 28("1w");15.1w.1n()});4 3f=/^\\d+(4t)?$/i;4 4s=/^\\d+%$/;4 4r=6(e,v){x(3f.B(v))7 3e(v);4 s=e.1e.1m;4 r=e.1T.1m;e.1T.1m=e.1v.1m;e.1e.1m=v||0;v=e.1e.4q;e.1e.1m=s;e.1T.1m=r;7 v};6 4p(t){4 e=K.4o(t||"4n");e.1e.X="3c:4m;4l:0;4k:4j;4i:4h;4g:4f(0 0 0 0);1m:-4e";e.3d=1c;7 e};4 27="Z-";6 4d(e){7 e.1v["Z-3c"]=="4c"};6 4b(e,p){7 e.1v[27+p]||e.1v[p]};6 4a(e,p,v){x(e.1v[27+p]==1L){e.1T[27+p]=e.1v[p]}e.1T[p]=v};6 49(o,c,u){4 t=48(6(){1l{x(!o.1S)7;o.1S(o,c,u);3b(t)}1i(i){3b(t)}},10)};1u=1c;x(2z)1k(2y("Z-47.3a",1R));15.1s();x(1K&&1t)1t.1s();x(1H)1j.1s();1b{1J.46(1I("Z-1S.45",1R));1Q(K,"44",6(){x(K.39=="1H")43(1j.1s,0)})}}1i(e){1G("2x [0]: "+e.38)}37{}};',62,353,'||||var||function|return|this|||||||||||||||||||||||||if|length|new||test||for||arguments||cssQuery||constructor|document||||toString|||||||that||cssText|valueOf|ie7||push|specialize|Common|fr|ie7CSS|prototype|styleSheets|add|replace|id|else|true|slice|style|while|match|klass|catch|IE7|eval|try|left|recalc|case|recalcs|thisElement|ancestor|init|ie7HTML|loaded|currentStyle|print|encoder|Quote|media|all|selectors|false|_0|ICommon|httpRequest|alert|complete|makePath|documentElement|isHTML|null|window|getText|screen|cache|addEventHandler|path|load|runtimeStyle|exec|Parser|DUMMY|self|styleSheet|RegExp|st|link|modules|ParseMaster|_1|x01|Function|_2|StyleSheet|elements|delete|_3|safeString|href|getPath|_4|refresh|HEADER|el|ca|apply|getElementsByTagName|addModule|pseudoClasses|String|join|version|escapeChar|body|appVersion|ancestorOf|inherit|_5|Error|loadFile|quirksMode|uniqueID|_6|addRecalc|decoder|_7|parser|_8|disabled|gi|_9|switch|styles|createStyleSheet|visited|isXML|tagName|caching|_10|split|compareNamespace|getDocument|typeof|nextElementSibling|continue|links|className|error|se|callee|ignoreCase|_11|_12|ie7_debug|finally|description|readyState|js|clearInterval|position|ie7_anon|parseInt|PIXEL|removeEventHandler|pop|_13|decode|getString|_14|parse|lastIndexOf|_15|_16|_17|_18|imports|concat|trash|ie7_recalc|addFix|ru|getInlineStyles|innerHTML|Fix|nodeType|remove|parseSelector|ST|select|Array|_19|mimeType|Boolean|isMSIE|firstElementChild|lastChild|previousElementSibling|firstChild|clearCache|ES|_20|_21|_22|_23|_24|DE|viewport|status|scripts|search|location|top|setTimeout|onreadystatechange|htc|addBehavior|quirks|setInterval|addTimer|setOverrideStyle|getDefinedStyle|fixed|isFixed|9999|rect|clip|none|border|block|display|padding|absolute|object|createElement|createTempElement|pixelLeft|getPixelValue|PERCENT|px|onbeforeprint|register|onunload|detachEvent|attachEvent|onresize|addResize|x22|x27|import|namespace|url|ma|bprint|bscreen|ball|write|selectorText|rules|margin|regEscape|item|innerText|getTextContent|scopeName|toUpperCase|compareTagName|ownerDocument|Document|XML|URL|xml|unknown|childElements|lastElementChild|nextSibling|previousSibling|attributeSelectors|AttributeSelector|indexOf|number|reset|successfully|ie5|fixes|instanceOf|Object|common|in|caller|gif|blank|BLANK_GIF|file|loading|responseText|200|send|GET|open|XMLHTTP|ActiveXObject|Microsoft|Msxml2|ScriptEngineMajorVersion|src|ANON|ie7Layout|ms_|ie7_off|CSS1Compat|compatMode|MSIE|navigator|alpha'.split('|'),0,{})) |
/WebSVN/templates/StandardNG/ie7/ie7-css-strict.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-css-strict",function(){if(!modules["ie7-css2-selectors"])return;StyleSheet.prototype.specialize({parse:function(){this.inherit();var r=[].concat(this.rules);r.sort(ie7CSS.Rule.compare);this.cssText=r.join("\n")},createRule:function(s,c){var m;if(m=s.match(ie7CSS.PseudoElement.MATCH))return new ie7CSS.PseudoElement(m[1],m[2],c);else if(m=s.match(ie7CSS.DynamicRule.MATCH))return new ie7CSS.DynamicRule(s,m[1],m[2],m[3],c);else return new ie7CSS.Rule(s,c)}});ie7CSS.specialize({apply:function(){this.inherit();this.Rule.MATCH=/([^{}]+)(\{[^{}]*\})/g}});ie7CSS.Rule.compare=function(r1,r2){return r1.specificity-r2.specificity};var N=[],I=/#/g,C=/[.:\[]/g,T=/^\w|[\s>+~]\w/g;ie7CSS.Rule.score=function(s){return(s.match(I)||N).length*10000+(s.match(C)||N).length*100+(s.match(T)||N).length};ie7CSS.Rule.simple=function(){return""};ie7CSS.Rule.prototype.specialize({specificity:0,init:function(){this.specificity=ie7CSS.Rule.score(this.selector)}})}); |
/WebSVN/templates/StandardNG/ie7/ie7-css2-selectors.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-css2-selectors",function(){cssQuery.addModule("css-level2",function(){selectors[">"]=function(r,f,t,n){var e,i,j;for(i=0;i<f.length;i++){var s=childElements(f[i]);for(j=0;(e=s[j]);j++)if(compareTagName(e,t,n))r.push(e)}};selectors["+"]=function(r,f,t,n){for(var i=0;i<f.length;i++){var e=nextElementSibling(f[i]);if(e&&compareTagName(e,t,n))r.push(e)}};selectors["@"]=function(r,f,a){var t=attributeSelectors[a].test;var e,i;for(i=0;(e=f[i]);i++)if(t(e))r.push(e)};pseudoClasses["first-child"]=function(e){return!previousElementSibling(e)};pseudoClasses["lang"]=function(e,c){c=new RegExp("^"+c,"i");while(e&&!e.getAttribute("lang"))e=e.parentNode;return e&&c.test(e.getAttribute("lang"))};AttributeSelector.NS_IE=/\\:/g;AttributeSelector.PREFIX="@";AttributeSelector.tests={};AttributeSelector.replace=function(m,a,n,c,v){var k=this.PREFIX+m;if(!attributeSelectors[k]){a=this.create(a,c||"",v||"");attributeSelectors[k]=a;attributeSelectors.push(a)}return attributeSelectors[k].id};AttributeSelector.parse=function(s){s=s.replace(this.NS_IE,"|");var m;while(m=s.match(this.match)){var r=this.replace(m[0],m[1],m[2],m[3],m[4]);s=s.replace(this.match,r)}return s};AttributeSelector.create=function(p,t,v){var a={};a.id=this.PREFIX+attributeSelectors.length;a.name=p;t=this.tests[t];t=t?t(this.getAttribute(p),getText(v)):false;a.test=new Function("e","return "+t);return a};AttributeSelector.getAttribute=function(n){switch(n.toLowerCase()){case"id":return"e.id";case"class":return"e.className";case"for":return"e.htmlFor";case"href":if(isMSIE){return"String((e.outerHTML.match(/href=\\x22?([^\\s\\x22]*)\\x22?/)||[])[1]||'')"}}return"e.getAttribute('"+n.replace(N,":")+"')"};AttributeSelector.tests[""]=function(a){return a};AttributeSelector.tests["="]=function(a,v){return a+"=="+Quote.add(v)};AttributeSelector.tests["~="]=function(a,v){return"/(^| )"+regEscape(v)+"( |$)/.test("+a+")"};AttributeSelector.tests["|="]=function(a,v){return"/^"+regEscape(v)+"(-|$)/.test("+a+")"};var _6=parseSelector;parseSelector=function(s){return _6(AttributeSelector.parse(s))}});var AttributeSelector=cssQuery.valueOf("AttributeSelector");var H=/a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;var B1=/\s*\{\s*/,B2=/\s*\}\s*/,C=/\s*\,\s*/;var F=/(.*)(:first-(line|letter))/;StyleSheet.prototype.specialize({parse:function(){this.inherit();var o=ie7CSS.rules.length;var ru=this.cssText.split(B2),r;var se,c,i,j;for(i=0;i<ru.length;i++){r=ru[i].split(B1);se=r[0].split(C);c=r[1];for(j=0;j<se.length;j++){se[j]=c?this.createRule(se[j],c):""}ru[i]=se.join("\n")}this.cssText=ru.join("\n");this.rules=ie7CSS.rules.slice(o)},recalc:function(){var r,i;for(i=0;(r=this.rules[i]);i++)r.recalc()},createRule:function(s,c){if(ie7CSS.UNKNOWN.test(s)){var m;if(m=s.match(PseudoElement.MATCH)){return new PseudoElement(m[1],m[2],c)}else if(m=s.match(DynamicRule.MATCH)){if(!isHTML||!H.test(m)||DynamicRule.COMPLEX.test(m)){return new DynamicRule(s,m[1],m[2],m[3],c)}}else return new Rule(s,c)}return s+" {"+c+"}"}});ie7CSS.specialize({rules:[],pseudoClasses:cssQuery.valueOf("pseudoClasses"),dynamicPseudoClasses:{},cache:cssQuery.valueOf("cache"),Rule:Rule,DynamicRule:DynamicRule,PseudoElement:PseudoElement,DynamicPseudoClass:DynamicPseudoClass,apply:function(){var p=this.pseudoClasses+"|before|after|"+this.dynamicPseudoClasses;p=p.replace(/(link|visited)\|/g,"");this.UNKNOWN=new RegExp("[>+~\[]|([:.])[\\w-()]+\\1|:("+p+")");var c="[^\\s(]+\\s*[+~]|@\\d+|:(";Rule.COMPLEX=new RegExp(c+p+")","g");DynamicRule.COMPLEX=new RegExp(c+this.pseudoClasses+")","g");DynamicRule.MATCH=new RegExp("(.*):("+this.dynamicPseudoClasses+")(.*)");PseudoElement.MATCH=/(.*):(before|after).*/;this.inherit()},recalc:function(){this.screen.recalc();this.inherit()},getText:function(s,p){return httpRequest?(loadFile(s.href,p)||s.cssText):this.inherit(s)},addEventHandler:function(e,t,h){addEventHandler(e,t,h)}});function Rule(s,c){this.id=ie7CSS.rules.length;this.className=Rule.PREFIX+this.id;s=(s).match(F)||s||"*";this.selector=s[1]||s;this.selectorText=Rule.simple(this.selector)+"."+this.className+(s[2]||"");this.cssText=c;this.MATCH=new RegExp("\\s"+this.className+"(\\s|$)","g");ie7CSS.rules.push(this);this.init()};Common.specialize({constructor:Rule,toString:function(){return this.selectorText+" {"+this.cssText+"}"},init:DUMMY,add:function(e){e.className+=" "+this.className},remove:function(e){e.className=e.className.replace(this.MATCH,"$1")},recalc:function(){var m=ie7CSS.cache[" *."+this.className]=cssQuery(this.selector);for(i=0;i<m.length;i++)this.add(m[i])}});Rule.PREFIX="ie7_class";Rule.CHILD=/>/g;Rule.simple=function(s){s=AttributeSelector.parse(s);return s.replace(this.COMPLEX,"").replace(this.CHILD," ")};function DynamicRule(s,a,d,t,c){this.attach=a||"*";this.dynamicPseudoClass=ie7CSS.dynamicPseudoClasses[d];this.target=t;this.inherit(s,c)};Rule.specialize({constructor:DynamicRule,recalc:function(){var m=cssQuery(this.attach);for(var i=0;i<m.length;i++){var t=(this.target)?cssQuery(this.target,m[i]):[m[i]];if(t.length)this.dynamicPseudoClass.apply(m[i],t,this)}}});var A=/^attr/;var U=/^url\s*\(\s*([^)]*)\)$/;var M={before0:"beforeBegin",before1:"afterBegin",after0:"afterEnd",after1:"beforeEnd"};var _5=makePath("ie7-content.htc",path)+"?";HEADER+=".ie7_anon{display:none}";function PseudoElement(s,p,c){this.position=p;var co=c.match(PseudoElement.CONTENT),m,e;if(co){co=co[1];m=co.split(/\s+/);for(var i=0;(e=m[i]);i++){m[i]=A.test(e)?{attr:e.slice(5,-1)}:(e.charAt(0)=="'")?getString(e):decode(e)}co=m}this.content=co;this.inherit(s,decode(c))};Rule.specialize({constructor:PseudoElement,toString:function(){return"."+this.className+"{display:inline}"},init:function(){this.match=cssQuery(this.selector);for(var i=0;i<this.match.length;i++){var r=this.match[i].runtimeStyle;if(!r[this.position])r[this.position]={cssText:""};r[this.position].cssText+=";"+this.cssText;if(this.content!=null)r[this.position].content=this.content}},recalc:function(){if(this.content==null)return;for(var i=0;i<this.match.length;i++){this.create(this.match[i])}},create:function(t){var g=t.runtimeStyle[this.position];if(g){var c=[].concat(g.content||"");for(var j=0;j<c.length;j++){if(typeof c[j]=="object"){c[j]=t.getAttribute(c[j].attr)}}c=c.join("");var u=c.match(U);var h=PseudoElement[u?"OBJECT":"ANON"].replace(/%1/,this.className);var cs=g.cssText.replace(/'/g,'"');var po=M[this.position+Number(t.canHaveChildren)];if(u){var p=document.createElement(h);t.insertAdjacentElement(po,p);p.data=_5;addTimer(p,cs,Quote.remove(u[1]))}else{h=h.replace(/%2/,cs).replace(/%3/,c);t.insertAdjacentHTML(po,h)}t.runtimeStyle[this.position]=null}}});PseudoElement.CONTENT=/content\s*:\s*([^;]*)(;|$)/;PseudoElement.OBJECT="<object class='ie7_anon %1' ie7_anon width=100% height=0 type=text/x-scriptlet>";PseudoElement.ANON="<ie7:! class='ie7_anon %1' ie7_anon style='%2'>%3</ie7:!>";function DynamicPseudoClass(n,a){this.name=n;this.apply=a;this.instances={};ie7CSS.dynamicPseudoClasses[n]=this};Common.specialize({constructor:DynamicPseudoClass,register:function(i){var c=i[2];i.id=c.id+i[0].uniqueID;if(!this.instances[i.id]){var t=i[1],j;for(j=0;j<t.length;j++)c.add(t[j]);this.instances[i.id]=i}},unregister:function(i){if(this.instances[i.id]){var c=i[2];var t=i[1],j;for(j=0;j<t.length;j++)c.remove(t[j]);delete this.instances[i.id]}}});ie7CSS.pseudoClasses.toString=function(){var t=[],p;for(p in this){if(this[p].length>1)p+="\\([^)]*\\)";t.push(p)}return t.join("|")};ie7CSS.pseudoClasses["link"]=function(e){return e.currentStyle["ie7-link"]=="link"};ie7CSS.pseudoClasses["visited"]=function(e){return e.currentStyle["ie7-link"]=="visited"};var _4=(appVersion<5.5)?"onmouseover":"onmouseenter";var _3=(appVersion<5.5)?"onmouseout":"onmouseleave";ie7CSS.dynamicPseudoClasses.toString=ie7CSS.pseudoClasses.toString;var _0=new DynamicPseudoClass("hover",function(e){var i=arguments;ie7CSS.addEventHandler(e,_4,function(){_0.register(i)});ie7CSS.addEventHandler(e,_3,function(){_0.unregister(i)})});var _1=new DynamicPseudoClass("focus",function(e){var i=arguments;ie7CSS.addEventHandler(e,"onfocus",function(){_1.unregister(i);_1.register(i)});ie7CSS.addEventHandler(e,"onblur",function(){_1.unregister(i)});if(e==document.activeElement){_1.register(i)}});var _2=new DynamicPseudoClass("active",function(e){var i=arguments;ie7CSS.addEventHandler(e,"onmousedown",function(){_2.register(i)})});addEventHandler(document,"onmouseup",function(){var i=_2.instances,j;for(j in i)_2.unregister(i[j]);i=_0.instances;for(j in i)if(!i[j][0].contains(event.srcElement))_0.unregister(i[j])});ICommon(AttributeSelector);AttributeSelector.specialize({getAttribute:function(n){switch(n.toLowerCase()){case"class":return"e.className.replace(/\\b\\s*ie7_class\\d+/g,'')";case"src":return"(e.pngSrc||e.src)"}return this.inherit(n)}});encoder.add(/::/,":");safeString.add(/\\([\da-fA-F]{1,4})/,function(m,o){m=m[o+1];return"\\u"+"0000".slice(m.length)+m})}); |
/WebSVN/templates/StandardNG/ie7/ie7-css3-selectors.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-css3-selectors",function(){cssQuery.addModule("css-level3",function(){selectors["~"]=function(r,f,t,n){var e,i;for(i=0;(e=f[i]);i++){while(e=nextElementSibling(e)){if(compareTagName(e,t,n))r.push(e)}}};pseudoClasses["contains"]=function(e,t){t=new RegExp(regEscape(getText(t)));return t.test(getTextContent(e))};pseudoClasses["root"]=function(e){return e==getDocument(e).documentElement};pseudoClasses["empty"]=function(e){var n,i;for(i=0;(n=e.childNodes[i]);i++){if(thisElement(n)||n.nodeType==3)return false}return true};pseudoClasses["last-child"]=function(e){return!nextElementSibling(e)};pseudoClasses["only-child"]=function(e){e=e.parentNode;return firstElementChild(e)==lastElementChild(e)};pseudoClasses["not"]=function(e,s){var n=cssQuery(s,getDocument(e));for(var i=0;i<n.length;i++){if(n[i]==e)return false}return true};pseudoClasses["nth-child"]=function(e,a){return nthChild(e,a,previousElementSibling)};pseudoClasses["nth-last-child"]=function(e,a){return nthChild(e,a,nextElementSibling)};pseudoClasses["target"]=function(e){return e.id==location.hash.slice(1)};pseudoClasses["checked"]=function(e){return e.checked};pseudoClasses["enabled"]=function(e){return e.disabled===false};pseudoClasses["disabled"]=function(e){return e.disabled};pseudoClasses["indeterminate"]=function(e){return e.indeterminate};AttributeSelector.tests["^="]=function(a,v){return"/^"+regEscape(v)+"/.test("+a+")"};AttributeSelector.tests["$="]=function(a,v){return"/"+regEscape(v)+"$/.test("+a+")"};AttributeSelector.tests["*="]=function(a,v){return"/"+regEscape(v)+"/.test("+a+")"};function nthChild(e,a,t){switch(a){case"n":return true;case"even":a="2n";break;case"odd":a="2n+1"}var ch=childElements(e.parentNode);function _5(i){var i=(t==nextElementSibling)?ch.length-i:i-1;return ch[i]==e};if(!isNaN(a))return _5(a);a=a.split("n");var m=parseInt(a[0]);var s=parseInt(a[1]);if((isNaN(m)||m==1)&&s==0)return true;if(m==0&&!isNaN(s))return _5(s);if(isNaN(s))s=0;var c=1;while(e=t(e))c++;if(isNaN(m)||m==1)return(t==nextElementSibling)?(c<=s):(s>=c);return(c%m)==s}});var firstElementChild=cssQuery.valueOf("firstElementChild");ie7CSS.pseudoClasses["root"]=function(e){return(e==viewport)||(!isHTML&&e==firstElementChild(body))};var _4=new ie7CSS.DynamicPseudoClass("checked",function(e){if(typeof e.checked!="boolean")return;var i=arguments;ie7CSS.addEventHandler(e,"onpropertychange",function(){if(event.propertyName=="checked"){if(e.checked)_4.register(i);else _4.unregister(i)}});if(e.checked)_4.register(i)});var _3=new ie7CSS.DynamicPseudoClass("enabled",function(e){if(typeof e.disabled!="boolean")return;var i=arguments;ie7CSS.addEventHandler(e,"onpropertychange",function(){if(event.propertyName=="disabled"){if(!e.isDisabled)_3.register(i);else _3.unregister(i)}});if(!e.isDisabled)_3.register(i)});var _2=new ie7CSS.DynamicPseudoClass("disabled",function(e){if(typeof e.disabled!="boolean")return;var i=arguments;ie7CSS.addEventHandler(e,"onpropertychange",function(){if(event.propertyName=="disabled"){if(e.isDisabled)_2.register(i);else _2.unregister(i)}});if(e.isDisabled)_2.register(i)});var _1=new ie7CSS.DynamicPseudoClass("indeterminate",function(e){if(typeof e.indeterminate!="boolean")return;var i=arguments;ie7CSS.addEventHandler(e,"onpropertychange",function(){if(event.propertyName=="indeterminate"){if(e.indeterminate)_1.register(i);else _1.unregister(i)}});ie7CSS.addEventHandler(e,"onclick",function(){_1.unregister(i)})});var _0=new ie7CSS.DynamicPseudoClass("target",function(e){var i=arguments;if(!e.tabIndex)e.tabIndex=0;ie7CSS.addEventHandler(document,"onpropertychange",function(){if(event.propertyName=="activeElement"){if(e.id==location.hash.slice(1))_0.register(i);else _0.unregister(i)}});if(e.id==location.hash.slice(1))_0.register(i)});decoder.add(/\|/,"\\:")}); |
/WebSVN/templates/StandardNG/ie7/ie7-dhtml.js |
---|
0,0 → 1,57 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-dhtml", function() { |
/* --------------------------------------------------------------------- |
This module is still in development and should not be used. |
--------------------------------------------------------------------- */ |
ie7CSS.specialize("recalc", function() { |
this.inherit(); |
for (var i = 0; i < this.recalcs.length; i++) { |
var $recalc = this.recalcs[i]; |
for (var j = 0; i < $recalc[3].length; i++) { |
_addPropertyChangeHandler($recalc[3][j], _getPropertyName($recalc[2]), $recalc[1]); |
} |
} |
}); |
// constants |
var _PATTERNS = { |
width: "(width|paddingLeft|paddingRight|borderLeftWidth|borderRightWidth|borderLeftStyle|borderRightStyle)", |
height: "(height|paddingTop|paddingBottom|borderTopHeight|borderBottomHeight|borderTopStyle|borderBottomStyle)" |
}; |
var _PROPERTY_NAMES = { |
width: "fixedWidth", |
height: "fixedHeight", |
right: "width", |
bottom: "height" |
}; |
var _DASH_LETTER = /-(\w)/g; |
var _PROPERTY_NAME = /\w+/; |
function _addPropertyChangeHandler($element, $propertyName, $fix) { |
addEventHandler($element, "onpropertychange", function() { |
if (_getPattern($propertyName).test(event.propertyName)) { |
_reset($element, $propertyName); |
$fix($element); |
} |
}); |
}; |
function _upper($match, $letter) {return $letter.toUpperCase()}; |
function _getPropertyName($pattern) { |
return String(String($pattern).toLowerCase().replace(_DASH_LETTER, _upper).match(_PROPERTY_NAME)); |
}; |
function _getPattern($propertyName) { |
return eval("/^style." + (_PATTERNS[$propertyName] || $propertyName) + "$/"); |
}; |
function _reset($element, $propertyName) { |
$element.runtimeStyle[$propertyName] = ""; |
$propertyName = _PROPERTY_NAMES[$propertyName] |
if ($propertyName) $element.runtimeStyle[$propertyName] = ""; |
}; |
}); |
/WebSVN/templates/StandardNG/ie7/ie7-dynamic-attributes.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-dynamic-attributes",function(){if(!modules["ie7-css2-selectors"])return;var attributeSelectors=cssQuery.valueOf("attributeSelectors");var parseSelector=cssQuery.valueOf("parseSelector");function DynamicAttribute(s,a,d,t,c){this.attach=a||"*";parseSelector(d);this.dynamicAttribute=attributeSelectors["@"+d];this.target=t;this.inherit(s,c)};ie7CSS.Rule.specialize({constructor:DynamicAttribute,recalc:function(){var m=cssQuery(this.attach);for(var i=0;i<m.length;i++){var t=(this.target)?cssQuery(this.target,m[i]):[m[i]];if(t.length)this.apply(m[i],t)}},apply:function(e,t){var self=this;addEventHandler(e,"onpropertychange",function(){if(event.propertyName==self.dynamicAttribute.name)self.test(e,t)});this.test(e,t)},test:function(e,t){var a=this.dynamicAttribute.test(e)?"add":"remove";for(var i=0;(e=t[i]);i++)this[a](e)}});DynamicAttribute.MATCH=/(.*)(\[[^\]]*\])(.*)/;StyleSheet.prototype.specialize({createRule:function(s,c){var m;if(m=s.match(DynamicAttribute.MATCH)){return new DynamicAttribute(s,m[1],m[2],m[3],c)}else return this.inherit(s,c)}})}); |
/WebSVN/templates/StandardNG/ie7/ie7-fixed.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-fixed",function(){ie7CSS.addRecalc("position","fixed",_6,"absolute");ie7CSS.addRecalc("background(-attachment)?","[^};]*fixed",_7);var _10=(quirksMode)?"body":"documentElement";var _8=function(){if(body.currentStyle.backgroundAttachment!="fixed"){if(body.currentStyle.backgroundImage=="none"){body.runtimeStyle.backgroundRepeat="no-repeat";body.runtimeStyle.backgroundImage="url("+BLANK_GIF+")"}body.runtimeStyle.backgroundAttachment="fixed"}_8=DUMMY};var _0=createTempElement("img");function _1(f){return _2.exec(String(f))};var _2=new ParseMaster;_2.add(/Left/,"Top");_2.add(/left/,"top");_2.add(/Width/,"Height");_2.add(/width/,"height");_2.add(/right/,"bottom");_2.add(/X/,"Y");function _3(e){return(e)?isFixed(e)||_3(e.parentElement):false};function setExpression(e,p,ex){setTimeout("document.all."+e.uniqueID+".runtimeStyle.setExpression('"+p+"','"+ex+"')",0)};function _7(e){if(register(_7,e,e.currentStyle.backgroundAttachment=="fixed"&&!e.contains(body))){_8();backgroundLeft(e);backgroundTop(e);_9(e)}};function _9(e){_0.src=e.currentStyle.backgroundImage.slice(5,-2);var p=(e.canHaveChildren)?e:e.parentElement;p.appendChild(_0);setOffsetLeft(e);setOffsetTop(e);p.removeChild(_0)};function backgroundLeft(e){e.style.backgroundPositionX=e.currentStyle.backgroundPositionX;if(!_3(e)){var ex="(parseInt(runtimeStyle.offsetLeft)+document."+_10+".scrollLeft)||0";setExpression(e,"backgroundPositionX",ex)}};eval(_1(backgroundLeft));function setOffsetLeft(e){var p=_3(e)?"backgroundPositionX":"offsetLeft";e.runtimeStyle[p]=getOffsetLeft(e,e.style.backgroundPositionX)-e.getBoundingClientRect().left-e.clientLeft+2};eval(_1(setOffsetLeft));function getOffsetLeft(e,p){switch(p){case"left":case"top":return 0;case"right":case"bottom":return viewport.clientWidth-_0.offsetWidth;case"center":return(viewport.clientWidth-_0.offsetWidth)/2;default:if(PERCENT.test(p)){return parseInt((viewport.clientWidth-_0.offsetWidth)*parseFloat(p)/100)}_0.style.left=p;return _0.offsetLeft}};eval(_1(getOffsetLeft));function _6(e){if(register(_6,e,isFixed(e))){setOverrideStyle(e,"position","absolute");setOverrideStyle(e,"left",e.currentStyle.left);setOverrideStyle(e,"top",e.currentStyle.top);_8();if(ie7Layout)ie7Layout.fixRight(e);_5(e)}};function _5(e,r){positionTop(e,r);positionLeft(e,r,true);if(!e.runtimeStyle.autoLeft&&e.currentStyle.marginLeft=="auto"&&e.currentStyle.right!="auto"){var l=viewport.clientWidth-getPixelWidth(e,e.currentStyle.right)-getPixelWidth(e,e.runtimeStyle._12)-e.clientWidth;if(e.currentStyle.marginRight=="auto")l=parseInt(l/2);if(_3(e.offsetParent))e.runtimeStyle.pixelLeft+=l;else e.runtimeStyle.shiftLeft=l}clipWidth(e);clipHeight(e)};function clipWidth(e){if(e.currentStyle.width!="auto"){var r=e.getBoundingClientRect();var w=e.offsetWidth-viewport.clientWidth+r.left-2;if(w>=0){w=Math.max(getPixelValue(e,e.currentStyle.width)-w,0);setOverrideStyle(e,"width",w)}}};eval(_1(clipWidth));function positionLeft(e,r){if(!r&&PERCENT.test(e.currentStyle.width)){e.runtimeStyle.fixWidth=e.currentStyle.width}if(e.runtimeStyle.fixWidth){e.runtimeStyle.width=getPixelWidth(e,e.runtimeStyle.fixWidth)}if(r){if(!e.runtimeStyle.autoLeft)return}else{e.runtimeStyle.shiftLeft=0;e.runtimeStyle._12=e.currentStyle.left;e.runtimeStyle.autoLeft=e.currentStyle.right!="auto"&&e.currentStyle.left=="auto"}e.runtimeStyle.left="";e.runtimeStyle.screenLeft=getScreenLeft(e);e.runtimeStyle.pixelLeft=e.runtimeStyle.screenLeft;if(!r&&!_3(e.offsetParent)){var ex="runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document."+_10+".scrollLeft";setExpression(e,"pixelLeft",ex)}};eval(_1(positionLeft));function getScreenLeft(e){var s=e.offsetLeft,n=1;if(e.runtimeStyle.autoLeft){s=viewport.clientWidth-e.offsetWidth-getPixelWidth(e,e.currentStyle.right)}if(e.currentStyle.marginLeft!="auto"){s-=getPixelWidth(e,e.currentStyle.marginLeft)}while(e=e.offsetParent){if(e.currentStyle.position!="static")n=-1;s+=e.offsetLeft*n}return s};eval(_1(getScreenLeft));function getPixelWidth(e,v){if(PERCENT.test(v))return parseInt(parseFloat(v)/100*viewport.clientWidth);return getPixelValue(e,v)};eval(_1(getPixelWidth));function _11(){var e=_7.elements;for(var i in e)_9(e[i]);e=_6.elements;for(i in e){_5(e[i],true);_5(e[i],true)}_4=0};var _4;addResize(function(){if(!_4)_4=setTimeout(_11,0)})}); |
/WebSVN/templates/StandardNG/ie7/ie7-graphics.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-graphics",function(){if(appVersion<5.5)return;var A="DXImageTransform.Microsoft.AlphaImageLoader";var F="progid:"+A+"(src='%1',sizingMethod='scale')";var _3=new RegExp((window.IE7_PNG_SUFFIX||"-trans.png")+"$","i");var _0=[];function _2(e){var f=e.filters[A];if(f){f.src=e.src;f.enabled=true}else{e.runtimeStyle.filter=F.replace(/%1/,e.src);_0.push(e)}e.src=BLANK_GIF};function _5(e){e.src=e.pngSrc;e.filters[A].enabled=false};ie7CSS.addFix(/opacity\s*:\s*([\d.]+)/,function(m,o){return"zoom:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity="+((parseFloat(m[o+1])*100)||1)+")"});var B=/background(-image)?\s*:\s*([^\(};]*)url\(([^\)]+)\)([^;}]*)/;ie7CSS.addFix(B,function(m,o){var u=getString(m[o+3]);return _3.test(u)?"filter:"+F.replace(/scale/,"crop").replace(/%1/,u)+";zoom:1;background"+(m[o+1]||"")+":"+(m[o+2]||"")+"none"+(m[o+4]||""):m[o]});if(ie7HTML){ie7HTML.addRecalc("img,input",function(e){if(e.tagName=="INPUT"&&e.type!="image")return;_4(e);addEventHandler(e,"onpropertychange",function(){if(!_1&&event.propertyName=="src"&&e.src.indexOf(BLANK_GIF)==-1)_4(e)})});var B64=/^data:.*;base64/i;var _7=makePath("ie7-base64.php",path);function _4(e){if(_3.test(e.src)){var i=new Image(e.width,e.height);i.onload=function(){e.width=i.width;e.height=i.height;i=null};i.src=e.src;e.pngSrc=e.src;_2(e)}else if(B64.test(e.src)){e.src=_7+"?"+e.src.slice(5)}};var I=/^image/i;var _6=makePath("ie7-object.htc",path);ie7HTML.addRecalc("object",function(e){if(I.test(e.type)){var o=document.createElement("<object type=text/x-scriptlet>");o.style.width=e.currentStyle.width;o.style.height=e.currentStyle.height;o.data=_6;var u=makePath(e.data,getPath(location.href));e.parentNode.replaceChild(o,e);cssQuery.clearCache("object");addTimer(o,"",u);return o}})}var _1=false;addEventHandler(window,"onbeforeprint",function(){_1=true;for(var i=0;i<_0.length;i++)_5(_0[i])});addEventHandler(window,"onafterprint",function(){for(var i=0;i<_0.length;i++)_2(_0[i]);_1=false})}); |
/WebSVN/templates/StandardNG/ie7/ie7-html4.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-html4",function(){if(!isHTML)return;HEADER+="h1{font-size:2em}h2{font-size:1.5em;}h3{font-size:1.17em;}"+"h4{font-size:1em}h5{font-size:.83em}h6{font-size:.67em}";var _0={};ie7HTML=new(Fix.specialize({init:DUMMY,addFix:function(){this.fixes.push(arguments)},apply:function(){for(var i=0;i<this.fixes.length;i++){var m=cssQuery(this.fixes[i][0]);var f=this.fixes[i][1]||_1;for(var j=0;j<m.length;j++)f(m[j])}},addRecalc:function(){this.recalcs.push(arguments)},recalc:function(){for(var i=0;i<this.recalcs.length;i++){var m=cssQuery(this.recalcs[i][0]);var r=this.recalcs[i][1],e;var k=Math.pow(2,i);for(var j=0;(e=m[j]);j++){var u=e.uniqueID;if((_0[u]&k)==0){e=r(e)||e;_0[u]|=k}}}}}));ie7HTML.addFix("abbr");ie7HTML.addRecalc("label",function(e){if(!e.htmlFor){var f=cssQuery("input,textarea",e)[0];if(f){addEventHandler(e,"onclick",function(){f.click()})}}});ie7HTML.addRecalc("button,input",function(e){if(e.tagName=="BUTTON"){var m=e.outerHTML.match(/ value="([^"]*)"/i);e.runtimeStyle.value=(m)?m[1]:""}if(e.type=="submit"){addEventHandler(e,"onclick",function(){e.runtimeStyle.clicked=true;setTimeout("document.all."+e.uniqueID+".runtimeStyle.clicked=false",1)})}});var U=/^(submit|reset|button)$/;ie7HTML.addRecalc("form",function(e){addEventHandler(e,"onsubmit",function(){for(var i=0;i<e.length;i++){if(_2(e[i])){e[i].disabled=true;setTimeout("document.all."+e[i].uniqueID+".disabled=false",1)}else if(e[i].tagName=="BUTTON"&&e[i].type=="submit"){setTimeout("document.all."+e[i].uniqueID+".value='"+e[i].value+"'",1);e[i].value=e[i].runtimeStyle.value}}})});function _2(e){return U.test(e.type)&&!e.disabled&&!e.runtimeStyle.clicked};ie7HTML.addRecalc("img",function(e){if(e.alt&&!e.title)e.title=""});var P=(appVersion<5.5)?"HTML:":"";function _1(e){var f=document.createElement("<"+P+e.outerHTML.slice(1));if(e.outerHTML.slice(-2)!="/>"){var en="</"+e.tagName+">",n;while((n=e.nextSibling)&&n.outerHTML!=en){f.appendChild(n)}if(n)n.removeNode()}e.parentNode.replaceChild(f,e)}}); |
/WebSVN/templates/StandardNG/ie7/ie7-ie5.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
if(appVersion<5.5){ANON="HTML:!";var ap=function(f,o,a){f.apply(o,a)};if(''.replace(/^/,String)){var _0=String.prototype.replace;var _1=function(e,r){var m,n="",s=this;while(s&&(m=e.exec(s))){n+=s.slice(0,m.index)+ap(r,this,m);s=s.slice(m.lastIndex)}return n+s};String.prototype.replace=function(e,r){this.replace=(typeof r=="function")?_1:_0;return this.replace(e,r)}}if(!Function.apply){var APPLY="apply-"+Number(new Date);ap=function(f,o,a){var r;o[APPLY]=f;switch(a.length){case 0:r=o[APPLY]();break;case 1:r=o[APPLY](a[0]);break;case 2:r=o[APPLY](a[0],a[1]);break;case 3:r=o[APPLY](a[0],a[1],a[2]);break;case 4:r=o[APPLY](a[0],a[1],a[2],a[3]);break;default:var aa=[],i=a.length-1;do aa[i]="a["+i+"]";while(i--);eval("r=o[APPLY]("+aa+")")}delete o[APPLY];return r};ICommon.valueOf.prototype.inherit=function(){return ap(arguments.callee.caller.ancestor,this,arguments)}}if(![].push)Array.prototype.push=function(){for(var i=0;i<arguments.length;i++){this[this.length]=arguments[i]}return this.length};if(![].pop)Array.prototype.pop=function(){var i=this[this.length-1];this.length--;return i};if(isHTML){HEADER+="address,blockquote,body,dd,div,dt,fieldset,form,"+"frame,frameset,h1,h2,h3,h4,h5,h6,iframe,noframes,object,p,"+"hr,applet,center,dir,menu,pre,dl,li,ol,ul{display:block}"}} |
/WebSVN/templates/StandardNG/ie7/ie7-layout.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-layout",function(){ie7Layout=this;HEADER+="*{boxSizing:content-box}";this.hasLayout=(appVersion<5.5)?function(e){return e.clientWidth}:function(e){return e.currentStyle.hasLayout};this.boxSizing=function(e){if(!ie7Layout.hasLayout(e)){e.style.height="0cm";if(e.currentStyle.verticalAlign=="auto")e.runtimeStyle.verticalAlign="top";_1(e)}};function _1(e){if(e!=viewport&&e.currentStyle.position!="absolute"){collapseMarginTop(e);collapseMarginBottom(e)}};var firstElementChild=cssQuery.valueOf("firstElementChild");var lastElementChild=cssQuery.valueOf("lastElementChild");function collapseMarginTop(e){if(!e.runtimeStyle.marginTop){var p=e.parentElement;if(p&&ie7Layout.hasLayout(p)&&e==firstElementChild(p))return;var f=firstElementChild(e);if(f&&f.currentStyle.styleFloat=="none"&&ie7Layout.hasLayout(f)){collapseMarginTop(f);m=_3(e,e.currentStyle.marginTop);c=_3(f,f.currentStyle.marginTop);if(m<0||c<0){e.runtimeStyle.marginTop=m+c}else{e.runtimeStyle.marginTop=Math.max(c,m)}f.runtimeStyle.marginTop="0px"}}};eval(String(collapseMarginTop).replace(/Top/g,"Bottom").replace(/first/g,"last"));function _3(e,v){return(v=="auto")?0:getPixelValue(e,v)};var U=/^[.\d][\w%]*$/,A=/^(auto|0cm)$/,N="[.\\d]";var applyWidth,applyHeight;function borderBox(e){applyWidth(e);applyHeight(e)};function fixWidth(H){applyWidth=function(e){if(!PERCENT.test(e.currentStyle.width))fixWidth(e);_1(e)};function fixWidth(e,v){if(!e.runtimeStyle.fixedWidth){if(!v)v=e.currentStyle.width;e.runtimeStyle.fixedWidth=(U.test(v))?Math.max(0,getFixedWidth(e,v)):v;setOverrideStyle(e,"width",e.runtimeStyle.fixedWidth)}};function layoutWidth(e){if(!isFixed(e)){var l=e.offsetParent;while(l&&!ie7Layout.hasLayout(l))l=l.offsetParent}return(l||viewport).clientWidth};function getPixelWidth(e,v){if(PERCENT.test(v))return parseInt(parseFloat(v)/100*layoutWidth(e));return getPixelValue(e,v)};var getFixedWidth=function(e,v){var b=e.currentStyle["box-sizing"]=="border-box";var a=0;if(quirksMode&&!b)a+=getBorderWidth(e)+getPaddingWidth(e);else if(!quirksMode&&b)a-=getBorderWidth(e)+getPaddingWidth(e);return getPixelWidth(e,v)+a};function getBorderWidth(e){return e.offsetWidth-e.clientWidth};function getPaddingWidth(e){return getPixelWidth(e,e.currentStyle.paddingLeft)+getPixelWidth(e,e.currentStyle.paddingRight)};eval(String(getPaddingWidth).replace(/padding/g,"margin").replace(/Padding/g,"Margin"));HEADER+="*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";function minWidth(e){if(e.currentStyle["min-width"]!=null){e.style.minWidth=e.currentStyle["min-width"]}if(register(minWidth,e,e.currentStyle.minWidth!="none")){ie7Layout.boxSizing(e);fixWidth(e);resizeWidth(e)}};eval(String(minWidth).replace(/min/g,"max"));ie7Layout.minWidth=minWidth;ie7Layout.maxWidth=maxWidth;function resizeWidth(e){var r=e.getBoundingClientRect();var w=r.right-r.left;if(e.currentStyle.minWidth!="none"&&w<=getFixedWidth(e,e.currentStyle.minWidth)){e.runtimeStyle.width=getFixedWidth(e,e.currentStyle.minWidth)}else if(e.currentStyle.maxWidth!="none"&&w>=getFixedWidth(e,e.currentStyle.maxWidth)){e.runtimeStyle.width=getFixedWidth(e,e.currentStyle.maxWidth)}else{e.runtimeStyle.width=e.runtimeStyle.fixedWidth}};function fixRight(e){if(register(fixRight,e,/^(fixed|absolute)$/.test(e.currentStyle.position)&&getDefinedStyle(e,"left")!="auto"&&getDefinedStyle(e,"right")!="auto"&&A.test(getDefinedStyle(e,"width")))){resizeRight(e);ie7Layout.boxSizing(e)}};ie7Layout.fixRight=fixRight;function resizeRight(e){var l=getPixelWidth(e,e.runtimeStyle._4||e.currentStyle.left);var w=layoutWidth(e)-getPixelWidth(e,e.currentStyle.right)-l-getMarginWidth(e);if(parseInt(e.runtimeStyle.width)==w)return;e.runtimeStyle.width="";if(isFixed(e)||H||e.offsetWidth<w){if(!quirksMode)w-=getBorderWidth(e)+getPaddingWidth(e);if(w<0)w=0;e.runtimeStyle.fixedWidth=w;setOverrideStyle(e,"width",w)}};var _2=0;addResize(function(){var i,w=(_2<viewport.clientWidth);_2=viewport.clientWidth;for(i in minWidth.elements){var e=minWidth.elements[i];var f=(parseInt(e.runtimeStyle.width)==getFixedWidth(e,e.currentStyle.minWidth));if(w&&f)e.runtimeStyle.width="";if(w==f)resizeWidth(e)}for(i in maxWidth.elements){var e=maxWidth.elements[i];var f=(parseInt(e.runtimeStyle.width)==getFixedWidth(e,e.currentStyle.maxWidth));if(!w&&f)e.runtimeStyle.width="";if(w!=f)resizeWidth(e)}for(i in fixRight.elements)resizeRight(fixRight.elements[i])});if(window.IE7_BOX_MODEL!==false){ie7CSS.addRecalc("width",N,quirksMode?applyWidth:_1)}ie7CSS.addRecalc("min-width",N,minWidth);ie7CSS.addRecalc("max-width",N,maxWidth);ie7CSS.addRecalc("right",N,fixRight)};ie7CSS.addRecalc("border-spacing",N,function(e){if(e.currentStyle.borderCollapse!="collapse"){e.cellSpacing=getPixelValue(e,e.currentStyle["border-spacing"])}});ie7CSS.addRecalc("box-sizing","content-box",this.boxSizing);ie7CSS.addRecalc("box-sizing","border-box",borderBox);var _0=new ParseMaster;_0.add(/Width/,"Height");_0.add(/width/,"height");_0.add(/Left/,"Top");_0.add(/left/,"top");_0.add(/Right/,"Bottom");_0.add(/right/,"bottom");eval(_0.exec(String(fixWidth)));fixWidth();fixHeight(true)}); |
/WebSVN/templates/StandardNG/ie7/ie7-load.htc |
---|
0,0 → 1,0 |
<component lightweight="true"><attach event="ondocumentready" onevent="IE7.init()"/></component> |
/WebSVN/templates/StandardNG/ie7/ie7-object.htc |
---|
0,0 → 1,12 |
<html> |
<!-- |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
--> |
<head> |
<style type="text/css">body{margin:0}</style> |
<script type="text/javascript">public_description=new function(){var l=false;this.ie7_anon=true;this.load=function(o,c,u){if(l)return;l=true;function _0(t,p){t.style[p]=o.currentStyle[p]};var p=o;while(p&&p.currentStyle.backgroundColor=="transparent"){p=p.parentElement}if(p)body.style.backgroundColor=p.currentStyle.backgroundColor;_0(body,"backgroundImage");_0(body,"backgroundRepeat");_0(body,"backgroundPositionX");_0(body,"backgroundPositionY");_0(body,"fontFamily");_0(body,"fontSize");_0(wrapper,"paddingTop");_0(wrapper,"paddingRight");_0(wrapper,"paddingBottom");_0(wrapper,"paddingLeft");image.width=o.clientWidth;image.height=o.clientHeight;var B64=/^data:.*;base64/i,P=/.png$/i;if(B64.test(u))u="ie7-base64.php"+"?"+u.slice(5);if(P.test(u)&&!/MSIE 5.0/.test(navigator.userAgent)){image.src="blank.gif";image.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+u+"',sizingMethod='scale')"}else{image.src=u}o.style.width=body.scrollWidth;o.style.height=body.scrollHeight}};</script> |
</head> |
<body id="body"><div id="wrapper"><img id="image"></div></body> |
</html> |
/WebSVN/templates/StandardNG/ie7/ie7-overflow.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-overflow",function(){var S={backgroundColor:"transparent",backgroundImage:"none",backgroundPositionX:null,backgroundPositionY:null,backgroundRepeat:null,borderTopWidth:0,borderRightWidth:0,borderBottomWidth:0,borderLeftStyle:"none",borderTopStyle:"none",borderRightStyle:"none",borderBottomStyle:"none",borderLeftWidth:0,height:null,marginTop:0,marginBottom:0,marginRight:0,marginLeft:0,width:"100%"};function _3(p,s,t){t.style[p]=s.currentStyle[p];if(S[p]!=null){s.runtimeStyle[p]=S[p]}};ie7CSS.addRecalc("overflow","visible",function(e){if(e.parentNode.ie7_wrapper)return;if(ie7Layout&&e.currentStyle["max-height"]!="auto"){ie7Layout.maxHeight(e)}if(e.currentStyle.marginLeft=="auto")e.style.marginLeft=0;if(e.currentStyle.marginRight=="auto")e.style.marginRight=0;var w=document.createElement(ANON);w.ie7_wrapper=true;for(var p in S)_3(p,e,w);w.style.display="block";w.style.position="relative";e.runtimeStyle.position="absolute";e.parentNode.insertBefore(w,e);w.appendChild(e)});cssQuery.addModule("ie7-overflow",function(){function _0(e){return(e&&e.ie7_wrapper)?e.firstChild:e};var _2=previousElementSibling;previousElementSibling=function(e){return _0(_2(e))};var _1=nextElementSibling;nextElementSibling=function(e){return _0(_1(e))};selectors[" "]=function(r,f,t,n){var e,i,j;for(i=0;i<f.length;i++){var s=getElementsByTagName(f[i],t,n);for(j=0;(e=_0(s[j]));j++){if(thisElement(e)&&(!n||compareNamespace(e,n)))r.push(e)}}};selectors[">"]=function(r,f,t,n){var e,i,j;for(i=0;i<f.length;i++){var s=childElements(f[i]);for(j=0;(e=_0(s[j]));j++){if(compareTagName(e,t,n))r.push(e)}}}})}); |
/WebSVN/templates/StandardNG/ie7/ie7-quirks.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-quirks",function(){if(quirksMode){var F="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");for(var i=0;i<F.length;i++){F[F[i]]=F[i-1]||"0.67em"}ie7CSS.addFix(new RegExp("(font(-size)?\\s*:\\s*)([\\w\\-\\.]+)"),function(m,o){return m[o+1]+(F[m[o+3]]||m[o+3])});if(appVersion<6){var N=/^\-/,L=/(em|ex)$/i;var EM=/em$/i,EX=/ex$/i;function _2(e){var s=1;_0.style.fontFamily=e.currentStyle.fontFamily;_0.style.lineHeight=e.currentStyle.lineHeight;while(e!=body){var f=e.currentStyle["ie7-font-size"];if(f){if(EM.test(f))s*=parseFloat(f);else if(PERCENT.test(f))s*=(parseFloat(f)/100);else if(EX.test(f))s*=(parseFloat(f)/2);else{_0.style.fontSize=f;return 1}}e=e.parentElement}return s};var _0=createTempElement();getPixelValue=function(e,v){if(PIXEL.test(v||0))return parseInt(v||0);var scale=N.test(v)?-1:1;if(L.test(v))scale*=_2(e);_0.style.width=(scale<0)?v.slice(1):v;body.appendChild(_0);v=scale*_0.offsetWidth;_0.removeNode();return parseInt(v)};HEADER=HEADER.replace(/(font(-size)?\s*:\s*([^\s;}\/]*))/gi,"ie7-font-size:$3;$1");ie7CSS.addFix(/cursor\s*:\s*pointer/,"cursor:hand");ie7CSS.addFix(/display\s*:\s*list-item/,"display:block")}function getPaddingWidth(e){return getPixelValue(e,e.currentStyle.paddingLeft)+getPixelValue(e,e.currentStyle.paddingRight)};function _1(e){if(appVersion<5.5&&ie7Layout)ie7Layout.boxSizing(e.parentElement);var p=e.parentElement;var m=p.offsetWidth-e.offsetWidth-getPaddingWidth(p);var a=(e.currentStyle["ie7-margin"]&&e.currentStyle.marginRight=="auto")||e.currentStyle["ie7-margin-right"]=="auto";switch(p.currentStyle.textAlign){case"right":m=(a)?parseInt(m/2):0;e.runtimeStyle.marginRight=parseInt(m)+"px";break;case"center":if(a)m=0;default:if(a)m=parseInt(m/2);e.runtimeStyle.marginLeft=parseInt(m)+"px"}};ie7CSS.addRecalc("margin(-left|-right)?","[^};]*auto",function(e){if(register(_1,e,e.parentElement&&e.currentStyle.display=="block"&&e.currentStyle.marginLeft=="auto"&&e.currentStyle.position!="absolute")){_1(e)}});addResize(function(){for(var i in _1.elements){e=_1.elements[i];e.runtimeStyle.marginLeft=e.runtimeStyle.marginRight="";_1(e)}})}}); |
/WebSVN/templates/StandardNG/ie7/ie7-recalc.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-recalc",function(){C=/\sie7_class\d+/g;function _0(e){e.className=e.className.replace(C,"")};function _1(e){e.runtimeStyle.cssText=""};ie7CSS.specialize({elements:{},handlers:[],reset:function(){this.removeEventHandlers();var e=this.elements;for(var i in e)_1(e[i]);this.elements={};if(this.Rule){var e=this.Rule.elements;for(var i in e)_0(e[i]);this.Rule.elements={}}},reload:function(){ie7CSS.rules=[];this.getInlineStyles();this.screen.load();if(this.print)this.print.load();this.refresh();this.trash()},addRecalc:function(p,t,h,r){this.inherit(p,t,function(e){h(e);ie7CSS.elements[e.uniqueID]=e},r)},recalc:function(){this.reset();this.inherit()},addEventHandler:function(e,t,h){e.attachEvent(t,h);this.handlers.push(arguments)},removeEventHandlers:function(){var h;while(h=this.handlers.pop()){removeEventHandler(h[0],h[1],h[2])}},getInlineStyles:function(){var st=document.getElementsByTagName("style"),s;for(var i=st.length-1;(s=st[i]);i--){if(!s.disabled&&!s.ie7){var c=s.c||s.innerHTML;this.styles.push(c);s.c=c}}},trash:function(){var s,i;for(i=0;i<styleSheets.length;i++){s=styleSheets[i];if(!s.ie7&&!s.c){s.c=s.cssText}}this.inherit()},getText:function(s){return s.c||this.inherit(s)}});addEventHandler(window,"onunload",function(){ie7CSS.removeEventHandlers()});if(ie7CSS.Rule){ie7CSS.Rule.elements={};ie7CSS.Rule.prototype.specialize({add:function(e){this.inherit(e);ie7CSS.Rule.elements[e.uniqueID]=e}});ie7CSS.PseudoElement.hash={};ie7CSS.PseudoElement.prototype.specialize({create:function(t){var k=this.selector+":"+t.uniqueID;if(!ie7CSS.PseudoElement.hash[k]){ie7CSS.PseudoElement.hash[k]=true;this.inherit(t)}}})}if(isHTML&&ie7HTML){ie7HTML.specialize({elements:{},addRecalc:function(s,h){this.inherit(s,function(e){if(!ie7HTML.elements[e.uniqueID]){h(e);ie7HTML.elements[e.uniqueID]=e}})}})}document.recalc=function(reload){if(ie7CSS.screen){if(reload)ie7CSS.reload();recalc()}}}); |
/WebSVN/templates/StandardNG/ie7/ie7-server.css |
---|
0,0 → 1,44 |
body, td, dd {font: 10pt Verdana, Arial, Helvetica, sans-serif; color: black;} |
body {margin: 8px; background: #333;} |
h1 {margin: 0;} |
h1 a:hover {background-color: transparent;} |
h2 {font-size: 1.75em;} |
h3 {font-size: 1.1em;} |
p.footnote {font-family: "Times New Roman", Times, serif; font-style: italic;} |
a:active {color: #ff0000;} |
a:link {color: #0a6cce;} |
a:visited {color: #0a6cce;} |
code, *.code {font-family: monospace; font-size: 100%; font-style: normal; white-space: nowrap; |
padding: 0 1px; background: #f2f3f8; border: #d6d9e9 1px solid;} |
code.box {display: block; padding: 10px; margin: 0.5em 0;} |
ul {list-style-type: square;} |
dd {margin: .2em 0 .5em 1em;} |
dl.library dt {display: list-item; margin-left: 3em; list-style-type: square;} |
dl.library dd {font-style: italic; margin-left: 3em;} |
dt {font-weight: bold;} |
dt.pack {color: brown;} |
a img {border-style: none;} |
hr {height: 1px; color: #000; border-style: solid;} |
hr.short {height: 2px; width: 100px;} |
div.document {background: #eef; padding: 20px 20px 5px 20px; width: 600px; border: 1px solid black;} |
hr {border-bottom-width: 0px;} |
div.header hr {color: #0a6cce; background-color: #0a6cce;} |
div.footer hr {color: #898e79; background-color: #898e79; } |
div.header, div.header a:link, div.header a:visited, h3 a:link, h3 a:visited {text-decoration: none;} |
a:hover {color: #fff; background-color: #0a6cce; text-decoration: none;} |
div.footer a:hover {background-color: transparent; text-decoration: none;} |
div.header .menu {text-align: right;} |
div.content {min-height: 100px;} |
div.footer {font-size: x-small; margin-top: 8px;} |
div.footnote {font-family: "times new roman", times; font-style: italic; margin-top: 10px;} |
#license {margin-top: 5px; font-size: xx-small;} |
table {border-top: 1px solid #000; border-left: 1px solid #000;} |
th {background-color: #fff; text-align: left;} |
th, td {border-right: 1px solid #000; border-bottom: 1px solid #000;} |
th.small {width: 100px;} |
th.medium {width: 200px;} |
th.large {width: 270px;} |
th.x-large {width: 408px;} |
table.fixed {table-layout: fixed;} |
span.comment {color: #666;} |
/WebSVN/templates/StandardNG/ie7/ie7-squish.js |
---|
0,0 → 1,45 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
IE7.addModule("ie7-squish", function() { |
/* --------------------------------------------------------------------- |
Squish some IE bugs! |
Some of these bug fixes may have adverse effects so they are |
not included in the standard library. Add your own if you want. |
-dean |
--------------------------------------------------------------------- */ |
// @NOTE: ie7Layout.boxSizing is the same as the "Holly Hack" |
// "doubled margin" bug |
// http://www.positioniseverything.net/explorer/doubled-margin.html |
ie7CSS.addFix(/float\s*:\s*(left|right)/, "display:inline;$1"); |
if (ie7Layout) { |
// "peekaboo" bug |
// http://www.positioniseverything.net/explorer/peekaboo.html |
if (appVersion >= 6) ie7CSS.addRecalc("float", "left|right", function($element) { |
ie7Layout.boxSizing($element.parentElement); |
// "doubled margin" bug |
$element.runtimeStyle.display = "inline"; |
}); |
// "unscrollable content" bug |
// http://www.positioniseverything.net/explorer/unscrollable.html |
ie7CSS.addRecalc("position", "absolute|fixed", function($element) { |
if ($element.offsetParent && $element.offsetParent.currentStyle.position == "relative") |
ie7Layout.boxSizing($element.offsetParent); |
}); |
} |
//# // get rid of Microsoft's pesky image toolbar |
//# if (!complete) document.write('<meta http-equiv="imagetoolbar" content="no">'); |
}); |
/WebSVN/templates/StandardNG/ie7/ie7-standard-p.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('y(!26.1F)11 7(){2C{26.1F=8;6 2s=8.24=11 3b;8.1g=7(){z"1F 4x 0.9 (ad)"};6 5T=/5T/.Z(2y.5h.7C);6 31=(5T)?7(m){26.31(1F+"\\n\\n"+m)}:2s;6 29=ac.29.19(/ab (\\d\\.\\d)/)[1];6 2m=16.aa!="a9";y(/a8/.Z(2y.5h.7C)||29<5||!/^a7/.Z(16.2F.2a))z;6 33=16.5W=="33";6 1s,1K;6 2F=16.2F,1X,1J,1R=16.1R;6 4E="!";6 3Q={};6 2G=1z;1F.24=7(n,s){y(!3Q[n]){y(2G)1k("s="+23(s));3Q[n]=11 s()}};6 R=/^[\\w\\.]+[^:]*$/;7 1Z(h,p){y(R.Z(h))h=(p||"")+h;z h};7 3F(h,p){h=1Z(h,p);z h.1q(0,h.7a("/")+1)};6 s=16.7B[16.7B.K-1];2C{1k(s.7j)}2j(i){}6 2k=3F(s.1l);6 2v;2C{6 l=(a6()>=5)?"a5":"5n";2v=11 a4(l+".a3")}2j(i){}6 4A={};7 3T(h,p){2C{h=1Z(h,p);y(!4A[h]){2v.a2("a1",h,1z);2v.a0();y(2v.7A==0||2v.7A==9Z){4A[h]=2v.9Y}}}2j(i){31("4B [1]: 5O 9X 9W "+h)}5U{z 4A[h]||""}};6 4i=1Z("9V.9U",2k);7 2o(1w){y(1w!=1U){1w.1T=1t.1C.1T;1w.1e=1t.1C.1e}z 1w};2o.1e=7(p,c){y(!p)p={};y(!c)c=p.1h;y(c=={}.1h)c=11 3b("8.1T()");c.1i=11 3b("z 8");c.1i.1C=11 8.1i;c.1i.1C.1e(p);c.1C=11 c.1i;c.1i.1C.1h=c.1C.1h=c;c.2E=8;c.1e=1a.5P;c.4z=8.4z;z c};2o.1i=11 3b("z 8");2o.1i.1C={1h:2o,1T:7(){z 1a.5P.9T.2E.2q(8,1a)},1e:7(1w){y(8==8.1h.1C&&8.1h.1e){z 8.1h.1i.1C.1e(1w)}O(6 i 28 1w){34(i){1m"1h":1m"1g":1m"1i":5M}y(3Y 1w[i]=="7"&&1w[i]!=8[i]){1w[i].2E=8[i]}8[i]=1w[i]}y(1w.1g!=8.1g&&1w.1g!={}.1g){1w.1g.2E=8.1g;8.1g=1w.1g}z 8}};7 1t(){};8.1t=2o.1e({1h:1t,1g:7(){z"[9S "+(8.1h.1x||"9R")+"]"},9Q:7(2i){z 8.1h==2i||2i.4z(8.1h)}});1t.1x="1t";1t.2E=1U;1t.4z=7(2i){1D(2i&&2i.2E!=8)2i=2i.2E;z 7q(2i)};1t.1i.2E=2o;3u 8.1t;6 5x=1t.1e({1h:7(){8.3L=[];8.1Q=[]},1S:2s});y(29<5.5)1k(3T("17-9P.5X",2k));6 5S=1z;1F.1S=7(){2C{y(5S)z;5S=33=1o;1X=16.1X;1J=(2m)?1X:2F;y(2l&&1s)1s.2q();V.2q();1u();31("2G 9O")}2j(e){31("4B [2]: "+e.5V)}};6 1Q=[];7 1n(r){1Q.1b(r)};7 1u(){14.5g();y(2l&&1s)1s.1u();V.1u();O(6 i=0;i<1Q.K;i++)1Q[i]()};7 2U(){6 E=0,R=1,L=2;6 G=/\\(/g,S=/\\$\\d/,I=/^\\$\\d+$/,T=/([\'"])\\1\\+(.*)\\+\\1\\1$/,7t=/\\\\./g,Q=/\'/,7z=/\\3S[^\\3S]*\\3S/g;6 3N=8;8.15=7(e,r){y(!r)r="";6 l=(5R(23(e)).19(G)||"").K+1;y(S.Z(r)){y(I.Z(r)){r=25(r.1q(1))-1}1d{6 i=l;6 q=Q.Z(5R(r))?\'"\':"\'";1D(i)r=r.2O("$"+i--).2p(q+"+a[o+"+i+"]+"+q);r=11 3b("a,o","z"+q+r.13(T,"$1")+q)}}7y(e||"/^$/",r,l)};8.2V=7(s){3R.K=0;z 7u(7v(s,8.4y).13(11 1N(30,8.5Q?"5D":"g"),7w),8.4y).13(7z,"")};8.72=7(){30.K=0};6 3R=[];6 30=[];6 7x=7(){z"("+23(8[E]).1q(1,-1)+")"};30.1g=7(){z 8.2p("|")};7 7y(){1a.1g=7x;30[30.K]=1a}7 7w(){y(!1a[0])z"";6 i=1,j=0,p;1D(p=30[j++]){y(1a[i]){6 r=p[R];34(3Y r){1m"7":z r(1a,i);1m"9N":z 1a[r+i]}6 d=(1a[i].6F(3N.4y)==-1)?"":"\\3S"+1a[i]+"\\3S";z d+r}1d i+=p[L]}};7 7v(s,e){z e?s.13(11 1N("\\\\"+e+"(.)","g"),7(m,c){3R[3R.K]=c;z e}):s};7 7u(s,e){6 i=0;z e?s.13(11 1N("\\\\"+e,"g"),7(){z e+(3R[i++]||"")}):s};7 5R(s){z s.13(7t,"")}};2U.1C={1h:2U,5Q:1z,4y:""};1t.1e(2U.1C);6 3M=2U.1e({5Q:1o});6 14=7(){6 4x="2.0.2";6 C=/\\s*,\\s*/;6 14=7(s,1E){2C{6 m=[];6 u=1a.5P.5I&&!1E;6 b=(1E)?(1E.1h==7n)?1E:[1E]:[16];6 2f=45(s).2O(C),i;O(i=0;i<2f.K;i++){s=5J(2f[i]);y(4P&&s.1q(0,3).2p("")==" *#"){s=s.1q(2);1E=7o([],b,s[1])}1d 1E=b;6 j=0,t,f,a,c="";1D(j<s.K){t=s[j++];f=s[j++];c+=t+f;a="";y(s[j]=="("){1D(s[j++]!=")"&&j<s.K){a+=s[j]}a=a.1q(0,-1);c+="("+a+")"}1E=(u&&2e[c])?2e[c]:7m(1E,t,f,a);y(u)2e[c]=1E}m=m.4J(1E)}3u 14.5O;z m}2j(e){14.5O=e;z[]}};14.1g=7(){z"7 14() {\\n [4x "+4x+"]\\n}"};6 2e={};14.5I=1z;14.5g=7(s){y(s){s=5J(s).2p("");3u 2e[s]}1d 2e={}};6 3Q={};6 2G=1z;14.24=7(n,s){y(2G)1k("s="+23(s));3Q[n]=11 s()};14.1i=7(c){z c?1k(c):8};6 1V={};6 1B={};6 1p={19:/\\[([\\w-]+(\\|[\\w-]+)?)\\s*(\\W?=)?\\s*([^\\]]*)\\]/};6 2R=[];1V[" "]=7(r,f,t,n){6 e,i,j;O(i=0;i<f.K;i++){6 s=4w(f[i],t,n);O(j=0;(e=s[j]);j++){y(2D(e)&&5K(e,n))r.1b(e)}}};1V["#"]=7(r,f,i){6 e,j;O(j=0;(e=f[j]);j++)y(e.1c==i)r.1b(e)};1V["."]=7(r,f,c){c=11 1N("(^|\\\\s)"+c+"(\\\\s|$)");6 e,i;O(i=0;(e=f[i]);i++)y(c.Z(e.1x))r.1b(e)};1V[":"]=7(r,f,p,a){6 t=1B[p],e,i;y(t)O(i=0;(e=f[i]);i++)y(t(e,a))r.1b(e)};1B["21"]=7(e){6 d=5L(e);y(d.5N)O(6 i=0;i<d.5N.K;i++){y(d.5N[i]==e)z 1o}};1B["37"]=7(e){};6 2D=7(e){z(e&&e.7k==1&&e.2W!="!")?e:1U};6 4S=7(e){1D(e&&(e=e.9M)&&!2D(e))5M;z e};6 47=7(e){1D(e&&(e=e.6W)&&!2D(e))5M;z e};6 3l=7(e){z 2D(e.7s)||47(e.7s)};6 5t=7(e){z 2D(e.7r)||4S(e.7r)};6 6q=7(e){6 c=[];e=3l(e);1D(e){c.1b(e);e=47(e)}z c};6 4P=1o;6 5H=7(e){6 d=5L(e);z(3Y d.7p=="9L")?/\\.9K$/i.Z(d.9J):7q(d.7p=="9I 9H")};6 5L=7(e){z e.9G||e.16};6 4w=7(e,t){z(t=="*"&&e.1Y)?e.1Y:e.4w(t)};6 4T=7(e,t,n){y(t=="*")z 2D(e);y(!5K(e,n))z 1z;y(!5H(e))t=t.9F();z e.2W==t};6 5K=7(e,n){z!n||(n=="*")||(e.9E==n)};6 9D=7(e){z e.9C};7 7o(r,f,1c){6 m,i,j;O(i=0;i<f.K;i++){y(m=f[i].1Y.9B(1c)){y(m.1c==1c)r.1b(m);1d y(m.K!=1U){O(j=0;j<m.K;j++){y(m[j].1c==1c)r.1b(m[j])}}}}z r};y(![].1b)7n.1C.1b=7(){O(6 i=0;i<1a.K;i++){8[8.K]=1a[i]}z 8.K};6 N=/\\|/;7 7m(1E,t,f,a){y(N.Z(f)){f=f.2O(N);a=f[0];f=f[1]}6 r=[];y(1V[t]){1V[t](r,1E,f,a)}z r};6 S=/^[^\\s>+~]/;6 7l=/[\\s#.:>+~()@]|[^\\s#.:>+~()@]+/g;7 5J(s){y(S.Z(s))s=" "+s;z s.19(7l)||[]};6 W=/\\s*([\\s>+~(),]|^|$)\\s*/g;6 I=/([\\s>+~,]|[^(]\\+|^)([#.:@])/g;6 45=7(s){z s.13(W,"$1").13(I,"$1*$2")};6 2c={1g:7(){z"\'"},19:/^(\'[^\']*\')|("[^"]*")$/,Z:7(s){z 8.19.Z(s)},15:7(s){z 8.Z(s)?s:8+s+8},3v:7(s){z 8.Z(s)?s.1q(1,-1):s}};6 2w=7(t){z 2c.3v(t)};6 E=/([\\/()[\\]?{}|*+-])/g;7 4O(s){z s.13(E,"\\\\$1")};2G=1o;z 14}();14.5I=1o;14.24("17",7(){2D=7(e){z(e&&e.7k==1&&e.2W!="!"&&!e.2K)?e:1U}});14.1i("2w=1a[1]",42);6 2l=!14.1i("5H(1a[1])",2F);6 2r=":21{17-21:21}:37{17-21:37}"+(2l?"":"*{6Q:0}");6 V=11(5x.1e({5B:11 3M,2P:"",2Y:"",5F:[],1S:7(){8.5G();8.4t()},4t:7(){V.3O.18=2r+8.2P+8.2Y},7i:7(){6 3P=16.4w("1r"),s;O(6 i=3P.K-1;(s=3P[i]);i--){y(!s.3m&&!s.17){8.5F.1b(s.7j)}}},2q:7(){8.7i();8.4t();11 3y("2P");8.7g()},3i:7(e,r){8.5B.15(e,r)},1u:7(){6 R=/7h\\d+/g;6 s=2r.19(/[{,]/g).K;6 3P=s+(8.2P.18.19(/\\{/g)||"").K;6 2Q=8.3O.2t,r;6 4v,c,4u,e,i,j,k,1c;O(i=s;i<3P;i++){r=2Q[i];y(r&&(4v=r.1r.18.19(R))){4u=14(r.4M);y(4u.K)O(j=0;j<4v.K;j++){1c=4v[j];c=V.1Q[1c.1q(10)][2];O(k=0;(e=4u[k]);k++){y(e.D[1c])c(e)}}}}},1n:7(p,t,h,r){t=11 1N("([{;\\\\s])"+p+"\\\\s*:\\\\s*"+t+"[^;}]*");6 i=8.1Q.K;y(r)r=p+":"+r;8.3i(t,7(m,o){z(r?m[o+1]+r:m[o])+";17-"+m[o].1q(1)+";7h"+i+":1"});8.1Q.1b(1a);z i},2w:7(s){z s.18||""},5G:7(){y(33||!2l)16.5G();1d 16.9A("<1r 17=1o></1r>");8.3O=1R[1R.K-1];8.3O.17=1o;8.3O.18=2r},7g:7(){O(6 i=0;i<1R.K;i++){y(!1R[i].17&&1R[i].18){1R[i].18=""}}}}));7 3y(m){8.2Z=m;8.3q();V[m]=8;V.4t()};1t.1e({1h:3y,1g:7(){z"@2Z "+8.2Z+"{"+8.18+"}"},1u:2s,3q:7(){8.18="";8.2w();8.38();8.18=41(8.18);f={}},2w:7(){6 7e=[].4J(V.5F);6 M=/@2Z\\s+([^{]*)\\{([^@]+\\})\\s*\\}/5D;6 A=/\\9z\\b|^$/i,S=/\\9y\\b/i,P=/\\9x\\b/i;7 7d(c,m){4s.v=m;z c.13(M,4s)};7 4s(9w,m,c){m=5E(m);34(m){1m"2P":1m"2Y":y(m!=4s.v)z"";1m"1Y":z c}z""};7 5E(m){y(A.Z(m))z"1Y";1d y(S.Z(m))z(P.Z(m))?"1Y":"2P";1d y(P.Z(m))z"2Y"};6 3N=8;7 5C(s,p,m,l){6 c="";y(!l){m=5E(s.2Z);l=0}y(m=="1Y"||m==3N.2Z){y(l<3){O(6 i=0;i<s.7f.K;i++){c+=5C(s.7f[i],3F(s.2u,p),m,l+1)}}c+=79(s.2u?7c(s,p):7e.77()||"");c=7d(c,3N.2Z)}z c};6 f={};7 7c(s,p){6 u=1Z(s.2u,p);y(f[u])z"";f[u]=(s.3m)?"":7b(V.2w(s,p),3F(s.2u,p));z f[u]};6 U=/(43\\s*\\(\\s*[\'"]?)([\\w\\.]+[^:\\)]*[\'"]?\\))/5D;7 7b(c,p){z c.13(U,"$1"+p.1q(0,p.7a("/")+1)+"$2")};O(6 i=0;i<1R.K;i++){y(!1R[i].3m&&!1R[i].17){8.18+=5C(1R[i])}}},38:7(){8.18=V.5B.2V(8.18)},1u:2s});6 2c=14.1i("2c");6 4r=[];7 79(c){z 2n.2V(3r.2V(c))};7 5A(m,o){z 2c+(4r.1b(m[o])-1)+2c};7 42(v){z 2c.Z(v)?1k(4r[1k(v)]):v};6 2n=11 3M;2n.15(/\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\//);2n.15(/\'[^\']*\'/,5A);2n.15(/"[^"]*"/,5A);2n.15(/\\s+/," ");2n.15(/@(9v|9u)[^;\\n]+[;\\n]|<!\\-\\-|\\-\\->/);6 3r=11 3M;3r.15(/\\\\\'/,"\\\\9t");3r.15(/\\\\"/,"\\\\46");6 5z=11 3M;5z.15(/\'(\\d+)\'/,78);7 41(c){z 5z.2V(c)};7 78(m,o){z 4r[m[o+1]]};6 5y=[];7 4U(h){1n(h);1j(26,"9s",h)};7 1j(e,t,h){e.9r(t,h);5y.1b(1a)};7 76(e,t,h){2C{e.9q(t,h)}2j(i){}};1j(26,"9p",7(){6 h;1D(h=5y.77()){76(h[0],h[1],h[2])}});7 20(h,e,c){y(!h.1O)h.1O={};y(c)h.1O[e.2a]=e;1d 3u h.1O[e.2a];z c};1j(26,"6z",7(){y(!V.2Y)11 3y("2Y");V.2Y.1u()});6 75=/^\\d+(9o)?$/i;6 3d=/^\\d+%$/;6 3c=7(e,v){y(75.Z(v))z 25(v);6 s=e.1r.1f;6 r=e.J.1f;e.J.1f=e.D.1f;e.1r.1f=v||0;v=e.1r.4e;e.1r.1f=s;e.J.1f=r;z v};7 6x(t){6 e=16.3X(t||"2M");e.1r.18="1y:3C;6R:0;4K:9n;3G:1M;9m:9l(0 0 0 0);1f:-9k";e.2K=1o;z e};6 4q="17-";7 3D(e){z e.D["17-1y"]=="2z"};7 4o(e,p){z e.D[4q+p]||e.D[p]};7 2T(e,p,v){y(e.D[4q+p]==1U){e.J[4q+p]=e.D[p]}e.J[p]=v};7 4H(o,c,u){6 t=9j(7(){2C{y(!o.3q)z;o.3q(o,c,u);74(t)}2j(i){74(t)}},10)};1F.24("17-9i",7(){y(!2l)z;2r+="9h{3p-3o:9g}9f{3p-3o:1.9e;}9d{3p-3o:1.9c;}"+"9b{3p-3o:9a}99{3p-3o:.98}97{3p-3o:.96}";6 5w={};1s=11(5x.1e({1S:2s,3i:7(){8.3L.1b(1a)},2q:7(){O(6 i=0;i<8.3L.K;i++){6 m=14(8.3L[i][0]);6 f=8.3L[i][1]||6X;O(6 j=0;j<m.K;j++)f(m[j])}},1n:7(){8.1Q.1b(1a)},1u:7(){O(6 i=0;i<8.1Q.K;i++){6 m=14(8.1Q[i][0]);6 r=8.1Q[i][1],e;6 k=4g.95(2,i);O(6 j=0;(e=m[j]);j++){6 u=e.2a;y((5w[u]&k)==0){e=r(e)||e;5w[u]|=k}}}}}));1s.3i("94");1s.1n("93",7(e){y(!e.6o){6 f=14("5l,92",e)[0];y(f){1j(e,"73",7(){f.91()})}}});1s.1n("71,5l",7(e){y(e.2W=="70"){6 m=e.3z.19(/ 3n="([^"]*)"/i);e.J.3n=(m)?m[1]:""}y(e.2L=="5v"){1j(e,"73",7(){e.J.5u=1o;32("16.1Y."+e.2a+".J.5u=1z",1)})}});6 U=/^(5v|72|71)$/;1s.1n("90",7(e){1j(e,"8Z",7(){O(6 i=0;i<e.K;i++){y(6Z(e[i])){e[i].3m=1o;32("16.1Y."+e[i].2a+".3m=1z",1)}1d y(e[i].2W=="70"&&e[i].2L=="5v"){32("16.1Y."+e[i].2a+".3n=\'"+e[i].3n+"\'",1);e[i].3n=e[i].J.3n}}})});7 6Z(e){z U.Z(e.2L)&&!e.3m&&!e.J.5u};1s.1n("5d",7(e){y(e.8Y&&!e.6Y)e.6Y=""});6 P=(29<5.5)?"8X:":"";7 6X(e){6 f=16.3X("<"+P+e.3z.1q(1));y(e.3z.1q(-2)!="/>"){6 6V="</"+e.2W+">",n;1D((n=e.6W)&&n.3z!=6V){f.6t(n)}y(n)n.8W()}e.4R.6A(f,e)}});1F.24("17-8V",7(){1K=8;2r+="*{3H:22-2X}";8.3j=(29<5.5)?7(e){z e.1I}:7(e){z e.D.3j};8.3H=7(e){y(!1K.3j(e)){e.1r.2b="6T";y(e.D.6U=="1P")e.J.6U="2y";4k(e)}};7 4k(e){y(e!=1J&&e.D.1y!="3C"){4p(e);8U(e)}};6 3l=14.1i("3l");6 5t=14.1i("5t");7 4p(e){y(!e.J.3k){6 p=e.59;y(p&&1K.3j(p)&&e==3l(p))z;6 f=3l(e);y(f&&f.D.8T=="1M"&&1K.3j(f)){4p(f);m=5s(e,e.D.3k);c=5s(f,f.D.3k);y(m<0||c<0){e.J.3k=m+c}1d{e.J.3k=4g.3g(c,m)}f.J.3k="8S"}}};1k(23(4p).13(/5c/g,"6N").13(/4N/g,"8R"));7 5s(e,v){z(v=="1P")?0:3c(e,v)};6 U=/^[.\\d][\\w%]*$/,A=/^(1P|6T)$/,N="[.\\\\d]";6 4l,6S;7 6O(e){4l(e);6S(e)};7 2g(H){4l=7(e){y(!3d.Z(e.D.12))2g(e);4k(e)};7 2g(e,v){y(!e.J.3J){y(!v)v=e.D.12;e.J.3J=(U.Z(v))?4g.3g(0,2B(e,v)):v;2T(e,"12",e.J.3J)}};7 5r(e){y(!3D(e)){6 l=e.3B;1D(l&&!1K.3j(l))l=l.3B}z(l||1J).1I};7 1H(e,v){y(3d.Z(v))z 25(4c(v)/3w*5r(e));z 3c(e,v)};6 2B=7(e,v){6 b=e.D["2X-5o"]=="3G-2X";6 a=0;y(2m&&!b)a+=4n(e)+3K(e);1d y(!2m&&b)a-=4n(e)+3K(e);z 1H(e,v)+a};7 4n(e){z e.2S-e.1I};7 3K(e){z 1H(e,e.D.8Q)+1H(e,e.D.8P)};1k(23(3K).13(/6R/g,"6Q").13(/8O/g,"8N"));2r+="*{1A:1M;27:1M;3I-12:1M;3g-12:1M}";7 1A(e){y(e.D["3I-12"]!=1U){e.1r.1A=e.D["3I-12"]}y(20(1A,e,e.D.1A!="1M")){1K.3H(e);2g(e);4m(e)}};1k(23(1A).13(/3I/g,"3g"));1K.1A=1A;1K.27=27;7 4m(e){6 r=e.54();6 w=r.1W-r.1f;y(e.D.1A!="1M"&&w<=2B(e,e.D.1A)){e.J.12=2B(e,e.D.1A)}1d y(e.D.27!="1M"&&w>=2B(e,e.D.27)){e.J.12=2B(e,e.D.27)}1d{e.J.12=e.J.3J}};7 2x(e){y(20(2x,e,/^(2z|3C)$/.Z(e.D.1y)&&4o(e,"1f")!="1P"&&4o(e,"1W")!="1P"&&A.Z(4o(e,"12")))){5p(e);1K.3H(e)}};1K.2x=2x;7 5p(e){6 l=1H(e,e.J.52||e.D.1f);6 w=5r(e)-1H(e,e.D.1W)-l-8M(e);y(25(e.J.12)==w)z;e.J.12="";y(3D(e)||H||e.2S<w){y(!2m)w-=4n(e)+3K(e);y(w<0)w=0;e.J.3J=w;2T(e,"12",w)}};6 5q=0;4U(7(){6 i,w=(5q<1J.1I);5q=1J.1I;O(i 28 1A.1O){6 e=1A.1O[i];6 f=(25(e.J.12)==2B(e,e.D.1A));y(w&&f)e.J.12="";y(w==f)4m(e)}O(i 28 27.1O){6 e=27.1O[i];6 f=(25(e.J.12)==2B(e,e.D.27));y(!w&&f)e.J.12="";y(w!=f)4m(e)}O(i 28 2x.1O)5p(2x.1O[i])});y(26.8L!==1z){V.1n("12",N,2m?4l:4k)}V.1n("3I-12",N,1A);V.1n("3g-12",N,27);V.1n("1W",N,2x)};V.1n("3G-6P",N,7(e){y(e.D.8K!="8J"){e.8I=3c(e,e.D["3G-6P"])}});V.1n("2X-5o","22-2X",8.3H);V.1n("2X-5o","3G-2X",6O);6 1v=11 2U;1v.15(/6v/,"6u");1v.15(/12/,"2b");1v.15(/6w/,"5c");1v.15(/1f/,"2y");1v.15(/8H/,"6N");1v.15(/1W/,"56");1k(1v.2V(23(2g)));2g();8G(1o)});1F.24("17-8F",7(){y(29<5.5)z;6 A="6J.5n.8E";6 F="6K:"+A+"(1l=\'%1\',8D=\'6H\')";6 5j=11 1N((26.8C||"-8B.8A")+"$","i");6 3h=[];7 5f(e){6 f=e.6M[A];y(f){f.1l=e.1l;f.6L=1o}1d{e.J.5m=F.13(/%1/,e.1l);3h.1b(e)}e.1l=4i};7 6y(e){e.1l=e.4D;e.6M[A].6L=1z};V.3i(/6I\\s*:\\s*([\\d.]+)/,7(m,o){z"6G:1;5m:6K:6J.5n.8z(6I="+((4c(m[o+1])*3w)||1)+")"});6 B=/5e(-5i)?\\s*:\\s*([^\\(};]*)43\\(([^\\)]+)\\)([^;}]*)/;V.3i(B,7(m,o){6 u=42(m[o+3]);z 5j.Z(u)?"5m:"+F.13(/6H/,"8y").13(/%1/,u)+";6G:1;5e"+(m[o+1]||"")+":"+(m[o+2]||"")+"1M"+(m[o+4]||""):m[o]});y(1s){1s.1n("5d,5l",7(e){y(e.2W=="8x"&&e.2L!="5i")z;5k(e);1j(e,"8w",7(){y(!4j&&60.8v=="1l"&&e.1l.6F(4i)==-1)5k(e)})});6 6D=/^3W:.*;6E/i;6 6C=1Z("17-6E.8u",2k);7 5k(e){y(5j.Z(e.1l)){6 i=11 8t(e.12,e.2b);i.8s=7(){e.12=i.12;e.2b=i.2b;i=1U};i.1l=e.1l;e.4D=e.1l;5f(e)}1d y(6D.Z(e.1l)){e.1l=6C+"?"+e.1l.1q(5)}};6 I=/^5i/i;6 6B=1Z("17-2M.4C",2k);1s.1n("2M",7(e){y(I.Z(e.2L)){6 o=16.3X("<2M 2L=68/x-67>");o.1r.12=e.D.12;o.1r.2b=e.D.2b;o.3W=6B;6 u=1Z(e.3W,3F(5h.2u));e.4R.6A(o,e);14.5g("2M");4H(o,"",u);z o}})}6 4j=1z;1j(26,"6z",7(){4j=1o;O(6 i=0;i<3h.K;i++)6y(3h[i])});1j(26,"8r",7(){O(6 i=0;i<3h.K;i++)5f(3h[i]);4j=1z})});1F.24("17-2z",7(){V.1n("1y","2z",4a,"3C");V.1n("5e(-8q)?","[^};]*2z",4b);6 4Z=(2m)?"1X":"2F";6 4h=7(){y(1X.D.5b!="2z"){y(1X.D.5a=="1M"){1X.J.8p="8o-8n";1X.J.5a="43("+4i+")"}1X.J.5b="2z"}4h=2s};6 2h=6x("5d");7 1v(f){z 2A.2V(23(f))};6 2A=11 2U;2A.15(/6w/,"5c");2A.15(/1f/,"2y");2A.15(/6v/,"6u");2A.15(/12/,"2b");2A.15(/1W/,"56");2A.15(/X/,"Y");7 3f(e){z(e)?3D(e)||3f(e.59):1z};7 4f(e,p,3e){32("16.1Y."+e.2a+".J.4f(\'"+p+"\',\'"+3e+"\')",0)};7 4b(e){y(20(4b,e,e.D.5b=="2z"&&!e.61(1X))){4h();58(e);8m(e);4V(e)}};7 4V(e){2h.1l=e.D.5a.1q(5,-2);6 p=(e.6c)?e:e.59;p.6t(2h);57(e);8l(e);p.8k(2h)};7 58(e){e.1r.3E=e.D.3E;y(!3f(e)){6 3e="(25(J.3A)+16."+4Z+".6s)||0";4f(e,"3E",3e)}};1k(1v(58));7 57(e){6 p=3f(e)?"3E":"3A";e.J[p]=55(e,e.1r.3E)-e.54().1f-e.8j+2};1k(1v(57));7 55(e,p){34(p){1m"1f":1m"2y":z 0;1m"1W":1m"56":z 1J.1I-2h.2S;1m"8i":z(1J.1I-2h.2S)/2;8h:y(3d.Z(p)){z 25((1J.1I-2h.2S)*4c(p)/3w)}2h.1r.1f=p;z 2h.3A}};1k(1v(55));7 4a(e){y(20(4a,e,3D(e))){2T(e,"1y","3C");2T(e,"1f",e.D.1f);2T(e,"2y",e.D.2y);4h();y(1K)1K.2x(e);49(e)}};7 49(e,r){8g(e,r);4Y(e,r,1o);y(!e.J.4d&&e.D.4X=="1P"&&e.D.1W!="1P"){6 l=1J.1I-1H(e,e.D.1W)-1H(e,e.J.52)-e.1I;y(e.D.8f=="1P")l=25(l/2);y(3f(e.3B))e.J.4e+=l;1d e.J.50=l}53(e);8e(e)};7 53(e){y(e.D.12!="1P"){6 r=e.54();6 w=e.2S-1J.1I+r.1f-2;y(w>=0){w=4g.3g(3c(e,e.D.12)-w,0);2T(e,"12",w)}}};1k(1v(53));7 4Y(e,r){y(!r&&3d.Z(e.D.12)){e.J.2g=e.D.12}y(e.J.2g){e.J.12=1H(e,e.J.2g)}y(r){y(!e.J.4d)z}1d{e.J.50=0;e.J.52=e.D.1f;e.J.4d=e.D.1W!="1P"&&e.D.1f=="1P"}e.J.1f="";e.J.51=4W(e);e.J.4e=e.J.51;y(!r&&!3f(e.3B)){6 3e="J.51+J.50+16."+4Z+".6s";4f(e,"4e",3e)}};1k(1v(4Y));7 4W(e){6 s=e.3A,n=1;y(e.J.4d){s=1J.1I-e.2S-1H(e,e.D.1W)}y(e.D.4X!="1P"){s-=1H(e,e.D.4X)}1D(e=e.3B){y(e.D.1y!="8d")n=-1;s+=e.3A*n}z s};1k(1v(4W));7 1H(e,v){y(3d.Z(v))z 25(4c(v)/3w*1J.1I);z 3c(e,v)};1k(1v(1H));7 6r(){6 e=4b.1O;O(6 i 28 e)4V(e[i]);e=4a.1O;O(i 28 e){49(e[i],1o);49(e[i],1o)}48=0};6 48;4U(7(){y(!48)48=32(6r,0)})});1F.24("17-8c-1V",7(){14.24("8b-8a",7(){1V[">"]=7(r,f,t,n){6 e,i,j;O(i=0;i<f.K;i++){6 s=6q(f[i]);O(j=0;(e=s[j]);j++)y(4T(e,t,n))r.1b(e)}};1V["+"]=7(r,f,t,n){O(6 i=0;i<f.K;i++){6 e=47(f[i]);y(e&&4T(e,t,n))r.1b(e)}};1V["@"]=7(r,f,a){6 t=2R[a].Z;6 e,i;O(i=0;(e=f[i]);i++)y(t(e))r.1b(e)};1B["4N-89"]=7(e){z!4S(e)};1B["4Q"]=7(e,c){c=11 1N("^"+c,"i");1D(e&&!e.2H("4Q"))e=e.4R;z e&&c.Z(e.2H("4Q"))};1p.6p=/\\\\:/g;1p.3x="@";1p.3a={};1p.13=7(m,a,n,c,v){6 k=8.3x+m;y(!2R[k]){a=8.3Z(a,c||"",v||"");2R[k]=a;2R.1b(a)}z 2R[k].1c};1p.38=7(s){s=s.13(8.6p,"|");6 m;1D(m=s.19(8.19)){6 r=8.13(m[0],m[1],m[2],m[3],m[4]);s=s.13(8.19,r)}z s};1p.3Z=7(p,t,v){6 a={};a.1c=8.3x+2R.K;a.66=p;t=8.3a[t];t=t?t(8.2H(p),2w(v)):1z;a.Z=11 3b("e","z "+t);z a};1p.2H=7(n){34(n.5Z()){1m"1c":z"e.1c";1m"3U":z"e.1x";1m"O":z"e.6o";1m"2u":y(4P){z"23((e.3z.19(/2u=\\\\46?([^\\\\s\\\\46]*)\\\\46?/)||[])[1]||\'\')"}}z"e.2H(\'"+n.13(N,":")+"\')"};1p.3a[""]=7(a){z a};1p.3a["="]=7(a,v){z a+"=="+2c.15(v)};1p.3a["~="]=7(a,v){z"/(^| )"+4O(v)+"( |$)/.Z("+a+")"};1p.3a["|="]=7(a,v){z"/^"+4O(v)+"(-|$)/.Z("+a+")"};6 6n=45;45=7(s){z 6n(1p.38(s))}});6 1p=14.1i("1p");6 H=/a(#[\\w-]+)?(\\.[\\w-]+)?:(65|62)/i;6 6l=/\\s*\\{\\s*/,6m=/\\s*\\}\\s*/,C=/\\s*\\,\\s*/;6 F=/(.*)(:4N-(88|87))/;3y.1C.1e({38:7(){8.1T();6 o=V.2t.K;6 2Q=8.18.2O(6m),r;6 2f,c,i,j;O(i=0;i<2Q.K;i++){r=2Q[i].2O(6l);2f=r[0].2O(C);c=r[1];O(j=0;j<2f.K;j++){2f[j]=c?8.6k(2f[j],c):""}2Q[i]=2f.2p("\\n")}8.18=2Q.2p("\\n");8.2t=V.2t.1q(o)},1u:7(){6 r,i;O(i=0;(r=8.2t[i]);i++)r.1u()},6k:7(s,c){y(V.6j.Z(s)){6 m;y(m=s.19(1L.39)){z 11 1L(m[1],m[2],c)}1d y(m=s.19(2d.39)){y(!2l||!H.Z(m)||2d.44.Z(m)){z 11 2d(s,m[1],m[2],m[3],c)}}1d z 11 1G(s,c)}z s+" {"+c+"}"}});V.1e({2t:[],1B:14.1i("1B"),36:{},2e:14.1i("2e"),1G:1G,2d:2d,1L:1L,2J:2J,2q:7(){6 p=8.1B+"|6i|6h|"+8.36;p=p.13(/(21|37)\\|/g,"");8.6j=11 1N("[>+~\\[]|([:.])[\\\\w-()]+\\\\1|:("+p+")");6 c="[^\\\\s(]+\\\\s*[+~]|@\\\\d+|:(";1G.44=11 1N(c+p+")","g");2d.44=11 1N(c+8.1B+")","g");2d.39=11 1N("(.*):("+8.36+")(.*)");1L.39=/(.*):(6i|6h).*/;8.1T()},1u:7(){8.2P.1u();8.1T()},2w:7(s,p){z 2v?(3T(s.2u,p)||s.18):8.1T(s)},1j:7(e,t,h){1j(e,t,h)}});7 1G(s,c){8.1c=V.2t.K;8.1x=1G.3x+8.1c;s=(s).19(F)||s||"*";8.40=s[1]||s;8.4M=1G.6g(8.40)+"."+8.1x+(s[2]||"");8.18=c;8.39=11 1N("\\\\s"+8.1x+"(\\\\s|$)","g");V.2t.1b(8);8.1S()};1t.1e({1h:1G,1g:7(){z 8.4M+" {"+8.18+"}"},1S:2s,15:7(e){e.1x+=" "+8.1x},3v:7(e){e.1x=e.1x.13(8.39,"$1")},1u:7(){6 m=V.2e[" *."+8.1x]=14(8.40);O(i=0;i<m.K;i++)8.15(m[i])}});1G.3x="5Y";1G.6f=/>/g;1G.6g=7(s){s=1p.38(s);z s.13(8.44,"").13(8.6f," ")};7 2d(s,a,d,t,c){8.6e=a||"*";8.6d=V.36[d];8.4L=t;8.1T(s,c)};1G.1e({1h:2d,1u:7(){6 m=14(8.6e);O(6 i=0;i<m.K;i++){6 t=(8.4L)?14(8.4L,m[i]):[m[i]];y(t.K)8.6d.2q(m[i],t,8)}}});6 A=/^4I/;6 U=/^43\\s*\\(\\s*([^)]*)\\)$/;6 M={86:"85",84:"83",82:"81",80:"7Z"};6 6b=1Z("17-22.4C",2k)+"?";2r+=".2K{4K:1M}";7 1L(s,p,c){8.1y=p;6 2N=c.19(1L.6a),m,e;y(2N){2N=2N[1];m=2N.2O(/\\s+/);O(6 i=0;(e=m[i]);i++){m[i]=A.Z(e)?{4I:e.1q(5,-1)}:(e.7Y(0)=="\'")?42(e):41(e)}2N=m}8.22=2N;8.1T(s,41(c))};1G.1e({1h:1L,1g:7(){z"."+8.1x+"{4K:7X}"},1S:7(){8.19=14(8.40);O(6 i=0;i<8.19.K;i++){6 r=8.19[i].J;y(!r[8.1y])r[8.1y]={18:""};r[8.1y].18+=";"+8.18;y(8.22!=1U)r[8.1y].22=8.22}},1u:7(){y(8.22==1U)z;O(6 i=0;i<8.19.K;i++){8.3Z(8.19[i])}},3Z:7(t){6 g=t.J[8.1y];y(g){6 c=[].4J(g.22||"");O(6 j=0;j<c.K;j++){y(3Y c[j]=="2M"){c[j]=t.2H(c[j].4I)}}c=c.2p("");6 u=c.19(U);6 h=1L[u?"69":"4E"].13(/%1/,8.1x);6 4G=g.18.13(/\'/g,\'"\');6 4F=M[8.1y+7W(t.6c)];y(u){6 p=16.3X(h);t.7V(4F,p);p.3W=6b;4H(p,4G,2c.3v(u[1]))}1d{h=h.13(/%2/,4G).13(/%3/,c);t.7U(4F,h)}t.J[8.1y]=1U}}});1L.6a=/22\\s*:\\s*([^;]*)(;|$)/;1L.69="<2M 3U=\'2K %1\' 2K 12=3w% 2b=0 2L=68/x-67>";1L.4E="<17:! 3U=\'2K %1\' 2K 1r=\'%2\'>%3</17:!>";7 2J(n,a){8.66=n;8.2q=a;8.2I={};V.36[n]=8};1t.1e({1h:2J,20:7(i){6 c=i[2];i.1c=c.1c+i[0].2a;y(!8.2I[i.1c]){6 t=i[1],j;O(j=0;j<t.K;j++)c.15(t[j]);8.2I[i.1c]=i}},35:7(i){y(8.2I[i.1c]){6 c=i[2];6 t=i[1],j;O(j=0;j<t.K;j++)c.3v(t[j]);3u 8.2I[i.1c]}}});V.1B.1g=7(){6 t=[],p;O(p 28 8){y(8[p].K>1)p+="\\\\([^)]*\\\\)";t.1b(p)}z t.2p("|")};V.1B["21"]=7(e){z e.D["17-21"]=="21"};V.1B["37"]=7(e){z e.D["17-21"]=="37"};6 64=(29<5.5)?"7T":"7S";6 63=(29<5.5)?"7R":"7Q";V.36.1g=V.1B.1g;6 3s=11 2J("65",7(e){6 i=1a;V.1j(e,64,7(){3s.20(i)});V.1j(e,63,7(){3s.35(i)})});6 3t=11 2J("7P",7(e){6 i=1a;V.1j(e,"7O",7(){3t.35(i);3t.20(i)});V.1j(e,"7N",7(){3t.35(i)});y(e==16.7M){3t.20(i)}});6 3V=11 2J("62",7(e){6 i=1a;V.1j(e,"7L",7(){3V.20(i)})});1j(16,"7K",7(){6 i=3V.2I,j;O(j 28 i)3V.35(i[j]);i=3s.2I;O(j 28 i)y(!i[j][0].61(60.7J))3s.35(i[j])});2o(1p);1p.1e({2H:7(n){34(n.5Z()){1m"3U":z"e.1x.13(/\\\\b\\\\s*5Y\\\\d+/g,\'\')";1m"1l":z"(e.4D||e.1l)"}z 8.1T(n)}});2n.15(/::/,":");3r.15(/\\\\([\\7I-7H-F]{1,4})/,7(m,o){m=m[o+1];z"\\\\u"+"7G".1q(m.K)+m})});2G=1o;y(2m)1k(3T("17-7F.5X",2k));V.1S();y(2l&&1s)1s.1S();y(33)1F.1S();1d{2F.7E(1Z("17-3q.4C",2k));1j(16,"7D",7(){y(16.5W=="33")32(1F.1S,0)})}}2j(e){31("4B [0]: "+e.5V)}5U{}};',62,634,'||||||var|function|this||||||||||||||||||||||||||if|return||||currentStyle||||||runtimeStyle|length||||for|||||||ie7CSS||||test||new|width|replace|cssQuery|add|document|ie7|cssText|match|arguments|push|id|else|specialize|left|toString|constructor|valueOf|addEventHandler|eval|src|case|addRecalc|true|AttributeSelector|slice|style|ie7HTML|Common|recalc|_0|that|className|position|false|minWidth|pseudoClasses|prototype|while|fr|IE7|Rule|getPixelWidth|clientWidth|viewport|ie7Layout|PseudoElement|none|RegExp|elements|auto|recalcs|styleSheets|init|inherit|null|selectors|right|body|all|makePath|register|link|content|String|addModule|parseInt|window|maxWidth|in|appVersion|uniqueID|height|Quote|DynamicRule|cache|se|fixWidth|_1|klass|catch|path|isHTML|quirksMode|encoder|ICommon|join|apply|HEADER|DUMMY|rules|href|httpRequest|getText|fixRight|top|fixed|_2|getFixedWidth|try|thisElement|ancestor|documentElement|loaded|getAttribute|instances|DynamicPseudoClass|ie7_anon|type|object|co|split|screen|ru|attributeSelectors|offsetWidth|setOverrideStyle|ParseMaster|exec|tagName|box|print|media|_3|alert|setTimeout|complete|switch|unregister|dynamicPseudoClasses|visited|parse|MATCH|tests|Function|getPixelValue|PERCENT|ex|_4|max|_5|addFix|hasLayout|marginTop|firstElementChild|disabled|value|size|font|load|safeString|_6|_7|delete|remove|100|PREFIX|StyleSheet|outerHTML|offsetLeft|offsetParent|absolute|isFixed|backgroundPositionX|getPath|border|boxSizing|min|fixedWidth|getPaddingWidth|fixes|Parser|self|styleSheet|st|modules|_8|x01|loadFile|class|_9|data|createElement|typeof|create|selector|decode|getString|url|COMPLEX|parseSelector|x22|nextElementSibling|_10|_11|_12|_13|parseFloat|autoLeft|pixelLeft|setExpression|Math|_14|BLANK_GIF|_15|_16|applyWidth|resizeWidth|getBorderWidth|getDefinedStyle|collapseMarginTop|_17|_18|_19|refresh|el|ca|getElementsByTagName|version|escapeChar|ancestorOf|_20|Error|htc|pngSrc|ANON|po|cs|addTimer|attr|concat|display|target|selectorText|first|regEscape|isMSIE|lang|parentNode|previousElementSibling|compareTagName|addResize|_21|getScreenLeft|marginLeft|positionLeft|_22|shiftLeft|screenLeft|_23|clipWidth|getBoundingClientRect|getOffsetLeft|bottom|setOffsetLeft|backgroundLeft|parentElement|backgroundImage|backgroundAttachment|Top|img|background|_24|clearCache|location|image|_25|_26|input|filter|Microsoft|sizing|resizeRight|_27|layoutWidth|_28|lastElementChild|clicked|submit|_29|Fix|_30|decoder|_31|parser|_32|gi|_33|styles|createStyleSheet|isXML|caching|_34|compareNamespace|getDocument|continue|links|error|callee|ignoreCase|_35|_36|ie7_debug|finally|description|readyState|js|ie7_class|toLowerCase|event|contains|active|_37|_38|hover|name|scriptlet|text|OBJECT|CONTENT|_39|canHaveChildren|dynamicPseudoClass|attach|CHILD|simple|after|before|UNKNOWN|createRule|B1|B2|_40|htmlFor|NS_IE|childElements|_41|scrollLeft|appendChild|Height|Width|Left|createTempElement|_42|onbeforeprint|replaceChild|_43|_44|B64|base64|indexOf|zoom|scale|opacity|DXImageTransform|progid|enabled|filters|Bottom|borderBox|spacing|margin|padding|applyHeight|0cm|verticalAlign|en|nextSibling|_45|title|_46|BUTTON|button|reset|onclick|clearInterval|PIXEL|removeEventHandler|pop|_47|_48|lastIndexOf|_49|_50|_51|_52|imports|trash|ie7_recalc|getInlineStyles|innerHTML|nodeType|ST|select|Array|_53|mimeType|Boolean|lastChild|firstChild|ES|_54|_55|_56|_57|_58|DE|status|scripts|search|onreadystatechange|addBehavior|quirks|0000|fA|da|srcElement|onmouseup|onmousedown|activeElement|onblur|onfocus|focus|onmouseleave|onmouseout|onmouseenter|onmouseover|insertAdjacentHTML|insertAdjacentElement|Number|inline|charAt|beforeEnd|after1|afterEnd|after0|afterBegin|before1|beforeBegin|before0|letter|line|child|level2|css|css2|static|clipHeight|marginRight|positionTop|default|center|clientLeft|removeChild|setOffsetTop|backgroundTop|repeat|no|backgroundRepeat|attachment|onafterprint|onload|Image|php|propertyName|onpropertychange|INPUT|crop|Alpha|png|trans|IE7_PNG_SUFFIX|sizingMethod|AlphaImageLoader|graphics|fixHeight|Right|cellSpacing|collapse|borderCollapse|IE7_BOX_MODEL|getMarginWidth|Margin|Padding|paddingRight|paddingLeft|last|0px|styleFloat|collapseMarginBottom|layout|removeNode|HTML|alt|onsubmit|form|click|textarea|label|abbr|pow|67em|h6|83em|h5|1em|h4|17em|h3|5em|h2|2em|h1|html4|setInterval|9999|rect|clip|block|px|onunload|detachEvent|attachEvent|onresize|x27|import|namespace|ma|bprint|bscreen|ball|write|item|innerText|getTextContent|scopeName|toUpperCase|ownerDocument|Document|XML|URL|xml|unknown|previousSibling|number|successfully|ie5|instanceOf|Object|common|caller|gif|blank|file|loading|responseText|200|send|GET|open|XMLHTTP|ActiveXObject|Msxml2|ScriptEngineMajorVersion|ms_|ie7_off|CSS1Compat|compatMode|MSIE|navigator|alpha'.split('|'),0,{})) |
/WebSVN/templates/StandardNG/ie7/ie7-xml-extras.js |
---|
0,0 → 1,6 |
/* |
IE7, version 0.9 (alpha) (2005-08-19) |
Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/) |
License: http://creativecommons.org/licenses/LGPL/2.1/ |
*/ |
function XMLHttpRequest(){var l=(ScriptEngineMajorVersion()>=5)?"Msxml2":"Microsoft";return new ActiveXObject(l+".XMLHTTP")};function DOMParser(){};DOMParser.prototype={toString:function(){return"[object DOMParser]"},parseFromString:function(s,c){var x=new ActiveXObject("Microsoft.XMLDOM");x.loadXML(s);return x},parseFromStream:new Function,baseURI:""};function XMLSerializer(){};XMLSerializer.prototype={toString:function(){return"[object XMLSerializer]"},serializeToString:function(r){return r.xml||r.outerHTML},serializeToStream:new Function}; |
/WebSVN/templates/StandardNG/ie7/blank.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/StandardNG/blame.tmpl |
---|
0,0 → 1,30 |
[websvn:projects_form] |
<div id='projectSelectForm'> |
[websvn:projects_select] |
[websvn:projects_submit] |
</div> |
[websvn:projects_form] |
<h2>[websvn:repname]</h2> |
[websvn:curdirlinks] |
<h2>[lang:BLAMEFOR] [websvn:rev]</h2> |
[websvn-test:noaccess] |
<h3 class='err'>[lang:NOACCESS]</h3> |
[websvn-else] |
<table class='blame'> |
<tr> |
<th>[lang:LINENO]</th> |
<th>[lang:REV]</th> |
<th>[lang:AUTHOR]</th> |
<th>[lang:LINE]</th> |
</tr> |
[websvn-startlisting] |
<tr> |
<td>[websvn:lineno]</td> |
<td>[websvn:revision]</td> |
<td>[websvn:author]</td> |
<td>[websvn:line]</td> |
</tr> |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
/WebSVN/templates/StandardNG/compare.tmpl |
---|
0,0 → 1,53 |
[websvn:projects_form] |
<div id='projectSelectForm'> |
[websvn:projects_select] |
[websvn:projects_submit] |
</div> |
[websvn:projects_endform] |
<h2>[websvn:repname]</h2> |
[websvn-test:noaccess] |
<h2 class='err'>[lang:NOACCESS]</h2> |
[websvn-else] |
[websvn:compare_form] |
<p><label>[lang:COMPPATH] [websvn:compare_path1input]</label> <label>[lang:REV] [websvn:compare_rev1input]</label></p> |
<p><label>[lang:COMPPATH] [websvn:compare_path2input]</label> <label>[lang:REV] [websvn:compare_rev2input]</label></p> |
<p>[websvn:compare_submit]</p> |
[websvn:compare_endform] |
<hr /> |
[websvn-test:success] |
<p>[lang:CONVFROM] <em>[websvn:path1] ([lang:REV] [websvn:rev1]</em> [lang:TO] <em>[websvn:path2] ([lang:REV] [websvn:rev2])</em></p> |
[websvn-endtest] |
[websvn-startlisting] |
[websvn-test:info] |
<p>[websvn:info]</p> |
[websvn-endtest] |
[websvn-test:newpath] |
<div class='newpath'> |
<h3>[websvn:newpath]</h3> |
[websvn-endtest] |
[websvn-test:difflines] |
<div class='difflines'> |
<code>[websvn:difflines]</code> |
[websvn-endtest] |
[websvn-test:diffclass] |
<code class='[websvn:diffclass]'>[websvn:line]</code> |
[websvn-endtest] |
[websvn-test:enddifflines] |
</div> |
[websvn-endtest] |
[websvn-test:endpath] |
</div> |
[websvn-endtest] |
[websvn-test:properties] |
<p>[lang:PROPCHANGES]</p> |
[websvn-endtest] |
[websvn-endlisting] |
[websvn-endtest] |
/WebSVN/templates/StandardNG/directory.tmpl |
---|
0,0 → 1,117 |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h1>[websvn:repname]</h1> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn-test:restricted] |
[websvn-else] |
<p><b>[lang:PATH]:</b> [websvn:path] |
<br><b>[lang:REV]:</b> [websvn:rev] |
[websvn-test:goyoungestlink] |
- [websvn:goyoungestlink] |
[websvn-endtest] |
<br><b>[lang:LASTMOD]:</b> [lang:REV] [websvn:lastchangedrev] - [websvn:author] - [websvn:date] |
<br><b>[lang:LOGMSG]:</b><br> |
[websvn:log] |
<p> |
[websvn-test:hidechanges] |
<p>[websvn:showchangeslink] |
[websvn-endtest] |
[websvn-test:showchanges] |
<p><b>[lang:CHANGES]:</b><br> |
<p>[websvn:hidechangeslink] |
<p> |
<center> |
<table border=1 class="bordered" cellpadding=4> |
<tr> |
<th><center><b>[lang:NEWFILES]</b></center></th> |
<th><center><b>[lang:CHANGEDFILES]</b></center></th> |
<th><center><b>[lang:DELETEDFILES]</b></center></th> |
</tr> |
<tr> |
<td valign="top"> |
[websvn-test:newfilesbr] |
[websvn:newfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
<td valign="top"> |
[websvn-test:changedfilesbr] |
[websvn:changedfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
<td valign="top"> |
[websvn-test:deletedfilesbr] |
[websvn:deletedfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
</tr> |
</table> |
</center> |
[websvn-endtest] |
[websvn-endtest] |
[websvn-defineicons] |
dir= |
diropen= |
i-node= |
t-node= |
l-node= |
e-node= |
*= |
[websvn-enddefineicons] |
<p><hr> |
<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink] |
[websvn-test:curdircomplink] |
- [websvn:curdircomplink] |
[websvn-endtest] |
[websvn-test:curdirdllink] |
- [websvn:curdirdllink] |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
- [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a> |
[websvn-endtest] |
<p> |
[websvn:compare_form] |
<table class="outlined" width="100%" cellpadding=2> |
<tr> |
<th width="100%"><b>[lang:PATH]</b></th> |
<th><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th> |
[websvn-test:allowdownload] |
<th><b>[lang:TARBALL]</b></th> |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
<th><b>[lang:RSSFEED]</b></th> |
[websvn-endtest] |
</tr> |
[websvn-startlisting] |
<tr> |
<td class="[websvn:rowparity]"> |
[websvn:compare_box] |
[websvn-treenode] |
[websvn:filelink] |
</td> |
<td class="[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td> |
[websvn-test:allowdownload] |
<td class="[websvn:rowparity]">[websvn:fileviewdllink]</td> |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
<td class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td> |
[websvn-endtest] |
</tr> |
[websvn-endlisting] |
</table> |
<p> |
[websvn:compare_submit] |
[websvn:compare_endform] |
[websvn-endtest] |
/WebSVN/templates/StandardNG/file.tmpl |
---|
0,0 → 1,18 |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h2>[websvn:repname]</h2> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn:curdirlinks] - [lang:REV] [websvn:rev]<p> |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink]<p> |
[websvn-endtest] |
[websvn:prevdifflink] - [websvn:blamelink] |
<p> |
<table width="100%" border=0><tr><td> |
[websvn-getlisting] |
</td></tr></table> |
[websvn-endtest] |
/WebSVN/templates/StandardNG/footer.tmpl |
---|
0,0 → 1,3 |
<p id='footer'>[lang:POWERED] v[websvn:version]</p> |
</body> |
</html> |
/WebSVN/templates/StandardNG/header.tmpl |
---|
0,0 → 1,79 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
<html xmlns='http://www.w3.org/1999/xhtml'> |
<head> |
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /> |
<link rel='stylesheet' type='text/css' media='screen' href='[websvn:locwebsvnhttp]/templates/StandardNG/styles.css' /> |
<script type='application/javascript' src='[websvn:locwebsvnhttp]/templates/Standard/collapse.js'></script> |
<script type='application/javascript'> |
<![CDATA[ |
function checkCB(chBox) { |
count = 0; |
first = null; |
f = chBox.form; |
for (i = 0; i < f.elements.length; i++) { |
if (f.elements[i].type == 'checkbox' && f.elements[i].checked) { |
if (first == null && f.elements[i] != chBox) { |
first = f.elements[i]; |
} |
count++; |
} |
if (count > 2) { |
first.checked = false; |
count--; |
} |
[websvn-test:opentree] |
expandonload = true; |
[websvn-endtest] |
} |
} |
]]> |
</script> |
<title> |
WebSVN |
[websvn-test:repname] |
- [websvn:repname] |
[websvn-endtest] |
[websvn-test:action] |
- [websvn:action] |
[websvn-endtest] |
[websvn-test:rev2] |
[websvn-test:path2] |
- [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2] |
[websvn-else] |
- [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2] |
[websvn-endtest] |
[websvn-else] |
[websvn-test:rev] |
- [lang:REV] [websvn:rev] |
[websvn-endtest] |
[websvn-endtest] |
[websvn-test:path] |
- [websvn:safepath] |
[websvn-endtest] |
</title> |
[websvn-test:curdirrsslink] |
<link rel='alternate' type='application/rss+xml' title='WebSVN RSS' href='[websvn:curdirrsshref]' /> |
[websvn-endtest] |
<!--[if IE]> |
<script type='text/javascript' src='[websvn:locwebsvnhttp]/templates/StandardNG/ie7/ie7-standard-p.js'></script> |
<[end if]--> |
</head> |
<body> |
<div id='header'> |
<h1>[lang:SERVER]</h1> |
<div id='formSelect'> |
[websvn:lang_form] |
[websvn:lang_select] |
[websvn:lang_submit] |
[websvn:lang_endform] |
</div> |
</div> |
<hr /> |
<!-- end of header.tmpl --> |
/WebSVN/templates/StandardNG/index.tmpl |
---|
0,0 → 1,20 |
<!-- beginning of index.tmpl --> |
<h2>[lang:PROJECTS]:</h2> |
[websvn-test:flatview] |
<ul id='projectListing'> |
[websvn-startlisting] |
<li>[websvn:projlink]</li> |
[websvn-endlisting] |
</ul> |
[websvn-else] |
[websvn-startlisting] |
[websvn-test:isprojlink] |
<div class='projectGroup'> |
[websvn:listitem] |
</div> |
[websvn-else] |
[websvn:listitem] |
[websvn-endtest] |
[websvn-endlisting] |
[websvn-endtest] |
<!-- end of index.tmpl --> |
/WebSVN/templates/StandardNG/log.tmpl |
---|
0,0 → 1,64 |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
<h2>[websvn:repname] - [lang:REV] [websvn:rev]</h2> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn:curdirlinks]<p> |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink]<p> |
[websvn-endtest] |
<center> |
[websvn:logsearch_form] |
<b>[lang:FILTER]</b><p> |
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox] |
[websvn:logsearch_submit] |
[websvn-test:logsearch_clearloglink] |
<p><font size="-1">[websvn:logsearch_clearloglink]</font><p> |
[websvn-endtest] |
[websvn:logsearch_endform] |
</center> |
[websvn-test:logsearch_nomatches] |
<center>[lang:NORESULTS]</center> |
[websvn-endtest] |
[websvn-test:error] |
<center>[websvn:error]</center> |
[websvn-endtest] |
[websvn-test:logsearch_resultsfound] |
[websvn:compare_form] |
<table border=1 class="outlined" width="100%" cellpadding=2> |
<tr> |
<th>[lang:REV]</th> |
<th>[lang:PATH]</th> |
<th>[lang:AUTHOR]</th> |
<th>[lang:AGE]</th> |
<th>[lang:LOGMSG]</th> |
</tr> |
[websvn-startlisting] |
<tr> |
<td valign="top" class="[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revpathlink]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revauthor]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revage]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revlog]</td> |
</tr> |
[websvn-endlisting] |
</table> |
<p> |
[websvn:compare_submit] |
[websvn:compare_endform] |
[websvn-endtest] |
[websvn-test:logsearch_nomorematches] |
<p><center>[lang:NOMORERESULTS]</center> |
[websvn-endtest] |
<p><center>[websvn:logsearch_moreresultslink]</center> |
<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center> |
[websvn-endtest] |
/WebSVN/templates/StandardNG/styles.css |
---|
0,0 → 1,93 |
body |
{ |
font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif; |
background-color: white; |
margin: 20px; |
padding: 0px |
} |
h1 |
{ |
color: #99007E; |
font-size: 30px; |
font-weight: normal; |
font-family: Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif; |
text-decoration: none; |
} |
hr { color: #99007E; background-color: #99007E } |
.highlight { color: #99007E; font-style: italic; } |
table.bordered, table.outlined, table.blame |
{ |
border-collapse: collapse; |
border: solid 2px #99007E; |
} |
.bordered td, .bordered th |
{ |
border: solid 2px #99007E; |
} |
.outlined td |
{ |
padding: 0px 5px 0px 5px; |
} |
.outlined th, .blame th |
{ |
padding: 5px 5px 5px 5px; |
font-weight: bold; |
border: solid 2px #99007E; |
} |
.outlined td, .blame td |
{ |
padding: 1px 5px 1px 5px; |
border-right: solid 2px #99007E; |
border-bottom: solid 1px #F0F0F0; |
} |
td.diffdeleted |
{ |
font-size: 11px; |
background-color: red; |
} |
td.diffchanged |
{ |
font-size: 11px; |
background-color: yellow; |
} |
td.diffadded |
{ |
font-size: 11px; |
background-color: green; |
} |
td.diff |
{ |
font-size: 11px; |
background-color: #D0D0D0; |
} |
table.diff |
{ |
border-collapse: collapse; |
} |
div.newpath |
{ |
padding: 5px 5px 5px 5px; |
border: solid 2px #99007E; |
} |
.plusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #D0D0D0; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; } |
.minusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #99007E; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; } |
.groupname { padding-left: 0px; text-indent: -25px; margin: 3px 0 3px 0;} |
.switchcontent { margin: 3px 0 0 20px; } |
code { white-space: pre-wrap; } |
/WebSVN/templates/StandardNG/xml.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/WebSVN/templates/Zinn/blame.tmpl |
---|
0,0 → 1,36 |
<table width="100%" border="0"> |
<tr> |
<td> |
<h1>[websvn:repname]</h1> |
</td> |
<td> |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
</td> |
</tr> |
</table> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn:curdirlinks] - [lang:BLAMEFOR] [websvn:rev] |
<p> |
<table border="1" class="blame" width="100%" cellpadding="2"> |
<tr> |
<th style="padding-bottom: 5px" align="left"><b>[lang:LINENO]</b></th> |
<th style="padding-bottom: 5px" align="left"><b>[lang:REV]</b></th> |
<th style="padding-bottom: 5px" align="left"><b>[lang:AUTHOR]</b></th> |
<th style="padding-bottom: 5px" align="left"><b>[lang:LINE]</b></th> |
</tr> |
[websvn-startlisting] |
<tr> |
<td>[websvn:lineno]</td> |
<td>[websvn:revision]</td> |
<td>[websvn:author]</td> |
<td>[websvn:line]</td> |
</tr> |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
/WebSVN/templates/Zinn/collapse.js |
---|
0,0 → 1,169 |
/*********************************************** |
* Switch Content script- © Dynamic Drive (www.dynamicdrive.com) |
* This notice must stay intact for legal use. Last updated April 2nd, 2005. |
* Visit http://www.dynamicdrive.com/ for full source code |
***********************************************/ |
var enablepersist="on" // Enable saving state of content structure using session cookies? (on/off) |
var collapseprevious="yes" // Collapse previously open content when opening present? (yes/no) |
var contractsymbol='<div class="minusbox">-</div>' // HTML for contract symbol. For image, use: <img src="${prefix}whatever.gif"> |
var expandsymbol='<div class="plusbox">+</div>' // HTML for expand symbol. |
var expandonload=false |
if (document.getElementById) |
{ |
document.write('<style type="text/css">') |
document.write('.switchcontent{display:none;}') |
document.write('</style>') |
} |
function getElementbyClass(rootobj, classname) |
{ |
var temparray=new Array() |
var inc=0 |
for (i=0; i<rootobj.length; i++) |
{ |
if (rootobj[i].className==classname) |
temparray[inc++]=rootobj[i] |
} |
return temparray |
} |
function sweeptoggle(ec) |
{ |
var thestate=(ec=="expand")? "block" : "none" |
var inc=0 |
while (ccollect[inc]) |
{ |
ccollect[inc].style.display=thestate |
inc++ |
} |
revivestatus() |
collapseprevious = (ec=="expand")? "no" : "yes" |
} |
function contractcontent(omit) |
{ |
var inc=0 |
while (ccollect[inc]) |
{ |
if (ccollect[inc].id!=omit) |
ccollect[inc].style.display="none" |
inc++ |
} |
} |
function expandcontent(curobj, cid) |
{ |
var spantags=curobj.getElementsByTagName("SPAN") |
var showstateobj=getElementbyClass(spantags, "showstate") |
if (ccollect.length>0) |
{ |
if (collapseprevious=="yes") |
contractcontent(cid) |
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none" |
if (showstateobj.length>0) //if "showstate" span exists in header |
{ |
if (collapseprevious=="no") |
showstateobj[0].innerHTML=(document.getElementById(cid).style.display=="block")? contractsymbol : expandsymbol |
else |
revivestatus() |
} |
} |
} |
function revivecontent() |
{ |
contractcontent("omitnothing") |
selectedItem=getselectedItem() |
selectedComponents=selectedItem.split("|") |
collapseprevious=selectedComponents[0] |
for (i=1; i<selectedComponents.length-1; i++) |
document.getElementById(selectedComponents[i]).style.display="block" |
} |
function revivestatus() |
{ |
var inc=0 |
while (statecollect[inc]) |
{ |
if (ccollect[inc].style.display=="block") |
statecollect[inc].innerHTML=contractsymbol |
else |
statecollect[inc].innerHTML=expandsymbol |
inc++ |
} |
} |
function get_cookie(Name) |
{ |
var search = Name + "=" |
var returnvalue = ""; |
if (document.cookie.length > 0) |
{ |
offset = document.cookie.indexOf(search) |
if (offset != -1) |
{ |
offset += search.length |
end = document.cookie.indexOf(";", offset); |
if (end == -1) end = document.cookie.length; |
returnvalue=unescape(document.cookie.substring(offset, end)) |
} |
} |
return returnvalue; |
} |
function getselectedItem() |
{ |
if (get_cookie(window.location.pathname) != "") |
{ |
selectedItem=get_cookie(window.location.pathname) |
return selectedItem |
} |
else |
return "" |
} |
function saveswitchstate() |
{ |
var inc=0, selectedItem=collapseprevious+"|" |
while (ccollect[inc]) |
{ |
if (ccollect[inc].style.display=="block") |
selectedItem+=ccollect[inc].id+"|" |
inc++ |
} |
document.cookie=window.location.pathname+"="+selectedItem |
} |
function do_onload() |
{ |
uniqueidn=window.location.pathname+"firsttimeload" |
var alltags=document.all? document.all : document.getElementsByTagName("*") |
ccollect=getElementbyClass(alltags, "switchcontent") |
statecollect=getElementbyClass(alltags, "showstate") |
if (enablepersist=="on" && ccollect.length>0) |
{ |
document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0" |
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load |
if (!firsttimeload) |
revivecontent() |
} |
if (ccollect.length>0 && statecollect.length>0) |
revivestatus() |
if (expandonload) |
sweeptoggle('expand') |
} |
if (window.addEventListener) |
window.addEventListener("load", do_onload, false) |
else if (window.attachEvent) |
window.attachEvent("onload", do_onload) |
else if (document.getElementById) |
window.onload=do_onload |
if (enablepersist=="on" && document.getElementById) |
window.onunload=saveswitchstate |
/WebSVN/templates/Zinn/compare.tmpl |
---|
0,0 → 1,75 |
<table width="100%" border="0"> |
<tr> |
<td> |
<h1>[websvn:repname]</h1> |
</td> |
<td> |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
</td> |
</tr> |
</table> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<center> |
[websvn:compare_form] |
<table> |
<tr><td> |
<table class="outlined"> |
<tr><td>[lang:COMPPATH] </td><td>[websvn:compare_path1input] [lang:REV] [websvn:compare_rev1input]</td></tr> |
<tr><td>[lang:WITHPATH] </td><td>[websvn:compare_path2input] [lang:REV] [websvn:compare_rev2input]</td></tr> |
</table> |
</td><tr> |
<tr><td align="center">[websvn:compare_submit]</td></tr> |
</table> |
[websvn:compare_endform] |
<hr> |
</center> |
<p> |
[websvn-test:success] |
[lang:CONVFROM] <b>[websvn:path1] ([lang:REV] [websvn:rev1])</b> [lang:TO] <b>[websvn:path2] ([lang:REV] [websvn:rev2])</b> |
<p> |
[websvn:revlink] |
[websvn-endtest] |
<p> |
[websvn-startlisting] |
[websvn-test:newpath] |
<p> |
<div class="newpath"> |
<b>[websvn:newpath]</b><br> |
[websvn-endtest] |
[websvn-test:info] |
[websvn:info]<br> |
[websvn-endtest] |
[websvn-test:difflines] |
<div class="difflines"> |
<p> |
[websvn:difflines]<br> |
<table class="diff" cellspacing="0"> |
[websvn-endtest] |
[websvn-test:diffclass] |
<tr><td class="[websvn:diffclass]">[websvn:line]</td></tr> |
[websvn-endtest] |
[websvn-test:enddifflines] |
</table> |
</div> |
[websvn-endtest] |
[websvn-test:endpath] |
</div> |
<p><hr> |
[websvn-endtest] |
[websvn-test:properties] |
<p><i>[lang:PROPCHANGES]</i><p> |
[websvn-endtest] |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
/WebSVN/templates/Zinn/diff.tmpl |
---|
0,0 → 1,51 |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn-test:noprev] |
[lang:NOPREVREV] |
[websvn-else] |
<table width="100%" border="0"> |
<tr> |
<td> |
<h1>[websvn:repname]</h1> |
</td> |
<td> |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
</td> |
</tr> |
</table> |
<b>[lang:PATH]:</b> [websvn:path] |
<br><b>[lang:REV]:</b> [websvn:rev] |
<p><hr> |
<b>[lang:CURDIR]:</b> [websvn:curdirlinks] |
<p> |
<p><center> |
[websvn:showcompactlink] |
[websvn:showalllink] |
</center> |
<p> |
<table class="diff" width="100%"> |
<tr> |
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev2]</b></th> |
<th width="5"></th> |
<th style="padding-bottom: 5px" width="50%" align="left"><b>[lang:REV] [websvn:rev1]</b></th> |
</tr> |
[websvn-startlisting] |
[websvn-test:rev1lineno] |
<tr> |
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev1lineno]...</b></td> |
<td width="5"></td> |
<td width="50%" style="padding: 3px 0 3px 0" align="center"><b>[lang:LINE] [websvn:rev2lineno]...</b></td> |
<tr> |
[websvn-else] |
<tr><td class="[websvn:rev1diffclass]">[websvn:rev1line]</td> |
<td width="5"></td> |
<td class="[websvn:rev2diffclass]">[websvn:rev2line]</td></tr> |
[websvn-endtest] |
[websvn-endlisting] |
</table> |
[websvn-endtest] |
[websvn-endtest] |
/WebSVN/templates/Zinn/directory.tmpl |
---|
0,0 → 1,125 |
<table width="100%" border="0"> |
<tr> |
<td> |
<h1>[websvn:repname]</h1> |
</td> |
<td> |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
</td> |
</tr> |
</table> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
[websvn-test:restricted] |
[websvn-else] |
<b>[lang:PATH]:</b> [websvn:path] |
<br><b>[lang:REV]:</b> [websvn:rev] |
<p><hr> |
<b>[lang:CURDIR]:</b> [websvn:curdirlinks] - [websvn:curdirloglink] |
[websvn-test:curdircomplink] |
- [websvn:curdircomplink] |
[websvn-endtest] |
[websvn-test:curdirdllink] |
- [websvn:curdirdllink] |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
- [websvn:curdirrssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a> |
[websvn-endtest] |
[websvn-endtest] |
[websvn-defineicons] |
dir= |
diropen= |
i-node= |
t-node= |
l-node= |
e-node= |
*= |
[websvn-enddefineicons] |
<p> |
[websvn:compare_form] |
<table class="outlined" width="100%" cellpadding="2"> |
<tr> |
<th width="100%"><b>Path</b></th> |
<th><b>[lang:NOBR][lang:LOG][lang:ENDNOBR]</b></th> |
[websvn-test:allowdownload] |
<th><b>[lang:TARBALL]</b></th> |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
<th><b>[lang:RSSFEED]</b></th> |
[websvn-endtest] |
</tr> |
[websvn-startlisting] |
<tr> |
<td class="[websvn:rowparity]"> |
[websvn:compare_box] |
[websvn-treenode] |
[websvn:filelink] |
</td> |
<td class="[websvn:rowparity]">[lang:NOBR][websvn:fileviewloglink][lang:ENDNOBR]</td> |
[websvn-test:allowdownload] |
<td class="[websvn:rowparity]">[websvn:fileviewdllink]</td> |
[websvn-endtest] |
[websvn-test:curdirrsslink] |
<td class="row[websvn:rowparity]">[websvn:rssanchor]<img style="border: 0;" src="[websvn:locwebsvnhttp]/templates/Standard/xml.gif" width="36" height="14" alt="[lang:RSSFEED]"></a></td> |
[websvn-endtest] |
</tr> |
[websvn-endlisting] |
</table> |
<p> |
[websvn:compare_submit] |
[websvn:compare_endform] |
<hr> |
[websvn-test:goyoungestlink] |
- [websvn:goyoungestlink] |
[websvn-endtest] |
<br><b>[lang:LASTMOD]:</b> [lang:REV] [websvn:lastchangedrev] - [websvn:author] - [websvn:date] |
<br><b>[lang:LOGMSG]:</b><br> |
[websvn:log] |
<p> |
[websvn-test:hidechanges] |
<p>[websvn:showchangeslink] |
[websvn-endtest] |
[websvn-test:showchanges] |
<p><b>[lang:CHANGES]:</b><br> |
<p>[websvn:hidechangeslink] |
<p> |
<center> |
<table border=1 class="bordered" cellpadding=4> |
<tr> |
<th><center><b>[lang:NEWFILES]</b></center></th> |
<th><center><b>[lang:CHANGEDFILES]</b></center></th> |
<th><center><b>[lang:DELETEDFILES]</b></center></th> |
</tr> |
<tr> |
<td valign="top"> |
[websvn-test:newfilesbr] |
[websvn:newfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
<td valign="top"> |
[websvn-test:changedfilesbr] |
[websvn:changedfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
<td valign="top"> |
[websvn-test:deletedfilesbr] |
[websvn:deletedfilesbr] |
[websvn-else] |
|
[websvn-endtest] |
</td> |
</tr> |
</table> |
</center> |
[websvn-endtest] |
[websvn-endtest] |
/WebSVN/templates/Zinn/file.tmpl |
---|
0,0 → 1,30 |
<table width="100%" border="0"> |
<tr> |
<td> |
<h1>[websvn:repname]</h1> |
</td> |
<td> |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
</td> |
</tr> |
</table> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<b>[lang:PATH]:</b> [websvn:path] |
<br><b>[lang:REV]:</b> [websvn:rev] |
<p><hr> |
<b>[lang:CURDIR]:</b> [websvn:curdirlinks] |
<p> |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink]<p> |
[websvn-endtest] |
[websvn:prevdifflink] - [websvn:blamelink] |
<p> |
<table width="100%" border=1><tr><td> |
[websvn-getlisting] |
</td></tr></table> |
[websvn-endtest] |
/WebSVN/templates/Zinn/footer.tmpl |
---|
0,0 → 1,2 |
</body> |
</html> |
/WebSVN/templates/Zinn/header.tmpl |
---|
0,0 → 1,64 |
<html> |
<head> |
<meta http-equiv="content-type" content="text/html;charset=[websvn:charset]"> |
<link href="[websvn:locwebsvnhttp]/templates/zinn/styles.css" rel="stylesheet" media="screen"> |
<script type="text/javascript" src="[websvn:locwebsvnhttp]/templates/Zinn/collapse.js"></script> |
<script type="text/javascript"> |
function checkCB(chBox) |
{ |
count = 0 |
first = null |
f = chBox.form |
for (i = 0 ; i < f.elements.length ; i++) |
if (f.elements[i].type == 'checkbox' && f.elements[i].checked) |
{ |
if (first == null && f.elements[i] != chBox) |
first = f.elements[i] |
count += 1 |
} |
if (count > 2) |
{ |
first.checked = false |
count -= 1 |
} |
} |
[websvn-test:opentree] |
expandonload = true |
[websvn-endtest] |
</script> |
<title> |
WebSVN |
[websvn-test:repname] |
- [websvn:repname] |
[websvn-endtest] |
[websvn-test:action] |
- [websvn:action] |
[websvn-endtest] |
[websvn-test:rev2] |
[websvn-test:path2] |
- [websvn:safepath1] [lang:REV] [websvn:rev1] [lang:AND] [websvn:safepath2] [lang:REV] [websvn:rev2] |
[websvn-else] |
- [lang:REV] [websvn:rev1] [lang:AND] [websvn:rev2] |
[websvn-endtest] |
[websvn-else] |
[websvn-test:rev] |
- [lang:REV] [websvn:rev] |
[websvn-endtest] |
[websvn-endtest] |
[websvn-test:path] |
- [websvn:safepath] |
[websvn-endtest] |
</title> |
[websvn-test:curdirrsslink] |
<link rel="alternate" type="application/rss+xml" title="WebSVN RSS" href="[websvn:curdirrsshref]"> |
[websvn-endtest] |
</head> |
<body> |
<div style="float: right">[websvn:lang_form][websvn:lang_select][websvn:lang_submit][websvn:lang_endform]</div> |
</tr> |
</table> |
/WebSVN/templates/Zinn/index.tmpl |
---|
0,0 → 1,34 |
[websvn-test:flatview] |
<table border=0 cellspacing=0 cellpadding=0 align="center"> |
<tr> |
<td align="center"> |
<br><h1>[lang:PROJECTS]:</h1> |
<p><hr><p> |
<table width="100%" class="outlined" cellpadding="2"> |
[websvn-startlisting] |
<tr><td>[websvn:projlink]</td></tr> |
[websvn-endlisting] |
</table> |
</td> |
</tr> |
</table> |
[websvn-else] |
<table border=0 cellspacing=0 cellpadding=0 align="center"> |
<tr> |
<td align="center"> |
<br><h2>[lang:PROJECTS]:</h2> |
<table border=0> |
<tr><td> |
[websvn-startlisting] |
[websvn-test:isprojlink] |
<div>[websvn:listitem]</div> |
[websvn-else] |
[websvn:listitem] |
[websvn-endtest] |
[websvn-endlisting] |
</td></tr> |
</table> |
</td> |
</tr> |
</table> |
[websvn-endtest] |
/WebSVN/templates/Zinn/log.tmpl |
---|
0,0 → 1,74 |
<table width="100%" border="0"> |
<tr> |
<td> |
<h1>[websvn:repname]</h1> |
</td> |
<td> |
<div align="right">[websvn:projects_form][websvn:projects_select][websvn:projects_submit][websvn:projects_endform]</div> |
</td> |
</tr> |
</table> |
[websvn-test:noaccess] |
[lang:NOACCESS] |
[websvn-else] |
<b>[lang:PATH]:</b> [websvn:path] |
<br><b>[lang:REV]:</b> [websvn:rev] |
<p><hr> |
<b>[lang:CURDIR]:</b> [websvn:curdirlinks]<br><br> |
[websvn-test:goyoungestlink] |
[websvn:goyoungestlink]<p> |
[websvn-endtest] |
<center> |
[websvn:logsearch_form] |
<b>[lang:FILTER]</b><p> |
[lang:STARTLOG]:[websvn:logsearch_startbox] [lang:ENDLOG]:[websvn:logsearch_endbox] [lang:MAXLOG]:[websvn:logsearch_maxbox] [lang:SEARCHLOG]:[websvn:logsearch_inputbox] |
[websvn:logsearch_submit] |
[websvn-test:logsearch_clearloglink] |
<p><font size="-1">[websvn:logsearch_clearloglink]</font><p> |
[websvn-endtest] |
[websvn:logsearch_endform] |
</center> |
[websvn-test:logsearch_nomatches] |
<center>[lang:NORESULTS]</center> |
[websvn-endtest] |
[websvn-test:error] |
<center>[websvn:error]</center> |
[websvn-endtest] |
[websvn-test:logsearch_resultsfound] |
[websvn:compare_form] |
<table border=1 class="outlined" width="100%" cellpadding=2> |
<tr> |
<th>[lang:REV]</th> |
<th>[lang:PATH]</th> |
<th>[lang:AUTHOR]</th> |
<th>[lang:AGE]</th> |
<th>[lang:LOGMSG]</th> |
</tr> |
[websvn-startlisting] |
<tr> |
<td valign="top" class="[websvn:rowparity]"><nobr>[websvn:compare_box][websvn:revlink]</nobr></td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revpathlink]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revauthor]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revage]</td> |
<td valign="top" class="[websvn:rowparity]">[websvn:revlog]</td> |
</tr> |
[websvn-endlisting] |
</table> |
<p> |
[websvn:compare_submit] |
[websvn:compare_endform] |
[websvn-endtest] |
[websvn-test:logsearch_nomorematches] |
<p><center>[lang:NOMORERESULTS]</center> |
[websvn-endtest] |
<p><center>[websvn:logsearch_moreresultslink]</center> |
<p><center>[websvn:pagelinks]<p>[websvn:showalllink]</center> |
[websvn-endtest] |
/WebSVN/templates/Zinn/styles.css |
---|
0,0 → 1,107 |
body |
{ |
font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; |
background-color: white; |
margin: 20px; |
padding: 0px; |
font-size: 76%; |
} |
H1 |
{ |
color: #8c0000; |
font-size: 30px; |
font-weight: normal; |
font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; |
text-decoration: none; |
} |
a:link { color: black; |
font-size: 76%; |
} |
a:visited { color: black; |
font-size: 76%; |
} |
HR { color: #8c0000; background-color: #8c0000 } |
.highlight { color: #8c0000; font-style: italic; } |
TABLE.bordered, TABLE.outlined, TABLE.blame |
{ |
border-collapse: collapse; |
border: solid 2px #8c0000; |
} |
.bordered TD, .bordered TH |
{ |
border: solid 2px #8c0000; |
} |
.outlined TH, .blame TH |
{ |
padding: 5px 5px 5px 5px; |
font-weight: bold; |
border: solid 2px #8c0000; |
} |
.outlined TD, .blame TD |
{ |
padding: 1px 5px 1px 5px; |
border-right: solid 2px #8c0000; |
border-bottom: solid 1px #F0F0F0; |
} |
.blame TD |
{ |
font-size: 11px; |
} |
.blame TD A |
{ |
font-size: 100%; |
} |
TD.diffdeleted |
{ |
font-size: 11px; |
background-color: red; |
} |
TD.diffchanged |
{ |
font-size: 11px; |
background-color: yellow; |
} |
TD.diffadded |
{ |
font-size: 11px; |
background-color: green; |
} |
TD.diff |
{ |
font-size: 11px; |
background-color: #D0D0D0; |
} |
TABLE.diff |
{ |
border-collapse: collapse; |
} |
DIV.newpath |
{ |
padding: 5px 5px 5px 5px; |
border: solid 2px #8c0000; |
} |
.plusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; } |
.minusbox { float: left; clear: both; position: relative; top: -3px; font-size: 13px; font-weight: bold; width: 16px; text-indent: 0; height: 16px; color: black; background-color: #8c0000; text-align: center; padding: 0px 2px 0px 3px; border: black solid 1px; margin-right: 5px; } |
.groupname { padding-left: 0px; text-indent: -25px; margin: 8px 0 3px 0;} |
.switchcontent { margin: 3px 0 0 20px; } |
code { white-space: pre-wrap; } |
/WebSVN/languages/czech.php |
---|
File deleted |
/WebSVN/languages/english.php |
---|
File deleted |
/WebSVN/languages/czech.inc |
---|
0,0 → 1,125 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// czech.inc |
// |
// Czech language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Česky"; |
// This is the RFC 2616 (§3.10) language tag that corresponds to this translation |
// see also RFC 4646 |
$lang['LANGUAGETAG'] = 'cs'; |
$lang["LOG"] = "Log"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "Není určen žádný repozitář"; |
$lang["NOPATH"] = "Cesta nebyla nalezena"; |
$lang["NOACCESS"] = "Nemáte dostatečná přístupová práva pro čtení adresáře"; |
$lang["RESTRICTED"] = "Omezený přístup"; |
$lang["SUPPLYREP"] = "Nastavte prosím cestu k repozitáři v include/config.inc pomocí \$config->parentPath nebo \$config->addRepository<p>Podívejte se do insatlační příručky pro podrobnější informace"; |
$lang["DIFFREVS"] = "Rozdíly mezi revizemi"; |
$lang["AND"] = "a"; |
$lang["REV"] = "Revize"; |
$lang["LINE"] = "Line"; |
$lang["SHOWENTIREFILE"] = "Zobraz celý soubor"; |
$lang["SHOWCOMPACT"] = "Zobraz pouze rozdílné části"; |
$lang["DIFFPREV"] = "Porovnej s předchozí"; |
$lang["BLAME"] = "Blame"; |
$lang["REVINFO"] = "Informace o revizi"; |
$lang["GOYOUNGEST"] = "Přejdi na současnou revizi"; |
$lang["LASTMOD"] = "Poslední změna"; |
$lang["LOGMSG"] = "Záznam"; |
$lang["CHANGES"] = "Změny"; |
$lang["SHOWCHANGED"] = "Zobraz změněné soubory"; |
$lang["HIDECHANGED"] = "Schovej změněné soubory"; |
$lang["NEWFILES"] = "Nové soubory"; |
$lang["CHANGEDFILES"] = "Změněné soubory"; |
$lang["DELETEDFILES"] = "Smazané soubory"; |
$lang["VIEWLOG"] = "Ukaž"; |
$lang["PATH"] = "Cesta"; |
$lang["AUTHOR"] = "Autor"; |
$lang["AGE"] = "Stáří"; |
$lang["LOG"] = "Deník"; |
$lang["CURDIR"] = "Aktuální adresář"; |
$lang["TARBALL"] = "Zip"; |
$lang["PREV"] = "Předchozí"; |
$lang["NEXT"] = "Následující"; |
$lang["SHOWALL"] = "Ukaž všechny"; |
$lang["BADCMD"] = "Nepodařilo se spustit tento příkaz"; |
$lang["UNKNOWNREVISION"] = "Revize nebyla nalezena"; |
$lang["POWERED"] = "Poháněno <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion Repozitáře"; |
$lang["SERVER"] = "Subversion Servery"; |
$lang["FILTER"] = "Nastavení filtrování"; |
$lang["STARTLOG"] = "Od revize"; |
$lang["ENDLOG"] = "Do revize"; |
$lang["MAXLOG"] = "Max revizí"; |
$lang["SEARCHLOG"] = "Hledat"; |
$lang["CLEARLOG"] = "Zruš aktuální filtr"; |
$lang["MORERESULTS"] = "Najdi další..."; |
$lang["NORESULTS"] = "Nejsou tu žádné zázanmy odpovídající vašim požadavkům"; |
$lang["NOMORERESULTS"] = "Nejsou tu žádné další záznamy odpovídající vašim požadavkům"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "soubor(y) změněn(y)"; |
$lang["RSSFEED"] = "RSS"; |
$lang["LINENO"] = "Číslo řádky"; |
$lang["BLAMEFOR"] = "Blame information for rev"; |
$lang["DAYLETTER"] = "d"; |
$lang["HOURLETTER"] = "h"; |
$lang["MINUTELETTER"] = "m"; |
$lang["SECONDLETTER"] = "s"; |
$lang["GO"] = "Go"; |
$lang["PATHCOMPARISON"] = "Porovnání cest"; |
$lang["COMPAREPATHS"] = "Porovnej cesty"; |
$lang["COMPAREREVS"] = "Porovnej revize"; |
$lang["PROPCHANGES"] = "Změněné vlastnosti:"; |
$lang["CONVFROM"] = "Toto porovnání ukazuje změny pro převedení"; |
$lang["TO"] = "na"; |
$lang["REVCOMP"] = "Reverzní porovnání"; |
$lang["COMPPATH"] = "Porovnej cestu:"; |
$lang["WITHPATH"] = "S umístěním:"; |
$lang["FILEDELETED"] = "Soubor smazán"; |
$lang["FILEADDED"] = "Nový soubor"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
$lang["GETFILE"] = "Stáhnout jako soubor"; |
/WebSVN/languages/english.inc |
---|
0,0 → 1,126 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// english.inc |
// |
// English language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "English"; |
// This is the RFC 2616 (§3.10) language tag that corresponds to this translation |
// see also RFC 4646 |
$lang['LANGUAGETAG'] = 'en'; |
$lang["LOG"] = "Log"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "No repository given"; |
$lang["NOPATH"] = "Path not found"; |
$lang["NOACCESS"] = "You do not have the necessary permissions to read this directory"; |
$lang["RESTRICTED"] = "Restricted access"; |
$lang["SUPPLYREP"] = "Please set up a repository path in include/config.inc using \$config->parentPath or \$config->addRepository<p>See the installation guide for more details"; |
$lang["DIFFREVS"] = "Diff between revs"; |
$lang["AND"] = "and"; |
$lang["REV"] = "Rev"; |
$lang["LINE"] = "Line"; |
$lang["SHOWENTIREFILE"] = "Show entire file"; |
$lang["SHOWCOMPACT"] = "Only display areas with differences"; |
$lang["DIFFPREV"] = "Compare with Previous"; |
$lang["BLAME"] = "Blame"; |
$lang["REVINFO"] = "Revision Information"; |
$lang["GOYOUNGEST"] = "Go to most recent revision"; |
$lang["LASTMOD"] = "Last modification"; |
$lang["LOGMSG"] = "Log message"; |
$lang["CHANGES"] = "Changes"; |
$lang["SHOWCHANGED"] = "Show changed files"; |
$lang["HIDECHANGED"] = "Hide changed files"; |
$lang["NEWFILES"] = "New Files"; |
$lang["CHANGEDFILES"] = "Modified files"; |
$lang["DELETEDFILES"] = "Deleted files"; |
$lang["VIEWLOG"] = "View Log"; |
$lang["PATH"] = "Path"; |
$lang["AUTHOR"] = "Author"; |
$lang["AGE"] = "Age"; |
$lang["LOG"] = "Log"; |
$lang["CURDIR"] = "Current Directory"; |
$lang["TARBALL"] = "Zip"; |
$lang["PREV"] = "Prev"; |
$lang["NEXT"] = "Next"; |
$lang["SHOWALL"] = "Show All"; |
$lang["BADCMD"] = "Error running this command"; |
$lang["UNKNOWNREVISION"] = "Revision not found"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion Repositories"; |
$lang["SERVER"] = "Subversion Server"; |
$lang["FILTER"] = "Filtering Options"; |
$lang["STARTLOG"] = "From rev"; |
$lang["ENDLOG"] = "To rev"; |
$lang["MAXLOG"] = "Max revs"; |
$lang["SEARCHLOG"] = "Search for"; |
$lang["CLEARLOG"] = "Clear current filter"; |
$lang["MORERESULTS"] = "Find more matches..."; |
$lang["NORESULTS"] = "There are no logs matching your query"; |
$lang["NOMORERESULTS"] = "There are no more logs matching your query"; |
$lang['NOPREVREV'] = 'No previous revision'; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "file(s) modified"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "Line No."; |
$lang["BLAMEFOR"] = "Blame information for rev"; |
$lang["DAYLETTER"] = "d"; |
$lang["HOURLETTER"] = "h"; |
$lang["MINUTELETTER"] = "m"; |
$lang["SECONDLETTER"] = "s"; |
$lang["GO"] = "Go"; |
$lang["PATHCOMPARISON"] = "Path Comparison"; |
$lang["COMPAREPATHS"] = "Compare Paths"; |
$lang["COMPAREREVS"] = "Compare Revisions"; |
$lang["PROPCHANGES"] = "Property changes :"; |
$lang["CONVFROM"] = "This comparison shows the changes necessary to convert path "; |
$lang["TO"] = "TO"; |
$lang["REVCOMP"] = "Reverse comparison"; |
$lang["COMPPATH"] = "Compare Path:"; |
$lang["WITHPATH"] = "With Path:"; |
$lang["FILEDELETED"] = "File deleted"; |
$lang["FILEADDED"] = "New file"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
$lang["GETFILE"] = "Get as a File"; |
/WebSVN/languages/NotUsed/catalan.inc |
---|
0,0 → 1,122 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// catalan.inc |
// |
// Catalan language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Català-Valencià"; |
$lang['LANGUAGETAG'] = 'ca'; |
$lang["LOG"] = "Registre"; |
$lang["DIFF"] = "Diferència"; |
$lang["NOREP"] = "No s'ha proporcionat cap dipòsit"; |
$lang["NOPATH"] = "No s'ha trobat cap camí"; |
$lang["NOACCESS"] = "No teniu els permisos necessaris per a llegir aquest directori"; |
$lang["RESTRICTED"] = "Accés restringit"; |
$lang["SUPPLYREP"] = "Definiu un camí per al dipòsit a include/config.inc utilitzant \$config->parentPath o \$config->addRepository<p>Vegeu la guia d'instal·lació per a més detalls"; |
$lang["DIFFREVS"] = "Diferències entre revisions"; |
$lang["AND"] = "i"; |
$lang["REV"] = "Revisió"; |
$lang["LINE"] = "Línia"; |
$lang["SHOWENTIREFILE"] = "Mostra el fitxer sencer"; |
$lang["SHOWCOMPACT"] = "Mostra només les àrees amb diferències"; |
$lang["DIFFPREV"] = "Compara amb l'anterior"; |
$lang["BLAME"] = "Culpa"; |
$lang["REVINFO"] = "Informació de la revisió"; |
$lang["GOYOUNGEST"] = "Vés a la revisió més recent"; |
$lang["LASTMOD"] = "Darrera modificació"; |
$lang["LOGMSG"] = "Missatge de registre"; |
$lang["CHANGES"] = "Canvis"; |
$lang["SHOWCHANGED"] = "Mostra els fitxers canviats"; |
$lang["HIDECHANGED"] = "Amaga els fitxers canviats"; |
$lang["NEWFILES"] = "Nous fitxers"; |
$lang["CHANGEDFILES"] = "Fitxers modificats"; |
$lang["DELETEDFILES"] = "Fitxers suprimits"; |
$lang["VIEWLOG"] = "Visualitza el registre"; |
$lang["PATH"] = "Camí"; |
$lang["AUTHOR"] = "Autor"; |
$lang["AGE"] = "Edat"; |
$lang["LOG"] = "Registre"; |
$lang["CURDIR"] = "Directori actual"; |
$lang["TARBALL"] = "Arxiu tar"; |
$lang["PREV"] = "Anterior"; |
$lang["NEXT"] = "Següent"; |
$lang["SHOWALL"] = "Mostra-ho tot"; |
$lang["BADCMD"] = "S'ha produït un error en exectuar aquesta ordre"; |
$lang["UNKNOWNREVISION"] = "No s'ha trobat la revisió"; |
$lang["POWERED"] = "Funciona amb <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Dipòsits de Subversion"; |
$lang["SERVER"] = "Servidor de Subversion"; |
$lang["FILTER"] = "Opcions de filtratge"; |
$lang["STARTLOG"] = "Des de la revisió"; |
$lang["ENDLOG"] = "A la revisió"; |
$lang["MAXLOG"] = "Màximes revisions"; |
$lang["SEARCHLOG"] = "Cerca"; |
$lang["CLEARLOG"] = "Neteja el filtre actual"; |
$lang["MORERESULTS"] = "Cerca més coincidències..."; |
$lang["NORESULTS"] = "No hi ha cap registre que coincideixi amb la vostra cerca"; |
$lang["NOMORERESULTS"] = "No hi ha més registres que coincideixin amb la vostra cerca"; |
$lang['NOPREVREV'] = 'No hi ha cap revisió anterior.'; |
$lang["RSSFEEDTITLE"] = "Canal RSS del WebSVN"; |
$lang["FILESMODIFIED"] = "fitxer(s) modificat(s)"; |
$lang["RSSFEED"] = "Canal RSS"; |
$lang["LINENO"] = "Línia núm."; |
$lang["BLAMEFOR"] = "Informació de culpa per a la revisió"; |
$lang["DAYLETTER"] = "d"; |
$lang["HOURLETTER"] = "h"; |
$lang["MINUTELETTER"] = "m"; |
$lang["SECONDLETTER"] = "s"; |
$lang["GO"] = "Vés-hi"; |
$lang["PATHCOMPARISON"] = "Comparació de camins"; |
$lang["COMPAREPATHS"] = "Compara els camins"; |
$lang["COMPAREREVS"] = "Compara les revisions"; |
$lang["PROPCHANGES"] = "Canvis de propietat:"; |
$lang["CONVFROM"] = "Aquesta comparació mostra els canvis necessaris per a convertir el camí "; |
$lang["TO"] = "a"; |
$lang["REVCOMP"] = "Comparació inversa"; |
$lang["COMPPATH"] = "Camí de comparació:"; |
$lang["WITHPATH"] = "Amb el camí:"; |
$lang["FILEDELETED"] = "Fitxer suprimit"; |
$lang["FILEADDED"] = "Nou fitxer"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/danish.inc |
---|
0,0 → 1,124 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// danish.inc |
// |
// Danish language strings based on TortoiseSVN translation. |
// by Jan Normann Nielsen, <span@dubbekarl.dk> |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Dansk"; |
$lang['LANGUAGETAG'] = 'da'; |
$lang["LOG"] = "Log"; |
$lang["DIFF"] = "Sammenlign"; |
$lang["NOREP"] = "Der er ikke angivet noget versionarkiv"; |
$lang["NOPATH"] = "Stien blev ikke fundet"; |
$lang["NOACCESS"] = "Du har ikke de nødvendige rettigheder til at læse denne mappe"; |
$lang["RESTRICTED"] = "Begrænset adgang"; |
$lang["SUPPLYREP"] = "Konfigurer venligst stier til versionsarkiver i include/config.inc ved at bruge \$config->parentPath eller \$config->addRepository<p>. Se installationsguiden for nærmere detaljer."; |
$lang["DIFFREVS"] = "Sammenlign revisionerne"; |
$lang["AND"] = "og"; |
$lang["REV"] = "Rev"; |
$lang["LINE"] = "Linje"; |
$lang["SHOWENTIREFILE"] = "Vis hele filen"; |
$lang["SHOWCOMPACT"] = "Vis kun områder med forskelle"; |
$lang["DIFFPREV"] = "Sammenlign med forrige"; |
$lang["BLAME"] = "ændringsfordeling"; |
$lang["REVINFO"] = "Informationer om revision"; |
$lang["GOYOUNGEST"] = "Gå til nyeste revision"; |
$lang["LASTMOD"] = "Sidste ændring"; |
$lang["LOGMSG"] = "Logbesked"; |
$lang["CHANGES"] = "ændringer"; |
$lang["SHOWCHANGED"] = "Vis ændrede filer"; |
$lang["HIDECHANGED"] = "Skjul ændrede filer"; |
$lang["NEWFILES"] = "Nye filer"; |
$lang["CHANGEDFILES"] = "ændrede filer"; |
$lang["DELETEDFILES"] = "Slettede filer"; |
$lang["VIEWLOG"] = "Vis log"; |
$lang["PATH"] = "Sti"; |
$lang["AUTHOR"] = "Forfatter"; |
$lang["AGE"] = "Alder"; |
$lang["LOG"] = "Log"; |
$lang["CURDIR"] = "Nuværende mappe"; |
$lang["TARBALL"] = "Tar-pakke"; |
$lang["PREV"] = "Forrige"; |
$lang["NEXT"] = "Næste"; |
$lang["SHOWALL"] = "Vis alle"; |
$lang["BADCMD"] = "Fejl ved udførelse af kommandoen"; |
$lang["UNKNOWNREVISION"] = "Revisionen findes ikke"; |
$lang["POWERED"] = "Leveret af <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion-versionsarkiver"; |
$lang["SERVER"] = "Subversion-server"; |
$lang["FILTER"] = "Filter-indstillinger"; |
$lang["STARTLOG"] = "Fra rev"; |
$lang["ENDLOG"] = "Til rev"; |
$lang["SEARCHLOG"] = "Søg efter"; |
$lang["CLEARLOG"] = "Ryd aktuelle filter"; |
$lang["MORERESULTS"] = "Vis flere resultater..."; |
$lang["NORESULTS"] = "Der er ingen logbeskeder, der passer på søgningen"; |
$lang["NOMORERESULTS"] = "Der er ikke flere logbeskeder, som svarer til søgningen"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS-feed"; |
$lang["FILESMODIFIED"] = "fil(er) ændret"; |
$lang["RSSFEED"] = "RSS-feed"; |
$lang["LINENO"] = "Linjenr."; |
$lang["BLAMEFOR"] = "ændringsfordeling for revision"; |
$lang["DAYLETTER"] = "d"; |
$lang["HOURLETTER"] = "t"; |
$lang["MINUTELETTER"] = "m"; |
$lang["SECONDLETTER"] = "s"; |
$lang["GO"] = "Gå til"; |
$lang["PATHCOMPARISON"] = "Sammenligning af stier"; |
$lang["COMPAREPATHS"] = "Sammenlign stier"; |
$lang["COMPAREREVS"] = "Sammenlign revisioner"; |
$lang["PROPCHANGES"] = "ændringer i egenskaber:"; |
$lang["CONVFROM"] = "Denne sammenligning viser de ændringer, der skal til for at konvertere stien "; |
$lang["TO"] = "til"; |
$lang["REVCOMP"] = "Omvendt sammenligning"; |
$lang["COMPPATH"] = "Sammenlign sti:"; |
$lang["WITHPATH"] = "med sti:"; |
$lang["FILEDELETED"] = "Fil slettet"; |
$lang["FILEADDED"] = "Ny fil"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/dutch.inc |
---|
0,0 → 1,119 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// dutch.inc |
// |
// Dutch language strings |
// |
// By David Gartner david A.T net2ftp D-O-T com |
// Comments welcome. |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Dutch"; |
$lang['LANGUAGETAG'] = 'nl'; |
$lang["LOG"] = "Log"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "Geen repository ingegeven"; |
$lang["NOPATH"] = "Pad niet gevonden"; |
$lang["SUPPLYREP"] = "Gelieve een repository pad aan te maken in include/config.inc met behulp van \$config->parentPath of \$config->addRepository<p>Zie de installatiegids voor meer details"; |
$lang["DIFFREVS"] = "Verschil tussen de revisies"; |
$lang["AND"] = "en"; |
$lang["REV"] = "Rev"; |
$lang["LINE"] = "Lijn"; |
$lang["SHOWENTIREFILE"] = "Toon volledig bestand"; |
$lang["SHOWCOMPACT"] = "Toon enkel de delen met verschillen"; |
$lang["DIFFPREV"] = "Vergelijk met vorige"; |
$lang["BLAME"] = "Blame"; |
$lang["REVINFO"] = "Revisie Informatie"; |
$lang["GOYOUNGEST"] = "Ga naar de meest recente revisie"; |
$lang["LASTMOD"] = "Laatste wijziging"; |
$lang["LOGMSG"] = "Log bericht"; |
$lang["CHANGES"] = "Wijzigingen"; |
$lang["SHOWCHANGED"] = "Toon gewijzigde bestanden"; |
$lang["HIDECHANGED"] = "Verberg gewijzigde bestanden"; |
$lang["NEWFILES"] = "Nieuwe bestanden"; |
$lang["CHANGEDFILES"] = "Gewijzigde bestanden"; |
$lang["DELETEDFILES"] = "Gewiste files"; |
$lang["VIEWLOG"] = "Toon Log"; |
$lang["PATH"] = "Pad"; |
$lang["AUTHOR"] = "Auteur"; |
$lang["AGE"] = "Ouderdom"; |
$lang["LOG"] = "Log"; |
$lang["CURDIR"] = "Huidige map"; |
$lang["TARBALL"] = "Tarball"; |
$lang["PREV"] = "Vorige"; |
$lang["NEXT"] = "Volgende"; |
$lang["SHOWALL"] = "Toon alles"; |
$lang["BADCMD"] = "Een fout is opgetreden tijdens het uitvoeren van dit commando"; |
$lang["POWERED"] = "Aangedreven door <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion Projecten"; |
$lang["SERVER"] = "Subversion Server"; |
$lang["SEARCHLOG"] = "Doorzoek de logs"; |
$lang["CLEARLOG"] = "Wis deze zoekopdracht"; |
$lang["MORERESULTS"] = "Vind meer resultaten..."; |
$lang["NORESULTS"] = "Er zijn geen logs die aan de zoekcriteria voldoen"; |
$lang["NOMORERESULTS"] = "Er zijn geen logs meer die aan de zoekcriteria voldoen"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "bestand(en) gewijzigd"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "Lijn Nr."; |
$lang["BLAMEFOR"] = "Blame informatie voor revisie"; |
$lang["YEARS"] = "jaren"; |
$lang["MONTHS"] = "maanden"; |
$lang["WEEKS"] = "weken"; |
$lang["DAYS"] = "dagen"; |
$lang["HOURS"] = "uren"; |
$lang["MINUTES"] = "minuten"; |
$lang["GO"] = "Ga"; |
$lang["PATHCOMPARISON"] = "Pad vergelijking"; |
$lang["COMPAREPATHS"] = "Vergelijk paden"; |
$lang["COMPAREREVS"] = "Vergelijk revisies"; |
$lang["PROPCHANGES"] = "Eigenschap wijzigingen :"; |
$lang["CONVFROM"] = "Deze vergelijking geeft de veranderingen weer die nodig zijn om het pad te converteren "; |
$lang["TO"] = "TO"; |
$lang["REVCOMP"] = "Omgekeerde vergelijking"; |
$lang["COMPPATH"] = "Vergelijk pad:"; |
$lang["WITHPATH"] = "Met pad:"; |
$lang["FILEDELETED"] = "Bestand gewist"; |
$lang["FILEADDED"] = "Nieuw bestand"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/finnish.inc |
---|
0,0 → 1,117 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2005 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// finnish.inc |
// |
// Finnish language strings |
// Matti Pöllä <mpo@iki.fi> |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Finnish"; |
$lang['LANGUAGETAG'] = 'fi'; |
$lang["LOG"] = "Loki"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "Tietokantaa ei ole valittu"; |
$lang["NOPATH"] = "Polkua ei löydy"; |
$lang["SUPPLYREP"] = "Aseta tietokannan polku tiedostossa include/config.inc käyttäen muuttujaa \$config->parentPath tai \$config->addRepository<p>Katso asennusoppaasta yksityiskohtaiset ohjeet"; |
$lang["DIFFREVS"] = "Versioiden väliset muutokset"; |
$lang["AND"] = "ja"; |
$lang["REV"] = "Versio"; |
$lang["LINE"] = "Rivi"; |
$lang["SHOWENTIREFILE"] = "Näytä koko tiedosto"; |
$lang["SHOWCOMPACT"] = "Näytä vain muutoksia sisältävät alueet"; |
$lang["DIFFPREV"] = "Vertaa Edelliseen"; |
$lang["BLAME"] = "Blame"; |
$lang["REVINFO"] = "Version Tiedot"; |
$lang["GOYOUNGEST"] = "Siirry uusimpaan versioon"; |
$lang["LASTMOD"] = "Viimeinen muokkaus"; |
$lang["LOGMSG"] = "Lokiviesti"; |
$lang["CHANGES"] = "Muutokset"; |
$lang["SHOWCHANGED"] = "Näytä muutoksia siältävät tiedostot"; |
$lang["HIDECHANGED"] = "Piilota muutoksia sisältävät tiedostot"; |
$lang["NEWFILES"] = "Uudet tiedostot"; |
$lang["CHANGEDFILES"] = "Muokatut tiedostot"; |
$lang["DELETEDFILES"] = "Poistetut tiedostot"; |
$lang["VIEWLOG"] = "Näytä Loki"; |
$lang["PATH"] = "Polku"; |
$lang["AUTHOR"] = "Tekijä"; |
$lang["AGE"] = "Ikä"; |
$lang["LOG"] = "Loki"; |
$lang["CURDIR"] = "Tämä Hakemisto"; |
$lang["TARBALL"] = "Tar-tiedosto"; |
$lang["PREV"] = "Edellinen"; |
$lang["NEXT"] = "Seuraava"; |
$lang["SHOWALL"] = "Näytä Kaikki"; |
$lang["BADCMD"] = "Virhe komennon suorittamisessa"; |
$lang["POWERED"] = "Moottorina <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion Projektit"; |
$lang["SERVER"] = "Subversion-palvelin"; |
$lang["SEARCHLOG"] = "Etsi lokista"; |
$lang["CLEARLOG"] = "Tyhjennä tämä haku"; |
$lang["MORERESULTS"] = "Hae lisää osumia..."; |
$lang["NORESULTS"] = "Mikään loki ei vastaa kyselyä"; |
$lang["NOMORERESULTS"] = "Kyselyä vastaavia lokeja ei ole enemmän"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS-syöte"; |
$lang["FILESMODIFIED"] = "tiedosto(a) muokattu"; |
$lang["RSSFEED"] = "RSS-syöte"; |
$lang["LINENO"] = "Rivi Nro."; |
$lang["BLAMEFOR"] = "Blame-tiedot versiolle"; |
$lang["YEARS"] = "vuotta"; |
$lang["MONTHS"] = "kuukautta"; |
$lang["WEEKS"] = "viikkoa"; |
$lang["DAYS"] = "päivää"; |
$lang["HOURS"] = "tuntia"; |
$lang["MINUTES"] = "minuuttia"; |
$lang["GO"] = "Siirry"; |
$lang["PATHCOMPARISON"] = "Polkujen Vertailu"; |
$lang["COMPAREPATHS"] = "Vertaa Polkuja"; |
$lang["COMPAREREVS"] = "Vertaile Versioita"; |
$lang["PROPCHANGES"] = "Ominaisuuksien muutokset :"; |
$lang["CONVFROM"] = "Tämä vertailu näyttää polun muuntamiseen tarvittavat muutokset "; |
$lang["TO"] = "TO"; |
$lang["REVCOMP"] = "Vertailu käänteiseen suuntaan"; |
$lang["COMPPATH"] = "Vertaile Polkua:"; |
$lang["WITHPATH"] = "Vertailtava Polku:"; |
$lang["FILEDELETED"] = "Tiedosto poistettu"; |
$lang["FILEADDED"] = "Uusi tiedosto"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/french.inc |
---|
0,0 → 1,94 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Erik Le Blanc |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// french.inc |
// |
// French language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Francais"; |
$lang['LANGUAGETAG'] = 'fr'; |
$lang["LOG"] = "Log"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "Pas de repository"; |
$lang["NOPATH"] = "Fichier ou répertoire non trouvé"; |
$lang["DIFFREVS"] = "Différences entre les révisions"; |
$lang["AND"] = "et"; |
$lang["REV"] = "Révision"; |
$lang["LINE"] = "Ligne"; |
$lang["SHOWENTIREFILE"] = "Afficher tout le fichier"; |
$lang["SHOWCOMPACT"] = "Afficher seulement les passages avec des différences"; |
$lang["DIFFPREV"] = "Différence avec le précédent"; |
$lang["BLAME"] = "Responsabilité"; |
$lang["REVINFO"] = "Information sur la Révision"; |
$lang["GOYOUNGEST"] = "Aller à la Révision la plus récente"; |
$lang["LASTMOD"] = "Dernière modification"; |
$lang["LOGMSG"] = "Message de Log"; |
$lang["CHANGES"] = "Changements"; |
$lang["SHOWCHANGED"] = "Montrer les fichiers modifiés"; |
$lang["HIDECHANGED"] = "Cacher les fichiers modifiés"; |
$lang["NEWFILES"] = "Nouveaux fichiers"; |
$lang["CHANGEDFILES"] = "Fichier(s) modifié(s)"; |
$lang["DELETEDFILES"] = "Fichier(s) effacé(s)"; |
$lang["VIEWLOG"] = "Afficher le Log"; |
$lang["PATH"] = "Chemin"; |
$lang["AUTHOR"] = "Auteur"; |
$lang["AGE"] = "Ancienneté"; |
$lang["LOG"] = "Log"; |
$lang["CURDIR"] = "Répertoire courant"; |
$lang["PREV"] = "Précédent"; |
$lang["NEXT"] = "Suivant"; |
$lang["SHOWALL"] = "Tout montrer"; |
$lang["BADCMD"] = "Cette commande a provoqué une erreur"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Projets Subversion"; |
$lang["SERVER"] = "Serveur Subversion"; |
$lang["SEARCHLOG"] = "Rechercher dans les Logs"; |
$lang["CLEARLOG"] = "Effacer la recherche courante"; |
$lang["MORERESULTS"] = "Trouver plus de réponses..."; |
$lang["NORESULTS"] = "Il n'y a pas de réponse à votre recherche dans les Logs"; |
$lang["NOMORERESULTS"] = "Il n'y a pas plus de réponses à votre recherche"; |
$lang["RSSFEEDTITLE"] = "Fil RSS de WebSVN"; |
$lang["FILESMODIFIED"] = "fichier(s) modifi&aecute;(s)"; |
$lang["RSSFEED"] = "RSS"; |
$lang["LINENO"] = "Ligne numéro"; |
$lang["BLAMEFOR"] = "Dernier responsable"; |
$lang["YEARS"] = "années"; |
$lang["MONTHS"] = "mois"; |
$lang["WEEKS"] = "semaines"; |
$lang["DAYS"] = "jours"; |
$lang["HOURS"] = "heures"; |
$lang["MINUTES"] = "minutes"; |
$lang["GO"] = "Go"; |
/WebSVN/languages/NotUsed/german.inc |
---|
0,0 → 1,110 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Stephan Stapel, <stephan.stapel@web.de> |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// germany.inc |
// |
// German language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "German"; |
$lang['LANGUAGETAG'] = 'de'; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "Kein Repository angegeben."; |
$lang["NOPATH"] = "Pfad nicht gefunden"; |
$lang["SUPPLYREP"] = "Bitte den Repository Pfad in include/config.inc mit \$config->parentPath oder \$config->addRepository konfigurieren.<p>Genauere Informationen sind in der Installationsanleitung"; |
$lang["DIFFREVS"] = "Vergleich zwischen Revisionen"; |
$lang["AND"] = "und"; |
$lang["REV"] = "Revision"; |
$lang["LINE"] = "Zeile"; |
$lang["SHOWENTIREFILE"] = "Ganze Datei anzeigen"; |
$lang["SHOWCOMPACT"] = "Nur geänderte Bereiche"; |
$lang["DIFFPREV"] = "Vergleich mit vorheriger"; |
$lang["BLAME"] = "Blame"; |
$lang["REVINFO"] = "Revisionsinformation"; |
$lang["GOYOUNGEST"] = "Zur aktuellen Revision"; |
$lang["LASTMOD"] = "Letzte Änderung"; |
$lang["LOGMSG"] = "Logeintrag"; |
$lang["CHANGES"] = "Änderungen"; |
$lang["SHOWCHANGED"] = "Geänderte Dateien anzeigen"; |
$lang["HIDECHANGED"] = "Geänderte Dateien verstecken"; |
$lang["NEWFILES"] = "Neue Dateien"; |
$lang["CHANGEDFILES"] = "Geänderte Dateien"; |
$lang["DELETEDFILES"] = "Gelöschte Dateien"; |
$lang["VIEWLOG"] = "Log anzeigen"; |
$lang["PATH"] = "Pfad"; |
$lang["AUTHOR"] = "Autor"; |
$lang["AGE"] = "Alter"; |
$lang["LOG"] = "Log"; |
$lang["CURDIR"] = "Aktuelles Verzeichnis"; |
$lang["TARBALL"] = "Archiv Download"; |
$lang["PREV"] = "Zurück"; |
$lang["NEXT"] = "Weiter"; |
$lang["SHOWALL"] = "Alles anzeigen"; |
$lang["BADCMD"] = "Fehler beim Ausführen des Befehls"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion-Projekte"; |
$lang["SERVER"] = "Subversion Server"; |
$lang["SEARCHLOG"] = "Suche im Log nach"; |
$lang["CLEARLOG"] = "Aktuelle Suche löschen"; |
$lang["MORERESULTS"] = "Weitere Ergebnisse finden..."; |
$lang["NORESULTS"] = "Es wurden keine Treffer erzielt"; |
$lang["NOMORERESULTS"] = "Keine weiteren Treffer für diese Suche"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "Veränderte Dateien"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "Nr."; |
$lang["BLAMEFOR"] = "Blame Information fü Rev."; |
$lang["GO"] = "Los"; |
$lang["PATHCOMPARISON"] = "Pfadvergleich"; |
$lang["COMPAREPATHS"] = "Vergleiche Pfade"; |
$lang["COMPAREREVS"] = "Vergleiche Revisionen"; |
$lang["PROPCHANGES"] = "Geänderte Eigenschaften :"; |
$lang["CONVFROM"] = "Dieser Vergleich zeigt die Änderungen zwischen "; |
$lang["TO"] = "und"; |
$lang["REVCOMP"] = "Revisionen vertauschen"; |
$lang["COMPPATH"] = "Vergleiche Pfad:"; |
$lang["WITHPATH"] = "Mit Pfad:"; |
$lang["FILEDELETED"] = "Datei gelöscht"; |
$lang["FILEADDED"] = "Neue Datei"; |
$lang["YEARS"] = "Jahre"; |
$lang["MONTHS"] = "Monate"; |
$lang["WEEKS"] = "Wochen"; |
$lang["DAYS"] = "Tage"; |
$lang["HOURS"] = "Stunden"; |
$lang["MINUTES"] = "Minuten"; |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
/WebSVN/languages/NotUsed/japanese.inc |
---|
0,0 → 1,128 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// japanese.inc |
// Translatior: BEPPU Masamichi |
// |
// Japanese(UTF-8) language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Japanese"; |
$lang['LANGUAGETAG'] = 'ja'; |
$lang["LOG"] = "ログ"; |
$lang["DIFF"] = "差分"; |
$lang["NOREP"] = "リポジトリが指定されていません"; |
$lang["NOPATH"] = "パスが見付かりません"; |
$lang["RESTRICTED"] = "アクセスが制限されています"; |
$lang["SUPPLYREP"] = "ファイル include/config.inc 内に \$config->parentPath もしくは \$config->addRepository を使用してリポジトリパスを設定してください。<p>詳しくはインストールガイドを参照してください。"; |
$lang["DIFFREVS"] = "リビジョン間の差分"; |
$lang["AND"] = "と"; |
$lang["REV"] = "リビジョン"; |
$lang["LINE"] = "行"; |
$lang["SHOWENTIREFILE"] = "全て表示"; |
$lang["SHOWCOMPACT"] = "異なる行の周辺だけ表示"; |
$lang["DIFFPREV"] = "前のリビジョンとの差分"; |
$lang["BLAME"] = "詳細表示"; |
$lang["REVINFO"] = "リビジョン情報"; |
$lang["GOYOUNGEST"] = "最新のリビジョンへ"; |
$lang["LASTMOD"] = "最終更新日時"; |
$lang["LOGMSG"] = "ログメッセージ"; |
$lang["CHANGES"] = "変更"; |
$lang["SHOWCHANGED"] = "変更されたファイルの一覧を表示する"; |
$lang["HIDECHANGED"] = "変更されたファイルの一覧を表示しない"; |
$lang["NEWFILES"] = "追加ファイル"; |
$lang["CHANGEDFILES"] = "修正ファイル"; |
$lang["DELETEDFILES"] = "削除ファイル"; |
$lang["VIEWLOG"] = "ログを見る"; |
$lang["PATH"] = "パス"; |
$lang["AUTHOR"] = "修正者"; |
$lang["AGE"] = "無修正時間"; |
$lang["LOG"] = "ログ"; |
$lang["CURDIR"] = "カレントディレクトリ"; |
$lang["TARBALL"] = "Tarball"; |
$lang["PREV"] = "前"; |
$lang["NEXT"] = "次"; |
$lang["SHOWALL"] = "全て表示"; |
$lang["BADCMD"] = "コマンド実行中のエラー"; |
$lang["UNKNOWNREVISION"] = "指定のリビジョンがありません"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion リポジトリ一覧"; |
$lang["SERVER"] = "Subversion サーバ"; |
$lang["FILTER"] = "フィルタオプション"; |
$lang["STARTLOG"] = "開始リビジョン"; |
$lang["ENDLOG"] = "終了リビジョン"; |
$lang["MAXLOG"] = "最大リビジョン数"; |
$lang["SEARCHLOG"] = "ログを検索"; |
$lang["CLEARLOG"] = "検索条件をクリアする"; |
$lang["MORERESULTS"] = "検索条件を絞り込む"; |
$lang["NORESULTS"] = "検索条件にマッチするものはありませんでした"; |
$lang["NOMORERESULTS"] = "これ以上検索条件にマッチするものはありません"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "ファイルが修正されました"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "行番号"; |
$lang["BLAMEFOR"] = "詳細表示 対象リビジョン"; |
$lang["YEARS"] = "年間"; |
$lang["MONTHS"] = "ヵ月間"; |
$lang["WEEKS"] = "週間"; |
$lang["DAYS"] = "日間"; |
$lang["HOURS"] = "時間"; |
$lang["MINUTES"] = "分"; |
$lang["DAYLETTER"] = "日間"; |
$lang["HOURLETTER"] = "時間"; |
$lang["MINUTELETTER"] = "分"; |
$lang["SECONDLETTER"] = "秒"; |
$lang["GO"] = "GO"; |
$lang["PATHCOMPARISON"] = "パス比較"; |
$lang["COMPAREPATHS"] = "パス比較"; |
$lang["COMPAREREVS"] = "リビジョン比較"; |
$lang["PROPCHANGES"] = "プロパティ変更:"; |
$lang["CONVFROM"] = "この比較は次の2つのパス配下すべてのファイルの比較をします。比較対象パス:"; |
$lang["TO"] = "と"; |
$lang["REVCOMP"] = "逆比較"; |
$lang["COMPPATH"] = "比較元パス:"; |
$lang["WITHPATH"] = "比較先パス:"; |
$lang["FILEDELETED"] = "ファイル削除"; |
$lang["FILEADDED"] = "新規ファイル"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = "<nobr>"; |
$lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/korean.inc |
---|
0,0 → 1,114 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// korean-utf8.inc |
// Translator: Lee Jae-Hong |
// Korean(utf8) language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Korean"; |
$lang['LANGUAGETAG'] = 'ko'; |
$lang["LOG"] = "로그"; |
$lang["DIFF"] = "비교"; |
$lang["NOREP"] = "저장소가 지정되어 있지 않습니다."; |
$lang["NOPATH"] = "경로를 찾을 수 없습니다."; |
$lang["SUPPLYREP"] = "include/config.inc 파일의 \$config->parentPath 또는 \$config->addRepository에 저장소의 경로를 지정해 주십시오.<p>설치 설명서를 참조해 주십시오."; |
$lang["DIFFREVS"] = "리비전간 비교"; |
$lang["AND"] = "와(과)"; |
$lang["REV"] = "리비전"; |
$lang["LINE"] = "행"; |
$lang["SHOWENTIREFILE"] = "모두 보기"; |
$lang["SHOWCOMPACT"] = "바뀐 부분만 보기"; |
$lang["DIFFPREV"] = "이전 리비전과 비교"; |
$lang["BLAME"] = "수정한 사람 보기"; |
$lang["REVINFO"] = "리비전 정보"; |
$lang["GOYOUNGEST"] = "최신 리비전으로 가기"; |
$lang["LASTMOD"] = "마지막 변경"; |
$lang["LOGMSG"] = "로그 메시지"; |
$lang["CHANGES"] = "변경"; |
$lang["SHOWCHANGED"] = "변경된 파일 보기"; |
$lang["HIDECHANGED"] = "변경된 파일 숨기기"; |
$lang["NEWFILES"] = "새 파일"; |
$lang["CHANGEDFILES"] = "수정된 파일"; |
$lang["DELETEDFILES"] = "삭제된 파일"; |
$lang["VIEWLOG"] = "로그 보기"; |
$lang["PATH"] = "경로"; |
$lang["AUTHOR"] = "작성자"; |
$lang["AGE"] = "기간"; |
$lang["LOG"] = "로그"; |
$lang["CURDIR"] = "현재 디렉토리"; |
$lang["TARBALL"] = "Tarball"; |
$lang["PREV"] = "이전"; |
$lang["NEXT"] = "다음"; |
$lang["SHOWALL"] = "모두 보기"; |
$lang["BADCMD"] = "명령 실행 에러"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion 프로젝트"; |
$lang["SERVER"] = "Subversion 서버"; |
$lang["SEARCHLOG"] = "로그 검색"; |
$lang["CLEARLOG"] = "검색 조건 삭제"; |
$lang["MORERESULTS"] = "나머지 검색 결과..."; |
$lang["NORESULTS"] = "검색 조건에 맞는 결과가 없습니다."; |
$lang["NOMORERESULTS"] = "더 이상 검색 조건에 맞는 결과가 없습니다."; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "파일 수정됨"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "행번호"; |
$lang["BLAMEFOR"] = "수정한 사람 보기, 리비전 "; |
$lang["YEARS"] = "년"; |
$lang["MONTHS"] = "개월"; |
$lang["WEEKS"] = "주일"; |
$lang["DAYS"] = "일"; |
$lang["HOURS"] = "시간"; |
$lang["MINUTES"] = "분"; |
$lang["GO"] = "Go"; |
$lang["PATHCOMPARISON"] = "경로 비교"; |
$lang["COMPAREPATHS"] = "경로 비교하기"; |
$lang["COMPAREREVS"] = "리비전 비교하기"; |
$lang["PROPCHANGES"] = "특성 변경 :"; |
$lang["CONVFROM"] = "이 비교는 바뀐 경로를 보여 줍니다."; |
$lang["TO"] = "에서"; |
$lang["REVCOMP"] = "역 비교"; |
$lang["COMPPATH"] = "비교 경로:"; |
$lang["WITHPATH"] = "경로:"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/norwegian.inc |
---|
0,0 → 1,122 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// norwegian.inc |
// |
// Norwegian language strings |
// by Sigve Indregard <sigve.indregard@gmail.com>. |
// Translation notes: |
// - I've tried to keep with the translations made in the norwegian version |
// of "Version control with Subversion" |
// - I've kept the abbreviation "diff" |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Norwegian"; |
$lang['LANGUAGETAG'] = 'no'; |
$lang["LOG"] = "Logg"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "Depot ble ikke angitt"; |
$lang["NOPATH"] = "Stien ble ikke funnet"; |
$lang["SUPPLYREP"] = "Vennligst sett opp en depotsti i include/config.inc ved hjelp av \$config->parentPath eller \$config->addRepository.<p>Se installasjonsguiden for detaljer."; |
$lang["DIFFREVS"] = "Diff mellom revisjoner"; |
$lang["AND"] = "og"; |
$lang["REV"] = "Rev"; |
$lang["LINE"] = "Linje"; |
$lang["SHOWENTIREFILE"] = "Vis hele filen"; |
$lang["SHOWCOMPACT"] = "Vis kun områder med forskjeller"; |
$lang["DIFFPREV"] = "Sammenlign med forrige"; |
$lang["BLAME"] = "Ansvarlig"; |
$lang["REVINFO"] = "Revisjonsinformasjon"; |
$lang["GOYOUNGEST"] = "Gå til nyeste revisjon"; |
$lang["LASTMOD"] = "Siste endring"; |
$lang["LOGMSG"] = "Loggmelding"; |
$lang["CHANGES"] = "Endringer"; |
$lang["SHOWCHANGED"] = "Vis endrede filer"; |
$lang["HIDECHANGED"] = "Gjem endrede filer"; |
$lang["NEWFILES"] = "Nye filer"; |
$lang["CHANGEDFILES"] = "Endrede filer"; |
$lang["DELETEDFILES"] = "Slettede filer"; |
$lang["VIEWLOG"] = "Vis logg"; |
$lang["PATH"] = "Sti"; |
$lang["AUTHOR"] = "Forfatter"; |
$lang["AGE"] = "Alder"; |
$lang["LOG"] = "Logg"; |
$lang["CURDIR"] = "Gjeldende katalog"; |
$lang["TARBALL"] = "Tar-ball"; |
$lang["PREV"] = "Forrige"; |
$lang["NEXT"] = "Neste"; |
$lang["SHOWALL"] = "Vis alle"; |
$lang["BADCMD"] = "En feil oppstod under utførelse av denne kommandoen"; |
$lang["POWERED"] = "Kjører på <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversionprosjekter"; |
$lang["SERVER"] = "Subversiontjener"; |
$lang["SEARCHLOG"] = "Søk i loggen etter"; |
$lang["CLEARLOG"] = "Tøm gjeldende søk"; |
$lang["MORERESULTS"] = "Finn flere treff..."; |
$lang["NORESULTS"] = "Ingen loggmeldinger passer til ditt søk"; |
$lang["NOMORERESULTS"] = "Ingen flere loggmeldinger passer til ditt søk"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS-strøm"; |
$lang["FILESMODIFIED"] = "fil(er) endret"; |
$lang["RSSFEED"] = "RSS-strøm"; |
$lang["LINENO"] = "Linjenr."; |
$lang["BLAMEFOR"] = "Ansvarliginformasjon for rev."; |
$lang["YEARS"] = "år"; |
$lang["MONTHS"] = "måneder"; |
$lang["WEEKS"] = "uker"; |
$lang["DAYS"] = "dager"; |
$lang["HOURS"] = "timer"; |
$lang["MINUTES"] = "minutter"; |
$lang["GO"] = "Gå"; |
$lang["PATHCOMPARISON"] = "Stisammenligning"; |
$lang["COMPAREPATHS"] = "Sammenlign stier"; |
$lang["COMPAREREVS"] = "Sammenlign revisjoner"; |
$lang["PROPCHANGES"] = "Egenskapsendringer :"; |
$lang["CONVFROM"] = "Denne sammenligningen viser hva som må til for å konvertere stien "; |
$lang["TO"] = "med"; |
$lang["REVCOMP"] = "Baklengs sammenligning"; |
$lang["COMPPATH"] = "Sammenlign sti:"; |
$lang["WITHPATH"] = "Med sti:"; |
$lang["FILEDELETED"] = "Fil slettet"; |
$lang["FILEADDED"] = "Ny fil"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/polish.inc |
---|
0,0 → 1,122 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// polish.inc |
// |
// Polish language strings in UTF-8 encoding |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Polish"; |
$lang['LANGUAGETAG'] = 'pl'; |
$lang["LOG"] = "Dziennik zmian"; |
$lang["DIFF"] = "Różnice"; |
$lang["NOREP"] = "Nie podano żadnego repozytorium"; |
$lang["NOPATH"] = "Nie odnaleziono ścieżki"; |
$lang["SUPPLYREP"] = "Proszę ustawić ścieżkę do repozytoriów w |
include/config.inc za pomocą \$config->parentPath lub |
\$config->addRepository<p>Aby uzyskać więcej szczegółów zapoznaj się z |
podręcznikiem instalacyjnym"; |
$lang["DIFFREVS"] = "Różnice pomiędzy wersjami"; |
$lang["AND"] = "i"; |
$lang["REV"] = "Wersja"; |
$lang["LINE"] = "Linia"; |
$lang["SHOWENTIREFILE"] = "Pokaż cały plik"; |
$lang["SHOWCOMPACT"] = "Pokaż tylko fragmety w których zaszły zmiany"; |
$lang["DIFFPREV"] = "Porównaj z poprzednią wersją"; |
$lang["BLAME"] = "Wkład pracy"; |
$lang["REVINFO"] = "Informacje o wersji"; |
$lang["GOYOUNGEST"] = "Przejdź do najnowszej wersji"; |
$lang["LASTMOD"] = "Ostatnia zmiana"; |
$lang["LOGMSG"] = "Wpis z dziennika zmian"; |
$lang["CHANGES"] = "Zmiany"; |
$lang["SHOWCHANGED"] = "Pokaż zmienione pliki"; |
$lang["HIDECHANGED"] = "Ukryj zmienione pliki"; |
$lang["NEWFILES"] = "Nowe pliki"; |
$lang["CHANGEDFILES"] = "Zmienione pliki"; |
$lang["DELETEDFILES"] = "Usunięte pliki"; |
$lang["VIEWLOG"] = "Pokaż dziennik zmian"; |
$lang["PATH"] = "Ścieżka"; |
$lang["AUTHOR"] = "Autor"; |
$lang["AGE"] = "Wiek"; |
$lang["LOG"] = "Dziennik zmian"; |
$lang["CURDIR"] = "Aktualny katalog"; |
$lang["TARBALL"] = "Archiwum tar"; |
$lang["PREV"] = "Poprzednia strona"; |
$lang["NEXT"] = "Następna strona"; |
$lang["SHOWALL"] = "Pokaż wszyskie"; |
$lang["BADCMD"] = "Błąd podczas wykonywania polecenia"; |
$lang["POWERED"] = "Obsługiwane przez <a |
href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Projekty Subversion"; |
$lang["SERVER"] = "Serwer Subversion"; |
$lang["SEARCHLOG"] = "Przeszukaj dziennik zmian"; |
$lang["CLEARLOG"] = "Usuń rezulaty wyszukiwania"; |
$lang["MORERESULTS"] = "Znajdź więcej dopasowań..."; |
$lang["NORESULTS"] = "Żaden wpis w dzinniku zmian nie pasuje do zapytania"; |
$lang["NOMORERESULTS"] = "Nie ma już więcej wpisów pasujących do |
zadanych kryterów"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "zmienione pliki"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "Linia nr"; |
$lang["BLAMEFOR"] = "Wkład pracy dla wersji"; |
$lang["YEARS"] = "lat"; |
$lang["MONTHS"] = "miesięcy"; |
$lang["WEEKS"] = "tygodni"; |
$lang["DAYS"] = "dni"; |
$lang["HOURS"] = "godzin"; |
$lang["MINUTES"] = "minut"; |
$lang["GO"] = "Przejdź"; |
$lang["PATHCOMPARISON"] = "Porównywanie katalogów"; |
$lang["COMPAREPATHS"] = "Porównaj katalogi"; |
$lang["COMPAREREVS"] = "Porównaj wersje"; |
$lang["PROPCHANGES"] = "Zmiany właściwości :"; |
$lang["CONVFROM"] = "Poniższe zestawienie pokazuje zmiany konieczne by |
zaktualizować katalog"; |
$lang["TO"] = "na"; |
$lang["REVCOMP"] = "Odwróć porównanie"; |
$lang["COMPPATH"] = "Porównaj katalog:"; |
$lang["WITHPATH"] = "Z katalogiem:"; |
$lang["FILEDELETED"] = "Plik usunięty"; |
$lang["FILEADDED"] = "Nowy plik"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/portuguese.inc |
---|
0,0 → 1,85 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// portuguese.inc |
// |
// Portuguese language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Portuguese"; |
$lang['LANGUAGETAG'] = 'pt'; |
$lang["LOG"] = "Log"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "Não foi indicado um repositório"; |
$lang["NOPATH"] = "Path Inválida"; |
$lang["DIFFREVS"] = "Diferenças entre revisões"; |
$lang["AND"] = "e"; |
$lang["REV"] = "Rev"; |
$lang["LINE"] = "Linha"; |
$lang["SHOWENTIREFILE"] = "Mostrar todo o ficheiro"; |
$lang["SHOWCOMPACT"] = "Mostrar apenas áreas com diferenças"; |
$lang["DIFFPREV"] = "Diferenças com a anterior"; |
$lang["REVINFO"] = "Notas desta revisão"; |
$lang["GOYOUNGEST"] = "Revisão mais recente"; |
$lang["LASTMOD"] = "Última alteração"; |
$lang["LOGMSG"] = "Mensagem de Log"; |
$lang["CHANGES"] = "Alterações"; |
$lang["SHOWCHANGED"] = "Mostrar ficheiros alterados"; |
$lang["HIDECHANGED"] = "Esconder ficheiros alterados"; |
$lang["NEWFILES"] = "Novos ficheiros"; |
$lang["CHANGEDFILES"] = "Ficheiros alterados"; |
$lang["DELETEDFILES"] = "Ficheiros apagados"; |
$lang["VIEWLOG"] = "Ver Log"; |
$lang["PATH"] = "Path"; |
$lang["AUTHOR"] = "Autor"; |
$lang["AGE"] = "Idade"; |
$lang["LOG"] = "Log"; |
$lang["CURDIR"] = "Directoria Currente"; |
$lang["PREV"] = "Anterior"; |
$lang["NEXT"] = "Seguinte"; |
$lang["SHOWALL"] = "Mostrar todos"; |
$lang["BADCMD"] = "Erro ao correr este comando"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion Projectos"; |
$lang["SERVER"] = "Subversion Servidor"; |
$lang["SEARCHLOG"] = "Pesquisar o Search log por"; |
$lang["CLEARLOG"] = "Limpar pesquisa"; |
$lang["MORERESULTS"] = "Encontrar mais..."; |
$lang["NORESULTS"] = "A pesquisa não devolveu nenhum log"; |
$lang["NOMORERESULTS"] = "Não existem mais resultados (logs) para a pesquisa"; |
$lang["YEARS"] = "anos"; |
$lang["MONTHS"] = "meses"; |
$lang["WEEKS"] = "semanas"; |
$lang["DAYS"] = "dias"; |
$lang["HOURS"] = "horas"; |
$lang["MINUTES"] = "minutos"; |
$lang["GO"] = "Go"; |
/WebSVN/languages/NotUsed/russian.inc |
---|
0,0 → 1,123 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// russian.inc |
// |
// Russian language strings |
// by Alexey Chumakov <alex@chumakov.ru> |
// UTF-8 encoding |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Russian"; |
$lang['LANGUAGETAG'] = 'ru'; |
$lang["LOG"] = "Журнал"; |
$lang["DIFF"] = "Различия"; |
$lang["NOREP"] = "Не задано хранилище"; |
$lang["NOPATH"] = "Путь не найден"; |
$lang["NOACCESS"] = "Для чтения этого каталога у вас нет нужных прав"; |
$lang["RESTRICTED"] = "Ограниченный доступ"; |
$lang["SUPPLYREP"] = "Пожалуйста, настройте путь к хранилищу в include/config.inc, пользуясь \$config->parentPath или \$config->addRepository<p>Дополнительные сведения приведены в руководстве по установке "; |
$lang["DIFFREVS"] = "Различия между редакциями"; |
$lang["AND"] = "и"; |
$lang["REV"] = "Редакция"; |
$lang["LINE"] = "Строка"; |
$lang["SHOWENTIREFILE"] = "показать весь файл"; |
$lang["SHOWCOMPACT"] = "показать только места с различиями"; |
$lang["DIFFPREV"] = "сравнить с предыдущей"; |
$lang["BLAME"] = "авторство"; |
$lang["REVINFO"] = "Сведения о редакции"; |
$lang["GOYOUNGEST"] = "перейти к новейшей редакции"; |
$lang["LASTMOD"] = "Последнее изменение"; |
$lang["LOGMSG"] = "Запись в журнале"; |
$lang["CHANGES"] = "Изменения"; |
$lang["SHOWCHANGED"] = "показать измененные файлы"; |
$lang["HIDECHANGED"] = "скрыть измененные файлы"; |
$lang["NEWFILES"] = "Новые файлы"; |
$lang["CHANGEDFILES"] = "Измененные файлы"; |
$lang["DELETEDFILES"] = "Удаленные файлы"; |
$lang["VIEWLOG"] = "открыть журнал"; |
$lang["PATH"] = "Путь"; |
$lang["AUTHOR"] = "Автор"; |
$lang["AGE"] = "Давность"; |
$lang["LOG"] = "Журнал"; |
$lang["CURDIR"] = "Текущий каталог"; |
$lang["TARBALL"] = "Архив"; |
$lang["PREV"] = "пред."; |
$lang["NEXT"] = "след."; |
$lang["SHOWALL"] = "показать все"; |
$lang["BADCMD"] = "Ошибка при выполнении этой команды"; |
$lang["UNKNOWNREVISION"] = "Редакция не найдена"; |
$lang["POWERED"] = "Работает на <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Хранилища Subversion "; |
$lang["SERVER"] = "Сервер Subversion "; |
$lang["FILTER"] = "Параметры фильтрации"; |
$lang["STARTLOG"] = "От редакции"; |
$lang["ENDLOG"] = "До редакции"; |
$lang["MAXLOG"] = "Макс. редакций"; |
$lang["SEARCHLOG"] = "искать"; |
$lang["CLEARLOG"] = "очистить текущий фильтр"; |
$lang["MORERESULTS"] = "найти еще совпадения..."; |
$lang["NORESULTS"] = "Нет записей, совпадающих с вашим запросом"; |
$lang["NOMORERESULTS"] = "Больше нет записей, совпадающих с вашим запросом"; |
$lang["RSSFEEDTITLE"] = "RSS-канал WebSVN"; |
$lang["FILESMODIFIED"] = "файл(ов) изменено"; |
$lang["RSSFEED"] = "канал RSS"; |
$lang["LINENO"] = "№ строки"; |
$lang["BLAMEFOR"] = "Сведения об авторстве для редакции "; |
$lang["DAYLETTER"] = "д"; |
$lang["HOURLETTER"] = "ч"; |
$lang["MINUTELETTER"] = "м"; |
$lang["SECONDLETTER"] = "с"; |
$lang["GO"] = "Перейти"; |
$lang["PATHCOMPARISON"] = "Сравнение путей"; |
$lang["COMPAREPATHS"] = "cравнить пути"; |
$lang["COMPAREREVS"] = "Сравнить редакции"; |
$lang["PROPCHANGES"] = "Изменения свойств :"; |
$lang["CONVFROM"] = "Такое сравнение показывает изменения, нужные для для преобразования пути "; |
$lang["TO"] = "В"; |
$lang["REVCOMP"] = "обратное сравнение"; |
$lang["COMPPATH"] = "Сравнить путь:"; |
$lang["WITHPATH"] = "С путем:"; |
$lang["FILEDELETED"] = "Файл удален"; |
$lang["FILEADDED"] = "Новый файл"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
//$lang["NOBR"] = "<nobr>"; |
//$lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/schinese.inc |
---|
0,0 → 1,118 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// schinese-utf8.inc |
// |
// Simple Chinese language strings |
// |
// Author: Liangxu Wang <wlx@mygis.org> |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Simplified Chinese"; |
$lang['LANGUAGETAG'] = 'zh-CN'; |
$lang["LOG"] = "记录"; |
$lang["DIFF"] = "差异"; |
$lang["NOREP"] = "没有仓库"; |
$lang["NOPATH"] = "找不到路径"; |
$lang["SUPPLYREP"] = "请在include/config.inc中使用\$config->parentPath或\$config->addRepository设置仓库的路径<p>更详细的内容请参考安装手册"; |
$lang["DIFFREVS"] = "修订版本之间的差异"; |
$lang["AND"] = "和"; |
$lang["REV"] = "修订"; |
$lang["LINE"] = "行"; |
$lang["SHOWENTIREFILE"] = "显示整个文件"; |
$lang["SHOWCOMPACT"] = "只显示差异处"; |
$lang["DIFFPREV"] = "与前一次版本进行比较"; |
$lang["BLAME"] = "Blame"; |
$lang["REVINFO"] = "修订版信息"; |
$lang["GOYOUNGEST"] = "到最新的修订版"; |
$lang["LASTMOD"] = "最后修改"; |
$lang["LOGMSG"] = "记录消息"; |
$lang["CHANGES"] = "变化"; |
$lang["SHOWCHANGED"] = "显示有变化的文件"; |
$lang["HIDECHANGED"] = "隐藏有变化的文件"; |
$lang["NEWFILES"] = "新文件"; |
$lang["CHANGEDFILES"] = "已修改文件"; |
$lang["DELETEDFILES"] = "已删除文件"; |
$lang["VIEWLOG"] = "查看记录"; |
$lang["PATH"] = "路径"; |
$lang["AUTHOR"] = "作者"; |
$lang["AGE"] = "年龄"; |
$lang["LOG"] = "记录"; |
$lang["CURDIR"] = "当前目录"; |
$lang["TARBALL"] = "Tarball格式"; |
$lang["PREV"] = "前"; |
$lang["NEXT"] = "后"; |
$lang["SHOWALL"] = "全部显示"; |
$lang["BADCMD"] = "命令执行错误"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion Projects"; |
$lang["SERVER"] = "Subversion Server"; |
$lang["SEARCHLOG"] = "搜索记录内容"; |
$lang["CLEARLOG"] = "清除当前搜索"; |
$lang["MORERESULTS"] = "找个更多符合的..."; |
$lang["NORESULTS"] = "没有符合要求的记录"; |
$lang["NOMORERESULTS"] = "没有更多记录符合要求"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "个文件被改动"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "行号"; |
$lang["BLAMEFOR"] = "Blame information for rev"; |
$lang["YEARS"] = "年"; |
$lang["MONTHS"] = "月"; |
$lang["WEEKS"] = "周"; |
$lang["DAYS"] = "日"; |
$lang["HOURS"] = "小时"; |
$lang["MINUTES"] = "分钟"; |
$lang["GO"] = "Go"; |
$lang["PATHCOMPARISON"] = "路径比较"; |
$lang["COMPAREPATHS"] = "路径比较"; |
$lang["COMPAREREVS"] = "比较修订版"; |
$lang["PROPCHANGES"] = "改变属性 :"; |
$lang["CONVFROM"] = "这个比较必须转换路径,从"; |
$lang["TO"] = "到"; |
$lang["REVCOMP"] = "颠倒比较"; |
$lang["COMPPATH"] = "路径比较:"; |
$lang["WITHPATH"] = "With Path:"; |
$lang["FILEDELETED"] = "已删除文件"; |
$lang["FILEADDED"] = "新文件"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/slovenian.inc |
---|
0,0 → 1,130 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Goran Kavrecic |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// slovenian.inc |
// |
// Slovenian language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Slovenian"; |
$lang['LANGUAGETAG'] = 'sl'; |
$lang["LOG"] = "Log"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "Skladišče ni določeno"; |
$lang["NOPATH"] = "Ne najdem poti"; |
$lang["NOACCESS"] = "Nimate dovolj pravic za branje tega direktorija"; |
$lang["RESTRICTED"] = "Dostop zavrnjen"; |
$lang["SUPPLYREP"] = "Prosim nastavi pot do skladišča v include/config.inc z \$config->parentPath ali \$config->addRepository<p>Poglej navodila za detajle"; |
$lang["DIFFREVS"] = "Razlika med različicama"; |
$lang["AND"] = "in"; |
$lang["REV"] = "Različica"; |
$lang["LINE"] = "Vrstica"; |
$lang["SHOWENTIREFILE"] = "Prikaži celo datoteko"; |
$lang["SHOWCOMPACT"] = "Prikaži samo področja z razlikami"; |
$lang["DIFFPREV"] = "Primerjaj s prejšno"; |
$lang["BLAME"] = "Blame"; |
$lang["REVINFO"] = "Informacija o različici"; |
$lang["GOYOUNGEST"] = "Skoči na zadnjo različico"; |
$lang["LASTMOD"] = "Zadnje spremembe"; |
$lang["LOGMSG"] = "Opombe"; |
$lang["CHANGES"] = "Spremembe"; |
$lang["SHOWCHANGED"] = "Prikaži spremenjene datoteke"; |
$lang["HIDECHANGED"] = "Skrij spremenjene datoteke"; |
$lang["NEWFILES"] = "Nove datoteke"; |
$lang["CHANGEDFILES"] = "Spremenjene datoteke"; |
$lang["DELETEDFILES"] = "Pobrisane datoteke"; |
$lang["VIEWLOG"] = "Poglej Opombe"; |
$lang["PATH"] = "Pot"; |
$lang["AUTHOR"] = "Avtor"; |
$lang["AGE"] = "Starost"; |
$lang["LOG"] = "Log"; |
$lang["CURDIR"] = "Trenutni direktorij"; |
$lang["TARBALL"] = "Tarball"; |
$lang["PREV"] = "Nazaj"; |
$lang["NEXT"] = "Naprej"; |
$lang["SHOWALL"] = "Prikaži vse"; |
$lang["BADCMD"] = "Napaka pri izvajanju tega ukaza"; |
$lang["UNKNOWNREVISION"] = "Ne najdem različice"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion Projekti"; |
$lang["SERVER"] = "Subversion strežnik"; |
$lang["FILTER"] = "Možnosti filtriranja"; |
$lang["STARTLOG"] = "Od različice"; |
$lang["ENDLOG"] = "Do različice"; |
$lang["MAXLOG"] = "Max različic"; |
$lang["SEARCHLOG"] = "Išči po opombah"; |
$lang["CLEARLOG"] = "Pobriši trenutno iskanje"; |
$lang["MORERESULTS"] = "Poišči še..."; |
$lang["NORESULTS"] = "Med zapisi ni opomb z iskalno zahtevo"; |
$lang["NOMORERESULTS"] = "Med zapisi ni več opomb z iskalno zahtevo"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "datotek spremenjenih"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "Vrstica št."; |
$lang["BLAMEFOR"] = "Blame informacije za različico"; |
//$lang["YEARS"] = "let"; |
//$lang["MONTHS"] = "mesecev"; |
//$lang["WEEKS"] = "tednov"; |
//$lang["DAYS"] = "dni"; |
//$lang["HOURS"] = "ur"; |
//$lang["MINUTES"] = "minute"; |
$lang["DAYLETTER"] = "d"; |
$lang["HOURLETTER"] = "h"; |
$lang["MINUTELETTER"] = "m"; |
$lang["SECONDLETTER"] = "s"; |
$lang["GO"] = "Izvedi"; |
$lang["PATHCOMPARISON"] = "Primerjava poti"; |
$lang["COMPAREPATHS"] = "Primerjaj poti"; |
$lang["COMPAREREVS"] = "Primerjaj različici"; |
$lang["PROPCHANGES"] = "Spremembe lastnosti :"; |
$lang["CONVFROM"] = "Ta primerjava prikazuje spremembe potrebne za pretvorbo poti "; |
$lang["TO"] = "V"; |
$lang["REVCOMP"] = "Reverzna primerjava"; |
$lang["COMPPATH"] = "Primerjaj pot:"; |
$lang["WITHPATH"] = "S potjo:"; |
$lang["FILEDELETED"] = "Datoteka pobrisana"; |
$lang["FILEADDED"] = "Nova datoteka"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/spanish.inc |
---|
0,0 → 1,116 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// spanish.inc |
// |
// Spanish language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Spanish"; |
$lang['LANGUAGETAG'] = 'es'; |
$lang["LOG"] = "Log"; |
$lang["DIFF"] = "Diff"; |
$lang["NOREP"] = "No se especificó un repositorio"; |
$lang["NOPATH"] = "Ruta no encontrada"; |
$lang["SUPPLYREP"] = "Por Favor, configure una ruta a un repositorio en include/config.inc usando \$config->parentPath o \$config->addRepository<p>Verifique la guía de instalación para mas detalles"; |
$lang["DIFFREVS"] = "Diff entre versiones"; |
$lang["AND"] = "y"; |
$lang["REV"] = "Rev"; |
$lang["LINE"] = "Línea"; |
$lang["SHOWENTIREFILE"] = "Mostrar el archivo completo"; |
$lang["SHOWCOMPACT"] = "Solo mostrar áreas con diferencias"; |
$lang["DIFFPREV"] = "Comparar con el anterior"; |
$lang["BLAME"] = "Autoría"; |
$lang["REVINFO"] = "Información sobre la revisión"; |
$lang["GOYOUNGEST"] = "Ir a la última revisión"; |
$lang["LASTMOD"] = "Ultima modificación"; |
$lang["LOGMSG"] = "Mensaje de Log"; |
$lang["CHANGES"] = "Cambios"; |
$lang["SHOWCHANGED"] = "Mostrar archivos modificados"; |
$lang["HIDECHANGED"] = "Ocultar archivos modificados"; |
$lang["NEWFILES"] = "Archivos Nuevos"; |
$lang["CHANGEDFILES"] = "Archivos modificados"; |
$lang["DELETEDFILES"] = "Archivos borrados"; |
$lang["VIEWLOG"] = "Ver Log"; |
$lang["PATH"] = "Ruta"; |
$lang["AUTHOR"] = "Autor"; |
$lang["AGE"] = "Antigüedad"; |
$lang["LOG"] = "Log"; |
$lang["CURDIR"] = "Directorio Actual"; |
$lang["TARBALL"] = "Tarball"; |
$lang["PREV"] = "Ant"; |
$lang["NEXT"] = "Sig"; |
$lang["SHOWALL"] = "Mostrar todo"; |
$lang["BADCMD"] = "Error ejecutando ese comando"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Proyectos de Subversion"; |
$lang["SERVER"] = "Servidor de Subversion"; |
$lang["SEARCHLOG"] = "Buscar en el log"; |
$lang["CLEARLOG"] = "Limpiar la búsqueda actual"; |
$lang["MORERESULTS"] = "Buscar mas coincidencias"; |
$lang["NORESULTS"] = "Ningún log coincide con su búsqueda"; |
$lang["NOMORERESULTS"] = "No hay mas logs que coincidan con su búsqueda"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "Archivo(s) modificados"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "Línea Nro."; |
$lang["BLAMEFOR"] = "Información de culpa para rev"; |
$lang["YEARS"] = "Años"; |
$lang["MONTHS"] = "meses"; |
$lang["WEEKS"] = "semanas"; |
$lang["DAYS"] = "días"; |
$lang["HOURS"] = "horas"; |
$lang["MINUTES"] = "minutos"; |
$lang["GO"] = "Ir"; |
$lang["PATHCOMPARISON"] = "Comparación de rutas"; |
$lang["COMPAREPATHS"] = "Comparar Rutas"; |
$lang["COMPAREREVS"] = "Comparar Revisiones"; |
$lang["PROPCHANGES"] = "Cambios de propiedades :"; |
$lang["CONVFROM"] = "Esta Comparación muestra los cambios necesarios para convertir la ruta"; |
$lang["TO"] = "a"; |
$lang["REVCOMP"] = "Revertir comparación"; |
$lang["COMPPATH"] = "Comparar Ruta:"; |
$lang["WITHPATH"] = "Con Ruta:"; |
$lang["FILEDELETED"] = "Archivo Eliminado"; |
$lang["FILEADDED"] = "Archivo Nuevo"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/swedish.inc |
---|
0,0 → 1,118 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// swedish.inc |
// |
// Swedish language strings |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Swedish"; |
$lang['LANGUAGETAG'] = 'sv'; |
$lang["LOG"] = "Logg"; |
$lang["DIFF"] = "Skillnad"; |
$lang["NOREP"] = "Inget arkiv angivet"; //repository |
$lang["NOPATH"] = "Sökvägen saknas"; |
$lang["SUPPLYREP"] = "Vänligen sätt upp en söväg till arkivet i include/config.inc med \$config->parentPath eller \$config->addRepository<p>Se installationsanvisningen för mer detaljer"; |
$lang["DIFFREVS"] = "Skillnad mellan rev."; |
$lang["AND"] = "och"; |
$lang["REV"] = "Rev"; |
$lang["LINE"] = "Rad"; |
$lang["SHOWENTIREFILE"] = "Visa hela filen"; |
$lang["SHOWCOMPACT"] = "Visa bara områden med skillnader"; |
$lang["DIFFPREV"] = "Skillnad mot föregående"; |
$lang["BLAME"] = "Ansvarig"; |
$lang["REVINFO"] = "Revisionsinformation"; |
$lang["GOYOUNGEST"] = "Gå till senaste revision"; |
$lang["LASTMOD"] = "Senast ändrad"; |
$lang["LOGMSG"] = "Loggmeddelande"; |
$lang["CHANGES"] = "ändringar"; |
$lang["SHOWCHANGED"] = "Visa ändrade filer"; |
$lang["HIDECHANGED"] = "Göm ändrade filer"; |
$lang["NEWFILES"] = "Nya filer"; |
$lang["CHANGEDFILES"] = "Ändrade filer"; |
$lang["DELETEDFILES"] = "Raderade filer"; |
$lang["VIEWLOG"] = "Visa Logg"; |
$lang["PATH"] = "Sökväg"; |
$lang["AUTHOR"] = "Författare"; |
$lang["AGE"] = "Ålder"; |
$lang["LOG"] = "Logg"; |
$lang["CURDIR"] = "Nuvarande folder"; |
$lang["TARBALL"] = "Tarball"; |
$lang["PREV"] = "Föreg."; |
$lang["NEXT"] = "Nästa"; |
$lang["SHOWALL"] = "Visa alla"; |
$lang["BADCMD"] = "Fel vid körning av kommande"; |
$lang["POWERED"] = "Powered by <a href=\"http://websvn.tigris.org/\">WebSVN</a>"; |
$lang["PROJECTS"] = "Subversion Projekt"; |
$lang["SERVER"] = "Subversion Server"; |
$lang["SEARCHLOG"] = "Sök i logg efter"; |
$lang["CLEARLOG"] = "Rensa nuvarande sökning"; |
$lang["MORERESULTS"] = "Hitta fler träffar..."; |
$lang["NORESULTS"] = "Det finns ingen logg som motsvarar din sökning"; |
$lang["NOMORERESULTS"] = "Det finns inga fler loggar i din sökning"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "fil(er) ändrade"; |
$lang["RSSFEED"] = "RSS"; |
$lang["LINENO"] = "Radnr."; |
$lang["BLAMEFOR"] = "Ansvariginformation för rev"; |
$lang["YEARS"] = "år"; |
$lang["MONTHS"] = "månader"; |
$lang["WEEKS"] = "veckor"; |
$lang["DAYS"] = "dagar"; |
$lang["HOURS"] = "timmar"; |
$lang["MINUTES"] = "minuter"; |
$lang["GO"] = "Utför"; |
$lang["PATHCOMPARISON"] = "Sökvägsjämförelse"; |
$lang["COMPAREPATHS"] = "Jämför sökvägar"; |
$lang["COMPAREREVS"] = "Jämför revisioner"; |
$lang["PROPCHANGES"] = "Egenskapsändringar :"; |
$lang["CONVFROM"] = "Denna jämförelse visar ändringarna som behövs för att konvertera sökväg "; |
$lang["TO"] = "till"; |
$lang["REVCOMP"] = "Växla jämförelse"; |
$lang["COMPPATH"] = "Jämför sökväg:"; |
$lang["WITHPATH"] = "Med sökväg:"; |
$lang["FILEDELETED"] = "Filen raderad"; |
$lang["FILEADDED"] = "Ny fil"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/languages/NotUsed/tchinese.inc |
---|
0,0 → 1,111 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// tchinese.inc |
// |
// Traditional Chinese language strings |
// |
// Author: Yuan-Chung Hsiao <ychsiao@ychsiao.idv.tw> |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Traditional Chinese"; |
$lang['LANGUAGETAG'] = 'zh-TW'; |
$lang["LOG"] = "歷史記錄"; |
$lang["DIFF"] = "比對"; |
$lang["NOREP"] = "沒有檔案庫"; |
$lang["NOPATH"] = "找不到路徑"; |
$lang["SUPPLYREP"] = "請在include/config.inc中設定檔案庫位置為 \$config->parentPath 或 \$config->addRepository<p>更詳細的內容請見安裝手冊"; |
$lang["DIFFREVS"] = "不同版本間的差異"; |
$lang["AND"] = "與"; |
$lang["REV"] = "修訂版號"; |
$lang["LINE"] = "行"; |
$lang["SHOWALL"] = "顯示完整的檔案"; |
$lang["SHOWCOMPACT"] = "只顯示不同處"; |
$lang["DIFFPREV"] = "與前一版次比較"; |
$lang["BLAME"] = "譴責"; |
$lang["REVINFO"] = "修訂版次資訊"; |
$lang["GOYOUNGEST"] = "到最新的修訂"; |
$lang["LASTMOD"] = "最後更動"; |
$lang["LOGMSG"] = "訊息記錄"; |
$lang["CHANGES"] = "改變"; |
$lang["SHOWCHANGED"] = "顯示已變動檔案"; |
$lang["HIDECHANGED"] = "隱藏已變動檔案"; |
$lang["NEWFILES"] = "新檔案"; |
$lang["CHANGEDFILES"] = "已變動檔案"; |
$lang["DELETEDFILES"] = "已刪除檔案"; |
$lang["VIEWLOG"] = "看歷史記錄"; |
$lang["PATH"] = "路徑"; |
$lang["AUTHOR"] = "作者"; |
$lang["AGE"] = "更動時間"; |
$lang["LOG"] = "歷史記錄"; |
$lang["CURDIR"] = "目前目錄"; |
$lang["TARBALL"] = "Tarball 格式"; |
$lang["PREV"] = "上一筆"; |
$lang["NEXT"] = "下一筆"; |
$lang["SHOWALL"] = "顯示全部"; |
$lang["BADCMD"] = "執行錯誤"; |
$lang["POWERED"] = "採用 <a href=\"http://websvn.tigris.org/\">WebSVN</a>架設"; |
$lang["PROJECTS"] = "Subversion 專案"; |
$lang["SERVER"] = "Subversion Server"; |
$lang["SEARCHLOG"] = "搜尋記錄內容"; |
$lang["CLEARLOG"] = "清除目前搜尋"; |
$lang["MORERESULTS"] = "找到更多的符合的..."; |
$lang["NORESULTS"] = "查詢結果並沒有符合的紀錄"; |
$lang["NOMORERESULTS"] = "沒有更多紀錄符合你的查詢"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS feed"; |
$lang["FILESMODIFIED"] = "個檔案變動"; |
$lang["RSSFEED"] = "RSS feed"; |
$lang["LINENO"] = "行"; |
$lang["BLAMEFOR"] = "版本譴責資訊"; |
$lang["YEARS"] = "年前"; |
$lang["MONTHS"] = "月前"; |
$lang["WEEKS"] = "週前"; |
$lang["DAYS"] = "日前"; |
$lang["HOURS"] = "小時前"; |
$lang["MINUTES"] = "分鐘前"; |
$lang["GO"] = "到"; |
$lang["COMPAREPATHS"] = "比對路徑"; |
$lang["COMPAREREVS"] = "比對修訂版"; |
$lang["PROPCHANGES"] = "改變屬性 :"; |
$lang["CONVFROM"] = "這個比對顯示必需改變轉換路徑"; |
$lang["TO"] = "到"; |
$lang["REVCOMP"] = "顛倒比對"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
/WebSVN/languages/NotUsed/turkish.inc |
---|
0,0 → 1,117 |
<?php |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004 Tim Armes |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// turkish.inc |
// |
// Turkish language strings |
// by Barış Metin <baris@uludag.org.tr> |
// The language name is displayed in the drop down box. It MUST be encoded as Unicode (no HTML entities). |
$lang["LANGUAGENAME"] = "Turkish"; |
$lang['LANGUAGETAG'] = 'tr'; |
$lang["LOG"] = "Kayıt"; |
$lang["DIFF"] = "Fark"; |
$lang["NOREP"] = "Bir depo tanımlanmadı"; |
$lang["NOPATH"] = "Patika bulunamadı"; |
$lang["SUPPLYREP"] = "Lütfen, include/config.inc dosyasında \$config->parentPath ya da \$config->addRepository değerlerini kullanarak bir depo yolu belirtin<p>Daha fazla bilgi için kurulum kılavuzuna bakın"; |
$lang["DIFFREVS"] = "Sürümler arası fark"; |
$lang["AND"] = "ve"; |
$lang["REV"] = "Sürüm"; |
$lang["LINE"] = "Satır"; |
$lang["SHOWENTIREFILE"] = "Tüm dosyayı göster"; |
$lang["SHOWCOMPACT"] = "Yalnızca değişen bölümleri göster"; |
$lang["DIFFPREV"] = "Önceki ile karşılaştır"; |
$lang["BLAME"] = "svn blame"; |
$lang["REVINFO"] = "Sürüm Bilgisi"; |
$lang["GOYOUNGEST"] = "En güncel sürüme git"; |
$lang["LASTMOD"] = "Son değişiklik"; |
$lang["LOGMSG"] = "Kayıt mesajı"; |
$lang["CHANGES"] = "Değişiklikler"; |
$lang["SHOWCHANGED"] = "Değişen dosyaları göster"; |
$lang["HIDECHANGED"] = "Değişen dosyaları gizle"; |
$lang["NEWFILES"] = "Yeni Dosyalar"; |
$lang["CHANGEDFILES"] = "Değişen dosyalar"; |
$lang["DELETEDFILES"] = "Silinen dosyalar"; |
$lang["VIEWLOG"] = "Kayıt Mesajını Göster"; |
$lang["PATH"] = "Patika"; |
$lang["AUTHOR"] = "Yazar"; |
$lang["AGE"] = "Yaş"; |
$lang["LOG"] = "Kayıt"; |
$lang["CURDIR"] = "Şimdiki Dizin"; |
$lang["TARBALL"] = "Tar dosyası"; |
$lang["PREV"] = "Önceki"; |
$lang["NEXT"] = "Sonraki"; |
$lang["SHOWALL"] = "Tümünü Göster"; |
$lang["BADCMD"] = "Bu komut çalıştırılırken hata oluştu"; |
$lang["POWERED"] = "<a href=\"http://websvn.tigris.org/\">WebSVN</a> tarafından çalıştırılmaktadır"; |
$lang["PROJECTS"] = "Subversion Projeleri"; |
$lang["SERVER"] = "Subversion Sunucusu"; |
$lang["SEARCHLOG"] = "Kayıtlarda ara"; |
$lang["CLEARLOG"] = "Mevcut aramayı iptal et"; |
$lang["MORERESULTS"] = "Daha fazla eşleştirmeyi bul..."; |
$lang["NORESULTS"] = "Aramaya uyan kayıt mesajı yok"; |
$lang["NOMORERESULTS"] = "Aramaya uyan başka kayıt mesajı yok"; |
$lang["RSSFEEDTITLE"] = "WebSVN RSS kaynağı"; |
$lang["FILESMODIFIED"] = "dosya değişti"; |
$lang["RSSFEED"] = "RSS kaynağı"; |
$lang["LINENO"] = "Satır No."; |
$lang["BLAMEFOR"] = "svn blame bilgisi alınan sürüm numarası"; |
$lang["YEARS"] = "yıl"; |
$lang["MONTHS"] = "ay"; |
$lang["WEEKS"] = "hafta"; |
$lang["DAYS"] = "gün"; |
$lang["HOURS"] = "saat"; |
$lang["MINUTES"] = "dakika"; |
$lang["GO"] = "Git"; |
$lang["PATHCOMPARISON"] = "Patika karşılaştırması"; |
$lang["COMPAREPATHS"] = "Patikaları karşılaştır"; |
$lang["COMPAREREVS"] = "Sürümleri karşışaştır"; |
$lang["PROPCHANGES"] = "Özellik değişiklikleri :"; |
$lang["CONVFROM"] = "Bu karşılaştırma patikayı dönüştürmek için gerekli olan değişikliği gösterir "; |
$lang["TO"] = "TO"; |
$lang["REVCOMP"] = "Geriye doğru karşılaştır"; |
$lang["COMPPATH"] = "Patikaları karşılaştır:"; |
$lang["WITHPATH"] = "Patika ile:"; |
$lang["FILEDELETED"] = "Dosya silinmiş"; |
$lang["FILEADDED"] = "Yeni dosya"; |
// The following are defined by some languages to stop unwanted line splitting |
// in the template files. |
$lang["NOBR"] = ""; |
$lang["ENDNOBR"] = ""; |
// $lang["NOBR"] = "<nobr>"; |
// $lang["ENDNOBR"] = "</nobr>"; |
/WebSVN/listing.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
22,11 → 24,11 |
// |
// Show the listing for the given repository/path/revision |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/utils.php'; |
require_once 'include/template.php'; |
require_once 'include/bugtraq.php'; |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
require_once("include/utils.inc"); |
require_once("include/template.inc"); |
require_once("include/bugtraq.inc"); |
function removeURLSeparator($url) |
{ |
33,482 → 35,286 |
return preg_replace('#(\?|&(amp;)?)$#', '', $url); |
} |
function urlForPath($fullpath, $passRevString) |
function fileLink($path, $file, $returnjoin = false) |
{ |
global $config, $rep; |
global $rep, $passrev, $showchanged, $config; |
$isDir = $fullpath[strlen($fullpath) - 1] == '/'; |
if ($path == "" || $path{0} != "/") |
$ppath = "/".$path; |
else |
$ppath = $path; |
if ($isDir) |
{ |
if ($config->treeView) |
{ |
$url = $config->getURL($rep, $fullpath, 'dir').$passRevString; |
$id = anchorForPath($fullpath); |
$url .= '#'.$id.'" id="'.$id; |
} |
if ($ppath{strlen($ppath)-1} != "/") |
$ppath .= "/"; |
if ($file{0} == "/") |
$pfile = substr($file, 1); |
else |
{ |
$url = $config->getURL($rep, $fullpath, 'dir').$passRevString; |
} |
} |
else |
{ |
$url = $config->getURL($rep, $fullpath, 'file').$passRevString; |
} |
return removeURLSeparator($url); |
} |
$pfile = $file; |
function showDirFiles($svnrep, $subs, $level, $limit, $rev, $peg, $listing, $index, $treeview = true) |
{ |
global $config, $lang, $rep, $passrev, $peg, $passRevString; |
if ($returnjoin) |
return $ppath.$pfile; |
$path = ''; |
$isDir = $pfile{strlen($pfile) - 1} == "/"; |
if (!$treeview) |
{ |
$level = $limit; |
} |
if ($passrev) $passrevstr = "rev=$passrev&"; else $passrevstr = ""; |
if ($showchanged) $showchangedstr = "sc=$showchanged"; else $showchangedstr = ""; |
// TODO: Fix node links to use the path and number of peg revision (if exists) |
// This applies to file detail, log, and RSS -- leave the download link as-is |
for ($n = 0; $n <= $level; $n++) |
if ($isDir) |
{ |
$path .= $subs[$n].'/'; |
} |
$url = $config->getURL($rep, $ppath.$pfile, "dir"); |
// List each file in the current directory |
$loop = 0; |
$last_index = 0; |
$accessToThisDir = $rep->hasReadAccess($path, false); |
// XHTML doesn't allow slashes in IDs ~J |
$id = str_replace('/', '_', $ppath.$pfile); |
$url = "<a id='$id' href=\"${url}$passrevstr$showchangedstr"; |
// If using flat view and not at the root, create a '..' entry at the top. |
if (!$treeview && count($subs) > 2) |
{ |
$parentPath = $subs; |
unset($parentPath[count($parentPath) - 2]); |
$parentPath = implode('/', $parentPath); |
if ($rep->hasReadAccess($parentPath, false)) |
{ |
$listvar = &$listing[$index]; |
$listvar['rowparity'] = $index % 2; |
$listvar['path'] = str_replace('%2F', '/', rawurlencode($parentPath)); |
$listvar['filetype'] = 'dir'; |
$listvar['filename'] = '..'; |
$listvar['fileurl'] = urlForPath($parentPath, $passRevString); |
$listvar['filelink'] = '<a href="'.$listvar['fileurl'].'">'.$listvar['filename'].'</a>'; |
$listvar['level'] = 0; |
$listvar['node'] = 0; // t-node |
$listvar['revision'] = $rev; |
$listvar['revurl'] = $config->getURL($rep, $parentPath, 'revision').'rev='.$rev.'&isdir=1'; |
global $vars; |
$listvar['date'] = $vars['date']; |
$listvar['age'] = datetimeFormatDuration(time() - strtotime($vars['date']), true, true); |
$index++; |
$url = removeURLSeparator($url); |
if ($config->treeView) $url .= "#$id"; |
$url .= "\">$pfile</a>"; |
} |
} |
$openDir = false; |
$logList = $svnrep->getList($path, $rev, $peg); |
if (!$logList) |
else |
{ |
return $listing; |
$url = $config->getURL($rep, $ppath.$pfile, "file"); |
$url .= $passrevstr.$showchangedstr; |
$url = removeURLSeparator($url); |
$url = "<a href=\"${url}\">$pfile</a>"; |
} |
$downloadRevAndPeg = createRevAndPegString($rev, $peg ? $peg : $rev); |
foreach ($logList->entries as $entry) |
{ |
$isDir = $entry->isdir; |
if (!$isDir && $level != $limit) |
{ |
continue; // Skip any files outside the current directory |
return $url; |
} |
$file = $entry->file; |
$isDirString = ($isDir) ? 'isdir=1&' : ''; |
// Only list files/directories that are not designated as off-limits |
$access = ($isDir) ? $rep->hasReadAccess($path.$file, false) |
: $accessToThisDir; |
if (!$access) |
function fileLinkGetFile($path, $file) |
{ |
continue; |
} |
global $rep, $passrev, $showchanged, $config; |
$listvar = &$listing[$index]; |
$listvar['rowparity'] = $index % 2; |
if ($isDir) |
{ |
$openDir = isset($subs[$level + 1]) && (!strcmp($subs[$level + 1].'/', $file) || !strcmp($subs[$level + 1], $file)); |
$listvar['filetype'] = ($openDir) ? 'diropen' : 'dir'; |
} |
if ($path == "" || $path{0} != "/") |
$ppath = "/".$path; |
else |
{ |
$openDir = false; |
$listvar['filetype'] = strtolower(strrchr($file, '.')); |
} |
$ppath = $path; |
$listvar['isDir'] = $isDir; |
$listvar['openDir'] = $openDir; |
$listvar['level'] = ($treeview) ? $level : 0; |
$listvar['node'] = 0; // t-node |
$listvar['path'] = str_replace('%2F', '/', rawurlencode($path.$file)); |
$listvar['filename'] = escape($file); |
if ($ppath{strlen($ppath)-1} != "/") |
$ppath .= "/"; |
if ($isDir) |
{ |
$listvar['fileurl'] = urlForPath($path.$file, $passRevString); |
} |
if ($file{0} == "/") |
$pfile = substr($file, 1); |
else |
{ |
$listvar['fileurl'] = urlForPath($path.$file, createDifferentRevAndPegString($passrev, $peg)); |
} |
$pfile = $file; |
$listvar['filelink'] = '<a href="'.$listvar['fileurl'].'">'.$listvar['filename'].'</a>'; |
$isDir = $pfile{strlen($pfile) - 1} == "/"; |
if ($isDir) |
if (!$isDir) |
{ |
$listvar['logurl'] = $config->getURL($rep, $path.$file, 'log').$isDirString.$passRevString; |
$url = $config->getURL($rep, $ppath.$pfile, "file"); |
$url = removeURLSeparator($url); |
$url = "<a href=\"${url}&getfile\">Get</a>"; |
} |
else |
{ |
$listvar['logurl'] = $config->getURL($rep, $path.$file, 'log').$isDirString.createDifferentRevAndPegString($passrev, $peg); |
} |
if ($treeview) |
{ |
$listvar['compare_box'] = '<input type="checkbox" name="compare[]" value="'.escape($path.$file).'@'.$passrev.'" onclick="enforceOnlyTwoChecked(this)" />'; |
return $url; |
} |
if ($config->showLastModInListing()) |
function showDirFiles($svnrep, $subs, $level, $limit, $rev, $listing, $index, $treeview = true) |
{ |
$listvar['committime'] = $entry->committime; |
$listvar['revision'] = $entry->rev; |
$listvar['author'] = $entry->author; |
$listvar['age'] = $entry->age; |
$listvar['date'] = $entry->date; |
$listvar['revurl'] = $config->getURL($rep, $path.$file, 'revision').$isDirString.createRevAndPegString($entry->rev, $peg ? $peg : $rev); |
} |
global $rep, $passrev, $showchanged, $config, $lang; |
if ($rep->isDownloadAllowed($path.$file)) |
{ |
$downloadurl = $config->getURL($rep, $path.$file, 'dl').$isDirString.$downloadRevAndPeg; |
$path = ""; |
if ($isDir) |
// Explicitly requested file as attachment |
if (isset($_REQUEST['getfile'])) |
{ |
$listvar['downloadurl'] = $downloadurl; |
$listvar['downloadplainurl'] = ''; |
} |
else |
{ |
$listvar['downloadplainurl'] = $downloadurl; |
$listvar['downloadurl'] = ''; |
} |
} |
else |
{ |
$listvar['downloadplainurl'] = ''; |
$listvar['downloadurl'] = ''; |
} |
$base = basename($path); |
if ($rep->isRssEnabled()) |
{ |
// RSS should always point to the latest revision, so don't include rev |
$listvar['rssurl'] = $config->getURL($rep, $path.$file, 'rss').$isDirString.createRevAndPegString('', $peg); |
} |
header("Content-Type: application/octet-stream"); |
header("Content-Length: $size"); |
header("Content-Disposition: inline; filename=".urlencode($base)); |
$loop++; |
$index++; |
$last_index = $index; |
$svnrep->getFileContents($path, "", $rev); |
if ($isDir && ($level != $limit)) |
{ |
// @todo remove the alternate check with htmlentities when assured that there are not side effects |
if (isset($subs[$level + 1]) && (!strcmp($subs[$level + 1].'/', $file) || !strcmp(htmlentities($subs[$level + 1], ENT_QUOTES).'/', htmlentities($file)))) |
{ |
$listing = showDirFiles($svnrep, $subs, $level + 1, $limit, $rev, $peg, $listing, $index); |
$index = count($listing); |
exit; |
} |
} |
} |
// For an expanded tree, give the last entry an "L" node to close the grouping |
if ($treeview && $last_index != 0) |
if (!$treeview) |
$level = $limit; |
for ($n = 0; $n <= $level; $n++) |
{ |
$listing[$last_index - 1]['node'] = 1; // l-node |
$path .= $subs[$n]."/"; |
} |
return $listing; |
} |
$contents = $svnrep->dirContents($path, $rev); |
function showAllDirFiles($svnrep, $path, $rev, $peg, $listing, $index, $treeView = true) |
{ |
global $config, $lang, $rep, $passrev, $peg, $passRevString; |
// List each file in the current directory |
$loop = 0; |
$last_index = 0; |
$accessToThisDir = $rep->hasReadAccess($path, false); |
// If using flat view and not at the root, create a '..' entry at the top. |
if (!$treeView && count($subs) > 2) |
{ |
$parentPath = $subs; |
unset($parentPath[count($parentPath) - 2]); |
$parentPath = implode('/', $parentPath); |
if ($rep->hasReadAccess($parentPath, false)) |
{ |
$listvar = &$listing[$index]; |
$listvar['rowparity'] = $index % 2; |
$listvar['path'] = str_replace('%2F', '/', rawurlencode($parentPath)); |
$listvar['filetype'] = 'dir'; |
$listvar['filename'] = '..'; |
$listvar['fileurl'] = urlForPath($parentPath, $passRevString); |
$listvar['filelink'] = '<a href="'.$listvar['fileurl'].'">'.$listvar['filename'].'</a>'; |
$listvar['level'] = 0; |
$listvar['node'] = 0; // t-node |
$listvar['revision'] = $rev; |
$listvar['revurl'] = $config->getURL($rep, $parentPath, 'revision').'rev='.$rev.'&isdir=1'; |
global $vars; |
$listvar['date'] = $vars['date']; |
$listvar['age'] = datetimeFormatDuration(time() - strtotime($vars['date']), true, true); |
$index++; |
} |
} |
$openDir = false; |
$logList = $svnrep->getList($path, $rev, $peg); |
$fullaccess = $rep->hasReadAccess($path, false); |
if (!$logList) |
foreach($contents as $file) |
{ |
return $listing; |
} |
$isDir = ($file{strlen($file) - 1} == "/"?1:0); |
$access = false; |
$downloadRevAndPeg = createRevAndPegString($rev, $peg ? $peg : $rev); |
foreach ($logList->entries as $entry) |
if ($isDir) |
{ |
$isDir = $entry->isdir; |
$file = $entry->file; |
$isDirString = ($isDir) ? 'isdir=1&' : ''; |
// Only list files/directories that are not designated as off-limits |
$access = ($isDir) ? $rep->hasReadAccess($path.$file, false) |
: $accessToThisDir; |
if (!$access) |
if ($rep->hasReadAccess($path.$file, true)) |
{ |
continue; |
} |
$access = true; |
$openDir = (!strcmp($subs[$level+1]."/", $file) || !strcmp($subs[$level+1], $file)); |
$listvar = &$listing[$index]; |
$listvar['rowparity'] = $index % 2; |
if ($openDir) |
$listing[$index]["filetype"] = "diropen"; |
else |
$listing[$index]["filetype"] = "dir"; |
if ($isDir) |
if ($rep->isDownloadAllowed($path.$file)) |
{ |
$listvar['filetype'] = 'dir'; |
$openDir = true; |
$dlurl = $config->getURL($rep, $path.$file, "dl"); |
$listing[$index]["fileviewdllink"] = "<a href=\"${dlurl}rev=$passrev&isdir=1\">${lang["TARBALL"]}</a>"; |
} |
else |
{ |
$listvar['filetype'] = strtolower(strrchr($file, '.')); |
$openDir = false; |
$listing[$index]["fileviewdllink"] = " "; |
} |
$listvar['isDir'] = $isDir; |
$listvar['openDir'] = $openDir; |
$listvar['path'] = str_replace('%2F', '/', rawurlencode($path.$file)); |
$tempelements = explode('/',$file); |
if ($tempelements[count($tempelements)-1] === "") |
{ |
$lastindexfile = count($tempelements)-1 - 1; |
$listvar['node'] = $lastindexfile; // t-node |
$listvar['level'] = ($treeView) ? $lastindexfile : 0; |
$listvar['filename'] = escape($tempelements[$lastindexfile]); |
$listvar['classname'] = ''; |
for ($n = 0; $n < $lastindexfile; ++$n) |
{ |
$listvar['last_i_node'][$n] = false; |
$listvar['classname'] = $listvar['classname'].$tempelements[$n].'/'; |
} |
$listvar['classname'] = $listvar['classname'].$tempelements[$lastindexfile]; |
$listvar['last_i_node'][$lastindexfile] = true; |
} |
else |
{ |
$lastindexfile = count($tempelements)-1; |
$listvar['node'] = $lastindexfile; // t-node |
$listvar['level'] = ($treeView) ? $lastindexfile : 0; |
$listvar['filename'] = escape($tempelements[$lastindexfile]); |
$listvar['classname'] = ''; |
for ($n=0; $n < $lastindexfile; ++$n) |
if ($fullaccess) |
{ |
$listvar['last_i_node'][$n] = false; |
$listvar['classname'] = $listvar['classname'].$tempelements[$n].'/'; |
$access = true; |
if ($level != $limit) |
{ |
// List directories only, skip all files |
continue; |
} |
$listvar['last_i_node'][$lastindexfile] = true; |
$listing[$index]["fileviewdllink"] = " "; |
$listing[$index]["filetype"] = strrchr($file, "."); |
} |
} |
if ($isDir) |
if ($access) |
{ |
$listvar['fileurl'] = urlForPath($path.$file, $passRevString); |
} |
$listing[$index]["rowparity"] = ($index % 2)?"L1":"L0"; |
if ($treeview) |
$listing[$index]["compare_box"] = "<input type=\"checkbox\" name=\"compare[]\" value=\"".fileLink($path, $file, true)."@$passrev\" onclick=\"checkCB(this)\" />"; |
else |
{ |
$listvar['fileurl'] = urlForPath($path.$file, createDifferentRevAndPegString($passrev, $peg)); |
} |
$listing[$index]["compare_box"] = ""; |
$listvar['filelink'] = '<a href="'.$listvar['fileurl'].'">'.$listvar['filename'].'</a>'; |
if ($openDir) |
$listing[$index]["filelink"] = "<b>".fileLink($path, $file)."</b>"; |
else |
$listing[$index]["filelink"] = fileLink($path, $file); |
if ($isDir) |
{ |
$listvar['logurl'] = $config->getURL($rep, $path.$file, 'log').$isDirString.$passRevString; |
} |
$listing[$index]["filelinkgetfile"] = ""; |
else |
{ |
$listvar['logurl'] = $config->getURL($rep, $path.$file, 'log').$isDirString.createDifferentRevAndPegString($passrev, $peg); |
} |
$listing[$index]["filelinkgetfile"] = fileLinkGetFile($path, $file); |
if ($treeView) |
{ |
$listvar['compare_box'] = '<input type="checkbox" name="compare[]" value="'.escape($path.$file).'@'.$passrev.'" onclick="enforceOnlyTwoChecked(this)" />'; |
} |
// The history command doesn't return with a trailing slash. We need to remember here if the |
// file is a directory or not! |
if ($config->showLastModInListing()) |
$listing[$index]["isDir"] = $isDir; |
if ($treeview) |
$listing[$index]["level"] = $level; |
else |
$listing[$index]["level"] = 0; |
$listing[$index]["node"] = 0; // t-node |
$fileurl = $config->getURL($rep, $path.$file, "log"); |
$listing[$index]["fileviewloglink"] = "<a href=\"${fileurl}rev=$passrev&sc=$showchanged&isdir=$isDir\">${lang["VIEWLOG"]}</a>"; |
$rssurl = $config->getURL($rep, $path.$file, "rss"); |
if ($rep->getHideRss()) |
{ |
$listvar['committime'] = $entry->committime; |
$listvar['revision'] = $entry->rev; |
$listvar['author'] = $entry->author; |
$listvar['age'] = $entry->age; |
$listvar['date'] = $entry->date; |
$listvar['revurl'] = $config->getURL($rep, $path.$file, 'revision').$isDirString.createRevAndPegString($entry->rev, $peg ? $peg : $rev); |
$listing[$index]["rsslink"] = "<a href=\"${rssurl}rev=$passrev&sc=$showchanged&isdir=$isDir\">${lang["RSSFEED"]}</a>"; |
$listing[$index]["rssanchor"] = "<a href=\"${rssurl}rev=$passrev&sc=$showchanged&isdir=$isDir\">"; |
} |
if ($rep->isDownloadAllowed($path.$file)) |
{ |
$downloadurl = $config->getURL($rep, $path.$file, 'dl').$isDirString.$downloadRevAndPeg; |
$index++; |
$loop++; |
$last_index = $index; |
if ($isDir) |
if (($level != $limit) && ($isDir)) |
{ |
$listvar['downloadurl'] = $downloadurl; |
$listvar['downloadplainurl'] = ''; |
} |
else |
if (!strcmp($subs[$level + 1]."/", $file)) |
{ |
$listvar['downloadplainurl'] = $downloadurl; |
$listvar['downloadurl'] = ''; |
$listing = showDirFiles($svnrep, $subs, $level + 1, $limit, $rev, $listing, $index); |
$index = count($listing); |
} |
} |
else |
{ |
$listvar['downloadplainurl'] = ''; |
$listvar['downloadurl'] = ''; |
} |
} |
if ($rep->isRssEnabled()) |
if ($last_index != 0 && $treeview) |
{ |
// RSS should always point to the latest revision, so don't include rev |
$listvar['rssurl'] = $config->getURL($rep, $path.$file, 'rss').$isDirString.createRevAndPegString('', $peg); |
$listing[$last_index - 1]["node"] = 1; // l-node |
} |
$loop++; |
$index++; |
$last_index = $index; |
} |
return $listing; |
} |
function showTreeDir($svnrep, $path, $rev, $peg, $listing) |
function showTreeDir($svnrep, $path, $rev, $listing) |
{ |
global $vars, $config; |
if ($config->showLoadAllRepos()) |
{ |
$vars['compare_box'] = ''; // Set blank once in case tree view is not enabled. |
return showAllDirFiles($svnrep, $path, $rev, $peg, $listing, 0, $config->treeView); |
} |
$subs = explode("/", $path); |
$subs = explode('/', $path); |
// The last element in "$subs" is empty for directories, some file name for files, but ALWAYS |
// exists as an additional element. Hence, "-2" is necessary. |
// |
// Additionally, level and limit are conceptually different things, first to e.g. start access |
// checks FROM, latter to process UNTIL. So don't merge those values too easily, especially as |
// both values needed to be different in some environments in the past for some unkown reason. |
// |
// https://github.com/websvnphp/websvn/issues/146#issuecomment-913353366 |
// For directory, the last element in the subs is empty. |
// For file, the last element in the subs is the file name. |
// Therefore, it is always count($subs) - 2 |
$limit = count($subs) - 2; |
$level = $limit; |
$level = $level <= 0 ? 0 : $level; |
for ($n = 0; $n < $limit; $n++) |
{ |
$vars['last_i_node'][$n] = false; |
$vars["last_i_node"][$n] = FALSE; |
} |
$vars['compare_box'] = ''; // Set blank once in case tree view is not enabled. |
return showDirFiles($svnrep, $subs, $level, $limit, $rev, $peg, $listing, 0, $config->treeView); |
return showDirFiles($svnrep, $subs, 0, $limit, $rev, $listing, 0, $config->treeView); |
} |
// Make sure that we have a repository |
if (!$rep) |
if (!isset($rep)) |
{ |
renderTemplate404('directory','NOREP'); |
echo $lang["NOREP"]; |
exit; |
} |
$svnrep = new SVNRepository($rep); |
if (!empty($rev)) |
{ |
$info = $svnrep->getInfo($path, $rev, $peg); |
// Revision info to pass along chain |
$passrev = $rev; |
if ($info) |
{ |
$path = $info->path; |
$peg = (int)$info->rev; |
} |
} |
// Get the directory contents of the given revision, or HEAD if not defined |
$contents = $svnrep->dirContents($path, @$rev); |
$history = $svnrep->getLog($path, 'HEAD', 1, false, 2, ($path == '/') ? '' : $peg); |
// If there's no revision info, go to the lastest revision for this path |
$history = $svnrep->getLog($path, "", "", false); |
if (!$history) |
{ |
unset($vars['error']); |
$history = $svnrep->getLog($path, '', '', false, 2, ($path == '/') ? '' : $peg); |
if (!empty($history->entries[0])) |
$youngest = $history->entries[0]->rev; |
else |
$youngest = -1; |
if (!$history) |
{ |
renderTemplate404('directory','NOPATH'); |
} |
} |
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : 0; |
// Unless otherwise specified, we get the log details of the latest change |
$lastChangedRev = ($passrev) ? $passrev : $youngest; |
if (empty($rev)) |
$logrev = $youngest; |
else |
$logrev = $rev; |
if ($lastChangedRev != $youngest) |
if ($logrev != $youngest) |
{ |
$history = $svnrep->getLog($path, $lastChangedRev, 1, false, 2, $peg); |
$logEntry = $svnrep->getLog($path, $logrev, $logrev, false); |
$logEntry = $logEntry->entries[0]; |
} |
else |
$logEntry = $history->entries[0]; |
$logEntry = ($history && isset($history->entries[0])) ? $history->entries[0] : 0; |
$headlog = $svnrep->getLog("/", "", "", true, 1); |
$headrev = $headlog->entries[0]->rev; |
$headlog = $svnrep->getLog('/', '', '', true, 1); |
$headrev = ($headlog && isset($headlog->entries[0])) ? $headlog->entries[0]->rev : 0; |
// If we're not looking at a specific revision, get the HEAD revision number |
// (the revision of the rest of the tree display) |
517,126 → 323,147 |
$rev = $headrev; |
} |
if ($path == '' || $path[0] != '/') |
{ |
$ppath = '/'.$path; |
} |
if ($path == "" || $path{0} != "/") |
$ppath = "/".$path; |
else |
{ |
$ppath = $path; |
} |
createPathLinks($rep, $ppath, $passrev, $peg); |
$passRevString = createRevAndPegString($passrev, $peg); |
$isDirString = 'isdir=1&'; |
$vars["repname"] = $rep->getDisplayName(); |
$revurl = $config->getURL($rep, $path != '/' ? $path : '', 'dir'); |
$revurlSuffix = $path != '/' ? '#'.anchorForPath($path) : ''; |
$dirurl = $config->getURL($rep, $path, "dir"); |
$logurl = $config->getURL($rep, $path, "log"); |
$rssurl = $config->getURL($rep, $path, "rss"); |
$dlurl = $config->getURL($rep, $path, "dl"); |
$compurl = $config->getURL($rep, "/", "comp"); |
if ($rev < $youngest) |
if ($passrev != 0 && $passrev != $headrev && $youngest != -1) |
$vars["goyoungestlink"] = "<a href=\"${dirurl}opt=dir&sc=1\">${lang["GOYOUNGEST"]}</a>"; |
else |
$vars["goyoungestlink"] = ""; |
$bugtraq = new Bugtraq($rep, $svnrep, $ppath); |
$vars["action"] = ""; |
$vars["rev"] = $rev; |
$vars["path"] = $ppath; |
$vars["lastchangedrev"] = $logrev; |
$vars["date"] = $logEntry->date; |
$vars["author"] = $logEntry->author; |
$vars["log"] = nl2br($bugtraq->replaceIDs(create_anchors($logEntry->msg))); |
if (!$showchanged) |
{ |
if ($path == '/') |
{ |
$vars['goyoungesturl'] = $config->getURL($rep, '', 'dir'); |
$vars["showchangeslink"] = "<a href=\"${dirurl}rev=$passrev&sc=1\">${lang["SHOWCHANGED"]}</a>"; |
$vars["hidechangeslink"] = ""; |
$vars["hidechanges"] = true; |
$vars["showchanges"] = false; |
} |
else |
{ |
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'dir').createRevAndPegString($youngest, $peg ? $peg: $rev).$revurlSuffix; |
} |
$vars["showchangeslink"] = ""; |
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>'; |
$changes = $logEntry->mods; |
$history2 = $svnrep->getLog($path, $rev, $youngest, true, 2, $peg); |
$firstAdded = true; |
$firstModded = true; |
$firstDeleted = true; |
if (isset($history2->entries[1])) |
$vars["newfilesbr"] = ""; |
$vars["newfiles"] = ""; |
$vars["changedfilesbr"] = ""; |
$vars["changedfiles"] = ""; |
$vars["deletedfilesbr"] = ""; |
$vars["deletedfiles"] = ""; |
foreach ($changes as $file) |
{ |
$nextRev = $history2->entries[1]->rev; |
if ($nextRev != $youngest) |
switch ($file->action) |
{ |
$vars['nextrev'] = $nextRev; |
$vars['nextrevurl'] = $revurl.createRevAndPegString($nextRev, $peg).$revurlSuffix; |
case "A": |
if (!$firstAdded) $vars["newfilesbr"] .= "<br />"; |
$firstAdded = false; |
$vars["newfilesbr"] .= fileLink("", $file->path); |
$vars["newfiles"] .= " ".fileLink("", $file->path); |
break; |
case "M": |
if (!$firstModded) $vars["changedfilesbr"] .= "<br />"; |
$firstModded = false; |
$vars["changedfilesbr"] .= fileLink("", $file->path); |
$vars["changedfiles"] .= " ".fileLink("", $file->path); |
break; |
case "D": |
if (!$firstDeleted) $vars["deletedfilesbr"] .= "<br />"; |
$firstDeleted = false; |
$vars["deletedfilesbr"] .= $file->path; |
$vars["deletedfiles"] .= " ".$file->path; |
break; |
} |
} |
unset($vars['error']); |
} |
$vars["hidechangeslink"] = "<a href=\"${dirurl}rev=$passrev&sc=0\">${lang["HIDECHANGED"]}</a>"; |
if (isset($history->entries[1])) |
{ |
$prevRev = $history->entries[1]->rev; |
$prevPath = $history->entries[1]->path; |
$vars['prevrev'] = $prevRev; |
$vars['prevrevurl'] = $revurl.createRevAndPegString($prevRev, $peg).$revurlSuffix; |
$vars["hidechanges"] = false; |
$vars["showchanges"] = true; |
} |
$bugtraq = new Bugtraq($rep, $svnrep, $ppath); |
createDirLinks($rep, $ppath, $passrev, $showchanged); |
$vars["curdirloglink"] = "<a href=\"${logurl}rev=$passrev&sc=$showchanged&isdir=1\">${lang["VIEWLOG"]}</a>"; |
$vars['action'] = ''; |
$vars['rev'] = $rev; |
$vars['peg'] = $peg; |
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath)); |
$vars['safepath'] = escape($ppath); |
$vars['lastchangedrev'] = $lastChangedRev; |
if ($logEntry) |
if ($rev != $headrev) |
{ |
$vars['date'] = $logEntry->date; |
$vars['age'] = datetimeFormatDuration(time() - strtotime($logEntry->date)); |
$vars['author'] = $logEntry->author; |
$vars['log'] = nl2br($bugtraq->replaceIDs(create_anchors(xml_entities($logEntry->msg)))); |
$history = $svnrep->getLog($path, $rev, "", false); |
} |
$vars['revurl'] = $config->getURL($rep, ($path == '/' ? '' : $path), 'revision').$isDirString.$passRevString; |
$vars['revlink'] = '<a href="'.$vars['revurl'].'">'.$lang['LASTMOD'].'</a>'; |
if ($history && count($history->entries) > 1) |
if (isset($history->entries[1]->rev)) |
{ |
$vars['compareurl'] = $config->getURL($rep, '', 'comp').'compare[]='.rawurlencode($history->entries[1]->path).'@'.$history->entries[1]->rev. '&compare[]='.rawurlencode($history->entries[0]->path).'@'.$history->entries[0]->rev; |
$vars['comparelink'] = '<a href="'.$vars['compareurl'].'">'.$lang['DIFFPREV'].'</a>'; |
$vars["curdircomplink"] = "<a href=\"${compurl}compare[]=". |
urlencode($history->entries[1]->path)."@".$history->entries[1]->rev. |
"&compare[]=".urlencode($history->entries[0]->path)."@".$history->entries[0]->rev. |
"\">${lang["DIFFPREV"]}</a>"; |
} |
else |
{ |
$vars["curdircomplink"] = ""; |
} |
$vars['logurl'] = $config->getURL($rep, $path, 'log').$isDirString.$passRevString; |
$vars['loglink'] = '<a href="'.$vars['logurl'].'">'.$lang['VIEWLOG'].'</a>'; |
if ($rep->isRssEnabled()) |
if ($rep->getHideRss()) |
{ |
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').$isDirString.createRevAndPegString('', $peg); |
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>'; |
$vars["curdirrsslink"] = "<a href=\"${rssurl}rev=$passrev&sc=$showchanged&isdir=1\">${lang["RSSFEED"]}</a>"; |
$vars["curdirrsshref"] = "${rssurl}rev=$passrev&sc=$showchanged&isdir=1"; |
$vars["curdirrssanchor"] = "<a href=\"${rssurl}rev=$passrev&sc=$showchanged&isdir=1\">"; |
} |
// Set up the tarball link |
$subs = explode('/', $path); |
$subs = explode("/", $path); |
$level = count($subs) - 2; |
if ($rep->isDownloadAllowed($path)) |
$vars["curdirdllink"] = "<a href=\"${dlurl}rev=$passrev&isdir=1\">${lang["TARBALL"]}</a>"; |
else |
$vars["curdirdllink"] = ""; |
if ($rep->isDownloadAllowed($path) && !isset($vars['warning'])) |
{ |
$vars['downloadurl'] = $config->getURL($rep, $path, 'dl').$isDirString.$passRevString; |
} |
$url = $config->getURL($rep, "/", "comp"); |
$vars['compare_form'] = '<form method="get" action="'.$config->getURL($rep, '', 'comp').'" id="compare">'; |
$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">"; |
$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREPATHS"]}\" />"; |
$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\" /><input type=\"hidden\" name=\"sc\" value=\"$showchanged\" /></form>"; |
if ($config->multiViews) |
{ |
$vars['compare_form'] .= '<input type="hidden" name="op" value="comp"/>'; |
} |
else |
{ |
$vars['compare_form'] .= '<input type="hidden" name="repname" value="'.$repname.'" />'; |
} |
$listing = array(); |
$listing = showTreeDir($svnrep, $path, $rev, $listing); |
$vars['compare_submit'] = '<input type="submit" value="'.$lang['COMPAREPATHS'].'" />'; |
$vars['compare_endform'] = '</form>'; |
$vars["version"] = $version; |
$vars['showlastmod'] = $config->showLastModInListing(); |
if (!$rep->hasReadAccess($path, true)) |
$vars["noaccess"] = true; |
$vars['loadalldir'] = $config->showLoadAllRepos(); |
$listing = showTreeDir($svnrep, $path, $rev, $peg, array()); |
if (!$rep->hasReadAccess($path, false)) |
$vars["restricted"] = true; |
if (!$rep->hasReadAccess($path)) |
{ |
$vars['error'] = $lang['NOACCESS']; |
sendHeaderForbidden(); |
} |
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."directory.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing); |
$vars['restricted'] = !$rep->hasReadAccess($path, false); |
renderTemplate('directory', $path); |
?> |
/WebSVN/blame.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
23,152 → 25,55 |
// Show the blame information of a file. |
// |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/utils.php'; |
require_once 'include/template.php'; |
require_once 'include/setup.inc'; |
require_once 'include/svnlook.inc'; |
require_once 'include/utils.inc'; |
require_once 'include/template.inc'; |
$vars['action'] = $lang['BLAME']; |
// Make sure that we have a repository |
if (!$rep) |
{ |
renderTemplate404('blame','NOREP'); |
} |
$svnrep = new SVNRepository($rep); |
// If there's no revision info, go to the lastest revision for this path |
$history = $svnrep->getLog($path, 'HEAD', 1, false, 2, ($path == '/') ? '' : $peg); |
$history = $svnrep->getLog($path, '', '', true); |
$youngest = $history->entries[0]->rev; |
if (!$history) |
{ |
unset($vars['error']); |
$history = $svnrep->getLog($path, '', '', false, 2, ($path == '/') ? '' : $peg); |
if (!$history) |
{ |
renderTemplate404('blame','NOPATH'); |
} |
} |
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : false; |
if (empty($rev)) |
{ |
$rev = $youngest; |
} |
else |
{ |
$history = $svnrep->getLog($path, $rev, '', false, 2, $peg); |
if (!$history) |
{ |
renderTemplate404('blame','NOPATH'); |
} |
} |
if ($path[0] != '/') |
{ |
if ($path{0} != '/') |
$ppath = '/'.$path; |
} |
else |
{ |
$ppath = $path; |
} |
// Find the parent path (or the whole path if it's already a directory) |
$pos = strrpos($ppath, '/'); |
$parent = substr($ppath, 0, $pos + 1); |
$vars['repname'] = $rep->getDisplayName(); |
$vars['rev'] = $rev; |
$vars['peg'] = $peg; |
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath)); |
$vars['safepath'] = escape($ppath); |
$vars['path'] = $ppath; |
if (isset($history->entries[0])) |
{ |
$vars['log'] = xml_entities($history->entries[0]->msg); |
$vars['date'] = $history->entries[0]->date; |
$vars['age'] = datetimeFormatDuration(time() - strtotime($history->entries[0]->date)); |
$vars['author'] = $history->entries[0]->author; |
} |
createDirLinks($rep, $ppath, $rev, $showchanged); |
createPathLinks($rep, $ppath, $passrev, $peg); |
$passRevString = createRevAndPegString($rev, $peg); |
$listing = array(); |
if ($rev != $youngest) |
{ |
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'blame').createRevAndPegString('', $peg); |
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>'; |
} |
// Get the contents of the file |
$tfname = tempnam('temp', ''); |
$svnrep->getFileContents($path, $tfname, $rev, '', true); |
$revurl = $config->getURL($rep, $path, 'blame'); |
$filecache = array(); |
if ($rev < $youngest) |
{ |
$history2 = $svnrep->getLog($path, $rev, $youngest, true, 2, $peg); |
if (isset($history2->entries[1])) |
{ |
$nextRev = $history2->entries[1]->rev; |
if ($nextRev != $youngest) |
{ |
$vars['nextrev'] = $nextRev; |
$vars['nextrevurl'] = $revurl.createRevAndPegString($nextRev, $peg); |
} |
} |
unset($vars['error']); |
} |
if (isset($history->entries[1])) |
{ |
$prevRev = $history->entries[1]->rev; |
$prevPath = $history->entries[1]->path; |
$vars['prevrev'] = $prevRev; |
$vars['prevrevurl'] = $revurl.createRevAndPegString($prevRev, $peg); |
} |
$vars['revurl'] = $config->getURL($rep, $path, 'revision').$passRevString; |
$vars['revlink'] = '<a href="'.$vars['revurl'].'">'.$lang['LASTMOD'].'</a>'; |
$vars['logurl'] = $config->getURL($rep, $path, 'log').$passRevString; |
$vars['loglink'] = '<a href="'.$vars['logurl'].'">'.$lang['VIEWLOG'].'</a>'; |
$vars['filedetailurl'] = $config->getURL($rep, $path, 'file').$passRevString; |
$vars['filedetaillink'] = '<a href="'.$vars['filedetailurl'].'">'.$lang['FILEDETAIL'].'</a>'; |
if ($history == null || count($history->entries) > 1) |
{ |
$vars['diffurl'] = $config->getURL($rep, $path, 'diff').$passRevString; |
$vars['difflink'] = '<a href="'.$vars['diffurl'].'">'.$lang['DIFFPREV'].'</a>'; |
} |
if ($rep->isRssEnabled()) |
{ |
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').createRevAndPegString('', $peg); |
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>'; |
} |
// Check for binary file type before grabbing blame information. |
$svnMimeType = $svnrep->getProperty($path, 'svn:mime-type', $rev, $peg); |
if (!$rep->getIgnoreSvnMimeTypes() && preg_match('~application/*~', $svnMimeType)) |
{ |
$vars['warning'] = 'Cannot display blame info for binary file. (svn:mime-type = '.$svnMimeType.')'; |
$vars['javascript'] = ''; |
} |
else |
{ |
// Get the contents of the file |
$tfname = tempnamWithCheck($config->getTempDir(), ''); |
$highlighted = $svnrep->getFileContents($path, $tfname, $rev, $peg, '', 'line'); |
if ($file = fopen($tfname, 'r')) |
{ |
// Get the blame info |
$tbname = tempnamWithCheck($config->getTempDir(), ''); |
$tbname = tempnam('temp', ''); |
$svnrep->getBlameDetails($path, $tbname, $rev); |
$svnrep->getBlameDetails($path, $tbname, $rev, $peg); |
$ent = true; |
$extension = strrchr(basename($path), '.'); |
if (($extension && isset($extEnscript[$extension]) && ('php' == $extEnscript[$extension])) || ($config->useEnscript)) |
$ent = false; |
if ($blame = fopen($tbname, 'r')) |
{ |
175,89 → 80,52 |
// Create an array of version/author/line |
$index = 0; |
$seen_rev = array(); |
$last_rev = ''; |
$row_class = ''; |
while (!feof($blame) && !feof($file)) |
{ |
$blameline = rtrim(fgets($blame), "\n\r"); |
$blameline = fgets($blame); |
if ($blameline != '') |
{ |
list($revision, $author, $remainder) = sscanf($blameline, '%d %s %s'); |
$empty = !$remainder; |
list($revision, $author) = sscanf($blameline, '%d %s'); |
$listvar = &$listing[$index]; |
$listvar['lineno'] = $index + 1; |
$listing[$index]['lineno'] = $index + 1; |
if ($last_rev != $revision) |
{ |
$listvar['revision'] = '<a id="l'.$index.'-rev" class="blame-revision" href="'.$config->getURL($rep, $path, 'blame').createRevAndPegString($revision, $peg ? $peg : $rev).'">'.$revision.'</a>'; |
$seen_rev[$revision] = 1; |
$row_class = ($row_class == 'light') ? 'dark' : 'light'; |
$listvar['author'] = $author; |
} |
$url = $config->getURL($rep, $parent, 'dir'); |
$listing[$index]['revision'] = "<a href=\"${url}rev=$revision&sc=1\">$revision</a>"; |
$listing[$index]['author'] = $author; |
if ($ent) |
$line = replaceEntities(rtrim(fgets($file)), $rep); |
else |
{ |
$listvar['revision'] = ''; |
$listvar['author'] = ''; |
} |
$line = rtrim(fgets($file)); |
$listvar['row_class'] = $row_class; |
$last_rev = $revision; |
$listing[$index]['line'] = hardspace($line); |
$line = rtrim(fgets($file), "\n\r"); |
if (!$highlighted) |
{ |
$line = escape(toOutputEncoding($line)); |
} |
$listvar['line'] = ($empty) ? ' ' : wrapInCodeTagIfNecessary($line); |
if (trim($listing[$index]['line']) == '') |
$listing[$index]['line'] = ' '; |
$index++; |
} |
} |
fclose($blame); |
} |
fclose($file); |
@unlink($tbname); |
} |
@unlink($tfname); |
// Build the necessary JavaScript as an array of lines, then join them with \n |
$javascript = array(); |
$javascript[] = '<script type="text/javascript" src="'.$locwebsvnhttp.'/javascript/blame-popup.js"></script>'; |
$javascript[] = '<script type="text/javascript">'; |
$javascript[] = '/* <![CDATA[ */'; |
$javascript[] = 'var rev = new Array();'; |
unlink($tfname); |
unlink($tbname); |
ksort($seen_rev); // Sort revisions in descending order by key |
if (empty($peg)) |
{ |
$peg = $rev; |
} |
if (!isset($vars['warning'])) |
{ |
foreach ($seen_rev as $key => $val) |
{ |
$history = $svnrep->getLog($path, $key, $key, false, 1, $peg); |
$vars['version'] = $version; |
if ($history && $history->curEntry) |
{ |
$javascript[] = 'rev['.$key.'] = \'<div class="date">'.$history->curEntry->date.'</div><div class="msg">'.addslashes(preg_replace('/\n/', ' ', $history->curEntry->msg)).'</div>\';'; |
} |
} |
} |
if (!$rep->hasReadAccess($path, false)) |
$vars['noaccess'] = true; |
$javascript[] = '/* ]]> */'; |
$javascript[] = '</script>'; |
$vars['javascript'] = implode("\n", $javascript); |
} |
parseTemplate($rep->getTemplatePath().'header.tmpl', $vars, $listing); |
parseTemplate($rep->getTemplatePath().'blame.tmpl', $vars, $listing); |
parseTemplate($rep->getTemplatePath().'footer.tmpl', $vars, $listing); |
if (!$rep->hasReadAccess($path, false)) |
{ |
$vars['error'] = $lang['NOACCESS']; |
sendHeaderForbidden(); |
} |
renderTemplate('blame'); |
?> |
/WebSVN/changes.txt |
---|
1,147 → 1,20 |
2.4.0+ |
2.1 alpha 1 |
This file is discontinued in favor of using milestones per release on GitHub. |
* Changed: many cleanups and optimisations. |
* Added: more documentation for *.inc files. |
* Removed: extraneous bits. |
* New: PHP_Compat usage to allow some new PHP5 functionality and remain |
backwards-compatible. |
* Changed: line endings now use UNIX-style across the board. |
https://github.com/websvnphp/websvn/releases |
https://github.com/websvnphp/websvn/issues/29 |
2.3.3 |
* Fixed security issue (only affecting Windows with enabled downloads) |
* Added option to override bugtraq properties in config file (#315) |
* Added support for using complete filenames (instead of extensions only) for enscript and GeSHi highlighting (e.g. CMakeLists.txt) |
* Added option to ignore whitespaces in diff as default |
* Added proper notification if temporary folder is not writable |
* Improved path-column in log-view to show most precise path containing all modifications of revision (#313) |
* Improved handling of non-existing resources, returning HTTP status code 404 with an error message not containing SVN commands (#321) |
* Fixed URLs when using revision form and listing view (partially #314) |
* Fixed downloading folders containing whitespaces (#308) |
* Fixed inline diff when ignoring whitespaces with PHP 4 (#309) |
* Fixed keeping flag to regard/ignore whitespaces in diff when moving to previous/next/youngest revision |
* Updated translation: Swedish (#320) |
2.3.2 |
* Added ability to use plain PHP for creating templates |
* Added config option to show last modification in repository list |
* Added config option to trust all server certificates |
* Added support for using multiple access files |
* Added translation: Macedonian, Russian |
* Improved navigation through items deleted in recent revision |
* Improved ignoring whitespaces (including different newlines) in compare-view |
* Updated translation: Dutch |
* Updated libraries: GeSHi 1.0.8.9 |
* Fixed parsing SVN version |
* Fixed comparing two revisions |
* Fixed regression in revision form |
* Fixed issues: 292, 294, 296, 298, 302, 304, 306, 307 |
2.3.1 |
* Added in-line highlighting of diff |
* Added links to previous/next revision in various views |
* Added config option to block bots from indexing |
* Added returning correct http status 403/404 in some cases |
* Improved check for path-based authorization |
* Fixed usage of Enscript |
* Fixed diff of just moved/renamed files |
* Fixed strict messages when using PHP 5.3 |
* Updated libraries: GeSHi 1.0.8.6, PEAR Archive_Tar 1.3.6, PEAR Text_Diff 1.1.1 |
* Updated install documentation |
* Updated translations: Hindi, Marathi, Slovenian |
* Fixed issues: 98, 235, 250, 260, 262, 263, 264, 265, 266, 267, 268, 269, |
270, 271, 273, 274, 275, 276, 278, 280, 283, 284, 285, 287, 288, 290 |
2.3.0 |
* Better support for moved, renamed and deleted items. |
* Improved handling of errors, show useful messages without exposing auth data. |
* Improved handling of different character encodings. |
Replaced manual per-repository configuration with automatic handling |
(using either multibyte string or iconv extension). |
* Modified various things in templates (see doc/templates.html). |
* Added new theme called "Elegant". |
* Added combobox to select template on a per-user base. |
* Fixed plain file downloading. |
* Added http header 500 for errors with downloading archives/files. |
* Updated rss generation. |
* Updated french translation. |
* Fixed issues: 64, 84, 151, 155, 236, 240, 242, 243, 244, 245, 246, 247, 248, |
251, 253, 254, 255, 256, 257, 259 |
2.2.1 |
* Fixed downloading tar-gz-archives when using .gz extension. |
* Improved output when svn-command could not be executed correctly. |
* Added config option to fully alphabetize, independent of folder or file type. |
* Fixed multiple links and minor issues. |
* Fixed issues: 212, 213, 214, 215, 216, 217, 219, 222, 223, 224, 225, 227, 228, |
229, 230, 231, 232, 234, 237, 238 |
2.2.0 |
* Fixed revision handling to use PEG revision instead of OPERATIVE revision. |
* This fixes many (but not all) cases of viewing moved/renamed/deleted files. |
* Removed dependencies to external command. |
* Added PEAR Archive_Tar. |
* Added PEAR Text_Diff. |
* Added usage of gzip (.gz extension) if available. |
* Added usage of PHP touch function. |
* Improved scalability of parent path handling. |
* Added support for upcoming PHP 5.3 release. |
* Added separate customizable extension mapping for GeSHi. |
* Added links for choosing whether to ignore whitespace on compare and diff. |
* Added support for aliases in auth file; handles continuation lines correctly. |
* Added config option to set custom config path. |
* Added config option to exclude repositories from those included by parentPath. |
* Added config option to add a subpath of a repository (not just at root level). |
* Added config option to switch between showing age and date in log and listing |
view (the other is displayed in the title attribute and shown when hovering). |
* Added auto detection of Windows. |
* Added message when config file does not exist. |
* Added new logo and favicon. |
* Fixed some broken links when navigating through a repository. |
* Fixed created archive to be identical (for the same revision) across requests. |
* This works under Linux with any PHP version and under Windows with PHP 5.3. |
* Fixed parsing of access file to support usernames containing equal characters. |
* Updated translations |
* Dutch |
* French |
* Italian |
2.1.0 |
* Fixed: Several security fixes. |
* Added: Added GeSHi for code highlighting. |
* Added: New languages. |
* Changed: Separated modified files and directory listing. |
* Changed: Updated used libraries. |
CHANGES |
FIX: Patched several XSS vulnerabilities. (Issue 179) |
FIX: Hide modified files in revision view based on authentication. |
FIX: Numerous other security problems. |
NEW: Added translations: hungarian, indonesian, slovak, uzbek. |
CHANGED: Some code cleanup. |
2.0 |
NEW: Template files may now be specified on a per repository basis |
NEW: Add RSS 'alternate' <link> elements to the HTML headers in |
directory listings. This lets you, for example, easily create a |
'live bookmark' in Firefox to monitor commits to a particular SVN path. |
NEW: Russian translation. |
* Added: More documentation for *.php files. |
* Removed: Extraneous bits. |
* Changed: Many cleanups and optimisations. |
* Changed: Line endings now use UNIX-style across the board. |
CHANGES |
NEW: New default template theme offered by Erik Pöhler. |
NEW: Template files may now be specified on a per repository basis. |
NEW: RSS 'alternate' <link> elements in HTML headers links to directory listing. |
This lets you, for example, easily create an RSS 'live bookmark' to monitor |
commits to a particular SVN path. |
NEW: Russian translation |
CHANGE: Bugtraq handling has been updated to account for the latest spec. |
FIX: Syntax highlighting across lines has been fixed (Issue 85) |
148,160 → 21,165 |
2.00 beta 8 |
CHANGE: Remove path comparison boxes when using the flat view display. |
CHANGE: Tidied URLs generated from the listing view (remove default parameters). |
CHANGE: wsvn now selects either the listing or file view automatically when the |
"op" parameter isn't present. This allows for simpler, shorter URLS. |
(eg. /http://example.com/wsvn/repo1/myfile.txt) |
CHANGE: Remove path comparison boxes when using the flat view display |
CHANGE: Tidy up URLs generated from the listing view (Remove default parameters). |
CHANGE: wsvn now selectes either the listing or file view automatically when the op parameter |
isn't present. This allows for nicer URLS (eg. /http://example.com/wsvn/repo1/myfile.doc) |
FIX: Fix warnings when using an access file that didn't define a groups section. |
FIX: Fix tarballing of directories with spaces. |
FIX: Fix warnings when using an access file that didn't define a groups section |
FIX: Fix tarballing of directories with spaces |
FIX: Path history information in the log view of a file was incorrect. |
2.00 beta 7 |
NEW: Projects may now be assigned to groups to simplify the index view. |
NEW: The index may be displayed as a collapsible tree of groups. |
NEW: Projects may now be assigned to groups, to simplify the index view |
NEW: The index may be displayed as a collapsable tree of groups |
CHANGE: The syntax for per-repository configurations has changed is now much |
simpler and will work on all versions of PHP. |
CHANGE: The syntax for the per repository configurations has changed. It's now much simpler and |
will work on all versions of PHP |
FIX: Various bug fixes for the access rights module. |
FIX: Language choice selection with MultiViews enabled didn't work. |
FIX: Various small bugs introduced during 2.0 development. |
FIX: Various bug fixes for the access rights module |
FIX: Language choice selection with MultiViews enabled didn't work |
FIX: Various small bugs introduced during 2.0 development |
2.00 beta 6 |
Note: $config->addRepository() now takes a URL, not a filesystem path! |
Note: the $config->addRepository command now takes a URL and not a filesystem path! |
NEW: WebSVN can now host remote repositories! |
FIX: The access rights handling didn't work if you had give a repository a |
display name different from it's "real" svn name. |
FIX: The deleted file list no longer links to nonexistent files. |
FIX: Tidied the directory display when download/compare links aren't available. |
FIX: The access rights handling didn't work if you had give a repository a display name |
different from it's "real" svn name. |
FIX: The deleted file list no longer links to non-existant files! |
FIX: Neaten the directory display when the download/compare links aren't available |
2.00 beta 5 |
NEW: Access rights files can now be specified on a per-repository basis. |
NEW: Access rights files can now be specified on a per repository basis |
CHANGE: Further improvements have been made to character encoding handling. In |
particular, it is now possible to specify the encoding of the repository |
contents separately from the system encoding. This is the case for |
Windows users; the command line tools typically returning CP850-encoded |
strings, whereas the source files are encoded as iso-8859-1. Now, when |
displaying text files, WebSVN will convert from the content encoding to |
the output encoding (UTF-8). |
CHANGE: Updated Danish translation. |
CHANGE: The log display has a "max number of revisions to show" filter option, |
which defaults to 30. This significantly improves log view performance. |
CHANGE: Further improvements have been made to character encoding handling. In particular, |
it is now possible to specify the encoding of the repository contents separately |
from the system encoding. This is the case for windows users, whereby the command |
line tools typically returning CP850 encoded strings, whereas the source files are |
encoded as iso-8859-1. Now, when displaying text files, WebSVN will convert them |
from the content encoding to the output encoding (UTF-8). |
FIX: Correctly display the contents of a file which had brackets in the name. |
FIX: Correct problem with download of tarballs containing special characters. |
FIX: Improve time display. |
FIX: Remove non-UTF8 language options from distconfig.php. |
FIX: Fix recent bug where the log messages contained unnecessary blank lines. |
FIX: Auth file section groups without a trailing / are now treated correctly. |
CHANGE: Update Danish translation |
CHANGE: The log display has a "max number of revisions to show" fiter option, which defaults |
to 30. This significantly improves performance of the log display. |
FIX: It wasn't possible to display the contents of a file which had brackets in the name. |
FIX: Correct problem with download of tarballs containing special characters |
FIX: Improve time display |
FIX: Remove non-UTF8 language options from distconfig.inc |
FIX: Fix recent bug whereby the log messages would contain unnecessary blank lines |
FIX: Access right file section groups without a trailing / are no correctly treated |
2.00 beta 4 |
NEW: The log display may now be filtered to show a range of revisions. |
NEW: You can now specify directories that can or cannot be tarballed. Tarballing |
can be enabled after only a certain directory depth, and directories can be |
(dis)allowed on a per-directory/per-repository basis. |
NEW: The user can now choose their language via a drop down box. |
NEW: The log display may now be filtered to show a range of revisions |
NEW: You can now have control over the specification of directories that can or |
cannot be tarball'ed. Tarballing can be turned on only after a certain directory |
depth and directories can be allow/disallowed on a per directory/repository basis. |
NEW: The user can now choose their language via a drop down box |
CHANGE: Character encodings are now handled differently. The output encoding is |
always UTF-8, and the setOutputEncoding option has been removed. |
CHANGE: Character encodings are now handled differently. The output encoding is ALWAYS |
defined as UTF-8, and the setOutputEncoding option has been removed. |
FIX: Diff was broken by 1.70 beta 2. |
FIX: Download of a directory is prohibited if the user doesn't have read access |
to the directory AND all of its subdirectories. |
FIX: The character set type is now sent in the HTTP header automatically. |
FIX: Diff had been broken by 1.70 beta 2 |
FIX: Download of tarballs is prohibited if the user doesn't have read access to the directory |
AND all of its subdirectories |
FIX: The character set type is now sent in the HTTP header. No need to hack the Apache config |
2.00 beta 3 |
NEW: Config option to display a flat view rather than a tree view. |
NEW: WebSVN may now be configured to display a flat view rather than a tree view |
FIX: Only use --limit option on SVN 1.2 or greater. |
FIX: Correct spelling of "danish" in distconfig.php. |
FIX: RSS was previously broken in 1.7 beta 1. |
FIX: Only use --limit option on svn 1.2 or greater |
FIX: Correct spelling of "danish" in distconfig |
FIX: Fix RSS, previously broken 1.7 beta 1 |
2.00 beta 2 |
CHANGE: No longer requires entire revision history when accessing a directory, |
resulting in a faster access for large repositories. |
CHANGE: WebSVN no longer requires the entire revision history when accessing a directory, |
resulting in a faster access for large repositories |
FIX: The new access rights module didn't always hide directories. |
FIX: Tree icons have been fixed (broken in 1.70 beta 1). |
FIX: The new access rights module didn't always hide directories |
FIX: Tree icons have been fixed (broken in 1.70 beta 1) |
2.00 beta 1 |
NEW: Access rights module (Finally!) - see install.txt for details |
NEW: The "View Log" link is now available for templates to use in the file view. |
NEW: Added support for "bugtraq:logregex" property. |
NEW: Translations for Danish, Finnish, Turkish, Norwegian, Simplified Chinese. |
NEW: Added language file for Danish, Finnish, Turkish, Norwegian and Simplified Chinese |
NEW: The "View Log" link is now available for templates to use from the file view |
NEW: Added bugtraq:logregex support |
CHANGE: Ages are now displayed with higher resolution. |
CHANGE: Updated German translation. |
CHANGE: Text files are no longer delivered as binary by default, but displayed |
by Enscript. |
CHANGE: The last modified files display now shows the most recently modified |
files of the current directory. |
CHANGE: Improved diff colours of BlueGrey template for better readability. |
CHANGE: Ages are now displayed with higher resolution |
CHANGE: Update German translation |
CHANGE: Tex file are no longer delivered as binary by defaut, but displayed by enscript |
CHANGE: The last modified files display now shows the most recently modified files of |
the current directory |
CHANGE: Improve diff colours of Blue Grey Scheme for better readability |
CHANGE: WebSVN no longer requires the entire revision history when accessing a directory, |
resulting in a faster access for large repositories |
FIX: Directories containing accents weren't always displayed. |
FIX: File revisions can be compared via the log display (not just directories). |
FIX: Corrected RSS encoding issue. |
FIX: Corrected bug where diff lines would be displayed twice. |
FIX: "svn: Can't check path '/root/.subversion': Permission denied" |
FIX: Sometimes files delivered (as opposed to displayed) by WebSVN were empty. |
FIX: Fix problem with large tarball delivery. |
FIX: Compare with previous always used HEAD. |
FIX: .sh files are now viewable. |
FIX: Allow special characters in repository names. |
FIX: Now able to go into a module if another module starts with the same name. |
FIX: Directories containing accents weren't always displayed |
FIX: File version can be compared via the log display (as oppoed to just directories) |
FIX: Corrected RSS encoding issue |
FIX: Corrected bug whereby diff lines would be displayed twice |
FIX: svn: Can't check path '/root/.subversion': Permission denied |
FIX: Sometimes files delivered (as opposed to disaplyed) by WebSVN were empty |
FIX: Fix problem with large tarball delivery |
FIX: Compare with previous always used HEAD |
FIX: .sh files are now viewable |
FIX: Allow special characters in repository names |
FIX: It wasn't possible to go into a module if another module starts with the same name. |
FIX: Remove hard-coded timezone from the RSS feed creator. |
FIX: Caching of RSS feeds wasn't working. |
FIX: Caching of RSS feeds wasn't working |
1.62 |
NEW: RSS feed can now list changed files. |
NEW: Templates can now show an open folder icon. |
NEW: RSS feed can now list changed files |
NEW: Templates can now show an open folder icon |
NEW: Polish translation |
NEW: Dutch translation |
CHANGE: Window is scrolled to appropriate location when opening a new directory. |
CHANGE: Window is scrolled to appropriate location when opening a new directory |
FIX: Allow repository names containing '/'. |
FIX: Fixed sloppy HTML in diff templates. |
FIX: Fix problems with the diff output. |
FIX: Allow repository names containing '/' |
FIX: Fixed sloppy HTML in diff templates |
FIX: Fix problems with the diff output |
FIX: Repositories on Windows network shares can now be accessed. |
FIX: Accented characters now display correctly in the directory comparison view. |
FIX: Remove error when only one revision was available. |
FIX: Accented characters weren't shown correctly in the directory comparison |
view. |
FIX: Remove error when only one revision was available |
1.61 |
NEW: Multibyte encodings are considered when urlencoding path names. |
NEW: Multibyte encodings are considered when urlencoding path names |
CHANGE: The listing view will now always show the requested revision (HEAD by |
default), but the log message will show the log string for the latest |
modification to the current directory). This means the parent directory |
structure won't change as you browse through old directories. |
CHANGE: The listing view will now always show the revision asked for |
(HEAD by default), but the log message will show the log |
string for the latest modification to the current directory). |
This means the the parent directory structure won't change as you |
browse through old directories. |
FIX: A bug prevented downloading of tarballs from working. |
FIX: A bug prevented downloading of tarballs from working |
1.60 |
NEW: Directory displays are now shown in tree view (so that it's harder to get |
lost). Many thanks to Brent Lu for this excellent patch. |
NEW: Comparison of entire directories. |
NEW: Directory displays are now shown in tree view (so that it's harder |
to get lost). Many thanks to Brent Lu for this excellent patch. |
The prettiest result are available in the BlueGrey scheme. |
NEW: Comparison of entire directories |
NEW: Tarballs of directories may now be downloaded. |
Set $config->allowdownload(); in config.php to allow this. |
NEW: New 'Zinn' template from http://projectzinn.org/. Thanks to Justin Doran. |
Set $config->allowdownload(); in config.inc to allow this. |
NEW: New style 'Zinn' based on the templates created for |
http://www.projectzinn.org/. Thanks to Justin Doran. |
NEW: File delivery now looks at the defined Mime-Type. Thanks to |
Peter Valdemar Mřrch for this patch. |
NEW: Various configuration options may now be applied on a per-project basis. |
Peter Valdemar Mørch for this patch. |
NEW: Various configuration options may now be applied on a per project |
basis. Look in distconfig for instructions. |
NEW: Support for using 'bugtraq' properties when display log entries. |
See http://svn.collab.net/repos/tortoisesvn/trunk/doc/issuetrackers.txt |
NEW: Traditional Chinese translation |
308,14 → 186,16 |
NEW: Spanish translation |
CHANGE: Style information removed from RSS feed |
CHANGE: Changed files are now hidden by default (since the directory |
CHANGE: Changed files are now hidden by defaut (since the directory |
comparison link is far more useful) |
FIX: File listing are now shown with the correct accented characters on Windows. |
FIX: File listing sometimes failed when there were spaces in the filename. |
FIX: Some setups wouldn't allow diff generations with Enscript enabled. |
FIX: Filenames are URL encoded correctly before calling "svn file:///". |
FIX: Keywords weren't expanded in file view when Enscript was disabled. |
FIX: File listing were't being shown with the correct accented characters |
under windows. |
FIX: File listing sometimes failed when there were spaces in the filename |
FIX: Some setups wouldn't allow diff generations with enscript |
enabled. |
FIX: Filenames are URL encoded correctly before calling svn file:/// |
FIX: Keywords weren't expanded in file view when enscript was disabled |
1.51 |
322,141 → 202,159 |
NEW: Korean translation |
NEW: Russian translation |
FIX: Repositories may now have spaces in their path. (eg: c:\my reps) |
FIX: Diff now works when the file name has changed between versions. |
FIX: RSS feed now generates Content-Type header for XML so IE can display it. |
FIX: Diff and blame now work properly for PHP files when Enscript isn't used. |
FIX: Use 'svn --non-interactive' so that SVN never prompts WebSVN for input. |
FIX: Corrections to the French translation. |
FIX: Display a message when no repository paths have been configured. |
FIX: Under Multiviews, change to the WebSVN directory before executing commands |
so that tempnam() works, so diff and blame work correctly on all systems. |
FIX: Repositories may now have spaces in their path (eg: c:\my reps) |
FIX: Diff now works when the file name has changed between versions |
FIX: RSS feed now generates Content-Type header for XML so that IE can display |
the contents |
FIX: Diff and Blame didn't work properly for php files when enscript wasn't used |
FIX: Use svn --non-interactive to ensure that svn doesn't prompt WebSVN for input |
FIX: Corrections to the French translation |
FIX: Display an explanatory message when the user hasn't configured any |
repository paths |
FIX: When using Multiviews, change to the WebSVN directory before executing |
commands so that tempnam works. This used to cause problems on some |
systems when running diff and blame. |
1.50 |
Notes: Before installing this version you should delete existing cache files. |
Notes: Before installing this version you should delete all the existing |
cache files. |
wsvn.php has changed. You should redo any appropriate configuration |
changes inside this file. |
NEW: Blame information for a file can now be viewed. |
NEW: The cached files are now compressed. |
NEW: The project selection box shows the current project by default. |
NEW: Blame information for a file can now be viewed |
NEW: The cached files are now compressed |
NEW: The project selection box shows the current project by default |
NEW: Swedish translation |
NEW: Japanese translation |
NEW: The install file explains how to set up permission-based repository access, |
such that access via the web interface is the same as access via a client. |
NEW: SVN keywords are now expanded in file listings. |
NEW: The install file explains how to set up permission based repository |
access such that access via the web interface is the same as access |
via a client (assuming Apache2). |
NEW: SVN keywords are now expanded in file listings |
CHANGE: The extraction of the directory listings is now accomplished using the |
'svn' command via file:/// access rather than 'svnlook'. This has the |
advantage of being non-recursive, and thereby eliminates the need for |
caching the entire directory listing, and is much quicker on complex |
directory structures. (Also, no more 50MB directory caches!) |
CHANGE: The extraction of the directory listings is now accomplished using |
the svn command via file:/// access rather than svnlook. This has |
the advantage of being non-recursive, and thereby eliminates the need |
for caching the entire directory listing, and is much quicker on |
complex direcory structures. No more 50Mb directory caches! |
FIX: Deleted directories are now viewable. |
FIX: SHOWALL was being redefined in the language files. |
FIX: The directory listing view sometimes showed [lang:DELETEDFILES]. |
FIX: SHOWALL was being redefined in the language files |
FIX: The directory listing view sometimes showed [lang:DELETEDFILES |
FIX: Under Windows, links in the RSS output would start with "\" if WebSVN |
was installed in the server's root directory. |
FIX: Sed wouldn't work under all versions of Windows due to the use of single |
quotes around the parameters. |
quotes around the paramters |
FIX: Improved character encoding support for log messages etc. |
FIX: Paths passed by URL are encoded. |
FIX: Generated HTML code is strictly 4.01. |
FIX: Paths passed by URL are encoded |
FIX: Generated HTML code is strictly 4.01 |
1.40 |
NEW: RSS feed support. (Thanks to Lübbe Onken for his work on this.) |
NEW: Translatations for French and Portuguese. |
NEW: .exe files now default to content-type "application/x-msdownload". |
NEW: Recognised links are now 'linkified' in the log messages. |
NEW: Option to change number of spaces to use for tabs in file/diff listings. |
NEW: URLs now access the repository by name rather than number. This means that |
bookmarks will stay the same when new projects are added. The old behaviour |
can be configured in config.php. |
NEW: RSS feed support (thanks to Lübbe Onken for his work on this) |
NEW: Translatations for French and Portuguese |
NEW: .exe is recognised by default as having content-type |
application/x-msdownload |
NEW: Recognised links are now 'linkified' in the log messages |
NEW: Tabs in file/diff listings are now expanded by a user |
configurable number of spaces. |
NEW: WebSVN URLs now access the repository by name rather than number. |
This means that bookmarks will stay the same when new projects |
are added. The old behaviour can be configured in config.inc. |
FIX: Removed the revision 0 that has appeared since the previous version. |
FIX: Repositories were not sorted alphabetically when using ParentPath. |
FIX: The PNG support script (and the BlueGrey scheme) is now only loaded for IE. |
FIX: Removed the revision 0 that has appeared since the previous version |
FIX: Repositories were not sorted alphabetically when using ParentPath |
FIX: The PNG support script needed for IE (and the BlueGrey scheme) is |
now only loaded with IE |
1.39 |
CHANGE: In the human-readable date strings, display up to 119 minutes, 47 hours, |
13 days or 23 months before moving up to the next unit, like ViewCVS. |
CHANGE: In the human-readable date strings, display up to 119 minutes, |
47 hours, 13 days or 23 months before moving up to the next |
quantity, like ViewCVS. |
FIX: Links from file detail view now go to the current (not previous) revision. |
FIX: Paths with spaces are now correctly showed in the log view. |
FIX: Blank lines in diff output are set to so browsers will display them. |
FIX: Links followed after viewing the contents of a file go to the |
revision of the repository previously being viewed |
FIX: Paths with spaces are now correctly showed in the log view |
FIX: Blank lines in the diff output are set to so the browser |
won't compress them |
FIX: A blank author field is set to an cell. |
FIX: A year is 365 days, not 356. |
FIX: Base ages correctly upon GMT. |
FIX: The diff output did not escape html entities when Enscript was enabled and |
the file extension was not recognised for Enscript. |
FIX: distconfig.php had a few minor errors in the examples. |
FIX: It wasn't possible to call ParentPath multiple times. |
FIX: Base ages correctly upon GMT |
FIX: The diff output did not escape html entities when enscript was |
enabled and the file extension was not recognised for enscript. |
FIX: distconfig.inc has a few minor errors in the examples. |
FIX: It wasn't possible to call ParentPath multiple times |
1.38 |
NEW: Templates can now define icons for particular file types (see BlueGrey). |
NEW: Display of PHP files with syntax highlighting. |
NEW: Improve site navigation with links to each directory level on all pages. |
NEW: Templates can now define icons for particular file types |
(see BlueGrey scheme for an example) |
NEW: Display of PHP files with syntax highlighting |
NEW: Improve site navigation with links to each directory level on all |
pages. |
1.37 |
NEW: Display a message when there are no results found. |
NEW: Display a message when there are no results found |
CHANGE: Aesthetic changes to the BlueGrey scheme. |
CHANGE: Sort entries more naturally. |
CHANGE: Aesthetic changes to the BlueGrey scheme |
CHANGE: Sort entries more naturally |
FIX: Redirect to the right URL when using the drop-down box to select projects. |
FIX: Nested [websvn-test] elements didn't always work. |
FIX: Fixed use of "standard" vs "Standard", problematic on non-Windows machines. |
FIX: Really make sure that we redirect to the right place when using the |
drop-down box to select projects. |
FIX: Nested [webtest]'s didn't always work |
FIX: Fixed use of "standard" and "Standard", which caused problems on |
non-windows machines |
1.36 |
NEW: Log message search feature. |
NEW: Diff display tries to display changed lines as changed, rather than showing |
the line as deleted then added. |
NEW: Log message search feature |
NEW: Diff display tries to display changed lines as changed, rather than |
showing the line deleted then added. |
FIX: Problem with quoting of commands and command line arguments on Windows. |
FIX: Problem surrounding the quoting of commands and command line arguments |
on Windows machines. |
1.35 |
NEW: You can now specify a list of file types (extensions) for files that should |
be delivered to the user in a GZIP'd archive rather than displayed as ASCII |
in the browser window. |
NEW: You can now specify a list of file types (extensions) for files which |
should be delivered to the user in a GZIP'd archive rather than |
displayed as ASCII in the browser window. |
CHANGE: Files delivered with a MIME Content type are now sent as "inline". The |
browser will try to display them in the browser window, offering a save |
box only if they can't be displayed in this manner. |
CHANGE: Files delived with a MIME Content type are now sent as "inline". |
The browser will try to display them in the browser window, offering |
a save box only if they can't be displayed in this mannor. |
FIX: Detect use of the HTTPS protocol when using the drop-down box to select |
projects. (-- FIX INCORRECT. USE v1.36 -- ) |
FIX: The PNGs in the BlueGrey style are now transparent under IE 5.5 and higher. |
FIX: Detect use of the HTTPS protocol when using the drop-down box to |
select projects. (-- FIX INCORRECT. USE v1.36 -- ) |
FIX: The PNGs in the BlueGrey style are now transparent under Internet |
Explorer 5.5 and higher. |
1.34 |
NEW: Support for switching between projects using a drop-down box control. |
(MultiViews users - note that wsvn.php has been changed.) |
NEW: Sort the repositories alphabetically when using parentPath. |
NEW: Better support for internationalisation. |
(Template writers: Please note the use of the new variable 'charset'.) |
NEW: More useful info in browser titles with the standard templates. |
NEW: Support for switching between projects using a drop-down box control |
(MultiViews users - note that wsvn.php has been changed) |
NEW: Sort the repositories alphabetically when using parentPath |
NEW: Better support for internationalisation |
(Template writers: Please note the use of the new variable 'charset') |
NEW: More useful info in browser titles with the standard templates |
FIX: Accented characters should now be displayed correctly (I hope). |
FIX: HTML files now display correctly on all machines. |
FIX: Removed spurious BRs from the file listings. |
FIX: HTML files now display correcly on all machines |
FIX: Removed spurious BRs from the file listings |
1.33 |
There are a few changes to the config file in this release. Copy distconfig.php |
to config.php and redo any configuration changes that you had made. |
There are a few changes to the config file in this release. Copy |
distconfig.inc to config.inc and redo any configuration changes that you |
had made. |
NEW: Recognised non-text files are now delivered to the user as attachments. |
NEW: The list of files types to be sent to the user (rather than displayed with |
WebSVN) is now user-configurable. |
NEW: File comparisons are now colourised based on the file extension. |
The list of files types to be sent back to the user (rather than displayed |
using WebSVN) is user configurable. |
NEW: File comparisons are now colourised based on the file extension |
CHANGE: Only the Enscript file extensions that the user wishes to override are |
now listed in the config file. |
463,94 → 361,102 |
1.32 |
FIX: Links now function correctly when used in basic (not multiviews) mode. |
FIX: Links no longer functionned correctly when used in basic |
(non-multiviews) mode. |
FIX: Stop diff from comparing space changes |
1.31 |
FIX: Directory view had disappeared! |
FIX: Included missing setup.php file. |
FIX: Handle spaces in filenames. |
FIX: Included missing file setup.inc |
FIX: Handle spaces in filenames |
1.30 |
There are a few changes to the config file in this release. Copy distconfig.php |
to config.php and redo any configuration changes that you had made. |
There are a few changes to the config file in this release. Copy |
distconfig.inc to config.inc and redo any configuration changes that you |
had made. |
NEW: MultiViews support allows access to repositories using a URL such as: |
NEW: MultiViews support. You can now set up WebSVN to access the |
repositories using a URL such as: |
http://server/wsvn/repname/path/to/rep |
NEW: Colourisation support using Enscript. |
NEW: [websvn-test] function can now be nested. |
NEW: locwebsvnhttp variable added in template system. |
NEW: BlueGrey scheme now has show/hide changed link. |
NEW: Colourisation support using Enscript |
NEW: [websvn-test] function can now be nested |
NEW: locwebsvnhttp variable added in template system |
NEW: Bluegrey scheme now has show/hide changed link |
FIX: Possible security hole with abuse of popen(). |
FIX: Should now function correctly (again) on non-Windows servers. |
FIX: First character of diff listing was missing. |
FIX: Possible security hole with abuse of popen |
FIX: WebSVN should now function correctly (again) on non windows servers. |
FIX: First character of diff listing was missing |
1.20 |
NEW: Comprehensive templating solution. |
NEW: Show the age of a revision in the log view. |
NEW: Comprehensive templating solution |
NEW: Show the age of a revision in the log view |
CHANGE: The youngest revision of the current directory is now shown by default |
(as opposed to the head revision of the entire repository). This means |
that clicking a directory shows the latest changes associated with it. |
Specific revisions can still be selected from a log view. |
CHANGE: The youngest revision of the current directory is now shown by |
default (as opposed to the head revision of the entire repository. |
This means that clicking on a directory will show the lastest |
changes associated with it. A specific revision can still be |
selected from a log view |
CHANGE: Only show the leaf name when viewing directory contents |
FIX: Fixed error concerning use of pclose() |
FIX: Fixed error concerning use of pclose |
1.10/1.10a |
There are a few changes to the config file in this release. Copy distconfig.php |
to config.php and redo any configuration changes that you had made. |
There are a few changes to the config file in this release. Copy |
distconfig.inc to config.inc and redo any configuration changes that you |
had made. |
NEW: WebSVN now caches information on the repositories. Once a revision has been |
viewed, subsequent revisions use the cached information to display the |
directory structure. This significantly improves the browsing speed. |
NEW: WebSVN now caches information on the repositories. Once a revision |
has been viewed subsequent revisions use the cached infomation to |
display the directory structure. This significantly improves the |
browsing speed. |
NEW: German language file (thanks to Stephan Stapel) |
1.04/1.04a |
Please note that the config file is now stored in the "include" subdirectory. |
Please note that the config file is now stored in include/ |
FIX: Directories in the log view lacked their trailing slashes. |
FIX: Diff is now far more memory-efficient, and shows the correct line numbers. |
FIX: Diff is now far more efficient with Apache's memory, |
and shows the corrrect line numbers. |
FIX: setDiffPath now works. |
FIX: Bug introduced in 1.03 whereby the revision number always showed '1'. |
FIX: Bug introduced in 1.03 whereby the revision number always showed '1' |
corrected. |
Note that you can't view logs with 1.04! Use 1.04a instead. |
Note that you can't view logs with 1.04! Use 1.04a. |
1.03 |
Note that the config.php file has completely changed in this release, in order |
to make it more "future proof" and resilient. You'll need to copy distconfig.php |
to config.php redo the appropriate changes as described. |
Note that the config.inc file has completely changed in this release, in |
order to make it more "future proof" and resiliant. You'll need to copy |
distconfig.inc to config.inc redo the appropriate changes are described. |
NEW: A 'ParentPath' can now be specified, rather than having to specify the |
directories by hand. |
FIX: Rewrite of the file list code. Should now be quite a bit faster. |
FIX: Use a more memory efficient algorithm to list file contents. |
FIX: Spaces in Windows path to svnlook and diff are now handled properly. |
FIX: Calls to external commands such as svnlook no longer require Windows-style |
line endings. |
FIX: Rewrite of the file list code. Should now be quite a bit faster |
FIX: Use a more memory efficient algorithm to list file contents |
FIX: Spaces in Windows path to svnlook and diff are now handled properly |
FIX: Calls to external commands such as svnlook no longer require Windows |
style line endings. |
1.02 |
NEW: Improved command handling to report returned errors. Considerably helps |
initial installation problems. |
NEW: Show the author of each revision in the log view. |
NEW: Show the author of each revision in the log view |
FIX: Removed the spurious that some people were seeing. |
FIX: Removed the spurious   that some people were seeing |
1.01 (5 Feb 2004) |
FIX: Files with HTML content are now shown correctly. |
FIX: The diff output had the revision labels the wrong way round. |
FIX: Files with HTML content are now shown correcty |
FIX: The diff output had the revision lables the wrong way round |
1.00 (4 Feb 2004) |
/WebSVN/comp.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
20,487 → 22,261 |
// |
// comp.php |
// |
// Compare two paths using `svn diff` |
// Compare two paths using "svn diff" |
// |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/utils.php'; |
require_once 'include/template.php'; |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
require_once("include/utils.inc"); |
require_once("include/template.inc"); |
$svnrep = new SVNRepository($rep); |
function checkRevision($rev) |
{ |
if (is_numeric($rev) && ((int)$rev > 0)) |
return $rev; |
$rev = strtoupper($rev); |
switch($rev) |
{ |
case "HEAD": |
case "PREV": |
case "COMMITTED": |
return $rev; |
} |
return 'HEAD'; |
} |
// Make sure that we have a repository |
if (!$rep) |
{ |
renderTemplate404('compare','NOREP'); |
return "HEAD"; |
} |
$svnrep = new SVNRepository($rep); |
// Retrieve the request information |
$path1 = @$_REQUEST['compare'][0]; |
$path2 = @$_REQUEST['compare'][1]; |
$rev1 = (int)@$_REQUEST['compare_rev'][0]; |
$rev2 = (int)@$_REQUEST['compare_rev'][1]; |
$manualorder = (@$_REQUEST['manualorder'] == 1); |
$ignoreWhitespace = $config->getIgnoreWhitespacesInDiff(); |
$path1 = @$_REQUEST["compare"][0]; |
$path2 = @$_REQUEST["compare"][1]; |
$rev1 = @$_REQUEST["compare_rev"][0]; |
$rev2 = @$_REQUEST["compare_rev"][1]; |
if (array_key_exists('ignorews', $_REQUEST)) |
{ |
$ignoreWhitespace = (bool)$_REQUEST['ignorews']; |
} |
// Some page links put the revision with the path... |
if ($path1 && strpos($path1, '@')) |
{ |
list($path1, $rev1) = explode('@', $path1); |
} |
else if ($path1 && (strpos($path1, '@') === 0)) |
{ |
// Something went wrong. The path is missing. |
$rev1 = substr($path1, 1); |
$path1 = '/'; |
} |
if (strpos($path1, "@")) list($path1, $rev1) = explode("@", $path1); |
if (strpos($path2, "@")) list($path2, $rev2) = explode("@", $path2); |
if ($path2 && strpos($path2, '@')) |
{ |
list($path2, $rev2) = explode('@', $path2); |
} |
else if ($path2 && (strpos($path2, '@') === 0)) |
{ |
$rev2 = substr($path2, 1); |
$path2 = '/'; |
} |
$rev1 = checkRevision($rev1); |
$rev2 = checkRevision($rev2); |
// Choose a sensible comparison order unless told not to |
if (!$manualorder && is_numeric($rev1) && is_numeric($rev2) && $rev1 > $rev2) |
if (!@$_REQUEST["manualorder"] && is_numeric($rev1) && is_numeric($rev2)) |
{ |
if ($rev1 > $rev2) |
{ |
$temppath = $path1; |
$temprev = $rev1; |
$path1 = $path2; |
$rev1 = $rev2; |
$path2 = $temppath; |
$temprev = $rev1; |
$rev1 = $rev2; |
$rev2 = $temprev; |
} |
$vars['rev1url'] = $config->getURL($rep, $path1, 'dir').createRevAndPegString($rev1, $rev1); |
$vars['rev2url'] = $config->getURL($rep, $path2, 'dir').createRevAndPegString($rev2, $rev2); |
$url = $config->getURL($rep, '', 'comp'); |
$vars['reverselink'] = '<a href="'.$url.'compare%5B%5D='.rawurlencode($path2 ?? '').'@'.$rev2.'&compare%5B%5D='.rawurlencode($path1 ?? '').'@'.$rev1.'&manualorder=1'.($ignoreWhitespace ? '&ignorews=1' : '').'">'.$lang['REVCOMP'].'</a>'; |
$toggleIgnoreWhitespace = ''; |
if ($ignoreWhitespace == $config->getIgnoreWhitespacesInDiff()) |
{ |
$toggleIgnoreWhitespace = '&ignorews='.($ignoreWhitespace ? '0' : '1'); |
} |
if (!$ignoreWhitespace) |
{ |
$vars['ignorewhitespacelink'] = '<a href="'.$url.'compare%5B%5D='.rawurlencode($path1 ?? '').'@'.$rev1.'&compare%5B%5D='.rawurlencode($path2 ?? '').'@'.$rev2.($manualorder ? '&manualorder=1' : '').$toggleIgnoreWhitespace.'">'.$lang['IGNOREWHITESPACE'].'</a>'; |
} |
else |
{ |
$vars['regardwhitespacelink'] = '<a href="'.$url.'compare%5B%5D='.rawurlencode($path1 ?? '').'@'.$rev1.'&compare%5B%5D='.rawurlencode($path2 ?? '').'@'.$rev2.($manualorder ? '&manualorder=1' : '').$toggleIgnoreWhitespace.'">'.$lang['REGARDWHITESPACE'].'</a>'; |
} |
$url = $config->getURL($rep, "/", "comp"); |
$vars["revlink"] = "<a href=\"${url}compare%5B%5D=".urlencode($path2)."@$rev2&compare%5B%5D=".urlencode($path1)."@$rev1&manualorder=1\">${lang["REVCOMP"]}</a>"; |
if ($rev1 == 0) $rev1 = 'HEAD'; |
if ($rev2 == 0) $rev2 = 'HEAD'; |
if ($rev1 == 0) $rev1 = "HEAD"; |
if ($rev2 == 0) $rev2 = "HEAD"; |
$vars['repname'] = escape($rep->getDisplayName()); |
$vars['action'] = $lang['PATHCOMPARISON']; |
$vars["repname"] = $rep->getDisplayName(); |
$vars["action"] = $lang["PATHCOMPARISON"]; |
$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">"; |
$vars["compare_path1input"] = "<input type=\"text\" size=\"40\" name=\"compare[0]\" value=\"$path1\" />"; |
$vars["compare_rev1input"] = "<input type=\"text\" size=\"5\" name=\"compare_rev[0]\" value=\"$rev1\" />"; |
$vars["compare_path2input"] = "<input type=\"text\" size=\"40\" name=\"compare[1]\" value=\"$path2\" />"; |
$vars["compare_rev2input"] = "<input type=\"text\" size=\"5\" name=\"compare_rev[1]\" value=\"$rev2\" />"; |
$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREPATHS"]}\" />"; |
$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\" /><input type=\"hidden\" name=\"manualorder\" value=\"1\" /><input type=\"hidden\" name=\"sc\" value=\"$showchanged\" /></form>"; |
$hidden = '<input type="hidden" name="manualorder" value="1" />'; |
# safe paths are a hack for fixing XSS sploit |
$vars["path1"] = $path1; |
$vars['safepath1'] = htmlentities($path1); |
$vars["path2"] = $path2; |
$vars['safepath2'] = htmlentities($path2); |
if ($config->multiViews) |
{ |
$hidden .= '<input type="hidden" name="op" value="comp"/>'; |
} |
else |
{ |
$hidden .= '<input type="hidden" name="repname" value="'.$repname.'" />'; |
} |
$vars["rev1"] = $rev1; |
$vars["rev2"] = $rev2; |
$vars['compare_form'] = '<form method="get" action="'.$url.'" id="compare">'.$hidden; |
$vars['compare_path1input'] = '<input type="text" size="40" name="compare[0]" value="'.escape($path1).'" />'; |
$vars['compare_path2input'] = '<input type="text" size="40" name="compare[1]" value="'.escape($path2).'" />'; |
$vars['compare_rev1input'] = '<input type="text" size="5" name="compare_rev[0]" value="'.$rev1.'" />'; |
$vars['compare_rev2input'] = '<input type="text" size="5" name="compare_rev[1]" value="'.$rev2.'" />'; |
$vars['compare_submit'] = '<input name="comparesubmit" type="submit" value="'.$lang['COMPAREPATHS'].'" />'; |
$vars['compare_endform'] = '</form>'; |
$vars['safepath1'] = escape($path1); |
$vars['safepath2'] = escape($path2); |
$vars['rev1'] = $rev1; |
$vars['rev2'] = $rev2; |
$history1 = $svnrep->getLog($path1, $rev1, 0, false, 1); |
if (!$history1) |
{ |
renderTemplate404('compare','NOPATH'); |
} |
else |
{ |
$history2 = $svnrep->getLog($path2, $rev2, 0, false, 1); |
if (!$history2) |
{ |
renderTemplate404('compare','NOPATH'); |
} |
} |
// Set variables used for the more recent of the two revisions |
$history = ($rev1 >= $rev2 ? $history1 : $history2); |
if ($history && $history->curEntry) |
{ |
$logEntry = $history->curEntry; |
$vars['rev'] = $logEntry->rev; |
$vars['peg'] = $peg; |
$vars['date'] = $logEntry->date; |
$vars['age'] = datetimeFormatDuration(time() - strtotime($logEntry->date)); |
$vars['author'] = $logEntry->author; |
$vars['log'] = xml_entities($logEntry->msg); |
} |
else |
{ |
$vars['warning'] = 'Problem with comparison.'; |
} |
$noinput = empty($path1) || empty($path2); |
$listing = array(); |
// Generate the diff listing |
$path1 = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $svnrep->repConfig->path.$path1)); |
$path2 = encodepath(str_replace(DIRECTORY_SEPARATOR, "/", $svnrep->repConfig->path.$path2)); |
$relativePath1 = $path1; |
$relativePath2 = $path2; |
$svnpath1 = encodepath($svnrep->getSvnPath(str_replace(DIRECTORY_SEPARATOR, '/', $path1 ?? ''))); |
$svnpath2 = encodepath($svnrep->getSvnPath(str_replace(DIRECTORY_SEPARATOR, '/', $path2 ?? ''))); |
$debug = false; |
if (!$noinput) |
{ |
$cmd = $config->getSvnCommand().$rep->svnCredentials().' diff '.($ignoreWhitespace ? '-x "-w --ignore-eol-style" ' : '').quote($svnpath1.'@'.$rev1).' '.quote($svnpath2.'@'.$rev2); |
$rawcmd = $config->svn." diff ".$rep->svnParams().quote($path1."@".$rev1)." ".quote($path2."@".$rev2); |
$cmd = quoteCommand($rawcmd, true); |
if ($debug) echo "$cmd\n"; |
} |
function clearVars() |
{ |
global $ignoreWhitespace, $listing, $index; |
global $listing, $index; |
if ($ignoreWhitespace && $index > 1) |
{ |
$endBlock = false; |
$previous = $index - 1; |
if ($listing[$previous]['endpath']) $endBlock = 'newpath'; |
else if ($listing[$previous]['enddifflines']) $endBlock = 'difflines'; |
if ($endBlock !== false) |
{ |
// check if block ending at previous contains real diff data |
$i = $previous; |
$containsOnlyEqualDiff = true; |
$addedLines = array(); |
$removedLines = array(); |
while ($i >= 0 && !$listing[$i - 1][$endBlock]) |
{ |
$diffclass = $listing[$i - 1]['diffclass']; |
if ($diffclass !== 'diffadded' && $diffclass !== 'diffdeleted') |
{ |
if ($addedLines !== $removedLines) |
{ |
$containsOnlyEqualDiff = false; |
break; |
$listing[$index]["newpath"] = null; |
$listing[$index]["endpath"] = null; |
$listing[$index]["info"] = null; |
$listing[$index]["diffclass"] = null; |
$listing[$index]["difflines"] = null; |
$listing[$index]["enddifflines"] = null; |
$listing[$index]["properties"] = null; |
} |
} |
if (count($addedLines) > 0 && $addedLines === $removedLines) |
{ |
$addedLines = array(); |
$removedLines = array(); |
} |
$vars["success"] = false; |
if ($diffclass === 'diff') |
{ |
$i--; |
continue; |
} |
if ($diffclass === null) |
{ |
$containsOnlyEqualDiff = false; |
break;; |
} |
if ($diffclass === 'diffdeleted') |
{ |
if (count($addedLines) <= count($removedLines)) |
{ |
$containsOnlyEqualDiff = false; |
break;; |
} |
array_unshift($removedLines, $listing[$i - 1]['line']); |
$i--; |
continue; |
} |
if ($diffclass === 'diffadded') |
{ |
if (count($removedLines) > 0) |
{ |
$containsOnlyEqualDiff = false; |
break;; |
} |
array_unshift($addedLines, $listing[$i - 1]['line']); |
$i--; |
continue; |
} |
assert(false); |
} |
if ($containsOnlyEqualDiff) |
{ |
$containsOnlyEqualDiff = $addedLines === $removedLines; |
} |
// remove blocks which only contain diffclass=diff and equal removes and adds |
if ($containsOnlyEqualDiff) |
{ |
for ($j = $i - 1; $j < $index; $j++) |
{ |
unset($listing[$j]); |
} |
$index = $i - 1; |
} |
} |
} |
$listvar = &$listing[$index]; |
$listvar['newpath'] = null; |
$listvar['endpath'] = null; |
$listvar['info'] = null; |
$listvar['diffclass'] = null; |
$listvar['difflines'] = null; |
$listvar['enddifflines'] = null; |
$listvar['properties'] = null; |
} |
$vars['success'] = false; |
if (!$noinput) |
{ |
// TODO: Report warning/error if comparison encounters any problems |
if ($diff = popenCommand($cmd, 'r')) |
if ($diff = popen($cmd, "r")) |
{ |
$listing = array(); |
$index = 0; |
$indiff = false; |
$indiffproper = false; |
$getLine = true; |
$node = null; |
$bufferedLine = false; |
$vars['success'] = true; |
$vars["success"] = true; |
while (!feof($diff)) |
{ |
if ($getLine) |
{ |
if ($bufferedLine === false) |
{ |
$bufferedLine = rtrim(fgets($diff), "\n\r"); |
} |
$line = fgets($diff); |
$newlineR = strpos($bufferedLine, "\r"); |
$newlineN = strpos($bufferedLine, "\n"); |
if ($newlineR === false && $newlineN === false) |
{ |
$line = $bufferedLine; |
$bufferedLine = false; |
} |
else |
{ |
$newline = ($newlineR < $newlineN ? $newlineR : $newlineN); |
$line = substr($bufferedLine, 0, $newline); |
$bufferedLine = substr($bufferedLine, $newline + 1); |
} |
} |
clearVars(); |
$getLine = true; |
if ($debug) print 'Line = "'.$line.'"<br />'; |
if ($debug) print "Line = '$line'<br />" ; |
if ($indiff) |
{ |
// If we're in a diff proper, just set up the line |
if ($indiffproper) |
{ |
if (strlen($line) > 0 && ($line[0] == ' ' || $line[0] == '+' || $line[0] == '-')) |
if ($line[0] == " " || $line[0] == "+" || $line[0] == "-") |
{ |
$subline = escape(toOutputEncoding(substr($line, 1))); |
$subline = rtrim($subline, "\n\r"); |
$subline = ($subline) ? expandTabs($subline) : ' '; |
$listvar = &$listing[$index]; |
$listvar['line'] = $subline; |
switch ($line[0]) |
{ |
case ' ': |
$listvar['diffclass'] = 'diff'; |
if ($debug) print 'Including as diff: '.$subline.'<br />'; |
case " ": |
$listing[$index]["diffclass"] = "diff"; |
$subline = hardspace(replaceEntities(rtrim(substr($line, 1)), $rep)); |
if (empty($subline)) $subline = " "; |
$listing[$index++]["line"] = $subline; |
if ($debug) print "Including as diff: $subline<br />"; |
break; |
case '+': |
$listvar['diffclass'] = 'diffadded'; |
if ($debug) print 'Including as added: '.$subline.'<br />'; |
case "+": |
$listing[$index]["diffclass"] = "diffadded"; |
$subline = hardspace(replaceEntities(rtrim(substr($line, 1)), $rep)); |
if (empty($subline)) $subline = " "; |
$listing[$index++]["line"] = $subline; |
if ($debug) print "Including as added: $subline<br />"; |
break; |
case '-': |
$listvar['diffclass'] = 'diffdeleted'; |
if ($debug) print 'Including as removed: '.$subline.'<br />'; |
case "-": |
$listing[$index]["diffclass"] = "diffdeleted"; |
$subline = hardspace(replaceEntities(rtrim(substr($line, 1)), $rep)); |
if (empty($subline)) $subline = " "; |
$listing[$index++]["line"] = $subline; |
if ($debug) print "Including as removed: $subline<br />"; |
break; |
} |
$index++; |
continue; |
} |
else if ($line != '\ No newline at end of file') |
else |
{ |
$indiffproper = false; |
$listing[$index++]['enddifflines'] = true; |
$listing[$index++]["enddifflines"] = true; |
$getLine = false; |
if ($debug) print 'Ending lines<br />'; |
} |
if ($debug) print "Ending lines<br />"; |
continue; |
} |
} |
// Check for the start of a new diff area |
if (!strncmp($line, '@@', 2)) |
if (!strncmp($line, "@@", 2)) |
{ |
$pos = strpos($line, '+'); |
$pos = strpos($line, "+"); |
$posline = substr($line, $pos); |
$sline = 0; |
$eline = 0; |
sscanf($posline, '+%d,%d', $sline, $eline); |
if ($debug) print 'sline = "'.$sline.'", eline = "'.$eline.'"<br />'; |
sscanf($posline, "+%d,%d", $sline, $eline); |
if ($debug) print "sline = '$sline', eline = '$eline'<br />"; |
// Check that this isn't a file deletion |
if ($sline == 0 && $eline == 0) |
{ |
$line = fgets($diff); |
if ($debug) print 'Ignoring: "'.$line.'"<br />'; |
while ($line && ($line[0] == ' ' || $line[0] == '+' || $line[0] == '-')) |
if ($debug) print "Ignoring: $line<br />" ; |
while ($line[0] == " " || $line[0] == "+" || $line[0] == "-") |
{ |
$line = fgets($diff); |
if ($debug) print 'Ignoring: "'.$line.'"<br />'; |
if ($debug) print "Ignoring: $line<br />" ; |
} |
$getLine = false; |
if ($debug) print 'Unignoring previous - marking as deleted<br />'; |
$listing[$index++]['info'] = $lang['FILEDELETED']; |
if ($debug) print "Unignoring previous - marking as deleted<b>"; |
$listing[$index++]["info"] = $lang["FILEDELETED"]; |
} |
else |
{ |
$listvar = &$listing[$index]; |
$listvar['difflines'] = $line; |
$sline = 0; |
$slen = 0; |
$eline = 0; |
$elen = 0; |
sscanf($line, '@@ -%d,%d +%d,%d @@', $sline, $slen, $eline, $elen); |
$listvar['rev1line'] = $sline; |
$listvar['rev1len'] = $slen; |
$listvar['rev2line'] = $eline; |
$listvar['rev2len'] = $elen; |
$listing[$index++]["difflines"] = $line; |
$indiffproper = true; |
$index++; |
} |
continue; |
} |
else |
{ |
$indiff = false; |
if ($debug) print 'Ending diff'; |
if ($debug) print "Ending diff"; |
} |
} |
// Check for a new node entry |
if (strncmp(trim($line), 'Index: ', 7) == 0) |
if (strncmp(trim($line), "Index: ", 7) == 0) |
{ |
// End the current node |
if ($node) |
{ |
$listing[$index++]['endpath'] = true; |
$listing[$index++]["endpath"] = true; |
clearVars(); |
} |
$node = trim(toOutputEncoding($line)); |
$node = trim($line); |
$node = substr($node, 7); |
if ($node == '' || $node[0] != '/') $node = '/'.$node; |
if (substr($path2, -strlen($node)) === $node) |
{ |
$absnode = $path2; |
} |
else |
{ |
$absnode = $path2; |
if (substr($absnode, -1) == '/') $absnode = substr($absnode, 0, -1); |
$absnode .= $node; |
} |
$listing[$index]["newpath"] = $node; |
if ($debug) echo "Creating node $node<br />"; |
$listvar = &$listing[$index]; |
$listvar['newpath'] = escape($absnode); |
$listvar['fileurl'] = $config->getURL($rep, $absnode, 'file').'rev='.$rev2; |
if ($debug) echo 'Creating node '.$node.'<br />'; |
// Skip past the line of ='s |
$line = fgets($diff); |
if ($debug) print 'Skipping: '.$line.'<br />'; |
if ($debug) print "Skipping: $line<br />" ; |
// Check for a file addition |
$line = fgets($diff); |
if ($debug) print 'Examining: '.$line.'<br />'; |
if (strpos($line, '(revision 0)')) |
{ |
$listvar['info'] = $lang['FILEADDED']; |
} |
if ($debug) print "Examining: $line<br />" ; |
if (strpos($line, "(revision 0)")) |
$listing[$index]["info"] = $lang["FILEADDED"]; |
if (strncmp(trim($line), 'Cannot display:', 15) == 0) |
if (strncmp(trim($line), "Cannot display:", 15) == 0) |
{ |
$index++; |
clearVars(); |
$listing[$index++]['info'] = escape(toOutputEncoding(rtrim($line, "\n\r"))); |
$listing[$index++]["info"] = $line; |
continue; |
} |
// Skip second file info |
$line = fgets($diff); |
if ($debug) print 'Skipping: '.$line.'<br />'; |
if ($debug) print "Skipping: $line<br />" ; |
$indiff = true; |
$index++; |
508,119 → 284,72 |
continue; |
} |
if (strncmp(trim($line), 'Property changes on: ', 21) == 0) |
if (strncmp(trim($line), "Property changes on: ", 21) == 0) |
{ |
$propnode = trim($line); |
$propnode = substr($propnode, 21); |
if ($propnode == '' || $propnode[0] != '/') $propnode = '/'.$propnode; |
if ($debug) print 'Properties on '.$propnode.' (cur node $ '.$node.')'; |
if ($debug) print "Properties on $propnode (cur node $ $node)"; |
if ($propnode != $node) |
{ |
if ($node) |
{ |
$listing[$index++]['endpath'] = true; |
$listing[$index++]["endpath"] = true; |
clearVars(); |
} |
$node = $propnode; |
$listing[$index++]['newpath'] = escape(toOutputEncoding($node)); |
$listing[$index++]["newpath"] = $node; |
clearVars(); |
} |
$listing[$index++]['properties'] = true; |
$listing[$index++]["properties"] = true; |
clearVars(); |
if ($debug) echo 'Creating node '.$node.'<br />'; |
if ($debug) echo "Creating node $node<br />"; |
// Skip the row of underscores |
$line = fgets($diff); |
if ($debug) print 'Skipping: '.$line.'<br />'; |
if ($debug) print "Skipping: $line<br />" ; |
while ($line = rtrim(fgets($diff), "\n\r")) |
while ($line = trim(fgets($diff))) |
{ |
if (!strncmp(trim($line), 'Index: ', 7)) |
{ |
break; |
} |
if (!strncmp(trim($line), '##', 2) || $line == '\ No newline at end of file') |
{ |
continue; |
} |
$listing[$index++]['info'] = escape(toOutputEncoding($line)); |
$listing[$index++]["info"] = $line; |
clearVars(); |
} |
$getLine = false; |
continue; |
} |
// Check for error messages |
if (strncmp(trim($line), 'svn: ', 5) == 0) |
if (strncmp(trim($line), "svn: ", 5) == 0) |
{ |
$listing[$index++]['info'] = urldecode($line); |
$vars['success'] = false; |
$listing[$index++]["info"] = urldecode($line); |
$vars["success"] = false; |
continue; |
} |
$listing[$index++]['info'] = escape(toOutputEncoding($line)); |
$listing[$index++]["info"] = $line; |
if (strlen($line) === 0) |
{ |
if (!isset($vars['warning'])) |
{ |
$vars['warning'] = "No changes between revisions"; |
} |
} |
} |
if ($node) |
{ |
clearVars(); |
$listing[$index++]['endpath'] = true; |
$listing[$index++]["endpath"] = true; |
} |
if ($debug) print_r($listing); |
if (!$rep->hasUnrestrictedReadAccess($relativePath1) || !$rep->hasUnrestrictedReadAccess($relativePath2, false)) |
{ |
// check every item for access and remove it if read access is not allowed |
$restricted = array(); |
$inrestricted = false; |
foreach ($listing as $i => $item) |
{ |
if ($item['newpath'] !== null) |
{ |
$newpath = $item['newpath']; |
$inrestricted = !$rep->hasReadAccess($newpath, false); |
} |
if ($inrestricted) |
{ |
$restricted[] = $i; |
} |
if ($item['endpath'] !== null) |
{ |
$inrestricted = false; |
} |
} |
$vars["version"] = $version; |
foreach ($restricted as $i) |
{ |
unset($listing[$i]); |
} |
if (!$rep->hasUnrestrictedReadAccess($path1) || !$rep->hasUnrestrictedReadAccess($path2, false)) |
$vars["noaccess"] = true; |
if (count($restricted) && !count($listing)) |
{ |
$vars['error'] = $lang['NOACCESS']; |
sendHeaderForbidden(); |
} |
} |
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."compare.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing); |
pclose($diff); |
} |
} |
renderTemplate('compare'); |
?> |
/WebSVN/diff.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
23,212 → 25,334 |
// Show the differences between 2 revisions of a file. |
// |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/utils.php'; |
require_once 'include/template.php'; |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
require_once("include/utils.inc"); |
require_once("include/template.inc"); |
require_once 'include/diff_inc.php'; |
$context = 5; |
$vars['action'] = $lang['DIFF']; |
$all = (@$_REQUEST['all'] == 1); |
$ignoreWhitespace = $config->getIgnoreWhitespacesInDiff(); |
$vars["action"] = $lang["DIFF"]; |
$all = (@$_REQUEST["all"] == 1)?1:0; |
if (array_key_exists('ignorews', $_REQUEST)) |
{ |
$ignoreWhitespace = (bool)$_REQUEST['ignorews']; |
} |
// Make sure that we have a repository |
if (!$rep) |
if (!isset($rep)) |
{ |
renderTemplate404('diff','NOREP'); |
echo $lang["NOREP"]; |
exit; |
} |
$svnrep = new SVNRepository($rep); |
// If there's no revision info, go to the lastest revision for this path |
$history = $svnrep->getLog($path, 'HEAD', 1, true, 2, ($path == '/') ? '' : $peg); |
$history = $svnrep->getLog($path, "", "", true); |
$youngest = $history->entries[0]->rev; |
if (!$history) |
{ |
unset($vars['error']); |
$history = $svnrep->getLog($path, '', '', true, 2, ($path == '/') ? '' : $peg); |
} |
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : false; |
if (empty($rev)) |
{ |
$rev = $youngest; |
} |
$history = $svnrep->getLog($path, $rev, 1, false, 2, $peg); |
$history = $svnrep->getLog($path, $rev); |
if ($path[0] != '/') |
{ |
$ppath = '/'.$path; |
} |
if ($path{0} != "/") |
$ppath = "/".$path; |
else |
{ |
$ppath = $path; |
} |
$prevrev = @$history->entries[1]->rev; |
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath)); |
$vars['safepath'] = escape($ppath); |
$vars['rev1'] = $rev; |
$vars['rev2'] = $prevrev; |
$vars['prevrev'] = $prevrev; |
$vars["repname"] = $rep->getDisplayName(); |
$vars["rev"] = $rev; |
$vars["path"] = $ppath; |
$vars["prevrev"] = $prevrev; |
if (isset($history->entries[0])) |
$vars["rev1"] = $history->entries[0]->rev; |
$vars["rev2"] = $prevrev; |
createDirLinks($rep, $ppath, $rev, $showchanged); |
$listing = array(); |
if ($prevrev) |
{ |
$vars['log'] = xml_entities($history->entries[0]->msg); |
$vars['date'] = $history->entries[0]->date; |
$vars['age'] = datetimeFormatDuration(time() - strtotime($history->entries[0]->date)); |
$vars['author'] = $history->entries[0]->author; |
$vars['rev'] = $vars['rev1'] = $history->entries[0]->rev; |
$vars['peg'] = $peg; |
$url = $config->getURL($rep, $path, "diff"); |
if (!$all) |
{ |
$vars["showalllink"] = "<a href=\"${url}rev=$rev&sc=$showchanged&all=1\">${lang["SHOWENTIREFILE"]}</a>"; |
$vars["showcompactlink"] = ""; |
} |
else |
{ |
$vars["showcompactlink"] = "<a href=\"${url}rev=$rev&sc=$showchanged&all=0\">${lang["SHOWCOMPACT"]}</a>"; |
$vars["showalllink"] = ""; |
} |
createPathLinks($rep, $ppath, $passrev, $peg); |
$passRevString = createRevAndPegString($rev, $peg); |
// Get the contents of the two files |
$newtname = tempnam("temp", ""); |
$new = $svnrep->getFileContents($history->entries[0]->path, $newtname, $history->entries[0]->rev, "", true); |
$passIgnoreWhitespace = ''; |
if ($ignoreWhitespace != $config->getIgnoreWhitespacesInDiff()) |
$oldtname = tempnam("temp", ""); |
$old = $svnrep->getFileContents($history->entries[1]->path, $oldtname, $history->entries[1]->rev, "", true); |
$ent = true; |
$extension = strrchr(basename($path), "."); |
if (($extension && isset($extEnscript[$extension]) && ('php' == $extEnscript[$extension])) || ($config->useEnscript)) |
$ent = false; |
$file1cache = array(); |
if ($all) |
$context = 1; // Setting the context to 0 makes diff generate the wrong line numbers! |
// Open a pipe to the diff command with $context lines of context |
$cmd = quoteCommand($config->diff." --ignore-all-space -U $context $oldtname $newtname", false); |
if ($all) |
{ |
$passIgnoreWhitespace = '&ignorews='.($ignoreWhitespace ? '1' : '0'); |
$ofile = fopen($oldtname, "r"); |
$nfile = fopen($newtname, "r"); |
} |
if ($rev != $youngest) |
if ($diff = popen($cmd, "r")) |
{ |
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'diff').createRevAndPegString('', $peg).$passIgnoreWhitespace; |
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>'; |
} |
// Ignore the 3 header lines |
$line = fgets($diff); |
$line = fgets($diff); |
$revurl = $config->getURL($rep, $path, 'diff'); |
// Get the first real line |
$line = fgets($diff); |
if ($rev < $youngest) |
$index = 0; |
$listing = array(); |
$curoline = 1; |
$curnline = 1; |
while (!feof($diff)) |
{ |
$history2 = $svnrep->getLog($path, $rev, $youngest, true, 2, $peg ? $peg : 'HEAD'); |
// Get the first line of this range |
sscanf($line, "@@ -%d", $oline); |
if (isset($history2->entries[1])) |
$line = substr($line, strpos($line, "+")); |
sscanf($line, "+%d", $nline); |
if ($all) |
{ |
$nextRev = $history2->entries[1]->rev; |
if ($nextRev != $youngest) |
while ($curoline < $oline || $curnline < $nline) |
{ |
$vars['nextrev'] = $nextRev; |
$vars['nextrevurl'] = $revurl.createRevAndPegString($nextRev, $peg).$passIgnoreWhitespace; |
$listing[$index]["rev1diffclass"] = "diff"; |
$listing[$index]["rev2diffclass"] = "diff"; |
if ($curoline < $oline) |
{ |
$nl = fgets($ofile); |
if ($ent) |
$line = replaceEntities(rtrim($nl), $rep); |
else |
$line = rtrim($nl); |
$listing[$index]["rev1line"] = hardspace($line); |
$curoline++; |
} |
else |
$listing[$index]["rev1line"] = " "; |
if ($curnline < $nline) |
{ |
$nl = fgets($nfile); |
if ($ent) |
$line = replaceEntities(rtrim($nl), $rep); |
else |
$line = rtrim($nl); |
$listing[$index]["rev2line"] = hardspace($line); |
$curnline++; |
} |
else |
$listing[$index]["rev2line"] = " "; |
unset($vars['error']); |
$listing[$index]["rev1lineno"] = 0; |
$listing[$index]["rev2lineno"] = 0; |
$index++; |
} |
} |
else |
{ |
// Output the line numbers |
$listing[$index]["rev1lineno"] = "$oline"; |
$listing[$index]["rev2lineno"] = "$nline"; |
$index++; |
} |
if (isset($history->entries[1])) |
$fin = false; |
while (!feof($diff) && !$fin) |
{ |
$prevRev = $history->entries[1]->rev; |
$prevPath = $history->entries[1]->path; |
$vars['prevrev'] = $prevRev; |
$vars['prevrevurl'] = $revurl.createRevAndPegString($prevRev, $peg).$passIgnoreWhitespace; |
$listing[$index]["rev1lineno"] = 0; |
$listing[$index]["rev2lineno"] = 0; |
$line = fgets($diff); |
if (!strncmp($line, "@@", 2)) |
{ |
$fin = true; |
} |
else |
{ |
$mod = $line{0}; |
$vars['revurl'] = $config->getURL($rep, $path, 'revision').$passRevString; |
$vars['revlink'] = '<a href="'.$vars['revurl'].'">'.$lang['LASTMOD'].'</a>'; |
if ($ent) |
$line = replaceEntities(rtrim(substr($line, 1)), $rep); |
else |
$line = rtrim(substr($line, 1)); |
$vars['logurl'] = $config->getURL($rep, $path, 'log').$passRevString; |
$vars['loglink'] = '<a href="'.$vars['logurl'].'">'.$lang['VIEWLOG'].'</a>'; |
$listing[$index]["rev1line"] = hardspace($line); |
$vars['filedetailurl'] = $config->getURL($rep, $path, 'file').$passRevString; |
$vars['filedetaillink'] = '<a href="'.$vars['filedetailurl'].'">'.$lang['FILEDETAIL'].'</a>'; |
$text = hardspace($line); |
if ($text == "") $text = " "; |
$vars['blameurl'] = $config->getURL($rep, $path, 'blame').$passRevString; |
$vars['blamelink'] = '<a href="'.$vars['blameurl'].'">'.$lang['BLAME'].'</a>'; |
switch ($mod) |
{ |
case "-": |
$listing[$index]["rev1diffclass"] = "diffdeleted"; |
$listing[$index]["rev2diffclass"] = "diff"; |
if ($rep->isRssEnabled()) |
$listing[$index]["rev1line"] = $text; |
$listing[$index]["rev2line"] = " "; |
if ($all) |
{ |
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').createRevAndPegString('', $peg); |
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>'; |
fgets($ofile); |
$curoline++; |
} |
// Check for binary file type before diffing. |
$svnMimeType = $svnrep->getProperty($path, 'svn:mime-type', $rev); |
break; |
// If no previous revision exists, bail out before diffing |
if (!$rep->getIgnoreSvnMimeTypes() && preg_match('~application/*~', $svnMimeType)) |
case "+": |
// Try to mark "changed" line sensibly |
if (!empty($listing[$index-1]) && empty($listing[$index-1]["rev1lineno"]) && @$listing[$index-1]["rev1diffclass"] == "diffdeleted" && @$listing[$index-1]["rev2diffclass"] == "diff") |
{ |
$vars['warning'] = 'Cannot display diff of binary file. (svn:mime-type = '.$svnMimeType.')'; |
$i = $index - 1; |
while (!empty($listing[$i-1]) && empty($listing[$i-1]["rev1lineno"]) && $listing[$i-1]["rev1diffclass"] == "diffdeleted" && $listing[$i-1]["rev2diffclass"] == "diff") |
$i--; |
} |
else if (!$prevrev) |
$listing[$i]["rev1diffclass"] = "diffchanged"; |
$listing[$i]["rev2diffclass"] = "diffchanged"; |
$listing[$i]["rev2line"] = $text; |
if ($all) |
{ |
$vars['noprev'] = 1; |
fgets($nfile); |
$curnline++; |
} |
// Don't increment the current index count |
$index--; |
} |
else |
{ |
$diff = $config->getURL($rep, $path, 'diff').$passRevString; |
$listing[$index]["rev1diffclass"] = "diff"; |
$listing[$index]["rev2diffclass"] = "diffadded"; |
$listing[$index]["rev1line"] = " "; |
$listing[$index]["rev2line"] = $text; |
if ($all) |
{ |
$vars['showcompactlink'] = '<a href="'.$diff.$passIgnoreWhitespace.'">'.$lang['SHOWCOMPACT'].'</a>'; |
fgets($nfile); |
$curnline++; |
} |
else |
{ |
$vars['showalllink'] = '<a href="'.$diff.$passIgnoreWhitespace.'&all=1'.'">'.$lang['SHOWENTIREFILE'].'</a>'; |
} |
break; |
$passShowAll = ($all ? '&all=1' : ''); |
$toggleIgnoreWhitespace = ''; |
default: |
$listing[$index]["rev1diffclass"] = "diff"; |
$listing[$index]["rev2diffclass"] = "diff"; |
if ($ignoreWhitespace == $config->getIgnoreWhitespacesInDiff()) |
$listing[$index]["rev1line"] = $text; |
$listing[$index]["rev2line"] = $text; |
if ($all) |
{ |
$toggleIgnoreWhitespace = '&ignorews='.($ignoreWhitespace ? '0' : '1'); |
fgets($ofile); |
fgets($nfile); |
$curoline++; |
$curnline++; |
} |
if ($ignoreWhitespace) |
{ |
$vars['regardwhitespacelink'] = '<a href="'.$diff.$passShowAll.$toggleIgnoreWhitespace.'">'.$lang['REGARDWHITESPACE'].'</a>'; |
break; |
} |
else |
{ |
$vars['ignorewhitespacelink'] = '<a href="'.$diff.$passShowAll.$toggleIgnoreWhitespace.'">'.$lang['IGNOREWHITESPACE'].'</a>'; |
} |
// Get the contents of the two files |
$newerFile = tempnamWithCheck($config->getTempDir(), ''); |
$newerFileHl = $newerFile.'highlight'; |
$normalNew = $svnrep->getFileContents($history->entries[0]->path, $newerFile, $history->entries[0]->rev, $peg, '', 'no'); |
$highlightedNew = $svnrep->getFileContents($history->entries[0]->path, $newerFileHl, $history->entries[0]->rev, $peg, '', 'line'); |
if (!$fin) |
$index++; |
} |
} |
$olderFile = tempnamWithCheck($config->getTempDir(), ''); |
$olderFileHl = $olderFile.'highlight'; |
$normalOld = $svnrep->getFileContents($history->entries[0]->path, $olderFile, $history->entries[1]->rev, $peg, '', 'no'); |
$highlightedOld = $svnrep->getFileContents($history->entries[0]->path, $olderFileHl, $history->entries[1]->rev, $peg, '', 'line'); |
// TODO: Figured out why diffs across a move/rename are currently broken. |
// Output the rest of the files |
if ($all) |
{ |
while (!feof($ofile) || !feof($nfile)) |
{ |
$listing[$index]["rev1diffclass"] = "diff"; |
$listing[$index]["rev2diffclass"] = "diff"; |
$highlighted = ($highlightedNew && $highlightedOld); |
if ($ent) |
$line = replaceEntities(rtrim(fgets($ofile)), $rep); |
else |
$line = rtrim(fgets($ofile)); |
if ($highlighted) |
{ |
$listing = do_diff($all, $ignoreWhitespace, $highlighted, $newerFile, $olderFile, $newerFileHl, $olderFileHl); |
if (!feof($ofile)) |
$listing[$index]["rev1line"] = hardspace($line); |
else |
$listing[$index]["rev1line"] = " "; |
if ($ent) |
$line = replaceEntities(rtrim(fgets($nfile)), $rep); |
else |
$line = rtrim(fgets($nfile)); |
if (!feof($nfile)) |
$listing[$index]["rev2line"] = hardspace($line); |
else |
$listing[$index]["rev2line"] = " "; |
$listing[$index]["rev1lineno"] = 0; |
$listing[$index]["rev2lineno"] = 0; |
$index++; |
} |
else |
} |
pclose($diff); |
} |
if ($all) |
{ |
$listing = do_diff($all, $ignoreWhitespace, $highlighted, $newerFile, $olderFile, null, null); |
fclose($ofile); |
fclose($nfile); |
} |
// Remove our temporary files |
@unlink($newerFile); |
@unlink($olderFile); |
@unlink($newerFileHl); |
@unlink($olderFileHl); |
unlink($oldtname); |
unlink($newtname); |
} |
if (!$rep->hasReadAccess($path, false)) |
else |
{ |
$vars['error'] = $lang['NOACCESS']; |
sendHeaderForbidden(); |
$vars["noprev"] = 1; |
} |
renderTemplate('diff'); |
$vars["version"] = $version; |
if (!$rep->hasReadAccess($path, false)) |
$vars["noaccess"] = true; |
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."diff.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing); |
?> |
/WebSVN/form.php |
---|
0,0 → 1,66 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// form.php |
// |
// Handling of WebSVN forms |
require_once("include/setup.inc"); |
require_once("include/utils.inc"); |
// Generic redirect handling |
function redirect($loc) |
{ |
$url= getFullURL($loc); |
# technically, a die(header('Location: '.$url)); would suffice for all web browsers... ~J |
header("Location: $url"); |
echo "<html>\n <head>\n <title>Redirecting...</title>\n <meta http-equiv='refresh' content='0; url=$url' /> |
<script type='application/x-javascript'><![CDATA[ window.location.href = '$url'; ]]></script> |
</head> |
<body> |
<p>If you are not automatically redirected, please click <a href='$url'>here</a> to continue.</p> |
</body>\n</html>"; |
} |
// Handle project selection |
if (@$_REQUEST["selectproj"]) |
{ |
$basedir = dirname($_SERVER["PHP_SELF"]); |
if ($basedir != "" && $basedir != DIRECTORY_SEPARATOR && $basedir != "\\" && $basedir != "/" ) |
$basedir .= "/"; |
else |
$basedir = "/"; |
$url = $config->getURL($rep, "/", "dir"); |
$url = html_entity_decode($url); |
if ($config->multiViews) |
redirect($url."sc=$showchanged"); |
else |
redirect($basedir.$url."sc=$showchanged"); |
} |
?> |
/WebSVN/index.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
20,100 → 22,91 |
// |
// index.php |
// |
// Main page which lists all configured repositories (optionally by groups). |
// Main page. Lists all the projects |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/template.php'; |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
require_once("include/template.inc"); |
$vars['action'] = $lang['PROJECTS']; |
$vars['repname'] = ''; |
$vars['rev'] = 0; |
$vars['path'] = ''; |
$vars['safepath'] = escape(''); |
$vars['showlastmod'] = $config->showLastModInIndex(); |
$vars["action"] = $lang["PROJECTS"]; |
$vars["repname"] = ""; |
$vars["rev"] = 0; |
$vars["path"] = ""; |
// Sort the repositories by group |
$config->sortByGroup(); |
if ($config->flatIndex) |
{ |
// Create the flat view |
$projects = $config->getRepositories(); |
$i = 0; |
$listing = array (); |
foreach ($projects as $project) |
{ |
if ($project->hasReadAccess("/", true)) |
{ |
$url = $config->getURL($project, "/", "dir"); |
if (count($projects) == 1 && $projects[0]->hasReadAccess('/')) { |
header('Location: '.str_replace('&', '', $config->getURL($projects[0], '', 'dir'))); |
exit; |
$listing[$i]["rowparity"] = $i % 2; |
$listing[$i++]["projlink"] = "<a href=\"${url}sc=0\">".$project->getDisplayName()."</a>"; |
} |
} |
$vars["flatview"] = true; |
$vars["treeview"] = false; |
} |
else |
{ |
// Create the tree view |
$projects = $config->getRepositories(); |
reset($projects); |
$i = 0; |
$parity = 0; // Alternates between every entry, whether it is a group or project |
$groupparity = 0; // The first project (and first of any group) resets this to 0 |
$curgroup = null; |
$groupcount = 0; |
$listing = array (); |
$curgroup = NULL; |
$parity = 0; |
foreach ($projects as $project) |
{ |
if ($project->hasReadAccess("/", true)) |
{ |
$listing[$i]["rowparity"] = $parity % 2; |
$url = $config->getURL($project, "/", "dir"); |
if ($curgroup != $project->group) |
{ |
# TODO: this should be de-soupified |
if (!empty($curgroup)) |
$listing[$i]["listitem"] = "</div>\n"; // Close the switchcontent div |
else |
$listing[$i]["listitem"] = ""; |
// Create listing of all configured projects (includes groups if they are used). |
foreach ($projects as $project) { |
if (!$project->hasReadAccess('/')) |
continue; |
$listing[$i]["isprojlink"] = false; |
$listing[$i]["isgrouphead"] = true; |
$listvar = &$listing[$i]; |
// If this is the first project in a group, add an entry for the group. |
if ($curgroup != $project->group) { |
$groupcount++; |
$groupparity = 0; |
$listvar['notfirstgroup'] = !empty($curgroup); |
$curgroup = $project->group; |
$listvar['groupname'] = $curgroup; // Applies until next group is set. |
$listvar['groupid'] = strtr(base64_encode('grp'.$curgroup), array('+' => '-', '/' => '_', '=' => '')); |
// setting to null because template.php won't unset them |
$listvar['projectlink'] = null; |
$listvar['projectname'] = null; |
$listvar['projecturl'] = null; |
$i++; // Causes the subsequent lines to store data in the next array slot. |
$listvar = &$listing[$i]; |
$listvar['groupid'] = null; |
$listing[$i++]["listitem"] .= "<div class=\"groupname\" onclick=\"expandcontent(this, '$curgroup');\" style=\"cursor:hand; cursor:pointer\"><div class=\"a\"><span class=\"showstate\"></span>$curgroup</div></div>\n<div id=\"$curgroup\" class=\"switchcontent\">"; |
} |
$listvar['clientrooturl'] = $project->clientRootURL; |
// Populate variables for latest modification to the current repository |
if ($config->showLastModInIndex()) { |
$svnrep = new SVNRepository($project); |
$log = $svnrep->getLog('/', '', '', true, 1); |
if (isset($log->entries[0])) { |
$head = $log->entries[0]; |
$listvar['revision'] = $head->rev; |
$listvar['date'] = $head->date; |
$listvar['age'] = datetimeFormatDuration(time() - strtotime($head->date)); |
$listvar['author'] = $head->author; |
} else { |
$listvar['revision'] = 0; |
$listvar['date'] = ''; |
$listvar['age'] = ''; |
$listvar['author'] = ''; |
$parity++; |
$listing[$i]["isgrouphead"] = false; |
$listing[$i]["isprojlink"] = true; |
$listing[$i++]["listitem"] = "<a href=\"${url}sc=0\">".$project->name."</a>\n"; |
} |
} |
// Create project (repository) listing |
$url = str_replace('&', '', $config->getURL($project, '', 'dir')); |
$name = ($config->flatIndex) ? $project->getDisplayName() : $project->name; |
$listvar['projectlink'] = '<a href="'.$url.'">'.escape($name).'</a>'; |
$listvar['projectname'] = escape($name); |
$listvar['projecturl'] = $url; |
$listvar['rowparity'] = $parity % 2; |
$parity++; |
$listvar['groupparity'] = $groupparity % 2; |
$groupparity++; |
$listvar['groupname'] = ($curgroup != null) ? $curgroup : ''; |
$i++; |
} |
if (!empty($curgroup)) |
$listing[$i]["isprojlink"] = false; |
$listing[$i]["isgrouphead"] = false; |
$listing[$i]["listitem"] = "</div>"; // Close the switchcontent div |
if (empty($listing) && !empty($projects)) { |
$vars['error'] = $lang['NOACCESS']; |
sendHeaderForbidden(); |
$vars["flatview"] = false; |
$vars["treeview"] = true; |
$vars["opentree"] = $config->openTree; |
} |
$vars['flatview'] = $config->flatIndex; |
$vars['treeview'] = !$config->flatIndex; |
$vars['opentree'] = $config->openTree; |
$vars['groupcount'] = $groupcount; // Indicates whether any groups were present. |
$vars["version"] = $version; |
parseTemplate($config->getTemplatePath()."header.tmpl", $vars, $listing); |
parseTemplate($config->getTemplatePath()."index.tmpl", $vars, $listing); |
parseTemplate($config->getTemplatePath()."footer.tmpl", $vars, $listing); |
renderTemplate('index'); |
?> |
/WebSVN/install.txt |
---|
0,0 → 1,216 |
WHY WebSVN? |
WebSVN offers a view onto your subversion repositories that's been designed |
to reflect the Subversion methodology. You can view the log of any file or |
directory and see a list of all the files changed, added or deleted in any |
given revision. You can also view the differences between 2 versions of a |
file so as to see exactly what was changed in a particular revision. |
WebSVN offers the following features: |
* Easy to use interface |
* Highly customisable templating system |
* Colourisation of file listings |
* Blame view |
* Log message searching |
* Fast browsing thanks to internal caching feature |
* Apache MultiViews support |
* RSS feed support |
Since it's written using PHP, WebSVN is also very portable and easy to install. |
INSTALLATION |
Grab the source and stick it somewhere that your server can get to. You |
obviously need to have PHP installed and working. Also note that WebSVN |
won't currently work in safe mode, due to the need to call svnlook. |
You'll also need diff (preferably the GNU version; for Windows users I'd |
recommend the Cygwin version) and svnlook available. |
Rename distconfig.inc as config.inc (found in the includes directory)and then |
edit it as directed in the file itself. |
If everything has gone well, you should be able to view your projects by |
pointing your browser at the index.php file. |
For those of you wishing to customise the look and feel a little, you should |
read templates.txt, which explains the highly configurable template system. |
Windows users - note that some of the features offered by WebSVN, when |
enabled, require the use of various external programs. They can be downloaded |
from these locations: |
Diff/Sed/Gzip/Tar: http://www.cygwin.com/ |
Enscript: http://people.ssh.com/mtr/genscript/ |
ACCENTED CHARACTERS |
WebSVN is designed to worked with accented characters. To do this, it uses |
the iconv function. This may not be installed on your system. If you aren't |
getting the characters that you expect, make sure that the iconv module is |
being loaded in php.ini. Windows users will need to copy the appropriate |
DLLs to the system directory (from the PHP installation directory). |
CACHING |
In order to return results with a reasonable speed, WebSVN caches the results |
of it's requests to svnlook. Under normal usage this works correctly since |
it's not generally possible to change a revision with subversion. |
That said, one case that may cause confusion is if someone changes the log |
message of a given revision. WebSVN will have cached the previous log message |
and won't know that there's a new one available. There are various solutions |
to this problem: |
1) Turn off caching in the config file. This will severely impede the |
perfomance of WebSVN. |
2) Change the post-revprop-change hook so that is deletes the contents of the |
cache after any change to a revision property |
3) Only allow the administrator to change revision properties. He can then |
delete the cache by hand should this occur. |
COLOURISATION |
You can few files with syntax colouring if you have Enscript 1.6 or higher |
installed on your system. You'll also need Sed. |
Simply set the paths in the config file and then uncomment the line: |
$config->useEnscript(); |
MULTIVIEWS |
You may choose to configure access to your repository via Apache's MultiView |
system. This will enable you to access a respositoy using a url such as: |
http://servername/wsvn/repname/path/in/repository |
To do this you must: |
- Place wsvn.php where you want to. Normally you place it such that it's |
accessible straight after the servername, as shown above. |
- Configure the parent directory of wsvn.php to use MultiViews (see Apache |
docs). |
- Change config.inc to include the line $config->useMultiViews(); |
- Change the paths configured at the beginning of the wsvn.php script. |
Now go to http://servername/wsvn/ and make sure that you get the index page. |
The repname part of the URL is the name given to it in the config.inc file. |
For this reason you may wish to avoid putting spaces in the name. |
MULTIVIEWS EXAMPLE |
First, you must get the Multiviews option working. In my set up, my Apache |
directory root is set to a location on my harddrive: |
DocumentRoot "D:/svnpage" |
In that directory, I have WebSVN installed in a directory called websvn. |
Normally WebSVN would be accessed by http://servername/websvn |
wsvn.php in then copied from the WebSVN installation to the document root |
directory and the variables at the beginning of the script configured as |
follows (based on your own directory locations, obviously): |
// Location of websvn directory via HTTP |
// |
// e.g. For http://servername/websvn use /websvn |
// |
// Note that wsvn.php need not be in the /websvn directory (and normally isn't). |
$locwebsvnhttp = "/websvn"; |
// Physical location of websvn directory |
$locwebsvnreal = "d:/svnpage/websvn"; |
Next, turn on Multiviews in the WebSVN config.inc file: |
$config->useMultiViews(); |
Finally, Apache needs to know that you want to enable MultiViews for the root |
directory. This can be done by including this line in the directory's |
.htaccess file (assuming that the appropriate AllowOverrides directive is set |
up): |
Options MultiViews |
If all has gone well, repositories should now by accessible by |
http://servername/wsvn/repname |
Note the index page can be accessed through http://servername/wsvn |
If you want to view the index page by http://servername/ you need to |
add another directive to the .htaccess file: |
DirectoryIndex wsvn.php |
ACCESS RIGHTS AND AUTHENTICATION |
You may wish to provide an authentication mechanism for WebSVN. One obvious |
solution is to protect the entire WebSVN directory with some form of Apache |
authentication mechanism, but that doesn't allow for per repository |
authentication. |
WebSVN provides and access rights mechanism that uses your SVN access file to |
control read access to the repository. This means that you only have to |
maintain one file to define both Subversion and WebSVN access rights. |
For this to work, you need to configure your authentication method to the /WebSVN/ |
(or /wsvn/) directory. This should be the same authentication as you use for |
the svn repositories themselves. Here's an example using SSPI: |
<Location /WebSVN/> |
AuthType SSPI |
SSPIAuth On |
SSPIAuthoritative On |
SSPIDomain IMAJEMAIL |
SSPIOfferBasic On |
Require valid-user |
</Location> |
Note the use of the / after /WebSVN/ in the location directive. If you use |
<Location /WebSVN> then you won't be able to access the index. |
You should change /WebSVN/ to /wsvn/ if you're using multiviews. |
Also note that you shouldn't use the AuthzSVNAccessFile command to define the |
access file. |
Now that you've defined your authentication, you'll be asked for your user name |
and password in order to access the WebSVN directory. All that's left is to |
configure WebSVN to use your Subversion access file to control access. Add this |
line to your config.inc file: |
$config->useAuthenticationFile("/path/to/accessfile"); |
Note that if your access file gives read access to, for example, path /a/b/c/ but |
not to /a/b/, then the user will be given restricted access to /a/b/ in order to |
reach /a/b/c/. The user will not be able to see any other files or directories in |
/a or /a/b/. |
You should read the Subversion book for information on the access file format. |
COMMON PROBLEMS |
1) On a Windows machine, this error is reported: |
Warning: shell_exec(): Unable to execute |
If you experience this problem, you need to give IUSR_<machinename> execute |
permissions on %systemroot%\system32\cmd.exe. Under most systems, the file will |
be C:\WINDOWS\system32\cmd.exe. |
Right-click on the file, choose properties, and on the security tab click |
the "Add" button. Add the IUSR_<machinename> user, and then select the |
"read" and "read & execute" boxes. |
LICENCE |
GNU Public licence. |
/WebSVN/licence.txt |
---|
0,0 → 1,280 |
GNU GENERAL PUBLIC LICENSE |
Version 2, June 1991 |
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
License is intended to guarantee your freedom to share and change free |
software--to make sure the software is free for all its users. This |
General Public License applies to most of the Free Software |
Foundation's software and to any other program whose authors commit to |
using it. (Some other Free Software Foundation software is covered by |
the GNU Library General Public License instead.) You can apply it to |
your programs, too. |
When we speak of free software, we are referring to freedom, not |
price. Our General Public Licenses are designed to make sure that you |
have the freedom to distribute copies of free software (and charge for |
this service if you wish), that you receive source code or can get it |
if you want it, that you can change the software or use pieces of it |
in new free programs; and that you know you can do these things. |
To protect your rights, we need to make restrictions that forbid |
anyone to deny you these rights or to ask you to surrender the rights. |
These restrictions translate to certain responsibilities for you if you |
distribute copies of the software, or if you modify it. |
For example, if you distribute copies of such a program, whether |
gratis or for a fee, you must give the recipients all the rights that |
you have. You must make sure that they, too, receive or can get the |
source code. And you must show them these terms so they know their |
rights. |
We protect your rights with two steps: (1) copyright the software, and |
(2) offer you this license which gives you legal permission to copy, |
distribute and/or modify the software. |
Also, for each author's protection and ours, we want to make certain |
that everyone understands that there is no warranty for this free |
software. If the software is modified by someone else and passed on, we |
want its recipients to know that what they have is not the original, so |
that any problems introduced by others will not reflect on the original |
authors' reputations. |
Finally, any free program is threatened constantly by software |
patents. We wish to avoid the danger that redistributors of a free |
program will individually obtain patent licenses, in effect making the |
program proprietary. To prevent this, we have made it clear that any |
patent must be licensed for everyone's free use or not licensed at all. |
The precise terms and conditions for copying, distribution and |
modification follow. |
GNU GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License applies to any program or other work which contains |
a notice placed by the copyright holder saying it may be distributed |
under the terms of this General Public License. The "Program", below, |
refers to any such program or work, and a "work based on the Program" |
means either the Program or any derivative work under copyright law: |
that is to say, a work containing the Program or a portion of it, |
either verbatim or with modifications and/or translated into another |
language. (Hereinafter, translation is included without limitation in |
the term "modification".) Each licensee is addressed as "you". |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running the Program is not restricted, and the output from the Program |
is covered only if its contents constitute a work based on the |
Program (independent of having been made by running the Program). |
Whether that is true depends on what the Program does. |
1. You may copy and distribute verbatim copies of the Program's |
source code as you receive it, in any medium, provided that you |
conspicuously and appropriately publish on each copy an appropriate |
copyright notice and disclaimer of warranty; keep intact all the |
notices that refer to this License and to the absence of any warranty; |
and give any other recipients of the Program a copy of this License |
along with the Program. |
You may charge a fee for the physical act of transferring a copy, and |
you may at your option offer warranty protection in exchange for a fee. |
2. You may modify your copy or copies of the Program or any portion |
of it, thus forming a work based on the Program, and copy and |
distribute such modifications or work under the terms of Section 1 |
above, provided that you also meet all of these conditions: |
a) You must cause the modified files to carry prominent notices |
stating that you changed the files and the date of any change. |
b) You must cause any work that you distribute or publish, that in |
whole or in part contains or is derived from the Program or any |
part thereof, to be licensed as a whole at no charge to all third |
parties under the terms of this License. |
c) If the modified program normally reads commands interactively |
when run, you must cause it, when started running for such |
interactive use in the most ordinary way, to print or display an |
announcement including an appropriate copyright notice and a |
notice that there is no warranty (or else, saying that you provide |
a warranty) and that users may redistribute the program under |
these conditions, and telling the user how to view a copy of this |
License. (Exception: if the Program itself is interactive but |
does not normally print such an announcement, your work based on |
the Program is not required to print an announcement.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Program, |
and can be reasonably considered independent and separate works in |
themselves, then this License, and its terms, do not apply to those |
sections when you distribute them as separate works. But when you |
distribute the same sections as part of a whole which is a work based |
on the Program, the distribution of the whole must be on the terms of |
this License, whose permissions for other licensees extend to the |
entire whole, and thus to each and every part regardless of who wrote it. |
Thus, it is not the intent of this section to claim rights or contest |
your rights to work written entirely by you; rather, the intent is to |
exercise the right to control the distribution of derivative or |
collective works based on the Program. |
In addition, mere aggregation of another work not based on the Program |
with the Program (or with a work based on the Program) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may copy and distribute the Program (or a work based on it, |
under Section 2) in object code or executable form under the terms of |
Sections 1 and 2 above provided that you also do one of the following: |
a) Accompany it with the complete corresponding machine-readable |
source code, which must be distributed under the terms of Sections |
1 and 2 above on a medium customarily used for software interchange; or, |
b) Accompany it with a written offer, valid for at least three |
years, to give any third party, for a charge no more than your |
cost of physically performing source distribution, a complete |
machine-readable copy of the corresponding source code, to be |
distributed under the terms of Sections 1 and 2 above on a medium |
customarily used for software interchange; or, |
c) Accompany it with the information you received as to the offer |
to distribute corresponding source code. (This alternative is |
allowed only for noncommercial distribution and only if you |
received the program in object code or executable form with such |
an offer, in accord with Subsection b above.) |
The source code for a work means the preferred form of the work for |
making modifications to it. For an executable work, complete source |
code means all the source code for all modules it contains, plus any |
associated interface definition files, plus the scripts used to |
control compilation and installation of the executable. However, as a |
special exception, the source code distributed need not include |
anything that is normally distributed (in either source or binary |
form) with the major components (compiler, kernel, and so on) of the |
operating system on which the executable runs, unless that component |
itself accompanies the executable. |
If distribution of executable or object code is made by offering |
access to copy from a designated place, then offering equivalent |
access to copy the source code from the same place counts as |
distribution of the source code, even though third parties are not |
compelled to copy the source along with the object code. |
4. You may not copy, modify, sublicense, or distribute the Program |
except as expressly provided under this License. Any attempt |
otherwise to copy, modify, sublicense or distribute the Program is |
void, and will automatically terminate your rights under this License. |
However, parties who have received copies, or rights, from you under |
this License will not have their licenses terminated so long as such |
parties remain in full compliance. |
5. You are not required to accept this License, since you have not |
signed it. However, nothing else grants you permission to modify or |
distribute the Program or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Program (or any work based on the |
Program), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Program or works based on it. |
6. Each time you redistribute the Program (or any work based on the |
Program), the recipient automatically receives a license from the |
original licensor to copy, distribute or modify the Program subject to |
these terms and conditions. You may not impose any further |
restrictions on the recipients' exercise of the rights granted herein. |
You are not responsible for enforcing compliance by third parties to |
this License. |
7. If, as a consequence of a court judgment or allegation of patent |
infringement or for any other reason (not limited to patent issues), |
conditions are imposed on you (whether by court order, agreement or |
otherwise) that contradict the conditions of this License, they do not |
excuse you from the conditions of this License. If you cannot |
distribute so as to satisfy simultaneously your obligations under this |
License and any other pertinent obligations, then as a consequence you |
may not distribute the Program at all. For example, if a patent |
license would not permit royalty-free redistribution of the Program by |
all those who receive copies directly or indirectly through you, then |
the only way you could satisfy both it and this License would be to |
refrain entirely from distribution of the Program. |
If any portion of this section is held invalid or unenforceable under |
any particular circumstance, the balance of the section is intended to |
apply and the section as a whole is intended to apply in other |
circumstances. |
It is not the purpose of this section to induce you to infringe any |
patents or other property right claims or to contest validity of any |
such claims; this section has the sole purpose of protecting the |
integrity of the free software distribution system, which is |
implemented by public license practices. Many people have made |
generous contributions to the wide range of software distributed |
through that system in reliance on consistent application of that |
system; it is up to the author/donor to decide if he or she is willing |
to distribute software through any other system and a licensee cannot |
impose that choice. |
This section is intended to make thoroughly clear what is believed to |
be a consequence of the rest of this License. |
8. If the distribution and/or use of the Program is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Program under this License |
may add an explicit geographical distribution limitation excluding |
those countries, so that distribution is permitted only in or among |
countries not thus excluded. In such case, this License incorporates |
the limitation as if written in the body of this License. |
9. The Free Software Foundation may publish revised and/or new versions |
of the General Public License from time to time. Such new versions will |
be similar in spirit to the present version, but may differ in detail to |
address new problems or concerns. |
Each version is given a distinguishing version number. If the Program |
specifies a version number of this License which applies to it and "any |
later version", you have the option of following the terms and conditions |
either of that version or of any later version published by the Free |
Software Foundation. If the Program does not specify a version number of |
this License, you may choose any version ever published by the Free Software |
Foundation. |
10. If you wish to incorporate parts of the Program into other free |
programs whose distribution conditions are different, write to the author |
to ask for permission. For software which is copyrighted by the Free |
Software Foundation, write to the Free Software Foundation; we sometimes |
make exceptions for this. Our decision will be guided by the two goals |
of preserving the free status of all derivatives of our free software and |
of promoting the sharing and reuse of software generally. |
NO WARRANTY |
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
REPAIR OR CORRECTION. |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGES. |
END OF TERMS AND CONDITIONS |
/WebSVN/log.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
22,47 → 24,28 |
// |
// Show the logs for the given path |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/utils.php'; |
require_once 'include/template.php'; |
require_once 'include/bugtraq.php'; |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
require_once("include/utils.inc"); |
require_once("include/template.inc"); |
require_once("include/bugtraq.inc"); |
$page = (int)@$_REQUEST['page']; |
$all = @$_REQUEST['all'] == 1; |
$isDir = @$_REQUEST['isdir'] == 1 || $path == '' || $path == '/'; |
// Make sure that we have a repository |
if (!$rep) |
{ |
renderTemplate404('log','NOREP'); |
} |
if (isset($_REQUEST['showchanges'])) |
{ |
$showchanges = @$_REQUEST['showchanges'] == 1; |
} |
else |
{ |
$showchanges = $rep->logsShowChanges(); |
} |
$search = trim((string) @$_REQUEST['search']); |
$dosearch = strlen($search) > 0; |
$page = (int)@$_REQUEST["page"]; |
$all = (@$_REQUEST["all"] == 1)?1:0; |
$isDir = (@$_REQUEST["isdir"] == 1)?1:0; |
$dosearch = (@$_REQUEST["logsearch"] == 1)?1:0; |
$search = trim(@$_REQUEST["search"]); |
$words = preg_split('#\s+#', $search); |
$fromRev = (int)@$_REQUEST['fr']; |
$startrev = strtoupper(trim((string) @$_REQUEST['sr'])); |
$endrev = strtoupper(trim((string) @$_REQUEST['er'])); |
$max = isset($_REQUEST['max']) ? (int)$_REQUEST['max'] : false; |
$fromRev = (int)@$_REQUEST["fr"]; |
$startrev = strtoupper(trim(@$_REQUEST["sr"])); |
$endrev = strtoupper(trim(@$_REQUEST["er"])); |
$max = @$_REQUEST["max"]; |
// Max number of results to find at a time |
$numSearchResults = 20; |
$numSearchResults = 15; |
if ($search == '') |
{ |
if ($search == "") |
$dosearch = false; |
} |
// removeAccents |
// |
72,9 → 55,9 |
function removeAccents($string) |
{ |
$string = htmlentities($string, ENT_QUOTES, 'ISO-8859-1'); |
$string = preg_replace('/&([A-Za-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron);/', '$1', $string); |
return $string; |
return strtr($string, |
"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", |
"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"); |
} |
// Normalise the search words |
87,187 → 70,76 |
unset($words[$index]); |
} |
if (empty($page)) |
{ |
$page = 1; |
} |
if (empty($page)) $page = 1; |
// If searching, display all the results |
if ($dosearch) |
{ |
$all = true; |
} |
$all = (bool) $dosearch; |
$maxperpage = 20; |
$svnrep = new SVNRepository($rep); |
$history = $svnrep->getLog($path, 'HEAD', '', false, 1, ($path == '/') ? '' : $peg); |
if (!$history) |
// Make sure that we have a repository |
if (!isset($rep)) |
{ |
unset($vars['error']); |
$history = $svnrep->getLog($path, '', '', false, 1, ($path == '/') ? '' : $peg); |
if (!$history) |
{ |
renderTemplate404('log','NOPATH'); |
echo $lang["NOREP"]; |
exit; |
} |
} |
$youngest = ($history && isset($history->entries[0])) ? $history->entries[0]->rev : 0; |
$svnrep = new SVNRepository($rep); |
if (empty($startrev)) |
{ |
//$startrev = ($rev) ? $rev : 'HEAD'; |
$startrev = $rev; |
} |
else if ($startrev != 'HEAD' && $startrev != 'BASE' && $startrev != 'PREV' && $startrev != 'COMMITTED') |
{ |
$startrev = (int)$startrev; |
} |
$passrev = $rev; |
if (empty($endrev)) |
{ |
$endrev = 1; |
} |
else if ($endrev != 'HEAD' && $endrev != 'BASE' && $endrev != 'PREV' && $endrev != 'COMMITTED') |
{ |
$endrev = (int)$endrev; |
} |
// If there's no revision info, go to the lastest revision for this path |
$history = $svnrep->getLog($path, "", "", true); |
$youngest = $history->entries[0]->rev; |
if (empty($rev)) |
{ |
$rev = $youngest; |
} |
if (empty($startrev)) |
{ |
$startrev = $rev; |
} |
// make sure path is prefixed by a / |
$ppath = $path; |
if ($path == "" || $path{0} != "/") |
$ppath = "/".$path; |
if ($path == '' || $path[0] != '/') |
{ |
$ppath = '/'.$path; |
} |
$vars["action"] = $lang["LOG"]; |
$vars["repname"] = $rep->getDisplayName(); |
$vars["rev"] = $rev; |
$vars["path"] = $ppath; |
$vars['action'] = $lang['LOG']; |
$vars['rev'] = $rev; |
$vars['peg'] = $peg; |
$vars['path'] = str_replace('%2F', '/', rawurlencode($ppath)); |
$vars['safepath'] = escape($ppath); |
createDirLinks($rep, $ppath, $passrev, $showchanged); |
if ($history && isset($history->entries[0])) |
{ |
$vars['log'] = xml_entities($history->entries[0]->msg); |
$vars['date'] = $history->entries[0]->date; |
$vars['age'] = datetimeFormatDuration(time() - strtotime($history->entries[0]->date)); |
$vars['author'] = $history->entries[0]->author; |
} |
$logurl = $config->getURL($rep, $path, "log"); |
if ($max === false) |
{ |
$max = ($dosearch) ? 0 : 40; |
} |
else if ($max < 0) |
{ |
$max = 40; |
} |
// TODO: If the rev is less than the head, get the path (may have been renamed!) |
// Will probably need to call `svn info`, parse XML output, and substring a path |
createPathLinks($rep, $ppath, $passrev, $peg); |
$passRevString = createRevAndPegString($rev, $peg); |
$isDirString = ($isDir) ? 'isdir=1&' : ''; |
unset($queryParams['repname']); |
unset($queryParams['path']); |
// Toggle 'showchanges' param for link to switch from the current behavior |
if ($showchanges == $rep->logsShowChanges()) |
{ |
$queryParams['showchanges'] = (int)!$showchanges; |
} |
if ($rev != $youngest) |
$vars["goyoungestlink"] = "<a href=\"${logurl}sc=1\">${lang["GOYOUNGEST"]}</a>"; |
else |
{ |
unset($queryParams['showchanges']); |
} |
$vars["goyoungestlink"] = ""; |
$vars['changesurl'] = $config->getURL($rep, $path, 'log').buildQuery($queryParams); |
$vars['changeslink'] = '<a href="'.$vars['changesurl'].'">'.$lang[($showchanges ? 'HIDECHANGED' : 'SHOWCHANGED')].'</a>'; |
$vars['showchanges'] = $showchanges; |
// We get the bugtraq variable just once based on the HEAD |
$bugtraq = new Bugtraq($rep, $svnrep, $ppath); |
// Revert 'showchanges' param to propagate the current behavior |
if ($showchanges == $rep->logsShowChanges()) |
{ |
unset($queryParams['showchanges']); |
} |
else |
{ |
$queryParams['showchanges'] = (int)$showchanges; |
} |
if ($startrev != "HEAD") $startrev = (int)$startrev; |
if (empty($startrev)) $startrev = $rev; |
if (empty($endrev)) $endrev = 1; |
$vars['revurl'] = $config->getURL($rep, $path, 'revision').$isDirString.$passRevString; |
if ($isDir) |
if (empty($_REQUEST["max"])) |
{ |
$vars['directoryurl'] = $config->getURL($rep, $path, 'dir').$passRevString.'#'.anchorForPath($path); |
$vars['directorylink'] = '<a href="'.$vars['directoryurl'].'">'.$lang['LISTING'].'</a>'; |
} |
if (empty($_REQUEST["logsearch"])) |
$max = 30; |
else |
{ |
$vars['filedetailurl'] = $config->getURL($rep, $path, 'file').$passRevString; |
$vars['filedetaillink'] = '<a href="'.$vars['filedetailurl'].'">'.$lang['FILEDETAIL'].'</a>'; |
$vars['blameurl'] = $config->getURL($rep, $path, 'blame').$passRevString; |
$vars['blamelink'] = '<a href="'.$vars['blameurl'].'">'.$lang['BLAME'].'</a>'; |
$vars['diffurl'] = $config->getURL($rep, $path, 'diff').$passRevString; |
$vars['difflink'] = '<a href="'.$vars['diffurl'].'">'.$lang['DIFFPREV'].'</a>'; |
$max = 0; |
} |
if ($rep->isRssEnabled()) |
{ |
$vars['rssurl'] = $config->getURL($rep, $path, 'rss').$isDirString.createRevAndPegString('', $peg); |
$vars['rsslink'] = '<a href="'.$vars['rssurl'].'">'.$lang['RSSFEED'].'</a>'; |
} |
if ($rev != $youngest) |
{ |
if ($path == '/') |
{ |
$vars['goyoungesturl'] = $config->getURL($rep, '', 'log').$isDirString; |
} |
else |
{ |
$vars['goyoungesturl'] = $config->getURL($rep, $path, 'log').$isDirString.'peg='.($peg ? $peg : $rev); |
$max = (int)$max; |
if ($max < 0) $max = 30; |
} |
$vars['goyoungestlink'] = '<a href="'.$vars['goyoungesturl'].'"'.($youngest ? ' title="'.$lang['REV'].' '.$youngest.'"' : '').'>'.$lang['GOYOUNGEST'].'</a>'; |
} |
$history = $svnrep->getLog($path, $startrev, $endrev, true, $max); |
$vars["logsearch_moreresultslink"] = ""; |
$vars["pagelinks"] = ""; |
$vars["showalllink"] = ""; |
$listing = array(); |
// We get the bugtraq variable just once based on the HEAD |
$bugtraq = new Bugtraq($rep, $svnrep, $ppath); |
$vars['logsearch_moreresultslink'] = ''; |
$vars['pagelinks'] = ''; |
$vars['showalllink'] = ''; |
if ($history) |
{ |
$history = $svnrep->getLog($path, $startrev, $endrev, true, $max, $peg); |
if (empty($history)) |
{ |
unset($vars['error']); |
$vars['warning'] = 'Revision '.$startrev.' of this resource does not exist.'; |
} |
} |
if (!empty($history)) |
{ |
// Get the number of separate revisions |
287,35 → 159,24 |
if ($page > $pages) $page = $pages; |
// Work out where to start and stop |
// Word out where to start and stop |
$firstrevindex = ($page - 1) * $maxperpage; |
$lastrevindex = min($firstrevindex + $maxperpage - 1, $revisions - 1); |
$lastrevindex = $firstrevindex + $maxperpage - 1; |
if ($lastrevindex > $revisions - 1) $lastrevindex = $revisions - 1; |
} |
$frev = isset($history->entries[0]) ? $history->entries[0]->rev : false; |
$brev = isset($history->entries[$firstrevindex]) ? $history->entries[$firstrevindex]->rev : false; |
$erev = isset($history->entries[$lastrevindex]) ? $history->entries[$lastrevindex]->rev : false; |
$history = $svnrep->getLog($path, $history->entries[$firstrevindex ]->rev, $history->entries[$lastrevindex]->rev, false, 0); |
$entries = array(); |
if ($brev && $erev) |
{ |
$history = $svnrep->getLog($path, $brev, $erev, false, 0, $peg, true); |
if ($history) |
{ |
$entries = $history->entries; |
} |
} |
$row = 0; |
$index = 0; |
$listing = array(); |
$found = false; |
foreach ($entries as $revision) |
foreach ($history->entries as $r) |
{ |
// Assume a good match |
$match = true; |
$thisrev = $revision->rev; |
$thisrev = $r->rev; |
// Check the log for the search words, if searching |
if ($dosearch) |
327,7 → 188,7 |
// Make sure that each word in the search in also in the log |
foreach ($words as $word) |
{ |
if (strpos(strtolower(removeAccents($revision->msg)), $word) === false && strpos(strtolower(removeAccents($revision->author)), $word) === false) |
if (strpos(strtolower(removeAccents($r->msg)), $word) === false) |
{ |
$match = false; |
break; |
341,81 → 202,43 |
} |
} |
else |
{ |
$match = false; |
} |
} |
$thisRevString = createRevAndPegString($thisrev, ($peg ? $peg : $thisrev)); |
if ($match) |
{ |
// Add the trailing slash if we need to (svnlook history doesn't return trailing slashes!) |
$rpath = $revision->path; |
$rpath = $r->path; |
if (empty($rpath)) |
{ |
$rpath = '/'; |
} |
else if ($isDir && $rpath[strlen($rpath) - 1] != '/') |
{ |
$rpath .= '/'; |
} |
$rpath = "/"; |
else if ($isDir && $rpath{strlen($rpath) - 1} != "/") |
$rpath .= "/"; |
$precisePath = $revision->precisePath; |
if (empty($precisePath)) |
{ |
$precisePath = '/'; |
} |
else if ($isDir && $precisePath[strlen($precisePath) - 1] != '/') |
{ |
$precisePath .= '/'; |
} |
// Find the parent path (or the whole path if it's already a directory) |
$pos = strrpos($rpath, '/'); |
$pos = strrpos($rpath, "/"); |
$parent = substr($rpath, 0, $pos + 1); |
$compareValue = (($isDir) ? $parent : $rpath).'@'.$thisrev; |
$url = $config->getURL($rep, $parent, "dir"); |
$listing[$index]["revlink"] = "<a href=\"${url}rev=$thisrev&sc=1\">$thisrev</a>"; |
$listvar = &$listing[$index]; |
$listvar['compare_box'] = '<input type="checkbox" name="compare[]" value="'.$compareValue.'" onclick="enforceOnlyTwoChecked(this)" />'; |
$url = $config->getURL($rep, $rpath, 'revision').$thisRevString; |
$listvar['revlink'] = '<a href="'.$url.'">'.$thisrev.'</a>'; |
$url = $config->getURL($rep, $precisePath, ($isDir ? 'dir' : 'file')).$thisRevString; |
$listvar['revpathlink'] = '<a href="'.$url.'">'.escape($precisePath).'</a>'; |
$listvar['revpath'] = escape($precisePath); |
$listvar['revauthor'] = $revision->author; |
$listvar['revdate'] = $revision->date; |
$listvar['revage'] = $revision->age; |
$listvar['revlog'] = nl2br($bugtraq->replaceIDs(create_anchors(xml_entities($revision->msg)))); |
$listvar['rowparity'] = $row; |
$listvar['compareurl'] = $config->getURL($rep, '', 'comp').'compare[]='.urlencode($rpath).'@'.($thisrev - 1).'&compare[]='.urlencode($rpath).'@'.$thisrev; |
if ($showchanges) |
if ($isDir) |
{ |
// Aggregate added/deleted/modified paths for display in table |
$modpaths = array(); |
foreach ($revision->mods as $mod) |
{ |
$modpaths[$mod->action][] = $mod->path; |
$listing[$index]["compare_box"] = "<input type=\"checkbox\" name=\"compare[]\" value=\"$parent@$thisrev\" onclick=\"checkCB(this)\" />"; |
$url = $config->getURL($rep, $rpath, "dir"); |
$listing[$index]["revpathlink"] = "<a href=\"${url}rev=$thisrev&sc=$showchanged\">$rpath</a>"; |
} |
ksort($modpaths); |
foreach ($modpaths as $action => $paths) |
else |
{ |
sort($paths); |
$modpaths[$action] = $paths; |
$listing[$index]["compare_box"] = "<input type=\"checkbox\" name=\"compare[]\" value=\"$rpath@$thisrev\" onclick=\"checkCB(this)\" />"; |
$url = $config->getURL($rep, $rpath, "file"); |
$listing[$index]["revpathlink"] = "<a href=\"${url}rev=$thisrev&sc=$showchanged\">$rpath</a>"; |
} |
$listvar['revadded'] = (isset($modpaths['A'])) ? implode('<br/>', escape($modpaths['A'])) : ''; |
$listvar['revdeleted'] = (isset($modpaths['D'])) ? implode('<br/>', escape($modpaths['D'])) : ''; |
$listvar['revmodified'] = (isset($modpaths['M'])) ? implode('<br/>', escape($modpaths['M'])) : ''; |
} |
$listing[$index]["revauthor"] = $r->author; |
$listing[$index]["revage"] = $r->age; |
$listing[$index]["revlog"] = nl2br($bugtraq->replaceIDs(create_anchors($r->msg))); |
$listing[$index]["rowparity"] = "$row"; |
$row = 1 - $row; |
$index++; |
424,135 → 247,87 |
// If we've reached the search limit, stop here... |
if (!$numSearchResults) |
{ |
$url = $config->getURL($rep, $path, 'log').$isDirString.$thisRevString; |
$vars['logsearch_moreresultslink'] = '<a href="'.$url.'&search='.$search.'&fr='.$thisrev.'">'.$lang['MORERESULTS'].'</a>'; |
$url = $config->getURL($rep, $path, "log"); |
$vars["logsearch_moreresultslink"] = "<a href=\"${url}rev=$rev&sc=$showchanged&isdir=$isDir&logsearch=1&search=$search&fr=$thisrev\">${lang["MORERESULTS"]}</a>"; |
break; |
} |
} |
$vars['logsearch_resultsfound'] = true; |
$vars["logsearch_resultsfound"] = true; |
if ($dosearch && !$found) |
{ |
if ($fromRev == 0) |
{ |
$vars['logsearch_nomatches'] = true; |
$vars['logsearch_resultsfound'] = false; |
$vars["logsearch_nomatches"] = true; |
$vars["logsearch_resultsfound"] = false; |
} |
else |
{ |
$vars['logsearch_nomorematches'] = true; |
$vars["logsearch_nomorematches"] = true; |
} |
} |
else if ($dosearch && $numSearchResults > 0) |
{ |
$vars['logsearch_nomorematches'] = true; |
$vars["logsearch_nomorematches"] = true; |
} |
// Work out the paging options, create links to pages of results |
// Work out the paging options |
if ($pages > 1) |
{ |
$prev = $page - 1; |
$next = $page + 1; |
echo "<p><center>"; |
unset($queryParams['page']); |
$logurl = $config->getURL($rep, $path, 'log').buildQuery($queryParams); |
if ($page > 1) |
{ |
$vars['pagelinks'] .= '<a href="'.$logurl.(!$peg && $frev && $prev != 1 ? '&peg='.$frev : '').'&page='.$prev.'">←'.$lang['PREV'].'</a>'; |
} |
else |
{ |
$vars['pagelinks'] .= '<span>←'.$lang['PREV'].'</span>'; |
} |
if ($page > 1) $vars["pagelinks"] .= "<a href=\"${logurl}rev=$rev&sr=$startrev&er=$endrev&sc=$showchanged&max=$max&page=$prev\">< ${lang["PREV"]}</a> "; |
for ($p = 1; $p <= $pages; $p++) |
{ |
if ($p != $page) |
{ |
$vars['pagelinks'] .= '<a href="'.$logurl.(!$peg && $frev && $p != 1 ? '&peg='.$frev : '').'&page='.$p.'">'.$p.'</a>'; |
} |
$vars["pagelinks"].= "<a href=\"${logurl}rev=$rev&sr=$startrev&er=$endrev&sc=$showchanged&max=$max&page=$p\">$p</a> "; |
else |
{ |
$vars['pagelinks'] .= '<span id="curpage">'.$p.'</span>'; |
$vars["pagelinks"] .= "<b>$p </b>"; |
} |
} |
if ($page < $pages) $vars["pagelinks"] .=" <a href=\"${logurl}rev=$rev&sr=$startrev&er=$endrev&sc=$showchanged&max=$max&page=$next\">${lang["NEXT"]} ></a>"; |
if ($page < $pages) |
{ |
$vars['pagelinks'] .= '<a href="'.$logurl.(!$peg && $frev ? '&peg='.$frev : '').'&page='.$next.'">'.$lang['NEXT'].'→</a>'; |
$vars["showalllink"] = "<a href=\"${logurl}rev=$rev&sr=$startrev&er=$endrev&sc=$showchanged&all=1&max=$max\">${lang["SHOWALL"]}</a>"; |
echo "</center>"; |
} |
else |
{ |
$vars['pagelinks'] .= '<span>'.$lang['NEXT'].'→</span>'; |
} |
$vars['showalllink'] = '<a href="'.$logurl.'&all=1">'.$lang['SHOWALL'].'</a>'; |
} |
} |
// Create the project change combo box |
// Create form elements for filtering and searching log messages |
if ($config->multiViews) |
{ |
$hidden = '<input type="hidden" name="op" value="log" />'; |
} |
else |
{ |
$hidden = '<input type="hidden" name="repname" value="'.$repname.'" />'; |
$hidden .= '<input type="hidden" name="path" value="'.$path.'" />'; |
} |
$url = $config->getURL($rep, $path, "log"); |
# XXX: forms don't have the name attribute, but _everything_ has the id attribute, |
# so what you're trying to do (if anything?) should be done via that ~J |
$vars["logsearch_form"] = "<form action=\"$url\" method=\"post\" name=\"logsearchform\">"; |
if ($isDir) |
{ |
$hidden .= '<input type="hidden" name="isdir" value="'.$isDir.'" />'; |
} |
$vars["logsearch_startbox"] = "<input name=\"sr\" size=\"5\" value=\"$startrev\" />"; |
$vars["logsearch_endbox" ] = "<input name=\"er\" size=\"5\" value=\"$endrev\" />"; |
$vars["logsearch_maxbox" ] = "<input name=\"max\" size=\"5\" value=\"".($max==0?"":$max)."\" />"; |
$vars["logsearch_inputbox"] = "<input name=\"search\" value=\"$search\" />"; |
if ($peg) |
{ |
$hidden .= '<input type="hidden" name="peg" value="'.$peg.'" />'; |
} |
$vars["logsearch_submit"] = "<input type=\"submit\" value=\"${lang["GO"]}\" />"; |
$vars["logsearch_endform"] = "<input type=\"hidden\" name=\"logsearch\" value=\"1\" />". |
"<input type=\"hidden\" name=\"op\" value=\"log\" />". |
"<input type=\"hidden\" name=\"rev\" value=\"$rev\" />". |
"<input type=\"hidden\" name=\"sc\" value=\"$showchanged\" />". |
"<input type=\"hidden\" name=\"isdir\" value=\"$isDir\" />". |
"</form>"; |
if ($showchanges != $rep->logsShowChanges()) |
{ |
$hidden .= '<input type="hidden" name="showchanges" value="'.$showchanges.'" />'; |
} |
$url = $config->getURL($rep, $path, "log"); |
$vars["logsearch_clearloglink"] = "<a href=\"${url}rev=$rev&sc=$showchanged&isdir=$isDir\">${lang["CLEARLOG"]}</a>"; |
$vars['logsearch_form'] = '<form method="get" action="'.$config->getURL($rep, $path, 'log').'" id="search">'.$hidden; |
$vars['logsearch_startbox'] = '<input name="sr" size="5" value="'.$startrev.'" />'; |
$vars['logsearch_endbox'] = '<input name="er" size="5" value="'.$endrev.'" />'; |
$vars['logsearch_maxbox'] = '<input name="max" size="5" value="'.($max == 0 ? 40 : $max).'" />'; |
$vars['logsearch_inputbox'] = '<input name="search" value="'.escape($search).'" />'; |
$vars['logsearch_showall'] = '<input type="checkbox" name="all" value="1"'.($all ? ' checked="checked"' : '').' />'; |
$vars['logsearch_submit'] = '<input type="submit" value="'.$lang['GO'].'" />'; |
$vars['logsearch_endform'] = '</form>'; |
$url = $config->getURL($rep, "/", "comp"); |
$vars["compare_form"] = "<form action=\"$url\" method=\"post\" name=\"compareform\">"; |
$vars["compare_submit"] = "<input name=\"comparesubmit\" type=\"submit\" value=\"${lang["COMPAREREVS"]}\" />"; |
$vars["compare_endform"] = "<input type=\"hidden\" name=\"op\" value=\"comp\" /><input type=\"hidden\" name=\"sc\" value=\"$showchanged\" /></form>"; |
// If a filter is in place, produce a link to clear all filter parameters |
if ($page !== 1 || $all || $dosearch || $fromRev || $startrev !== $rev || $endrev !== 1 || $max !== 40) |
{ |
$url = $config->getURL($rep, $path, 'log').$isDirString.$passRevString; |
$vars['logsearch_clearloglink'] = '<a href="'.$url.'">'.$lang['CLEARLOG'].'</a>'; |
} |
$vars["version"] = $version; |
// Create form elements for comparing selected revisions |
$vars['compare_form'] = '<form method="get" action="'.$config->getURL($rep, '', 'comp').'" id="compare">'; |
if (!$rep->hasReadAccess($path, false)) |
$vars["noaccess"] = true; |
if ($config->multiViews) |
{ |
$vars['compare_form'] .= '<input type="hidden" name="op" value="comp" />'; |
} |
else |
{ |
$vars['compare_form'] .= '<input type="hidden" name="repname" value="'.$repname.'" />'; |
} |
parseTemplate($rep->getTemplatePath()."header.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."log.tmpl", $vars, $listing); |
parseTemplate($rep->getTemplatePath()."footer.tmpl", $vars, $listing); |
$vars['compare_submit'] = '<input type="submit" value="'.$lang['COMPAREREVS'].'" />'; |
$vars['compare_endform'] = '</form>'; |
if (!$rep->hasReadAccess($path, false)) |
{ |
$vars['error'] = $lang['NOACCESS']; |
sendHeaderForbidden(); |
} |
renderTemplate('log'); |
?> |
/WebSVN/rss.php |
---|
1,6 → 1,8 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright (C) 2004-2006 Tim Armes |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
22,140 → 24,147 |
// |
// Creates an rss feed for the given repository number |
require_once 'include/setup.php'; |
require_once 'include/svnlook.php'; |
require_once 'include/utils.php'; |
require_once 'include/template.php'; |
require_once 'include/bugtraq.php'; |
include("include/feedcreator.class.php"); |
$max = (int)@$_REQUEST['max']; |
if ($max == 0) |
$max = $config->getRssMaxEntries(); |
$quiet = (isset($_REQUEST['quiet'])); |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
require_once("include/utils.inc"); |
require_once("include/template.inc"); |
$isDir = (@$_REQUEST["isdir"] == 1)?1:0; |
$maxmessages = 20; |
// Find the base URL name |
if ($config->multiViews) { |
$baseurl = ''; |
} else { |
$baseurl = dirname($_SERVER['PHP_SELF']); |
if ($baseurl != '' && $baseurl != DIRECTORY_SEPARATOR && $baseurl != '\\' && $baseurl != '/') { |
$baseurl .= '/'; |
} else { |
$baseurl = '/'; |
if ($config->multiViews) |
{ |
$baseurl = ""; |
} |
else |
{ |
$baseurl = dirname($_SERVER["PHP_SELF"]); |
if ($baseurl != "" && $baseurl != DIRECTORY_SEPARATOR && $baseurl != "\\" && $baseurl != "/" ) |
$baseurl .= "/"; |
else |
$baseurl = "/"; |
} |
if ($path == '' || $path[0] != '/') { |
$ppath = '/'.$path; |
} else { |
$svnrep = new SVNRepository($rep); |
if ($path == "" || $path{0} != "/") |
$ppath = "/".$path; |
else |
$ppath = $path; |
} |
if (!$rep) { |
http_response_code(404); |
print 'Unable to access resource at path: '.xml_entities($path); |
exit; |
} |
// Make sure that the user has full access to the specified directory |
if (!$rep->hasReadAccess($path, false)) { |
http_response_code(403); |
print 'Unable to access resource at path: '.xml_entities($path); |
if (!$rep->hasReadAccess($path, false)) |
exit; |
} |
$url = $config->getURL($rep, $path, "log"); |
$listurl = $config->getURL($rep, $path, "dir"); |
// If there's no revision info, go to the lastest revision for this path |
$svnrep = new SVNRepository($rep); |
$history = $svnrep->getLog($path, $rev, '', false, $max, $peg, !$quiet); |
if (!$history) { |
http_response_code(404); |
echo $lang['NOPATH']; |
exit; |
} |
$history = $svnrep->getLog($path, $rev, "", false, 20); |
$youngest = $history->entries[0]->rev; |
header('Content-Type: application/xml; charset=utf-8'); |
// Cachename reflecting full path to and rev for rssfeed. Must end with xml to work |
$cachename = strtr(getFullURL($listurl), ":/\\?", "____"); |
$cachename = $locwebsvnreal.DIRECTORY_SEPARATOR."cache".DIRECTORY_SEPARATOR.$cachename.@$_REQUEST["rev"]."_rssfeed.xml"; |
if ($rep->isRssCachingEnabled()) { |
// Filename for storing a cached RSS feed for this particular path/revision |
$cache = $locwebsvnreal.DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.strtr($rep->getDisplayName().$path, '\\/:*?"<>|.', '__________').($peg ? '@'.$peg : '').($rev ? '_r'.$rev : '').'m'.$max.($quiet ? 'q' : '').'.rss.xml'; |
// If a recent-enough cached version exists, use it and avoid the work below |
if (file_exists($cache) && filemtime($cache) >= $history->curEntry->committime) { |
readfile($cache); |
exit(); |
} |
} |
$rss = new UniversalFeedCreator(); |
$rss->useCached("RSS2.0", $cachename); |
$rss->title = $rep->getDisplayName(); |
$rss->description = "${lang["RSSFEEDTITLE"]} - $repname"; |
$rss->link = html_entity_decode(getFullURL($baseurl.$listurl)); |
$rss->syndicationURL = $rss->link; |
$rss->xslStyleSheet = ""; //required for UniversalFeedCreator since 1.7 |
$rss->cssStyleSheet = ""; //required for UniversalFeedCreator since 1.7 |
$bugtraq = new Bugtraq($rep, $svnrep, $ppath); |
//$divbox = "<div>"; |
//$divfont = "<span>"; |
// Generate RSS 2.0 feed |
$rss = '<?xml version="1.0" encoding="utf-8"?>'; |
$rss .= '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel>'; |
$rss .= '<title>'.escape($rep->getDisplayName()).($path ? ' – '.$path : '').'</title>'; |
$rss .= '<description>'.escape($lang['RSSFEEDTITLE']).' – '.escape($repname).'</description>'; |
$rss .= '<lastBuildDate>'.date('r').'</lastBuildDate>'; // RFC 2822 date format |
$rss .= '<generator>WebSVN '.$vars['version'].'</generator>'; |
$rss .= '<language>'.$lang['LANGUAGETAG'].'</language>'; |
// URL for matching WebSVN log page |
$rss .= '<link>'.getFullURL($baseurl.$config->getURL($rep, $path, 'log').(@$_REQUEST['isdir'] == 1 ? 'isdir=1&' : '').'max='.$max.'&'.createRevAndPegString($passrev, $peg)).'</link>'; |
// URL where this original RSS feed can be found |
$rss .= '<atom:link href="'.escape(getFullURL($_SERVER['REQUEST_URI'])).'" rel="self" type="application/rss+xml" />'."\n"; |
if (is_array($history->entries)) { |
$itemURL = $baseurl.$config->getURL($rep, $path, 'revision'); |
if (@$_REQUEST['isdir'] == 1 || $path == '' || $path == '/') |
$itemURL .= 'isdir=1&'; |
foreach ($history->entries as $r) { |
$wordLimit = 10; // Display only up to the first 10 words of the log message |
$title = trim(explode('\n', $r->msg)[0]); |
$title = str_replace(array("\r\n", "\r", "\n", "\t"), ' ', $title); |
$words = explode(' ', $title, $wordLimit + 1); |
if (count($words) > $wordLimit) { |
$title = implode(' ', array_slice($words, 0, $wordLimit)).' ...'; |
foreach ($history->entries as $r) |
{ |
$thisrev = $r->rev; |
$changes = $r->mods; |
$files = count($changes); |
// Add the trailing slash if we need to (svnlook history doesn't return trailing slashes!) |
$rpath = $r->path; |
if ($isDir && $rpath{strlen($rpath) - 1} != "/") |
$rpath .= "/"; |
// Find the parent path (or the whole path if it's already a directory) |
$pos = strrpos($rpath, "/"); |
$parent = substr($rpath, 0, $pos + 1); |
$url = $config->getURL($rep, $parent, "dir"); |
$desc = $r->msg; |
$item = new FeedItem(); |
// For the title, we show the first 10 words of the description |
$pos = 0; |
$len = strlen($desc); |
for ($i = 0; $i < 10; $i++) |
{ |
if ($pos >= $len) break; |
$pos = strpos($desc, " ", $pos); |
if ($pos === FALSE) break; |
$pos++; |
} |
$title = $lang['REV'].' '.$r->rev.' '.mb_convert_encoding('–', 'UTF-8', 'HTML-ENTITIES').' '.$title; |
$description = '<div><strong>'.$r->author; |
if (!$quiet) { |
$description .= ' '.mb_convert_encoding('–', 'UTF-8', 'HTML-ENTITIES').' '.count($r->mods).' '.$lang['FILESMODIFIED']; |
if ($pos !== FALSE) |
{ |
$sdesc = substr($desc, 0, $pos) . "..."; |
} |
$description .= '</strong><br/>'.nl2br($bugtraq->replaceIDs(create_anchors(str_replace('<', '<', $r->msg)))).'</div>'; |
if (!$quiet) { |
usort($r->mods, 'SVNLogEntry_compare'); |
foreach ($r->mods as $modifiedResource) { |
switch ($modifiedResource->action) { |
case 'A': $description .= '+ '; break; |
case 'M': $description .= '~ '; break; |
case 'D': $description .= 'x '; break; |
else |
{ |
$sdesc = $desc; |
} |
$description .= $modifiedResource->path; |
if ($modifiedResource->copyfrom != '') { |
$description .= ' <i>(copied from '.$modifiedResource->copyfrom.'@'.$modifiedResource->copyrev.')</i>'; |
if ($desc == "") $sdesc = "${lang["REV"]} $thisrev"; |
$item->title = "$sdesc"; |
$item->link = html_entity_decode(getFullURL($baseurl."${url}rev=$thisrev&sc=$showchanged")); |
$item->description = "<div><strong>${lang["REV"]} $thisrev - ".$r->author."</strong> ($files ${lang["FILESMODIFIED"]})</div><div>".nl2br(create_anchors($desc))."</div>"; |
if ($showchanged) |
{ |
foreach ($changes as $file) |
{ |
switch ($file->action) |
{ |
case "A": |
$item->description .= "+ ".$file->path."<br />"; |
break; |
case "M": |
$item->description .= "~ ".$file->path."<br />"; |
break; |
case "D": |
$item->description .= "-".$file->path."<br />"; |
break; |
} |
$description .= '<br />'; |
} |
} |
// skip items with no access |
if ($r->committime) { |
$rss .= '<item>'; |
$rss .= '<pubDate>'.date('r', $r->committime).'</pubDate>'; |
$rss .= '<dc:creator>'.escape($r->author).'</dc:creator>'; |
$rss .= '<title>'.escape($title).'</title>'; |
$rss .= '<description>'.escape($description).'</description>'; |
$itemLink = getFullURL($itemURL.createRevAndPegString($r->rev,$peg)); |
$rss .= '<link>'.$itemLink.'</link>'; |
$rss .= '<guid>'.$itemLink.'</guid>'; |
$rss .= '</item>'."\n"; |
$item->date = $r->committime; |
$item->author = $r->author; |
$rss->addItem($item); |
} |
} |
} |
$rss .= '</channel></rss>'; |
if ($rep->isRssCachingEnabled()) { |
$file = fopen($cache, 'w+'); |
if ($file) { |
fputs($file, $rss); |
fclose($file); |
touch($cache, $history->curEntry->committime); // set timestamp to commit time |
} else { |
echo 'Error creating RSS cache file, please check write permissions.'; |
} |
} |
echo $rss; |
// valid format strings are: RSS0.91, RSS1.0, RSS2.0, PIE0.1, MBOX, OPML |
// Save the feed |
$rss->saveFeed("RSS2.0",$cachename, false); |
header("Content-Type: application/xml"); |
echo $rss->createFeed("RSS2.0"); |
?> |
/WebSVN/templates.txt |
---|
0,0 → 1,364 |
THE TEMPLATING SYSTEM |
~~~~~~~~~~~~~~~~~~~~~ |
Everyone wants their view onto their SVN repository to fit in with their look |
and feel. With WebSVN's templating system this is very possible. |
To create your own templates, you first need to change your config.inc file to |
tell WebSVN where the templates are stored. For example: |
$config->setTemplatePath("./templates/Standard/"); |
This directory should contain at least the following files: |
header.tmpl - Header templated included before any other |
footer.tmpl - Footer templated included after any other |
index.tmpl - The main project page template |
directory.tmpl - Listing of a directory |
log.tmple - Log of a directory or file |
file.tmpl - Contents of a text file |
diff.tmpl - Differences between text files |
blame.tmpl - Blame information for a file |
Each template file should be written in HTML, but is allowed to contain certain |
WebSVN controls. There are two control types, commands and variables. |
COMMANDS |
~~~~~~~~ |
NOTE: Commands MUST appear on their own line. |
--- |
[websvn-test:varname] |
... |
[websvn-else] |
... |
[websvn-endtest] |
If the variable is non-0 write out the first part else write out the second |
--- |
[websvn-startlisting] |
... |
[websvn-endlisting] |
Used in pages that contain listings of files, logs, etc. Everything between |
the controls is repeated for each item in the list |
--- |
[websvn-defineicons] (used in directory.tmpl only) |
... |
[websvn-enddefineicons] |
... |
[websvn-treenode] |
[websvn-icon] |
These commands are used to display certain icons next to certain file types in |
the directory view. |
The [websvn-defineicons] block should contain a line for each file type, |
defining the HTML to be used for that file type. To define the HTML for a |
particular extension use the syntax: |
.<extension>=<HTML code> |
There are also some special filetypes: |
dir=<HTML code> is used for directory icons |
diropen=<HTML code> is used for open directory icons |
*=<HTML code> is used for all filetypes which have no other definition |
i-node - | shaped node of the tree view |
t-node - T shaped node of the tree view |
l-node - L shaped node of the tree view |
e-node - Empty node of the tree view |
Example from the BlueGrey scheme: |
[websvn-defineicons] |
dir=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder.png" alt="[FOLDER]"> |
diropen=<img align="middle" valign="center" src="[websvn:locwebsvnhttp]/templates/BlueGrey/folder-open.png" alt="[FOLDER]"> |
*=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/file.png" alt="[FILE]"> |
.c=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/filec.png" alt="[C-FILE]"> |
.h=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/fileh.png" alt="[H-FILE]"> |
.s=<img align="middle" src="[websvn:locwebsvnhttp]/templates/BlueGrey/files.png" alt="[S-FILE]"> |
i-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/i-node.png" alt="[NODE]"> |
t-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/t-node.png" alt="[NODE]"> |
l-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/l-node.png" alt="[NODE]"> |
e-node=<img align="middle" border="0" width="24" height="26" src="[websvn:locwebsvnhttp]/templates/BlueGrey/e-node.png" alt="[NODE]"> |
[websvn-enddefineicons] |
Inside the [websvn-startlisting] block, the command [websvn-treeview] will |
output the HTML code defined for the appropriate tree view icon. |
[websvn-icon] will output the HTML code defined for the type of the current |
file. |
--- |
[websvn-getlisting] (used in file.tmpl only) |
Get the contents of the file being viewed and output it exactly (surrounded |
with <PRE> .. </PRE>). |
VARIABLES |
~~~~~~~~~ |
Variables are written in the form [websvn:varname] where varname is the name of |
a variable passed to the template. The control is replaced with the variable |
required. |
The variables available are described below for each template. |
You may also access the language file using [lang:varname] is order to keep your |
templates international! |
Take special notice of the use of the locwebsvnhttp variable. It should be used |
to locate other files and graphics that your templates need. For example: |
<link href="[websvn:locwebsvnhttp]/templates/tmptname/styles.css" ... |
You may imagine that simply using . in place should work, however this isn't |
the case when MultiViews are turned on. Using this variable gives you a way to |
access your template files in all cases. |
Variables defined for in all scripts |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
locwebsvnhttp - Root of websvn directory |
charset - The charset requested by the user |
projects_form - HTML <form> specification for the projects selection box |
projects_select - HTML <select>...</select> specification for the project |
options |
projects_submit - HTML <input> specification for the projects selection GO |
button |
projects_endform - HTML </form> specification for the projects selection |
box (includes hidden field declarations) |
lang_form - HTML <form> specification for the language selection box |
lang_select - HTML <select>...</select> specification for the language options |
lang_submit - HTML <input> specification for the language selection GO button |
lang_endform - HTML </form> specification for the language selection box |
noaccess - True if the user should be blocked from accessing this page due |
to insufficient access rights. |
Variables defined for index.tmpl |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
treeview - true if the index should be displayed as a tree of grouped projects |
flatview - true if the index should be displayed as a simple list of projects |
opentree - true if the tree viewed should be open by default |
Used in [websvn-startlisting] ... [websvn-endlisting] block of a flat view: |
projlink - Link to the project |
rowparity - Parity of the row (0 or 1). Used to generate striped tables |
Used in [websvn-startlisting] ... [websvn-endlisting] block of a tree view: |
isprojlink - This item is a project link |
isgrouphead - This item is a group name |
rowparity - Parity of the row (0 or 1). Used to generate striped tables |
listitem - The item to display |
Variables defined for directory.tmpl |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
restricted - True if the users has restricted access to this directory (to |
allow access to a readable directory lower down only) |
repname - Name of the repository |
rev - Revision being viewed |
path - Path of item being logged |
author - Author of current revision |
date - Date that revision was committed |
log - Log message of revision |
lastchangedrev - Revision of the last modification to current directory |
goyoungestlink - Link to head revision of repository |
showchanges - 1 if showing changes (for websvn-test) |
hidechanges - 1 if hiding changes (for websvn-test) |
showchangeslink - Link to page with changes hidden |
hidechangeslink - Link to page with changes shown |
newfilesbr - list of the new files separated by <BR>'s |
changedfilesbr - list of the changed files separated by <BR>'s |
deletedfilesbr - list of the deleted files separated by <BR>'s |
newfiles - list of the new files separated by spaces |
changedfiles - list of the changed files separated by spaces |
deletedfiles - list of the deleted files separated by spaces |
curdirlinks - List of the path of this directory with links to each one |
curdirloglink - Link to the log view of current directory |
curdirrsslink - Link to the RSS feed for the current directory |
curdirrssanchor - The <a href=...> tag to the RSS feed for the current directory |
curdirrsshref - URL of the feed for the current directory (without anchor tag) |
curdirdllink - Link to the tarball of current directory |
curdircomplink - Link to comparison with previously changed revision |
allowdownload - True if downloading has been configured |
compare_form - HTML <form> specification for the comparison form |
compare_submit - HTML <input> specification for the comparison button |
compare_endform - HTML </form> specification for the comparison form |
Used in [websvn-startlisting] ... [websvn-endlisting] block: |
compare_box - HTML checkbox specification for the comparison option |
filelink - Link to the file |
rowparity - Parity of the row (0 or 1). Used to generate striped tables |
fileviewloglink - Link to the log page for the file |
fileviewdllink - Link to the tarball of current directory |
isDir - true if the current file is a directory (use with [websvn-test:isDir] |
to display icons) |
rsslink - Link to the RSS feed for this file/directory |
rssanchor - The <a href=...> tag to the RSS feed for this file/directory |
Variables defined for log.tmpl |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
action - Action being performed ("Log") |
repname - Name of the repository |
rev - Revision being viewed |
path - Path of item being logged |
curdirlinks - List of the path of this directory with links to each one |
error - Error message when results not available |
pagelinks - List of list to all the pages of the log |
showalllink - Link to show the entire log in one go |
logsearch_form - HTML <form> specification for the log search box |
logsearch_inputbox - HTML <input> specification for the log search box |
logsearch_submit - HTML <input> specification for the log search GO button |
logsearch_endform - HTML </form> specification for the log search box box |
(includes hidden field declarations) |
logsearch_clearloglink - Link to unfiltered display (remove current search |
criteria) |
logsearch_resultsfound - true when there are logs to display |
logsearch_nomatches - true when there are no matches for the current request |
logsearch_nomorematches - true when there are no further matches to the current |
request (but there have been previous pages, |
for example) |
compare_form - HTML <form> specification for the comparison form |
compare_submit - HTML <input> specification for the comparison button |
compare_endform - HTML </form> specification for the comparison form |
Used in [websvn-startlisting] ... [websvn-endlisting] block: |
compare_box - HTML checkbox specification for the comparison option |
revpathlink - Link to revision |
revauthor - Author of this revision |
revage - Age of revision |
revlog - Log message of revision |
Variables defined for file.tmpl |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
repname - Name of the repository |
rev - Revision being viewed |
path - Path of item being logged |
curdirlinks - List of the path of this directory with links to each one |
prevdifflink - Link to comparison with previous revision |
blamelink - Link to the blame information for this file |
fileviewloglink - Link to the log page for the file |
Note: Use command [websvn-getlisting] to display the listing. |
Variables defined for diff.tmpl |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
action - Action being performed ("Diff") |
locwebsvnhttp - Root of websvn directory |
charset - The charset requested by the user |
repname - Name of the repository |
rev - Revision being viewed |
path - Path of item being logged |
curdirlinks - List of the path of this directory with links to each one |
rev1 - Revision of the older file |
rev2 - Revision of the newer file |
showcompactlink - Link to compact view |
showalllink - Link to full view |
Used in [websvn-startlisting] ... [websvn-endlisting] block: |
rev1lineno / rev2lineno - Line number of the next difference block. Only |
defined at the start of the block. |
rev2diffclass / rev2diffclass - Class name of the diff block used for colouring |
differences. The result is one of: |
* diff (no changes) |
* diffadded |
* diffchanged |
* diffdeleted |
rev1line / rev2line - The line under comparison |
Variables defined for blame.tmpl |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
locwebsvnhttp - Root of websvn directory |
charset - The charset requested by the user |
repname - Name of the repository |
rev - Revision being viewed |
path - Path of item being logged |
curdirlinks - List of the path of this directory with links to each one |
Used in [websvn-startlisting] ... [websvn-endlisting] block: |
lineno - Line number of the line |
revision - Revision in which the line changed |
author - Last author to modify the line |
line - The line itself |
Variables defined for compare.tmpl |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
action - Action being performed ("Path Comparison") |
repname - Name of the repository |
path1 - First path being compared |
rev1 - Revision of first path |
path2 - Second path being compared |
rev2 - Revision of second path |
success = true if the comparison succeeded |
revlink - Link to reverse comparison |
compare_form - HTML <form> specification for the comparison form |
compare_path1input/compare_path2input - HTML specifications for the path input areas |
compare_rev1input/compare_rev2input - HTML specifications for the revision input areas |
compare_submit - HTML <input> specification for the comparison button |
compare_endform - HTML </form> specification for the comparison form |
Used in [websvn-startlisting] ... [websvn-endlisting] block: |
newpath - Name of new file under comparison (only defined at start of block) |
difflines - Lines changed information for this file. Start of diff lines. |
(only defined after newpath) |
diffclass - Class name of the diff block used for colouring |
differences. The result is one of: |
* diff (no changes) |
* diffadded |
* diffdeleted |
line - The line under comparison |
enddifflines - End of diff lines |
properties - Property changes |
endpath - End of current path |
/WebSVN/wsvn.php |
---|
0,0 → 1,161 |
<?php |
# vim:et:ts=3:sts=3:sw=3:fdm=marker: |
// WebSVN - Subversion repository viewing via the web using PHP |
// Copyright © 2004-2006 Tim Armes, Matt Sicker |
// |
// This program is free software; you can redistribute it and/or modify |
// it under the terms of the GNU General Public License as published by |
// the Free Software Foundation; either version 2 of the License, or |
// (at your option) any later version. |
// |
// This program is distributed in the hope that it will be useful, |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
// GNU General Public License for more details. |
// |
// You should have received a copy of the GNU General Public License |
// along with this program; if not, write to the Free Software |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// |
// -- |
// |
// wsvn.php |
// |
// Glue for MultiViews |
// --- CONFIGURE THESE VARIABLES --- |
// Location of websvn directory via HTTP |
// |
// e.g. For http://servername/websvn use /websvn |
// |
// Note that wsvn.php need not be in the /websvn directory (and normally isn't). |
// If you want to use the root server directory, just use a blank string (''). |
#$locwebsvnhttp = "/websvn"; |
$locwebsvnhttp = ''; |
// Physical location of websvn directory |
#$locwebsvnreal = "d:/websvn"; |
$locwebsvnreal = '/mnt/wsvn'; |
chdir($locwebsvnreal); |
// --- DON'T CHANGE BELOW HERE --- |
// this tells files that we are in multiviews if they are unable to access |
// the $config variable |
if (!defined('WSVN_MULTIVIEWS')) |
define('WSVN_MULTIVIEWS', 1); |
ini_set("include_path", $locwebsvnreal); |
require_once("include/setup.inc"); |
require_once("include/svnlook.inc"); |
if (!isset($_REQUEST["sc"])) |
$_REQUEST["sc"] = 1; |
if ($config->multiViews) |
{ |
// If this is a form handling request, deal with it |
if (@$_REQUEST["op"] == "form") |
{ |
include("$locwebsvnreal/form.php"); |
exit; |
} |
$path = @$_SERVER["PATH_INFO"]; |
// Remove initial slash |
$path = substr($path, 1); |
if (empty($path)) |
{ |
include("$locwebsvnreal/index.php"); |
exit; |
} |
// Split the path into repository and path elements |
// Note: we have to cope with the repository name |
// having a slash in it |
$found = false; |
foreach ($config->getRepositories() as $rep) |
{ |
$pos = strlen($rep->getDisplayName()); |
if (strlen($path) < $pos) |
continue; |
$name = substr($path, 0, $pos); |
if (strcasecmp($rep->getDisplayName(), $name) == 0) |
{ |
$tpath = substr($path, $pos); |
if ($tpath[0] == "/") { |
$found = true; |
$path = $tpath; |
break; |
} |
} |
} |
if ($found == false) |
{ |
include("$locwebsvnreal/index.php"); |
exit; |
} |
createProjectSelectionForm(); |
$vars["allowdownload"] = $rep->getAllowDownload(); |
// find the operation type |
$op = @$_REQUEST["op"]; |
switch ($op) |
{ |
case "dir": |
$file = "listing.php"; |
break; |
case "file": |
$file = "filedetails.php"; |
break; |
case "log": |
$file = "log.php"; |
break; |
case "diff": |
$file = "diff.php"; |
break; |
case "blame": |
$file = "blame.php"; |
break; |
case "rss": |
$file = "rss.php"; |
break; |
case "dl": |
$file = "dl.php"; |
break; |
case "comp": |
$file = "comp.php"; |
break; |
default: |
if ($path[strlen($path) - 1] == "/") |
$file = "listing.php"; |
else |
$file = "filedetails.php"; |
} |
// Now include the file that handles it |
include("$locwebsvnreal/$file"); |
} |
else |
{ |
print "<p>MultiViews must be configured in config.inc in order to use this file"; |
exit; |
} |
/WebSVN/cache/tmp |
---|
1,0 → 0,0 |
This file is here so that the directory gets included in the ZIP files. |
This file is here so that the directory gets included in the ZIP files |