This repository was archived by the owner on Jun 4, 2025. It is now read-only.

Repository files navigation

VersionPlatform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Inside the AppDelegate.swift, update the dummy projectGUID with your own.

Requirements

Since WeLoop builds in swift 5.0, Xcode 10.2 is required to build the project.

The dependency requires iOS 9.0 or above to be built.

Installation

WeLoop is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'WeLoop'

Usage

Compatibility with scene delegates

If your application uses a UISceneSession, you need to configure the SDK early on in your ApplicationDelegate:

WeLoop.set(sceneBasedApplication:true)

In the next major release, this will no longer be necessary.

Invocation

In order to invoke WeLoop you have two options.

  1. You provide the user identity. Simply provide your project key, and identity the current user by calling identifyUser.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");
letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)
  1. You let the user provide its login infos: don't call `authenticateUser``, and the widget will show the login page when it's launched.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");

Delay Webview initialization

If you need to you can delay the initialization of the underlying webview:

WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID", loadWebView:false);

In that case you can manually refresh the notification count for the currently authenticated user:

letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)WeLoop.refreshNotificationBadge();

Note that it's not necessary if you are preloading the webview:

Invocation method

You can choose between different methods to invoke the WeLoop widget inside your application:

  1. Floating Action Button
WeLoop.set(invocationMethod:.fab)

Customisation options for the button (color, icon, placement) can be done inside your WeLoop project settings.

  1. Shake Gesture
WeLoop.set(invocationMethod:.shakeGesture)
  1. Manual
WeLoop.set(invocationMethod:.manual)
// Then, in your own button or control:
WeLoop.invoke()

Delegate methods

You can set up a delegate to listen for some events returned by the SDK with the following method: WeLoop.set(delegate: self)

You can then implement the following optional delegate methods:

extensionAppDelegate:WeLoopDelegate{func initializationSuccessful(){
// From this point forward, we can safely invoke the Widget manually
}func initializationFailed(with error:Error){
// Initialization Failed (no network for example). Based on the error you'll have to retry the initialization later.
print(error)}func failedToLaunch(with error:Error){
// The widget could not be launched. Most likely is that the initialization process failed, or the user is missing in autoAuthentication
print(error)}func notificationCountUpdated(newCount:Int){
// Set the new count on your custom view
print(newCount)}}

Updating your plist

Since WeLoop offers the possibility to upload photos from the user photo gallery and from the camera, you will have to add the following entries to your plist, if they are not already present:

<key>NSPhotoLibraryUsageDescription</key><string>WeLoop needs to access your library to share pictures from your library</string><key>NSCameraUsageDescription</key><string>WeLoop needs to access your camera to take pictures</string>

License

WeLoop is available under the MIT license. See the LICENSE file for more info.

About

Framework IOS

Resources

Stars

0 stars

Watchers

0 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 Jun 4, 2025. It is now read-only.

Repository files navigation

VersionPlatform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Inside the AppDelegate.swift, update the dummy projectGUID with your own.

Requirements

Since WeLoop builds in swift 5.0, Xcode 10.2 is required to build the project.

The dependency requires iOS 9.0 or above to be built.

Installation

WeLoop is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'WeLoop'

Usage

Compatibility with scene delegates

If your application uses a UISceneSession, you need to configure the SDK early on in your ApplicationDelegate:

WeLoop.set(sceneBasedApplication:true)

In the next major release, this will no longer be necessary.

Invocation

In order to invoke WeLoop you have two options.

  1. You provide the user identity. Simply provide your project key, and identity the current user by calling identifyUser.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");
letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)
  1. You let the user provide its login infos: don't call `authenticateUser``, and the widget will show the login page when it's launched.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");

Delay Webview initialization

If you need to you can delay the initialization of the underlying webview:

WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID", loadWebView:false);

In that case you can manually refresh the notification count for the currently authenticated user:

letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)WeLoop.refreshNotificationBadge();

Note that it's not necessary if you are preloading the webview:

Invocation method

You can choose between different methods to invoke the WeLoop widget inside your application:

  1. Floating Action Button
WeLoop.set(invocationMethod:.fab)

Customisation options for the button (color, icon, placement) can be done inside your WeLoop project settings.

  1. Shake Gesture
WeLoop.set(invocationMethod:.shakeGesture)
  1. Manual
WeLoop.set(invocationMethod:.manual)
// Then, in your own button or control:
WeLoop.invoke()

Delegate methods

You can set up a delegate to listen for some events returned by the SDK with the following method: WeLoop.set(delegate: self)

You can then implement the following optional delegate methods:

extensionAppDelegate:WeLoopDelegate{func initializationSuccessful(){
// From this point forward, we can safely invoke the Widget manually
}func initializationFailed(with error:Error){
// Initialization Failed (no network for example). Based on the error you'll have to retry the initialization later.
print(error)}func failedToLaunch(with error:Error){
// The widget could not be launched. Most likely is that the initialization process failed, or the user is missing in autoAuthentication
print(error)}func notificationCountUpdated(newCount:Int){
// Set the new count on your custom view
print(newCount)}}

Updating your plist

Since WeLoop offers the possibility to upload photos from the user photo gallery and from the camera, you will have to add the following entries to your plist, if they are not already present:

<key>NSPhotoLibraryUsageDescription</key><string>WeLoop needs to access your library to share pictures from your library</string><key>NSCameraUsageDescription</key><string>WeLoop needs to access your camera to take pictures</string>

License

WeLoop is available under the MIT license. See the LICENSE file for more info.

About

Framework IOS

Resources

Stars

0 stars

Watchers

0 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 Jun 4, 2025. It is now read-only.

Repository files navigation

VersionPlatform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Inside the AppDelegate.swift, update the dummy projectGUID with your own.

Requirements

Since WeLoop builds in swift 5.0, Xcode 10.2 is required to build the project.

The dependency requires iOS 9.0 or above to be built.

Installation

WeLoop is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'WeLoop'

Usage

Compatibility with scene delegates

If your application uses a UISceneSession, you need to configure the SDK early on in your ApplicationDelegate:

WeLoop.set(sceneBasedApplication:true)

In the next major release, this will no longer be necessary.

Invocation

In order to invoke WeLoop you have two options.

  1. You provide the user identity. Simply provide your project key, and identity the current user by calling identifyUser.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");
letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)
  1. You let the user provide its login infos: don't call `authenticateUser``, and the widget will show the login page when it's launched.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");

Delay Webview initialization

If you need to you can delay the initialization of the underlying webview:

WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID", loadWebView:false);

In that case you can manually refresh the notification count for the currently authenticated user:

letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)WeLoop.refreshNotificationBadge();

Note that it's not necessary if you are preloading the webview:

Invocation method

You can choose between different methods to invoke the WeLoop widget inside your application:

  1. Floating Action Button
WeLoop.set(invocationMethod:.fab)

Customisation options for the button (color, icon, placement) can be done inside your WeLoop project settings.

  1. Shake Gesture
WeLoop.set(invocationMethod:.shakeGesture)
  1. Manual
WeLoop.set(invocationMethod:.manual)
// Then, in your own button or control:
WeLoop.invoke()

Delegate methods

You can set up a delegate to listen for some events returned by the SDK with the following method: WeLoop.set(delegate: self)

You can then implement the following optional delegate methods:

extensionAppDelegate:WeLoopDelegate{func initializationSuccessful(){
// From this point forward, we can safely invoke the Widget manually
}func initializationFailed(with error:Error){
// Initialization Failed (no network for example). Based on the error you'll have to retry the initialization later.
print(error)}func failedToLaunch(with error:Error){
// The widget could not be launched. Most likely is that the initialization process failed, or the user is missing in autoAuthentication
print(error)}func notificationCountUpdated(newCount:Int){
// Set the new count on your custom view
print(newCount)}}

Updating your plist

Since WeLoop offers the possibility to upload photos from the user photo gallery and from the camera, you will have to add the following entries to your plist, if they are not already present:

<key>NSPhotoLibraryUsageDescription</key><string>WeLoop needs to access your library to share pictures from your library</string><key>NSCameraUsageDescription</key><string>WeLoop needs to access your camera to take pictures</string>

License

WeLoop is available under the MIT license. See the LICENSE file for more info.

About

Framework IOS

Resources

Stars

0 stars

Watchers

0 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 Jun 4, 2025. It is now read-only.

Repository files navigation

VersionPlatform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Inside the AppDelegate.swift, update the dummy projectGUID with your own.

Requirements

Since WeLoop builds in swift 5.0, Xcode 10.2 is required to build the project.

The dependency requires iOS 9.0 or above to be built.

Installation

WeLoop is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'WeLoop'

Usage

Compatibility with scene delegates

If your application uses a UISceneSession, you need to configure the SDK early on in your ApplicationDelegate:

WeLoop.set(sceneBasedApplication:true)

In the next major release, this will no longer be necessary.

Invocation

