toddgeist edited this page May 30, 2012 · 9 revisions

##How to

Rather longish very rough video, http://blip.tv/geist-interactive-tv/koder-1-6106459

You need to setup your projects with a standard structure. If you have a project called "Project" you should put two folders in that Folder. Name one "src" and the other "jars". Like so:

/Project /Project/src /Project/jars

Once you have this setup, launch Koder.fp7, and use the Choose Project Folder to select the "Project" folder. This "Points" Koder at your project.

Koder loads all the Jar file it finds in the "jars" folder and it scans the "src" directory for groovy files. When you open Koder you will be able to choose the "Projects" folder. This will load everything in.

You then use the IDE of your choice to create your ScriptMaster functions. Each function should get its own file.

##Special Annotations

Koder looks for doc block annotations to tell it how to name the scriptmaster functions and what params you want with the function. There are also a couple of other tags you can use to set a couple of other options.

###@FileMakerFunctionName FunctionName
specifies the name of the function. Koder also applies an optional prefix to all functions in the same project. Do not include the prefix here.

###@param paramName The name of a parameter. You can include more then one

###@FileMakerIsGui True Scriptmaster has an optional flag that you should set to true if your Function displays any Java UI. This is optional if you don't use include it, it defaults to false

###@FileMakerDoNotBuild True This a convenience flag that tells Koder to leave this function out of the plugin build or the Single Function Register. This useful if you the function is not yet ready to be released, or if it is just a testing function.

##Other Useful Comment Blocks

###Above the line /*----[ above this line is ignored by FileMaker ]----*/
Any code placed ABOVE this line will not be executed by FileMaker. This is very useful when you are working in your IDE, and you need to setup the some variables or objects for debugging in your IDE. When you go back to Koder, anything above this line is ignored

###Below the line /*----[ below this line is ignored by FileMaker ]----*/
Any code placed BELOW this line will not be executed by FileMaker. This useful if you want to println or print out vars in your IDE, but not in FileMaker. Again very useful for Debugging in your IDE.

##Class Compiler

Koder has a built in Class Compiler that makes it easier to work with Classes in your ScriptMaster projects. Learn more about it here.

Clone this wiki locally

, '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
toddgeist edited this page May 30, 2012 · 9 revisions

##How to

Rather longish very rough video, http://blip.tv/geist-interactive-tv/koder-1-6106459

You need to setup your projects with a standard structure. If you have a project called "Project" you should put two folders in that Folder. Name one "src" and the other "jars". Like so:

/Project /Project/src /Project/jars

Once you have this setup, launch Koder.fp7, and use the Choose Project Folder to select the "Project" folder. This "Points" Koder at your project.

Koder loads all the Jar file it finds in the "jars" folder and it scans the "src" directory for groovy files. When you open Koder you will be able to choose the "Projects" folder. This will load everything in.

You then use the IDE of your choice to create your ScriptMaster functions. Each function should get its own file.

##Special Annotations

Koder looks for doc block annotations to tell it how to name the scriptmaster functions and what params you want with the function. There are also a couple of other tags you can use to set a couple of other options.

###@FileMakerFunctionName FunctionName
specifies the name of the function. Koder also applies an optional prefix to all functions in the same project. Do not include the prefix here.

###@param paramName The name of a parameter. You can include more then one

###@FileMakerIsGui True Scriptmaster has an optional flag that you should set to true if your Function displays any Java UI. This is optional if you don't use include it, it defaults to false

###@FileMakerDoNotBuild True This a convenience flag that tells Koder to leave this function out of the plugin build or the Single Function Register. This useful if you the function is not yet ready to be released, or if it is just a testing function.

##Other Useful Comment Blocks

###Above the line /*----[ above this line is ignored by FileMaker ]----*/
Any code placed ABOVE this line will not be executed by FileMaker. This is very useful when you are working in your IDE, and you need to setup the some variables or objects for debugging in your IDE. When you go back to Koder, anything above this line is ignored

###Below the line /*----[ below this line is ignored by FileMaker ]----*/
Any code placed BELOW this line will not be executed by FileMaker. This useful if you want to println or print out vars in your IDE, but not in FileMaker. Again very useful for Debugging in your IDE.

##Class Compiler

Koder has a built in Class Compiler that makes it easier to work with Classes in your ScriptMaster projects. Learn more about it here.

Clone this wiki locally

, '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
toddgeist edited this page May 30, 2012 · 9 revisions

##How to

Rather longish very rough video, http://blip.tv/geist-interactive-tv/koder-1-6106459

You need to setup your projects with a standard structure. If you have a project called "Project" you should put two folders in that Folder. Name one "src" and the other "jars". Like so:

/Project /Project/src /Project/jars

Once you have this setup, launch Koder.fp7, and use the Choose Project Folder to select the "Project" folder. This "Points" Koder at your project.

Koder loads all the Jar file it finds in the "jars" folder and it scans the "src" directory for groovy files. When you open Koder you will be able to choose the "Projects" folder. This will load everything in.

You then use the IDE of your choice to create your ScriptMaster functions. Each function should get its own file.

##Special Annotations

Koder looks for doc block annotations to tell it how to name the scriptmaster functions and what params you want with the function. There are also a couple of other tags you can use to set a couple of other options.

###@FileMakerFunctionName FunctionName
specifies the name of the function. Koder also applies an optional prefix to all functions in the same project. Do not include the prefix here.

###@param paramName The name of a parameter. You can include more then one

###@FileMakerIsGui True Scriptmaster has an optional flag that you should set to true if your Function displays any Java UI. This is optional if you don't use include it, it defaults to false

###@FileMakerDoNotBuild True This a convenience flag that tells Koder to leave this function out of the plugin build or the Single Function Register. This useful if you the function is not yet ready to be released, or if it is just a testing function.

##Other Useful Comment Blocks

###Above the line /*----[ above this line is ignored by FileMaker ]----*/
Any code placed ABOVE this line will not be executed by FileMaker. This is very useful when you are working in your IDE, and you need to setup the some variables or objects for debugging in your IDE. When you go back to Koder, anything above this line is ignored

###Below the line /*----[ below this line is ignored by FileMaker ]----*/
Any code placed BELOW this line will not be executed by FileMaker. This useful if you want to println or print out vars in your IDE, but not in FileMaker. Again very useful for Debugging in your IDE.

##Class Compiler

Koder has a built in Class Compiler that makes it easier to work with Classes in your ScriptMaster projects. Learn more about it here.

Clone this wiki locally

, '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
toddgeist edited this page May 30, 2012 · 9 revisions

##How to

Rather longish very rough video, http://blip.tv/geist-interactive-tv/koder-1-6106459

You need to setup your projects with a standard structure. If you have a project called "Project" you should put two folders in that Folder. Name one "src" and the other "jars". Like so:

/Project /Project/src /Project/jars

Once you have this setup, launch Koder.fp7, and use the Choose Project Folder to select the "Project" folder. This "Points" Koder at your project.

Koder loads all the Jar file it finds in the "jars" folder and it scans the "src" directory for groovy files. When you open Koder you will be able to choose the "Projects" folder. This will load everything in.

You then use the IDE of your choice to create your ScriptMaster functions. Each function should get its own file.

##Special Annotations

Koder looks for doc block annotations to tell it how to name the scriptmaster functions and what params you want with the function. There are also a couple of other tags you can use to set a couple of other options.

###@FileMakerFunctionName FunctionName
specifies the name of the function. Koder also applies an optional prefix to all functions in the same project. Do not include the prefix here.

###@param paramName The name of a parameter. You can include more then one

###@FileMakerIsGui True Scriptmaster has an optional flag that you should set to true if your Function displays any Java UI. This is optional if you don't use include it, it defaults to false

###@FileMakerDoNotBuild True This a convenience flag that tells Koder to leave this function out of the plugin build or the Single Function Register. This useful if you the function is not yet ready to be released, or if it is just a testing function.

##Other Useful Comment Blocks

###Above the line /*----[ above this line is ignored by FileMaker ]----*/
Any code placed ABOVE this line will not be executed by FileMaker. This is very useful when you are working in your IDE, and you need to setup the some variables or objects for debugging in your IDE. When you go back to Koder, anything above this line is ignored

###Below the line /*----[ below this line is ignored by FileMaker ]----*/
Any code placed BELOW this line will not be executed by FileMaker. This useful if you want to println or print out vars in your IDE, but not in FileMaker. Again very useful for Debugging in your IDE.

##Class Compiler

Koder has a built in Class Compiler that makes it easier to work with Classes in your ScriptMaster projects. Learn more about it here.

Clone this wiki locally

, '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
toddgeist edited this page May 30, 2012 · 9 revisions

##How to

Rather longish very rough video, http://blip.tv/geist-interactive-tv/koder-1-6106459

You need to setup your projects with a standard structure. If you have a project called "Project" you should put two folders in that Folder. Name one "src" and the other "jars". Like so:

/Project /Project/src /Project/jars

Once you have this setup, launch Koder.fp7, and use the Choose Project Folder to select the "Project" folder. This "Points" Koder at your project.

Koder loads all the Jar file it finds in the "jars" folder and it scans the "src" directory for groovy files. When you open Koder you will be able to choose the "Projects" folder. This will load everything in.

You then use the IDE of your choice to create your ScriptMaster functions. Each function should get its own file.

##Special Annotations

Koder looks for doc block annotations to tell it how to name the scriptmaster functions and what params you want with the function. There are also a couple of other tags you can use to set a couple of other options.

###@FileMakerFunctionName FunctionName
specifies the name of the function. Koder also applies an optional prefix to all functions in the same project. Do not include the prefix here.

###@param paramName The name of a parameter. You can include more then one

###@FileMakerIsGui True Scriptmaster has an optional flag that you should set to true if your Function displays any Java UI. This is optional if you don't use include it, it defaults to false

###@FileMakerDoNotBuild True This a convenience flag that tells Koder to leave this function out of the plugin build or the Single Function Register. This useful if you the function is not yet ready to be released, or if it is just a testing function.

##Other Useful Comment Blocks

###Above the line /*----[ above this line is ignored by FileMaker ]----*/
Any code placed ABOVE this line will not be executed by FileMaker. This is very useful when you are working in your IDE, and you need to setup the some variables or objects for debugging in your IDE. When you go back to Koder, anything above this line is ignored

###Below the line /*----[ below this line is ignored by FileMaker ]----*/
Any code placed BELOW this line will not be executed by FileMaker. This useful if you want to println or print out vars in your IDE, but not in FileMaker. Again very useful for Debugging in your IDE.

##Class Compiler

Koder has a built in Class Compiler that makes it easier to work with Classes in your ScriptMaster projects. Learn more about it here.

Clone this wiki locally

, '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
toddgeist edited this page May 30, 2012 · 9 revisions

##How to

Rather longish very rough video, http://blip.tv/geist-interactive-tv/koder-1-6106459

You need to setup your projects with a standard structure. If you have a project called "Project" you should put two folders in that Folder. Name one "src" and the other "jars". Like so:

/Project /Project/src /Project/jars

Once you have this setup, launch Koder.fp7, and use the Choose Project Folder to select the "Project" folder. This "Points" Koder at your project.

Koder loads all the Jar file it finds in the "jars" folder and it scans the "src" directory for groovy files. When you open Koder you will be able to choose the "Projects" folder. This will load everything in.

You then use the IDE of your choice to create your ScriptMaster functions. Each function should get its own file.

##Special Annotations

Koder looks for doc block annotations to tell it how to name the scriptmaster functions and what params you want with the function. There are also a couple of other tags you can use to set a couple of other options.

###@FileMakerFunctionName FunctionName
specifies the name of the function. Koder also applies an optional prefix to all functions in the same project. Do not include the prefix here.

###@param paramName The name of a parameter. You can include more then one

###@FileMakerIsGui True Scriptmaster has an optional flag that you should set to true if your Function displays any Java UI. This is optional if you don't use include it, it defaults to false

###@FileMakerDoNotBuild True This a convenience flag that tells Koder to leave this function out of the plugin build or the Single Function Register. This useful if you the function is not yet ready to be released, or if it is just a testing function.

##Other Useful Comment Blocks

###Above the line /*----[ above this line is ignored by FileMaker ]----*/
Any code placed ABOVE this line will not be executed by FileMaker. This is very useful when you are working in your IDE, and you need to setup the some variables or objects for debugging in your IDE. When you go back to Koder, anything above this line is ignored

###Below the line /*----[ below this line is ignored by FileMaker ]----*/
Any code placed BELOW this line will not be executed by FileMaker. This useful if you want to println or print out vars in your IDE, but not in FileMaker. Again very useful for Debugging in your IDE.

##Class Compiler

Koder has a built in Class Compiler that makes it easier to work with Classes in your ScriptMaster projects. Learn more about it here.

Clone this wiki locally

, '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
toddgeist edited this page May 30, 2012 · 9 revisions

##How to

Rather longish very rough video, http://blip.tv/geist-interactive-tv/koder-1-6106459

You need to setup your projects with a standard structure. If you have a project called "Project" you should put two folders in that Folder. Name one "src" and the other "jars". Like so:

/Project /Project/src /Project/jars

Once you have this setup, launch Koder.fp7, and use the Choose Project Folder to select the "Project" folder. This "Points" Koder at your project.

Koder loads all the Jar file it finds in the "jars" folder and it scans the "src" directory for groovy files. When you open Koder you will be able to choose the "Projects" folder. This will load everything in.

You then use the IDE of your choice to create your ScriptMaster functions. Each function should get its own file.

##Special Annotations

Koder looks for doc block annotations to tell it how to name the scriptmaster functions and what params you want with the function. There are also a couple of other tags you can use to set a couple of other options.

###@FileMakerFunctionName FunctionName
specifies the name of the function. Koder also applies an optional prefix to all functions in the same project. Do not include the prefix here.

###@param paramName The name of a parameter. You can include more then one

###@FileMakerIsGui True Scriptmaster has an optional flag that you should set to true if your Function displays any Java UI. This is optional if you don't use include it, it defaults to false

###@FileMakerDoNotBuild True This a convenience flag that tells Koder to leave this function out of the plugin build or the Single Function Register. This useful if you the function is not yet ready to be released, or if it is just a testing function.

##Other Useful Comment Blocks

###Above the line /*----[ above this line is ignored by FileMaker ]----*/
Any code placed ABOVE this line will not be executed by FileMaker. This is very useful when you are working in your IDE, and you need to setup the some variables or objects for debugging in your IDE. When you go back to Koder, anything above this line is ignored

###Below the line /*----[ below this line is ignored by FileMaker ]----*/
Any code placed BELOW this line will not be executed by FileMaker. This useful if you want to println or print out vars in your IDE, but not in FileMaker. Again very useful for Debugging in your IDE.

##Class Compiler

Koder has a built in Class Compiler that makes it easier to work with Classes in your ScriptMaster projects. Learn more about it here.

Clone this wiki locally

, '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
toddgeist edited this page May 30, 2012 · 9 revisions

##How to

Rather longish very rough video, http://blip.tv/geist-interactive-tv/koder-1-6106459

You need to setup your projects with a standard structure. If you have a project called "Project" you should put two folders in that Folder. Name one "src" and the other "jars". Like so:

/Project /Project/src /Project/jars

Once you have this setup, launch Koder.fp7, and use the Choose Project Folder to select the "Project" folder. This "Points" Koder at your project.

Koder loads all the Jar file it finds in the "jars" folder and it scans the "src" directory for groovy files. When you open Koder you will be able to choose the "Projects" folder. This will load everything in.

You then use the IDE of your choice to create your ScriptMaster functions. Each function should get its own file.

##Special Annotations

Koder looks for doc block annotations to tell it how to name the scriptmaster functions and what params you want with the function. There are also a couple of other tags you can use to set a couple of other options.

###@FileMakerFunctionName FunctionName
specifies the name of the function. Koder also applies an optional prefix to all functions in the same project. Do not include the prefix here.

###@param paramName The name of a parameter. You can include more then one

###@FileMakerIsGui True Scriptmaster has an optional flag that you should set to true if your Function displays any Java UI. This is optional if you don't use include it, it defaults to false

###@FileMakerDoNotBuild True This a convenience flag that tells Koder to leave this function out of the plugin build or the Single Function Register. This useful if you the function is not yet ready to be released, or if it is just a testing function.

##Other Useful Comment Blocks

###Above the line /*----[ above this line is ignored by FileMaker ]----*/
Any code placed ABOVE this line will not be executed by FileMaker. This is very useful when you are working in your IDE, and you need to setup the some variables or objects for debugging in your IDE. When you go back to Koder, anything above this line is ignored

###Below the line /*----[ below this line is ignored by FileMaker ]----*/
Any code placed BELOW this line will not be executed by FileMaker. This useful if you want to println or print out vars in your IDE, but not in FileMaker. Again very useful for Debugging in your IDE.

##Class Compiler

Koder has a built in Class Compiler that makes it easier to work with Classes in your ScriptMaster projects. Learn more about it here.

Clone this wiki locally