Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tab here incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
4 |
Foo
5 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
4 |
Foo
5 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6 |
7 |
--------------------------------------------------------------------------------
/js/focusMode.js:
--------------------------------------------------------------------------------
1 | var isFocusMode = false
2 |
3 | ipc.on('enterFocusMode', function () {
4 | isFocusMode = true
5 | document.body.classList.add('is-focus-mode')
6 |
7 | setTimeout(function () { // wait to show the message until the tabs have been hidden, to make the message less confusing
8 | electron.remote.dialog.showMessageBox({
9 | type: 'info',
10 | buttons: [l('closeDialog')],
11 | message: l('isFocusMode'),
12 | detail: l('focusModeExplanation1') + ' ' + l('focusModeExplanation2')
13 | })
14 | }, 16)
15 | })
16 |
17 | ipc.on('exitFocusMode', function () {
18 | isFocusMode = false
19 | document.body.classList.remove('is-focus-mode')
20 | })
21 |
22 | module.exports = {
23 | enabled: function () {
24 | return isFocusMode
25 | },
26 | warn: function () {
27 | electron.remote.dialog.showMessageBox({
28 | type: 'info',
29 | buttons: [l('closeDialog')],
30 | message: l('isFocusMode'),
31 | detail: l('focusModeExplanation2')
32 | })
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/js/preload/siteUnbreak.js:
--------------------------------------------------------------------------------
1 | /* a collection of various hacks to unbreak sites, mainly due to missing window.open() support */
2 |
3 | /* drive.google.com - fixes clicking on files to open them */
4 |
5 | if (window.location.hostname === 'drive.google.com') {
6 | var realWindowOpen = window.open
7 |
8 | window.open = function (url) {
9 | if (url) {
10 | return realWindowOpen(url)
11 | }
12 | return {
13 | document: new Proxy({}, {
14 | get: function () {
15 | return function () {
16 | return document.createElement('div')
17 | }
18 | },
19 | set: function () {
20 | console.warn('unpatched set', arguments)}
21 | }
22 | ),
23 | location: {
24 | replace: function (location) {
25 | realWindowOpen(location)
26 | }
27 | }
28 | }
29 | }
30 | }
31 |
32 | /* news.google.com - fixes clicking on news articles */
33 |
34 | if (window.location.hostname === 'news.google.com') {
35 | window.open = null
36 | }
37 |
--------------------------------------------------------------------------------
/js/preload/default.js:
--------------------------------------------------------------------------------
1 | /* imports common modules */
2 |
3 | var electron = require('electron')
4 | var ipc = electron.ipcRenderer
5 |
6 | /* define window.chrome
7 | this is necessary because some websites (such as the Google Drive file viewer, see issue #378) check for a
8 | Chrome user agent, and then do things like if(chrome.) {}
9 | so we need to define an empty chrome object to prevent errors
10 | */
11 |
12 | window.chrome = {}
13 |
14 | var propertiesToClone = ['deltaX', 'deltaY', 'metaKey', 'ctrlKey', 'defaultPrevented']
15 |
16 | function cloneEvent (e) {
17 | var obj = {}
18 |
19 | for (var i = 0; i < propertiesToClone.length; i++) {
20 | obj[propertiesToClone[i]] = e[propertiesToClone[i]]
21 | }
22 | return JSON.stringify(obj)
23 | }
24 | window.addEventListener('wheel', function (e) {
25 | ipc.send('wheel-event', cloneEvent(e))
26 | })
27 |
28 | /* re-implement window.close, since the built-in function doesn't work correctly */
29 | window.close = function () {
30 | ipc.send('close-window')
31 | }
32 |
--------------------------------------------------------------------------------
/ext/font-awesome-4.4.0/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
14 | .fa-icon-rotate(@degrees, @rotation) {
15 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
16 | -webkit-transform: rotate(@degrees);
17 | -ms-transform: rotate(@degrees);
18 | transform: rotate(@degrees);
19 | }
20 |
21 | .fa-icon-flip(@horiz, @vert, @rotation) {
22 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
23 | -webkit-transform: scale(@horiz, @vert);
24 | -ms-transform: scale(@horiz, @vert);
25 | transform: scale(@horiz, @vert);
26 | }
27 |
--------------------------------------------------------------------------------
/js/menuBarVisibility.js:
--------------------------------------------------------------------------------
1 | const settings = require('util/settings.js')
2 |
3 | function initialize () {
4 | settings.get('menuBarVisible', function (value) {
5 | if (value === false) {
6 | remote.getCurrentWindow().setMenuBarVisibility(false)
7 | } else {
8 | // menu bar should be visible, do nothing
9 | }
10 | })
11 | }
12 |
13 | function showMenuBar () {
14 | remote.getCurrentWindow().setMenuBarVisibility(true)
15 | settings.set('menuBarVisible', true)
16 | }
17 |
18 | function hideMenuBar () {
19 | remote.getCurrentWindow().setMenuBarVisibility(false)
20 | settings.set('menuBarVisible', false)
21 | }
22 |
23 | function toggleMenuBar () {
24 | if (navigator.platform === 'Win32') {
25 | // use secondary menu instead of application menu on Windows
26 | return showSecondaryMenu()
27 | }
28 | settings.get('menuBarVisible', function (value) {
29 | if (value === false) {
30 | showMenuBar()
31 | } else {
32 | hideMenuBar()
33 | }
34 | })
35 | }
36 |
37 | module.exports = {initialize, toggleMenuBar}
38 |
--------------------------------------------------------------------------------
/ext/readability-master/test/test-pages/basic-tags-cleaning/expected.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
4 |
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
5 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6 |
7 |
8 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
9 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
4 |
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
5 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6 |
7 |
8 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
9 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
4 |
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
5 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6 |
7 |
8 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
9 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
4 |
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
5 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6 |
7 |
8 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
9 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
4 |
5 |
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
6 |
7 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
8 |
9 |
10 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
11 |
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
4 |
Foo
5 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
8 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
9 |
10 |
11 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
12 |
8 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
9 |
10 |
11 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
12 |
8 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
9 |
10 |
11 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
12 |
8 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
9 |
10 |
11 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
12 |
amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6 |
7 |
8 |
Tempor
9 |
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
10 |
11 |
--------------------------------------------------------------------------------
/ext/readability-master/index.js:
--------------------------------------------------------------------------------
1 | var path = require("path");
2 | var fs = require("fs");
3 |
4 | // We want to load Readability and JSDOMParser, which aren't set up as commonjs libraries,
5 | // and so we need to do some hocus-pocus with 'vm' to import them on a separate scope
6 | // (identical) scope context.
7 | var vm = require("vm");
8 | var readabilityPath = path.join(__dirname, "Readability.js");
9 | var jsdomPath = path.join(__dirname, "JSDOMParser.js");
10 |
11 |
12 | var scopeContext = {};
13 | // We generally expect dump() and console.{whatever} to work, so make these available
14 | // in the scope we're using:
15 | scopeContext.dump = console.log;
16 | scopeContext.console = console;
17 |
18 | // Actually load files. NB: if either of the files has parse errors,
19 | // node is dumb and shows you a syntax error *at this callsite* . Don't try to find
20 | // a syntax error on this line, there isn't one. Go look in the file it's loading instead.
21 | vm.runInNewContext(fs.readFileSync(jsdomPath), scopeContext, jsdomPath);
22 | vm.runInNewContext(fs.readFileSync(readabilityPath), scopeContext, readabilityPath);
23 |
24 | module.exports = {
25 | Readability: scopeContext.Readability,
26 | JSDOMParser: scopeContext.JSDOMParser
27 | };
28 |
--------------------------------------------------------------------------------
/ext/readability-master/benchmarks/benchmark-reporter.js:
--------------------------------------------------------------------------------
1 | var clean = require('matcha/lib/matcha/reporters/clean');
2 |
3 | function average(list) {
4 | if (!list.length)
5 | return 0;
6 |
7 | var sum = list.reduce(function(previous, current) {
8 | return previous + current;
9 | });
10 | return (sum / list.length).toFixed(0);
11 | }
12 |
13 |
14 | // Like clean, but also produces an average:
15 | module.exports = function(runner, utils) {
16 | var humanize = utils.humanize;
17 | var padBefore = utils.padBefore;
18 | var color = utils.color;
19 | var results = {};
20 | var currentResults = [];
21 | runner.on('bench end', function(benchResults) {
22 | currentResults.push(benchResults.ops);
23 | });
24 | runner.on('suite end', function(suite) {
25 | var avg = humanize(average(currentResults));
26 | console.log(padBefore(avg + ' op/s', 22) + ' » ' + suite.title);
27 | console.log();
28 | results[suite.title] = avg;
29 | currentResults = [];
30 | });
31 |
32 | runner.on('end', function() {
33 | for (var k in results) {
34 | console.log(color(padBefore(k, 30) + ': ', 'gray') + results[k] + ' op/s');
35 | }
36 | console.log();
37 | });
38 |
39 | clean(runner, utils);
40 | };
41 |
--------------------------------------------------------------------------------
/js/util/defaultKeyMap.js:
--------------------------------------------------------------------------------
1 | var defaultKeyMap = {
2 | 'addPrivateTab': 'shift+mod+p',
3 | 'toggleTasks': 'shift+mod+e',
4 | 'goBack': 'mod+left',
5 | 'goForward': 'mod+right',
6 | 'enterEditMode': ['mod+l', 'mod+k'],
7 | 'completeSearchbar': 'mod+enter',
8 | 'closeTab': 'mod+w',
9 | 'restoreTab': 'shift+mod+t',
10 | 'gotoFirstTab': 'shift+mod+9',
11 | 'gotoLastTab': 'mod+9',
12 | 'addToFavorites': 'mod+d',
13 | 'toggleReaderView': 'shift+mod+r',
14 | 'switchToNextTab': ['option+mod+right', 'ctrl+tab', 'shift+mod+pagedown'],
15 | 'switchToPreviousTab': ['option+mod+left', 'shift+ctrl+tab', 'shift+mod+pageup'],
16 | 'switchToNextTask': 'mod+]',
17 | 'switchToPreviousTask': 'mod+[',
18 | 'closeAllTabs': 'shift+mod+n',
19 | 'reload': 'mod+r',
20 | 'showAndHideMenuBar': 'alt',
21 | 'followLink': 'mod+enter'
22 | }
23 | /* Utility function to override default mapping with user settings */
24 | function userKeyMap (settings) {
25 | var keyMapCopy = Object.assign({}, defaultKeyMap)
26 | if (settings) {
27 | // override the default keymap by the user defined ones
28 | Object.keys(keyMapCopy).forEach(function (key) {
29 | if (settings[key]) {
30 | keyMapCopy[key] = settings[key]
31 | }
32 | })
33 | }
34 | return keyMapCopy
35 | }
36 |
--------------------------------------------------------------------------------
/ext/readability-master/test/utils.js:
--------------------------------------------------------------------------------
1 | var path = require("path");
2 | var fs = require("fs");
3 | var prettyPrint = require("js-beautify").html;
4 |
5 | function readFile(filePath) {
6 | return fs.readFileSync(filePath, {encoding: "utf-8"}).trim();
7 | }
8 |
9 | function readJSON(jsonPath) {
10 | return JSON.parse(readFile(jsonPath));
11 | }
12 |
13 | var testPageRoot = path.join(__dirname, "test-pages");
14 |
15 | exports.getTestPages = function() {
16 | return fs.readdirSync(testPageRoot).map(function(dir) {
17 | return {
18 | dir: dir,
19 | source: readFile(path.join(testPageRoot, dir, "source.html")),
20 | expectedContent: readFile(path.join(testPageRoot, dir, "expected.html")),
21 | expectedMetadata: readJSON(path.join(testPageRoot, dir, "expected-metadata.json")),
22 | };
23 | });
24 | };
25 |
26 | exports.prettyPrint = function(html) {
27 | return prettyPrint(html, {
28 | "indent_size": 4,
29 | "indent_char": " ",
30 | "indent_level": 0,
31 | "indent_with_tabs": false,
32 | "preserve_newlines": false,
33 | "break_chained_methods": false,
34 | "eval_code": false,
35 | "unescape_strings": false,
36 | "wrap_line_length": 0,
37 | "wrap_attributes": "auto",
38 | "wrap_attributes_indent_size": 4
39 | });
40 | };
41 |
--------------------------------------------------------------------------------
/ext/readability-master/test/test-pages/missing-paragraphs/expected-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy\n eirmod tempor invidunt",
3 | "byline": "Henri Sivonen",
4 | "excerpt": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy\n eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam\n voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet\n clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit\n amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam\n nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,\n sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.\n Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor\n sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed\n diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,\n sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.\n Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor\n sit amet.",
5 | "readerable": true
6 | }
7 |
--------------------------------------------------------------------------------
/ext/readability-master/test/test-pages/replace-brs/source.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Replace brs test
6 |
7 |
8 |
9 |
Lorem
10 |
11 | Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do eiusmod
12 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
13 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
14 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
15 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
16 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
17 |
18 |
Foo
19 |
20 | Tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
21 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
22 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
23 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
24 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
25 |
11 | Lorem
12 | ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
13 | tab here
14 | incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
15 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
16 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
17 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
18 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
19 |
20 |
Foo
21 |
22 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
23 | quis nostrud exercitation
24 |
25 |
26 |
27 |
28 | ullamco laboris nisi ut aliquip ex ea commodo
29 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
30 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
31 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
32 |
17 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
18 |
19 |
20 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
21 |
17 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
18 |
19 |
20 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
21 |
17 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
18 |
19 |
20 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
21 |
17 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
18 |
19 |
20 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
21 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
13 | tempor incididunt ut labore et dolore magna aliqua.
14 |
Ut enim ad minim veniam,
15 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
16 | consequat.
17 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
18 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
19 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
20 |
21 |
Foo
22 |
23 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
24 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
25 | consequat.
26 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
27 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
28 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
11 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
12 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
13 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
14 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
15 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
16 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
17 |
18 |
Foo
19 |
20 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
21 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
22 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
23 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
24 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
25 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
14 | tempor incididunt ut labore et dolore magna aliqua.
15 |
Ut enim ad minim veniam,
16 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
17 | consequat.
18 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
19 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
20 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
21 |
22 |
Foo
23 |
24 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
25 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
26 | consequat.
27 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
28 | cillum dolore eu fugiat nulla pariatur.
29 | Excepteur sint occaecat cupidatat non
30 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
12 | tempor incididunt ut labore et dolore magna aliqua.
13 |
14 |
Ut enim ad minim veniam,
15 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
16 | consequat.
17 |
18 |
19 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
20 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
21 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
22 |
23 |
24 |
Foo
25 |
26 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
27 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
28 | consequat.
29 |
30 |
31 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
32 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
33 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
15 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
16 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
17 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
18 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
19 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
20 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
21 |
22 |
27 |
Foo
28 |
29 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
30 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
31 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
32 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
33 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
34 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
12 | tempor incididunt ut labore et dolore magna aliqua.
13 |
Ut enim ad minim veniam,
14 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
15 | consequat.
16 |
17 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
18 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
19 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
20 |
21 |
Foo
22 |
23 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
24 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
25 | consequat.
26 |
29 |
30 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
31 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
32 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
13 | tempor incididunt ut labore et dolore magna aliqua.
14 |
Ut enim ad minim veniam,
15 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
16 | consequat.
17 |
20 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
21 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
22 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
23 |
24 |
27 |
Foo
28 |
29 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
30 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
31 | consequat.
32 |
33 |
Duis aute irure dolor in reprehenderit in voluptate velit esse
34 | cillum dolore eu fugiat nulla pariatur.
35 |
38 | Excepteur sint occaecat cupidatat non
39 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/ext/abp-filter-parser-modified/README.md:
--------------------------------------------------------------------------------
1 | # abp-filter-parser
2 | JavaScript Adblock Plus filter parser for lists like EasyList
3 |
4 | [](https://travis-ci.org/bbondy/abp-filter-parser)
5 |
6 | Parses filter rules as per:
7 | - https://adblockplus.org/en/filters
8 | - https://adblockplus.org/en/filter-cheatsheet
9 |
10 | ## Usage
11 |
12 | Babel / ES6:
13 |
14 | ```javascript
15 | import * as ABPFilterParser from 'abp-filter-parser.js';
16 | ```
17 |
18 | Node:
19 |
20 | ```javascript
21 | let ABPFilterParser = require('abp-filter-parser');
22 | ```
23 |
24 | ## Primary API:
25 |
26 | ```javascript
27 | let ABPFilterParser = require('abp-filter-parser');
28 | var fs = require('fs');
29 |
30 | let easyListTxt = fs.readFileSync('./test/data/easylist.txt', 'utf-8');
31 | let parsedFilterData = {};
32 | let urlToCheck = 'http://static.tumblr.com/dhqhfum/WgAn39721/cfh_header_banner_v2.jpg';
33 |
34 | // This is the site who's URLs are being checked, not the domain of the URL being checked.
35 | let currentPageDomain = 'slashdot.org';
36 |
37 | ABPFilterParser.parse(easyListTxt, parsedFilterData);
38 | // ABPFilterParser.parse(someOtherListOfFilters, parsedFilterData);
39 |
40 | if (ABPFilterParser.matches(parsedFilterData, urlToCheck, {
41 | domain: currentPageDomain,
42 | elementTypeMaskMap: ABPFilterParser.elementTypes.SCRIPT,
43 | })) {
44 | console.log('You should block this URL!');
45 | } else {
46 | console.log('You should NOT block this URL!');
47 | }
48 | ```
49 |
50 | ## Secondary APIs
51 |
52 | You probably won't need these directly, they are used by the parimary API above.
53 |
54 | - parseDomains
55 | - parseOptions
56 | - parseHTMLFilter
57 | - parseFilter
58 | - matchesFilter
59 |
--------------------------------------------------------------------------------
/ext/readability-master/test/test-pages/reordering-paragraphs/expected.html:
--------------------------------------------------------------------------------
1 |
2 |
Regarding item# 11111, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.
3 |
Regarding item# 22222, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.
4 |
Regarding item# 33333, under sufficiently extreme conditions, quarks may become deconfined and exist as free particles. In the course of asymptotic freedom, the strong interaction becomes weaker at higher temperatures. Eventually, color confinement would be lost and an extremely hot plasma of freely moving quarks and gluons would be formed. This theoretical phase of matter is called quark-gluon plasma.[81] The exact conditions needed to give rise to this state are unknown and have been the subject of a great deal of speculation and experimentation.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
11 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
12 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
13 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
14 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
15 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
16 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
17 |
35 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
36 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
37 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
38 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
39 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
40 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
4 |
Videos
5 |
At root
6 |
7 |
8 |
9 |
In a paragraph
10 |
11 |
12 |
13 |
In a div
14 |
15 |
16 |
17 |
Foo
18 |
Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lupita Nyong'o's now-famous Oscar dress -- adorned in pearls -- was stolen right out of her hotel room ... TMZ has learned.
12 |
Law enforcement sources tell TMZ ... the dress was taken out of Lupita's room at The London West Hollywood. The dress is made of pearls ... 6,000 white Akoya pearls. It's valued at $150,000.
13 |
Our sources say Lupita told cops it was taken from her room sometime between 8 AM and 9 PM Wednesday ... while she was gone.
14 |
We're told there is security footage that cops are looking at that could catch the culprit right in the act.
15 |
12:00 PM PT -- Sheriff's deputies were at The London Thursday morning. We know they were in the manager's office and we're told they have looked at security footage to determine if they can ID the culprit.
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/js/userscripts.js:
--------------------------------------------------------------------------------
1 | /* implements userscript support */
2 |
3 | var userScriptsEnabled = false
4 | var domainScriptMap = {}
5 |
6 | settings.get('userscriptsEnabled', function (value) {
7 | if (value === true) {
8 | userScriptsEnabled = true
9 |
10 | /* get a list of all the files */
11 |
12 | var path = require('path')
13 | var scriptDir = path.join(remote.app.getPath('userData'), 'userscripts')
14 |
15 | fs.readdir(scriptDir, function (err, files) {
16 | if (err || files.length === 0) {
17 | return
18 | }
19 |
20 | // store the scripts in memory
21 | files.forEach(function (filename) {
22 | if (filename.endsWith('.js')) {
23 | fs.readFile(path.join(scriptDir, filename), 'utf-8', function (err, file) {
24 | if (err || !file) {
25 | return
26 | }
27 |
28 | var domain = filename.slice(0, -3)
29 | if (domain.startsWith('www.')) {
30 | domain = domain.slice(4)
31 | }
32 | if (!domain) {
33 | return
34 | }
35 | domainScriptMap[domain] = file
36 | })
37 | }
38 | })
39 | })
40 | }
41 | })
42 |
43 | /* listen for load events and execute the scripts
44 | this listener has to be attached immediately so that we can capture events for
45 | webviews that are created at startup
46 | */
47 |
48 | webviews.bindEvent('dom-ready', function (e) {
49 | if (!userScriptsEnabled) {
50 | return
51 | }
52 | try {
53 | var domain = new URL(this.getAttribute('src')).hostname
54 | if (domain.startsWith('www.')) {
55 | domain = domain.slice(4)
56 | }
57 | // global script
58 | if (domainScriptMap.global) {
59 | this.executeJavaScript(domainScriptMap.global, false, null)
60 | }
61 | // domain-specific scripts
62 | if (domainScriptMap[domain]) {
63 | this.executeJavaScript(domainScriptMap[domain], false, null)
64 | }
65 | } catch(e) {}
66 | })
67 |
--------------------------------------------------------------------------------
/js/searchbar/searchbarAutocomplete.js:
--------------------------------------------------------------------------------
1 | var urlParser = require('util/urlParser.js')
2 |
3 | function autocomplete (input, strings) {
4 | // if there is text after the selection, we can never autocomplete
5 | if (input.selectionEnd !== input.value.length) {
6 | return {
7 | valid: false
8 | }
9 | }
10 |
11 | var text = input.value.substring(0, input.selectionStart)
12 |
13 | for (var i = 0; i < strings.length; i++) {
14 | // check if the item can be autocompleted
15 | if (strings[i].toLowerCase().indexOf(text.toLowerCase()) === 0) {
16 | input.value = strings[i]
17 | input.setSelectionRange(text.length, strings[i].length)
18 |
19 | return {
20 | valid: true,
21 | matchIndex: i
22 | }
23 | }
24 | }
25 | return {
26 | valid: false
27 | }
28 | }
29 |
30 | // autocompletes based on a result item
31 | // returns: 1 - the exact URL was autocompleted, 0 - the domain was autocompleted, -1: nothing was autocompleted
32 | function autocompleteURL (item, input) {
33 | var url = new URL(item.url)
34 | var hostname = url.hostname
35 |
36 | // the different variations of the URL we can autocomplete
37 | var possibleAutocompletions = [
38 | // we start with the domain
39 | hostname,
40 | // if that doesn't match, try the hostname without the www instead. The regex requires a slash at the end, so we add one, run the regex, and then remove it
41 | (hostname + '/').replace(urlParser.startingWWWRegex, '$1').replace('/', ''),
42 | // then try the whole URL
43 | urlParser.prettyURL(item.url),
44 | // then try the URL with querystring
45 | urlParser.basicURL(item.url),
46 | // then just try the URL with protocol
47 | item.url
48 | ]
49 |
50 | var autocompleteResult = autocomplete(input, possibleAutocompletions)
51 |
52 | if (!autocompleteResult.valid) {
53 | return -1
54 | } else if (autocompleteResult.matchIndex < 2 && url.pathname !== '/') {
55 | return 0
56 | } else {
57 | return 1
58 | }
59 | }
60 |
61 | module.exports = {autocomplete, autocompleteURL}
62 |
--------------------------------------------------------------------------------
/js/searchbar/searchSuggestionsPlugin.js:
--------------------------------------------------------------------------------
1 | var searchbar = require('searchbar/searchbar.js')
2 | var searchbarPlugins = require('searchbar/searchbarPlugins.js')
3 | var searchbarUtils = require('searchbar/searchbarUtils.js')
4 |
5 | var ddgAttribution = l('resultsFromDDG')
6 |
7 | function showSearchSuggestions (text, input, event, container) {
8 | // TODO support search suggestions for other search engines
9 | if (currentSearchEngine.name !== 'DuckDuckGo') {
10 | return
11 | }
12 |
13 | // if the search text is a custom bang, we should never show suggestions
14 | if (getCustomBang(text)) {
15 | empty(container)
16 | return
17 | }
18 |
19 | if (searchbarPlugins.getResultCount() > 3) {
20 | empty(container)
21 | return
22 | }
23 |
24 | fetch('https://ac.duckduckgo.com/ac/?t=min&q=' + encodeURIComponent(text), {
25 | cache: 'force-cache'
26 | })
27 | .then(function (response) {
28 | return response.json()
29 | })
30 | .then(function (results) {
31 | empty(container)
32 |
33 | if (results) {
34 | results.slice(0, 3).forEach(function (result) {
35 | var data = {
36 | title: result.phrase,
37 | classList: ['iadata-onfocus']
38 | }
39 |
40 | if (urlParser.isURL(result.phrase) || urlParser.isURLMissingProtocol(result.phrase)) { // website suggestions
41 | data.icon = 'fa-globe'
42 | } else { // regular search results
43 | data.icon = 'fa-search'
44 | }
45 |
46 | var item = searchbarUtils.createItem(data)
47 |
48 | item.addEventListener('click', function (e) {
49 | searchbar.openURL(result.phrase, e)
50 | })
51 |
52 | container.appendChild(item)
53 | })
54 | }
55 | searchbarPlugins.addResults(results.length)
56 | })
57 | }
58 |
59 | searchbarPlugins.register('searchSuggestions', {
60 | index: 4,
61 | trigger: function (text) {
62 | return !!text && (text.indexOf('!') !== 0 || text.trim().indexOf(' ') !== -1) && !tabs.get(tabs.getSelected()).private
63 | },
64 | showResults: debounce(showSearchSuggestions, 150)
65 | })
66 |
--------------------------------------------------------------------------------
/ext/readability-master/benchmarks/benchmarks.js:
--------------------------------------------------------------------------------
1 | var getTestPages = require("../test/utils").getTestPages;
2 |
3 | var readability = require("../index.js");
4 | var Readability = readability.Readability;
5 | var JSDOMParser = readability.JSDOMParser;
6 |
7 | var referenceTestPages = [
8 | "002",
9 | "herald-sun-1",
10 | "lifehacker-working",
11 | "lifehacker-post-comment-load",
12 | "medium-1",
13 | "medium-2",
14 | "salon-1",
15 | "tmz-1",
16 | "wapo-1",
17 | "wapo-2",
18 | "webmd-1",
19 | ];
20 |
21 | var testPages = getTestPages();
22 |
23 | if (process.env.READABILITY_PERF_REFERENCE === "1") {
24 | testPages = testPages.filter(function(testPage) {
25 | return referenceTestPages.indexOf(testPage.dir) !== -1;
26 | });
27 | }
28 |
29 | suite("JSDOMParser test page perf", function () {
30 | set("iterations", 1);
31 | set("type", "static");
32 |
33 | testPages.forEach(function(testPage) {
34 | bench(testPage.dir + " document parse perf", function() {
35 | new JSDOMParser().parse(testPage.source);
36 | });
37 | });
38 | });
39 |
40 |
41 | suite("Readability test page perf", function () {
42 | set("iterations", 1);
43 | set("type", "static");
44 |
45 | var uri = {
46 | spec: "http://fakehost/test/page.html",
47 | host: "fakehost",
48 | prePath: "http://fakehost",
49 | scheme: "http",
50 | pathBase: "http://fakehost/test"
51 | };
52 | testPages.forEach(function(testPage) {
53 | var doc = new JSDOMParser().parse(testPage.source);
54 | bench(testPage.dir + " readability perf", function() {
55 | new Readability(uri, doc).parse();
56 | });
57 | });
58 | });
59 |
60 | suite("isProbablyReaderable perf", function () {
61 | set("iterations", 1);
62 | set("type", "static");
63 |
64 | var uri = {
65 | spec: "http://fakehost/test/page.html",
66 | host: "fakehost",
67 | prePath: "http://fakehost",
68 | scheme: "http",
69 | pathBase: "http://fakehost/test"
70 | };
71 | testPages.forEach(function(testPage) {
72 | var doc = new JSDOMParser().parse(testPage.source);
73 | bench(testPage.dir + " readability perf", function() {
74 | new Readability(uri, doc).isProbablyReaderable();
75 | });
76 | });
77 | });
78 |
--------------------------------------------------------------------------------
/js/util/settings.js:
--------------------------------------------------------------------------------
1 | /*
2 | gets and sets settings
3 | requires Dexie and util/database.js
4 | */
5 |
6 | if (typeof db === 'undefined' && typeof require !== 'undefined') {
7 | var db = require('util/database.js')
8 | }
9 |
10 | var settings = {
11 | loaded: false,
12 | list: {},
13 | onLoadCallbacks: [],
14 | get: function (key, cb, options) {
15 | var isCacheable = !options || options.fromCache !== false
16 |
17 | // get the setting from the cache if possible
18 | if (settings.loaded && isCacheable) {
19 | cb(settings.list[key])
20 |
21 | // if the settings haven't loaded, wait until they have
22 | } else if (isCacheable) {
23 | settings.onLoadCallbacks.push({
24 | key: key,
25 | cb: cb
26 | })
27 |
28 | // the setting can't be cached, get it from the database
29 | } else {
30 | db.settings.where('key').equals(key).first(function (item) {
31 | if (item) {
32 | cb(item.value)
33 | } else {
34 | cb(null)
35 | }
36 | })
37 | }
38 | },
39 | set: function (key, value, cb) {
40 | db.settings.put({
41 | key: key,
42 | value: value
43 | }).then(function () {
44 | settings.list[key] = value
45 | if (cb) {
46 | cb()
47 | }
48 | })
49 | },
50 | delete: function (key, cb) {
51 | db.settings.where('key').equals(key).delete()
52 | .then(function () {
53 | delete settings.list[key]
54 | if (cb) {
55 | cb()
56 | }
57 | })
58 | },
59 | load: function () {
60 | db.settings.each(function (setting) {
61 | settings.list[setting.key] = setting.value
62 | }).then(function () {
63 | settings.loaded = true
64 |
65 | settings.onLoadCallbacks.forEach(function (item) {
66 | item.cb(settings.list[item.key])
67 | })
68 |
69 | settings.onLoadCallbacks = []
70 | })
71 | },
72 | onLoad: function (cb) {
73 | if (settings.loaded) {
74 | cb()
75 | } else {
76 | settings.onLoadCallbacks.push({
77 | key: '',
78 | cb: cb
79 | })
80 | }
81 | }
82 | }
83 |
84 | settings.load()
85 |
86 | if (typeof module !== 'undefined') {
87 | module.exports = settings
88 | }
89 |
--------------------------------------------------------------------------------
/ext/readability-master/test/test-pages/embedded-videos/source.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Embedded videos test
6 |
7 |
8 |
9 |
Lorem
10 |
11 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
12 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
13 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
14 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
15 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
16 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
17 |
18 |
Videos
19 |
At root
20 |
22 |
24 |
27 |
In a paragraph
28 |
30 |
In a div
31 |
33 |
Foo
34 |
35 | Tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
36 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
37 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
38 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
39 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
40 |
Regarding item# 11111, under sufficiently extreme conditions, quarks may
8 | become deconfined and exist as free particles. In the course of asymptotic
9 | freedom, the strong interaction becomes weaker at higher temperatures.
10 | Eventually, color confinement would be lost and an extremely hot plasma
11 | of freely moving quarks and gluons would be formed. This theoretical phase
12 | of matter is called quark-gluon plasma.[81] The exact conditions needed
13 | to give rise to this state are unknown and have been the subject of a great
14 | deal of speculation and experimentation.
15 |
Regarding item# 22222, under sufficiently extreme conditions, quarks may
16 | become deconfined and exist as free particles. In the course of asymptotic
17 | freedom, the strong interaction becomes weaker at higher temperatures.
18 | Eventually, color confinement would be lost and an extremely hot plasma
19 | of freely moving quarks and gluons would be formed. This theoretical phase
20 | of matter is called quark-gluon plasma.[81] The exact conditions needed
21 | to give rise to this state are unknown and have been the subject of a great
22 | deal of speculation and experimentation.
23 |
Regarding item# 33333, under sufficiently extreme conditions, quarks may
24 | become deconfined and exist as free particles. In the course of asymptotic
25 | freedom, the strong interaction becomes weaker at higher temperatures.
26 | Eventually, color confinement would be lost and an extremely hot plasma
27 | of freely moving quarks and gluons would be formed. This theoretical phase
28 | of matter is called quark-gluon plasma.[81] The exact conditions needed
29 | to give rise to this state are unknown and have been the subject of a great
30 | deal of speculation and experimentation.
The Raspberry Pi Foundation started by a handful of volunteers in 2012 when they released the original Raspberry Pi 256MB Model B without knowing what to expect. In a short four-year period they have grown to over sixty full-time employees and have shipped over eight million units to-date. Raspberry Pi has achieved new heights by being shipped to the International Space Station for research and by being an affordable computing platforms used by teachers throughout the world. "It has become the all-time best-selling computer in the UK".
4 |
Raspberry Pi 3 - A credit card sized PC that only costs $35 - Image: Raspberry Pi Foundation
5 |
Raspberry Pi Foundation is charity organization that pushes for a digital revolution with a mission to inspire kids to learn by creating computer-powered objects. The foundation also helps teachers learn computing skills through free training and readily available tutorials & example code for creating cool things such as music.
6 |
Raspberry Pi in educations - Image: Raspberry Pi Foundation
7 |
In celebration of their 4th year anniversary, the foundation has released Raspberry Pi 3 with the same price tag of$35 USD. The 3rd revision features a 1.2GHz 64-bit quad-core ARM CPU with integrated Bluetooth 4.1 and 802.11n wireless LAN chipsets. The ARM Cortex-A53 CPU along with other architectural enhancements making it the fastest Raspberry Pi to-date. The 3rd revision is reportedly about 50-60% times faster than its predecessor Raspberry Pi 2 and about 10 times faster then the original Raspberry PI.
8 |
Raspberry Pi - Various Usage
9 |
Raspberry Pi 3 is now available via many online resellers. At this time, you should use a recent 32-bit NOOBS or Raspbian image from their downloads page with a promise of a switch to a 64-bit version only if further investigation proves that there is indeed some value in moving to 64-bit mode.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
4 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
5 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
6 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
7 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
8 |
9 |
--------------------------------------------------------------------------------
/localization/localizationHelpers.js:
--------------------------------------------------------------------------------
1 | /* provides helper functions for using localized strings */
2 |
3 | /*
4 | translations are compiled into here by running "npm run build" in this format
5 |
6 | var languages = {
7 | en-US: {name: "English (United States), identifier: "en-US", translations: {...}}
8 | }
9 |
10 | */
11 |
12 | function getCurrentLanguage () {
13 | // TODO add a setting to change the language to something other than the default
14 |
15 | var language = 'en-US' // default
16 |
17 | if (typeof navigator !== 'undefined') { // renderer process
18 | language = navigator.language
19 | } else if (typeof app !== 'undefined') { // main process
20 | language = app.getLocale()
21 | } else {
22 | // nothing worked, fall back to default
23 | }
24 |
25 | return language
26 | }
27 |
28 | var userLanguage = null
29 |
30 | function l (stringId) {
31 | if (!userLanguage) {
32 | userLanguage = getCurrentLanguage()
33 | }
34 |
35 | // get the translated string for the given ID
36 |
37 | // try to use the string for the user's language
38 | if (languages[userLanguage] && languages[userLanguage].translations[stringId]) {
39 | return languages[userLanguage].translations[stringId]
40 | } else {
41 | // fallback to en-US
42 | return languages['en-US'].translations[stringId]
43 | }
44 | }
45 |
46 | /* for static HTML pages
47 | insert a localized string into all elements with a [data-string] attribute
48 | set the correct attributes for all elements with a [data-label] attribute
49 | */
50 |
51 | if (typeof document !== 'undefined') {
52 | document.querySelectorAll('[data-string]').forEach(function (el) {
53 | var str = l(el.getAttribute('data-string'))
54 | if (typeof str === 'string') {
55 | el.textContent = str
56 | } else if (str && str.unsafeHTML && el.hasAttribute('data-allowHTML')) {
57 | el.innerHTML = str.unsafeHTML
58 | }
59 | })
60 | document.querySelectorAll('[data-label]').forEach(function (el) {
61 | var str = l(el.getAttribute('data-label'))
62 | if (typeof str === 'string') {
63 | el.setAttribute('title', str)
64 | el.setAttribute('aria-label', str)
65 | } else {
66 | throw new Error('invalid data-label value: ' + str)
67 | }
68 | })
69 | }
70 | if (typeof window !== 'undefined') {
71 | window.l = l
72 | window.userLanguage = userLanguage
73 | window.getCurrentLanguage = getCurrentLanguage
74 | }
75 |
--------------------------------------------------------------------------------
/js/searchbar/placeSuggestionsPlugin.js:
--------------------------------------------------------------------------------
1 | var searchbarPlugins = require('searchbar/searchbarPlugins.js')
2 | var searchbarUtils = require('searchbar/searchbarUtils.js')
3 |
4 | function showPlaceSuggestions (text, input, event, container) {
5 | // use the current tab's url for history suggestions, or the previous tab if the current tab is empty
6 | var url = tabs.get(tabs.getSelected()).url
7 |
8 | if (!url || url === 'about:blank') {
9 | var previousTab = tabs.getAtIndex(tabs.getIndex(tabs.getSelected()) - 1)
10 | if (previousTab) {
11 | url = previousTab.url
12 | }
13 | }
14 |
15 | bookmarks.getPlaceSuggestions(url, function (results) {
16 | empty(container)
17 |
18 | var tabList = tabs.get().map(function (tab) {
19 | return tab.url
20 | })
21 |
22 | results = results.filter(function (item) {
23 | return tabList.indexOf(item.url) === -1
24 | })
25 |
26 | results.slice(0, 4).forEach(function (result) {
27 | var item = searchbarUtils.createItem({
28 | title: urlParser.prettyURL(result.url),
29 | secondaryText: searchbarUtils.getRealTitle(result.title),
30 | url: result.url,
31 | delete: function () {
32 | bookmarks.deleteHistory(result.url)
33 | }
34 | })
35 |
36 | container.appendChild(item)
37 | })
38 | })
39 | }
40 |
41 | searchbarPlugins.register('placeSuggestions', {
42 | index: 1,
43 | trigger: function (text) {
44 | return !text
45 | },
46 | showResults: showPlaceSuggestions
47 | })
48 |
49 | // when we get keywords data from the page, we show those results in the searchbar
50 |
51 | webviews.bindIPC('keywordsData', function (webview, tabId, args) {
52 | var data = args[0]
53 |
54 | var itemsCt = 0
55 | var itemsShown = []
56 |
57 | var container = searchbarPlugins.getContainer('searchSuggestions')
58 |
59 | data.entities.forEach(function (item, index) {
60 | // ignore one-word items, they're usually useless
61 | if (!/\s/g.test(item.trim())) {
62 | return
63 | }
64 |
65 | if (itemsCt >= 5 || itemsShown.indexOf(item.trim()) !== -1) {
66 | return
67 | }
68 |
69 | var div = searchbarUtils.createItem({
70 | icon: 'fa-search',
71 | title: item,
72 | url: item,
73 | classList: ['iadata-onfocus']
74 | })
75 |
76 | container.appendChild(div)
77 |
78 | itemsCt++
79 | itemsShown.push(item.trim())
80 | })
81 | })
82 |
--------------------------------------------------------------------------------
/ext/readability-master/test/test-pages/qq/expected.html:
--------------------------------------------------------------------------------
1 |
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
3 |
Secondary header
4 |
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
5 |
Secondary header
6 |
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Das in der iOS-Version bereits enthaltene TOTP-Feature ist nun auch für OS X 10.10 verfügbar. Zudem gibt es neue Zusatzfelder in der Datenbank und weitere Verbesserungen.
Zur TOTP-Nutzung muss zunächst ein Startwert an 1Password übergeben werden. Das geht unter anderem per QR-Code, den die App über ein neues Scanfenster selbst einlesen kann – etwa aus dem Webbrowser. Eine Einführung in die Technik gibt ein kurzes Video. Die TOTP-Unterstützung in 1Password erlaubt es, auf ein zusätzliches Gerät (z.B. ein iPhone) neben dem Mac zu verzichten, das den Code liefert – was allerdings auch die Sicherheit verringert, weil es keinen "echten" zweiten Faktor mehr gibt.
12 |
Update 5.3 des Passwortmanagers liefert auch noch weitere Verbesserungen. So gibt es die Möglichkeit, FaceTime-Audio- oder Skype-Anrufe aus 1Password zu starten, die Zahl der Zusatzfelder in der Datenbank wurde erweitert und der Umgang mit unterschiedlichen Zeitzonen klappt besser. Die Engine zur Passworteingabe im Browser soll beschleunigt worden sein.
13 |
1Password kostet aktuell knapp 50 Euro im Mac App Store und setzt in seiner aktuellen Version mindestens OS X 10.10 voraus. (bsc)
14 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
3 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
4 |
14 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
15 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
16 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
17 |
18 |
--------------------------------------------------------------------------------
/js/searchbar/openTabsPlugin.js:
--------------------------------------------------------------------------------
1 | var browserUI = require('api-wrapper.js')
2 | var searchbarPlugins = require('searchbar/searchbarPlugins.js')
3 | var searchbarUtils = require('searchbar/searchbarUtils.js')
4 |
5 | var stringScore = require('string_score')
6 |
7 | var searchOpenTabs = function (text, input, event, container) {
8 | empty(container)
9 |
10 | var matches = []
11 | var searchText = text.toLowerCase()
12 | var currentTab = currentTask.tabs.getSelected()
13 |
14 | tasks.get().forEach(function (task) {
15 | task.tabs.get().forEach(function (tab) {
16 | if (tab.id === currentTab || !tab.title || tab.url === 'about:blank') {
17 | return
18 | }
19 |
20 | var tabUrl = urlParser.basicURL(tab.url) // don't search protocols
21 |
22 | var exactMatch = tab.title.toLowerCase().indexOf(searchText) !== -1 || tabUrl.toLowerCase().indexOf(searchText) !== -1
23 | var fuzzyTitleScore = tab.title.substring(0, 50).score(text, 0.5)
24 | var fuzzyUrlScore = tabUrl.score(text, 0.5)
25 |
26 | if (exactMatch || fuzzyTitleScore > 0.4 || fuzzyUrlScore > 0.4) {
27 | matches.push({
28 | task: task,
29 | tab: tab,
30 | score: fuzzyTitleScore + fuzzyUrlScore
31 | })
32 | }
33 | })
34 | })
35 |
36 | if (matches.length === 0) {
37 | return
38 | }
39 |
40 | var finalMatches = matches.sort(function (a, b) {
41 | if (a.task.id === currentTask.id) {
42 | a.score += 0.2
43 | }
44 | if (b.task.id === currentTask.id) {
45 | b.score += 0.2
46 | }
47 | return b.score - a.score
48 | }).slice(0, 2)
49 |
50 | finalMatches.forEach(function (match) {
51 | var data = {
52 | icon: 'fa-external-link-square',
53 | title: match.tab.title,
54 | secondaryText: urlParser.basicURL(match.tab.url)
55 | }
56 |
57 | if (match.task.id !== currentTask.id) {
58 | var taskName = match.task.name || l('taskN').replace('%n', (tasks.getIndex(match.task.id) + 1))
59 | data.metadata = [taskName]
60 | }
61 |
62 | var item = searchbarUtils.createItem(data)
63 |
64 | item.addEventListener('click', function () {
65 | // if we created a new tab but are switching away from it, destroy the current (empty) tab
66 | var currentTabUrl = tabs.get(tabs.getSelected()).url
67 | if (!currentTabUrl || currentTabUrl === 'about:blank') {
68 | browserUI.closeTab(tabs.getSelected())
69 | }
70 |
71 | if (match.task.id !== currentTask.id) {
72 | browserUI.switchToTask(match.task.id)
73 | }
74 |
75 | browserUI.switchToTab(match.tab.id)
76 | })
77 |
78 | container.appendChild(item)
79 | })
80 |
81 | searchbarPlugins.addResults(finalMatches.length)
82 | }
83 |
84 | searchbarPlugins.register('openTabs', {
85 | index: 4,
86 | trigger: function (text) {
87 | return text.length > 2
88 | },
89 | showResults: searchOpenTabs
90 | })
91 |
--------------------------------------------------------------------------------
/js/pdfViewer.js:
--------------------------------------------------------------------------------
1 | /* handles viewing pdf files using pdf.js. Recieves events from main.js will-download */
2 |
3 | var browserUI = require('api-wrapper.js')
4 |
5 | var PDFViewer = {
6 | url: {
7 | base: 'file://' + __dirname + '/pages/pdfViewer/index.html',
8 | queryString: '?url=%l'
9 | },
10 | isPDFViewer: function (tabId) {
11 | return tabs.get(tabId).url.startsWith(PDFViewer.url.base)
12 | },
13 | printPDF: function (viewerTabId) {
14 | if (!PDFViewer.isPDFViewer(viewerTabId)) {
15 | throw new Error("attempting to print in a tab that isn't a PDF viewer")
16 | }
17 |
18 | webviews.get(viewerTabId).executeJavaScript('parentProcessActions.printPDF()', false)
19 | },
20 | savePDF: function (viewerTabId) {
21 | if (!PDFViewer.isPDFViewer(viewerTabId)) {
22 | throw new Error("attempting to save in a tab that isn't a PDF viewer")
23 | }
24 |
25 | webviews.get(viewerTabId).executeJavaScript('parentProcessActions.downloadPDF()', false)
26 | },
27 | startFindInPage: function (viewerTabId) {
28 | if (!PDFViewer.isPDFViewer(viewerTabId)) {
29 | throw new Error("attempting to call startFindInPage in a tab that isn't a PDF viewer")
30 | }
31 |
32 | webviews.get(viewerTabId).executeJavaScript('parentProcessActions.startFindInPage()', false)
33 | },
34 | endFindInPage: function (viewerTabId) {
35 | if (!PDFViewer.isPDFViewer(viewerTabId)) {
36 | throw new Error("attempting to call endFindInPage in a tab that isn't a PDF viewer")
37 | }
38 |
39 | webviews.get(viewerTabId).executeJavaScript('parentProcessActions.endFindInPage()', false)
40 | },
41 | handlePDFOpenEvent: function (event, data) {
42 | var PDFurl = PDFViewer.url.base + PDFViewer.url.queryString.replace('%l', encodeURIComponent(data.url))
43 |
44 | // we don't know which tab the event came from, so we loop through each tab to find out.
45 |
46 | tabs.get().forEach(function (tab) {
47 | var webview = webviews.get(tab.id)
48 | if (webview && webview.id === data.webContentsId) {
49 | browserUI.navigate(tab.id, PDFurl)
50 | }
51 | })
52 | }
53 | }
54 |
55 | ipc.on('openPDF', PDFViewer.handlePDFOpenEvent)
56 |
57 | /*
58 | migrate legacy bookmarked PDFs to the new viewer URL
59 | TODO remove this in a future version
60 | */
61 |
62 | var legacyPDFViewerURL = 'file://' + __dirname + '/pdfjs/web/viewer.html?url='
63 |
64 | db.transaction('rw', db.places, function () {
65 | db.places.where('url').startsWith(legacyPDFViewerURL).each(function (item) {
66 | var oldItemURL = item.url
67 |
68 | var pdfBaseURL = oldItemURL.replace(legacyPDFViewerURL, '')
69 | var newViewerURL = PDFViewer.url.base + PDFViewer.url.queryString.replace('%l', encodeURIComponent(pdfBaseURL))
70 |
71 | item.url = newViewerURL
72 |
73 | db.places.put(item).then(function () {
74 | db.places.where('url').equals(oldItemURL).delete()
75 | })
76 | })
77 | })
78 |
--------------------------------------------------------------------------------
/ext/readability-master/test/test-pages/svg-parsing/source.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SVG parsing
5 |
6 |
7 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
8 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
9 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
10 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
11 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
12 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
13 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
14 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
15 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
16 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
17 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
18 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
19 |
25 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
26 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
27 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
28 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
29 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
30 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
31 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
32 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
33 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
34 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
35 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
36 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
37 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
38 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
39 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
40 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
41 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
42 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Un troisième Français a été tué dans le tremblement de terre samedi au Népal, emporté par une avalanche, a déclaré jeudi le ministre des Affaires étrangères. Les autorités françaises sont toujours sans nouvelles «d’encore plus de 200» personnes. «Pour certains d’entre eux on est très interrogatif», a ajouté Laurent Fabius. Il accueillait à Roissy un premier avion spécial ramenant des rescapés. L’Airbus A350 affrété par les autorités françaises s’est posé peu avant 5h45 avec à son bord 206 passagers, dont 12 enfants et 26 blessés, selon une source du Quai d’Orsay. Quasiment tous sont français, à l’exception d’une quinzaine de ressortissants allemands, suisses, italiens, portugais ou encore turcs. Des psychologues, une équipe médicale et des personnels du centre de crise du Quai d’Orsay les attendent.
7 |
L’appareil, mis à disposition par Airbus, était arrivé à Katmandou mercredi matin avec 55 personnels de santé et humanitaires, ainsi que 25 tonnes de matériel (abris, médicaments, aide alimentaire). Un deuxième avion dépêché par Paris, qui était immobilisé aux Emirats depuis mardi avec 20 tonnes de matériel, est arrivé jeudi à Katmandou, dont le petit aéroport est engorgé par le trafic et l’afflux d’aide humanitaire. Il devait lui aussi ramener des Français, «les plus éprouvés» par la catastrophe et les «plus vulnérables (blessés, familles avec enfants)», selon le ministère des Affaires étrangères.
8 |
2 209 Français ont été localisés sains et saufs tandis que 393 n’ont pas encore pu être joints, selon le Quai d’Orsay. Environ 400 Français ont demandé à être rapatriés dans les vols mis en place par la France.
9 |
Le séisme a fait près de 5 500 morts et touche huit des 28 millions d’habitants du Népal. Des dizaines de milliers de personnes sont sans abri.
Feb. 23, 2015 -- Life-threatening peanut allergies have mysteriously been on the rise in the past decade, with little hope for a cure.
4 |
But a groundbreaking new study may offer a way to stem that rise, while another may offer some hope for those who are already allergic.
5 |
Parents have been told for years to avoid giving foods containing peanuts to babies for fear of triggering an allergy. Now research shows the opposite is true: Feeding babies snacks made with peanuts before their first birthday appears to prevent that from happening.
6 |
The study is published in the New England Journal of Medicine, and it was presented at the annual meeting of the American Academy of Allergy, Asthma and Immunology in Houston. It found that among children at high risk for getting peanut allergies, eating peanut snacks by 11 months of age and continuing to eat them at least three times a week until age 5 cut their chances of becoming allergic by more than 80% compared to kids who avoided peanuts. Those at high risk were already allergic to egg, they had the skin condition eczema, or both.
7 |
Overall, about 3% of kids who ate peanut butter or peanut snacks before their first birthday got an allergy, compared to about 17% of kids who didn’t eat them.
8 |
“I think this study is an astounding and groundbreaking study, really,” says Katie Allen, MD, PhD. She's the director of the Center for Food and Allergy Research at the Murdoch Children’s Research Institute in Melbourne, Australia. Allen was not involved in the research.
9 |
Experts say the research should shift thinking about how kids develop food allergies, and it should change the guidance doctors give to parents.
10 |
Meanwhile, for children and adults who are already allergic to peanuts, another study presented at the same meeting held out hope of a treatment.
11 |
A new skin patch called Viaskin allowed people with peanut allergies to eat tiny amounts of peanuts after they wore it for a year.
12 |
13 |
A Change in Guidelines?
14 |
Allergies to peanuts and other foods are on the rise. In the U.S., more than 2% of people react to peanuts, a 400% increase since 1997. And reactions to peanuts and other tree nuts can be especially severe. Nuts are the main reason people get a life-threatening problem called anaphylaxis.