You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nutch.apache.org by si...@apache.org on 2009/07/03 07:08:07 UTC
svn commit: r790789 [2/4] - in /lucene/nutch/trunk: site/ src/site/
src/site/src/documentation/ src/site/src/documentation/skins/
src/site/src/documentation/skins/common/
src/site/src/documentation/skins/common/css/
src/site/src/documentation/skins/com...
Added: lucene/nutch/trunk/src/site/src/documentation/skins/common/scripts/prototype.js
URL: http://svn.apache.org/viewvc/lucene/nutch/trunk/src/site/src/documentation/skins/common/scripts/prototype.js?rev=790789&view=auto
==============================================================================
--- lucene/nutch/trunk/src/site/src/documentation/skins/common/scripts/prototype.js (added)
+++ lucene/nutch/trunk/src/site/src/documentation/skins/common/scripts/prototype.js Fri Jul 3 05:08:04 2009
@@ -0,0 +1,1257 @@
+/* Prototype JavaScript framework, version 1.4.0_pre4
+ * (c) 2005 Sam Stephenson <sa...@conio.net>
+ *
+ * THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
+ * against the source tree, available from the Prototype darcs repository.
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ *
+ * For details, see the Prototype web site: http://prototype.conio.net/
+ *
+/*--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.4.0_pre4',
+
+ emptyFunction: function() {},
+ K: function(x) {return x}
+}
+
+var Class = {
+ create: function() {
+ return function() {
+ this.initialize.apply(this, arguments);
+ }
+ }
+}
+
+var Abstract = new Object();
+
+Object.extend = function(destination, source) {
+ for (property in source) {
+ destination[property] = source[property];
+ }
+ return destination;
+}
+
+Function.prototype.bind = function(object) {
+ var __method = this;
+ return function() {
+ return __method.apply(object, arguments);
+ }
+}
+
+Function.prototype.bindAsEventListener = function(object) {
+ var __method = this;
+ return function(event) {
+ return __method.call(object, event || window.event);
+ }
+}
+
+Number.prototype.toColorPart = function() {
+ var digits = this.toString(16);
+ if (this < 16) return '0' + digits;
+ return digits;
+}
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0; i < arguments.length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) {}
+ }
+
+ return returnValue;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create();
+PeriodicalExecuter.prototype = {
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.callback();
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+function $() {
+ var elements = new Array();
+
+ for (var i = 0; i < arguments.length; i++) {
+ var element = arguments[i];
+ if (typeof element == 'string')
+ element = document.getElementById(element);
+
+ if (arguments.length == 1)
+ return element;
+
+ elements.push(element);
+ }
+
+ return elements;
+}
+
+if (!Array.prototype.push) {
+ Array.prototype.push = function() {
+ var startLength = this.length;
+ for (var i = 0; i < arguments.length; i++)
+ this[startLength + i] = arguments[i];
+ return this.length;
+ }
+}
+
+if (!Function.prototype.apply) {
+ // Based on code from http://www.youngpup.net/
+ Function.prototype.apply = function(object, parameters) {
+ var parameterStrings = new Array();
+ if (!object) object = window;
+ if (!parameters) parameters = new Array();
+
+ for (var i = 0; i < parameters.length; i++)
+ parameterStrings[i] = 'parameters[' + i + ']';
+
+ object.__apply__ = this;
+ var result = eval('object.__apply__(' +
+ parameterStrings.join(', ') + ')');
+ object.__apply__ = null;
+
+ return result;
+ }
+}
+
+Object.extend(String.prototype, {
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ escapeHTML: function() {
+ var div = document.createElement('div');
+ var text = document.createTextNode(this);
+ div.appendChild(text);
+ return div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = document.createElement('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0].nodeValue;
+ },
+
+ parseQuery: function() {
+ var str = this;
+ if (str.substring(0,1) == '?') {
+ str = this.substring(1);
+ }
+ var result = {};
+ var pairs = str.split('&');
+ for (var i = 0; i < pairs.length; i++) {
+ var pair = pairs[i].split('=');
+ result[pair[0]] = pair[1];
+ }
+ return result;
+ }
+});
+
+
+var _break = new Object();
+var _continue = new Object();
+
+var Enumerable = {
+ each: function(iterator) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ try {
+ iterator(value, index++);
+ } catch (e) {
+ if (e != _continue) throw e;
+ }
+ });
+ } catch (e) {
+ if (e != _break) throw e;
+ }
+ },
+
+ all: function(iterator) {
+ var result = true;
+ this.each(function(value, index) {
+ if (!(result &= (iterator || Prototype.K)(value, index)))
+ throw _break;
+ });
+ return result;
+ },
+
+ any: function(iterator) {
+ var result = true;
+ this.each(function(value, index) {
+ if (result &= (iterator || Prototype.K)(value, index))
+ throw _break;
+ });
+ return result;
+ },
+
+ collect: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator(value, index));
+ });
+ return results;
+ },
+
+ detect: function (iterator) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator(value, index)) {
+ result = value;
+ throw _break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(pattern, iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ var stringValue = value.toString();
+ if (stringValue.match(pattern))
+ results.push((iterator || Prototype.K)(value, index));
+ })
+ return results;
+ },
+
+ include: function(object) {
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw _break;
+ }
+ });
+ return found;
+ },
+
+ inject: function(memo, iterator) {
+ this.each(function(value, index) {
+ memo = iterator(memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.collect(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator) {
+ var result;
+ this.each(function(value, index) {
+ value = (iterator || Prototype.K)(value, index);
+ if (value >= (result || value))
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator) {
+ var result;
+ this.each(function(value, index) {
+ value = (iterator || Prototype.K)(value, index);
+ if (value <= (result || value))
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator) {
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ ((iterator || Prototype.K)(value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value, index) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator) {
+ return this.collect(function(value, index) {
+ return {value: value, criteria: iterator(value, index)};
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.collect(Prototype.K);
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (typeof args.last() == 'function')
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ iterator(value = collections.pluck(index));
+ return value;
+ });
+ }
+}
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray
+});
+
+$A = Array.from = function(iterable) {
+ var results = [];
+ for (var i = 0; i < iterable.length; i++)
+ results.push(iterable[i]);
+ return results;
+}
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0; i < this.length; i++)
+ iterator(this[i]);
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ }
+});
+
+Object.extend(Array.prototype, Enumerable);
+
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')},
+ function() {return new XMLHttpRequest()}
+ ) || false;
+ }
+}
+
+Ajax.Base = function() {};
+Ajax.Base.prototype = {
+ setOptions: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ parameters: ''
+ }
+ Object.extend(this.options, options || {});
+ },
+
+ responseIsSuccess: function() {
+ return this.transport.status == undefined
+ || this.transport.status == 0
+ || (this.transport.status >= 200 && this.transport.status < 300);
+ },
+
+ responseIsFailure: function() {
+ return !this.responseIsSuccess();
+ }
+}
+
+Ajax.Request = Class.create();
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
+ initialize: function(url, options) {
+ this.transport = Ajax.getTransport();
+ this.setOptions(options);
+ this.request(url);
+ },
+
+ request: function(url) {
+ var parameters = this.options.parameters || '';
+ if (parameters.length > 0) parameters += '&_=';
+
+ try {
+ if (this.options.method == 'get')
+ url += '?' + parameters;
+
+ this.transport.open(this.options.method, url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) {
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
+ }
+
+ this.setRequestHeaders();
+
+ var body = this.options.postBody ? this.options.postBody : parameters;
+ this.transport.send(this.options.method == 'post' ? body : null);
+
+ } catch (e) {
+ }
+ },
+
+ setRequestHeaders: function() {
+ var requestHeaders =
+ ['X-Requested-With', 'XMLHttpRequest',
+ 'X-Prototype-Version', Prototype.Version];
+
+ if (this.options.method == 'post') {
+ requestHeaders.push('Content-type',
+ 'application/x-www-form-urlencoded');
+
+ /* Force "Connection: close" for Mozilla browsers to work around
+ * a bug where XMLHttpReqeuest sends an incorrect Content-length
+ * header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType)
+ requestHeaders.push('Connection', 'close');
+ }
+
+ if (this.options.requestHeaders)
+ requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
+
+ for (var i = 0; i < requestHeaders.length; i += 2)
+ this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState != 1)
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ respondToReadyState: function(readyState) {
+ var event = Ajax.Request.Events[readyState];
+
+ if (event == 'Complete')
+ (this.options['on' + this.transport.status]
+ || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(this.transport);
+
+ (this.options['on' + event] || Prototype.emptyFunction)(this.transport);
+
+ /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
+ if (event == 'Complete')
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+});
+
+Ajax.Updater = Class.create();
+Ajax.Updater.ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:<\/script>)';
+
+Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
+ initialize: function(container, url, options) {
+ this.containers = {
+ success: container.success ? $(container.success) : $(container),
+ failure: container.failure ? $(container.failure) :
+ (container.success ? null : $(container))
+ }
+
+ this.transport = Ajax.getTransport();
+ this.setOptions(options);
+
+ var onComplete = this.options.onComplete || Prototype.emptyFunction;
+ this.options.onComplete = (function() {
+ this.updateContent();
+ onComplete(this.transport);
+ }).bind(this);
+
+ this.request(url);
+ },
+
+ updateContent: function() {
+ var receiver = this.responseIsSuccess() ?
+ this.containers.success : this.containers.failure;
+
+ var match = new RegExp(Ajax.Updater.ScriptFragment, 'img');
+ var response = this.transport.responseText.replace(match, '');
+ var scripts = this.transport.responseText.match(match);
+
+ if (receiver) {
+ if (this.options.insertion) {
+ new this.options.insertion(receiver, response);
+ } else {
+ receiver.innerHTML = response;
+ }
+ }
+
+ if (this.responseIsSuccess()) {
+ if (this.onComplete)
+ setTimeout((function() {this.onComplete(
+ this.transport)}).bind(this), 10);
+ }
+
+ if (this.options.evalScripts && scripts) {
+ match = new RegExp(Ajax.Updater.ScriptFragment, 'im');
+ setTimeout((function() {
+ for (var i = 0; i < scripts.length; i++)
+ eval(scripts[i].match(match)[1]);
+ }).bind(this), 10);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create();
+Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
+ initialize: function(container, url, options) {
+ this.setOptions(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = 1;
+
+ this.updater = {};
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Ajax.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(request) {
+ if (this.options.decay) {
+ this.decay = (request.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = request.responseText;
+ }
+ this.timer = setTimeout(this.onTimerEvent.bind(this),
+ this.decay * this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+
+document.getElementsByClassName = function(className) {
+ var children = document.getElementsByTagName('*') || document.all;
+ var elements = new Array();
+
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ var classNames = child.className.split(' ');
+ for (var j = 0; j < classNames.length; j++) {
+ if (classNames[j] == className) {
+ elements.push(child);
+ break;
+ }
+ }
+ }
+
+ return elements;
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Element) {
+ var Element = new Object();
+}
+
+Object.extend(Element, {
+ toggle: function() {
+ for (var i = 0; i < arguments.length; i++) {
+ var element = $(arguments[i]);
+ element.style.display =
+ (element.style.display == 'none' ? '' : 'none');
+ }
+ },
+
+ hide: function() {
+ for (var i = 0; i < arguments.length; i++) {
+ var element = $(arguments[i]);
+ element.style.display = 'none';
+ }
+ },
+
+ show: function() {
+ for (var i = 0; i < arguments.length; i++) {
+ var element = $(arguments[i]);
+ element.style.display = '';
+ }
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ },
+
+ getHeight: function(element) {
+ element = $(element);
+ return element.offsetHeight;
+ },
+
+ hasClassName: function(element, className) {
+ element = $(element);
+ if (!element)
+ return;
+ var a = element.className.split(' ');
+ for (var i = 0; i < a.length; i++) {
+ if (a[i] == className)
+ return true;
+ }
+ return false;
+ },
+
+ addClassName: function(element, className) {
+ element = $(element);
+ Element.removeClassName(element, className);
+ element.className += ' ' + className;
+ },
+
+ removeClassName: function(element, className) {
+ element = $(element);
+ if (!element)
+ return;
+ var newClassName = '';
+ var a = element.className.split(' ');
+ for (var i = 0; i < a.length; i++) {
+ if (a[i] != className) {
+ if (i > 0)
+ newClassName += ' ';
+ newClassName += a[i];
+ }
+ }
+ element.className = newClassName;
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ var element = $(element);
+ for (var i = 0; i < element.childNodes.length; i++) {
+ var node = element.childNodes[i];
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ Element.remove(node);
+ }
+ }
+});
+
+var Toggle = new Object();
+Toggle.display = Element.toggle;
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.Insertion = function(adjacency) {
+ this.adjacency = adjacency;
+}
+
+Abstract.Insertion.prototype = {
+ initialize: function(element, content) {
+ this.element = $(element);
+ this.content = content;
+
+ if (this.adjacency && this.element.insertAdjacentHTML) {
+ this.element.insertAdjacentHTML(this.adjacency, this.content);
+ } else {
+ this.range = this.element.ownerDocument.createRange();
+ if (this.initializeRange) this.initializeRange();
+ this.fragment = this.range.createContextualFragment(this.content);
+ this.insertContent();
+ }
+ }
+}
+
+var Insertion = new Object();
+
+Insertion.Before = Class.create();
+Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
+ initializeRange: function() {
+ this.range.setStartBefore(this.element);
+ },
+
+ insertContent: function() {
+ this.element.parentNode.insertBefore(this.fragment, this.element);
+ }
+});
+
+Insertion.Top = Class.create();
+Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(true);
+ },
+
+ insertContent: function() {
+ this.element.insertBefore(this.fragment, this.element.firstChild);
+ }
+});
+
+Insertion.Bottom = Class.create();
+Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(this.element);
+ },
+
+ insertContent: function() {
+ this.element.appendChild(this.fragment);
+ }
+});
+
+Insertion.After = Class.create();
+Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
+ initializeRange: function() {
+ this.range.setStartAfter(this.element);
+ },
+
+ insertContent: function() {
+ this.element.parentNode.insertBefore(this.fragment,
+ this.element.nextSibling);
+ }
+});
+
+var Field = {
+ clear: function() {
+ for (var i = 0; i < arguments.length; i++)
+ $(arguments[i]).value = '';
+ },
+
+ focus: function(element) {
+ $(element).focus();
+ },
+
+ present: function() {
+ for (var i = 0; i < arguments.length; i++)
+ if ($(arguments[i]).value == '') return false;
+ return true;
+ },
+
+ select: function(element) {
+ $(element).select();
+ },
+
+ activate: function(element) {
+ $(element).focus();
+ $(element).select();
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var Form = {
+ serialize: function(form) {
+ var elements = Form.getElements($(form));
+ var queryComponents = new Array();
+
+ for (var i = 0; i < elements.length; i++) {
+ var queryComponent = Form.Element.serialize(elements[i]);
+ if (queryComponent)
+ queryComponents.push(queryComponent);
+ }
+
+ return queryComponents.join('&');
+ },
+
+ getElements: function(form) {
+ var form = $(form);
+ var elements = new Array();
+
+ for (tagName in Form.Element.Serializers) {
+ var tagElements = form.getElementsByTagName(tagName);
+ for (var j = 0; j < tagElements.length; j++)
+ elements.push(tagElements[j]);
+ }
+ return elements;
+ },
+
+ getInputs: function(form, typeName, name) {
+ var form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name)
+ return inputs;
+
+ var matchingInputs = new Array();
+ for (var i = 0; i < inputs.length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) ||
+ (name && input.name != name))
+ continue;
+ matchingInputs.push(input);
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ var elements = Form.getElements(form);
+ for (var i = 0; i < elements.length; i++) {
+ var element = elements[i];
+ element.blur();
+ element.disabled = 'true';
+ }
+ },
+
+ enable: function(form) {
+ var elements = Form.getElements(form);
+ for (var i = 0; i < elements.length; i++) {
+ var element = elements[i];
+ element.disabled = '';
+ }
+ },
+
+ focusFirstElement: function(form) {
+ var form = $(form);
+ var elements = Form.getElements(form);
+ for (var i = 0; i < elements.length; i++) {
+ var element = elements[i];
+ if (element.type != 'hidden' && !element.disabled) {
+ Field.activate(element);
+ break;
+ }
+ }
+ },
+
+ reset: function(form) {
+ $(form).reset();
+ }
+}
+
+Form.Element = {
+ serialize: function(element) {
+ var element = $(element);
+ var method = element.tagName.toLowerCase();
+ var parameter = Form.Element.Serializers[method](element);
+
+ if (parameter)
+ return encodeURIComponent(parameter[0]) + '=' +
+ encodeURIComponent(parameter[1]);
+ },
+
+ getValue: function(element) {
+ var element = $(element);
+ var method = element.tagName.toLowerCase();
+ var parameter = Form.Element.Serializers[method](element);
+
+ if (parameter)
+ return parameter[1];
+ }
+}
+
+Form.Element.Serializers = {
+ input: function(element) {
+ switch (element.type.toLowerCase()) {
+ case 'submit':
+ case 'hidden':
+ case 'password':
+ case 'text':
+ return Form.Element.Serializers.textarea(element);
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element);
+ }
+ return false;
+ },
+
+ inputSelector: function(element) {
+ if (element.checked)
+ return [element.name, element.value];
+ },
+
+ textarea: function(element) {
+ return [element.name, element.value];
+ },
+
+ select: function(element) {
+ var value = '';
+ if (element.type == 'select-one') {
+ var index = element.selectedIndex;
+ if (index >= 0)
+ value = element.options[index].value || element.options[index].text;
+ } else {
+ value = new Array();
+ for (var i = 0; i < element.length; i++) {
+ var opt = element.options[i];
+ if (opt.selected)
+ value.push(opt.value || opt.text);
+ }
+ }
+ return [element.name, value];
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var $F = Form.Element.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = function() {}
+Abstract.TimedObserver.prototype = {
+ initialize: function(element, frequency, callback) {
+ this.frequency = frequency;
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+}
+
+Form.Element.Observer = Class.create();
+Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create();
+Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = function() {}
+Abstract.EventObserver.prototype = {
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ var elements = Form.getElements(this.element);
+ for (var i = 0; i < elements.length; i++)
+ this.registerCallback(elements[i]);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ element.target = this;
+ element.prev_onclick = element.onclick || Prototype.emptyFunction;
+ element.onclick = function() {
+ this.prev_onclick();
+ this.target.onElementEvent();
+ }
+ break;
+ case 'password':
+ case 'text':
+ case 'textarea':
+ case 'select-one':
+ case 'select-multiple':
+ element.target = this;
+ element.prev_onchange = element.onchange || Prototype.emptyFunction;
+ element.onchange = function() {
+ this.prev_onchange();
+ this.target.onElementEvent();
+ }
+ break;
+ }
+ }
+ }
+}
+
+Form.Element.EventObserver = Class.create();
+Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create();
+Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+
+if (!window.Event) {
+ var Event = new Object();
+}
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+
+ element: function(event) {
+ return event.target || event.srcElement;
+ },
+
+ isLeftClick: function(event) {
+ return (((event.which) && (event.which == 1)) ||
+ ((event.button) && (event.button == 1)));
+ },
+
+ pointerX: function(event) {
+ return event.pageX || (event.clientX +
+ (document.documentElement.scrollLeft || document.body.scrollLeft));
+ },
+
+ pointerY: function(event) {
+ return event.pageY || (event.clientY +
+ (document.documentElement.scrollTop || document.body.scrollTop));
+ },
+
+ stop: function(event) {
+ if (event.preventDefault) {
+ event.preventDefault();
+ event.stopPropagation();
+ } else {
+ event.returnValue = false;
+ }
+ },
+
+ // find the first node with the given tagName, starting from the
+ // node the event was triggered on; traverses the DOM upwards
+ findElement: function(event, tagName) {
+ var element = Event.element(event);
+ while (element.parentNode && (!element.tagName ||
+ (element.tagName.toUpperCase() != tagName.toUpperCase())))
+ element = element.parentNode;
+ return element;
+ },
+
+ observers: false,
+
+ _observeAndCache: function(element, name, observer, useCapture) {
+ if (!this.observers) this.observers = [];
+ if (element.addEventListener) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.addEventListener(name, observer, useCapture);
+ } else if (element.attachEvent) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.attachEvent('on' + name, observer);
+ }
+ },
+
+ unloadCache: function() {
+ if (!Event.observers) return;
+ for (var i = 0; i < Event.observers.length; i++) {
+ Event.stopObserving.apply(this, Event.observers[i]);
+ Event.observers[i][0] = null;
+ }
+ Event.observers = false;
+ },
+
+ observe: function(element, name, observer, useCapture) {
+ var element = $(element);
+ useCapture = useCapture || false;
+
+ if (name == 'keypress' &&
+ ((/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ || element.attachEvent))
+ name = 'keydown';
+
+ this._observeAndCache(element, name, observer, useCapture);
+ },
+
+ stopObserving: function(element, name, observer, useCapture) {
+ var element = $(element);
+ useCapture = useCapture || false;
+
+ if (name == 'keypress' &&
+ ((/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ || element.detachEvent))
+ name = 'keydown';
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, observer, useCapture);
+ } else if (element.detachEvent) {
+ element.detachEvent('on' + name, observer);
+ }
+ }
+});
+
+/* prevent memory leaks in IE */
+Event.observe(window, 'unload', Event.unloadCache, false);
+
+var Position = {
+
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ realOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = this.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = this.realOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = this.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ clone: function(source, target) {
+ source = $(source);
+ target = $(target);
+ target.style.position = 'absolute';
+ var offsets = this.cumulativeOffset(source);
+ target.style.top = offsets[1] + 'px';
+ target.style.left = offsets[0] + 'px';
+ target.style.width = source.offsetWidth + 'px';
+ target.style.height = source.offsetHeight + 'px';
+ }
+}
Added: lucene/nutch/trunk/src/site/src/documentation/skins/common/skinconf.xsl
URL: http://svn.apache.org/viewvc/lucene/nutch/trunk/src/site/src/documentation/skins/common/skinconf.xsl?rev=790789&view=auto
==============================================================================
--- lucene/nutch/trunk/src/site/src/documentation/skins/common/skinconf.xsl (added)
+++ lucene/nutch/trunk/src/site/src/documentation/skins/common/skinconf.xsl Fri Jul 3 05:08:04 2009
@@ -0,0 +1,238 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:template match="skinconfig">
+ <xsl:copy>
+ <xsl:if test="not(disable-print-link)">
+ <disable-print-link>true</disable-print-link>
+ </xsl:if>
+ <xsl:if test="not(disable-pdf-link)">
+ <disable-pdf-link>true</disable-pdf-link>
+ </xsl:if>
+ <xsl:if test="not(disable-txt-link)">
+ <disable-txt-link>true</disable-txt-link>
+ </xsl:if>
+ <xsl:if test="not(disable-pod-link)">
+ <disable-pod-link>true</disable-pod-link>
+ </xsl:if>
+ <xsl:if test="not(disable-xml-link)">
+ <disable-xml-link>true</disable-xml-link>
+ </xsl:if>
+ <xsl:if test="not(disable-external-link-image)">
+ <disable-external-link-image>false</disable-external-link-image>
+ </xsl:if>
+ <xsl:if test="not(disable-compliance-links)">
+ <disable-compliance-links>false</disable-compliance-links>
+ </xsl:if>
+ <xsl:if test="not(obfuscate-mail-links)">
+ <obfuscate-mail-links>true</obfuscate-mail-links>
+ </xsl:if>
+ <xsl:if test="not(obfuscate-mail-value)">
+ <obfuscate-mail-value>.at.</obfuscate-mail-value>
+ </xsl:if>
+ <xsl:if test="not(disable-font-script)">
+ <disable-font-script>true</disable-font-script>
+ </xsl:if>
+<!--
+ <xsl:if test="not(project-name)">
+ <project-name>MyProject</project-name>
+ </xsl:if>
+ <xsl:if test="not(project-description)">
+ <project-description>MyProject Description</project-description>
+ </xsl:if>
+ <xsl:if test="not(project-url)">
+ <project-url>http://myproj.mygroup.org/</project-url>
+ </xsl:if>
+ <xsl:if test="not(project-logo)">
+ <project-logo>images/project.png</project-logo>
+ </xsl:if>
+ <xsl:if test="not(group-name)">
+ <group-name>MyGroup</group-name>
+ </xsl:if>
+ <xsl:if test="not(group-description)">
+ <group-description>MyGroup Description</group-description>
+ </xsl:if>
+ <xsl:if test="not(group-url)">
+ <group-url>http://mygroup.org</group-url>
+ </xsl:if>
+ <xsl:if test="not(group-logo)">
+ <group-logo>images/group.png</group-logo>
+ </xsl:if>
+ <xsl:if test="not(host-url)">
+ <host-url/>
+ </xsl:if>
+ <xsl:if test="not(host-logo)">
+ <host-logo/>
+ </xsl:if>
+ <xsl:if test="not(year)">
+ <year>2006</year>
+ </xsl:if>
+ <xsl:if test="not(vendor)">
+ <vendor>The Acme Software Foundation.</vendor>
+ </xsl:if>
+ -->
+ <xsl:if test="not(trail)">
+ <trail>
+ <link1 name="" href=""/>
+ <link2 name="" href=""/>
+ <link3 name="" href=""/>
+ </trail>
+ </xsl:if>
+ <xsl:if test="not(toc)">
+ <toc level="2" location="page"/>
+ </xsl:if>
+ <xsl:if test="not(pdf/page-numbering-format)">
+ <pdf>
+ <page-numbering-format>Page 1</page-numbering-format>
+ </pdf>
+ </xsl:if>
+ <xsl:if test="not(pdf/show-external-urls)">
+ <pdf>
+ <show-external-urls>true</show-external-urls>
+ </pdf>
+ </xsl:if>
+<!--
+ <xsl:if test="not(colors)">
+ <colors>
+ <color name="header" value="#294563"/>
+
+ <color name="tab-selected" value="#4a6d8c"/>
+ <color name="tab-unselected" value="#b5c7e7"/>
+ <color name="subtab-selected" value="#4a6d8c"/>
+ <color name="subtab-unselected" value="#4a6d8c"/>
+
+ <color name="heading" value="#294563"/>
+ <color name="subheading" value="#4a6d8c"/>
+
+ <color name="navstrip" value="#cedfef"/>
+ <color name="toolbox" value="#294563"/>
+
+ <color name="menu" value="#4a6d8c"/>
+ <color name="dialog" value="#4a6d8c"/>
+
+ <color name="body" value="#ffffff"/>
+
+ <color name="table" value="#7099C5"/>
+ <color name="table-cell" value="#f0f0ff"/>
+ <color name="highlight" value="#ffff00"/>
+ <color name="fixme" value="#c60"/>
+ <color name="note" value="#069"/>
+
+ <color name="warning" value="#900"/>
+ <color name="code" value="#CFDCED"/>
+
+ <color name="footer" value="#cedfef"/>
+ </colors>
+ </xsl:if>
+-->
+ <xsl:if test="not(extra-css)">
+ <extra-css/>
+ </xsl:if>
+ <xsl:if test="not(credits)">
+ <credits>
+ <credit>
+ <name>Built with Apache Forrest</name>
+ <url>http://forrest.apache.org/</url>
+ <image>images/built-with-forrest-button.png</image>
+ <width>88</width>
+ <height>31</height>
+ </credit>
+<!-- A credit with @role='pdf' will have its name and url displayed in the
+ PDF page's footer. -->
+ </credits>
+ </xsl:if>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="node()"/>
+<!--
+ <xsl:copy-of select="node()[not(name(.)='colors')]"/>
+ <xsl:apply-templates select="colors"/>-->
+ </xsl:copy>
+ </xsl:template>
+<!--
+ <xsl:template match="colors">
+ <colors>
+ <xsl:if test="not(color[@name='header'])">
+ <color name="header" value="#294563"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='tab-selected'])">
+ <color name="tab-selected" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='tab-unselected'])">
+ <color name="tab-unselected" value="#b5c7e7"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subtab-selected'])">
+ <color name="subtab-selected" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subtab-unselected'])">
+ <color name="subtab-unselected" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='heading'])">
+ <color name="heading" value="#294563"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='subheading'])">
+ <color name="subheading" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='navstrip'])">
+ <color name="navstrip" value="#cedfef"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='toolbox'])">
+ <color name="toolbox" value="#294563"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='menu'])">
+ <color name="menu" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='dialog'])">
+ <color name="dialog" value="#4a6d8c"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='body'])">
+ <color name="body" value="#ffffff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='table'])">
+ <color name="table" value="#7099C5"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='table-cell'])">
+ <color name="table-cell" value="#f0f0ff"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='highlight'])">
+ <color name="highlight" value="#yellow"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='fixme'])">
+ <color name="fixme" value="#c60"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='note'])">
+ <color name="note" value="#069"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='warning'])">
+ <color name="warning" value="#900"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='code'])">
+ <color name="code" value="#CFDCED"/>
+ </xsl:if>
+ <xsl:if test="not(color[@name='footer'])">
+ <color name="footer" value="#cedfef"/>
+ </xsl:if>
+
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="node()[name(.)='color']"/>
+ </xsl:copy>
+
+ </colors>
+ </xsl:template>
+-->
+</xsl:stylesheet>
Added: lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_de.xml
URL: http://svn.apache.org/viewvc/lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_de.xml?rev=790789&view=auto
==============================================================================
--- lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_de.xml (added)
+++ lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_de.xml Fri Jul 3 05:08:04 2009
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<catalogue>
+ <message key="Font size:">Schriftgrösse:</message>
+ <message key="Last Published:">Zuletzt veröffentlicht:</message>
+ <message key="Search">Suche:</message>
+ <message key="Search the site with">Suche auf der Seite mit</message>
+</catalogue>
Added: lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_en_US.xml
URL: http://svn.apache.org/viewvc/lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_en_US.xml?rev=790789&view=auto
==============================================================================
--- lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_en_US.xml (added)
+++ lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_en_US.xml Fri Jul 3 05:08:04 2009
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<catalogue>
+ <message key="Font size:">Font size:</message>
+ <message key="Last Published:">Last Published:</message>
+ <message key="Search">Search</message>
+ <message key="Search the site with">Search site with</message>
+</catalogue>
Added: lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_es.xml
URL: http://svn.apache.org/viewvc/lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_es.xml?rev=790789&view=auto
==============================================================================
--- lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_es.xml (added)
+++ lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_es.xml Fri Jul 3 05:08:04 2009
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<catalogue>
+ <message key="Font size:">Tamaño del texto:</message>
+ <message key="Last Published:">Fecha de publicación:</message>
+ <message key="Search">Buscar</message>
+ <message key="Search the site with">Buscar en</message>
+</catalogue>
Added: lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_fr.xml
URL: http://svn.apache.org/viewvc/lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_fr.xml?rev=790789&view=auto
==============================================================================
--- lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_fr.xml (added)
+++ lucene/nutch/trunk/src/site/src/documentation/skins/common/translations/CommonMessages_fr.xml Fri Jul 3 05:08:04 2009
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<catalogue>
+ <message key="Font size:">Taille :</message>
+ <message key="Last Published:">Dernière publication :</message>
+ <message key="Search">Rechercher</message>
+ <message key="Search the site with">Rechercher sur le site avec</message>
+</catalogue>
Added: lucene/nutch/trunk/src/site/src/documentation/skins/common/xslt/fo/document-to-fo.xsl
URL: http://svn.apache.org/viewvc/lucene/nutch/trunk/src/site/src/documentation/skins/common/xslt/fo/document-to-fo.xsl?rev=790789&view=auto
==============================================================================
--- lucene/nutch/trunk/src/site/src/documentation/skins/common/xslt/fo/document-to-fo.xsl (added)
+++ lucene/nutch/trunk/src/site/src/documentation/skins/common/xslt/fo/document-to-fo.xsl Fri Jul 3 05:08:04 2009
@@ -0,0 +1,1014 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ version="1.0">
+<!-- left, justify, right -->
+ <xsl:variable name="text-align" select="string(//skinconfig/pdf/page/@text-align)"/>
+<!-- print URL of external links -->
+ <xsl:variable name="show-external-urls" select="//skinconfig/pdf/show-external-urls"/>
+<!-- Get the section depth to use when generating the minitoc (default is 2) -->
+ <xsl:variable name="toc-max-depth" select="number(//skinconfig/toc/@max-depth)"/>
+<!-- The page size to be used -->
+ <xsl:variable name="pagesize"
+ select="string(//skinconfig/pdf/page/@size)"/>
+<!-- The page orientation ("portrait" or "landscape") -->
+ <xsl:variable name="pageorientation"
+ select="string(//skinconfig/pdf/page/@orientation)"/>
+<!-- Double-sided printing toggle -->
+ <xsl:variable name="doublesided"
+ select="string(//skinconfig/pdf/margins/@double-sided)"/>
+<!-- The top page margin -->
+ <xsl:variable name="topmargin"
+ select="string(//skinconfig/pdf/margins/top)"/>
+<!-- The bottom page margin -->
+ <xsl:variable name="bottommargin"
+ select="string(//skinconfig/pdf/margins/bottom)"/>
+<!-- The inner page margin (always the left margin if
+ double-sided printing is off, alternating between left and right if
+ it's on) -->
+ <xsl:variable name="innermargin"
+ select="string(//skinconfig/pdf/margins/inner)"/>
+<!-- The outer page margin (always the right margin if
+ double-sided printing is off, alternating between right and left if
+ it's on)-->
+ <xsl:variable name="outermargin"
+ select="string(//skinconfig/pdf/margins/outer)"/>
+ <xsl:param name="numbersections" select="'true'"/>
+<!-- page breaks after TOC and each page if an aggregate document -->
+ <xsl:variable name="page-break-top-sections" select="'true'"/>
+<!-- page numbering format -->
+ <xsl:variable name="page-numbering-format" select="string(//skinconfig/pdf/page-numbering-format)"/>
+<!-- Section depth at which we stop numbering and just indent -->
+ <xsl:param name="numbering-max-depth" select="'3'"/>
+ <xsl:param name="imagesdir" select="."/>
+ <xsl:param name="xmlbasedir"/>
+ <xsl:include href="pdfoutline.xsl"/>
+ <xsl:include href="footerinfo.xsl"/>
+<!-- Determine page height for various page sizes (US Letter portrait
+ is the default) -->
+<!-- FIXME: JJP:would this be better of a file? -->
+ <xsl:variable name="pageheight">
+ <xsl:choose>
+ <xsl:when test="$pageorientation = 'landscape'">
+ <xsl:choose>
+ <xsl:when test="$pagesize = 'a0'">841mm</xsl:when>
+ <xsl:when test="$pagesize = 'a1'">594mm</xsl:when>
+ <xsl:when test="$pagesize = 'a2'">420mm</xsl:when>
+ <xsl:when test="$pagesize = 'a3'">297mm</xsl:when>
+ <xsl:when test="$pagesize = 'a4'">210mm</xsl:when>
+ <xsl:when test="$pagesize = 'a5'">148mm</xsl:when>
+ <xsl:when test="$pagesize = 'executive'">7.25in</xsl:when>
+ <xsl:when test="$pagesize = 'folio'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'ledger'">11in</xsl:when>
+ <xsl:when test="$pagesize = 'legal'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'letter'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'quarto'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'tabloid'">11in</xsl:when>
+ <xsl:otherwise>8.5in</xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$pagesize = 'a0'">1189mm</xsl:when>
+ <xsl:when test="$pagesize = 'a1'">841mm</xsl:when>
+ <xsl:when test="$pagesize = 'a2'">594mm</xsl:when>
+ <xsl:when test="$pagesize = 'a3'">420mm</xsl:when>
+ <xsl:when test="$pagesize = 'a4'">297mm</xsl:when>
+ <xsl:when test="$pagesize = 'a5'">210mm</xsl:when>
+ <xsl:when test="$pagesize = 'executive'">10.5in</xsl:when>
+ <xsl:when test="$pagesize = 'folio'">13in</xsl:when>
+ <xsl:when test="$pagesize = 'ledger'">17in</xsl:when>
+ <xsl:when test="$pagesize = 'legal'">14in</xsl:when>
+ <xsl:when test="$pagesize = 'quarto'">10.83in</xsl:when>
+ <xsl:when test="$pagesize = 'tabloid'">17in</xsl:when>
+ <xsl:otherwise>11in</xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+<!-- Determine page width for various page sizes (US Letter portrait
+ is the default) -->
+ <xsl:variable name="pagewidth">
+ <xsl:choose>
+ <xsl:when test="$pageorientation = 'landscape'">
+ <xsl:choose>
+ <xsl:when test="$pagesize = 'a0'">1189mm</xsl:when>
+ <xsl:when test="$pagesize = 'a1'">841mm</xsl:when>
+ <xsl:when test="$pagesize = 'a2'">594mm</xsl:when>
+ <xsl:when test="$pagesize = 'a3'">420mm</xsl:when>
+ <xsl:when test="$pagesize = 'a4'">297mm</xsl:when>
+ <xsl:when test="$pagesize = 'a5'">210mm</xsl:when>
+ <xsl:when test="$pagesize = 'executive'">10.5in</xsl:when>
+ <xsl:when test="$pagesize = 'folio'">13in</xsl:when>
+ <xsl:when test="$pagesize = 'ledger'">17in</xsl:when>
+ <xsl:when test="$pagesize = 'legal'">14in</xsl:when>
+ <xsl:when test="$pagesize = 'quarto'">10.83in</xsl:when>
+ <xsl:when test="$pagesize = 'tabloid'">17in</xsl:when>
+ <xsl:otherwise>11in</xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$pagesize = 'a0'">841mm</xsl:when>
+ <xsl:when test="$pagesize = 'a1'">594mm</xsl:when>
+ <xsl:when test="$pagesize = 'a2'">420mm</xsl:when>
+ <xsl:when test="$pagesize = 'a3'">297mm</xsl:when>
+ <xsl:when test="$pagesize = 'a4'">210mm</xsl:when>
+ <xsl:when test="$pagesize = 'a5'">148mm</xsl:when>
+ <xsl:when test="$pagesize = 'executive'">7.25in</xsl:when>
+ <xsl:when test="$pagesize = 'folio'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'ledger'">11in</xsl:when>
+ <xsl:when test="$pagesize = 'legal'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'letter'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'quarto'">8.5in</xsl:when>
+ <xsl:when test="$pagesize = 'tabloid'">11in</xsl:when>
+ <xsl:otherwise>8.5in</xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:template match="/">
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="first-page"
+ page-height="{$pageheight}"
+ page-width="{$pagewidth}"
+ margin-top="{$topmargin}"
+ margin-bottom="{$bottommargin}"
+ margin-left="{$innermargin}"
+ margin-right="{$outermargin}">
+ <fo:region-body
+ margin-top="0.5in"
+ margin-bottom=".5in"/>
+ <fo:region-after
+ region-name="first-footer"
+ extent=".5in"
+ display-align="before"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="even-page"
+ page-height="{$pageheight}"
+ page-width="{$pagewidth}"
+ margin-top="{$topmargin}"
+ margin-bottom="{$bottommargin}">
+ <xsl:choose>
+ <xsl:when test="$doublesided = 'true'">
+ <xsl:attribute name="margin-left">
+ <xsl:value-of select="$outermargin"/>
+ </xsl:attribute>
+ <xsl:attribute name="margin-right">
+ <xsl:value-of select="$innermargin"/>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="margin-left">
+ <xsl:value-of select="$innermargin"/>
+ </xsl:attribute>
+ <xsl:attribute name="margin-right">
+ <xsl:value-of select="$outermargin"/>
+ </xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ <fo:region-before
+ region-name="even-header"
+ extent="0.5in"
+ border-bottom="0.5pt solid"/>
+ <fo:region-body
+ margin-top="0.5in"
+ margin-bottom=".5in"/>
+ <fo:region-after
+ region-name="even-footer"
+ extent=".5in"
+ display-align="before"/>
+ </fo:simple-page-master>
+ <fo:simple-page-master master-name="odd-page"
+ page-height="{$pageheight}"
+ page-width="{$pagewidth}"
+ margin-top="{$topmargin}"
+ margin-bottom="{$bottommargin}"
+ margin-left="{$innermargin}"
+ margin-right="{$outermargin}">
+ <fo:region-before
+ region-name="odd-header"
+ extent="0.5in"
+ border-bottom="0.5pt solid"/>
+ <fo:region-body
+ margin-top="0.5in"
+ margin-bottom=".5in"/>
+ <fo:region-after
+ region-name="odd-footer"
+ extent=".5in"
+ display-align="before"/>
+ </fo:simple-page-master>
+ <fo:page-sequence-master master-name="book">
+ <fo:repeatable-page-master-alternatives>
+ <fo:conditional-page-master-reference
+ page-position="first"
+ master-reference="first-page"/>
+ <fo:conditional-page-master-reference
+ odd-or-even="odd"
+ master-reference="odd-page"/>
+ <fo:conditional-page-master-reference
+ odd-or-even="even"
+ master-reference="even-page"/>
+ </fo:repeatable-page-master-alternatives>
+ </fo:page-sequence-master>
+ </fo:layout-master-set>
+ <xsl:apply-templates select="/site/document" mode="outline"/>
+ <fo:page-sequence master-reference="book">
+ <xsl:apply-templates select="/site/document"/>
+ </fo:page-sequence>
+ </fo:root>
+ </xsl:template>
+ <xsl:template match="document">
+ <fo:title>
+ <xsl:value-of select="header/title"/>
+ </fo:title>
+ <fo:static-content flow-name="first-footer">
+ <fo:block
+ border-top="0.25pt solid"
+ padding-before="6pt"
+ text-align="center">
+ <xsl:apply-templates select="footer"/>
+ </fo:block>
+<!-- don't list page number on first page if it's contents is just the TOC -->
+ <xsl:if test="not($toc-max-depth > 0 and $page-break-top-sections)">
+ <xsl:call-template name="insertPageNumber">
+ <xsl:with-param name="text-align">start</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:call-template name="info"/>
+ </fo:static-content>
+ <fo:static-content flow-name="even-header">
+ <fo:block
+ font-size="70%"
+ text-align="end"
+ font-style="italic">
+ <xsl:value-of select="header/title"/>
+ </fo:block>
+ </fo:static-content>
+ <fo:static-content flow-name="even-footer">
+ <fo:block
+ border-top="0.25pt solid"
+ padding-before="6pt"
+ text-align="center">
+ <xsl:apply-templates select="footer"/>
+ </fo:block>
+ <xsl:call-template name="insertPageNumber">
+ <xsl:with-param name="text-align">end</xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="info"/>
+ </fo:static-content>
+ <fo:static-content flow-name="odd-header">
+ <fo:block
+ font-size="70%"
+ text-align="start"
+ font-style="italic">
+ <xsl:value-of select="header/title"/>
+ </fo:block>
+ </fo:static-content>
+ <fo:static-content flow-name="odd-footer">
+ <fo:block
+ border-top="0.25pt solid"
+ padding-before="6pt"
+ text-align="center">
+ <xsl:apply-templates select="footer"/>
+ </fo:block>
+ <xsl:call-template name="insertPageNumber">
+ <xsl:with-param name="text-align">start</xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="info"/>
+ </fo:static-content>
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block
+ padding-before="24pt"
+ padding-after="24pt"
+ font-size="24pt"
+ font-weight="bold"
+ id="{generate-id()}">
+ <xsl:value-of select="header/title"/>
+ </fo:block>
+ <fo:block
+ text-align="{$text-align}"
+ padding-before="18pt"
+ padding-after="18pt">
+ <xsl:apply-templates/>
+ </fo:block>
+<!-- Total number of pages calculation... -->
+ <fo:block id="term"/>
+ </fo:flow>
+ </xsl:template>
+ <xsl:template match="abstract">
+ <fo:block
+ font-size="12pt"
+ text-align="center"
+ space-before="20pt"
+ space-after="25pt"
+ width="7.5in"
+ font-family="serif"
+ font-style="italic">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="notice">
+ <fo:block
+ font-size="10pt"
+ text-align="left"
+ space-before="20pt"
+ width="7.5in"
+ font-family="serif"
+ border-top="0.25pt solid"
+ border-bottom="0.25pt solid"
+ padding-before="6pt"
+ padding-after="6pt">
+ <xsl:call-template name="insertPageBreaks"/>
+<!-- insert i18n stuff here -->
+ NOTICE: <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="anchor">
+ <fo:block id="{@id}"/>
+ <xsl:apply-templates/>
+ </xsl:template>
+ <xsl:template match="section">
+ <xsl:param name="level">0</xsl:param>
+ <xsl:variable name="size">
+<!-- 14pt for level 1 12pt for level 2 -->
+ <xsl:value-of select="14-number($level)"/>
+ </xsl:variable>
+ <xsl:variable name="background-color" select="//skinconfig/colors/color[@name='body']/@value"/>
+ <xsl:variable name="heading-color" select="//skinconfig/colors/color[@name='subheading']/@value"/>
+ <xsl:variable name="heading-type" select="//skinconfig/headings/@type"/>
+ <fo:block
+ font-family="serif"
+ font-size="{$size}pt"
+ font-weight="bold"
+ space-before="12pt"
+ space-after="4pt">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:if test="$heading-type = 'boxed'">
+ <xsl:attribute name="background-color">
+ <xsl:value-of select="$heading-color"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:attribute name="id">
+ <xsl:choose>
+ <xsl:when test="normalize-space(@id)!=''">
+ <xsl:value-of select="@id"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="generate-id()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:if test="$numbersections = 'true' and number($level) < $numbering-max-depth+1">
+ <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/>
+<xsl:text>. </xsl:text>
+ </xsl:if>
+<!-- For sections 4 or more nestings deep, indent instead of number -->
+ <xsl:if test="number($level) > $numbering-max-depth+1">
+ <xsl:attribute name="start-indent">
+ <xsl:value-of select="4+number($level)"/>
+<xsl:text>pt</xsl:text>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="title"/>
+ </fo:block>
+ <xsl:if test="$heading-type = 'underlined'">
+<!-- The non-breaking space in this block is required, otherwise
+ the block won't be rendered at all. -->
+ <fo:block
+ font-family="serif"
+ font-size="{10 div (number($level) +1 )}pt"
+ background-color="{$heading-color}"> </fo:block>
+ </xsl:if>
+ <fo:block
+ background-color="{$background-color}">
+ <xsl:apply-templates>
+ <xsl:with-param name="level" select="number($level)+1"/>
+ </xsl:apply-templates>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="title">
+<!-- do nothing as titles are handled in their parent templates -->
+ </xsl:template>
+ <xsl:template match="subtitle">
+ <xsl:param name="level">0</xsl:param>
+ <xsl:variable name="size" select="16-(number($level)*1.5)"/>
+ <fo:block
+ font-weight="bold"
+ font-size="{$size}pt">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="authors">
+ <fo:block
+ space-before="20pt"
+ font-weight="bold"
+ font-size="9pt">
+ <xsl:call-template name="insertPageBreaks"/>
+<!-- insert i18n stuff here -->
+ by
+ <xsl:for-each select="person">
+ <xsl:value-of select="@name"/>
+ <xsl:if test="not(position() = last())">, </xsl:if>
+ </xsl:for-each>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="p">
+ <xsl:choose>
+ <xsl:when test="ancestor::li and not(preceding-sibling::*)">
+ <fo:block
+ space-after="4pt"
+ font-family="serif">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:when>
+ <xsl:otherwise>
+ <fo:block
+ space-before="4pt"
+ space-after="4pt"
+ font-family="serif">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="source">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name='code']/@value"/>
+ <fo:block
+ font-family="monospace"
+ font-size="10pt"
+ background-color="{$color}"
+ white-space-collapse="false"
+ linefeed-treatment="preserve"
+ white-space-treatment="preserve"
+ wrap-option="wrap"
+ text-align="start">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="ol|ul">
+ <fo:list-block
+ provisional-distance-between-starts="18pt"
+ provisional-label-separation="3pt"
+ text-align="start">
+ <xsl:apply-templates/>
+ </fo:list-block>
+ </xsl:template>
+ <xsl:template match="ol/li">
+ <fo:list-item>
+ <xsl:if test="not(following-sibling::li[1])">
+ <xsl:attribute name="space-after">6pt"</xsl:attribute>
+ </xsl:if>
+ <fo:list-item-label
+ end-indent="label-end()">
+ <fo:block>
+ <xsl:number format="1."/>
+ </fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body
+ start-indent="body-start()">
+ <fo:block
+ font-family="serif">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+<!-- Emulate browser handling of these invalid combinations that our DTD
+ unfortunately allows -->
+ <xsl:template match="ul/ul | ul/ol | ol/ul | ol/ol">
+ <fo:list-item>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block></fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block font-family="serif">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+ <xsl:template match="ul/li">
+ <fo:list-item>
+ <xsl:if test="not(following-sibling::li[1])">
+ <xsl:attribute name="space-after">6pt</xsl:attribute>
+ </xsl:if>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block>•</fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block
+ font-family="serif">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+ <xsl:template match="dl">
+ <fo:list-block
+ provisional-distance-between-starts="18pt"
+ provisional-label-separation="3pt"
+ text-align="start">
+ <xsl:apply-templates/>
+ </fo:list-block>
+ </xsl:template>
+ <xsl:template match="dt">
+ <fo:list-item>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block></fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block
+ font-weight="bold">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+ <xsl:template match="dd">
+ <fo:list-item>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block></fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block>
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </xsl:template>
+ <xsl:template match="strong">
+ <fo:inline font-weight="bold">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="em">
+ <fo:inline font-style="italic">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="code">
+ <fo:inline font-family="monospace">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="warning">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name='warning']/@value"/>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-weight="bold"
+ font-size="10pt"
+ font-family="serif"
+ space-before="10pt"
+ border-before-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="{$color}"
+ color="#ffffff">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:choose>
+ <xsl:when test="@label">
+ <xsl:value-of select="@label"/>
+ </xsl:when>
+ <xsl:otherwise>Warning: </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="title"/>
+ </fo:block>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-family="serif"
+ font-size="8pt"
+ border-after-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="#fff0f0"
+ padding-start="3pt"
+ padding-end="3pt"
+ padding-before="3pt"
+ padding-after="3pt"
+ space-after="10pt">
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="note">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name='note']/@value"/>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-weight="bold"
+ font-size="10pt"
+ color="#ffffff"
+ font-family="serif"
+ space-before="10pt"
+ border-before-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="{$color}">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:choose>
+ <xsl:when test="@label">
+ <xsl:value-of select="@label"/>
+ </xsl:when>
+<!-- insert i18n stuff here -->
+ <xsl:otherwise>Note: </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="title"/>
+ </fo:block>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-family="serif"
+ font-size="8pt"
+ space-after="10pt"
+ border-after-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="#F0F0FF"
+ padding-start="3pt"
+ padding-end="3pt"
+ padding-before="3pt"
+ padding-after="3pt">
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="fixme">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name='fixme']/@value"/>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-weight="bold"
+ font-size="10pt"
+ color="#FFFFFF"
+ font-family="serif"
+ space-before="10pt"
+ border-before-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="{$color}">
+ <xsl:call-template name="insertPageBreaks"/>
+<!-- insert i18n stuff here -->
+ FIXME (<xsl:value-of select="@author"/>): <xsl:value-of select="title"/>
+ </fo:block>
+ <fo:block
+ margin-left="0.25in"
+ margin-right="0.25in"
+ font-family="serif"
+ font-size="8pt"
+ space-after="10pt"
+ border-after-style="solid"
+ border-start-style="solid"
+ border-end-style="solid"
+ border-color="{$color}"
+ background-color="#FFF0F0"
+ padding-start="3pt"
+ padding-end="3pt"
+ padding-before="3pt"
+ padding-after="3pt">
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="link|fork|jump">
+ <xsl:variable name="color" select="//skinconfig/colors/color[@name = 'body']/@link"/>
+ <xsl:choose>
+ <xsl:when test="starts-with(@href, '#')">
+ <fo:basic-link color="{$color}" text-decoration="underline" internal-destination="{substring(@href,2)}">
+ <xsl:apply-templates/>
+ </fo:basic-link>
+ </xsl:when>
+ <xsl:otherwise>
+ <fo:basic-link color="{$color}" text-decoration="underline" external-destination="{@href}">
+ <xsl:apply-templates/>
+ </fo:basic-link>
+ <xsl:if test="$show-external-urls = 'true' and @href != string(.)">
+ (<xsl:value-of select="@href"/>)
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="figure|img">
+ <fo:block text-align="center">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:if test="normalize-space(@id)!=''">
+ <xsl:attribute name="id">
+ <xsl:value-of select="@id"/>
+ </xsl:attribute>
+ </xsl:if>
+<!-- Make relative paths absolute -->
+ <xsl:variable name="imgpath">
+ <xsl:choose>
+<!-- resources image dir -->
+ <xsl:when test="starts-with(string(@src),'images/')">
+ <xsl:value-of select="concat($imagesdir,substring-after(@src,'images'))"/>
+ </xsl:when>
+ <xsl:when test="contains(string(@src),'/images/')">
+ <xsl:value-of select="concat($imagesdir,substring-after(@src,'/images'))"/>
+ </xsl:when>
+<!-- already absolute -->
+ <xsl:when test="contains(string(@src),':') or starts-with(string(@src),'/')">
+ <xsl:value-of select="@src"/>
+ </xsl:when>
+<!-- relative to document -->
+ <xsl:otherwise>
+ <xsl:value-of select="concat($xmlbasedir,@src)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <fo:external-graphic src="{$imgpath}">
+ <xsl:if test="@height">
+ <xsl:attribute name="height">
+ <xsl:value-of select="@height"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="@width">
+ <xsl:attribute name="width">
+ <xsl:value-of select="@width"/>
+ </xsl:attribute>
+ </xsl:if>
+ </fo:external-graphic>
+<!-- alt text -->
+ <xsl:if test="//skinconfig/pdf/show-image-alt-text='true'">
+ <xsl:if test="normalize-space(@alt)!=''">
+ <fo:block>
+ <xsl:value-of select="@alt"/>
+ </fo:block>
+ </xsl:if>
+ </xsl:if>
+ </fo:block>
+ </xsl:template>
+ <xsl:template match="table">
+<!-- FIXME: Apache FOP must have column widths specified at present,
+ this section can be removed when this limitation is removed from Fop.
+ Unfortunately, this means that each column is a fixed width,
+ but at least the table displays! -->
+ <xsl:variable name="max-number-columns-td">
+ <xsl:for-each select="tr">
+ <xsl:sort select="count(td|th)" data-type="number"
+ order="descending"/>
+ <xsl:if test="position() = 1">
+ <xsl:value-of select="count(td|th)"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="max-number-columns-colspan">
+ <xsl:for-each select="tr">
+ <xsl:sort select="count(td|th)" data-type="number"
+ order="descending"/>
+ <xsl:if test="position() = 1">
+ <xsl:value-of
+ select="sum(td/@colspan|th/@colspan)"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="max-number-columns">
+ <xsl:choose>
+ <xsl:when
+ test="$max-number-columns-colspan>$max-number-columns-td">
+ <xsl:value-of
+ select="$max-number-columns-colspan"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$max-number-columns-td"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="column-width">
+ <xsl:value-of select="6.25 div number($max-number-columns)"/>in
+ </xsl:variable>
+ <fo:table>
+ <fo:table-column>
+ <xsl:attribute name="column-width">
+ <xsl:value-of select="$column-width"/>
+ </xsl:attribute>
+ <xsl:attribute name="number-columns-repeated">
+ <xsl:value-of select="number($max-number-columns)"/>
+ </xsl:attribute>
+ </fo:table-column>
+<!-- End of hack for Fop support (if removing this hack, remember
+ you need the <fo:table> element) -->
+ <fo:table-body
+ font-size="10pt"
+ font-family="sans-serif">
+ <xsl:apply-templates select="tr"/>
+ </fo:table-body>
+ </fo:table>
+<!-- FIXME: Apache Fop does not support the caption element yet.
+ This hack will display the table caption accordingly. -->
+ <xsl:if test="caption">
+ <fo:block
+ text-align="center"
+ font-weight="bold">
+<!-- insert i18n stuff here -->
+ Table
+ <xsl:text> </xsl:text>
+ <xsl:number count="table" level="multiple"/>
+<xsl:text>: </xsl:text>
+ <xsl:value-of select="caption"/>
+ </fo:block>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="tr">
+ <fo:table-row>
+ <xsl:apply-templates/>
+ </fo:table-row>
+ </xsl:template>
+ <xsl:template match="th">
+ <xsl:variable name="border-color" select="//skinconfig/colors/color[@name = 'table']/@value"/>
+ <xsl:variable name="background-color" select="$border-color"/>
+ <fo:table-cell
+ padding-before="4pt"
+ padding-after="4pt"
+ padding-start="4pt"
+ padding-end="4pt"
+ color="#FFFFFF"
+ background-color="{$background-color}"
+ border="1pt solid {$border-color}">
+ <xsl:attribute name="number-columns-spanned">
+ <xsl:value-of select="@colspan"/>
+ </xsl:attribute>
+ <xsl:attribute name="number-rows-spanned">
+ <xsl:value-of select="@rowspan"/>
+ </xsl:attribute>
+ <fo:block
+ text-align="center">
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:table-cell>
+ </xsl:template>
+ <xsl:template match="td">
+ <xsl:variable name="border-color" select="//skinconfig/colors/color[@name = 'table']/@value"/>
+ <xsl:variable name="background-color" select="//skinconfig/colors/color[@name = 'table-cell']/@value"/>
+ <fo:table-cell
+ padding-before="4pt"
+ padding-after="4pt"
+ padding-start="4pt"
+ padding-end="4pt"
+ background-color="{$background-color}"
+ border="1pt solid {$border-color}">
+ <xsl:attribute name="number-columns-spanned">
+ <xsl:value-of select="@colspan"/>
+ </xsl:attribute>
+ <xsl:attribute name="number-rows-spanned">
+ <xsl:value-of select="@rowspan"/>
+ </xsl:attribute>
+ <fo:block>
+ <xsl:apply-templates/>
+ </fo:block>
+ </fo:table-cell>
+ </xsl:template>
+ <xsl:template match="br">
+ <fo:block></fo:block>
+ </xsl:template>
+ <xsl:template match="legal">
+ <fo:inline
+ font-size="8pt">
+ <xsl:apply-templates/>
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="body[count(//section) != 0]">
+ <xsl:if test="$toc-max-depth > 0">
+ <fo:block font-family="serif" font-size="14pt" font-weight="bold"
+ space-after="5pt" space-before="5pt" text-align="justify" width="7.5in">
+ <xsl:call-template name="insertPageBreaks"/>
+<!-- insert i18n stuff here -->
+<xsl:text>Table of contents</xsl:text>
+ </fo:block>
+ <fo:block font-family="sans" font-size="12pt" space-after="5pt"
+ space-before="0pt" text-align="justify" width="7.5in">
+ <xsl:if test="$page-break-top-sections">
+ <xsl:attribute name="break-after">page</xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates select="section" mode="toc" />
+ </fo:block>
+ </xsl:if>
+ <xsl:apply-templates />
+ </xsl:template>
+ <xsl:template match="section" mode="toc">
+<!-- FIXME: see bug FOR-640 -->
+ <xsl:param name="depth" select="'1'"/>
+ <fo:block space-before="5pt" text-align-last="justify" start-indent=".5em" text-indent=".5em">
+ <fo:inline>
+ <xsl:variable name="id">
+ <xsl:choose>
+ <xsl:when test="normalize-space(@id)!=''">
+ <xsl:value-of select="@id"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="generate-id()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <fo:basic-link internal-destination="{$id}">
+ <xsl:value-of select="substring('          ', 0, 2 * $depth - 1)" />
+ <fo:inline font-size="10pt">
+ <xsl:number count="section" format="1.1.1.1.1.1.1" level="multiple" />
+ </fo:inline>
+<xsl:text> </xsl:text>
+ <xsl:value-of select="title" />
+ <fo:leader leader-pattern="dots" />
+ <fo:page-number-citation ref-id="{$id}" />
+ </fo:basic-link>
+ </fo:inline>
+ <xsl:if test="$toc-max-depth > $depth">
+ <xsl:apply-templates select="section" mode="toc">
+ <xsl:with-param name="depth" select="$depth + 1"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </fo:block>
+ </xsl:template>
+<!-- ====================================================================== -->
+<!-- Local Extensions section -->
+<!-- ====================================================================== -->
+ <xsl:template match="citation">
+ <fo:inline>
+ [<xsl:value-of select="@def"/>]
+ </fo:inline>
+ </xsl:template>
+ <xsl:template match="p[@class='quote']">
+ <fo:block start-indent="1em"
+ space-before="4pt"
+ space-after="4pt"
+ background-color="#f0f0f0"
+ font-family="monospace">
+ <xsl:call-template name="insertPageBreaks"/>
+ <xsl:apply-templates/>
+ </fo:block>
+ </xsl:template>
+ <xsl:template name="insertPageBreaks">
+<!-- if marked as a 'pageBreakBefore', and we're breaking on pages, and were not the first node -->
+ <xsl:if test="contains(@class, 'pageBreakBefore') and preceding-sibling::node()">
+ <xsl:attribute name="break-before">page</xsl:attribute>
+ </xsl:if>
+<!-- if marked as a 'pageBreakAfter', and we're breaking on pages, and were not the last node -->
+ <xsl:if test="contains(@class, 'pageBreakAfter') and following-sibling::node()">
+ <xsl:attribute name="break-after">page</xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+<!-- Display the document numerotation -->
+ <xsl:template name="insertPageNumber">
+ <xsl:param name="text-align" select="'start'"/>
+ <xsl:variable name="prefixe" select="substring-before($page-numbering-format,'1')"/>
+ <xsl:variable name="sep" select="substring-before(substring-after($page-numbering-format,'1'),'1')"/>
+ <xsl:variable name="postfixe">
+ <xsl:choose>
+ <xsl:when test="contains(substring-after($page-numbering-format,'1'),'1')">
+ <xsl:value-of select="substring-after(substring-after($page-numbering-format,'1'),'1')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="substring-after($page-numbering-format,'1')"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+<!-- if 'page-numbering-format' contains 1 digits, the page number is displayed in the footer -->
+ <xsl:if test="contains($page-numbering-format,'1')">
+ <fo:block font-size="70%" text-align="{$text-align}">
+<!-- if the separator is not found, the total page number is skipped -->
+ <xsl:value-of select="$prefixe"/>
+ <fo:page-number/>
+ <xsl:if test="$sep != ''">
+ <xsl:value-of select="$sep"/>
+ <fo:page-number-citation ref-id="term"/>
+ </xsl:if>
+ <xsl:value-of select="$postfixe"/>
+ </fo:block>
+ </xsl:if>
+ </xsl:template>
+<!-- ====================================================================== -->
+<!-- Temporary section - subject to change on short notice -->
+<!-- ====================================================================== -->
+ <xsl:template match="//style">
+<!-- HACK: The OpenOffice.org input plugin currently produces
+ intermediate documents that contain a style element, invalid per
+ the Forrest Document DTD. This style element must be ignored
+ here. To find out why this is done this way, read the comments
+ attached to issue FOR-433. -->
+ </xsl:template>
+</xsl:stylesheet>