text: from django.conf.urls import include, url
  from django.contrib.staticfiles.templatetags.staticfiles import static
  from django.core import urlresolvers
  from django.utils.html import format_html, format_html_join
  from django.utils.translation import ugettext_lazy as _
  from django.utils.translation import ungettext
  
  from wagtail.wagtailadmin.menu import MenuItem
  from wagtail.wagtailadmin.search import SearchArea
  from wagtail.wagtailadmin.site_summary import SummaryItem
  from wagtail.wagtailcore import hooks
  from wagtail.wagtaildocs import admin_urls
  from wagtail.wagtaildocs.forms import GroupDocumentPermissionFormSet
  from wagtail.wagtaildocs.models import get_document_model
  from wagtail.wagtaildocs.permissions import permission_policy
  from wagtail.wagtaildocs.rich_text import DocumentLinkHandler
  
  
  @hooks.register('register_admin_urls')
  def register_admin_urls():
      return [
          url(r'^documents/', include(admin_urls, app_name='wagtaildocs', namespace='wagtaildocs')),
      ]
  
  
  class DocumentsMenuItem(MenuItem):
      def is_shown(self, request):
          return permission_policy.user_has_any_permission(
              request.user, ['add', 'change', 'delete']
          )
  
  
  @hooks.register('register_admin_menu_item')
  def register_documents_menu_item():
      return DocumentsMenuItem(
          _('Documents'),
          urlresolvers.reverse('wagtaildocs:index'),
          name='documents',
          classnames='icon icon-doc-full-inverse',
          order=400
      )
  
  
  @hooks.register('insert_editor_js')
  def editor_js():
      js_files = [
          static('wagtaildocs/js/hallo-plugins/hallo-wagtaildoclink.js'),
          static('wagtaildocs/js/document-chooser.js'),
      ]
      js_includes = format_html_join(
          '\n', '<script src="{0}"></script>',
          ((filename, ) for filename in js_files)
      )
      return js_includes + format_html(
          """
          <script>
              window.chooserUrls.documentChooser = '{0}';
              registerHalloPlugin('hallowagtaildoclink');
          </script>
          """,
          urlresolvers.reverse('wagtaildocs:chooser')
      )
  
  
  @hooks.register('register_rich_text_link_handler')
  def register_document_link_handler():
      return ('document', DocumentLinkHandler)
  
  
  class DocumentsSummaryItem(SummaryItem):
      order = 300
      template = 'wagtaildocs/homepage/site_summary_documents.html'
  
      def get_context(self):
          return {
              'total_docs': get_document_model().objects.count(),
          }
  
  
  @hooks.register('construct_homepage_summary_items')
  def add_documents_summary_item(request, items):
      items.append(DocumentsSummaryItem(request))
  
  
  class DocsSearchArea(SearchArea):
      def is_shown(self, request):
          return permission_policy.user_has_any_permission(
              request.user, ['add', 'change', 'delete']
          )
  
  
  @hooks.register('register_admin_search_area')
  def register_documents_search_area():
      return DocsSearchArea(
          _('Documents'), urlresolvers.reverse('wagtaildocs:index'),
          name='documents',
          classnames='icon icon-doc-full-inverse',
          order=400)
  
  
  @hooks.register('register_group_permission_panel')
  def register_document_permissions_panel():
      return GroupDocumentPermissionFormSet
  
  
  @hooks.register('describe_collection_contents')
  def describe_collection_docs(collection):
      docs_count = get_document_model().objects.filter(collection=collection).count()
      if docs_count:
          url = urlresolvers.reverse('wagtaildocs:index') + ('?collection_id=%d' % collection.id)
          return {
              'count': docs_count,
              'count_text': ungettext(
                  "%(count)s document",
                  "%(count)s documents",
                  docs_count
              ) % {'count': docs_count},
              'url': url,
          }
  