') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - Dragoon-Lab/dragoon-forums: Scripts and pages for Dragoon Forums · GitHub
Skip to content

Repository files navigation

dragoon-forums

Scripts and pages for Dragoon Forums

Setup Instructions

The current plan is for index.php and config.php to be the .gitignore'd files in the repot.

You will need to copy example-index.php and example-config.php to index.php and config.php respectively, then edit them appropriately for your specific forum. This includes telling your index.php to import a new index page (see next section).

Installation Instructions

  1. Create a new directory <forum_name> on the server inside /home/laits
  2. Clone this repository inside <forum_name> directory.
  3. Switch to install branch git checkout install
  4. Create a symlink <forum_name> in the /home/laits/public_html directory to point to the newly created forum.
  5. Create a MYSQL database. Usually with same name as <forum_name>
  6. In your browswer, Navigate to http://dragoon.asu.edu/ <forum_name> /install
  7. Click on Install Tab
  8. Enter the database details as follows:
  • Type: MYSQL
  • Host: 127.0.0.1
  • Database Name: <database_name>
  • Username: root
  1. Fill out the Administrator details.
  2. Use default Email settings and other settings.
  3. Once the Forum is sucessfully created and config.php is generated, Checkout the Master branch of the dragoon_forum git checkout master
  4. Create a template file or copy from existing one <forum_template>.html inside <forum_name> /styles/prosilver/template/dragoon-forums/ directory
  5. In the parent folder. Create a copy of sample-index.php and rename it to index.php
  6. Edit index.php to point to correct template file <forum_template>.html
  7. You can now navigate to http://dragoon.asu.edu/ <forum_name> to use the forum.

##Index Page (or: How do I customize the home page for a specific class?) Each forum should have its own custom index page. The index will be created by index.php importing an html file from the styles/prosilver/template/dragoon-forums/. Each forum will have its own html file, and all of them will be stored in that aforementioned directory. forum_sample.html is intended to be both an example and also the html for the public forum (aka the sample class).

About

Scripts and pages for Dragoon Forums

Resources

Stars

0 stars

Watchers

10 watching

Forks

Releases

Packages

Contributors

Languages