Repository files navigation

Falcor Build StatusCoverage StatusbitHound Score

Developer Preview

This release is a developer preview. We are looking for community help to track down and fix bugs. We are also looking for help integrating with existing MVC frameworks, as well as ports to other platforms.

Important Note for Webpack Users

If you're including falcor in your app, via npm and require('falcor'), and you're building a browser bundle for your app with Webpack, you'll need to add an alias entry for the 'rx' module in your webpack config, to avoid this RxJS bug: 'Reactive-Extensions/RxJS#832'. You may already have such an entry, if you're using RxJS already. An example is below:

In webpack.config.js:

module.exports={resolve: {alias: {// Workaround https://github.com/Reactive-Extensions/RxJS/issues/832, until it's fixed'rx$': <pathtorx/dist/rx.jsfile>}}};

Getting Started

You can check out a working example server for a Netflix-like application here right now. Alternately you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL /model.json. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at /model.json. The JSON resource will contain the following contents:

{"greeting": "Hello World"}

Normally Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However in this simple tutorial the Router will simply return static data for a single key.

First we create a folder for our application server.

mkdir falcor-app-server
cd falcor-app-server
npm init

Now we install the falcor Router.

npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

npm install express --save
npm install falcor-express --save

Now we create an index.js file with the following contents:

// index.jsvarfalcorExpress=require('falcor-express');varRouter=require('falcor-router');varexpress=require('express');varapp=express();app.use('/model.json',falcorExpress.dataSourceRoute(function(req,res){// create a Virtual JSON resource with single key ("greeting")returnnewRouter([{// match a request for the key "greeting"route: "greeting",// respond with a PathValue with the value of "Hello World."get: function(){return{path:["greeting"],value: "Hello World"};}}]);}));// serve static files from current directoryapp.use(express.static(__dirname+'/'));varserver=app.listen(3000);

Now we run the server, which will listen on port 3000 for requests for /model.json.

node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.

Now create an index.html file with the following contents:

<!-- index.html --><html><head><!-- Do _not_ rely on this URL in production. Use only during development. --><scriptsrc="https://netflix.github.io/falcor/build/falcor.browser.js"></script><script>varmodel=newfalcor.Model({source: newfalcor.HttpDataSource('/model.json')});// retrieve the "greeting" key from the root of the Virtual JSON resourcemodel.get("greeting").then(function(response){document.write(response.json.greeting);});</script></head><body></body></html>

Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:

Hello World

Additional Resources

For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.

For API documentation, go here

For a working example of a Router, check out the falcor-router-demo.

For questions and discussion, use Stack Overflow.

About

A JavaScript library for efficient data fetching

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Falcor Build StatusCoverage StatusbitHound Score

Developer Preview

This release is a developer preview. We are looking for community help to track down and fix bugs. We are also looking for help integrating with existing MVC frameworks, as well as ports to other platforms.

Important Note for Webpack Users

If you're including falcor in your app, via npm and require('falcor'), and you're building a browser bundle for your app with Webpack, you'll need to add an alias entry for the 'rx' module in your webpack config, to avoid this RxJS bug: 'Reactive-Extensions/RxJS#832'. You may already have such an entry, if you're using RxJS already. An example is below:

In webpack.config.js:

module.exports={resolve: {alias: {// Workaround https://github.com/Reactive-Extensions/RxJS/issues/832, until it's fixed'rx$': <pathtorx/dist/rx.jsfile>}}};

Getting Started

You can check out a working example server for a Netflix-like application here right now. Alternately you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL /model.json. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at /model.json. The JSON resource will contain the following contents:

{"greeting": "Hello World"}

Normally Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However in this simple tutorial the Router will simply return static data for a single key.

First we create a folder for our application server.

mkdir falcor-app-server
cd falcor-app-server
npm init

Now we install the falcor Router.

npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

npm install express --save
npm install falcor-express --save

Now we create an index.js file with the following contents:

// index.jsvarfalcorExpress=require('falcor-express');varRouter=require('falcor-router');varexpress=require('express');varapp=express();app.use('/model.json',falcorExpress.dataSourceRoute(function(req,res){// create a Virtual JSON resource with single key ("greeting")returnnewRouter([{// match a request for the key "greeting"route: "greeting",// respond with a PathValue with the value of "Hello World."get: function(){return{path:["greeting"],value: "Hello World"};}}]);}));// serve static files from current directoryapp.use(express.static(__dirname+'/'));varserver=app.listen(3000);

Now we run the server, which will listen on port 3000 for requests for /model.json.

node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.

Now create an index.html file with the following contents:

<!-- index.html --><html><head><!-- Do _not_ rely on this URL in production. Use only during development. --><scriptsrc="https://netflix.github.io/falcor/build/falcor.browser.js"></script><script>varmodel=newfalcor.Model({source: newfalcor.HttpDataSource('/model.json')});// retrieve the "greeting" key from the root of the Virtual JSON resourcemodel.get("greeting").then(function(response){document.write(response.json.greeting);});</script></head><body></body></html>

Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:

Hello World

Additional Resources

For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.

For API documentation, go here

For a working example of a Router, check out the falcor-router-demo.

For questions and discussion, use Stack Overflow.

About

A JavaScript library for efficient data fetching

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Falcor Build StatusCoverage StatusbitHound Score

Developer Preview

This release is a developer preview. We are looking for community help to track down and fix bugs. We are also looking for help integrating with existing MVC frameworks, as well as ports to other platforms.

Important Note for Webpack Users

If you're including falcor in your app, via npm and require('falcor'), and you're building a browser bundle for your app with Webpack, you'll need to add an alias entry for the 'rx' module in your webpack config, to avoid this RxJS bug: 'Reactive-Extensions/RxJS#832'. You may already have such an entry, if you're using RxJS already. An example is below:

In webpack.config.js:

module.exports={resolve: {alias: {// Workaround https://github.com/Reactive-Extensions/RxJS/issues/832, until it's fixed'rx$': <pathtorx/dist/rx.jsfile>}}};

Getting Started

You can check out a working example server for a Netflix-like application here right now. Alternately you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL /model.json. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at /model.json. The JSON resource will contain the following contents:

{"greeting": "Hello World"}

Normally Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However in this simple tutorial the Router will simply return static data for a single key.

First we create a folder for our application server.

mkdir falcor-app-server
cd falcor-app-server
npm init

Now we install the falcor Router.

npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

npm install express --save
npm install falcor-express --save

Now we create an index.js file with the following contents:

// index.jsvarfalcorExpress=require('falcor-express');varRouter=require('falcor-router');varexpress=require('express');varapp=express();app.use('/model.json',falcorExpress.dataSourceRoute(function(req,res){// create a Virtual JSON resource with single key ("greeting")returnnewRouter([{// match a request for the key "greeting"route: "greeting",// respond with a PathValue with the value of "Hello World."get: function(){return{path:["greeting"],value: "Hello World"};}}]);}));// serve static files from current directoryapp.use(express.static(__dirname+'/'));varserver=app.listen(3000);

Now we run the server, which will listen on port 3000 for requests for /model.json.

node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.

Now create an index.html file with the following contents:

<!-- index.html --><html><head><!-- Do _not_ rely on this URL in production. Use only during development. --><scriptsrc="https://netflix.github.io/falcor/build/falcor.browser.js"></script><script>varmodel=newfalcor.Model({source: newfalcor.HttpDataSource('/model.json')});// retrieve the "greeting" key from the root of the Virtual JSON resourcemodel.get("greeting").then(function(response){document.write(response.json.greeting);});</script></head><body></body></html>

Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:

Hello World

Additional Resources

For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.

For API documentation, go here

For a working example of a Router, check out the falcor-router-demo.

For questions and discussion, use Stack Overflow.

About

A JavaScript library for efficient data fetching

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Falcor Build StatusCoverage StatusbitHound Score

Developer Preview

This release is a developer preview. We are looking for community help to track down and fix bugs. We are also looking for help integrating with existing MVC frameworks, as well as ports to other platforms.

Important Note for Webpack Users

If you're including falcor in your app, via npm and require('falcor'), and you're building a browser bundle for your app with Webpack, you'll need to add an alias entry for the 'rx' module in your webpack config, to avoid this RxJS bug: 'Reactive-Extensions/RxJS#832'. You may already have such an entry, if you're using RxJS already. An example is below:

In webpack.config.js:

module.exports={resolve: {alias: {// Workaround https://github.com/Reactive-Extensions/RxJS/issues/832, until it's fixed'rx$': <pathtorx/dist/rx.jsfile>}}};

Getting Started

You can check out a working example server for a Netflix-like application here right now. Alternately you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL /model.json. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at /model.json. The JSON resource will contain the following contents:

{"greeting": "Hello World"}

Normally Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However in this simple tutorial the Router will simply return static data for a single key.

First we create a folder for our application server.

mkdir falcor-app-server
cd falcor-app-server
npm init

Now we install the falcor Router.

npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

npm install express --save
npm install falcor-express --save

Now we create an index.js file with the following contents:

// index.jsvarfalcorExpress=require('falcor-express');varRouter=require('falcor-router');varexpress=require('express');varapp=express();app.use('/model.json',falcorExpress.dataSourceRoute(function(req,res){// create a Virtual JSON resource with single key ("greeting")returnnewRouter([{// match a request for the key "greeting"route: "greeting",// respond with a PathValue with the value of "Hello World."get: function(){return{path:["greeting"],value: "Hello World"};}}]);}));// serve static files from current directoryapp.use(express.static(__dirname+'/'));varserver=app.listen(3000);

Now we run the server, which will listen on port 3000 for requests for /model.json.

node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.

Now create an index.html file with the following contents:

<!-- index.html --><html><head><!-- Do _not_ rely on this URL in production. Use only during development. --><scriptsrc="https://netflix.github.io/falcor/build/falcor.browser.js"></script><script>varmodel=newfalcor.Model({source: newfalcor.HttpDataSource('/model.json')});// retrieve the "greeting" key from the root of the Virtual JSON resourcemodel.get("greeting").then(function(response){document.write(response.json.greeting);});</script></head><body></body></html>

Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:

Hello World

Additional Resources

For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.

For API documentation, go here

For a working example of a Router, check out the falcor-router-demo.

For questions and discussion, use Stack Overflow.

About

A JavaScript library for efficient data fetching

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Falcor Build StatusCoverage StatusbitHound Score

Developer Preview

This release is a developer preview. We are looking for community help to track down and fix bugs. We are also looking for help integrating with existing MVC frameworks, as well as ports to other platforms.

Important Note for Webpack Users

If you're including falcor in your app, via npm and require('falcor'), and you're building a browser bundle for your app with Webpack, you'll need to add an alias entry for the 'rx' module in your webpack config, to avoid this RxJS bug: 'Reactive-Extensions/RxJS#832'. You may already have such an entry, if you're using RxJS already. An example is below:

In webpack.config.js:

module.exports={resolve: {alias: {// Workaround https://github.com/Reactive-Extensions/RxJS/issues/832, until it's fixed'rx$': <pathtorx/dist/rx.jsfile>}}};

Getting Started

You can check out a working example server for a Netflix-like application here right now. Alternately you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL /model.json. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at /model.json. The JSON resource will contain the following contents:

{"greeting": "Hello World"}

Normally Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However in this simple tutorial the Router will simply return static data for a single key.

First we create a folder for our application server.

mkdir falcor-app-server
cd falcor-app-server
npm init

Now we install the falcor Router.

npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

npm install express --save
npm install falcor-express --save

Now we create an index.js file with the following contents:

// index.jsvarfalcorExpress=require('falcor-express');varRouter=require('falcor-router');varexpress=require('express');varapp=express();app.use('/model.json',falcorExpress.dataSourceRoute(function(req,res){// create a Virtual JSON resource with single key ("greeting")returnnewRouter([{// match a request for the key "greeting"route: "greeting",// respond with a PathValue with the value of "Hello World."get: function(){return{path:["greeting"],value: "Hello World"};}}]);}));// serve static files from current directoryapp.use(express.static(__dirname+'/'));varserver=app.listen(3000);

Now we run the server, which will listen on port 3000 for requests for /model.json.

node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.

Now create an index.html file with the following contents:

<!-- index.html --><html><head><!-- Do _not_ rely on this URL in production. Use only during development. --><scriptsrc="https://netflix.github.io/falcor/build/falcor.browser.js"></script><script>varmodel=newfalcor.Model({source: newfalcor.HttpDataSource('/model.json')});// retrieve the "greeting" key from the root of the Virtual JSON resourcemodel.get("greeting").then(function(response){document.write(response.json.greeting);});</script></head><body></body></html>

Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:

Hello World

Additional Resources

For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.

For API documentation, go here

For a working example of a Router, check out the falcor-router-demo.

For questions and discussion, use Stack Overflow.

About

A JavaScript library for efficient data fetching

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Falcor Build StatusCoverage StatusbitHound Score

Developer Preview

This release is a developer preview. We are looking for community help to track down and fix bugs. We are also looking for help integrating with existing MVC frameworks, as well as ports to other platforms.

Important Note for Webpack Users

If you're including falcor in your app, via npm and require('falcor'), and you're building a browser bundle for your app with Webpack, you'll need to add an alias entry for the 'rx' module in your webpack config, to avoid this RxJS bug: 'Reactive-Extensions/RxJS#832'. You may already have such an entry, if you're using RxJS already. An example is below:

In webpack.config.js:

module.exports={resolve: {alias: {// Workaround https://github.com/Reactive-Extensions/RxJS/issues/832, until it's fixed'rx$': <pathtorx/dist/rx.jsfile>}}};

Getting Started

You can check out a working example server for a Netflix-like application here right now. Alternately you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL /model.json. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at /model.json. The JSON resource will contain the following contents:

{"greeting": "Hello World"}

Normally Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However in this simple tutorial the Router will simply return static data for a single key.

First we create a folder for our application server.

mkdir falcor-app-server
cd falcor-app-server
npm init

Now we install the falcor Router.

npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

npm install express --save
npm install falcor-express --save

Now we create an index.js file with the following contents:

// index.jsvarfalcorExpress=require('falcor-express');varRouter=require('falcor-router');varexpress=require('express');varapp=express();app.use('/model.json',falcorExpress.dataSourceRoute(function(req,res){// create a Virtual JSON resource with single key ("greeting")returnnewRouter([{// match a request for the key "greeting"route: "greeting",// respond with a PathValue with the value of "Hello World."get: function(){return{path:["greeting"],value: "Hello World"};}}]);}));// serve static files from current directoryapp.use(express.static(__dirname+'/'));varserver=app.listen(3000);

Now we run the server, which will listen on port 3000 for requests for /model.json.

node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.

Now create an index.html file with the following contents:

<!-- index.html --><html><head><!-- Do _not_ rely on this URL in production. Use only during development. --><scriptsrc="https://netflix.github.io/falcor/build/falcor.browser.js"></script><script>varmodel=newfalcor.Model({source: newfalcor.HttpDataSource('/model.json')});// retrieve the "greeting" key from the root of the Virtual JSON resourcemodel.get("greeting").then(function(response){document.write(response.json.greeting);});</script></head><body></body></html>

Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:

Hello World

Additional Resources

For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.

For API documentation, go here

For a working example of a Router, check out the falcor-router-demo.

For questions and discussion, use Stack Overflow.

About

A JavaScript library for efficient data fetching

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Falcor Build StatusCoverage StatusbitHound Score

Developer Preview

This release is a developer preview. We are looking for community help to track down and fix bugs. We are also looking for help integrating with existing MVC frameworks, as well as ports to other platforms.

Important Note for Webpack Users

If you're including falcor in your app, via npm and require('falcor'), and you're building a browser bundle for your app with Webpack, you'll need to add an alias entry for the 'rx' module in your webpack config, to avoid this RxJS bug: 'Reactive-Extensions/RxJS#832'. You may already have such an entry, if you're using RxJS already. An example is below:

In webpack.config.js:

module.exports={resolve: {alias: {// Workaround https://github.com/Reactive-Extensions/RxJS/issues/832, until it's fixed'rx$': <pathtorx/dist/rx.jsfile>}}};

Getting Started

You can check out a working example server for a Netflix-like application here right now. Alternately you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL /model.json. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at /model.json. The JSON resource will contain the following contents:

{"greeting": "Hello World"}

Normally Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However in this simple tutorial the Router will simply return static data for a single key.

First we create a folder for our application server.

mkdir falcor-app-server
cd falcor-app-server
npm init

Now we install the falcor Router.

npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

npm install express --save
npm install falcor-express --save

Now we create an index.js file with the following contents:

// index.jsvarfalcorExpress=require('falcor-express');varRouter=require('falcor-router');varexpress=require('express');varapp=express();app.use('/model.json',falcorExpress.dataSourceRoute(function(req,res){// create a Virtual JSON resource with single key ("greeting")returnnewRouter([{// match a request for the key "greeting"route: "greeting",// respond with a PathValue with the value of "Hello World."get: function(){return{path:["greeting"],value: "Hello World"};}}]);}));// serve static files from current directoryapp.use(express.static(__dirname+'/'));varserver=app.listen(3000);

Now we run the server, which will listen on port 3000 for requests for /model.json.

node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.

Now create an index.html file with the following contents:

<!-- index.html --><html><head><!-- Do _not_ rely on this URL in production. Use only during development. --><scriptsrc="https://netflix.github.io/falcor/build/falcor.browser.js"></script><script>varmodel=newfalcor.Model({source: newfalcor.HttpDataSource('/model.json')});// retrieve the "greeting" key from the root of the Virtual JSON resourcemodel.get("greeting").then(function(response){document.write(response.json.greeting);});</script></head><body></body></html>

Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:

Hello World

Additional Resources

For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.

For API documentation, go here

For a working example of a Router, check out the falcor-router-demo.

For questions and discussion, use Stack Overflow.

About

A JavaScript library for efficient data fetching

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Falcor Build StatusCoverage StatusbitHound Score

Developer Preview

This release is a developer preview. We are looking for community help to track down and fix bugs. We are also looking for help integrating with existing MVC frameworks, as well as ports to other platforms.

Important Note for Webpack Users

If you're including falcor in your app, via npm and require('falcor'), and you're building a browser bundle for your app with Webpack, you'll need to add an alias entry for the 'rx' module in your webpack config, to avoid this RxJS bug: 'Reactive-Extensions/RxJS#832'. You may already have such an entry, if you're using RxJS already. An example is below:

In webpack.config.js:

module.exports={resolve: {alias: {// Workaround https://github.com/Reactive-Extensions/RxJS/issues/832, until it's fixed'rx$': <pathtorx/dist/rx.jsfile>}}};

Getting Started

You can check out a working example server for a Netflix-like application here right now. Alternately you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL /model.json. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at /model.json. The JSON resource will contain the following contents:

{"greeting": "Hello World"}

Normally Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However in this simple tutorial the Router will simply return static data for a single key.

First we create a folder for our application server.

mkdir falcor-app-server
cd falcor-app-server
npm init

Now we install the falcor Router.

npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

npm install express --save
npm install falcor-express --save

Now we create an index.js file with the following contents:

// index.jsvarfalcorExpress=require('falcor-express');varRouter=require('falcor-router');varexpress=require('express');varapp=express();app.use('/model.json',falcorExpress.dataSourceRoute(function(req,res){// create a Virtual JSON resource with single key ("greeting")returnnewRouter([{// match a request for the key "greeting"route: "greeting",// respond with a PathValue with the value of "Hello World."get: function(){return{path:["greeting"],value: "Hello World"};}}]);}));// serve static files from current directoryapp.use(express.static(__dirname+'/'));varserver=app.listen(3000);

Now we run the server, which will listen on port 3000 for requests for /model.json.

node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.

Now create an index.html file with the following contents:

<!-- index.html --><html><head><!-- Do _not_ rely on this URL in production. Use only during development. --><scriptsrc="https://netflix.github.io/falcor/build/falcor.browser.js"></script><script>varmodel=newfalcor.Model({source: newfalcor.HttpDataSource('/model.json')});// retrieve the "greeting" key from the root of the Virtual JSON resourcemodel.get("greeting").then(function(response){document.write(response.json.greeting);});</script></head><body></body></html>

Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:

Hello World

Additional Resources

For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.

For API documentation, go here

For a working example of a Router, check out the falcor-router-demo.

For questions and discussion, use Stack Overflow.

About

A JavaScript library for efficient data fetching

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages