├── API.md
├── CHANGELOG.md
├── FAQ.md
├── LICENSE.md
└── README.md
/API.md:
--------------------------------------------------------------------------------
1 | # API Public Beta
2 |
3 | Fever 1.14 introduces the new Fever API. This API is in public beta and currently supports basic syncing and consuming of content. A subsequent update will allow for adding, editing and deleting feeds and groups. The API’s primary focus is maintaining a local cache of the data in a remote Fever installation.
4 |
5 | I am [soliciting feedback](https://feedafever.com/contact) from interested developers and as such the beta API may expand to reflect that feedback. The current API is incomplete but stable. Existing features may be expanded on but will not be removed or modified. New features may be added.
6 |
7 | I’ve created a [simple HTML widget](https://feedafever.com/gateway/public/api-widget.html.zip) that allows you to query the Fever API and view the response.
8 |
9 | ## Authentication
10 |
11 | Without further ado, the Fever API endpoint URL looks like:
12 |
13 | ```
14 | http://yourdomain.com/fever/?api
15 | ```
16 |
17 | All requests must be authenticated with a `POST`ed `api_key`. The value of `api_key` should be the md5 checksum of the Fever accounts email address and password concatenated with a colon. An example of a valid value for `api_key` using PHP’s native `md5()` function:
18 |
19 | ```
20 | $email = 'you@yourdomain.com';
21 | $pass = 'b3stp4s4wd3v4';
22 | $api_key = md5($email.':'.$pass);
23 |
24 | ```
25 |
26 | A user may specify that `https` be used to connect to their Fever installation for additional security but you should not assume that all Fever installations support `https`.
27 |
28 | The default response is a JSON object containing two members:
29 |
30 | * `api_version` contains the version of the API responding (positive integer)
31 | * `auth` whether the request was successfully authenticated (boolean integer)
32 |
33 | The API can also return XML by passing `xml` as the optional value of the `api` argument like so:
34 |
35 | ```
36 | http://yourdomain.com/fever/?api=xml
37 | ```
38 |
39 | The top level XML element is named `response`.
40 |
41 | The response to each successfully authenticated request will have `auth` set to `1` and include at least one additional member:
42 |
43 | * `last_refreshed_on_time` contains the time of the most recently refreshed (not _updated_) feed (Unix timestamp/integer)
44 |
45 | ## Read
46 |
47 | When reading from the Fever API you add arguments to the query string of the API endpoint URL. If you attempt to `POST` these arguments (and their optional values) Fever will not recognize the request.
48 |
49 | ### Groups
50 |
51 | ```
52 | http://yourdomain.com/fever/?api&groups
53 | ```
54 |
55 | A request with the `groups` argument will return two additional members:
56 |
57 | * `groups` contains an array of `group` objects
58 | * `feeds_groups` contains an array of `feeds_group` objects
59 |
60 | A `group` object has the following members:
61 |
62 | * `id` (positive integer)
63 | * `title` (utf-8 string)
64 |
65 | The `feeds_group` object is documented under “Feeds/Groups Relationships.”
66 |
67 | The “Kindling” super group is not included in this response and is composed of all feeds with an `is_spark` equal to `0`. The “Sparks” super group is not included in this response and is composed of all feeds with an `is_spark` equal to `1`.
68 |
69 | ### Feeds
70 |
71 | ```
72 | http://yourdomain.com/fever/?api&feeds
73 | ```
74 |
75 | A request with the `feeds` argument will return two additional members:
76 |
77 | * `feeds` contains an array of `group` objects
78 | * `feeds_groups` contains an array of `feeds_group` objects
79 |
80 | A `feed` object has the following members:
81 |
82 | * `id` (positive integer)
83 | * `favicon_id` (positive integer)
84 | * `title` (utf-8 string)
85 | * `url` (utf-8 string)
86 | * `site_url` (utf-8 string)
87 | * `is_spark` (boolean integer)
88 | * `last_updated_on_time` (Unix timestamp/integer)
89 |
90 | The `feeds_group` object is documented under “Feeds/Groups Relationships.”
91 |
92 | The “All Items” super feed is not included in this response and is composed of all items from all feeds that belong to a given group. For the “Kindling” super group and all user created groups the items should be limited to feeds with an `is_spark` equal to `0`. For the “Sparks” super group the items should be limited to feeds with an `is_spark` equal to `1`.
93 |
94 | ### Feeds/Groups Relationships
95 |
96 | A request with either the `groups` or `feeds` arguments will return an additional member:
97 |
98 | A `feeds_group` object has the following members:
99 |
100 | * `group_id` (positive integer)
101 | * `feed_ids` (string/comma-separated list of positive integers)
102 |
103 | ### Favicons
104 |
105 | ```
106 | http://yourdomain.com/fever/?api&favicons
107 | ```
108 |
109 | A request with the `favicons` argument will return one additional member:
110 |
111 | * `favicons` contains an array of `favicon` objects
112 |
113 | A `favicon` object has the following members:
114 |
115 | * `id` (positive integer)
116 | * `data` (base64 encoded image data; prefixed by image type)
117 |
118 | An example `data` value:
119 |
120 | ```
121 | image/gif;base64,R0lGODlhAQABAIAAAObm5gAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==
122 | ```
123 |
124 | The `data` member of a `favicon` object can be used with the `data:` protocol to embed an image in CSS or HTML. A PHP/HTML example:
125 |
126 | ```
127 | echo '';
128 | ```
129 |
130 | ### Items
131 |
132 | ```
133 | http://yourdomain.com/fever/?api&items
134 | ```
135 |
136 | A request with the `items` argument will return two additional members:
137 |
138 | * `items` contains an array of `item` objects
139 | * `total_items` contains the total number of items stored in the database (added in API version 2)
140 |
141 | An `item` object has the following members:
142 |
143 | * `id` (positive integer)
144 | * `feed_id` (positive integer)
145 | * `title` (utf-8 string)
146 | * `author` (utf-8 string)
147 | * `html` (utf-8 string)
148 | * `url` (utf-8 string)
149 | * `is_saved` (boolean integer)
150 | * `is_read` (boolean integer)
151 | * `created_on_time` (Unix timestamp/integer)
152 |
153 | Most servers won’t have enough memory allocated to PHP to dump all items at once. Three optional arguments control determine the items included in the response.
154 |
155 | * Use the `since_id` argument with the highest id of locally cached items to request 50 additional items. Repeat until the `items` array in the response is empty.
156 |
157 | * Use the `max_id` argument with the lowest id of locally cached items (or `0` initially) to request 50 previous items. Repeat until the `items` array in the response is empty. (added in API version 2)
158 |
159 | * Use the `with_ids` argument with a comma-separated list of item ids to request (a maximum of 50) specific items. (added in API version 2)
160 |
161 | ### Hot Links
162 |
163 | ```
164 | http://yourdomain.com/fever/?api&links
165 | ```
166 |
167 | A request with the `links` argument will return one additional member:
168 |
169 | * `links` contains an array of `link` objects
170 |
171 | A `link` object has the following members:
172 |
173 | * `id` (positive integer)
174 | * `feed_id` (positive integer) only use when `is_item` equals `1`
175 | * `item_id` (positive integer) only use when `is_item` equals `1`
176 | * `temperature` (positive float)
177 | * `is_item` (boolean integer)
178 | * `is_local` (boolean integer) used to determine if the source feed and favicon should be displayed
179 | * `is_saved` (boolean integer) only use when `is_item` equals `1`
180 | * `title` (utf-8 string)
181 | * `url` (utf-8 string)
182 | * `item_ids` (string/comma-separated list of positive integers)
183 |
184 | When requesting hot links you can control the range and offset by specifying a length of days for each as well as a page to fetch additional hot links. A request with just the `links` argument is equivalent to:
185 |
186 | ```
187 | http://yourdomain.com/fever/?api&links&offset=0&range=7&page=1
188 | ```
189 |
190 | Or the first page (`page=1`) of Hot links for the past week (`range=7`) starting now (`offset=0`).
191 |
192 | ### Link Caveats
193 |
194 | Fever calculates Hot link temperatures in real-time. The API assumes you have an up-to-date local cache of items, feeds and favicons with which to construct a meaningful Hot view. Because they are ephemeral Hot links should not be cached in the same relational manner as items, feeds, groups and favicons.
195 |
196 | Because Fever saves items and not individual links you can only "save" a Hot link when `is_item` equals `1`.
197 |
198 | ## Sync
199 |
200 | The `unread_item_ids` and `saved_item_ids` arguments can be used to keep your local cache synced with the remote Fever installation.
201 |
202 | ```
203 | http://yourdomain.com/fever/?api&unread_item_ids
204 | ```
205 |
206 | A request with the `unread_item_ids` argument will return one additional member:
207 |
208 | * `unread_item_ids` (string/comma-separated list of positive integers)
209 |
210 | ```
211 | http://yourdomain.com/fever/?api&saved_item_ids
212 | ```
213 |
214 | A request with the `saved_item_ids` argument will return one additional member:
215 |
216 | * `saved_item_ids` (string/comma-separated list of positive integers)
217 |
218 | One of these members will be returned as appropriate when marking an item as read, unread, saved, or unsaved and when marking a feed or group as read.
219 |
220 | Because groups and feeds will be limited in number compared to items, they should be synced by comparing an array of locally cached feed or group ids to an array of feed or group ids returned by their respective API request.
221 |
222 | ## Write
223 |
224 | The public beta of the API does not provide a way to add, edit or delete feeds or groups but you can mark items, feeds and groups as read and save or unsave items. You can also unread recently read items. When writing to the Fever API you add arguments to the `POST` data you submit to the API endpoint URL.
225 |
226 | Adding `unread_recently_read=1` to your `POST` data will mark recently read items as unread.
227 |
228 | You can update an individual item by adding the following three arguments to your `POST` data:
229 |
230 | * `mark=item`
231 | * `as=?` where `?` is replaced with `read`, `saved` or `unsaved`
232 | * `id=?` where `?` is replaced with the `id` of the item to modify
233 |
234 | Marking a feed or group as read is similar but requires one additional argument to prevent marking new, unreceived items as read:
235 |
236 | * `mark=?` where `?` is replaced with `feed` or `group`
237 | * `as=read`
238 | * `id=?` where `?` is replaced with the `id` of the feed or group to modify
239 | * `before=?` where `?` is replaced with the Unix timestamp of the the local client’s most recent `items` API request
240 |
241 | You can mark the “Kindling” super group (and the “Sparks” super group) as read by adding the following four arguments to your `POST` data:
242 |
243 | * `mark=group`
244 | * `as=read`
245 | * `id=0`
246 | * `before=?` where `?` is replaced with the Unix timestamp of the the local client’s last `items` API request
247 |
248 | Similarly you can mark just the “Sparks” super group as read by adding the following four arguments to your `POST` data:
249 |
250 | * `mark=group`
251 | * `as=read`
252 | * `id=-1`
253 | * `before=?` where `?` is replaced with the Unix timestamp of the the local client’s last `items` API request
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | This document contains the full history of Fever.
4 |
5 | Note that this repository's codebase only contains a copy of v1.39 and onwards.
6 |
7 | ## v1.43 (2025-03-03)
8 |
9 | - Fix broken feed item link accidentally introduced in Fever v1.42.
10 |
11 | ## v1.42 (2025-02-28)
12 |
13 | - Add suport for feed item image elements. Reader will search the following nodes for images to prepend to the feed item description:
14 | - ``
15 | - ``
16 | - ``
17 | - ``
18 | - Trim feed item description.
19 | - Fix apperance of search input for Chrome and Firefox on desktop and mobile.
20 |
21 | ## v1.41 (2023-08-27)
22 |
23 | - Add support to optionally check for updates from GitHub:
24 | - This feature will only check for an update. It will _not_ update your installation.
25 | - If the global constant `FEVER_GITHUB_REPOSITORY` is defined (`/`), Fever will check the latest release from the given GitHub repository via the GitHub REST API.
26 | - The optional global constant `FEVER_GITHUB_API_TOKEN ` can be used to extend the rate limit.
27 | - These two constants can be added to one of your configuration files (`config/db.php` or `config/key.php`).
28 | - Replace URL to `feedafever.com/anon/` with `rel="noreferrer"` attribute
29 | - Replace URL to `todone.txt` with URL to `CHANGELOG.md` at GitHub repository
30 | - Fix user agent sniffing:
31 | - Some browsers (such as Firefox) on mobile/tablet devices might not include the `AppleWebKit` segment but might instead include a `Mobile` or `Tablet` platform segment.
32 | - Fix mobile portrait detection:
33 | - Replace deprecated event `Window:orientationchange` with `ScreenOrientation:change`.
34 | - Replace portrait detection to compare width against height instead of looking for specific (outdated) widths.
35 | - Add Laravel Valet environment file (`.valetrc`)
36 | - Clean-up quoted and interpolated strings
37 | - Update PHP compatibility:
38 | - Indent doc strings supported by PHP 7.3
39 |
40 |
41 | ## v1.40 (2023-02-08)
42 |
43 | - Disabled gateway requests to feedafever.com
44 | - Replaced URL to `todone.txt` with git repository's `CHANGELOG.md`
45 | - Move copyright from default and mobile page footer views to its own view file
46 | - Update `DOCTYPE` and HTML meta tags and fix CSS styles
47 | - Replace usage of class-string with `::class` constant in `Fever` class
48 | - Add visibility and static keyword to classes to PHP files
49 | - Fix parsing of "set-cookie" response header
50 | - Fix mixing strings and integers
51 | - Update third-party libraries:
52 | - Update PCLZip 2.6.0 → 2.8.3
53 | - Update SimplePie ~1.1.0 → 1.5.8
54 | - Update PHP compatibility:
55 | - Avoid throwing PDO exceptions; the default as of PHP 8.0
56 | - Fix optional arguments; deprecated in PHP 8.0
57 | - Replace `join()` with `implode()` and fix parameter order; deprecated in PHP 7.4
58 | - Replace curly braces for offset access; deprecated in PHP 7.4
59 | - Fix switch break; deprecated in PHP 7.3
60 | - Rename constructors; deprecated in PHP 7.0
61 | - Remove magic quotes; deprecated in PHP 5.4
62 | - Update `is_development_copy()` to replace `.dev` with `.test` since the former became a real TLD in 2019
63 |
64 |
65 | ## v1.39 (2014-09-22)
66 |
67 | - updated mobile CSS for the iPhones 6
68 | - fix for `html:` namespacing prefix throwing off entity decoding in Atom feeds
69 | - improved gateway connectivity error reporting
70 | - "reload interface after browser refresh" now defaults to off because I'm tired of getting support requests about the default behavior
71 | - added feeds to the list of database tables regularly optimized and repaired
72 | - now explicitly closes database connection before exiting
73 |
74 |
75 | ## v1.38 (2014-02-10)
76 |
77 | - fixed bug where only the first PDO-powered MySQL query would work (affected a tiny fraction of servers)
78 | - added PHP 5.1 requirement for PDO support (required for, at least, query & fetch)
79 | - optimized all PNGs with http://imageoptim.com (update archive down from 1.3MB to 1.1MB)
80 |
81 |
82 | ## v1.37 (2014-02-05)
83 |
84 | - fixed PHP 4.x SIDB fatal errors (due to using PHP 5-only control structures)
85 |
86 |
87 | ## v1.36 (2014-02-05)
88 |
89 | - reports anonymous server capabilities to feedafever.com during gateway requests so I can make informed decisions about future development
90 | data collected (see `Fever->capabilities()` for implementation):
91 | - `fever_version`
92 | - `php_version`
93 | - `mysql_client_version`
94 | - `mysql_server_version`
95 | - `has_pdo_mysql`
96 | - `has_mysqli`
97 | - `has_mysql`
98 | - `has_iconv`
99 | - `has_mbstring`
100 | - `has_gd_png`
101 | - `has_curl`
102 | - removed use of deprecated e flag with `preg_replace`
103 | - increased request timeout when requesting updates to accommodate the larger zip (caused by @2x assets)
104 | - added SIDB to eliminate dependency on the deprecated `mysql_*` family of functions
105 | - removed two lingering `allow_call_time_pass_reference` errors
106 | - fixed a problem with links never heating up on OS X Mavericks Server
107 |
108 |
109 | ## v1.35 (2014-01-27)
110 |
111 | - dummied out desktop refresh functions in mobile JavaScript to eliminate undefined errors
112 | - only links `override.css` or `override-mobile.css` if they exist
113 | - manually added `@2x` assets with `@media` query--like a schlep
114 | - removed automatic `.htaccess` retinafication technique
115 |
116 |
117 | ## v1.34 (2014-01-25)
118 |
119 | - STOPGAP: deleted retinafication .htaccess file on problem servers
120 |
121 | If you updated to 1.33 and images or CSS now 404, you
122 | have a problem server. I believe the problem involves
123 | `mod_rewrite`'s default RewriteBase or possibly Apache's
124 | include paths. Not sure how to fix just yet. Manually
125 | defining the RewriteBase to the expected value results
126 | in 500 errors in problem servers. Hence this stopgap.
127 |
128 |
129 | ## v1.33 (2014-01-24)
130 |
131 |
132 | - added ?mobile query to force the mobile view on non-mobile (or unsupported) devices
133 | - added retina support to desktop and mobile views
134 | - added hooks for persistent style customization
135 |
136 | Just add an `override.css` or `override-mobile.css` to the root `fever/` directory.
137 | Copy selectors from existing CSS and use `!important` where necessary.
138 | NOTE: Persists through updates but otherwise unsupported.
139 |
140 |
141 | ## v1.32 (2014-01-16)
142 |
143 |
144 | - added support for `media:credit` (mapped to item author)
145 | - fixed missing space in curl options on Extras page
146 | - removed `-webkit-text-size-adjust` from desktop stylesheets (Safari/Chrome resize should now match Firefox)
147 |
148 |
149 | ## v1.31 (2013-04-14)
150 |
151 |
152 | - reverted to original "reload interface after browser refresh" behavior until I have time to revisit properly (can still be disabled entirely in your Fever Preferences under the Refreshing tab)
153 |
154 |
155 | ## v1.30 (2013-04-14)
156 |
157 |
158 | - updated cURL cron example to include single quotes around the refresh url (absence causes problems on some hosts)
159 | - rewrote encoding handling for non-UTF-8 feeds
160 | - added a special case for rel="hub" links in Atom feeds
161 |
162 |
163 | ## v1.29 (2013-04-13)
164 |
165 |
166 | NOTE: If your Feedlet stops working with this update grab the current version from your Extras page (accessible in the action menu below the Fever logo)
167 |
168 | - fixed bug that caused Sparks previously associated with a group to be deleted when the group was deleted
169 | - updated curl command to provide a user agent to prevent 500 errors on some hosts
170 | - added a Changelog link to the Fever menu
171 | - added a basic subscribe link for use with browser extensions (requires login), eg. `http://yourdomain.com/fever/?subscribe&url=`
172 | - fixed Feedlet on wired.com homepage and feed list
173 | - fixed the Feedlet 500 error that occurs on some hosts
174 | - updated "Show read" default to avoid confusion when adding groups and feeds for the first time
175 | - updated "reload interface after browser refresh" behavior to never replace the currently open item
176 | - iPhone: updated iPhone stylesheets for 4" devices (no retina yet, sorry!)
177 | - added support for protocol agnostic urls in feeds
178 | - updated multiple select box behavior to make use of all space available to them
179 | - updated DOM parsing to handle illogically marked up images with spaces inside the the src quotes
180 | - updated XML parser to better handle 'WINDOWS-1256' encoding
181 | - fixed a couple of SQL bugs that could prevent importing OPML, emptying feeds and emptying the favicon cache (hat-tip: Matt Long)
182 |
183 |
184 | ## v1.28 (2013-02-06)
185 |
186 | - updated XML parser to better handle 'WINDOWS-1250' encoding
187 | - updated `__config` table definition (setting default values for MEDIUMTEXT causes an error on some versions of MySQL preventing installation)
188 |
189 |
190 | ## v1.27 (2012-10-19)
191 |
192 | - updated all instances of `date()` in copyright notices to `gmdate()` to remove warnings in newer verisions of PHP
193 | - removed letterbox from webclip on 4" iOS devices (need to delete and re-add to home screen to take effect)
194 | - updated `HTTP_HTTPS` server variable detection
195 | - updated Service Url help text
196 |
197 |
198 | ## v1.26 (2012-08-14)
199 |
200 | - iPad: fixed group/feed list overlap when zoomed in on items
201 | - iPad: restored scroll-to-top-of-new-feed functionality
202 | - iPad: updated webclip icons for retina
203 | - added new keyboard shortcuts for Hot (1), Kindling (2), Saved (3), Sparks (4), and Search results (5)
204 | - updated keyboard shortcut to prevent interaction with the Pocket Chrome extension
205 | - updated sharing service url filtering, prefix a url with # to connect to the sharing url in the background (no new window or tab)
206 |
207 |
208 | ## v1.25 (2012-07-14)
209 |
210 | - updated string encoding functions to accomodate changes made to the default value of optional arguments in PHP 5.4 (fixes garbled extended characters)
211 | - added some additional default database values to accomodate servers running in MySQL strict mode
212 |
213 |
214 | ## v1.24 (2012-04-19)
215 |
216 | - API v3: Sparks are now filtered out of the `feeds_groups` response (past group relationships are retained, just not exposed through the API)
217 | - API v3: added comma separated `feed_ids` and `group_ids` to `items` API GET request to limit the items returned to specific feed(s)/group(s)
218 | - API v3: added `mark_item_as_unread()` support
219 | - updated `request.php` to support gzipped content (requires cURL 7.1+)
220 | - fixed bug where editing a Spark feed caused it to lose its previous group association
221 | - updated `refresh_feed()` to better detect `site_url`s marked-up in unusual formats
222 | - fixed unescaped single quotes in database password
223 |
224 |
225 | ## v1.23 (2012-01-11)
226 |
227 | - iPad: optimizations for iOS 5 (two finger scroll group/feed lists)
228 | - fixed scrollable group/feed lists ugliness on Lion
229 | - option keyboard shortcut limited to Macs instead of just excluding Windows (Linux-friendly)
230 | - Feedlet: updated routing to prompt for login if not already logged in instead of failing silently (reverts to old, server-parsing method in these instances)
231 | - Feedlet: updated to match link elements with multiple values in their rel attribute
232 | - iPhone: updated login form so that clicking "Go" on the iPhone's keyboard submits login rather than reminder by default
233 | - iPhone: eliminated harmless error from line 775 in `iphone.js` on login screen
234 | - addressed "Call-time pass-by-reference" warnings in convenience functions in `util.php`
235 |
236 |
237 | ## v1.22
238 |
239 | - updated MySQL version detection to better support alphanumeric version strings
240 | - added keyboard shortcut Shift+R to refresh the current group or feed
241 | - iPhone: fixed bug that caused a recently read feed to display the parent group's unread items when reselected
242 |
243 |
244 | ## v1.21
245 |
246 | - iPhone: after returning from a zoomed Elsewhere view you can now pinch or doubletap to restore the intended Fever UI scale
247 | - updated all email inputs to `type="email"` to prevent undesired auto-capitalization on iOS devices
248 |
249 |
250 | ## v1.20
251 |
252 | - iPhone: added checks to better prevent conflicting animations from leaving the UI an unusable state
253 | - iPhone: added checks to better prevent near-simultaneous content requests from leaving the UI an unusable state
254 | - iPhone: added preference to view links in another MobileSafari tab (for non-WebClip users)
255 | - iPhone: fixed bug in "Mark as read on scroll past headline" logic affecting recent versions of MobileSafari
256 | - iPhone: updated copyright logic in footer on login screen
257 |
258 |
259 | ## v1.19
260 |
261 | - fixed up/down arrow key bug (should scroll page when items/hot links have focus, not skip to next item/link)
262 |
263 |
264 | ## v1.18
265 |
266 | - added compatibility with MySQL 5.5 (which drops support for deprecated TYPE keyword and requires ENGINE keyword when creating tables)
267 | - activated the "Delete..." item in the Sparks contextual menu allowing you to unsubscribe from all Sparks at once
268 | - added additional activation error message
269 | - improved vim-like h-j-k-l keyboard behavior
270 | - silenced some PHP warnings in a third-party library
271 |
272 |
273 | ## v1.17
274 |
275 | - iOS: updated webclip for Retina Display (delete existing Fever webclip and Add to Home Screen from Safari again)
276 | - iPad: added mark as read button to bottom of group/feed list (since you can't scroll to autoread the last few items)
277 | - iPad: eliminated some :hover states so double-tapping is no longer necessary for the majority of frequent functions
278 | - iPad: set viewport width to prevent CSS sprite tiling issues from rounding errors
279 | - iPad: disabled feed/group scrolling
280 | - iPad: hid Help popovers
281 |
282 |
283 | ## v1.16
284 |
285 | - removed some errant Sharing debug code
286 | - added `text-rendering: optimizeLegibility;` to `shared.css`
287 | - API: added `remove_control_characters()` to prevent invalid XML/JSON output (hattip: Tom Krush)
288 |
289 |
290 | ## v1.15
291 |
292 | - API: added `max_id` and `with_ids` arguments to items request, see the updated API documentation http://feedafever.com/api
293 | - updated `request.php` to default to using sockets when curl is installed but disabled via `php.ini`
294 | - eliminated possible false negative when checking that a feed is really a feed before parsing
295 | - API: updated API key comparison, now case-insensitive
296 | - updated %e sharing token, now has its whitespace collapsed when used with the `javascript:` pseudocol
297 | - API: added `total_items` containing the total number of items stored in the remote Fever installation to API requests for `items`
298 |
299 |
300 | ## v1.14
301 |
302 | - added beginnings of a basic API (documentation http://feedafever.com/api)
303 | - added custom iPad webclip icon
304 | - fixed redundant `data:` prefix in the default cached favicon data
305 | - disabled ?errors query command on cron-based refresh
306 | - removed some errant PHP shortags in the Saved Items feed that were preventing the feed from working on servers that don't support short tags
307 | - fixed missing hyphen before `k` curl option for https hosts (thanks Andreas)
308 | - fixed a bug where marking a group/feed as read via keyboard shortcut didn't update internal pointers to the new focused group/feed
309 |
310 |
311 | ## v1.13
312 | (bug fixes)
313 | - reverted to original "back out of group/feed" behavior (the last few items would never be marked as read since you have to scroll to the top to back out)
314 | - special-cased the new o-shortcut so that typing "o" in the search input doesn't try to open a selected item
315 |
316 |
317 | ## v1.12
318 |
319 | - updated "back out of group/feed" behavior of iPhone-optimized version to only mark onscreen items as read
320 | - added two independent "Mark as read" preferences to iPhone-optimized version of Fever, on "scroll past headline" and "back out of group/feed"
321 | - added additional keyboard shortcut to open currently selected item or link (o)
322 | - expanded mobile detection to include all WebKit-based WebOS browsers
323 | - nulled out `document.write()` to prevent blank pages when auto-paging by scrolling
324 | - improved title detection of links from Reddit feeds (thanks to http://karanlyons.com)
325 |
326 |
327 | ## v1.11
328 |
329 | - fixed a bug in the rendering of multi-byte characters in group names (mostly in the add/edit/export forms)
330 | - fixed a bug that allowed the Sparks "All items/unread" supergroup context menu "Mark group as read" to mark all Kindling items as read
331 | - updated `ago()` calculations to switch from weeks unit to months after 12 weeks (most likely visible in Saved)
332 | - fixed the Alt key to no longer toggle item content on Windows (was breaking Alt-tabbing to other applications)
333 | - fixed inconsistent url truncation
334 | - fixed `debug()` output for SELECT durations by adding `number_format()`ing to prevent useless E-5s
335 | - fixed a bug preventing keyboard-based auto-pagination from working consistently
336 | - updated saved items rss feed to place item titles in a cdata (to better handle poorly-/un- encoded entities)
337 |
338 | Feeds that were brought to my attention that now work properly (or better) in Fever 1.11:
339 |
340 | - http://www.buzzfeed.com/index.xml
341 |
342 |
343 | ## v1.10
344 |
345 | - fixed bug that broke pagination when "mark items as read as they scroll past" Preference was unchecked
346 | - fixed bug where a previously selected read group defaulted to Kindling without listing its unread feeds
347 | - added an item retention preference to the Refreshing tab to further limit Fever's database usage, default is (and has always been) 10 weeks
348 | - added preliminary unofficial support for Internet Explorer via Google's new Chrome Frame plugin (http://code.google.com/chrome/chromeframe/)
349 | - updated sharing JavaScript to only open a new window when the service url starts with http or https (better support for sending links to `Tweetie.app` with `tweetie:%t%20%u`)
350 | - updated `infiniterator()` method to correctly handle servers with a `max_execution_time` that is less than or equal to 0 (unlimited)
351 | - updated sharing JavaScript to support the `javascript:` pseudocol (replacement tokens may be used in single-quoted strings)
352 | - updated keyboard shortcut JavaScript to prevent conflicts with native shortcuts on Windows platform
353 |
354 |
355 | ## v1.09
356 |
357 | - iPhone: fixed a few minor JavaScript errors
358 | - added Alt/Option key as an additional item content toggle (to accommodate newer MacBook Pros)
359 | - updated third-party service integration to be user customizable (including their keyboard shortcuts)
360 | - updated `install_paths()` method to better detect https
361 | - updated CSS to move the "Choose OPML" button out of the way of the "import groups" checkbox in Firefox
362 | - added "Send to Instapaper" option for items and keyboard shortcut (I)
363 | - added "Send to Delicious" option for items and keyboard shortcut (D)
364 | - added "Twitter" option for items and keyboard shortcut (T)
365 | - added "Email" option for items (uses default email client) and keyboard shortcut (E)
366 | - added item contextual menu
367 | - updated auto-scroll during toggling of excerpts to occur only when the top of an item is off screen
368 | - added optional Saved Items feed (see the new Sharing tab in Preferences to enable)
369 | - added Sharing tab to Preferences
370 |
371 |
372 | ## v1.08
373 |
374 | - added keyboard shortcuts for "Visit site" and "Visit site and mark as read" (V and Shift + V respectively)
375 | - added "Visit site and mark as read" to feed context menu
376 | - added additional styling to `ins`/`del` family of tags
377 | - added partial support for `xml:base`
378 | - updated the Hot view to use the title/description of an available source item, even if the original item is beyond the specified timeframe (does not affect temperature calculation)
379 | - added the ability to save Hot links that are directly associated with an item in a feed you are already subscribed to
380 | - added the url of a feed that requires authentication as a tool tip (in case clarification is necessary)
381 | - updated feedlet to visually differentiate between legitimate feeds and guesses based on link url and text
382 | - updated feedlet to sniff out links that could point to feeds even when embedded feeds are found in a pages head (was one or the other before)
383 | - added search term highlighting in search results
384 | - fixed bug in displaying search terms with double-quotes in them
385 | - updated `resolve()` to leave `javascript:` protocol links alone
386 | - updated `request()` to treat the Location header as case-insensitive
387 | - updated `refresh_feed()` to ensure that the same feed isn't unnecessarily refreshed multiple times when updating initial undefined values
388 | - updated Fever's query functions to free up memory only when actually used (slaps forehead)
389 |
390 | Feeds that were brought to my attention that now work properly (or better) in Fever 1.08:
391 |
392 | - http://www.tbray.org/ongoing/ongoing.atom
393 | - http://www.intertwingly.net/blog/index.atom
394 | - http://bitworking.org/news/feed/
395 | - http://blog.tagesanzeiger.ch/mamablog/index.php/feed/atom/
396 |
397 |
398 | ## v1.07
399 |
400 | - iPhone: added preliminary support for automatic background refreshing on the iPhone--current implementation may not refresh the stalest feeds--will revisit if necessary (uses `ignore_user_abort(true)` to continue with refresh request without maintaining a persistent connection)
401 | - iPhone: added limited Feedlet support to iPhone version
402 | - marking Spark items as read no longer incorrectly decrements the total unread count displayed in Kindling and the browser title bar (since Sparks don't contribute to these numbers)
403 | - Fever now ignores this broken png favicon to prevent choking the caching process: http://www.imjustcreative.com/favicon.ico
404 | - rewrote `blacklist()` to eliminate dropped connections when modifying the blacklist
405 | - updated Fever's query functions to free up memory wherever possible
406 | - Fever now manually removes `