Skip to content

Commit 1bbd569

Browse files
committed
v0.11.0
<a name="0.11.0"></a> # 0.11.0 (2015-11-10) ### Bug Fixes * add missing 'use strict's ([397294e](397294e)) * add title for brands ([2e67c47](2e67c47)) * allow adding css classes to the searchBox wrapper ([6ef0b0b](6ef0b0b)), closes [#22](#22) [#24](#24) * allow html in pagination labels ([4147358](4147358)), closes [#36](#36) * Allow not specifying `cssClass` on index selector ([4e9324f](4e9324f)) * allow passing only one key of transformData as an object ([e0ce89f](e0ce89f)) * Handle plural forms in template ([1bfd109](1bfd109)) * **transformData:** add an explicit error message ([94c53d3](94c53d3)), closes [#212](#212) * cap the number of page displayed ([bc6c2e2](bc6c2e2)) * change no results message ([80acf33](80acf33)) * do not use memoize & co ([32c64e6](32c64e6)) * expose main dist/ instead of index.js ([98bd889](98bd889)) * Fix merge issues ([3b5e8f4](3b5e8f4)) * fixed hits display height, no more scroll jumps ([6b4319d](6b4319d)) * folder requires uses a trailing / to ease recognition of /index.js ([3ef55a3](3ef55a3)) * Handle zero, one and many ([5434ca2](5434ca2)) * hits widget should allow hitsPerPage configuration, pagination should not ([a2221a8](a2221a8)) * instantSearch => instantsearch ([bdcbf18](bdcbf18)), closes [#7](#7) * **api:** rename hideContainerWhenNoResults to autoHideContainer ([3f64bef](3f64bef)), closes [#407](#407) * **autohide:** Rename attribute to `hideContainerWhenNoResults` ([ecb6756](ecb6756)), closes [#325](#325) * **bem:** Make scss mixins actually follow BEM ([fcfb408](fcfb408)) * **core:** recursively merge arrays in searchParameters ([dbadcdb](dbadcdb)), closes [#80](#80) * **cssClasses:** Fixed duplication of classNames ([e193f45](e193f45)), closes [#388](#388) * **doc:** add doctype were missing ([86a18aa](86a18aa)) * **doc:** All wigdets in docs are not anymore linked together #fix #446 ([4361320](4361320)), closes [#446](#446) * **doc:** bolder font for the navigation ([64f6d56](64f6d56)) * **doc:** ensure the documentation content doesn't overflow ([1e28a4e](1e28a4e)), closes [#444](#444) * **doc:** new color scheme ([deccc17](deccc17)) * **doc:** only show a scrollbar when needed ([f2d955b](f2d955b)) * **example:** Example searchbox ([cdad6c7](cdad6c7)), closes [#157](#157) * **generateRanges:** avoid any infinite loop. Fix #351 ([4965222](4965222)), closes [#351](#351) * **hideIfEmpty:** should be hideWhenNoResults ([21877a0](21877a0)) * **hierarchical:** setPage 0 when toggling ([a976539](a976539)), closes [#371](#371) * **hierarchicalFacets:** use a real attribute name for the hierarchicalFacet name ([0d2a455](0d2a455)) * **hierarchicalMenu:** handle cases where no results after a search ([0a1d0ac](0a1d0ac)), closes [#385](#385) * **hits:** Fix warning about unique key in iterator ([0c9468c](0c9468c)) * **Hits:** handle the display when there is no result ([544ff5c](544ff5c)) * **hitsPerPageSelector:** Be more tolerant in options ([e14a344](e14a344)) * **hitsPerPageSelector:** Issue when state did not have a `hitsPerPage` ([dc9371c](dc9371c)) * **index-selector:** Fix tests passing with incorrect parameters ([8fc31b9](8fc31b9)) * **index-selector:** Update usage and error ([a7e4c10](a7e4c10)) * **InstantSearch:** throw error when init and render are not defined. Fixes #499 ([2830cd3](2830cd3)), closes [#499](#499) * **jsdoc:** use babel-node ([453dc21](453dc21)) * **live-doc:** adds a start at a responsive display ([c83967e](c83967e)) * **live-doc:** adds navigation menu for smaller screens ([a6bb71e](a6bb71e)) * **live-doc:** fixes flow for texts ([3855071](3855071)) * **live-doc:** generates missing ul ([b43e6e2](b43e6e2)) * **live-doc:** Momentum scroll for iPhone ([60a36ff](60a36ff)) * **live-doc:** move scrollbars, removes useless ones ([548ae5f](548ae5f)) * Pass nbHits, hitsPerPage, nbPages and page to Stats widget ([deefd23](deefd23)), closes [#106](#106) * **live-doc:** moves octocat link to top. Removes stackOverflow ([8ff6a79](8ff6a79)) * **live-doc:** Moves version in the main content ([27731c3](27731c3)) * **live-doc:** uses only h4 and fixes style of h4 (mobile) ([0fdd2d0](0fdd2d0)) * **live-reload:** integrates the links into the menu flow ([c118051](c118051)) * **menu:** send an empty array values when no values ([12cd7dc](12cd7dc)), closes [#107](#107) * **middle-click:** Allow middle click on links ([a7601c0](a7601c0)) * **multipleChoiceList:** `limit` should be pure JS ([68bdf81](68bdf81)) * **numeric widgets:** synchronizes rounded value between widgets ([b314160](b314160)) * **numeric-refinement:** Replace Array.find with lodash find/includes ([b3e815c](b3e815c)) * **numerical widgets:** s/facetName/attributeName ([f209f5d](f209f5d)), closes [#431](#431) * **onClick:** do not replace the browser's behavior on special clicks ([8562d49](8562d49)), closes [#278](#278) * **package.json:** typo in repository ([33cf196](33cf196)) * **pagination:** do not generate the URL for disabled pages. ([e5d78ab](e5d78ab)), closes [#282](#282) * **pagination:** handle cases where maxPages is low ([d3c9959](d3c9959)), closes [#100](#100) * **pagination:** missing showFirstLast attribute when instanciating ([28fa0ae](28fa0ae)) * **poweredBy:** Extract its hiding capabilities ([f5fa9ee](f5fa9ee)), closes [#189](#189) * **price-ranges:** makes it uses same operator as the slider ([ad6f5c2](ad6f5c2)) * **priceRanges:** fixed 'active' CSS class not using BEM ([ec0d1b1](ec0d1b1)) * **priceRanges:** plug the URL computation. Fix #354 ([fbf4022](fbf4022)), closes [#354](#354) * **range-slider:** fixes bound definition ([e15c9b7](e15c9b7)) * **range-slider:** Use lodash find instead of Array.prototype.find ([056153c](056153c)) * **rangeSlider:** refinements cleanuo ([16c132c](16c132c)), closes [#147](#147) * **rangeSlider:** restore wrongly removed state nesting ([3ed3d39](3ed3d39)) * **React:** require React in order for JSX to work in widgets ([64d6011](64d6011)) * **react-nouislider:** upgrade react-nouislider to avoid mutating props ([1b7cd1d](1b7cd1d)) * **refinementList:** ensure the key reflects the underlying state ([b048f0b](b048f0b)), closes [#398](#398) * **refinementList:** Remove `singleRefine` attribute ([db73e38](db73e38)), closes [#220](#220) * **refinementList:** singleRefine is not dependant from operator ([d29dff6](d29dff6)) * **RefinementList:** click on child should not click on parent ([d476da2](d476da2)), closes [#191](#191) * **search-box:** Fix #137 autofocus must be configurable ([51f01be](51f01be)), closes [#137](#137) * **searchBox:** allow searchBox to reuse an `<input>` ([e820cc3](e820cc3)) * **searchBox:** do not update input's value if focused ([0e85f0d](0e85f0d)), closes [#163](#163) * **searchBox:** handling pasting event with contextual menu. ([a172458](a172458)), closes [#467](#467) * **searchBox:** Use `hasAttribute` instead of `getAttribute` ([a122af9](a122af9)) * **SearchBox:** Missing poweredBy in the not focused SearchBox ([ef695ff](ef695ff)) * **selector:** makes component as uncontrolled component ([1dda12a](1dda12a)) * **slider:** allow handles to reach the real start and end of the slider ([03ed3f5](03ed3f5)) * **slider:** fix tap event throwing ([d906d3e](d906d3e)), closes [#120](#120) * **slider:** fixed `pip` propTypes constraint ([c77b7f4](c77b7f4)) * **slider:** hide slider if when no hits/matches ([31e4a80](31e4a80)), closes [#107](#107) * **Slider:** cssClasses.body handled by headerFooter HOC ([d8d20b2](d8d20b2)) * **stats:** Move CSS classes definition to widget from component ([99073cd](99073cd)) * **template:** throw when no way to deal with the template type ([f5d151a](f5d151a)) * **template:** transformData checks too strict ([609f123](609f123)), closes [#347](#347) * **Template:** add default value for template ([4291014](4291014)) * **templatesConfig:** helpers are now following Mustache spec ([8f3502f](8f3502f)) * **transformData:** this test is not needed, already covered by Template ([36e5b9c](36e5b9c)) * **url-sync:** handle both hash and query parameter fix #165 ([8d84de6](8d84de6)), closes [#165](#165) * **url-sync:** make input not to lose focus ([63488d3](63488d3)) * **validate-commit:** Update the regexp ([96b93ba](96b93ba)) * **website:** defered doc scripts ([0c1324f](0c1324f)) * **website:** doc layout responsive ([a4dc894](a4dc894)) * **website:** fix images path ([a3f62eb](a3f62eb)) * **website:** fixed space overlay color animation ([200b8a7](200b8a7)) * **website:** Fixes & responsive stuff for doc ([7a8f920](7a8f920)) * **website:** footer markup ([95364a1](95364a1)) * **website:** home.js lint ([b70e06e](b70e06e)) * **website:** icon-theme didn't like svgo (to fix) ([38d84af](38d84af)) * **website:** image alt ([30cca29](30cca29)) * **website:** jsdelivr for every scripts ([06591d4](06591d4)) * **website:** Nav Icon + logo ([c1f419c](c1f419c)) * **website:** only load what's needed in bootstrap ([4843474](4843474)) * Use `appId` and `apiKey` keys ([5716552](5716552)) * **website:** removed animation debug ([01ac079](01ac079)) * Keep `en-EN` as demo default ([6c2a043](6c2a043)) * More explicit error message when DOM selector is invalid ([d36a2ad](d36a2ad)), closes [#105](#105) * no more needed to override css class here ([2b314c0](2b314c0)) * no need for a flag in refinementList refine() ([9b8fa3f](9b8fa3f)) * no state needed for Hogan component ([d8a3a4c](d8a3a4c)) * react-nouislider will live in our repo for now ([49520f1](49520f1)) * reduce the dependency between REACT components and helper ([9309a4c](9309a4c)) * Remove `htmlAttribute` in favor of `cssClass` ([59a0bc5](59a0bc5)) * remove data-role from searchBox ([bdfe6d3](bdfe6d3)) * remove linebreak ([e5f1720](e5f1720)) * rename BEM root algolia-magic to as ([5f3329d](5f3329d)), closes [#24](#24) * rename results component to hits ([7b9eb25](7b9eb25)) * Set `cssClass` as optional in documentation ([e7ac953](e7ac953)) * set visibility:hidden by default for uneeded pagination links ([19fddba](19fddba)), closes [#37](#37) * strict container check ([ec23e34](ec23e34)) * switch back to divs, rendering glitch ([b44943a](b44943a)) * toggleRefine was no more working ([e6e35df](e6e35df)) * update algoliasearch and algoliasearch-helper ([e944d12](e944d12)) * upgrade all libs, switch to ^ dependencies ([79d0a64](79d0a64)) * use cssClass instead of inputClass or addClass ([6826bd6](6826bd6)) * use toggleRefinement ([b497b02](b497b02)) * widgets.searchbox => widgets.searchBox ([6c49e18](6c49e18)) * wrap in an li the checkbox ([dfe629d](dfe629d)) * **website:** space bg fadeIn ([5e09844](5e09844)) * **website:** unclosed content block ([d42dc3e](d42dc3e)) ### Features * Add `htmlAttributes` to indexSelector ([ceed8ae](ceed8ae)) * Add stats widget ([8290542](8290542)) * Add support for `className` ([898a2fa](898a2fa)) * Add Toggle example ([d801807](d801807)) * Check that currentIndex is in indices list ([494dbe9](494dbe9)) * example now uses the instant_search index ([63b4b50](63b4b50)) * expose instantsearch.version ([ae5ef94](ae5ef94)) * expose instantsearch() as main init method ([27baf55](27baf55)), closes [#6](#6) * formatNumber in Stats widget ([cf6a83c](cf6a83c)) * hierarchicalWidget ([1facd9d](1facd9d)) * **url-sync:** Add `is_v` version to url ([9f597a0](9f597a0)), closes [#70](#70) * indexSelector widget ([b60ed36](b60ed36)) * multipleChoiceList => refinementList ([423542d](423542d)), closes [#64](#64) * multipleChoiceList first iteration ([bc91bfb](bc91bfb)) * MutlipleChoiceList second pass ([ac74dfb](ac74dfb)) * pagination component ([fad2720](fad2720)) * pimp the npm run dev example using instant search data ([ea666ad](ea666ad)), closes [#20](#20) * **bem:** Add BEM to the index-selector widget ([564da51](564da51)) * **bem:** Add BEM-styling to the Stats widget ([92cebeb](92cebeb)) * **build:** Add minified CSS theme version to build ([77f0640](77f0640)) * **build:** allow building React based custom widgets ([cfbbfe4](cfbbfe4)), closes [#373](#373) * **core/lifecycle-event:** emits `render` when render ([7f03ae9](7f03ae9)) * **es7:** Enable `es7.objectRestSpread` ([fc2fbc4](fc2fbc4)) * **examples:** try examples instead of themes ([bedffce](bedffce)) * **headerFooter:** Add BEM classes to header and footer ([9e9d438](9e9d438)), closes [#259](#259) * **headerFooter:** Only add markup if a template is defined ([7a2d22d](7a2d22d)), closes [#370](#370) * **hierarchical-menu:** Add BEM classes ([58ec191](58ec191)) * **hierarchical-menu:** Add CSS classes dependent on the depth ([1256ea8](1256ea8)) * **hierarchicalMenu:** Adding indentation with default theme ([34885d2](34885d2)) * **hits:** Add BEM styling to the `hits` widget ([6681960](6681960)) * **hits-per-page-selector:** New widget to change hitsPerPage ([a3e0f78](a3e0f78)), closes [#331](#331) * **menu:** Add BEM classes ([467f49e](467f49e)) * **menu:** first widget version ([a888143](a888143)) * **menu,refinementList:** add header/item/footer templating solution ([58275dc](58275dc)), closes [#101](#101) * **numericRefinementList:** create numericRefinementList widget using refinementList component ([a29e9c7](a29e9c7)) * **pagination:** add `scrollTo` option ([e6cd621](e6cd621)), closes [#73](#73) * **pagination:** add hitsPerPage and maxPages options ([7e558ce](7e558ce)) * **priceRanges:** Add BEM classes and tests ([ad58d7a](ad58d7a)), closes [#387](#387) * **priceRanges:** new Amazon-style price ranges widget ([e5fe344](e5fe344)) * **priceRanges:** polish priceRanges widget ([0994e6f](0994e6f)) * **rangeSlider:** add headerFooter decorator ([19090c3](19090c3)) * **refinement-list:** Add BEM naming ([b09b830](b09b830)) * **refinementlist:** Move default templates to its own file ([cb6fa16](cb6fa16)) * **refinementList:** Limits improvement ([ebcc8a9](ebcc8a9)) * **searchbox:** Make the searchBox BEMish ([db8bd60](db8bd60)) * **searchBox:** ability to be non-instant ([b3ef871](b3ef871)), closes [#458](#458) * **searchBox:** Add `wrapInput` option ([b327dbc](b327dbc)) * **searchBox:** add headerFooter decorator to the Component ([5974a88](5974a88)) * **searchBox:** add poweredBy option, disabled by default ([c9da165](c9da165)) * **slider:** allow overriding css classes from a user stylesheet ([a1e87dd](a1e87dd)) * **slider:** first iteration ([229bb02](229bb02)) * **slider:** second iteration ([885aff6](885aff6)) * **stats:** add query variable to the template ([75f457d](75f457d)) * **templatesConfig:** helpers and options transferred to Template ([456d781](456d781)), closes [#99](#99) * **theme:** Add `searchBox` widget to default theme ([def831f](def831f)) * **theme:** Add debug.css file ([ff8f2dc](ff8f2dc)), closes [#249](#249) * **theme:** Move `indexSelector` styling to default.css ([1841ef1](1841ef1)) * **theme:** Move all default css rules to `default.css` ([57c8c65](57c8c65)) * **toggle:** add headerFooter decorator ([8a70c7d](8a70c7d)) * **toggle:** Adding BEM class naming ([8730c97](8730c97)) * **toggle:** Allow custom on/off values ([9b6c2bf](9b6c2bf)), closes [#409](#409) * **transformData:** add to every widget using the Template component ([d080a03](d080a03)), closes [#116](#116) * **transformData:** refinementList + menu implementation ([0a0e36e](0a0e36e)) * Switch/Toggle widget ([3b2a450](3b2a450)) * Use `helpers.formatNumber` syntax instead of `_formatNumber` ([6207514](6207514)) * Warn users if we do not override `helpers` in templates ([a4199a5](a4199a5)) * **urls:** ability to create an URL from a set of params ([9ca8369](9ca8369)), closes [#372](#372) * **urlSync:** add urlSync widget ([50fc4ce](50fc4ce)) * **urlSync:** url generation for widget links. Fix #29 ([23dd505](23dd505)), closes [#29](#29) * **widgets:** auto hide some widgets ([187b4bd](187b4bd)) ### Performance Improvements * **hitsPerPageSelector:** Use the correct lodash function ([be9aea7](be9aea7)) ### BREAKING CHANGES * hierarchicalMenu: Hierarchical menu levels 1 and 2 now have a margin-left added in the default theme. * menu,refinementList: Removed from menu and refinementList: - rootClass => cssClasses.root - itemCLass => cssClasses.item - template => templates.item Added to menu and refinementList: - cssClasses{root,list,item} - templates{header,item,footer} - widget (container) is automatically hidden by default - hideWhenNoResults=true This was done to allow more templating solutions like discussed in #101. * numerical widgets: the priceRanges and rangeSlider widgets are now using `attributeName` instead of `facetName`. * priceRanges: `ais-price-ranges--range` are now named `ais-price-ranges--item` and are wrapped in a `ais-price-ranges--list`. I've moved the bottom form into it's own PriceRangesForm component, along with its own tests. I've fixed a minor typo where the component was internally named PriceRange (without the final __s__). I factorize some logic form the render in individual methods and manage to individually test them. This was not an easy task. I had to mock the default `render` (so it does nothing) before instanciating the component. Then, I was able to call each inner method individually. This requires to stub prototype methods in beforeEach, then restore them in afterEach. I've added a few helper methods, this can surely be simplified again but this gives nice granularity in testing. I've renamed the `range` items to `item` and wrapped them in a `list`. I've also added classes to all elements we add (`label`, `separator`, etc). I've removed the empty `span`s. * headerFooter: The `<div class="ais-header">` and `<div class="ais-footer">` markup is only added when a `templates.{header,footer}` is passed. * urls: the instantsearch.createURL method is now taking a simple JS object and not a SearchParameter instance anymore. * searchBox: The `input` used by the search-box widget is now wrapped in a `<div class="ais-search-box">` by default. This can be turned off with `wrapInput: false`. This PR is a bit long, I had to do some minor refactoring to keep the new code understandable. I simply split the large `init` method into calls to smaller methods. There is some vanilla JS DOM manipulation involved to handle all the possible cases: targeting an `input` or a `div`, adding or not the `poweredBy`, adding or not the wrapping div. Note that there is no `targetNode.insertAfter(newNode)` method, so I had to resort to the old trick of `parentNode.insertBefore(newNode, targetNode.nextSibling)`. * priceRanges: the `input-group` modifier has been renamed to `form` * autohide: Widget attribute is now named `hideContainerWhenNoResults` instead of `hideWhenNoResults` to be more explicit on what it is really doing. Also internally renamed the `autoHide` decorator to `autoHideContainer` * build: You should now include the `default.css` file in your page to get the default styling. - Added `clean-css` as minifier - Updated build script - Updated documentation about loading it from jsdeliver - `npm shrinkwrap` madness * hits: The hit template and transform data key is renamed from `hit` to `item` to stay consistent with the other widgets * api: use autoHideContainer instead of hideContainerWhenNoResults * stats: `cssClasses.root` now applies to the main root element (above header and footer) and no longer to the template wrapper. To style the template wrapper, use `cssClasses.body` * theme: Classes are now named `ais-index-selector` and `ais-index-selector--item` to stay consistent with other widgets. Updated tests as well. Widget is responsible for adding default classes + user-defined ones. Then component simply add them to the markup. * theme: "Powered by" styles are now `ais-search-box--powered-by` and `ais-search-box--powered-by-link`. * urlSync: urlSync is not a widget anymore. It's now an option of instantsearch(appID, apiKey, opts);. See the README.md for more info. * searchbox: The `searchBox` widget now expect a `cssClasses.{input, poweredBy}` * bem: We now use a `span.ais-stats--time` instead of a `small` tag in the stats widget. * bem: We now use `cssClasses.select` and `cssClasses.option` instead of `cssClass` for the index-selector widget. * toggle: S: - toggle: removed template * searchBox: - removed: inputClass * menu: The default template now has the count element inside the link, not outside.
1 parent f0918bc commit 1bbd569

File tree

4 files changed

+330
-3
lines changed

4 files changed

+330
-3
lines changed

0 commit comments

Comments
 (0)