npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

kontact

v0.2.2

Published

An extensible contact form in PHP and vanilla JavaScript/AJAX.

Downloads

13

Readme

kontact npm Version Packagist Version Build Status

An extensible contact form in PHP and vanilla JavaScript/AJAX.

Quick start

  1. Clone this repo into a location accessible via localhost. For example:
$ cd ~/Sites
$ git clone https://github.com/yuanqing/kontact
$ cd kontact/example

Or simply upload this repo onto a web server that can execute PHP.

  1. Open example/index.php on a web browser, and have a go at submitting the contact form.

Usage

Our contact form is composed of the following:

example/index.php

This is the HTML for the contact form itself.

<body>
  <form action="mail.php" method="post" class="kontact">
    <div><label for="name">Name</label><input type="text" name="name" id="name" value="<?php echo @$_GET['data']['name']; ?>" /></div>
    <div><label for="email">Email</label><input type="text" name="email" id="email" value="<?php echo @$_GET['data']['email']; ?>" /></div>
    <div><label for="message">Message</label><textarea name="message" id="message"><?php echo @$_GET['data']['message']; ?></textarea></div>
    <div><input type="submit" value="Send" /></div>
  </form>
  <script src="../js/src/kontact.min.js"></script>
  <script src="script.js"></script>
</body>
  1. The js/src/kontact.min.js and script.js JavaScript files are to be placed just before the closing body tag.

  2. The action attribute of the form is mail.php.

example/script.js

This is the JavaScript that sends the user input via AJAX to mail.php.

var form = document.querySelectorAll('.kontact')[0];
kontact(form, function(err, data) {
  if (err) {
    // do stuff with `err`, eg. manipulate the DOM to show error messages
    return;
  }
});

kontact(form, cb)

Listens to the submit event on the given form, and sends the user input for validation.

  1. form is a DOM element. User input is sent to the URL specified in its action attribute. (In our example, action is mail.php.)

  2. Form validation results are returned via the cb(err, data) callback. The value of err may be one of:

  • 0 — No error in user input.
  • array — There was an error in the user input. Each element in the array corresponds to a form field where there had been an error.

data is an array containing the user input.

example/mail.php

This is the PHP script that processes the submitted form, and returns a response. It requires the file php/src/Kontact.php.

require_once dirname(__DIR__) . '/php/src/Kontact.php';

use yuanqing\Kontact\Kontact;

$schema = array(
  'name' => array(
    'optional' => true,
    'err' => 'Please enter your name'
  ),
  'email' => array(
    'validate' => function($input) {
      return filter_var($input, FILTER_VALIDATE_EMAIL);
    },
    'err' => 'Please enter a valid email'
  ),
  'message' => array()
);
$cb = function($err, $data) {
  if (!$err) {
    // do stuff with `$data`, eg. send mail($to, $subject, $message)
    return;
  }
};

$kontact = new Kontact($schema, $cb);

$kontact->process($_POST, 'example.php');

Kontact::__construct($schema, $cb)

Constructs a new Kontact instance.

  1. $schema is an array, with each element corresponding to a form field. The key is the name of the form field. The value is an array containing the following:
  • optional — Set to true if the form field can be empty. Defaults to false.
  • validate — A callable for validating user input. It must return false if the user input is invalid.
  • err — The error message (a string) that is returned if optional is false but the field was empty, or if the validate callaback returned false for the given user input.
  1. $cb is a callable that is passed the results of the form validation (namely, the $err messages and the user input $data). Do server-side stuff in $cb, eg. send email, or add $data to a database.

Kontact::process($input, $origin)

Validates the user $input. The user is redirected to $origin if the form was submitted with JavaScript disabled.

Installation

Install via npm:

$ npm i --save kontact

Or via composer:

$ composer require yuanqing/kontact

License

MIT license