namespace :search do
desc 'Generate the files needed for search functionality' task :init do puts 'Creating search data json file...' mkdir_p 'assets/js' touch 'assets/js/zzzz-search-data.json' puts 'Done.' puts 'Generating content...' File.open('assets/js/zzzz-search-data.json', 'w') do |f| f.puts '---
permalink: /assets/js/search-data.json
{
{%- assign i = 0 -%} {% for page in site.html_pages %} {%- if page.title and page.search_exclude != true -%} {%- assign page_content = page.content -%} {%- assign heading_level = site.search.heading_level | default: 2 -%} {%- for j in (2..heading_level) -%} {%- assign tag = \'<h\' | append: j -%} {%- assign closing_tag = \'</h\' | append: j -%} {%- assign page_content = page_content | replace: tag, \'<h1\' | replace: closing_tag, \'</h1\' -%} {%- endfor -%} {%- assign parts = page_content | split: \'<h1\' -%} {%- assign title_found = false -%} {% for part in parts offset: 1 %} {%- assign titleAndContent = part | split: \'</h1>\' -%} {%- assign title = titleAndContent[0] | replace_first: \'>\', \'<h1>\' | split: \'<h1>\' -%} {%- assign title = title[1] | strip_html -%} {%- assign content = titleAndContent[1] -%} {%- assign url = page.url -%} {%- if title == page.title and parts[0] == \'\' -%} {%- assign title_found = true -%} {%- else -%} {%- assign id = titleAndContent[0] -%} {%- assign id = id | split: \'id="\' -%} {%- if id.size == 2 -%} {%- assign id = id[1] -%} {%- assign id = id | split: \'"\' -%} {%- assign id = id[0] -%} {%- capture url -%}{{ url | append: \'#\' | append: id }}{%- endcapture -%} {%- endif -%} {%- endif -%} {%- unless i == 0 -%},{%- endunless -%} "{{ i }}": { "doc": {{ page.title | jsonify }}, "title": {{ title | jsonify }}, "hpath": {{ page.hpath | jsonify }}, "content": {{ content | replace: \'</h\', \' . </h\' | replace: \'<hr\', \' . <hr\' | replace: \'</p\', \' . </p\' | replace: \'<ul\', \' . <ul\' | replace: \'</ul\', \' . </ul\' | replace: \'<ol\', \' . <ol\' | replace: \'</ol\', \' . </ol\' | replace: \'</tr\', \' . </tr\' | replace: \'<li\', \' | <li\' | replace: \'</li\', \' | </li\' | replace: \'</td\', \' | </td\' | replace: \'<td\', \' | <td\' | replace: \'</th\', \' | </th\' | replace: \'<th\', \' | <th\' | strip_html | remove: \'Table of contents\' | normalize_whitespace | replace: \'. . .\', \'.\' | replace: \'. .\', \'.\' | replace: \'| |\', \'|\' | append: \' \' | jsonify }}, "url": "{{ url | absolute_url }}", "relUrl": "{{ url }}" } {%- assign i = i | plus: 1 -%} {%- endfor -%} {%- unless title_found -%} {%- unless i == 0 -%},{%- endunless -%} "{{ i }}": { "doc": {{ page.title | jsonify }}, "title": {{ page.title | jsonify }}, "hpath": {{ page.hpath | jsonify }}, "content": {{ parts[0] | replace: \'</h\', \' . </h\' | replace: \'<hr\', \' . <hr\' | replace: \'</p\', \' . </p\' | replace: \'<ul\', \' . <ul\' | replace: \'</ul\', \' . </ul\' | replace: \'<ol\', \' . <ol\' | replace: \'</ol\', \' . </ol\' | replace: \'</tr\', \' . </tr\' | replace: \'<li\', \' | <li\' | replace: \'</li\', \' | </li\' | replace: \'</td\', \' | </td\' | replace: \'<td\', \' | <td\' | replace: \'</th\', \' | </th\' | replace: \'<th\', \' | <th\' | strip_html | remove: \'Table of contents\' | normalize_whitespace | replace: \'. . .\', \'.\' | replace: \'. .\', \'.\' | replace: \'| |\', \'|\' | append: \' \' | jsonify }}, "url": "{{ page.url | absolute_url }}", "relUrl": "{{ page.url }}" } {%- assign i = i | plus: 1 -%} {%- endunless -%} {%- endif -%} {% endfor %}
}'
end puts 'Done.' end
end