In order to invoke WeLoop you have two options.

  1. You provide the user identity. Simply provide your project key, and identity the current user by calling identifyUser.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");
letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)
  1. You let the user provide its login infos: don't call `authenticateUser``, and the widget will show the login page when it's launched.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");

Delay Webview initialization

If you need to you can delay the initialization of the underlying webview:

WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID", loadWebView:false);

In that case you can manually refresh the notification count for the currently authenticated user:

letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)WeLoop.refreshNotificationBadge();

Note that it's not necessary if you are preloading the webview:

Invocation method

You can choose between different methods to invoke the WeLoop widget inside your application:

  1. Floating Action Button
WeLoop.set(invocationMethod:.fab)

Customisation options for the button (color, icon, placement) can be done inside your WeLoop project settings.

  1. Shake Gesture
WeLoop.set(invocationMethod:.shakeGesture)
  1. Manual
WeLoop.set(invocationMethod:.manual)
// Then, in your own button or control:
WeLoop.invoke()

Delegate methods

You can set up a delegate to listen for some events returned by the SDK with the following method: WeLoop.set(delegate: self)

You can then implement the following optional delegate methods:

extensionAppDelegate:WeLoopDelegate{func initializationSuccessful(){
// From this point forward, we can safely invoke the Widget manually
}func initializationFailed(with error:Error){
// Initialization Failed (no network for example). Based on the error you'll have to retry the initialization later.
print(error)}func failedToLaunch(with error:Error){
// The widget could not be launched. Most likely is that the initialization process failed, or the user is missing in autoAuthentication
print(error)}func notificationCountUpdated(newCount:Int){
// Set the new count on your custom view
print(newCount)}}

Updating your plist

Since WeLoop offers the possibility to upload photos from the user photo gallery and from the camera, you will have to add the following entries to your plist, if they are not already present:

<key>NSPhotoLibraryUsageDescription</key><string>WeLoop needs to access your library to share pictures from your library</string><key>NSCameraUsageDescription</key><string>WeLoop needs to access your camera to take pictures</string>

License

WeLoop is available under the MIT license. See the LICENSE file for more info.

About

Framework IOS

Resources

Stars

0 stars

Watchers

0 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 Jun 4, 2025. It is now read-only.

Repository files navigation

VersionPlatform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Inside the AppDelegate.swift, update the dummy projectGUID with your own.

Requirements

Since WeLoop builds in swift 5.0, Xcode 10.2 is required to build the project.

The dependency requires iOS 9.0 or above to be built.

Installation

WeLoop is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'WeLoop'

Usage

Compatibility with scene delegates

If your application uses a UISceneSession, you need to configure the SDK early on in your ApplicationDelegate:

WeLoop.set(sceneBasedApplication:true)

In the next major release, this will no longer be necessary.

Invocation

In order to invoke WeLoop you have two options.

  1. You provide the user identity. Simply provide your project key, and identity the current user by calling identifyUser.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");
letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)
  1. You let the user provide its login infos: don't call `authenticateUser``, and the widget will show the login page when it's launched.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");

Delay Webview initialization

If you need to you can delay the initialization of the underlying webview:

WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID", loadWebView:false);

In that case you can manually refresh the notification count for the currently authenticated user:

letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)WeLoop.refreshNotificationBadge();

Note that it's not necessary if you are preloading the webview:

Invocation method

You can choose between different methods to invoke the WeLoop widget inside your application:

  1. Floating Action Button
WeLoop.set(invocationMethod:.fab)

Customisation options for the button (color, icon, placement) can be done inside your WeLoop project settings.

  1. Shake Gesture
WeLoop.set(invocationMethod:.shakeGesture)
  1. Manual
WeLoop.set(invocationMethod:.manual)
// Then, in your own button or control:
WeLoop.invoke()

Delegate methods

You can set up a delegate to listen for some events returned by the SDK with the following method: WeLoop.set(delegate: self)

You can then implement the following optional delegate methods:

extensionAppDelegate:WeLoopDelegate{func initializationSuccessful(){
// From this point forward, we can safely invoke the Widget manually
}func initializationFailed(with error:Error){
// Initialization Failed (no network for example). Based on the error you'll have to retry the initialization later.
print(error)}func failedToLaunch(with error:Error){
// The widget could not be launched. Most likely is that the initialization process failed, or the user is missing in autoAuthentication
print(error)}func notificationCountUpdated(newCount:Int){
// Set the new count on your custom view
print(newCount)}}

Updating your plist

Since WeLoop offers the possibility to upload photos from the user photo gallery and from the camera, you will have to add the following entries to your plist, if they are not already present:

<key>NSPhotoLibraryUsageDescription</key><string>WeLoop needs to access your library to share pictures from your library</string><key>NSCameraUsageDescription</key><string>WeLoop needs to access your camera to take pictures</string>

License

WeLoop is available under the MIT license. See the LICENSE file for more info.

About

Framework IOS

Resources

Stars

0 stars

Watchers

0 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 Jun 4, 2025. It is now read-only.

Repository files navigation

VersionPlatform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Inside the AppDelegate.swift, update the dummy projectGUID with your own.

Requirements

Since WeLoop builds in swift 5.0, Xcode 10.2 is required to build the project.

The dependency requires iOS 9.0 or above to be built.

Installation

WeLoop is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'WeLoop'

Usage

Compatibility with scene delegates

If your application uses a UISceneSession, you need to configure the SDK early on in your ApplicationDelegate:

WeLoop.set(sceneBasedApplication:true)

In the next major release, this will no longer be necessary.

Invocation

In order to invoke WeLoop you have two options.

  1. You provide the user identity. Simply provide your project key, and identity the current user by calling identifyUser.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");
letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)
  1. You let the user provide its login infos: don't call `authenticateUser``, and the widget will show the login page when it's launched.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");

Delay Webview initialization

If you need to you can delay the initialization of the underlying webview:

WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID", loadWebView:false);

In that case you can manually refresh the notification count for the currently authenticated user:

letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)WeLoop.refreshNotificationBadge();

Note that it's not necessary if you are preloading the webview:

Invocation method

You can choose between different methods to invoke the WeLoop widget inside your application:

  1. Floating Action Button
WeLoop.set(invocationMethod:.fab)

Customisation options for the button (color, icon, placement) can be done inside your WeLoop project settings.

  1. Shake Gesture
WeLoop.set(invocationMethod:.shakeGesture)
  1. Manual
WeLoop.set(invocationMethod:.manual)
// Then, in your own button or control:
WeLoop.invoke()

Delegate methods

You can set up a delegate to listen for some events returned by the SDK with the following method: WeLoop.set(delegate: self)

You can then implement the following optional delegate methods:

extensionAppDelegate:WeLoopDelegate{func initializationSuccessful(){
// From this point forward, we can safely invoke the Widget manually
}func initializationFailed(with error:Error){
// Initialization Failed (no network for example). Based on the error you'll have to retry the initialization later.
print(error)}func failedToLaunch(with error:Error){
// The widget could not be launched. Most likely is that the initialization process failed, or the user is missing in autoAuthentication
print(error)}func notificationCountUpdated(newCount:Int){
// Set the new count on your custom view
print(newCount)}}

Updating your plist

Since WeLoop offers the possibility to upload photos from the user photo gallery and from the camera, you will have to add the following entries to your plist, if they are not already present:

<key>NSPhotoLibraryUsageDescription</key><string>WeLoop needs to access your library to share pictures from your library</string><key>NSCameraUsageDescription</key><string>WeLoop needs to access your camera to take pictures</string>

License

WeLoop is available under the MIT license. See the LICENSE file for more info.

About

Framework IOS

Resources

Stars

0 stars

Watchers

0 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 Jun 4, 2025. It is now read-only.

Repository files navigation

VersionPlatform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Inside the AppDelegate.swift, update the dummy projectGUID with your own.

Requirements

Since WeLoop builds in swift 5.0, Xcode 10.2 is required to build the project.

The dependency requires iOS 9.0 or above to be built.

Installation

WeLoop is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'WeLoop'

Usage

Compatibility with scene delegates

If your application uses a UISceneSession, you need to configure the SDK early on in your ApplicationDelegate:

WeLoop.set(sceneBasedApplication:true)

In the next major release, this will no longer be necessary.

Invocation

In order to invoke WeLoop you have two options.

  1. You provide the user identity. Simply provide your project key, and identity the current user by calling identifyUser.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");
letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)
  1. You let the user provide its login infos: don't call `authenticateUser``, and the widget will show the login page when it's launched.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");

Delay Webview initialization

If you need to you can delay the initialization of the underlying webview:

WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID", loadWebView:false);

In that case you can manually refresh the notification count for the currently authenticated user:

letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)WeLoop.refreshNotificationBadge();

Note that it's not necessary if you are preloading the webview:

Invocation method

You can choose between different methods to invoke the WeLoop widget inside your application:

  1. Floating Action Button
WeLoop.set(invocationMethod:.fab)

Customisation options for the button (color, icon, placement) can be done inside your WeLoop project settings.

  1. Shake Gesture
WeLoop.set(invocationMethod:.shakeGesture)
  1. Manual
WeLoop.set(invocationMethod:.manual)
// Then, in your own button or control:
WeLoop.invoke()

Delegate methods

You can set up a delegate to listen for some events returned by the SDK with the following method: WeLoop.set(delegate: self)

You can then implement the following optional delegate methods:

extensionAppDelegate:WeLoopDelegate{func initializationSuccessful(){
// From this point forward, we can safely invoke the Widget manually
}func initializationFailed(with error:Error){
// Initialization Failed (no network for example). Based on the error you'll have to retry the initialization later.
print(error)}func failedToLaunch(with error:Error){
// The widget could not be launched. Most likely is that the initialization process failed, or the user is missing in autoAuthentication
print(error)}func notificationCountUpdated(newCount:Int){
// Set the new count on your custom view
print(newCount)}}

Updating your plist

Since WeLoop offers the possibility to upload photos from the user photo gallery and from the camera, you will have to add the following entries to your plist, if they are not already present:

<key>NSPhotoLibraryUsageDescription</key><string>WeLoop needs to access your library to share pictures from your library</string><key>NSCameraUsageDescription</key><string>WeLoop needs to access your camera to take pictures</string>

License

WeLoop is available under the MIT license. See the LICENSE file for more info.

About

Framework IOS

Resources

Stars

0 stars

Watchers

0 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 Jun 4, 2025. It is now read-only.

Repository files navigation

VersionPlatform

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Inside the AppDelegate.swift, update the dummy projectGUID with your own.

Requirements

Since WeLoop builds in swift 5.0, Xcode 10.2 is required to build the project.

The dependency requires iOS 9.0 or above to be built.

Installation

WeLoop is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod'WeLoop'

Usage

Compatibility with scene delegates

If your application uses a UISceneSession, you need to configure the SDK early on in your ApplicationDelegate:

WeLoop.set(sceneBasedApplication:true)

In the next major release, this will no longer be necessary.

Invocation

In order to invoke WeLoop you have two options.

  1. You provide the user identity. Simply provide your project key, and identity the current user by calling identifyUser.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");
letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)
  1. You let the user provide its login infos: don't call `authenticateUser``, and the widget will show the login page when it's launched.
WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID");

Delay Webview initialization

If you need to you can delay the initialization of the underlying webview:

WeLoop.initialize(apiKey:"YOUR_PROJECT_GUID", loadWebView:false);

In that case you can manually refresh the notification count for the currently authenticated user:

letuser=User(id:"1", email:"test1@yopmail.com", firstName:"test1", lastName:"test2")WeLoop.authenticateUser(user: user)WeLoop.refreshNotificationBadge();

Note that it's not necessary if you are preloading the webview:

Invocation method

You can choose between different methods to invoke the WeLoop widget inside your application:

  1. Floating Action Button
WeLoop.set(invocationMethod:.fab)

Customisation options for the button (color, icon, placement) can be done inside your WeLoop project settings.

  1. Shake Gesture
WeLoop.set(invocationMethod:.shakeGesture)
  1. Manual
WeLoop.set(invocationMethod:.manual)
// Then, in your own button or control:
WeLoop.invoke()

Delegate methods

You can set up a delegate to listen for some events returned by the SDK with the following method: WeLoop.set(delegate: self)

You can then implement the following optional delegate methods:

extensionAppDelegate:WeLoopDelegate{func initializationSuccessful(){
// From this point forward, we can safely invoke the Widget manually
}func initializationFailed(with error:Error){
// Initialization Failed (no network for example). Based on the error you'll have to retry the initialization later.
print(error)}func failedToLaunch(with error:Error){
// The widget could not be launched. Most likely is that the initialization process failed, or the user is missing in autoAuthentication
print(error)}func notificationCountUpdated(newCount:Int){
// Set the new count on your custom view
print(newCount)}}

Updating your plist

Since WeLoop offers the possibility to upload photos from the user photo gallery and from the camera, you will have to add the following entries to your plist, if they are not already present:

<key>NSPhotoLibraryUsageDescription</key><string>WeLoop needs to access your library to share pictures from your library</string><key>NSCameraUsageDescription</key><string>WeLoop needs to access your camera to take pictures</string>

License

WeLoop is available under the MIT license. See the LICENSE file for more info.

About

Framework IOS

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages