Skip to content
Permalink
Browse files

Merge branch 'dc-master'

# Conflicts:
#	app/views/help/eng/api.markdown
#	app/views/help/spa/api.markdown
#	app/views/home/privacy.html.erb
#	app/views/home/terms.html.erb
#	config/routes.rb
  • Loading branch information...
DavidLemayian committed Apr 23, 2016
2 parents 1a6bfeb + b0ac226 commit d4b2a9315f61c1f06a58f03f4ac5ba5e40386abb
Showing with 615 additions and 214 deletions.
  1. +1 −1 INSTALL.md
  2. +1 −1 README.md
  3. +1 −0 app/controllers/annotations_controller.rb
  4. +9 −4 app/controllers/application_controller.rb
  5. +43 −0 app/controllers/home_controller.rb
  6. +1 −0 app/controllers/pages_controller.rb
  7. +4 −0 app/helpers/application_helper.rb
  8. +1 −1 app/models/featured_report.rb
  9. +1 −1 app/views/embed/enhance.js.erb
  10. +3 −19 app/views/help/eng/api.markdown
  11. +4 −15 app/views/help/spa/api.markdown
  12. +1 −1 app/views/home/_footer.html.erb
  13. +11 −0 app/views/home/api_terms/_v1.0.html.erb
  14. +3 −0 app/views/home/api_terms/changelog.yml
  15. +28 −0 app/views/home/api_terms/show.html.erb
  16. +1 −1 app/views/home/contributors.yml
  17. +46 −34 app/views/home/privacy.html.erb
  18. +0 −108 app/views/home/terms.html.erb
  19. +19 −0 app/views/home/terms/_changelog_entry.html.erb
  20. +106 −0 app/views/home/terms/_v1.0.html.erb
  21. +104 −0 app/views/home/terms/_v2.0.html.erb
  22. +6 −0 app/views/home/terms/changelog.yml
  23. +38 −0 app/views/home/terms/show.html.erb
  24. +2 −2 app/views/jst/workspace/home/tweet.jst
  25. +5 −0 app/views/layouts/minimal.html.erb
  26. +1 −1 app/views/lifecycle_mailer/dan/documents_finished_processing.text.erb
  27. +1 −1 app/views/lifecycle_mailer/dan/reviewer_instructions.text.erb
  28. +2 −2 app/views/lifecycle_mailer/eng/login_instructions.text.erb
  29. +18 −18 config/routes.rb
  30. +1 −1 public/note_embed/note_embed.js
  31. +52 −1 public/stylesheets/v2/common.css
  32. +65 −0 public/stylesheets/v2/info_site.css
  33. +11 −2 public/stylesheets/v2/ui/alerts.css
  34. +25 −0 public/stylesheets/v2/ui/grid.css
@@ -1,6 +1,6 @@
# Installation

DocumentCloud self-installation instructions have been removed. They were out of date and required enormous handholding.
sourceAFRICA self-installation instructions have been removed. They were out of date and required enormous handholding.

We understand the desire to self-install and we're considering how best to support that. But until then, we think it's best to call it an officially unsupported task not for the faint of heart, rather than imply support but offer only broken instructions.

@@ -12,7 +12,7 @@ What do we mean by *actionable documents*? Documents that the public need to hel

[sourceAFRICA](https://sourceafrica.net/) is powered by [DocumentCloud](https://github.com/documentcloud/documentcloud), and allows you to turn your documents into machine readable data, for better analysis. It also makes it easier for you to share documents and/or collaborate with your audience and colleagues.

*sourceAFRICA is offered as a service by [ANCIR (the African Network of Centers for Investigative Reporting)](http://investigativecenters.org) with support from [Code for Africa](http://www.codeforafrica.org).*
*sourceAFRICA is offered as a service by [ANCIR (the African Network of Centers for Investigative Reporting)](https://investigativecenters.org) with support from [Code for Africa](https://codeforafrica.org).*

### Contributing

@@ -42,6 +42,7 @@ def show
# being iframed. The normal show page can also be iframed, but there
# will be a flash of unwanted layout elements before the JS/CSS
# arrives which removes them.
@embedded = true
@exclude_analytics = true
render template: 'annotations/show_embedded', layout: 'minimal'
else
@@ -17,9 +17,7 @@ class ApplicationController < ActionController::Base
after_action :debug_api
end

if Rails.env.production?
around_action :notify_exceptions
end
around_action :notify_exceptions

protected

@@ -301,13 +299,20 @@ def self.exclusive_access?
def set_ssl
Thread.current[:ssl] = request.ssl?
end

ERRORS_TO_IGNORE = [
AbstractController::ActionNotFound,
ActionController::RoutingError,
ActiveRecord::RecordNotFound,
ActionController::UnknownFormat
]

# Email production exceptions to us. Once every 2 minutes at most, per process.
def notify_exceptions
begin
yield
rescue Exception => e
ignore = e.is_a?(AbstractController::ActionNotFound) || e.is_a?(ActionController::RoutingError)
ignore = ERRORS_TO_IGNORE.any?{ |kind| e.is_a? kind }
LifecycleMailer.exception_notification(e, params).deliver_now unless ignore
raise e
end
@@ -27,6 +27,29 @@ def contributors
@contributors = yaml['contributors']
end

def terms
# We launched with versions `1`/`2`, but converted to `1.0`/`2.0` same day.
# Still need to support any incoming requests for `/terms/2` for a while.
return redirect_to terms_path(version: "#{params[:version]}.0") if %w[1 2].include? params[:version]

prepare_term_versions(changelog: 'terms/changelog')
return not_found unless @version_numbers.include? @version

@canonical_url = terms_url if @version == @current_terms['version']
render layout: 'minimal', template: "home/terms/show"
end

def api_terms
prepare_term_versions(changelog: 'api_terms/changelog')
return not_found unless @version_numbers.include? @version

@canonical_url = api_terms_url if @version == @current_terms['version']
render layout: 'minimal', template: "home/api_terms/show"
end

def privacy
render layout: 'minimal'
end

private

@@ -38,4 +61,24 @@ def yaml_for(action)
YAML.load_file("#{Rails.root}/app/views/home/#{action}.yml")
end

def prepare_term_versions(changelog:)
@versions = yaml_for(changelog).sort { |a, b| b['version'] <=> a['version'] }

today = Date.today
@version_numbers = []
@versions.map! do |v|
v['version'] = v['version'].to_s
v['start'] = Date.parse(v['start']) rescue nil
v['end'] = Date.parse(v['end']) rescue nil
v['old'] = !v['current'] && (!v['start'] || v['start'] < today)
v['pending'] = !v['current'] && v['start'] && today < v['start']
@version_numbers.push v['version']
v
end

@current_terms = @versions.find { |v| v['current'] }
@version = (params[:version] || @current_terms['version'])
@viewing_terms = @versions.find { |v| v['version'] == @version }
end

end
@@ -21,6 +21,7 @@ def show
# being iframed. The normal show page can also be iframed, but there
# will be a flash of unwanted layout elements before the JS/CSS
# arrives which removes them.
@embedded = true
@exclude_analytics = true
render template: 'pages/show_embedded'
else
@@ -4,6 +4,10 @@ def compose_title(title)
(title ? "#{title} | " : '') + 'sourceAFRICA'
end

def compose_canonical_url(canonical_url)
canonical_url || request.url
end

def compose_html_classes(html_classes)
html_classes = html_classes.split if html_classes.is_a?(String)
[html_classes].flatten.join(' ')
@@ -10,7 +10,7 @@ class FeaturedReport < ActiveRecord::Base
before_save :fixup_url

def fixup_url
self.url = "http://#{url}" unless url=~/^http\:\/\//
self.url = "https://#{url}" unless url=~/^https\:\/\//
end

def writeup=(markdown)
@@ -19,7 +19,7 @@ return out;},isString:function(thing){return!!(typeof thing==='string');},isElem
if(obj.length>0){return false;}
if(obj.length===0){return true;}
for(var key in obj){if(Penny.has(obj,key)){return false;}}
return true;},};}());(function(){var DocumentCloud=window.DocumentCloud;var Penny=window.Penny;if(DocumentCloud&&DocumentCloud._){var _=DocumentCloud._;}else if(Penny){var _=Penny;}else{console.error("DocumentCloud embed can't load because of missing components.");return false;}
return true;},};}());(function(){var DocumentCloud=window.DocumentCloud;var Penny=window.Penny;if(DocumentCloud&&DocumentCloud._){var _=DocumentCloud._;}else if(Penny){var _=Penny;}else{console.error("sourceAFRICA embed can't load because of missing components.");return false;}
var DCEmbedToolbelt=window.DCEmbedToolbelt=window.DCEmbedToolbelt||{unicodeLetter:'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC',unicodeNumber:'0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D66-\u0D75\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19',isResource:function(thing){return!!(_.has(thing,'resourceType'));},recognizeResource:function(originalResource){if(this.isResource(originalResource)){return originalResource;}
var domainEnvPatterns={production:'sourceafrica\.net',staging:'staging\.sourceafrica\.net',development:'dev\.dcloud\.org'};var domains=_.values(domainEnvPatterns).join('|');var unicodeSlug=this.unicodeLetter+this.unicodeNumber+'\-';var docBase='('+domains+')\/documents\/([0-9]+)-(['+unicodeSlug+']+)';var resourceTypePatterns={'document':[docBase+'\.(?:html|js|json)$'],page:[docBase+'\.html#document\/p([0-9]+)$',docBase+'\/pages\/([0-9]+)\.(?:html|js|json)$'],note:[docBase+'\/annotations\/([0-9]+)\.(?:html|js|json)$',docBase+'\.html#document\/p[0-9]+\/a([0-9]+)$',docBase+'\.html#annotation\/a([0-9]+)$']};var makeDataUrl=function(resource){var urlComponents;switch(resource.resourceType){case'document':urlComponents=[resource.domain,'documents',resource.documentSlug];break;case'page':urlComponents=[resource.domain,'documents',resource.documentSlug];break;case'note':urlComponents=[resource.domain,'documents',resource.documentSlug,'annotations',resource.noteId];break;}
return'//'+urlComponents.join('/')+'.json';};var resource={};_.each(resourceTypePatterns,function(patterns,resourceType){if(!_.isEmpty(resource)){return;}
@@ -2,10 +2,10 @@

sourceAFRICA's API provides resources to search, upload, edit, and organize documents as well as to work with projects. In addition, an oEmbed service provides easy integration of embedding documents, pages and notes.

Use of the sourceAFRICA API indicates you have read and agree to our [API Guidelines and Terms of Service](/terms/api).

## Contents

* General:
* [API Guidelines and Terms of Service](#guidelines)
* Document methods:
* [Search](#search-documents)
* [Upload](#upload-documents)
@@ -24,22 +24,6 @@ sourceAFRICA's API provides resources to search, upload, edit, and organize docu
* [Notes](#oembed-notes)
* [API Wrappers and Utilities](#api-wrappers)

<a name="guidelines"></a>
# API Guidelines and Terms of Service

A limited portion of sourceAFRICA's API is available for public use, including document search and individual document data retrieval. All other resources require authentication via a sourceAFRICA account. No API key is required.

Please be considerate and don't hammer our servers. Also:

* You may not recreate sourceAFRICA.net in its entirety or build an application that simply displays the complete set of documents. You may not build an application that displays the document set of a contributing organization.

* If your project allows users to interact with data from sourceAFRICA, you must cite sourceAFRICA as the source of your data. If your project allows users to view or browse specific documents, you must cite sourceAFRICA and the contributing organizations as identified in the API.

* You may not use the API commercially; you may not charge people money to look at the data or sell advertising specifically against it.

* You understand and acknowledge that any data provided by our API may contain errors and omissions.

_Restrictions on the use of the sourceAFRICA API do not apply to participating organizations working with documents uploaded by their own users. We reserve the right to revise these guidelines. If you violate the spirit of these terms, especially if you use the API to systematically access and reprint documents that you or your newsroom didn't contribute, expect to be blocked without advance warning._

# Document Methods

@@ -61,7 +45,7 @@ order | the order by which documents are listed | title (default is "cre

### Example

/api/search.json?q=obama&page=2
/api/search.json?q=zuma&page=2

<div class="api_search_form">
<p>
@@ -2,10 +2,12 @@

El API proporciona recursos para buscar, cargar, editar y organizar documentos, así como para trabajar con proyectos. Además, un servicio oEmbed proporciona una fácil integración de incrustación de documentos, páginas y notas.

Use of the sourceAFRICA API indicates you have read and agree to our [Directrices y Condiciones del Servicio de API](/terms/api).

## Contenido

* General:
* [Directrices y Condiciones del Servicio de API](#guidelines)
* [Directrices y Condiciones del Servicio de API](/terms/api)
* Métodos de Documento:
* [Busque](#search-documents)
* [Cargar](#upload-documents)
@@ -24,19 +26,6 @@ El API proporciona recursos para buscar, cargar, editar y organizar documentos,
* [Notas](#oembed-notes)
* [Envolturas de la API y Utilidades](#api-wrappers)

<a name="guidelines"></a>
# Directrices y Condiciones del Servicio de API

Una porción limitada de la API de sourceAFRICA está disponible para el uso público, incluyendo la búsqueda y recuperación de documentos de datos documento individual. El resto de los recursos requieren autenticación a través de una cuenta de sourceAFRICA. No se requiere ninguna clave de API.

Por favor sea considerado y no martillar nuestros servidores.

* Bajo ninguna circunstancia se permitirá la reproducción de sourceAFRICA.net en su totalidad o construir una aplicación que simplemente muestre el conjunto completo de documentos. Tiene prohibido crear una aplicación que muestre el conjunto de documentos de una organización aportadora.
* Si su proyecto permite a los usuarios interactuar con los datos de sourceAFRICA, está obligado a citar sourceAFRICA como la fuente de sus datos. Si su proyecto permite a los usuarios ver o explorar documentos específicos, debe citar sourceAFRICA, así como a las organizaciones aportadoras pertinentes, identificadas en el API.
* No se permite utilizar la API comercialmente, lo que significa que no se permite cobrar dinero a la gente para mirar los datos, o vender publicidad con dicha información.
* Usted entiende y acepta que los datos proporcionados por nuestro API pueden contener errores y omisiones.

_Restricciones en el uso de la API sourceAFRICA no se aplican a las organizaciones participantes que trabajan con documentos cargados por sus propios usuarios. Nos reservamos el derecho de modificar estas directrices. Si usted viola el espíritu de estos términos, sobre todo si se utiliza la API para acceder y reimprimir documentos que usted o su sala de redacción no contribuyeron de forma sistemática, esperar ser bloqueados sin previo aviso._

# Métodos de Documento

@@ -58,7 +47,7 @@ mentions | incluyen las menciones destacadas de la frase de búsqueda |

### Ejemplo

/api/search.json?q=obama&page=2
/api/search.json?q=zuma&page=2
<div class="api_search_form">
<p>
Utilice el campo de búsqueda de abajo para intentar consultas y ver como es el JSON resultante.
@@ -49,6 +49,6 @@
<a href="/privacy">Privacy Policy</a>
</div>

<p style="text-align:center;">Brought to you by <a href="http://investigativecenters.org" target="_blank">ANCIR</a> and <a href="http://www.codeforafrica.org" target="_blank">Code for Africa</a> using <a href="https://github.com/documentcloud/documentcloud" target="_blank">DocumentCloud</a>.</p>
<p style="text-align:center;">Brought to you by <a href="https://investigativecenters.org" target="_blank">ANCIR</a> and <a href="https://codeforafrica.org" target="_blank">Code for Africa</a> using <a href="https://github.com/documentcloud/documentcloud" target="_blank">DocumentCloud</a>.</p>

</div>

0 comments on commit d4b2a93

Please sign in to comment.
You can’t perform that action at this time.