MINOR: merging changes from ss2doc back. APICHANGE: renamed DocumentationOpenSearch_Controller to DocumentationOpenSearchController. MINOR: renamed left and right column to more generic content/sidebar columns

This commit is contained in:
Will Rossiter 2011-08-02 15:30:58 +12:00
parent 035df99088
commit 56578742f4
9 changed files with 92 additions and 62 deletions

View File

@ -131,16 +131,18 @@ class DocumentationSearch {
/** /**
* Enable searching documentation * Enable searching documentation
*/ */
public static function enable() { public static function enable($enabled = true) {
self::$enabled = true; self::$enabled = $enabled;
// include the zend search functionality if($enabled) {
set_include_path( // include the zend search functionality
dirname(dirname(__FILE__)) . '/thirdparty/'. PATH_SEPARATOR . set_include_path(
get_include_path() dirname(dirname(__FILE__)) . '/thirdparty/'. PATH_SEPARATOR .
); get_include_path()
);
require_once 'Zend/Search/Lucene.php'; require_once 'Zend/Search/Lucene.php';
}
} }
/** /**
@ -378,35 +380,4 @@ class DocumentationSearch {
return $this->outputController->customise($data)->renderWith($templates); return $this->outputController->customise($data)->renderWith($templates);
} }
}
/**
* Public facing controller for handling search.
*
* @package sapphiredocs
*/
class DocumentationOpenSearch_Controller extends Controller {
function index() {
return $this->httpError('404');
}
function description() {
$viewer = new DocumentationViewer();
if(!DocumentationViewer::canView()) return Security::permissionFailure($this);
$data = DocumentationSearch::get_meta_data();
$link = Director::absoluteBaseUrl() .
$data['SearchPageLink'] = Controller::join_links(
$viewer->Link(),
'results/?Search={searchTerms}&start={startIndex}&length={count}&action_results=1'
);
$data['SearchPageAtom'] = $data['SearchPageLink'] . '&format=atom';
return $this->customise(new ArrayData($data))->renderWith(array('OpenSearchDescription'));
}
} }

View File

@ -0,0 +1,39 @@
<?php
/**
* Public facing controller for handling an opensearch interface based on
* the standard search form.
*
* @package sapphiredocs
*/
class DocumentationOpenSearchController extends ContentController {
static $allowed_actions = array(
'description'
);
function index() {
return $this->httpError(404);
}
function description() {
$viewer = new DocumentationViewer();
if(!$viewer->canView()) return Security::permissionFailure($this);
if(!DocumentationSearch::enabled()) return $this->httpError('404');
$data = DocumentationSearch::get_meta_data();
$link = Director::absoluteBaseUrl() .
$data['SearchPageLink'] = Controller::join_links(
$viewer->Link(),
'results/?Search={searchTerms}&amp;start={startIndex}&amp;length={count}&amp;action_results=1'
);
$data['SearchPageAtom'] = $data['SearchPageLink'] . '&amp;format=atom';
return $this->customise(
new ArrayData($data)
)->renderWith(array('OpenSearchDescription'));
}
}

View File

