This repository was archived by the owner on May 12, 2020. It is now read-only.

Latest commit

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

capstone

My project for my CPSC 498 Capstone class. It is a data visualization project involving physics papers. The physics papers data is obtained from Stanford's Large Network Dataset Collection (http://snap.stanford.edu/data/) This project uses vanilla JavaScript, PHP, MySQL, Bootstrap3 (http://getbootstrap.com/), and a data visualization JavaScript library D3 (https://d3js.org/).

####The main point of the application is to determine relationships between different papers; to ask why does this paper cite this other paper. In order to do these comparisons we need relevant data about the papers. The database that contains these papers also contains a abstract file for each paper. These abstract files contain relevant data: When it was published, who contributed to it, the actual abstract of the paper, which journal it was published in, etc.

#####The main application takes in relational data between physics papers, one paper cites a different paper or papers, and creates a relationship between those papers. After going through an arbitrary amount of data rows, the application then plots all the papers on to the graphing area in the web page. This is where the D3 library is used extensively.

D3 has many layouts that developers can use, but the layout used is a force-directed graph. In a force-directed graph we have nodes, gravity, charges, and links. This graph works like a physics-based force graph, where the goal is to achieve a steady state. D3 calculates all of the forces in the graph and where nodes need to be in order to create a steady state.

After a steady state has been achieved the graph stops its calculations. However the graph is natively interactive. By clicking on any node, that node can be dragged around and the graph will recompute a steady state. This is not the main focus of the application, therefore I have added functionality that disables this interactivity.

There is functionality within the application that allows for running the graph step-by-step, running it to a steady state, running it to a steady state without animation (the graph only appears after a resting state occurs). These are to show the versitility of the D3 library, as well as my ability to manipulate D3 to my ends.

The only time information about a paper is grabbed is when the user clicks on a node in the app. This sends an AJAX call to a PHP file that acquires the needed information from a MySQL database. In order to make easier comparisons, the user can double click any node and see its neighbors. After figuring out the neighbors, which may be papers that cite that node, or papers that the node cites, we can start comparisons between papers to figure out why these papers were cited.

About

CAPSTONE

Resources

Stars

0 stars

Watchers

1 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
This repository was archived by the owner on May 12, 2020. It is now read-only.

Latest commit

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

capstone

My project for my CPSC 498 Capstone class. It is a data visualization project involving physics papers. The physics papers data is obtained from Stanford's Large Network Dataset Collection (http://snap.stanford.edu/data/) This project uses vanilla JavaScript, PHP, MySQL, Bootstrap3 (http://getbootstrap.com/), and a data visualization JavaScript library D3 (https://d3js.org/).

####The main point of the application is to determine relationships between different papers; to ask why does this paper cite this other paper. In order to do these comparisons we need relevant data about the papers. The database that contains these papers also contains a abstract file for each paper. These abstract files contain relevant data: When it was published, who contributed to it, the actual abstract of the paper, which journal it was published in, etc.

#####The main application takes in relational data between physics papers, one paper cites a different paper or papers, and creates a relationship between those papers. After going through an arbitrary amount of data rows, the application then plots all the papers on to the graphing area in the web page. This is where the D3 library is used extensively.

D3 has many layouts that developers can use, but the layout used is a force-directed graph. In a force-directed graph we have nodes, gravity, charges, and links. This graph works like a physics-based force graph, where the goal is to achieve a steady state. D3 calculates all of the forces in the graph and where nodes need to be in order to create a steady state.

After a steady state has been achieved the graph stops its calculations. However the graph is natively interactive. By clicking on any node, that node can be dragged around and the graph will recompute a steady state. This is not the main focus of the application, therefore I have added functionality that disables this interactivity.

There is functionality within the application that allows for running the graph step-by-step, running it to a steady state, running it to a steady state without animation (the graph only appears after a resting state occurs). These are to show the versitility of the D3 library, as well as my ability to manipulate D3 to my ends.

The only time information about a paper is grabbed is when the user clicks on a node in the app. This sends an AJAX call to a PHP file that acquires the needed information from a MySQL database. In order to make easier comparisons, the user can double click any node and see its neighbors. After figuring out the neighbors, which may be papers that cite that node, or papers that the node cites, we can start comparisons between papers to figure out why these papers were cited.

About

CAPSTONE

Resources

Stars

0 stars

Watchers

1 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
This repository was archived by the owner on May 12, 2020. It is now read-only.

Latest commit

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

capstone

My project for my CPSC 498 Capstone class. It is a data visualization project involving physics papers. The physics papers data is obtained from Stanford's Large Network Dataset Collection (http://snap.stanford.edu/data/) This project uses vanilla JavaScript, PHP, MySQL, Bootstrap3 (http://getbootstrap.com/), and a data visualization JavaScript library D3 (https://d3js.org/).

####The main point of the application is to determine relationships between different papers; to ask why does this paper cite this other paper. In order to do these comparisons we need relevant data about the papers. The database that contains these papers also contains a abstract file for each paper. These abstract files contain relevant data: When it was published, who contributed to it, the actual abstract of the paper, which journal it was published in, etc.

#####The main application takes in relational data between physics papers, one paper cites a different paper or papers, and creates a relationship between those papers. After going through an arbitrary amount of data rows, the application then plots all the papers on to the graphing area in the web page. This is where the D3 library is used extensively.

D3 has many layouts that developers can use, but the layout used is a force-directed graph. In a force-directed graph we have nodes, gravity, charges, and links. This graph works like a physics-based force graph, where the goal is to achieve a steady state. D3 calculates all of the forces in the graph and where nodes need to be in order to create a steady state.

After a steady state has been achieved the graph stops its calculations. However the graph is natively interactive. By clicking on any node, that node can be dragged around and the graph will recompute a steady state. This is not the main focus of the application, therefore I have added functionality that disables this interactivity.

There is functionality within the application that allows for running the graph step-by-step, running it to a steady state, running it to a steady state without animation (the graph only appears after a resting state occurs). These are to show the versitility of the D3 library, as well as my ability to manipulate D3 to my ends.

The only time information about a paper is grabbed is when the user clicks on a node in the app. This sends an AJAX call to a PHP file that acquires the needed information from a MySQL database. In order to make easier comparisons, the user can double click any node and see its neighbors. After figuring out the neighbors, which may be papers that cite that node, or papers that the node cites, we can start comparisons between papers to figure out why these papers were cited.

About

CAPSTONE

Resources

Stars

0 stars

Watchers

1 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
This repository was archived by the owner on May 12, 2020. It is now read-only.

Latest commit

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

capstone

My project for my CPSC 498 Capstone class. It is a data visualization project involving physics papers. The physics papers data is obtained from Stanford's Large Network Dataset Collection (http://snap.stanford.edu/data/) This project uses vanilla JavaScript, PHP, MySQL, Bootstrap3 (http://getbootstrap.com/), and a data visualization JavaScript library D3 (https://d3js.org/).

####The main point of the application is to determine relationships between different papers; to ask why does this paper cite this other paper. In order to do these comparisons we need relevant data about the papers. The database that contains these papers also contains a abstract file for each paper. These abstract files contain relevant data: When it was published, who contributed to it, the actual abstract of the paper, which journal it was published in, etc.

#####The main application takes in relational data between physics papers, one paper cites a different paper or papers, and creates a relationship between those papers. After going through an arbitrary amount of data rows, the application then plots all the papers on to the graphing area in the web page. This is where the D3 library is used extensively.

D3 has many layouts that developers can use, but the layout used is a force-directed graph. In a force-directed graph we have nodes, gravity, charges, and links. This graph works like a physics-based force graph, where the goal is to achieve a steady state. D3 calculates all of the forces in the graph and where nodes need to be in order to create a steady state.

After a steady state has been achieved the graph stops its calculations. However the graph is natively interactive. By clicking on any node, that node can be dragged around and the graph will recompute a steady state. This is not the main focus of the application, therefore I have added functionality that disables this interactivity.

There is functionality within the application that allows for running the graph step-by-step, running it to a steady state, running it to a steady state without animation (the graph only appears after a resting state occurs). These are to show the versitility of the D3 library, as well as my ability to manipulate D3 to my ends.

The only time information about a paper is grabbed is when the user clicks on a node in the app. This sends an AJAX call to a PHP file that acquires the needed information from a MySQL database. In order to make easier comparisons, the user can double click any node and see its neighbors. After figuring out the neighbors, which may be papers that cite that node, or papers that the node cites, we can start comparisons between papers to figure out why these papers were cited.

About

CAPSTONE

Resources

Stars

0 stars

Watchers

1 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
This repository was archived by the owner on May 12, 2020. It is now read-only.

Latest commit

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

capstone

My project for my CPSC 498 Capstone class. It is a data visualization project involving physics papers. The physics papers data is obtained from Stanford's Large Network Dataset Collection (http://snap.stanford.edu/data/) This project uses vanilla JavaScript, PHP, MySQL, Bootstrap3 (http://getbootstrap.com/), and a data visualization JavaScript library D3 (https://d3js.org/).

####The main point of the application is to determine relationships between different papers; to ask why does this paper cite this other paper. In order to do these comparisons we need relevant data about the papers. The database that contains these papers also contains a abstract file for each paper. These abstract files contain relevant data: When it was published, who contributed to it, the actual abstract of the paper, which journal it was published in, etc.

#####The main application takes in relational data between physics papers, one paper cites a different paper or papers, and creates a relationship between those papers. After going through an arbitrary amount of data rows, the application then plots all the papers on to the graphing area in the web page. This is where the D3 library is used extensively.

D3 has many layouts that developers can use, but the layout used is a force-directed graph. In a force-directed graph we have nodes, gravity, charges, and links. This graph works like a physics-based force graph, where the goal is to achieve a steady state. D3 calculates all of the forces in the graph and where nodes need to be in order to create a steady state.

After a steady state has been achieved the graph stops its calculations. However the graph is natively interactive. By clicking on any node, that node can be dragged around and the graph will recompute a steady state. This is not the main focus of the application, therefore I have added functionality that disables this interactivity.

There is functionality within the application that allows for running the graph step-by-step, running it to a steady state, running it to a steady state without animation (the graph only appears after a resting state occurs). These are to show the versitility of the D3 library, as well as my ability to manipulate D3 to my ends.

The only time information about a paper is grabbed is when the user clicks on a node in the app. This sends an AJAX call to a PHP file that acquires the needed information from a MySQL database. In order to make easier comparisons, the user can double click any node and see its neighbors. After figuring out the neighbors, which may be papers that cite that node, or papers that the node cites, we can start comparisons between papers to figure out why these papers were cited.

About

CAPSTONE

Resources

Stars

0 stars

Watchers

1 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
This repository was archived by the owner on May 12, 2020. It is now read-only.

Latest commit

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

capstone

My project for my CPSC 498 Capstone class. It is a data visualization project involving physics papers. The physics papers data is obtained from Stanford's Large Network Dataset Collection (http://snap.stanford.edu/data/) This project uses vanilla JavaScript, PHP, MySQL, Bootstrap3 (http://getbootstrap.com/), and a data visualization JavaScript library D3 (https://d3js.org/).

####The main point of the application is to determine relationships between different papers; to ask why does this paper cite this other paper. In order to do these comparisons we need relevant data about the papers. The database that contains these papers also contains a abstract file for each paper. These abstract files contain relevant data: When it was published, who contributed to it, the actual abstract of the paper, which journal it was published in, etc.

#####The main application takes in relational data between physics papers, one paper cites a different paper or papers, and creates a relationship between those papers. After going through an arbitrary amount of data rows, the application then plots all the papers on to the graphing area in the web page. This is where the D3 library is used extensively.

D3 has many layouts that developers can use, but the layout used is a force-directed graph. In a force-directed graph we have nodes, gravity, charges, and links. This graph works like a physics-based force graph, where the goal is to achieve a steady state. D3 calculates all of the forces in the graph and where nodes need to be in order to create a steady state.

After a steady state has been achieved the graph stops its calculations. However the graph is natively interactive. By clicking on any node, that node can be dragged around and the graph will recompute a steady state. This is not the main focus of the application, therefore I have added functionality that disables this interactivity.

There is functionality within the application that allows for running the graph step-by-step, running it to a steady state, running it to a steady state without animation (the graph only appears after a resting state occurs). These are to show the versitility of the D3 library, as well as my ability to manipulate D3 to my ends.

The only time information about a paper is grabbed is when the user clicks on a node in the app. This sends an AJAX call to a PHP file that acquires the needed information from a MySQL database. In order to make easier comparisons, the user can double click any node and see its neighbors. After figuring out the neighbors, which may be papers that cite that node, or papers that the node cites, we can start comparisons between papers to figure out why these papers were cited.

About

CAPSTONE

Resources

Stars

0 stars

Watchers

1 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
This repository was archived by the owner on May 12, 2020. It is now read-only.

Latest commit

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

capstone

My project for my CPSC 498 Capstone class. It is a data visualization project involving physics papers. The physics papers data is obtained from Stanford's Large Network Dataset Collection (http://snap.stanford.edu/data/) This project uses vanilla JavaScript, PHP, MySQL, Bootstrap3 (http://getbootstrap.com/), and a data visualization JavaScript library D3 (https://d3js.org/).

####The main point of the application is to determine relationships between different papers; to ask why does this paper cite this other paper. In order to do these comparisons we need relevant data about the papers. The database that contains these papers also contains a abstract file for each paper. These abstract files contain relevant data: When it was published, who contributed to it, the actual abstract of the paper, which journal it was published in, etc.

#####The main application takes in relational data between physics papers, one paper cites a different paper or papers, and creates a relationship between those papers. After going through an arbitrary amount of data rows, the application then plots all the papers on to the graphing area in the web page. This is where the D3 library is used extensively.

D3 has many layouts that developers can use, but the layout used is a force-directed graph. In a force-directed graph we have nodes, gravity, charges, and links. This graph works like a physics-based force graph, where the goal is to achieve a steady state. D3 calculates all of the forces in the graph and where nodes need to be in order to create a steady state.

After a steady state has been achieved the graph stops its calculations. However the graph is natively interactive. By clicking on any node, that node can be dragged around and the graph will recompute a steady state. This is not the main focus of the application, therefore I have added functionality that disables this interactivity.

There is functionality within the application that allows for running the graph step-by-step, running it to a steady state, running it to a steady state without animation (the graph only appears after a resting state occurs). These are to show the versitility of the D3 library, as well as my ability to manipulate D3 to my ends.

The only time information about a paper is grabbed is when the user clicks on a node in the app. This sends an AJAX call to a PHP file that acquires the needed information from a MySQL database. In order to make easier comparisons, the user can double click any node and see its neighbors. After figuring out the neighbors, which may be papers that cite that node, or papers that the node cites, we can start comparisons between papers to figure out why these papers were cited.

About

CAPSTONE

Resources

Stars

0 stars

Watchers

1 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
This repository was archived by the owner on May 12, 2020. It is now read-only.

Latest commit

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

capstone

My project for my CPSC 498 Capstone class. It is a data visualization project involving physics papers. The physics papers data is obtained from Stanford's Large Network Dataset Collection (http://snap.stanford.edu/data/) This project uses vanilla JavaScript, PHP, MySQL, Bootstrap3 (http://getbootstrap.com/), and a data visualization JavaScript library D3 (https://d3js.org/).

####The main point of the application is to determine relationships between different papers; to ask why does this paper cite this other paper. In order to do these comparisons we need relevant data about the papers. The database that contains these papers also contains a abstract file for each paper. These abstract files contain relevant data: When it was published, who contributed to it, the actual abstract of the paper, which journal it was published in, etc.

#####The main application takes in relational data between physics papers, one paper cites a different paper or papers, and creates a relationship between those papers. After going through an arbitrary amount of data rows, the application then plots all the papers on to the graphing area in the web page. This is where the D3 library is used extensively.

D3 has many layouts that developers can use, but the layout used is a force-directed graph. In a force-directed graph we have nodes, gravity, charges, and links. This graph works like a physics-based force graph, where the goal is to achieve a steady state. D3 calculates all of the forces in the graph and where nodes need to be in order to create a steady state.

After a steady state has been achieved the graph stops its calculations. However the graph is natively interactive. By clicking on any node, that node can be dragged around and the graph will recompute a steady state. This is not the main focus of the application, therefore I have added functionality that disables this interactivity.

There is functionality within the application that allows for running the graph step-by-step, running it to a steady state, running it to a steady state without animation (the graph only appears after a resting state occurs). These are to show the versitility of the D3 library, as well as my ability to manipulate D3 to my ends.

The only time information about a paper is grabbed is when the user clicks on a node in the app. This sends an AJAX call to a PHP file that acquires the needed information from a MySQL database. In order to make easier comparisons, the user can double click any node and see its neighbors. After figuring out the neighbors, which may be papers that cite that node, or papers that the node cites, we can start comparisons between papers to figure out why these papers were cited.

About

CAPSTONE

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages