From ae4a8810f8427b779b270fbfc20c32104a5897a2 Mon Sep 17 00:00:00 2001 From: Pixelastic Date: Tue, 22 Dec 2015 21:46:10 +0100 Subject: [PATCH 1/4] test(getSuggestionTemplate): Add tests for the suggestion template --- src/lib/DocSearch.js | 4 +-- test/DocSearch-test.js | 75 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/src/lib/DocSearch.js b/src/lib/DocSearch.js index 7017b765..a1bdf050 100644 --- a/src/lib/DocSearch.js +++ b/src/lib/DocSearch.js @@ -54,7 +54,7 @@ class DocSearch { this.autocomplete = autocomplete(this.input, autocompleteOptions, [{ source: this.getAutocompleteSource(), templates: { - suggestion: this.getSuggestionTemplate(), + suggestion: DocSearch.getSuggestionTemplate(), footer: templates.footer } }]); @@ -154,7 +154,7 @@ class DocSearch { }); } - getSuggestionTemplate() { + static getSuggestionTemplate() { const template = Hogan.compile(templates.suggestion); return (suggestion) => { return template.render(suggestion); diff --git a/test/DocSearch-test.js b/test/DocSearch-test.js index 11b6a62a..7b3a9649 100644 --- a/test/DocSearch-test.js +++ b/test/DocSearch-test.js @@ -686,5 +686,80 @@ describe('DocSearch', () => { // Then expect(actual[0].text).toEqual('…lorem foo bar ipsum.'); }); + it('should add the anchor to the url if one is set', () => { + // Given + let input = [{ + hierarchy: { + lvl0: 'Ruby', + lvl1: 'API', + lvl2: null, + lvl3: null, + lvl4: null, + lvl5: null + }, + content: 'foo bar', + url: 'http://foo.bar/', + anchor: 'anchor' + }]; + + // When + let actual = DocSearch.formatHits(input); + + // Then + expect(actual[0].url).toEqual('http://foo.bar/#anchor'); + }); + }); + + describe('getSuggestionTemplate', () => { + beforeEach(() => { + let templates = { + suggestion: '
' + }; + DocSearch.__Rewire__('templates', templates); + }); + afterEach(() => { + DocSearch.__ResetDependency__('templates'); + }); + it('should return a function', () => { + // Given + + // When + let actual = DocSearch.getSuggestionTemplate(); + + // Then + expect(actual).toBeA('function'); + }); + describe('returned function', () => { + let Hogan; + let render; + beforeEach(() => { + render = sinon.spy(); + Hogan = { + compile: sinon.stub().returns({render}) + }; + DocSearch.__Rewire__('Hogan', Hogan); + }); + it('should compile the suggestion template', () => { + // Given + + // When + DocSearch.getSuggestionTemplate(); + + // Then + expect(Hogan.compile.calledOnce).toBe(true); + expect(Hogan.compile.calledWith('
')).toBe(true); + }); + it('should call render on a Hogan template', () => { + // Given + let actual = DocSearch.getSuggestionTemplate(); + + // When + actual('foo'); + + // Then + expect(render.calledOnce).toBe(true); + expect(render.calledWith('foo')).toBe(true); + }); + }); }); }); From e6159578407727edd6f175dfae6d236790de19b2 Mon Sep 17 00:00:00 2001 From: Pixelastic Date: Tue, 22 Dec 2015 22:11:25 +0100 Subject: [PATCH 2/4] docs(readme): Add info about styling and local dev I've added a screencast in the readme, a screenshot of the default colorscheme and a copy-paste of the CSS customization example. The diff of the README is all red because I used [formd](http://drbunsen.github.io/formd/) on the file to make the links more readable (it simply uses reference instead of inlining). --- README.md | 124 ++++++++++++++++++++++++++----- docs/img/default-colorscheme.png | Bin 0 -> 65303 bytes 2 files changed, 105 insertions(+), 19 deletions(-) create mode 100644 docs/img/default-colorscheme.png diff --git a/README.md b/README.md index 89500394..3c5ce3a4 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,25 @@ # DocSearch -[![build status](https://travis-ci.org/algolia/docsearch.svg?branch=master)](http://travis-ci.org/algolia/docsearch) -[![NPM version](https://badge.fury.io/js/docsearch.js.svg)](http://badge.fury.io/js/docsearch.js) +The easiest way to add search to your documentation. For free. -We've created the fastest, easiest way to search within documentation. Check out our [website](https://community.algolia.com/docsearch/) to add an outstanding search to your documentation. +[![build status][1]](http://travis-ci.org/algolia/docsearch) +[![NPM version][2]](http://badge.fury.io/js/docsearch.js) + +Check out our [website][3] to add an outstanding search to your documentation. + +![Eslint][4] ## Table of Contents -- [Introduction](#introduction) -- [Setup](#setup) -- [Customization](#customization) -- [Development workflow](#development-workflow) - - [Local example](#local-example) - - [Documentation website](#documentation-website) - - [MacOS](#macos) +- [Introduction][5] +- [Setup][6] +- [Customization][7] +- [Development workflow][8] + - [Local example][9] + - [Documentation website][10] + - [MacOS][11] @@ -27,7 +31,7 @@ We're scratching our own itch here. As developers, we spend a lot of time readin Not blaming anyone here. Building a good search for a documentation is a complex challenge. We happen to have a lot of experience doing that, and we want to share it with the world. For free. -Just submit the form on the [website](https://community.algolia.com/docsearch/) and we'll get back to you with what you need to integrate your new search into your website. +Just submit the form on the [website][12] and we'll get back to you with what you need to integrate your new search into your website. 1. We'll crawl your documentation pages, 2. We'll configure your search experience, @@ -51,20 +55,67 @@ docSearch({ ## Customization -To customize the look & feel of the dropdown menu, you can either: +The default colorscheme is blue and gray: - * edit the color [variables](https://github.com/algolia/docsearch/blob/master/src/styles/_variables.scss) and rebuild this project CSS (`npm run build:css`), - * or override the colors like we did in [dev/docsearch-styling.css](https://github.com/algolia/docsearch/blob/master/dev/docsearch-styling.css). +![Default colorscheme][13] + +To update the colors to suit your website, you just need to override a few +colors. Here is an example of a CSS file that you can use as a basis and that +sets white and purples colors. + +```css +/* Bottom border of each suggestion */ +.algolia-docsearch-suggestion { + border-bottom-color: #3A3DD1; +} +/* Main category headers */ +.algolia-docsearch-suggestion--category-header { + background-color: #4B54DE; +} +/* Highlighted search terms */ +.algolia-docsearch-suggestion--highlight { + color: #3A33D1; +} +/* Highligted search terms in the main category headers */ +.algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight { + background-color: #4D47D5; +} +/* Currently selected suggestion */ +.aa-cursor .algolia-docsearch-suggestion--content { + color: #272296; +} +.aa-cursor .algolia-docsearch-suggestion { + background: #EBEBFB; +} + +/* For bigger screens, when displaying results in two columns */ +@media (min-width: 768px) { + /* Bottom border of each suggestion */ + .algolia-docsearch-suggestion { + border-bottom-color: #7671df; + } + /* Left column, with secondary category header */ + .algolia-docsearch-suggestion--subcategory-column { + border-right-color: #7671df; + background-color: #F2F2FF; + color: #4E4726; + } +} +``` + +Advanced users can also clone the repository, edit the [_variables.scss][14] +file and re-build the CSS file using `npm run build:css`. + ## Development workflow ### Local example -We use a simple documentation example website as a way to develop the docsearch.js library. +We use a simple documentation example website as a way to develop the docsearch library. Requirements: -- [Node.js](https://nodejs.org/en/) +- [Node.js][17] - npm@2 ```sh @@ -72,17 +123,30 @@ npm run dev # open http://localhost:8080 ``` +### Local build + +- `npm run build:js:` will transpile all the JavaScript files inside `./dist`. + We build a bundled (and bundled + minified) version for CDNs and another one + for npm +- `npm run build:css` will convert the SCSS to CSS, along with sourcemaps and + minified versions +- `npm run build:docs` will create the `./docs/documentation.md` file from the + `README.md` file, to be displayed on the website. +- `npm run build` will run all three previous commands + ### Documentation website -This is the [Jekyll](https://jekyllrb.com/) instance running at [https://community.algolia.com/docsearch](https://community.algolia.com/docsearch). +This is the [Jekyll][18] instance running at [https://community.algolia.com/docsearch](https://community.algolia.com/docsearch). Requirements: -- [Ruby](https://www.ruby-lang.org/en/) -- [Bundler](http://bundler.io/) +- [Ruby][19] +- [Bundler][20] ```sh npm run dev:docs # open http://localhost:4000/docsearch/ +# Note that it also implicitly starts another server on localhost:8080, to load +the bundled JavaScript from ``` ### MacOS @@ -92,3 +156,25 @@ If you are using `brew` and you had `brew install openssl`, you may need to conf ```sh bundle config build.eventmachine --with-cppflags=-I$(brew --prefix openssl)/include ``` + + +[1]: https://travis-ci.org/algolia/docsearch.svg?branch=master +[2]: https://badge.fury.io/js/docsearch.js.svg +[3]: https://community.algolia.com/docsearch/ +[4]: ./docs/img/showcase/example-eslint.gif +[5]: #introduction +[6]: #setup +[7]: #customization +[8]: #development-workflow +[9]: #local-example +[10]: #documentation-website +[11]: #macos +[12]: https://community.algolia.com/docsearch/ +[13]: ./docs/img/default-colorscheme.png +[14]: https://github.com/algolia/docsearch/blob/master/src/styles/_variables.scss +[15]: https://github.com/algolia/docsearch/blob/master/dev/docsearch-styling.css +[16]: https://github.com/algolia/docsearch/blob/master/src/styles/_variables.scss +[17]: https://nodejs.org/en/ +[18]: https://jekyllrb.com/ +[19]: https://www.ruby-lang.org/en/ +[20]: http://bundler.io/ diff --git a/docs/img/default-colorscheme.png b/docs/img/default-colorscheme.png new file mode 100644 index 0000000000000000000000000000000000000000..5bac04fdb05987fa3bfc404537684424b7beff26 GIT binary patch literal 65303 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 o=l@<4&oa`1*U Date: Tue, 22 Dec 2015 12:27:54 +0100 Subject: [PATCH 3/4] docs(readme): Add badges This adds badges to the readme, including the coverage one (through coveralls). --- .coveralls.yml | 1 + .eslintignore | 1 + .gitignore | 1 + .travis.yml | 1 + README.md | 18 +++++++++++++++--- package.json | 4 ++++ scripts/test-ci | 4 ++-- scripts/test-coverage | 19 +++++++++++++++++++ scripts/travis-after-script | 5 +++++ 9 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 .coveralls.yml create mode 100755 scripts/test-coverage create mode 100755 scripts/travis-after-script diff --git a/.coveralls.yml b/.coveralls.yml new file mode 100644 index 00000000..91600595 --- /dev/null +++ b/.coveralls.yml @@ -0,0 +1 @@ +service_name: travis-ci diff --git a/.eslintignore b/.eslintignore index 5c53e32e..a3c063fc 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ +coverage/ dist/ docs/ diff --git a/.gitignore b/.gitignore index e3f8c0c4..8bad676a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store +coverage/ node_modules/ dist/ npm-debug.log* diff --git a/.travis.yml b/.travis.yml index c7790e9d..3af04174 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ before_install: before_cache: npm prune install: npm install script: ./scripts/test-ci +after_script: ./scripts/travis-after-script branches: only: - master diff --git a/README.md b/README.md index 3c5ce3a4..0117308d 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,23 @@ The easiest way to add search to your documentation. For free. -[![build status][1]](http://travis-ci.org/algolia/docsearch) -[![NPM version][2]](http://badge.fury.io/js/docsearch.js) - Check out our [website][3] to add an outstanding search to your documentation. +[![Version][version-svg]][package-url] [![Build Status][travis-svg]][travis-url] [![Coverage Status][coveralls-svg]][coveralls-url] [![License][license-image]][license-url] [![Downloads][downloads-image]][downloads-url] + +[version-svg]: https://img.shields.io/npm/v/docsearch.js.svg?style=flat-square +[package-url]: https://npmjs.org/package/docsearch.js +[travis-svg]: https://img.shields.io/travis/algolia/docsearch/master.svg?style=flat-square +[travis-url]: https://travis-ci.org/algolia/docsearch +[coveralls-svg]: https://img.shields.io/coveralls/algolia/docsearch/master.svg?style=flat-square +[coveralls-url]: https://coveralls.io/github/algolia/docsearch?branch=docs%2Fbadges +[license-image]: http://img.shields.io/badge/license-MIT-green.svg?style=flat-square +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/docsearch.js.svg?style=flat-square +[downloads-url]: http://npm-stat.com/charts.html?package=docsearch.js +[docsearch-website]: https://community.algolia.com/docsearch/?utm_medium=social-owned&utm_source=GitHub&utm_campaign=docsearch%20repository +[docsearch-website-docs]: https://community.algolia.com/docsearch/documentation/?utm_medium=social-owned&utm_source=GitHub&utm_campaign=docsearch%20repository + ![Eslint][4] diff --git a/package.json b/package.json index 5c9d7cca..c59bf327 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "lint": "eslint .", "test": "BABEL_ENV=test mocha --reporter dot ./test/helpers.js ./test/*-test.js", "test:watch": "BABEL_ENV=test mocha --reporter min --watch ./test/helpers.js ./test/*-test.js", + "test:coverage": "./scripts/test-coverage", "gh-pages": "./scripts/gh-pages" }, "author": "Algolia (https://github.com/algolia/)", @@ -27,9 +28,11 @@ "babel": "^5.8.29", "babel-core": "^5.8.29", "babel-eslint": "^4.1.3", + "babel-istanbul": "^0.5.9", "babel-loader": "^5.3.2", "babel-plugin-rewire": "^0.1.22", "conventional-changelog": "^0.5.1", + "coveralls": "^2.11.6", "cssnano": "^3.4.0", "doctoc": "^0.15.0", "eslint": "^1.6.0", @@ -43,6 +46,7 @@ "json": "^9.0.3", "mocha": "^2.3.4", "mocha-jsdom": "^1.0.0", + "mocha-lcov-reporter": "^1.0.0", "mversion": "^1.10.1", "nd": "^1.2.0", "node-sass": "^3.4.2", diff --git a/scripts/test-ci b/scripts/test-ci index 40003aab..8cd42e53 100755 --- a/scripts/test-ci +++ b/scripts/test-ci @@ -3,12 +3,12 @@ set -ev # exit when error ./scripts/validate-pr-done-on-develop -npm test +npm run test:coverage npm prune npm run shrinkwrap --dev NODE_ENV=production npm run build ./scripts/validate-commit-msgs -if [ $TRAVIS_PULL_REQUEST == 'false' ] && [ $TRAVIS_BRANCH == 'master' ]; then +if [ "$TRAVIS_PULL_REQUEST" == 'false' ] && [ "$TRAVIS_BRANCH" == 'master' ]; then ./scripts/finish-release fi diff --git a/scripts/test-coverage b/scripts/test-coverage new file mode 100755 index 00000000..f80edff1 --- /dev/null +++ b/scripts/test-coverage @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# Will run the test and export the coverage information in ./coverage +# This file will then be read by Travis to push it to Coveralls +# +# The command is long and was quite hard to write correctly. +# We need babel-istanbul and not instanbul +# We need the _mocha and not mocha +# We need to use full path for each binaries +# We need to run everything through babel-node + +npm_bin="$(npm bin)" +babel_istanbul_bin="${npm_bin}/babel-istanbul" +mocha_bin="${npm_bin}/_mocha" + +BABEL_ENV=test \ + babel-node "$babel_istanbul_bin" cover "$mocha_bin" \ + --report lcov -- \ + -R spec --reporter dot \ + ./test/helpers.js ./test/*-test.js diff --git a/scripts/travis-after-script b/scripts/travis-after-script new file mode 100755 index 00000000..0de1d0f5 --- /dev/null +++ b/scripts/travis-after-script @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Will push coverage info to coveralls. Should be ran from Travis, in the +# `after_script` section + +$(npm bin)/coveralls < ./coverage/lcov.info From 21ac8c2b30c81231d6268058c265ae1c1f6aad4a Mon Sep 17 00:00:00 2001 From: Pixelastic Date: Wed, 23 Dec 2015 11:16:08 +0100 Subject: [PATCH 4/4] docs(index): Update wording --- docs/index.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.haml b/docs/index.haml index 02e4689c..b14fd30e 100644 --- a/docs/index.haml +++ b/docs/index.haml @@ -40,8 +40,8 @@ layout: default .row .col-sm-10.col-sm-offset-1 %h2.page-section-title Why DocSearch? - %p We’re scratching our own itch here. As developers, we spend a lot of time reading documentation, and it isn’t always easy to find the information we need. - %p Not blaming anyone here. Building a good search for a documentation is a complex challenge. We happen to have a lot of experience doing that, and we want to share it with the world. For free. + %p We’re kind of scratching our own itch here. As developers, we spend a lot of time reading documentation, and it isn’t always easy to find the information we need. + %p No one's to blame, building a good search for a documentation is a complex challenge. We just happen to have a lot of experience doing that, and we want to share it with the world. For free. #section_examples.page-section.page-section-dark .container .row