blob: e78bfd578daab62534f736f04d02edfdfce0cc7b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2008 Steffen Pingel and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Xiaoyang Guan - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.trac.ui.editor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.client.ITracClient;
import org.eclipse.mylyn.internal.trac.core.client.TracException;
import org.eclipse.mylyn.internal.trac.core.client.TracXmlRpcClient;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.editors.AbstractRenderingEngine;
/**
* @author Xiaoyang Guan
* @since 2.1
*/
public class TracRenderingEngine extends AbstractRenderingEngine {
/**
* generate HTML preview page for <code>text</code>
*/
@Override
public String renderAsHtml(TaskRepository repository, String text, IProgressMonitor monitor) throws CoreException {
monitor.beginTask("Render HTML Preview", IProgressMonitor.UNKNOWN); //$NON-NLS-1$
try {
ITracClient client = TracCorePlugin.getDefault()
.getConnector()
.getClientManager()
.getTracClient(repository);
if (client instanceof TracXmlRpcClient) {
TracXmlRpcClient tracXmlRpcClient = (TracXmlRpcClient) client;
String htmlText = tracXmlRpcClient.wikiToHtml(text, monitor);
if (monitor.isCanceled()) {
throw new OperationCanceledException();
}
String htmlHeader = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" //$NON-NLS-1$
+ "<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\" xml:lang=\"en\">" //$NON-NLS-1$
+ "<head>" //$NON-NLS-1$
+ "<link rel=\"stylesheet\" href=\"REPOSITORY_URL/chrome/common/css/trac.css\" type=\"text/css\" />" //$NON-NLS-1$
+ "<link rel=\"stylesheet\" href=\"REPOSITORY_URL/chrome/common/css/wiki.css\" type=\"text/css\" />" //$NON-NLS-1$
+ "<link rel=\"icon\" href=\"REPOSITORY_URL/chrome/common/trac.ico\" type=\"image/x-icon\" />" //$NON-NLS-1$
+ "<link rel=\"shortcut icon\" href=\"EPOSITORY_URL/chrome/common/trac.ico\" type=\"image/x-icon\" />" //$NON-NLS-1$
+ "<style type=\"text/css\">body {background: #f4f4f4 url(REPOSITORY_URL/chrome/common/draft.png);margin: 0;padding: 0;}</style>" //$NON-NLS-1$
+ "</head>"; //$NON-NLS-1$
String htmlBody = "<body> " + htmlText + "</body>"; //$NON-NLS-1$ //$NON-NLS-2$
String htmlFooter = "</html>"; //$NON-NLS-1$
String html = htmlHeader.replace("REPOSITORY_URL", repository.getRepositoryUrl()) + htmlBody //$NON-NLS-1$
+ htmlFooter;
return html;
} else {
throw new CoreException(TracCorePlugin.toStatus(new TracException(
"Preview is available only in XML-RPC access mode"), repository)); //$NON-NLS-1$
}
} catch (TracException e) {
throw new CoreException(TracCorePlugin.toStatus(e, repository));
} finally {
monitor.done();
}
}
}