Coder Social home page Coder Social logo

winter-request-framework's Introduction

Winter CMS Request Framework

This is a modern implementation of the Winter CMS Request library. The original is based on jQuery, which may not be preferable for some developers to use. This library is intended for use on your front end, in themes. Most of the functionality and features have been kept from the original implementation, however it is not meant to replace the framework used in the backend of Winter.

There are two parts to this library, a really basic implementation for making requests and handling all responses yourself, and an implementation with "extras" that simulate the behavior of the original library.

Breaking Changes

  • The data-* attributes that relied on eval() have been removed. There are better ways to achieve this functionality.
  • Asset injection isn't supported by default, but you can extend the plugin to accomplish this.
  • Global AJAX events are removed.
  • $.Deferred()-style promises are removed.
  • Support for the global object $.wn.stripeLoadIndicator is removed.

Improvements

  • For the data-request-update and data-request-data attributes, JSON5 is used to parse that JSON-like syntax used in those attributes.
  • Axios is used to make requests to the server. It takes care of these by default:
    • Detects the XSRF-TOKEN cookie automatically
    • Uses the X-XSRF-TOKEN header automatically (set to the value of the XSRF cookie).
    • Request/Response content type is application/json.

Installing

To include the library in your project, install the package. It has been transpiled into CommonJS and ES2020.

npm i -D @zaxbux/winter-request-framework

Examples

import { WinterRequest } from '@zaxbux/winter-request-framework';

// This is the "extended" version, which inherits from the "base" version.
import { WinterRequestExtras } from '@zaxbux/winter-request-framework';

const form = document.querySelector('#myForm');

const wnRequest = new WinterRequest(form, 'myComponent::onSubmit', {
  onSuccess: async (response) => {
    console.log(response.data);
  },
  
  // ...
});

wnRequest.send();

How does the Winter AJAX Framework work?

Winter includes a way to communicate between the server and frontend JavaScript using "AJAX Handlers".

Making a request to the server

When making an AJAX request to Winter, the X-Requested-With header must be set to XMLHttpRequest.

Winter CMS will look for a handler function name that matches the one supplied in the header. Once executed, the response is returned to the client.

Headers

Name Purpose Values
X-Requested-With Tells Winter/Laravel/Symfony that the request is an "AJAX Request". XMLHttpRequest
X-WINTER-REQUEST-HANDLER Tells Winter which AJAX handler method to use on the controller/component. modules/backend/classes/Controller.php#L435 Component handler: component::onEvent; Generic handler: onEvent (Note: the onAjax handler name will always return null)
X-WINTER-REQUEST-PARTIALS Tells Winter which partials to render and return in the response. Names of partials, separated by the & character. E.g. partial1&partial2&partial3
X-WINTER-REQUEST-FLASH Tells Winter that it should clear existing flash messages respond with new flash messages. modules/cms/classes/Controller.php#L764 true | false

Response Data

{
  "result" : {},
  "X_WINTER_REQUEST_PARTIALS": {
    "name": "<div>HTML</div>",
    // ...
  },
  "X_WINTER_REDIRECT": "https://example.com",
  "W_WINTER_ASSETS": {
    "css": [
      // ...
    ],
    "js": [
      // ...
    ],
    "img": [
      // ...
    ],
  },
  "X_WINTER_ERROR_FIELDS": {
    "field": [
      "Validation message.",
      // ...
    ],
    // ...
  },
  "X_WINTER_ERROR_MESSAGE": ""
}
Name Purpose JSON Structure Example
result If your AJAX handler function returned an array, the data will be present under this key. N/A
X_WINTER_REQUEST_PARTIALS Contains the contents of the partials to update on the page. modules/backend/classes/Controller.php#L460 { "myPartial": "<div>...</div>", ... }
X_WINTER_REDIRECT Contains the URL that the browser should redirect to. modules/backend/classes/Controller.php#L494 "https://example.com"
W_WINTER_ASSETS Contains the assets that should be injected into the page. modules/backend/classes/Controller.php#L508 { "css": [ "style.css", ... ], "js": [ "script.js", ... ], "img": [ "image.png", ... ] }
X_WINTER_ERROR_FIELDS Contains the results of backend field validation. modules/backend/classes/Controller.php#L535 { "email": [ "The email field must be a valid email address.", ... ] }
X_WINTER_ERROR_MESSAGE Used in the backend/cms, not relevant for frontend requests. modules/cms/classes/Controller.php#L790

winter-request-framework's People

Contributors

zaxbux avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.