Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Lasso HTTP

This is meant to be an Object-Oriented replacement for include_url, especially for accessing Web APIs. It is essentially a nice wrapper for the built-in curl type to do HTTP requests. It comes with two types: http_request and http_response. This allows for creating requests that can be later inspected and modified as well as a nice response object for parsing raw HTTP responses.

Example Usage:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )local(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Basic Installation

The easiest way to install these files is to place the http_request.lasso and http_response.lasso files into either your instance's LassoStartup folder or your instances' LASSO9_MASTER_HOME LassoStartup folder.

If you need further help for this, or a different installation method (such as compiling them into a dynamic library), please post your question to StackOverflow or the LassoTalk list.

Building Requests

The http_request type allows you to easily build a curl request through many steps. This means you don't have to have everything ready for the request and can even delay in making the request:

local(req) = http_request("http://example.com/foo")#req->headers = (:'Content-Type'='application/json')#req->postParams = json_serialize(map('moose'='hair'))#req->timeout = 300

Alternatively, if you have everything ready, you can pass all the data to the creator method:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )

Inspecting Responses

Once you have a request built, you can get the result back in an http_response type and easily inspect the various parts:

// If the request doesn't return with a 200 status code,// error with the status and message.// Otherwise show the body of the HTTP responselocal(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Full Example

More often then not, this is probably the form your code will take:

local(resp) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )->responsematch(#resp->statusCode) => {case(400) content_body ='Malformed Request'case(401) content_body ='Credentials Expired'case(200) content_body =#resp->bodyStringcase fail(#resp->statusCode, #resp->statusMsg) }

Feedback

Please use Github Issues area for bug reports and suggestions.

License

Copyright 2013 Bradley Lindsay

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Object-Oriented curl HTTP wrapper for Lasso

Resources

Stars

6 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

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Lasso HTTP

This is meant to be an Object-Oriented replacement for include_url, especially for accessing Web APIs. It is essentially a nice wrapper for the built-in curl type to do HTTP requests. It comes with two types: http_request and http_response. This allows for creating requests that can be later inspected and modified as well as a nice response object for parsing raw HTTP responses.

Example Usage:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )local(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Basic Installation

The easiest way to install these files is to place the http_request.lasso and http_response.lasso files into either your instance's LassoStartup folder or your instances' LASSO9_MASTER_HOME LassoStartup folder.

If you need further help for this, or a different installation method (such as compiling them into a dynamic library), please post your question to StackOverflow or the LassoTalk list.

Building Requests

The http_request type allows you to easily build a curl request through many steps. This means you don't have to have everything ready for the request and can even delay in making the request:

local(req) = http_request("http://example.com/foo")#req->headers = (:'Content-Type'='application/json')#req->postParams = json_serialize(map('moose'='hair'))#req->timeout = 300

Alternatively, if you have everything ready, you can pass all the data to the creator method:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )

Inspecting Responses

Once you have a request built, you can get the result back in an http_response type and easily inspect the various parts:

// If the request doesn't return with a 200 status code,// error with the status and message.// Otherwise show the body of the HTTP responselocal(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Full Example

More often then not, this is probably the form your code will take:

local(resp) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )->responsematch(#resp->statusCode) => {case(400) content_body ='Malformed Request'case(401) content_body ='Credentials Expired'case(200) content_body =#resp->bodyStringcase fail(#resp->statusCode, #resp->statusMsg) }

Feedback

Please use Github Issues area for bug reports and suggestions.

License

Copyright 2013 Bradley Lindsay

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Object-Oriented curl HTTP wrapper for Lasso

Resources

Stars

6 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

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Lasso HTTP

This is meant to be an Object-Oriented replacement for include_url, especially for accessing Web APIs. It is essentially a nice wrapper for the built-in curl type to do HTTP requests. It comes with two types: http_request and http_response. This allows for creating requests that can be later inspected and modified as well as a nice response object for parsing raw HTTP responses.

Example Usage:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )local(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Basic Installation

The easiest way to install these files is to place the http_request.lasso and http_response.lasso files into either your instance's LassoStartup folder or your instances' LASSO9_MASTER_HOME LassoStartup folder.

If you need further help for this, or a different installation method (such as compiling them into a dynamic library), please post your question to StackOverflow or the LassoTalk list.

Building Requests

The http_request type allows you to easily build a curl request through many steps. This means you don't have to have everything ready for the request and can even delay in making the request:

local(req) = http_request("http://example.com/foo")#req->headers = (:'Content-Type'='application/json')#req->postParams = json_serialize(map('moose'='hair'))#req->timeout = 300

Alternatively, if you have everything ready, you can pass all the data to the creator method:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )

Inspecting Responses

Once you have a request built, you can get the result back in an http_response type and easily inspect the various parts:

// If the request doesn't return with a 200 status code,// error with the status and message.// Otherwise show the body of the HTTP responselocal(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Full Example

More often then not, this is probably the form your code will take:

local(resp) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )->responsematch(#resp->statusCode) => {case(400) content_body ='Malformed Request'case(401) content_body ='Credentials Expired'case(200) content_body =#resp->bodyStringcase fail(#resp->statusCode, #resp->statusMsg) }

Feedback

Please use Github Issues area for bug reports and suggestions.

License

Copyright 2013 Bradley Lindsay

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Object-Oriented curl HTTP wrapper for Lasso

Resources

Stars

6 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

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Lasso HTTP

This is meant to be an Object-Oriented replacement for include_url, especially for accessing Web APIs. It is essentially a nice wrapper for the built-in curl type to do HTTP requests. It comes with two types: http_request and http_response. This allows for creating requests that can be later inspected and modified as well as a nice response object for parsing raw HTTP responses.

Example Usage:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )local(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Basic Installation

The easiest way to install these files is to place the http_request.lasso and http_response.lasso files into either your instance's LassoStartup folder or your instances' LASSO9_MASTER_HOME LassoStartup folder.

If you need further help for this, or a different installation method (such as compiling them into a dynamic library), please post your question to StackOverflow or the LassoTalk list.

Building Requests

The http_request type allows you to easily build a curl request through many steps. This means you don't have to have everything ready for the request and can even delay in making the request:

local(req) = http_request("http://example.com/foo")#req->headers = (:'Content-Type'='application/json')#req->postParams = json_serialize(map('moose'='hair'))#req->timeout = 300

Alternatively, if you have everything ready, you can pass all the data to the creator method:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )

Inspecting Responses

Once you have a request built, you can get the result back in an http_response type and easily inspect the various parts:

// If the request doesn't return with a 200 status code,// error with the status and message.// Otherwise show the body of the HTTP responselocal(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Full Example

More often then not, this is probably the form your code will take:

local(resp) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )->responsematch(#resp->statusCode) => {case(400) content_body ='Malformed Request'case(401) content_body ='Credentials Expired'case(200) content_body =#resp->bodyStringcase fail(#resp->statusCode, #resp->statusMsg) }

Feedback

Please use Github Issues area for bug reports and suggestions.

License

Copyright 2013 Bradley Lindsay

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Object-Oriented curl HTTP wrapper for Lasso

Resources

Stars

6 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

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Lasso HTTP

This is meant to be an Object-Oriented replacement for include_url, especially for accessing Web APIs. It is essentially a nice wrapper for the built-in curl type to do HTTP requests. It comes with two types: http_request and http_response. This allows for creating requests that can be later inspected and modified as well as a nice response object for parsing raw HTTP responses.

Example Usage:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )local(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Basic Installation

The easiest way to install these files is to place the http_request.lasso and http_response.lasso files into either your instance's LassoStartup folder or your instances' LASSO9_MASTER_HOME LassoStartup folder.

If you need further help for this, or a different installation method (such as compiling them into a dynamic library), please post your question to StackOverflow or the LassoTalk list.

Building Requests

The http_request type allows you to easily build a curl request through many steps. This means you don't have to have everything ready for the request and can even delay in making the request:

local(req) = http_request("http://example.com/foo")#req->headers = (:'Content-Type'='application/json')#req->postParams = json_serialize(map('moose'='hair'))#req->timeout = 300

Alternatively, if you have everything ready, you can pass all the data to the creator method:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )

Inspecting Responses

Once you have a request built, you can get the result back in an http_response type and easily inspect the various parts:

// If the request doesn't return with a 200 status code,// error with the status and message.// Otherwise show the body of the HTTP responselocal(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Full Example

More often then not, this is probably the form your code will take:

local(resp) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )->responsematch(#resp->statusCode) => {case(400) content_body ='Malformed Request'case(401) content_body ='Credentials Expired'case(200) content_body =#resp->bodyStringcase fail(#resp->statusCode, #resp->statusMsg) }

Feedback

Please use Github Issues area for bug reports and suggestions.

License

Copyright 2013 Bradley Lindsay

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Object-Oriented curl HTTP wrapper for Lasso

Resources

Stars

6 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

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Lasso HTTP

This is meant to be an Object-Oriented replacement for include_url, especially for accessing Web APIs. It is essentially a nice wrapper for the built-in curl type to do HTTP requests. It comes with two types: http_request and http_response. This allows for creating requests that can be later inspected and modified as well as a nice response object for parsing raw HTTP responses.

Example Usage:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )local(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Basic Installation

The easiest way to install these files is to place the http_request.lasso and http_response.lasso files into either your instance's LassoStartup folder or your instances' LASSO9_MASTER_HOME LassoStartup folder.

If you need further help for this, or a different installation method (such as compiling them into a dynamic library), please post your question to StackOverflow or the LassoTalk list.

Building Requests

The http_request type allows you to easily build a curl request through many steps. This means you don't have to have everything ready for the request and can even delay in making the request:

local(req) = http_request("http://example.com/foo")#req->headers = (:'Content-Type'='application/json')#req->postParams = json_serialize(map('moose'='hair'))#req->timeout = 300

Alternatively, if you have everything ready, you can pass all the data to the creator method:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )

Inspecting Responses

Once you have a request built, you can get the result back in an http_response type and easily inspect the various parts:

// If the request doesn't return with a 200 status code,// error with the status and message.// Otherwise show the body of the HTTP responselocal(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Full Example

More often then not, this is probably the form your code will take:

local(resp) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )->responsematch(#resp->statusCode) => {case(400) content_body ='Malformed Request'case(401) content_body ='Credentials Expired'case(200) content_body =#resp->bodyStringcase fail(#resp->statusCode, #resp->statusMsg) }

Feedback

Please use Github Issues area for bug reports and suggestions.

License

Copyright 2013 Bradley Lindsay

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Object-Oriented curl HTTP wrapper for Lasso

Resources

Stars

6 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

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Lasso HTTP

This is meant to be an Object-Oriented replacement for include_url, especially for accessing Web APIs. It is essentially a nice wrapper for the built-in curl type to do HTTP requests. It comes with two types: http_request and http_response. This allows for creating requests that can be later inspected and modified as well as a nice response object for parsing raw HTTP responses.

Example Usage:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )local(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Basic Installation

The easiest way to install these files is to place the http_request.lasso and http_response.lasso files into either your instance's LassoStartup folder or your instances' LASSO9_MASTER_HOME LassoStartup folder.

If you need further help for this, or a different installation method (such as compiling them into a dynamic library), please post your question to StackOverflow or the LassoTalk list.

Building Requests

The http_request type allows you to easily build a curl request through many steps. This means you don't have to have everything ready for the request and can even delay in making the request:

local(req) = http_request("http://example.com/foo")#req->headers = (:'Content-Type'='application/json')#req->postParams = json_serialize(map('moose'='hair'))#req->timeout = 300

Alternatively, if you have everything ready, you can pass all the data to the creator method:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )

Inspecting Responses

Once you have a request built, you can get the result back in an http_response type and easily inspect the various parts:

// If the request doesn't return with a 200 status code,// error with the status and message.// Otherwise show the body of the HTTP responselocal(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Full Example

More often then not, this is probably the form your code will take:

local(resp) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )->responsematch(#resp->statusCode) => {case(400) content_body ='Malformed Request'case(401) content_body ='Credentials Expired'case(200) content_body =#resp->bodyStringcase fail(#resp->statusCode, #resp->statusMsg) }

Feedback

Please use Github Issues area for bug reports and suggestions.

License

Copyright 2013 Bradley Lindsay

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Object-Oriented curl HTTP wrapper for Lasso

Resources

Stars

6 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

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Lasso HTTP

This is meant to be an Object-Oriented replacement for include_url, especially for accessing Web APIs. It is essentially a nice wrapper for the built-in curl type to do HTTP requests. It comes with two types: http_request and http_response. This allows for creating requests that can be later inspected and modified as well as a nice response object for parsing raw HTTP responses.

Example Usage:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )local(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Basic Installation

The easiest way to install these files is to place the http_request.lasso and http_response.lasso files into either your instance's LassoStartup folder or your instances' LASSO9_MASTER_HOME LassoStartup folder.

If you need further help for this, or a different installation method (such as compiling them into a dynamic library), please post your question to StackOverflow or the LassoTalk list.

Building Requests

The http_request type allows you to easily build a curl request through many steps. This means you don't have to have everything ready for the request and can even delay in making the request:

local(req) = http_request("http://example.com/foo")#req->headers = (:'Content-Type'='application/json')#req->postParams = json_serialize(map('moose'='hair'))#req->timeout = 300

Alternatively, if you have everything ready, you can pass all the data to the creator method:

local(req) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )

Inspecting Responses

Once you have a request built, you can get the result back in an http_response type and easily inspect the various parts:

// If the request doesn't return with a 200 status code,// error with the status and message.// Otherwise show the body of the HTTP responselocal(resp) =#req->response fail_if(#resp->getStatus != 200, #resp->statusCode, #resp->statusMsg)#resp->bodyString

Full Example

More often then not, this is probably the form your code will take:

local(resp) = http_request("http://example.com/foo",-postParams = (:'name'='Rhino'),-reqMethod =`PUT` )->responsematch(#resp->statusCode) => {case(400) content_body ='Malformed Request'case(401) content_body ='Credentials Expired'case(200) content_body =#resp->bodyStringcase fail(#resp->statusCode, #resp->statusMsg) }

Feedback

Please use Github Issues area for bug reports and suggestions.

License

Copyright 2013 Bradley Lindsay

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

Object-Oriented curl HTTP wrapper for Lasso

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages