Blog

  • jsrouting-provider

    Visit original content creator repository
    https://github.com/idirocco/jsrouting-provider

  • jsrouting-provider

    Visit original content creator repository
    https://github.com/idirocco/jsrouting-provider

  • linear_data_entry_workflow

    Linear Data Entry Workflow

    DOI

    This module forces a linear data entry workflow across REDCap forms and events. The linear workflow is enforced by removing access to any form which does not immediately follow the last completed form. In this way, if a user has not filled out the first form, she cannot proceed to the second (or/and subsequent) form. This module can be configured at the project level to exclude some forms from these rules and make each event independent from the others.

    Prerequisites

    • REDCap >= 8.0.3

    Easy Installation

    • Obtain this module from the Consortium REDCap Repo from the control center.

    Manual Installation

    • Clone this repo into <redcap-root>/modules/linear_data_entry_workflow_v<version_number>.
    • Go to Control Center > Manage External Modules and enable Linear Data Entry Workflow.
    • For each project you want to use this module, go to the project home page, click on Manage External Modules link, and then enable Linear Data Entry Workflow for that project.

    Features included

    Reveal Forms In Order (RFIO)

    This feature operates under the assumption that only complete forms and the immediately ensuing non-complete form should be accessible. For this module, complete is indicated by selecting “Completed” from the completion dropdown.

    For example, if you have 3 forms, X, Y, and Z – in that order, and only form X has been completed, then the user can access form X and form Y, but not form Z. Form Z will become available after form Y is complete.

    This feature changes REDCap’s behavior on 3 pages:

    1. Record Status Dashboard. Ensures the record status dashboard only reveals forms that should be accessible. It goes through each record, and disables links to all forms that are not complete or immediately following a complete form. If there are multiple events, forms are evaluated one event at a time, with the assumption *** that each event must be completed before any forms on the next event can be accessed. Continuing with the above example: if forms X, Y, and Z are designated for both a January and February event, January’s form Z must be complete before the user can fill out February X.
    2. Record Home. Performs much the same function as described above, but on an individual record’s home page. This means that each event is evaluated separately, and the form immediately ensuing the last complete form is the last accessible form.
    3. Data Entry Form. Prevents users from using the left hand sidebar links to navigate to forms that should be inaccessible.

    *** If this assumption is false for your project, access Manage External Modules section of your project, click on Linear Data Entry Workflow’s configuration button, and check “Allow events to be filled out independently from each other” (see image below).

    Allow independent events

    Force Data Entry Constraints (FDEC)

    This feature prevents users from marking a form as complete if the required fields are not filled in. Additionally, field verifications must be satisfied before the form can be marked Completed.

    For example, if the field ‘Age’ requires a number from 0 to 99 and the user enters ‘fifty’ the form cannot be marked as complete. If the user attempts to mark the form complete with an empty field or unverified field, a popup window will direct them to the field(s) that need to be adjusted before they can mark the form complete.

    Adding exceptions

    Linear Data Entry Workflow can be configured to ignore certain forms. To do that, access Manage External Modules section of your project, click on Linear Data Entry Workflow’s configurtion button, and fill Forms Exceptions field.

    Form exceptions

    Suppressing “Save & Go To Next Record”

    In a clinical data collection workflow the study coordinator is likely working with only one research participant at a time. In this case the “Save & Go To Next Record” button might be a distraction. This button can be hidden via the modules project-level configuration option Hide “Save & Go To Next Record” button. There are 3 options:

    • Never: The button will never be hidden.
    • Everywhere but Excepted Forms: The button will be hidden on all forms unless included under Forms Exceptions.
    • Always: The button will always be hidden, even on forms included under Forms Exceptions.

    Auto-locking forms

    Linear Data Entry Workflow can be configured to automatically lock forms upon completion for certain user roles. These roles will not have the ability to unlock these forms on their own. For this feature to work properly the role must have Lock/Unlock privileges.

    This can be configured in the User Rights page. To activate this feature access Manage External Modules section of your project, click on Linear Data Entry Workflow’s configure button, and select a role to activate auto-locking on. Please note that this feature does not affect REDCap administrators, regardless of what role they are in.

    Auto-locking

    Visit original content creator repository https://github.com/ctsit/linear_data_entry_workflow
  • linear_data_entry_workflow

    Linear Data Entry Workflow

    DOI

    This module forces a linear data entry workflow across REDCap forms and events. The linear workflow is enforced by removing access to any form which does not immediately follow the last completed form. In this way, if a user has not filled out the first form, she cannot proceed to the second (or/and subsequent) form. This module can be configured at the project level to exclude some forms from these rules and make each event independent from the others.

    Prerequisites

    • REDCap >= 8.0.3

    Easy Installation

    • Obtain this module from the Consortium REDCap Repo from the control center.

    Manual Installation

    • Clone this repo into <redcap-root>/modules/linear_data_entry_workflow_v<version_number>.
    • Go to Control Center > Manage External Modules and enable Linear Data Entry Workflow.
    • For each project you want to use this module, go to the project home page, click on Manage External Modules link, and then enable Linear Data Entry Workflow for that project.

    Features included

    Reveal Forms In Order (RFIO)

    This feature operates under the assumption that only complete forms and the immediately ensuing non-complete form should be accessible. For this module, complete is indicated by selecting “Completed” from the completion dropdown.

    For example, if you have 3 forms, X, Y, and Z – in that order, and only form X has been completed, then the user can access form X and form Y, but not form Z. Form Z will become available after form Y is complete.

    This feature changes REDCap’s behavior on 3 pages:

    1. Record Status Dashboard. Ensures the record status dashboard only reveals forms that should be accessible. It goes through each record, and disables links to all forms that are not complete or immediately following a complete form. If there are multiple events, forms are evaluated one event at a time, with the assumption *** that each event must be completed before any forms on the next event can be accessed. Continuing with the above example: if forms X, Y, and Z are designated for both a January and February event, January’s form Z must be complete before the user can fill out February X.
    2. Record Home. Performs much the same function as described above, but on an individual record’s home page. This means that each event is evaluated separately, and the form immediately ensuing the last complete form is the last accessible form.
    3. Data Entry Form. Prevents users from using the left hand sidebar links to navigate to forms that should be inaccessible.

    *** If this assumption is false for your project, access Manage External Modules section of your project, click on Linear Data Entry Workflow’s configuration button, and check “Allow events to be filled out independently from each other” (see image below).

    Allow independent events

    Force Data Entry Constraints (FDEC)

    This feature prevents users from marking a form as complete if the required fields are not filled in. Additionally, field verifications must be satisfied before the form can be marked Completed.

    For example, if the field ‘Age’ requires a number from 0 to 99 and the user enters ‘fifty’ the form cannot be marked as complete. If the user attempts to mark the form complete with an empty field or unverified field, a popup window will direct them to the field(s) that need to be adjusted before they can mark the form complete.

    Adding exceptions

    Linear Data Entry Workflow can be configured to ignore certain forms. To do that, access Manage External Modules section of your project, click on Linear Data Entry Workflow’s configurtion button, and fill Forms Exceptions field.

    Form exceptions

    Suppressing “Save & Go To Next Record”

    In a clinical data collection workflow the study coordinator is likely working with only one research participant at a time. In this case the “Save & Go To Next Record” button might be a distraction. This button can be hidden via the modules project-level configuration option Hide “Save & Go To Next Record” button. There are 3 options:

    • Never: The button will never be hidden.
    • Everywhere but Excepted Forms: The button will be hidden on all forms unless included under Forms Exceptions.
    • Always: The button will always be hidden, even on forms included under Forms Exceptions.

    Auto-locking forms

    Linear Data Entry Workflow can be configured to automatically lock forms upon completion for certain user roles. These roles will not have the ability to unlock these forms on their own. For this feature to work properly the role must have Lock/Unlock privileges.

    This can be configured in the User Rights page. To activate this feature access Manage External Modules section of your project, click on Linear Data Entry Workflow’s configure button, and select a role to activate auto-locking on. Please note that this feature does not affect REDCap administrators, regardless of what role they are in.

    Auto-locking

    Visit original content creator repository https://github.com/ctsit/linear_data_entry_workflow
  • avaxcast

    Avaxcast

    Add to Homescreen

    A prediction market for cryptocurrency pair prices, built on Avalanche C-Chain (FUJI Testnet) & uses Chainlink price feeds to resolve markets.

    Website

    Demo Video

    Features

    • Add new prediction markets for currency pairs AVAX/USD, BTC/USD, ETH/USD & LINK/USD.
    • Set predicted price and end date (deadline) for new markets.
    • Buy shares in a prediction (Yes or No) using AVAX in a given prediction market e.g. “Will BTC/USD be greater than or equal to $50,000 by 31st Sept 2021”.
    • Update share prices dynamically using the probability of the expected outcome.
    • Avoid price volatility for first bought shares by determining the price via the probability with an increasing spread until a suitable sample size is met.
    • Display end time for a market in local time.
    • Display all invested markets and user’s current number of votes in them.
    • Auto resolves markets on-chain using Chainlink price feeds after end date.
    • Withdraw winnings calculated by total value locked in multiplied by the proportion of user’s winning shares to total winning shares.
    • Prevent buying shares after end date and withdrawal of losing shares.

    Requirements

    To interact with the Avaxcast dApp you need a Metamask wallet on the Avalanche FUJI Testnet. For help setting up Avalanche FUJI testnet with Metamask, visit Avalanche’s documentation

    Deployment

    Avalanche C-Chain

    The backend smart contract PredictionMarket.sol is currently live on the Avalanche FUJI Testnet. A new PredictionMarket.sol contract is deployed to the Avalanche FUJI Testnet for every market i.e. when a user submits a market on the Add market page.

    Skynet

    We use Skynet to deploy our frontend via their Github Action. To add our app to your Skynet Homescreen please press the button above. We also use SkyDB to store a JSON containing an array of all deployed Prediction Market contract addresses.

    Documentation

    Full documentation can be found on Github Pages or in the docs folder

    Visit original content creator repository https://github.com/jaimi-io/avaxcast
  • medium-clone

    Medium Clone

    • Checkout medium blog on vercel – https://medium-clone-k1feq3m45-jromil51-gmailcom.vercel.app
    • Build Medium blog clone with NEXT.JS, ReactJs, TypeScript, Sanity CMS, GROQ (similar to graphQL), React, Tailwind CSS, ISR((Incremental Static Regeneration)) , next-sanity, react-portable-text
    • typings.d.ts file means definition typescript file, It is about how we store type definitions
    • NextJs SSR -> Nextjs server prebuilds the page, /page per request
    • if you visit a page which does not exist with /post/anyname then it will give 404 error
    • we have used [slug].js for linking posts to page according to slugs which we get from sanity schema
    • used revalidate from sanity so after 60 sec, it’ll update the old cache, will delete old cache and had new one, so page can get changes automatically
    • react-portable-text – An easy way to render Portable Text block content in React applications. (you cannot edit img tag in specializers)
    • Used react-hook-form for form validations → https://react-hook-form.com
    • comment will get showed only after approval of moderator

    Project Video

    IMAGE ALT TEXT HERE

    Usefull commands

    • npm init
    • yarn run dev (runs project)
    • install sanity globally and make sanity account (npm install -g @sanity/cli)
    • use (sanity init) for initializing sanity
    • Starting sanity
      • cd mediumsanity
      • sanity start (starts sanity on port)
    • use GROQ query language to get data from sanity in sanity studio → vision
    *[_type == "post"]{
      _id,
      title,
      author-> {
      name,
      image
    	// you can also use ... spread operator to get all things
    },
    description,
    mainImage,
    slug,
    }
    

    .env.local

    • Make .env.local in root folder with below details, found details from sanity.json file as projectId, dataset
    • adding NEXT_PUBLIC allows access to client as well as API side
    NEXT_PUBLIC_SANITY_DATASET=production
    NEXT_PUBLIC_SANITY_PROJECT_ID=
    SANITY_API_TOKEN=
    

    Tips

    • Interfaces are better type, because in interface you can do extending, means you can inherit types from other types
    • if you are using .then then you don’t need to use await async
    • API_TOKEN_KEY allows us to read and write to database in sanity

    Usefull Links

    Visit original content creator repository https://github.com/romiljain5/medium-clone
  • skillgrowth-ui

    SkillGrowth UI

    SkillGrowth is an application where learners can enroll to courses and contributors can create modules and courses. This project serves as a playground to learn more about Angular and other frontend technologies. This project is still on going and cool new features like PWA, etc, will be added.

    Setting Up

    • clone this repository.
    • run yarn install to install dependencies.
    • run npm run start to start the dev server and run the application locally.

    Features

    • Angular 7
    • Angular Material
    • Typescript
    • State Management (NgRx Store)
    • RxJS
    • Quill
    • Angular Toaster
    • Jasmine

    Development server

    Run ng serve for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

    Code scaffolding

    Run ng generate component component-name to generate a new component. You can also use ng generate directive|pipe|service|class|guard|interface|enum|module.

    Build

    Run ng build to build the project. The build artifacts will be stored in the dist/ directory. Use the --prod flag for a production build.

    Running unit tests

    Run ng test to execute the unit tests via Karma.

    Running end-to-end tests

    Run ng e2e to execute the end-to-end tests via Protractor.

    Further help

    To get more help on the Angular CLI use ng help or go check out the Angular CLI README.

    Visit original content creator repository
    https://github.com/junibrosas/skillgrowth-ui

  • react-native-easy-push-notifications

    Build Status Supports Android and iOS License NPM Version

    React-Native-Easy-Push-Notifications is developed to help the react-native developers in speeding-up their development process. This package leverages the developer from implementing notifications easily. The implementation is kept point-to-point to provide easy usage to the developer. Follow the guide below to get you up and running with the notifications:

    Installation

    If you prefer npm,

    $ npm install react-native-easy-push-notifications --save

    If you prefer yarn,

    $ yarn add react-native-easy-push-notifications

    Setup FireBase Project

    • Go to firebase console https://firebase.google.com/
    • Log-in to your google account and add a project with any name you like.
    • After successfull creation of the project you will be shown homepage of your project.

    Android

    Android setup is a two step process. The first step can be done in two ways:

    First Step:

    Way 1:
    • Go to settings -> Project Settings -> scroll to bottom and add an android application.
    • Add android package name. ( You can find package name in your Manifest.xml )
    • Click on the Register button.
    • Download the google-services.json and place it in the android -> app .
    • Click on the Next button and go to your Project level build.gradle.
    • Inside your /build.gradle:
      • Add firebase_messaging = '20.1.0' to buildscript -> ext.
      • Add google() // Google's Maven repository to buildscript -> repositories.
      • Add classpath 'com.google.gms:google-services:4.3.3' to buildscript -> dependencies.
      • Add google() // Google's Maven repository to allprojects -> repositories.
    • Go to App level build.gradle and add following lines:
      • Add apply plugin: 'com.google.gms.google-services' after apply plugin: "com.android.application" .
      • Add implementation 'com.google.firebase:firebase-messaging:20.1.0' to dependencies.
      • Click on the Next button and then continue to the console.
    Way 2:
    • Open project in Android studio.
    • login to your google account.
    • Go to Tools -> Firebase -> Cloud Messaging -> Setup Firebase Cloud Messaging from Android studio options.
    • Click on Connect To Firebase button and from existing FireBase project dropdown, select the project we created in setup firebase section. Click on connect
    • Click on Add FCM to your app button and then click on Accept changes button shown in the dialog.
    • In your Project level build.gradle, Add firebase_messaging = '20.1.0' to buildscript -> ext.

    Second Step:

    • Open Manifest.xml and following line of code to it:
      • Add android:launchMode="singleTop" to Activity tag with name: .MainActivity.
      • Add following service tag to Manifest.xml:
      <service android:name="com.blitzapp.module.push.NotificationsService"
                android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
      </service>
      • Add following meta-data tag to Manifest.xml:
      <meta-data android:name="com.google.firebase.messaging.default_notification_icon"
                 android:resource="@drawable/notifications_icon" />
    • notifications_icon is required. You can generate this icon from here: Icon generate link
    • Place the icon generated in the drawable folder.
    • Go to the MainActivity.java and add following lines of code:
      • Add this to imports: import com.blitzapp.module.push.RNEasyPushNotificationsModule;
      • Add this function :
      @Override
      public void onNewIntent(Intent intent) {
          Bundle extras = intent.getExtras();
          if (extras != null) {
              for (String key : extras.keySet()) {
                  Object value = extras.get(key);
                  Log.d("MainActivity", "Extras received at onNewIntent:  Key: " + key + " Value: " + value);
              }
      
              String title = extras.getString("title");
              String message = extras.getString("body");
              if (message != null && message.length() > 0) {
                  RNEasyPushNotificationsModule.setExtras(extras);
              }
              JSONObject json = new JSONObject();
              Set<String> keys = extras.keySet();
              for (String key : keys) {
                  try {
                      json.put(key, JSONObject.wrap(extras.get(key)));
                  } catch(JSONException e) {
                      //Handle exception here
                  }
              }
              String data = "";
              try {
                  data = json.getString("data");
      
              } catch (JSONException e) {
                  e.printStackTrace();
                  data = json.toString();
              }
              Intent i = new Intent("onNotificationTap");
      
              i.putExtra("data", data);
              LocalBroadcastManager.getInstance(this).sendBroadcast(i);
          }
      }
      - Add this segment to onCreate method:
      ```sh
      if(RNEasyPushNotificationsModule.activityToOpen == null){
        RNEasyPushNotificationsModule.activityToOpen = this;
      }
      
      Intent i = getIntent();
      Bundle extras = i.getExtras();
      if (extras != null) {
        for (String key : extras.keySet()) {
          Object value = extras.get(key);
          Log.d("MainActivity", "Extras received at onCreate:  Key: " + key + " Value: " + value);
        }
      
        String title = extras.getString("title");
        String message = extras.getString("body");
        if (message != null && message.length() > 0) {
          RNEasyPushNotificationsModule.setExtras(extras);
        }
      }

    ios

    IOS setup is a two step process.

    First Step:

    • Go to settings -> Project Settings -> scroll to bottom and add an ios applicaton.
    • Add your ios app bundle identifer and click on the Next button.
    • Download the GoogleService-Info.plist and drag it into your project in Xcode.
    • Click on the Next, then Next and then Continue to the console.

    Second Step:

    • Go to developer.apple.com and then go to certificates,Ids and profiles -> identifiers -> your app identifier -> Push Notifications and enable it.
    • Open your project in Xcode and go to Signing & capabilities -> Capability -> enable Push Notifications.
    • Open your podfile and Add pod 'RNEasyPushNotificationsModule', :path => '../node_modules/react-native-easy-push-notifications'.
    • Open terminal at root of your project and run following commands:
    $ cd ios
    $ pod install
    • Add #import "RNEasyPushNotificationsModule.h" to the imports section.
    • Open your app’s Appdelegate.h and add the following code to the interface section:
    {
    RNEasyPushNotificationsModule *nModule;
    NSDictionary *dic;
    }
    -(NSDictionary *)getLaunchOptions;
    +(RCTBridge *) getSharedBridge;
    • Open your app’s Appdelegate.m and add the following code to the didFinishLaunchingWithOptions method:
    if (launchOptions!=nil) {
    NSMutableDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    NSLog(@"userInfo===%@", userInfo);
    if (userInfo.count>=1) {
    NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];
    NSLog(@"Received apsInfo Badge: %@", userInfo);
    RNEasyPushNotificationsModule *nModule = [RNEasyPushNotificationsModule allocWithZone: nil];
    [nModule setRemoteNotification:userInfo];
      }
    }

    React Native

    After setting up our project on both android and ios, we are all set to consume this module in react native. Following are the usage of functions exposed by this package:

    import reactNativeEasyPushNotifications from 'react-native-easy-push-notifications';
    
    componentDidMount(){
        reactNativeEasyPushNotifications.getDeviceId( deviceId => {
                console.log("My device id ", deviceId);
            // This method gives the device id which is returned by the firebase
            })
           
        reactNativeEasyPushNotifications.onMessageReceived(notif => {
                console.log("onMessageReceived:", notif);
            // This method is triggered whenever the app is in foreground and we receive the notification
            })
           
        reactNativeEasyPushNotifications.getLastNotificationData(notif => {
                console.log("getLastNotificationData:", notif);
            // This method is triggered whenever the user taps on the notification
            })
    }

    Todos

    We aim to make this package even more robust and powerful by adding following features in the upcoming releases:

    • Reply from notification
    • Add support to view image in notification
    • Add an example project
    • Notification testing dashboard

    License

    MIT

    Visit original content creator repository https://github.com/Blitz-Mobile-Apps/react-native-easy-push-notifications
  • news-homepage-main

    Frontend Mentor – News homepage solution

    This is a solution to the News homepage challenge on Frontend Mentor. Frontend Mentor challenges help you improve your coding skills by building realistic projects.

    Table of contents

    Overview

    The challenge

    Users should be able to:

    • View the optimal layout for the interface depending on their device’s screen size
    • See hover and focus states for all interactive elements on the page

    Screenshot

    Desktop Design Screenshot

    Mobile Design Screenshot

    Links

    My process

    Built with

    • Semantic HTML5 markup
    • CSS custom properties
    • Flexbox
    • CSS Grid
    • CSS Subgrid
    • Desktop-first workflow
    • JavaScript
    • JavaScript Event Listeners
    • Transitions
    • Responsive Layouts

    What I learned

    I learned how to build a responsive hidden burger menu using HTML, CSS, and JavaScript. This involved using hidden elements, CSS positioning, CSS transitions for smooth animations, and JavaScript event listeners to toggle the menu’s visibility by adjusting the menu’s position on the workflow.

    <img id="menu__icon" src="/assets/images/icon-menu.svg" alt="icon-menu" />
    #menu {
      height: 100vh;
      width: 75vw;
      background: hsl(36, 100%, 99%);
      position: fixed;
      top: 0;
      transition: 0.5s ease-in-out;
      z-index: 2;
    }
    
    .hidden {
      right: -100%;
    }
    
    .visible {
      right: 0;
    }
    let menuIcon = document.getElementById("menu__icon");
    menuIcon.addEventListener("click", () => {
      menu.classList.remove("hidden");
      menu.classList.add("visible");
    });
    
    iconMenuClose.addEventListener("click", () => {
      menu.classList.remove("visible");
      menu.classList.add("hidden");
    });

    Continued development

    In future projects, I want to focus on responsively generated components. While I have learned how to create a burger menu, I want to refine my skills in dynamically generating and modifying UI elements based on screen size and user interactions.

    Some key areas I plan to improve:

    • Dynamic Component Rendering: Creating elements in JavaScript based on user actions or device breakpoints.
    • CSS Flexibility: Enhancing my understanding of clamp(), min(), max(), and other modern CSS techniques for better responsiveness.
    • Performance Optimization: Ensuring that dynamically generated components do not negatively impact page load speed and user experience.

    Useful resources

    • Kevin Powell’s YouTube Channel – This helped me with subgrid layout. I really liked this pattern and will use it going forward.
    • Ahmed Shadeed’s Personal Blog – This is an amazing article which helped me understand everything about layouts in CSS, CSS techniques for better responsiveness using responsive units. I’d recommend it to anyone still learning this concept.

    Author

    Visit original content creator repository https://github.com/ayman-soliman-1783/news-homepage-main
  • ptg

    Procedural Texture Generator

    The Procedural Texture Generator is a JavaScript tool for creating textures and patterns on HTML5 canvas. It lets you make all sorts of designs using code, like making clouds or funky geometric shapes. You can tweak colors, shapes, and other settings to get just the look you want. Then, you can easily draw your creations right onto a canvas on your webpage. It’s perfect for making interactive web apps, digital art, or experimenting with cool visual effects!
    Learn more about procedural textures.

    Usage

    index.html

    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="utf-8">
    	<script type="text/javascript" src="ptg.js"></script>
    </head>
    <body>
    	<canvas id="c" width="100" height="100"></canvas>
    	<script type="text/javascript" src="main.js"></script>
    </body>
    </html>

    main.js

    const canvas = document.getElementById('c');
    const tg = new PTG.ProceduralTextureGenerator(canvas);
    tg.set([{
    	program:'sinX',
    	blendMode:'add',
    	tint:[0,1,0],
    	frequency:0.031,
    	offset:0
    },{
    	program:'sinY',
    	blendMode:'multiply',
    	tint:[0,1,0],
    	frequency:0.031,
    	offset:0
    },{
    	program:'twirl',
    	tint:[1,1,1],
    	radius:100,
    	strength:100,
    	position:[128,128]
    }]);

    See it in the demo site.

    Parameters

    Programs

    • tint
    • sinX
    • sinY
    • or
    • xor
    • checkerBoard
    • rectangle
    • circle
    • noise
    • fractalNoise
    • cellularNoise
    • voronoiNoise
    • cellularFractal
    • voronoiFractal
    • transform
    • sineDistort
    • twirl

    Blend Modes

    • add
    • subtract
    • multiply
    • divide
    • and
    • or
    • xor
    • screen
    • difference
    • darken
    • lighten
    • overlay
    • exclusion

    Visit original content creator repository
    https://github.com/andraswebcode/ptg