mirror of
https://github.com/php/web-php.git
synced 2026-03-23 23:02:13 +01:00
Merge in new styles from PROTOTYPE_2010
(not includes/used anywhere yet)
This commit is contained in:
20
include/footer.inc
Normal file
20
include/footer.inc
Normal file
@@ -0,0 +1,20 @@
|
||||
<div class="cleaner"> </div>
|
||||
|
||||
<div id="footer">
|
||||
<ul class="footmenu copyright">
|
||||
<li><a href="/copyright.php">Copyright © 2001-2010 The PHP Group</a></li>
|
||||
</ul>
|
||||
<ul class="footmenu">
|
||||
<li><a href="/my.php">My PHP.net</a></li>
|
||||
<li><a href="/contact.php">Contact</a></li>
|
||||
<li><a href="/sites.php">Other PHP.net sites</a></li>
|
||||
<li><a href="/mirrors.php">Mirror sites</a></li>
|
||||
<li><a href="/privacy.php">Privacy policy</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!--script type="text/javascript" src="js/search-index-en.js" id=search-index></script-->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
146
include/header.inc
Normal file
146
include/header.inc
Normal file
@@ -0,0 +1,146 @@
|
||||
<?php $v = "?v=" .$_SERVER["REQUEST_TIME"]; // Disable caching, annoying while developing ?>
|
||||
<!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" xml:lang="<?php echo $lang?>" lang="<?php echo $lang?>">
|
||||
<head>
|
||||
|
||||
<title>PHP: <?php echo $title ?></title>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
|
||||
<link rel="shortcut icon" href="http://static.php.net/www.php.net/favicon.ico" />
|
||||
<link rel="search" type="application/opensearchdescription+xml" href="http://www.php.net/phpnetimprovedsearch.src" title="Add PHP.net search" />
|
||||
<link rel="alternate" type="application/atom+xml" href="http://www.php.net/releases.atom" title="PHP Release feed" />
|
||||
<link rel="alternate" type="application/atom+xml" title="PHP: Hypertext Preprocessor" href="http://www.php.net/feed.atom" />
|
||||
<link rel="canonical" href="http://php.net/index.php" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/styles/reset.css<?php echo $v?>" media="all" />
|
||||
<link rel="stylesheet" type="text/css" href="/styles/structure.css<?php echo $v?>" media="screen" />
|
||||
<link rel="stylesheet" type="text/css" href="/styles/doc.css<?php echo $v?>" media="screen" />
|
||||
<link rel="stylesheet" type="text/css" href="/styles/theme.css<?php echo $v?>" media="screen" />
|
||||
|
||||
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="/js/jquery.hoverIntent.minified.js"></script>
|
||||
<script type="text/javascript" src="/js/jquery.autocomplete.js"></script>
|
||||
<script type="text/javascript" src="/js/common.js<?php echo $v?>"></script>
|
||||
<base href="<?php echo $_SERVER["BASE_PAGE"] ?>" />
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="headnav">
|
||||
|
||||
<ul id="headmenu">
|
||||
<li id="headsearch">
|
||||
<form method="post" action="/search.php" id="topsearch">
|
||||
<fieldset>
|
||||
<input type="text" id="headsearch-keywords" name="pattern" value="Search..." size="30" accesskey="s" />
|
||||
<input type="submit"
|
||||
value="Go"
|
||||
id="headsearch-submit"
|
||||
class="submit" />
|
||||
</fieldset>
|
||||
</form>
|
||||
</li>
|
||||
<li id="headhome">
|
||||
<a href="/" rel="home" class="menu-link">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/downloads.php" class="menu-link">Downloads</a>
|
||||
</li>
|
||||
<li class="parent <?php echo $curr != "docs" ?: "current"?>">
|
||||
<a href="/docs.php" class="menu-link">Documentation</a>
|
||||
<div class="children"><div class="children-1"><div class="children-2">
|
||||
<?php echo doc_toc($lang); ?>
|
||||
<br style="clear: both;" />
|
||||
</div></div></div>
|
||||
</li>
|
||||
<li class="parent <?php echo $curr != "community" ?: "current"?>">
|
||||
<a href="/community.php" class="menu-link">Community</a>
|
||||
<div class="children"><div class="children-1"><div class="children-2">
|
||||
<dl style="width: 300px;">
|
||||
<dt><a href="/conferences/">Conferences</a></dt>
|
||||
<dd><a href="/conferences/">All upcoming PHP conferences</a></dd>
|
||||
<dd><a href="/submit-event.php">Add a new conference</a></dd>
|
||||
<dt><a href="#">News</a></dt>
|
||||
<dd><a href="#">Recent headline 1 (Oct 6)</a></dd>
|
||||
<dd><a href="#">Another recent headline 1 (Oct 4)</a></dd>
|
||||
<dd><a href="#">Yet another headline with a lot of text (Oct 2)</a></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><a href="http://wiki.php.net/">PHP Wiki</a></dt>
|
||||
<dd><a href="http://wiki.php.net/rfc">Write a RFC</a></dd>
|
||||
<dt><a href="#">Get Involved</a></dt>
|
||||
<dd><a href="#">Report bugs</a></dd>
|
||||
<dd><a href="#">Contribute code</a></dd>
|
||||
<dd><a href="#">Organize an event</a></dd>
|
||||
<dd><a href="#">Write documentation</a></dd>
|
||||
<dd><a href="#">Test PHP</a></dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt><a href="/mailing-lists.php">Mailing lists</a></dt>
|
||||
<dt><a href="/links.php">PHP related sites</a></dt>
|
||||
<dt><a href="#">About PHP.net</a></dt>
|
||||
<dd><a href="/sites.php">Other PHP.net sites</a></dd>
|
||||
<dd><a href="/my.php">My PHP.net</a></dd>
|
||||
<dd><a href="#">Contribute to the website</a></dd>
|
||||
<dd><a href="/credits.php">Who's behind this?</a></dd>
|
||||
<dd><a href="/contact.php">Contact us</a></dd>
|
||||
<dd><a href="/mirrors.php">Mirror sites</a></dd>
|
||||
</dl>
|
||||
<br style="clear: both;" />
|
||||
</div></div></div>
|
||||
</li>
|
||||
<li class="parent <?php echo $curr != "help" ?: "current"?>">
|
||||
<a href="/support.php" class="menu-link">Help</a>
|
||||
<div class="children"><div class="children-1"><div class="children-2">
|
||||
<dl style="width: 250px;">
|
||||
<dt><a href="#">Navigation tips</a></dt>
|
||||
<dd><a href="/sidebars.php">Search sidebars</a></dd>
|
||||
<dd><a href="/urlhowto.php">URL Howto</a></dd>
|
||||
<dd><a href="/tips.php">Quick Reference tips</a></dd>
|
||||
<dd><a href="/sites.php">Other PHP sites</a></dd>
|
||||
</dl>
|
||||
<dl style="width: 250px;">
|
||||
<dt><a href="#">Support</a></dt>
|
||||
<dd><a href="/mailing-lists.php">Mailing lists</a></dd>
|
||||
<dd><a href="/support.php">General resources</a></dd>
|
||||
</dl>
|
||||
<dl style="swidth: 250px";>
|
||||
<dt><a href="http://bugs.php.net/">Bugs</a></dt>
|
||||
<dd><a href="http://bugs.php.net/report.php">Report a bug</a></dd>
|
||||
<dd><a href="http://bugs.php.net/how-to-report.php">How to file a bug report</a></dd>
|
||||
<dd><a href="http://bugs.php.net/search.php">Search reported bugs</a></dd>
|
||||
</dl>
|
||||
<br style="clear: both;" />
|
||||
</div></div></div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<br style="clear: both;" />
|
||||
</div>
|
||||
|
||||
<div id="layout">
|
||||
<?php
|
||||
if (!empty($SIDEBAR_DATA)) {
|
||||
echo '<aside id="leftbar">', "\n$SIDEBAR_DATA\n</aside>\n";
|
||||
}
|
||||
if (!empty($config["leftmenu"])) {
|
||||
echo "<aside class='layout-menu'><ul>";
|
||||
foreach($config["leftmenu"] as $section) {
|
||||
echo "<li><a href='{$section["link"]}'>{$section["title"]}</a>\n";
|
||||
echo "<ul>";
|
||||
foreach($section["children"] as $item) {
|
||||
if ($item["current"]) {
|
||||
echo "<li class='current'><a href='{$item["link"]}'>{$item["title"]}</a></li>\n";
|
||||
} else {
|
||||
echo "<li><a href='{$item["link"]}'>{$item["title"]}</a></li>\n";
|
||||
}
|
||||
}
|
||||
echo "</ul>";
|
||||
echo "</li>";
|
||||
}
|
||||
echo "</ul></aside>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
60
js/common.js
Normal file
60
js/common.js
Normal file
@@ -0,0 +1,60 @@
|
||||
$(document).ready(function() {
|
||||
|
||||
// fade in/out mega drop-downs.
|
||||
$("#headmenu li:has(div.children)").hoverIntent({
|
||||
interval: 100,
|
||||
timeout: 200,
|
||||
over: function(){$(this).find("div.children").fadeIn(250);},
|
||||
out: function(){$(this).find("div.children").fadeOut(250);}
|
||||
});
|
||||
|
||||
// remove default search text on focus.
|
||||
$('#headsearch-keywords').focus(function(){
|
||||
if ($(this).attr("value") == getDefaultSearchText()) {
|
||||
$(this).attr("value", "");
|
||||
}
|
||||
}).blur(function(){
|
||||
if (!$(this).attr("value")) {
|
||||
$(this).attr("value", getDefaultSearchText());
|
||||
}
|
||||
});
|
||||
|
||||
// load the search index and enable auto-complete.
|
||||
jQuery.getScript("/js/search-index-" + getLanguage() + ".js", function(){
|
||||
$('#headsearch-keywords').autocomplete(searchIndex, {
|
||||
matchContains: true,
|
||||
scrollHeight: 240,
|
||||
formatItem: function(item) {
|
||||
return item.name;
|
||||
}
|
||||
}).result(
|
||||
function(event, item){
|
||||
alert("User selected: " + item['name'] + "\n" +
|
||||
"Direct user to: " + item['page']);
|
||||
window.location = '/manual/' + getLanguage() + '/' + item['page'];
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Get the default search text to use (e.g. 'Search...').
|
||||
*/
|
||||
function getDefaultSearchText()
|
||||
{
|
||||
switch (getLanguage()) {
|
||||
case "en":
|
||||
return "Search...";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine what language to present to the user.
|
||||
*
|
||||
* @todo make this detect the user's language.
|
||||
*/
|
||||
function getLanguage()
|
||||
{
|
||||
return "en";
|
||||
}
|
||||
808
js/jquery.autocomplete.js
Normal file
808
js/jquery.autocomplete.js
Normal file
@@ -0,0 +1,808 @@
|
||||
/*
|
||||
* jQuery Autocomplete plugin 1.1
|
||||
*
|
||||
* Copyright (c) 2009 Jörn Zaefferer
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
|
||||
*/
|
||||
|
||||
;(function($) {
|
||||
|
||||
$.fn.extend({
|
||||
autocomplete: function(urlOrData, options) {
|
||||
var isUrl = typeof urlOrData == "string";
|
||||
options = $.extend({}, $.Autocompleter.defaults, {
|
||||
url: isUrl ? urlOrData : null,
|
||||
data: isUrl ? null : urlOrData,
|
||||
delay: isUrl ? $.Autocompleter.defaults.delay : 10,
|
||||
max: options && !options.scroll ? 10 : 150
|
||||
}, options);
|
||||
|
||||
// if highlight is set to false, replace it with a do-nothing function
|
||||
options.highlight = options.highlight || function(value) { return value; };
|
||||
|
||||
// if the formatMatch option is not specified, then use formatItem for backwards compatibility
|
||||
options.formatMatch = options.formatMatch || options.formatItem;
|
||||
|
||||
return this.each(function() {
|
||||
new $.Autocompleter(this, options);
|
||||
});
|
||||
},
|
||||
result: function(handler) {
|
||||
return this.bind("result", handler);
|
||||
},
|
||||
search: function(handler) {
|
||||
return this.trigger("search", [handler]);
|
||||
},
|
||||
flushCache: function() {
|
||||
return this.trigger("flushCache");
|
||||
},
|
||||
setOptions: function(options){
|
||||
return this.trigger("setOptions", [options]);
|
||||
},
|
||||
unautocomplete: function() {
|
||||
return this.trigger("unautocomplete");
|
||||
}
|
||||
});
|
||||
|
||||
$.Autocompleter = function(input, options) {
|
||||
|
||||
var KEY = {
|
||||
UP: 38,
|
||||
DOWN: 40,
|
||||
DEL: 46,
|
||||
TAB: 9,
|
||||
RETURN: 13,
|
||||
ESC: 27,
|
||||
COMMA: 188,
|
||||
PAGEUP: 33,
|
||||
PAGEDOWN: 34,
|
||||
BACKSPACE: 8
|
||||
};
|
||||
|
||||
// Create $ object for input element
|
||||
var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
|
||||
|
||||
var timeout;
|
||||
var previousValue = "";
|
||||
var cache = $.Autocompleter.Cache(options);
|
||||
var hasFocus = 0;
|
||||
var lastKeyPressCode;
|
||||
var config = {
|
||||
mouseDownOnSelect: false
|
||||
};
|
||||
var select = $.Autocompleter.Select(options, input, selectCurrent, config);
|
||||
|
||||
var blockSubmit;
|
||||
|
||||
// prevent form submit in opera when selecting with return key
|
||||
$.browser.opera && $(input.form).bind("submit.autocomplete", function() {
|
||||
if (blockSubmit) {
|
||||
blockSubmit = false;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
|
||||
$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
|
||||
// a keypress means the input has focus
|
||||
// avoids issue where input had focus before the autocomplete was applied
|
||||
hasFocus = 1;
|
||||
// track last key pressed
|
||||
lastKeyPressCode = event.keyCode;
|
||||
switch(event.keyCode) {
|
||||
|
||||
case KEY.UP:
|
||||
event.preventDefault();
|
||||
if ( select.visible() ) {
|
||||
select.prev();
|
||||
} else {
|
||||
onChange(0, true);
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY.DOWN:
|
||||
event.preventDefault();
|
||||
if ( select.visible() ) {
|
||||
select.next();
|
||||
} else {
|
||||
onChange(0, true);
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY.PAGEUP:
|
||||
event.preventDefault();
|
||||
if ( select.visible() ) {
|
||||
select.pageUp();
|
||||
} else {
|
||||
onChange(0, true);
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY.PAGEDOWN:
|
||||
event.preventDefault();
|
||||
if ( select.visible() ) {
|
||||
select.pageDown();
|
||||
} else {
|
||||
onChange(0, true);
|
||||
}
|
||||
break;
|
||||
|
||||
// matches also semicolon
|
||||
case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
|
||||
case KEY.TAB:
|
||||
case KEY.RETURN:
|
||||
if( selectCurrent() ) {
|
||||
// stop default to prevent a form submit, Opera needs special handling
|
||||
event.preventDefault();
|
||||
blockSubmit = true;
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case KEY.ESC:
|
||||
select.hide();
|
||||
break;
|
||||
|
||||
default:
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(onChange, options.delay);
|
||||
break;
|
||||
}
|
||||
}).focus(function(){
|
||||
// track whether the field has focus, we shouldn't process any
|
||||
// results if the field no longer has focus
|
||||
hasFocus++;
|
||||
}).blur(function() {
|
||||
hasFocus = 0;
|
||||
if (!config.mouseDownOnSelect) {
|
||||
hideResults();
|
||||
}
|
||||
}).click(function() {
|
||||
// show select when clicking in a focused field
|
||||
if ( hasFocus++ > 1 && !select.visible() ) {
|
||||
onChange(0, true);
|
||||
}
|
||||
}).bind("search", function() {
|
||||
// TODO why not just specifying both arguments?
|
||||
var fn = (arguments.length > 1) ? arguments[1] : null;
|
||||
function findValueCallback(q, data) {
|
||||
var result;
|
||||
if( data && data.length ) {
|
||||
for (var i=0; i < data.length; i++) {
|
||||
if( data[i].result.toLowerCase() == q.toLowerCase() ) {
|
||||
result = data[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if( typeof fn == "function" ) fn(result);
|
||||
else $input.trigger("result", result && [result.data, result.value]);
|
||||
}
|
||||
$.each(trimWords($input.val()), function(i, value) {
|
||||
request(value, findValueCallback, findValueCallback);
|
||||
});
|
||||
}).bind("flushCache", function() {
|
||||
cache.flush();
|
||||
}).bind("setOptions", function() {
|
||||
$.extend(options, arguments[1]);
|
||||
// if we've updated the data, repopulate
|
||||
if ( "data" in arguments[1] )
|
||||
cache.populate();
|
||||
}).bind("unautocomplete", function() {
|
||||
select.unbind();
|
||||
$input.unbind();
|
||||
$(input.form).unbind(".autocomplete");
|
||||
});
|
||||
|
||||
|
||||
function selectCurrent() {
|
||||
var selected = select.selected();
|
||||
if( !selected )
|
||||
return false;
|
||||
|
||||
var v = selected.result;
|
||||
previousValue = v;
|
||||
|
||||
if ( options.multiple ) {
|
||||
var words = trimWords($input.val());
|
||||
if ( words.length > 1 ) {
|
||||
var seperator = options.multipleSeparator.length;
|
||||
var cursorAt = $(input).selection().start;
|
||||
var wordAt, progress = 0;
|
||||
$.each(words, function(i, word) {
|
||||
progress += word.length;
|
||||
if (cursorAt <= progress) {
|
||||
wordAt = i;
|
||||
return false;
|
||||
}
|
||||
progress += seperator;
|
||||
});
|
||||
words[wordAt] = v;
|
||||
// TODO this should set the cursor to the right position, but it gets overriden somewhere
|
||||
//$.Autocompleter.Selection(input, progress + seperator, progress + seperator);
|
||||
v = words.join( options.multipleSeparator );
|
||||
}
|
||||
v += options.multipleSeparator;
|
||||
}
|
||||
|
||||
$input.val(v);
|
||||
hideResultsNow();
|
||||
$input.trigger("result", [selected.data, selected.value]);
|
||||
return true;
|
||||
}
|
||||
|
||||
function onChange(crap, skipPrevCheck) {
|
||||
if( lastKeyPressCode == KEY.DEL ) {
|
||||
select.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
var currentValue = $input.val();
|
||||
|
||||
if ( !skipPrevCheck && currentValue == previousValue )
|
||||
return;
|
||||
|
||||
previousValue = currentValue;
|
||||
|
||||
currentValue = lastWord(currentValue);
|
||||
if ( currentValue.length >= options.minChars) {
|
||||
$input.addClass(options.loadingClass);
|
||||
if (!options.matchCase)
|
||||
currentValue = currentValue.toLowerCase();
|
||||
request(currentValue, receiveData, hideResultsNow);
|
||||
} else {
|
||||
stopLoading();
|
||||
select.hide();
|
||||
}
|
||||
};
|
||||
|
||||
function trimWords(value) {
|
||||
if (!value)
|
||||
return [""];
|
||||
if (!options.multiple)
|
||||
return [$.trim(value)];
|
||||
return $.map(value.split(options.multipleSeparator), function(word) {
|
||||
return $.trim(value).length ? $.trim(word) : null;
|
||||
});
|
||||
}
|
||||
|
||||
function lastWord(value) {
|
||||
if ( !options.multiple )
|
||||
return value;
|
||||
var words = trimWords(value);
|
||||
if (words.length == 1)
|
||||
return words[0];
|
||||
var cursorAt = $(input).selection().start;
|
||||
if (cursorAt == value.length) {
|
||||
words = trimWords(value)
|
||||
} else {
|
||||
words = trimWords(value.replace(value.substring(cursorAt), ""));
|
||||
}
|
||||
return words[words.length - 1];
|
||||
}
|
||||
|
||||
// fills in the input box w/the first match (assumed to be the best match)
|
||||
// q: the term entered
|
||||
// sValue: the first matching result
|
||||
function autoFill(q, sValue){
|
||||
// autofill in the complete box w/the first match as long as the user hasn't entered in more data
|
||||
// if the last user key pressed was backspace, don't autofill
|
||||
if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
|
||||
// fill in the value (keep the case the user has typed)
|
||||
$input.val($input.val() + sValue.substring(lastWord(previousValue).length));
|
||||
// select the portion of the value not typed by the user (so the next character will erase)
|
||||
$(input).selection(previousValue.length, previousValue.length + sValue.length);
|
||||
}
|
||||
};
|
||||
|
||||
function hideResults() {
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(hideResultsNow, 200);
|
||||
};
|
||||
|
||||
function hideResultsNow() {
|
||||
var wasVisible = select.visible();
|
||||
select.hide();
|
||||
clearTimeout(timeout);
|
||||
stopLoading();
|
||||
if (options.mustMatch) {
|
||||
// call search and run callback
|
||||
$input.search(
|
||||
function (result){
|
||||
// if no value found, clear the input box
|
||||
if( !result ) {
|
||||
if (options.multiple) {
|
||||
var words = trimWords($input.val()).slice(0, -1);
|
||||
$input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
|
||||
}
|
||||
else {
|
||||
$input.val( "" );
|
||||
$input.trigger("result", null);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
function receiveData(q, data) {
|
||||
if ( data && data.length && hasFocus ) {
|
||||
stopLoading();
|
||||
select.display(data, q);
|
||||
autoFill(q, data[0].value);
|
||||
select.show();
|
||||
} else {
|
||||
hideResultsNow();
|
||||
}
|
||||
};
|
||||
|
||||
function request(term, success, failure) {
|
||||
if (!options.matchCase)
|
||||
term = term.toLowerCase();
|
||||
var data = cache.load(term);
|
||||
// recieve the cached data
|
||||
if (data && data.length) {
|
||||
success(term, data);
|
||||
// if an AJAX url has been supplied, try loading the data now
|
||||
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
|
||||
|
||||
var extraParams = {
|
||||
timestamp: +new Date()
|
||||
};
|
||||
$.each(options.extraParams, function(key, param) {
|
||||
extraParams[key] = typeof param == "function" ? param() : param;
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
// try to leverage ajaxQueue plugin to abort previous requests
|
||||
mode: "abort",
|
||||
// limit abortion to this input
|
||||
port: "autocomplete" + input.name,
|
||||
dataType: options.dataType,
|
||||
url: options.url,
|
||||
data: $.extend({
|
||||
q: lastWord(term),
|
||||
limit: options.max
|
||||
}, extraParams),
|
||||
success: function(data) {
|
||||
var parsed = options.parse && options.parse(data) || parse(data);
|
||||
cache.add(term, parsed);
|
||||
success(term, parsed);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
|
||||
select.emptyList();
|
||||
failure(term);
|
||||
}
|
||||
};
|
||||
|
||||
function parse(data) {
|
||||
var parsed = [];
|
||||
var rows = data.split("\n");
|
||||
for (var i=0; i < rows.length; i++) {
|
||||
var row = $.trim(rows[i]);
|
||||
if (row) {
|
||||
row = row.split("|");
|
||||
parsed[parsed.length] = {
|
||||
data: row,
|
||||
value: row[0],
|
||||
result: options.formatResult && options.formatResult(row, row[0]) || row[0]
|
||||
};
|
||||
}
|
||||
}
|
||||
return parsed;
|
||||
};
|
||||
|
||||
function stopLoading() {
|
||||
$input.removeClass(options.loadingClass);
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
$.Autocompleter.defaults = {
|
||||
inputClass: "ac_input",
|
||||
resultsClass: "ac_results",
|
||||
loadingClass: "ac_loading",
|
||||
minChars: 1,
|
||||
delay: 400,
|
||||
matchCase: false,
|
||||
matchSubset: true,
|
||||
matchContains: false,
|
||||
cacheLength: 10,
|
||||
max: 100,
|
||||
mustMatch: false,
|
||||
extraParams: {},
|
||||
selectFirst: true,
|
||||
formatItem: function(row) { return row[0]; },
|
||||
formatMatch: null,
|
||||
autoFill: false,
|
||||
width: 0,
|
||||
multiple: false,
|
||||
multipleSeparator: ", ",
|
||||
highlight: function(value, term) {
|
||||
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
|
||||
},
|
||||
scroll: true,
|
||||
scrollHeight: 180
|
||||
};
|
||||
|
||||
$.Autocompleter.Cache = function(options) {
|
||||
|
||||
var data = {};
|
||||
var length = 0;
|
||||
|
||||
function matchSubset(s, sub) {
|
||||
if (!options.matchCase)
|
||||
s = s.toLowerCase();
|
||||
var i = s.indexOf(sub);
|
||||
if (options.matchContains == "word"){
|
||||
i = s.toLowerCase().search("\\b" + sub.toLowerCase());
|
||||
}
|
||||
if (i == -1) return false;
|
||||
return i == 0 || options.matchContains;
|
||||
};
|
||||
|
||||
function add(q, value) {
|
||||
if (length > options.cacheLength){
|
||||
flush();
|
||||
}
|
||||
if (!data[q]){
|
||||
length++;
|
||||
}
|
||||
data[q] = value;
|
||||
}
|
||||
|
||||
function populate(){
|
||||
if( !options.data ) return false;
|
||||
// track the matches
|
||||
var stMatchSets = {},
|
||||
nullData = 0;
|
||||
|
||||
// no url was specified, we need to adjust the cache length to make sure it fits the local data store
|
||||
if( !options.url ) options.cacheLength = 1;
|
||||
|
||||
// track all options for minChars = 0
|
||||
stMatchSets[""] = [];
|
||||
|
||||
// loop through the array and create a lookup structure
|
||||
for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
|
||||
var rawValue = options.data[i];
|
||||
// if rawValue is a string, make an array otherwise just reference the array
|
||||
rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
|
||||
|
||||
var value = options.formatMatch(rawValue, i+1, options.data.length);
|
||||
if ( value === false )
|
||||
continue;
|
||||
|
||||
var firstChar = value.charAt(0).toLowerCase();
|
||||
// if no lookup array for this character exists, look it up now
|
||||
if( !stMatchSets[firstChar] )
|
||||
stMatchSets[firstChar] = [];
|
||||
|
||||
// if the match is a string
|
||||
var row = {
|
||||
value: value,
|
||||
data: rawValue,
|
||||
result: options.formatResult && options.formatResult(rawValue) || value
|
||||
};
|
||||
|
||||
// push the current match into the set list
|
||||
stMatchSets[firstChar].push(row);
|
||||
|
||||
// keep track of minChars zero items
|
||||
if ( nullData++ < options.max ) {
|
||||
stMatchSets[""].push(row);
|
||||
}
|
||||
};
|
||||
|
||||
// add the data items to the cache
|
||||
$.each(stMatchSets, function(i, value) {
|
||||
// increase the cache size
|
||||
options.cacheLength++;
|
||||
// add to the cache
|
||||
add(i, value);
|
||||
});
|
||||
}
|
||||
|
||||
// populate any existing data
|
||||
setTimeout(populate, 25);
|
||||
|
||||
function flush(){
|
||||
data = {};
|
||||
length = 0;
|
||||
}
|
||||
|
||||
return {
|
||||
flush: flush,
|
||||
add: add,
|
||||
populate: populate,
|
||||
load: function(q) {
|
||||
if (!options.cacheLength || !length)
|
||||
return null;
|
||||
/*
|
||||
* if dealing w/local data and matchContains than we must make sure
|
||||
* to loop through all the data collections looking for matches
|
||||
*/
|
||||
if( !options.url && options.matchContains ){
|
||||
// track all matches
|
||||
var csub = [];
|
||||
// loop through all the data grids for matches
|
||||
for( var k in data ){
|
||||
// don't search through the stMatchSets[""] (minChars: 0) cache
|
||||
// this prevents duplicates
|
||||
if( k.length > 0 ){
|
||||
var c = data[k];
|
||||
$.each(c, function(i, x) {
|
||||
// if we've got a match, add it to the array
|
||||
if (matchSubset(x.value, q)) {
|
||||
csub.push(x);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return csub;
|
||||
} else
|
||||
// if the exact item exists, use it
|
||||
if (data[q]){
|
||||
return data[q];
|
||||
} else
|
||||
if (options.matchSubset) {
|
||||
for (var i = q.length - 1; i >= options.minChars; i--) {
|
||||
var c = data[q.substr(0, i)];
|
||||
if (c) {
|
||||
var csub = [];
|
||||
$.each(c, function(i, x) {
|
||||
if (matchSubset(x.value, q)) {
|
||||
csub[csub.length] = x;
|
||||
}
|
||||
});
|
||||
return csub;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
$.Autocompleter.Select = function (options, input, select, config) {
|
||||
var CLASSES = {
|
||||
ACTIVE: "ac_over"
|
||||
};
|
||||
|
||||
var listItems,
|
||||
active = -1,
|
||||
data,
|
||||
term = "",
|
||||
needsInit = true,
|
||||
element,
|
||||
list;
|
||||
|
||||
// Create results
|
||||
function init() {
|
||||
if (!needsInit)
|
||||
return;
|
||||
element = $("<div/>")
|
||||
.hide()
|
||||
.addClass(options.resultsClass)
|
||||
.css("position", "absolute")
|
||||
.appendTo(document.body);
|
||||
|
||||
list = $("<ul/>").appendTo(element).mouseover( function(event) {
|
||||
if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
|
||||
active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
|
||||
$(target(event)).addClass(CLASSES.ACTIVE);
|
||||
}
|
||||
}).click(function(event) {
|
||||
$(target(event)).addClass(CLASSES.ACTIVE);
|
||||
select();
|
||||
// TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
|
||||
input.focus();
|
||||
return false;
|
||||
}).mousedown(function() {
|
||||
config.mouseDownOnSelect = true;
|
||||
}).mouseup(function() {
|
||||
config.mouseDownOnSelect = false;
|
||||
});
|
||||
|
||||
if( options.width > 0 )
|
||||
element.css("width", options.width);
|
||||
|
||||
needsInit = false;
|
||||
}
|
||||
|
||||
function target(event) {
|
||||
var element = event.target;
|
||||
while(element && element.tagName != "LI")
|
||||
element = element.parentNode;
|
||||
// more fun with IE, sometimes event.target is empty, just ignore it then
|
||||
if(!element)
|
||||
return [];
|
||||
return element;
|
||||
}
|
||||
|
||||
function moveSelect(step) {
|
||||
listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
|
||||
movePosition(step);
|
||||
var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
|
||||
if(options.scroll) {
|
||||
var offset = 0;
|
||||
listItems.slice(0, active).each(function() {
|
||||
offset += this.offsetHeight;
|
||||
});
|
||||
if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
|
||||
list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
|
||||
} else if(offset < list.scrollTop()) {
|
||||
list.scrollTop(offset);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function movePosition(step) {
|
||||
active += step;
|
||||
if (active < 0) {
|
||||
active = listItems.size() - 1;
|
||||
} else if (active >= listItems.size()) {
|
||||
active = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function limitNumberOfItems(available) {
|
||||
return options.max && options.max < available
|
||||
? options.max
|
||||
: available;
|
||||
}
|
||||
|
||||
function fillList() {
|
||||
list.empty();
|
||||
var max = limitNumberOfItems(data.length);
|
||||
for (var i=0; i < max; i++) {
|
||||
if (!data[i])
|
||||
continue;
|
||||
var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
|
||||
if ( formatted === false )
|
||||
continue;
|
||||
var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
|
||||
$.data(li, "ac_data", data[i]);
|
||||
}
|
||||
listItems = list.find("li");
|
||||
if ( options.selectFirst ) {
|
||||
listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
|
||||
active = 0;
|
||||
}
|
||||
// apply bgiframe if available
|
||||
if ( $.fn.bgiframe )
|
||||
list.bgiframe();
|
||||
}
|
||||
|
||||
return {
|
||||
display: function(d, q) {
|
||||
init();
|
||||
data = d;
|
||||
term = q;
|
||||
fillList();
|
||||
},
|
||||
next: function() {
|
||||
moveSelect(1);
|
||||
},
|
||||
prev: function() {
|
||||
moveSelect(-1);
|
||||
},
|
||||
pageUp: function() {
|
||||
if (active != 0 && active - 8 < 0) {
|
||||
moveSelect( -active );
|
||||
} else {
|
||||
moveSelect(-8);
|
||||
}
|
||||
},
|
||||
pageDown: function() {
|
||||
if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
|
||||
moveSelect( listItems.size() - 1 - active );
|
||||
} else {
|
||||
moveSelect(8);
|
||||
}
|
||||
},
|
||||
hide: function() {
|
||||
element && element.hide();
|
||||
listItems && listItems.removeClass(CLASSES.ACTIVE);
|
||||
active = -1;
|
||||
},
|
||||
visible : function() {
|
||||
return element && element.is(":visible");
|
||||
},
|
||||
current: function() {
|
||||
return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
|
||||
},
|
||||
show: function() {
|
||||
var offset = $(input).offset();
|
||||
element.css({
|
||||
width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
|
||||
top: offset.top + input.offsetHeight,
|
||||
left: offset.left
|
||||
}).show();
|
||||
if(options.scroll) {
|
||||
list.scrollTop(0);
|
||||
list.css({
|
||||
maxHeight: options.scrollHeight,
|
||||
overflow: 'auto'
|
||||
});
|
||||
|
||||
if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
|
||||
var listHeight = 0;
|
||||
listItems.each(function() {
|
||||
listHeight += this.offsetHeight;
|
||||
});
|
||||
var scrollbarsVisible = listHeight > options.scrollHeight;
|
||||
list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
|
||||
if (!scrollbarsVisible) {
|
||||
// IE doesn't recalculate width when scrollbar disappears
|
||||
listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
selected: function() {
|
||||
var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
|
||||
return selected && selected.length && $.data(selected[0], "ac_data");
|
||||
},
|
||||
emptyList: function (){
|
||||
list && list.empty();
|
||||
},
|
||||
unbind: function() {
|
||||
element && element.remove();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
$.fn.selection = function(start, end) {
|
||||
if (start !== undefined) {
|
||||
return this.each(function() {
|
||||
if( this.createTextRange ){
|
||||
var selRange = this.createTextRange();
|
||||
if (end === undefined || start == end) {
|
||||
selRange.move("character", start);
|
||||
selRange.select();
|
||||
} else {
|
||||
selRange.collapse(true);
|
||||
selRange.moveStart("character", start);
|
||||
selRange.moveEnd("character", end);
|
||||
selRange.select();
|
||||
}
|
||||
} else if( this.setSelectionRange ){
|
||||
this.setSelectionRange(start, end);
|
||||
} else if( this.selectionStart ){
|
||||
this.selectionStart = start;
|
||||
this.selectionEnd = end;
|
||||
}
|
||||
});
|
||||
}
|
||||
var field = this[0];
|
||||
if ( field.createTextRange ) {
|
||||
var range = document.selection.createRange(),
|
||||
orig = field.value,
|
||||
teststring = "<->",
|
||||
textLength = range.text.length;
|
||||
range.text = teststring;
|
||||
var caretAt = field.value.indexOf(teststring);
|
||||
field.value = orig;
|
||||
this.selection(caretAt, caretAt + textLength);
|
||||
return {
|
||||
start: caretAt,
|
||||
end: caretAt + textLength
|
||||
}
|
||||
} else if( field.selectionStart !== undefined ){
|
||||
return {
|
||||
start: field.selectionStart,
|
||||
end: field.selectionEnd
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
12
js/jquery.autocomplete.pack.js
Normal file
12
js/jquery.autocomplete.pack.js
Normal file
File diff suppressed because one or more lines are too long
9
js/jquery.hoverIntent.minified.js
Normal file
9
js/jquery.hoverIntent.minified.js
Normal file
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
|
||||
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
|
||||
*
|
||||
* @param f onMouseOver function || An object with configuration options
|
||||
* @param g onMouseOut function || Nothing (use configuration options object)
|
||||
* @author Brian Cherne <brian@cherne.net>
|
||||
*/
|
||||
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);
|
||||
1
js/search-index-en.js
Normal file
1
js/search-index-en.js
Normal file
File diff suppressed because one or more lines are too long
118
styles/doc.css
Normal file
118
styles/doc.css
Normal file
@@ -0,0 +1,118 @@
|
||||
.refentry {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
h3.title {
|
||||
font-size: 1.5em;
|
||||
border-top-style: solid;
|
||||
border-top-width: 3px;
|
||||
padding-top: 6px;
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
i .parameter {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.refentry .methodsynopsis {
|
||||
padding: 10px 20px;
|
||||
margin: 1em 2em 1.3em;
|
||||
border-top: 3px solid #ddd;
|
||||
background: #efefef;
|
||||
color: #666;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.refentry div.warning,
|
||||
.refentry div.tip,
|
||||
.refentry .notes blockquote {
|
||||
padding: 10px 20px;
|
||||
margin: 1em 2em 1.3em;
|
||||
}
|
||||
|
||||
.refentry .notes blockquote {
|
||||
border-top: 3px solid #fff08a;
|
||||
background-color: #EFEFEF;
|
||||
}
|
||||
.refentry div.tip {
|
||||
border-top: 3px solid #434343;
|
||||
background-color: #EFEFEF;
|
||||
}
|
||||
.refentry div.warning {
|
||||
border-top: 3px solid #ff4d4d;
|
||||
background-color: #EFEFEF;
|
||||
}
|
||||
.refentry .notes blockquote, .refentry div.warning, .refentry div.tip {
|
||||
font-size: 1em;
|
||||
margin-right: 0.8em;
|
||||
}
|
||||
.refentry div.warning b.warning, .refentry div.tip b.tip {
|
||||
float: left;
|
||||
margin-right: 0.8em;
|
||||
}
|
||||
|
||||
.methodname b {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.parameter {
|
||||
color: #604080;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.initializer {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
td, th {
|
||||
padding: 2px 5px;
|
||||
}
|
||||
|
||||
.refentry .description p {
|
||||
margin: 0.7em 0;
|
||||
}
|
||||
|
||||
.refentry .parameters dt {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.refentry .parameters dd {
|
||||
margin-top: -0.7em;
|
||||
}
|
||||
|
||||
.refentry .parameters p {
|
||||
margin: 0.7em 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.refentry .phpcode, .refentry .screen {
|
||||
border: 1px solid #E2E1D5;
|
||||
background-color: #EFEFEF;
|
||||
padding: 10px;
|
||||
}
|
||||
.refentry .example {
|
||||
margin: 15px;
|
||||
border-top: 1px solid #0a0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.refentry .changelog .doctable {
|
||||
width: 100%;
|
||||
}
|
||||
.refentry .changelog .doctable th {
|
||||
border-bottom: 1px solid #987db3;
|
||||
}
|
||||
.refentry .changelog .doctable td {
|
||||
border-right: 1px solid #987db3;
|
||||
}
|
||||
.refentry .changelog .doctable td:last-child {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
|
||||
43
styles/reset.css
Normal file
43
styles/reset.css
Normal file
@@ -0,0 +1,43 @@
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, font, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
font-size: 100%;
|
||||
vertical-align: baseline;
|
||||
background: transparent;
|
||||
text-decoration: none;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
|
||||
/* remember to define focus styles! */
|
||||
:focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* tables still need 'cellspacing="0"' in the markup */
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
214
styles/structure.css
Normal file
214
styles/structure.css
Normal file
@@ -0,0 +1,214 @@
|
||||
body, input, textarea {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
#headnav {
|
||||
padding: 0 25px;
|
||||
height: 72px;
|
||||
}
|
||||
|
||||
#headmenu {
|
||||
width: 920px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#headnav h6,
|
||||
#headnav li,
|
||||
#headsearch {
|
||||
display: block;
|
||||
float: left;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
padding: 18px 0 0 0;
|
||||
}
|
||||
|
||||
#headnav li#headhome {
|
||||
}
|
||||
|
||||
#headnav li#headhome a,
|
||||
#headnav li#headhome a:hover {
|
||||
width: 150px;
|
||||
height: 16px;
|
||||
text-indent: -2000em;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#headnav li#headsearch {
|
||||
margin: 22px 0 0 20px;
|
||||
padding: 2px;
|
||||
float: right;
|
||||
border: 1px solid;
|
||||
}
|
||||
|
||||
#headsearch-keywords {
|
||||
border: 0;
|
||||
padding: 2px;
|
||||
width: 14em;
|
||||
}
|
||||
|
||||
#headsearch-submit {
|
||||
border: 0;
|
||||
margin: 1px;
|
||||
padding: 2px 5px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#headnav a.menu-link,
|
||||
#headnav h6 a {
|
||||
display: block;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
border-bottom: 12px solid;
|
||||
}
|
||||
|
||||
#headnav a.menu-link,
|
||||
#headnav li.current a.menu-link {
|
||||
padding: 12px 15px 17px 15px;
|
||||
}
|
||||
|
||||
#headnav li.parent a.menu-link {
|
||||
padding-right: 22px;
|
||||
}
|
||||
|
||||
#headnav li.parent .children {
|
||||
display: none;
|
||||
z-index: 1000;
|
||||
position: absolute;
|
||||
top: 71px;
|
||||
left: 50%;
|
||||
margin-left: -470px;
|
||||
width: 940px;
|
||||
}
|
||||
|
||||
#headnav li.parent .children .children-1 {
|
||||
margin: 1px 5px 5px 5px;
|
||||
border: 2px solid;
|
||||
border-top: none;
|
||||
line-height: 1.4;
|
||||
padding: 10px 15px 15px 15px;
|
||||
}
|
||||
|
||||
#headnav li.parent .children .children-2 {
|
||||
width: 920px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#headnav .myphp {
|
||||
float: left;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 30px;
|
||||
}
|
||||
|
||||
.children dl {
|
||||
float: left;
|
||||
width: 195px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.children dl a {
|
||||
display: block;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.children dt {
|
||||
font-weight: bold;
|
||||
margin-top: 1em;
|
||||
border-top-width: 3px;
|
||||
border-top-style: solid;
|
||||
}
|
||||
|
||||
.children dd {
|
||||
padding: 0 0 0 10px;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
#layout {
|
||||
padding: 25px 10px;
|
||||
max-width: 1400px;
|
||||
min-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.layout-menu {
|
||||
float: left;
|
||||
width: 160px;
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
.layout-menu li a {
|
||||
display: block;
|
||||
border-top-width: 3px;
|
||||
border-top-style: solid;
|
||||
padding: 4px 0;
|
||||
margin-top: 1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.layout-menu li li a {
|
||||
border: none;
|
||||
font-size: 11px;
|
||||
padding: 1px 0 1px 20px;
|
||||
margin: 0;
|
||||
font-weight: normal;
|
||||
}
|
||||
.layout-menu li.current a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.layout-content {
|
||||
margin-left: 190px;
|
||||
}
|
||||
|
||||
#footer .footmenu {
|
||||
float: right;
|
||||
}
|
||||
#footer .footmenu.copyright {
|
||||
float: left;
|
||||
}
|
||||
#footer .footmenu li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Auto-complete (.ac)
|
||||
*/
|
||||
.ac_results {
|
||||
padding: 1px 3px 3px 3px;
|
||||
overflow: hidden;
|
||||
z-index: 99999;
|
||||
margin: 0 0 0 1px;
|
||||
}
|
||||
|
||||
.ac_results ul {
|
||||
list-style-position: outside;
|
||||
list-style: none;
|
||||
padding: 0 0 5px 0;
|
||||
margin: 0;
|
||||
border: 1px solid;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.ac_results li {
|
||||
margin: 0px;
|
||||
padding: 2px 5px;
|
||||
cursor: default;
|
||||
display: block;
|
||||
/*
|
||||
if width will be 100% horizontal scrollbar will apear
|
||||
when scroll mode will be used
|
||||
*/
|
||||
/*width: 100%;*/
|
||||
font: menu;
|
||||
font-size: 12px;
|
||||
/*
|
||||
it is very important, if line-height not setted or setted
|
||||
in relative units scroll will be broken in firefox
|
||||
*/
|
||||
line-height: 16px;
|
||||
overflow: hidden;
|
||||
}
|
||||
224
styles/theme.css
Normal file
224
styles/theme.css
Normal file
@@ -0,0 +1,224 @@
|
||||
/**
|
||||
*
|
||||
* COLORS: | HEX | HSB
|
||||
* ---------------+---------+---------------
|
||||
* light-purple | #c3add9 | 270, 20%, 85%
|
||||
* ---------------+---------+---------------
|
||||
* medium-purple | #987db3 | 270, 30%, 70%
|
||||
* ---------------+---------+---------------
|
||||
* dark-purple | #604080 | 270, 50%, 50%
|
||||
* ---------------+---------+---------------
|
||||
*
|
||||
*/
|
||||
|
||||
body * {
|
||||
border-color: #c3add9;
|
||||
}
|
||||
|
||||
body, input, textarea {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.4;
|
||||
background: url('/images/sprites.png') repeat-x 0px -990px;
|
||||
}
|
||||
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #528918;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #355c0b;
|
||||
}
|
||||
|
||||
#headnav {
|
||||
line-height: 1;
|
||||
background: url('/images/sprites.png') repeat-x 0px -100px;
|
||||
}
|
||||
|
||||
#headhome a {
|
||||
background: url(/images/sprites.png) 0 0;
|
||||
}
|
||||
|
||||
#headnav li.parent .children {
|
||||
background: url('/images/shade.png');
|
||||
-moz-border-radius-bottomleft: 5px;
|
||||
-moz-border-radius-bottomright: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px;
|
||||
-webkit-border-bottom-right-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
#headnav li.parent .children .children-1 {
|
||||
background: #fff;
|
||||
border-color: #604080;
|
||||
-moz-border-radius-bottomleft: 5px;
|
||||
-moz-border-radius-bottomright: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px;
|
||||
-webkit-border-bottom-right-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
#headnav li.parent a.menu-link {
|
||||
background: url(/images/sprites.png) no-repeat 100% 7px;
|
||||
}
|
||||
|
||||
#headnav li.parent.current a.menu-link {
|
||||
background-position: 100% -23px;
|
||||
}
|
||||
|
||||
#headnav a.menu-link {
|
||||
color: #444;
|
||||
border-color: #987db3;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#headnav li#headsearch {
|
||||
border-color: #987db3;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
#headsearch-keywords {
|
||||
color: #666;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#headsearch-keywords:focus {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#headsearch-submit {
|
||||
border-color: #987db3;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #604080;
|
||||
background: #604080;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#headnav li dl {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
#headnav li dl dd:hover,
|
||||
#headnav li dl dt:hover {
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
#headnav li.current a.menu-link,
|
||||
#headnav li a.menu-link:hover {
|
||||
border-color: #604080;
|
||||
}
|
||||
|
||||
#headnav li.current a.menu-link {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
h1, h1 a, h1 a:visited, h1 a:link {
|
||||
font-size: 40px;
|
||||
font-weight: normal;
|
||||
color: #666;
|
||||
letter-spacing: -0.04em;
|
||||
}
|
||||
|
||||
#footer {
|
||||
border-top: 3px solid #c3add9;
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
#footer a {
|
||||
color: #444;
|
||||
border-color: #987db3;
|
||||
font-weight: bold;
|
||||
margin: 0 8px;
|
||||
}
|
||||
|
||||
#footer a:hover {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
h1 a:hover {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
/**
|
||||
* Auto-complete (.ac)
|
||||
*/
|
||||
.ac_results {
|
||||
background: url('/images/shade.png');
|
||||
-moz-border-radius-bottomleft: 5px;
|
||||
-moz-border-radius-bottomright: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px;
|
||||
-webkit-border-bottom-right-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
.ac_results ul {
|
||||
border-color: #604080;
|
||||
background-color: white;
|
||||
-moz-border-radius-bottomleft: 5px;
|
||||
-moz-border-radius-bottomright: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px;
|
||||
-webkit-border-bottom-right-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
.ac_over {
|
||||
background-color: #604080;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/**
|
||||
* User notes
|
||||
*/
|
||||
#usernotes {
|
||||
background: #eee;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#usernotes .action {
|
||||
display: block;
|
||||
top: 1em;
|
||||
right: 20px;
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#usernotes .foot .action {
|
||||
position: relative;
|
||||
top: -1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
#usernotes h3 {
|
||||
border-color: #4d63ff;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
#usernotes .note {
|
||||
margin: 0 20px 2em 20px;
|
||||
border-top: 3px solid #ddd;
|
||||
}
|
||||
|
||||
#usernotes .user, #usernotes .date {
|
||||
display: block;
|
||||
width: 50%;
|
||||
float: left;
|
||||
margin-bottom: 0.6em;
|
||||
}
|
||||
|
||||
#usernotes .date {
|
||||
float:right;
|
||||
text-align: right;
|
||||
}
|
||||
Reference in New Issue
Block a user