@ -296,13 +296,13 @@ class DocumentationViewer extends Controller {
*/ */
function getVersions($entity = false) { function getVersions($entity = false) {
if(!$entity) $entity = $this->entity; if(!$entity) $entity = $this->entity;
$entity = DocumentationService::is_registered_entity($entity); $entity = DocumentationService::is_registered_entity($entity);
if(!$entity) return false; if(!$entity) return false;
$versions = $entity->getVersions(); $versions = $entity->getVersions();
$output = new DataObjectSet(); $output = new DataObjectSet();
if($versions) { if($versions) {
$lang = $this->getLang(); $lang = $this->getLang();
$currentVersion = $this->getVersion(); $currentVersion = $this->getVersion();
@ -681,12 +681,7 @@ class DocumentationViewer extends Controller {
* @return Form * @return Form
*/ */
function LanguageForm() { function LanguageForm() {
if($entity = $this->getEntity()) { $langs = $this->getLanguages();
$langs = DocumentationService::get_registered_languages($entity->getFolder());
}
else {
$langs = DocumentationService::get_registered_languages();
}
$fields = new FieldSet( $fields = new FieldSet(
$dropdown = new DropdownField( $dropdown = new DropdownField(

View File

@ -63,7 +63,12 @@ fieldset { border: none; }
#footer { width: 960px; margin: 22px auto; } #footer { width: 960px; margin: 22px auto; }
#footer p { font-size: 11px; line-height: 11px; color: #798D85;} #footer p { font-size: 11px; line-height: 11px; color: #798D85;}
#footer p a { color: #798D85;} #footer p a { color: #798D85;}
/* Search */
#search { float: right; }
#search label { display: none; }
/* Breadcrumbs */
#breadcrumbs { float: left; }
/* Content */ /* Content */
#layout { } #layout { }
#content { } #content { }
@ -89,14 +94,14 @@ fieldset { border: none; }
text-decoration: none; text-decoration: none;
} }
#left-column { width: 640px; float: left; } #content-column { width: 640px; float: left; }
#right-column { #sidebar-column {
width: 260px; width: 260px;
float: right; float: right;
} }
#right-column .box { #sidebar-column .box {
margin: 0 12px 12px 0; margin: 0 12px 12px 0;
} }

View File

@ -12,7 +12,7 @@
// Remove existing anchor redirection in the url // Remove existing anchor redirection in the url
var pageURL = window.location.href.replace(/#[a-zA-Z0-9\-\_]*/g, ''); var pageURL = window.location.href.replace(/#[a-zA-Z0-9\-\_]*/g, '');
$('#left-column h1[id], #left-column h2[id], #left-column h3[id], #left-column h4[id]').each(function(i) { $('#content-column h1[id], #content-column h2[id], #content-column h3[id], #content-column h4[id]').each(function(i) {
var current = $(this); var current = $(this);
toc += '<li class="' + current.attr("tagName").toLowerCase() + '"><a id="link' + i + '" href="'+ pageURL +'#' + $(this).attr('id') + '" title="' + current.html() + '">' + current.html() + '</a></li>'; toc += '<li class="' + current.attr("tagName").toLowerCase() + '"><a id="link' + i + '" href="'+ pageURL +'#' + $(this).attr('id') + '" title="' + current.html() + '">' + current.html() + '</a></li>';
}); });
@ -29,7 +29,7 @@
*/ */
var url = window.location.href; var url = window.location.href;
$("#left-column h1[id], #left-column h2[id], #left-column h3[id], #left-column h4[id], #left-column h5[id], #left-column h6[id]").each(function() { $("#content-column h1[id], #content-column h2[id], #content-column h3[id], #content-column h4[id], #content-column h5[id], #content-column h6[id]").each(function() {
var link = '<a class="heading-anchor-link" title="Link to this section" href="'+ url + '#' + $(this).attr('id') + '">&para;</a>'; var link = '<a class="heading-anchor-link" title="Link to this section" href="'+ url + '#' + $(this).attr('id') + '">&para;</a>';
$(this).append(' ' + link); $(this).append(' ' + link);
}); });

View File

@ -3,12 +3,12 @@
<% end_if %> <% end_if %>
<div id="documentation-page"> <div id="documentation-page">
<div id="left-column"> <div id="content-column">
$Content $Content
</div> </div>
<% if Content %> <% if Content %>
<div id="right-column"> <div id="sidebar-column">
<% include DocTableOfContents %> <% include DocTableOfContents %>
<% include DocInThisModule %> <% include DocInThisModule %>
</div> </div>

View File

@ -3,7 +3,7 @@
<% end_if %> <% end_if %>
<div id="module-home"> <div id="module-home">
<div id="left-column"> <div id="content-column">
<% if Content %> <% if Content %>
$Content $Content
<% else %> <% else %>
@ -11,7 +11,7 @@
<% end_if %> <% end_if %>
</div> </div>
<div id="right-column"> <div id="sidebar-column">
<% include DocInThisModule %> <% include DocInThisModule %>
</div> </div>
</div> </div>

View File

@ -1,5 +1,5 @@
<div id="documentation-page"> <div id="documentation-page">
<div id="left-column"> <div id="content-column">
<p>Your search for <strong>&quot;$Query.XML&quot;</strong> found $TotalResults result<% if TotalResults != 1 %>s<% end_if %>.</p> <p>Your search for <strong>&quot;$Query.XML&quot;</strong> found $TotalResults result<% if TotalResults != 1 %>s<% end_if %>.</p>
<% if Results %> <% if Results %>
@ -40,7 +40,7 @@
<% end_if %> <% end_if %>
</div> </div>
<div id="right-column"> <div id="sidebar-column">
</div> </div>
</div> </div>

View File

@ -5,7 +5,7 @@
* @subpackage tests * @subpackage tests
*/ */
class DocumentationSearchTest extends SapphireTest { class DocumentationSearchTest extends FunctionalTest {
function setUp() { function setUp() {
parent::setUp(); parent::setUp();
@ -17,7 +17,6 @@ class DocumentationSearchTest extends SapphireTest {
} }
function testGetAllPages() { function testGetAllPages() {
if(!DocumentationSearch::enabled()) return; if(!DocumentationSearch::enabled()) return;
DocumentationService::set_automatic_registration(false); DocumentationService::set_automatic_registration(false);
@ -27,4 +26,25 @@ class DocumentationSearchTest extends SapphireTest {
$this->assertEquals(7, $search->Count(), '5 pages. 5 pages in entire folder'); $this->assertEquals(7, $search->Count(), '5 pages. 5 pages in entire folder');
} }
function testOpenSearchControllerAccessible() {
$c = new DocumentationOpenSearchController();
$response = $c->handleRequest(new SS_HTTPRequest('GET', ''));
$this->assertEquals(404, $response->getStatusCode());
// test accessing it when the search isn't active
DocumentationSearch::enable(false);
$response = $c->handleRequest(new SS_HTTPRequest('GET', 'description/'));
$this->assertEquals(404, $response->getStatusCode());
// test we get a response to the description. The meta data test will check
// that the individual fields are valid but we should check urls are there
DocumentationSearch::enable(true);
$response = $c->handleRequest(new SS_HTTPRequest('GET', 'description'));
$this->assertEquals(200, $response->getStatusCode());
$desc = new SimpleXMLElement($response->getBody());
$this->assertEquals(2, count($desc->Url));
}
} }