Giter VIP home page Giter VIP logo

wp-foo-bar's Introduction

Foo Bar Plugin for WordPress

Banner WordPress plugin template for extending Gutenberg at XWP.

Contributors: xwp
Requires at least: 5.0
Tested up to: 5.3.2
Stable tag: 0.0.1
License: GPLv2 or later

version Build Status Coverage Status Built with Grunt

Description

Scaffolding

Use the init-plugin.sh bash script to scaffold a new plugin. The script will enter an interactive shell on your host machine and copy this plugin while making necessary string replacements:

./init-plugin.sh

The init-plugin.sh script will be removed from the generated plugin. You should also update your readme.txt and add/change any of the config files your project may need, read more about your options in the xwp/wp-dev-lib/readme.md file.

Coveralls Pro

To use Coveralls Pro with your private repository you will need to change the service_name inside .coveralls.yml to travis-pro, and add the COVERALLS_REPO_TOKEN to the settings in Travis CI. If you don't want to use Coveralls then you will need to delete the .coveralls.yml and remove npm run test:js:coveralls step from the script section in the .travis.yml file.

Adding Classes

When adding a new class you should instantiate it in Plugin::init and inject Plugin as a dependency. There is a Sample class inside the php directory that demonstrates this behavior and how doc hooks work.

Installation

  1. Upload the folder to the /wp-content/plugins/ directory.
  2. Activate the plugin through the 'Plugins' menu in WordPress.

Frequently Asked Questions

A question that someone might have

An answer to that question.

Getting Started

If you are a developer, we encourage you to follow along or contribute to the development of this plugin on GitHub.

Screenshots

Look at this demo photo!

Look at this demo photo!

Changelog

For the plugin’s changelog, please see the Releases page on GitHub.

wp-foo-bar's People

Contributors

behzod avatar davidlonjon avatar delawski avatar derekherman avatar dugajean avatar kasparsd avatar kienstra avatar kopepasah avatar mattgeri avatar mehigh avatar ravichdev avatar renovate-bot avatar renovate[bot] avatar valendesigns avatar westonruter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wp-foo-bar's Issues

Remove *nix platform dependency from development tooling

The current local development tooling requires bash, grep, awk and other unix specific tools to be available on the host machine.

Most of the commands defined under /bin can be moved into npm scripts that are cross-platform and have Node.js as the only dependency.

  • This is a WordPress specific software library so our primitives are PHP, JS and web technologies in general. We should try to use those for scripting needs, too.

  • Using JS scripts for development tasks ensures we can use the same linting and coding standards as the rest of the project. We get automatic error checking, etc.

  • Scripts that can't be replaced without a lot of development effort (like tag-built.sh) could be run inside the Docker environment instead.


Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

Organization name placeholder should be different than `xwp`

Bug Description

During a new plugin initialization, when executing init-plugin.sh, each occurrence of the xwp string is replaced with the org_lower variable:

git grep -lz "xwp" | xargs -0 sed -i '' -e "s/xwp/$org_lower/g"

When the organization name is different than xwp, we're running into some unexpected issues. In such case e.g. composer.json and package.json files get corrupted like this:

  "require-dev": {
    [ ... ],
-   "xwp/wordpress-tests-installer": "*",
-   "xwp/wp-dev-lib": "*"
  },
  "require-dev": {
    [ ... ],
+   "acme/wordpress-tests-installer": "*",
+   "acme/wp-dev-lib": "*"
  },

This leads to initialization errors and not being able to complete the setup.

Expected Behaviour

Some other organization name placeholder should be used instead of xwp string. This could be something like foo-bar-org.

The xwp string should still be used wherever it's intended and should not be replaced throughout the initialization process.

Steps to reproduce

  1. Clone the repo
  2. Go to cd wp-foo-bar folder
  3. Start the initialization: ./init-plugin.sh
  4. When asked for organization name, provide something else than xwp (e.g. leave empty)
  5. Observe errors in the initialization process. See the e.g. composer.json and package.json files contents

Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

Remove Perl dependency

These should be no perl dependency. It can be rewritten to use bash tools like sed or php instead.

Fix issue with hard coded WP Content location.

In class-plugin-base.php, wp-content is hard coded and make it impossible to include a plugin anywhere outside of a directory not named wp-content (which can be the case when using custom WP_CONTENT_DIR or WPMU_PLUGIN_DIR).

Negative integer as a hook priority

Sometimes there is a need for setting a negative number for the priority. Current regex code uses only digits for the priority and does not allow negative integers:

(?P<priority>\d+)

I recommend to change it to:

(?P<priority>\-?[0-9]+)

Can open a pull request once #28 is megged.

Eliminate filter addition in class constructor

public function __construct( $config = array() ) {
$default_config = array(
// ...
);
$this->config = array_merge( $default_config, $config );
add_action( 'after_setup_theme', array( $this, 'init' ) );
parent::__construct(); // autoload classes and set $slug, $dir_path, and $dir_url vars
}
/**
* @action after_setup_theme
*/
function init() {
$this->config = \apply_filters( 'foo_bar_plugin_config', $this->config, $this );
}

Per https://xwp.github.io/engineering-best-practices/php/

Inability to run tests from host machine is an inconvenience

Bug Description

I tried running yarn test:php from my host machine and got the following error:

$ yarn test:php
yarn run v1.21.1
$ composer test
> phpunit

Warning: require_once(/var/www/html/wp-includes/class-phpmailer.php): failed to open stream: No such file or directory in /Users/dugi/Code/xwp/wp-foo-bar/vendor/xwp/wordpress-tests/phpunit/includes/mock-mailer.php on line 2

Fatal error: require_once(): Failed opening required '/var/www/html/wp-includes/class-phpmailer.php' (include_path='.:/usr/local/Cellar/php/7.4.1/share/php/pear') in /Users/dugi/Code/xwp/wp-foo-bar/vendor/xwp/wordpress-tests/phpunit/includes/mock-mailer.php on line 2
PHP Warning:  require_once(/var/www/html/wp-includes/class-phpmailer.php): failed to open stream: No such file or directory in /Users/dugi/Code/xwp/wp-foo-bar/vendor/xwp/wordpress-tests/phpunit/includes/mock-mailer.php on line 2
PHP Fatal error:  require_once(): Failed opening required '/var/www/html/wp-includes/class-phpmailer.php' (include_path='.:/usr/local/Cellar/php/7.4.1/share/php/pear') in /Users/dugi/Code/xwp/wp-foo-bar/vendor/xwp/wordpress-tests/phpunit/includes/mock-mailer.php on line 2

This is understandable since I don't have WP Core in my host machine. However, this present quite an inconvenience for developers to run their tests.

The way I see it, there are two options to make this friendlier:

  1. Adjust scripts in package.json to run a docker-compose exec ... and execute tests scripts within the container; or
  2. Remove dependency to the WordPress Tests package (not a very good idea, imo)

Please comment if you have a better alternative!

Expected Behaviour

  • Execute yarn test:php from your host machine
  • The tests run successfully

Steps to reproduce

  • Execute yarn test:php from your host machine
  • The command breaks with the error shown above

Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

Track lock files

Feature description

Reliable and reproducible setups help ship stable and reliable code. Tracking lock files for npm and Composer is considered a best practice and we should encourage this behaviour as projects get created from this plugin template.

Renovate is already managing dependency updates in package.json and composer.json so it shouldn't add any overhead in that regard, too.

Extra files in built plugin

Bug Description

Both the init-plugin.sh and postcss.config.js files and wp-assets directory are being added to the built plugin.

Expected Behaviour

Both files should be excluded from the build and foo-bar.zip directory.

Steps to reproduce

  1. npm run build
  2. Extract the foo-bar.zip or look in the build directory
  3. The files will be in the root of the directory.

Xdebug 3.0.0 not compatible with PHPUnit 7

Bug Description

Xdebug released 3.0.0, which is not compatible with PHPUnit 7, which WordPress tests requires.
The result is running with coverage throws the error Use of undefined constant XDEBUG_CC_UNUSED - assumed 'XDEBUG_CC_UNUSED' (this will throw an Error in a future version of PHP)

Screenshots

Screenshot 2020-12-02 at 10 44 31

Changelog entry

Set PECL to install Xdebug 2.9.8

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Error type: undefined. Note: this is a nested preset so please contact the preset author if you are unable to fix it yourself.

Plugin doesn't work if opcache.save_comments is disabled.

Bug Description

Opache is caching in PHP, it takes your PHP code and compile it, so your site runs faster. For some large hosting companies they enable a flag called save_comments.

Quote from docs.

If disabled, all documentation comments will be discarded from the opcode cache to reduce the size of the optimised code. Disabling this configuration directive may break applications and frameworks that rely on comment parsing for annotations, including Doctrine, Zend Framework 2 and PHPUnit.

The wp-foo-bar use annotations to hook in filters and actions.

As comments are required for these filters / actions to hooked, when opache removes them, the plugin does not function.

Expected Behaviour

Plugin should work if opcache.save_comments is disabled, as many hosting companies may disable save_comments

Steps to reproduce

Set opache.save_comments = false.

Acceptance criteria

Implementation brief

Simply use php hooks

add_filter( 'the_content', [ $this, 'hotlink_images_in_content'] , 99, 1 );

QA testing instructions

Demo

Changelog entry

  • Refactored code to work when Opache.save_comment is set to false.

Original bug: xwp/unsplash-wp#195
Original Fix: xwp/unsplash-wp#197
Original bug reports - Settings won’t load on install

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • Replace dependency babel-eslint with @babel/eslint-parser 7.11.0
  • Replace dependency npm-run-all with npm-run-all2 5.0.0
  • Update dependency @testing-library/react to v11.2.7
  • Update dependency accessible-autocomplete to v2.0.4
  • Update dependency grunt-contrib-clean to v2.0.1
  • Update dependency postcss-preset-env to v6.7.2
  • Update dependency rtlcss-webpack-plugin to v4.0.7
  • Update dependency acorn to v8.11.3
  • Update dependency babel-loader to v8.3.0
  • Update dependency babel-plugin-istanbul to v6.1.1
  • Update dependency eslint-plugin-import to v2.29.1
  • Update dependency semver to v7.6.2
  • Update dependency typescript to v4.9.5
  • Update dependency webpack to v4.47.0
  • Update dependency webpack-cli to v4.10.0
  • Update istanbuljs monorepo (istanbul-lib-coverage, istanbul-lib-report, istanbul-reports)
  • Update dependency @testing-library/react to v15
  • Update dependency accessible-autocomplete to v3
  • Update dependency babel-loader to v9
  • Update dependency css-loader to v7
  • Update dependency cssnano to v7
  • Update dependency dotenv to v16
  • Update dependency eslint to v9
  • Update dependency eslint-plugin-jest to v28
  • Update dependency eslint-plugin-prettier to v5
  • Update dependency fs-extra to v11
  • Update dependency grunt-shell to v4
  • Update dependency phpunit/phpcov to v10
  • Update dependency phpunit/phpunit to v11
  • Update dependency postcss-import to v16
  • Update dependency postcss-loader to v8
  • Update dependency postcss-nested to v6
  • Update dependency postcss-preset-env to v9
  • Update dependency prettier to v3
  • Update dependency puppeteer to v22
  • Update dependency rtlcss to v4
  • Update dependency source-map-loader to v5
  • Update dependency typescript to v5
  • Update dependency webpack-cli to v5
  • Update dependency webpackbar to v6
  • Update dependency yoast/phpunit-polyfills to v2
  • Update react monorepo to v18 (major) (react, react-dom)
  • 🔐 Create all rate-limited PRs at once 🔐

Edited/Blocked

These updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

composer
composer.json
  • php >=5.6.20
  • php-coveralls/php-coveralls ^2.2.0
  • phpunit/phpcov ^5.0
  • phpunit/phpunit ^7
  • yoast/phpunit-polyfills ^1.0
docker-compose
docker-compose.yml
  • mysql 5
dockerfile
bin/local-dev/wordpress/Dockerfile
npm
package.json
  • @babel/cli 7.15.4
  • @babel/core 7.15.5
  • @babel/plugin-proposal-optional-chaining 7.14.5
  • @babel/polyfill 7.12.1
  • @testing-library/react 11.2.2
  • @wordpress/block-editor 5.3.3
  • @wordpress/blocks 6.25.2
  • @wordpress/browserslist-config 2.7.0
  • @wordpress/dom 2.18.0
  • @wordpress/dom-ready 2.13.2
  • @wordpress/e2e-test-utils 4.16.1
  • @wordpress/eslint-plugin 7.4.0
  • @wordpress/i18n 3.20.0
  • @wordpress/jest-preset-default 6.6.0
  • @wordpress/jest-puppeteer-axe 1.10.0
  • @wordpress/postcss-themes 2.6.0
  • @wordpress/scripts 12.6.1
  • @wordpress/server-side-render 1.21.3
  • @wordpress/url 2.22.2
  • accessible-autocomplete 2.0.3
  • acorn 8.5.0
  • autoprefixer 10.3.6
  • babel-eslint 10.1.0
  • babel-jest 26.6.3
  • babel-loader 8.2.2
  • babel-plugin-istanbul 6.0.0
  • babel-plugin-transform-require-context 0.1.1
  • browserslist 4.17.0
  • coveralls 3.1.1
  • cross-env 7.0.3
  • css-loader 5.2.7
  • cssnano 4.1.11
  • dotenv 8.6.0
  • eslint 7.32.0
  • eslint-plugin-eslint-comments 3.2.0
  • eslint-plugin-import 2.24.2
  • eslint-plugin-jest 24.4.0
  • eslint-plugin-prettier 3.4.1
  • eslint-plugin-react 7.25.1
  • eslint-utils 2.1.0
  • fs-extra 9.1.0
  • grunt 1.4.1
  • grunt-contrib-clean 2.0.0
  • grunt-contrib-copy 1.0.0
  • grunt-shell 3.0.1
  • grunt-wp-deploy 2.1.2
  • istanbul-lib-coverage 3.0.0
  • istanbul-lib-report 3.0.0
  • istanbul-reports 3.0.2
  • jest-puppeteer-istanbul 0.5.3
  • jest-silent-reporter 0.3.0
  • mini-css-extract-plugin 1.2.1
  • minimist 1.2.5
  • npm-run-all 4.1.5
  • null-loader 4.0.1
  • optimize-css-assets-webpack-plugin 5.0.8
  • postcss 8.3.6
  • postcss-color-function 4.1.0
  • postcss-import 13.0.0
  • postcss-loader 4.3.0
  • postcss-nested 4.2.3
  • postcss-preset-env 6.7.0
  • prettier ^2.0.4
  • puppeteer 3.0.0
  • react 17.0.2
  • react-dom 17.0.2
  • rtlcss 2.6.1
  • rtlcss-webpack-plugin 4.0.6
  • semver 7.3.5
  • source-map-loader 1.1.2
  • svg-inline-loader 0.8.2
  • terser-webpack-plugin ^4.2.3
  • typescript 4.4.3
  • webpack 4.46.0
  • webpack-cli 4.8.0
  • webpackbar 4.0.0
  • node >=10
  • npm >=6.9
nvm
.nvmrc

  • Check this box to trigger a request for Renovate to run again on this repository

Hardcoded string has been sanitized twice

_foo_bar_php_version_error function provides an error message, that error message is a hardcoded string and it has been sanitized twice.
In WordPress, hardcoded strings don't need sanitization. Duble sanitization for one string is also not a good idea...

Rewrite date of initial commit

When initializing a new repo, the original foo-bar commit date is used for the initial commit. This is misleading. It would be better if the date were forced to be the present date/time.

PHPUnit coverage hangs due to Iterator iterating over all files in node_modules

Bug Description

Run npm install to install all npm deps, after the install finishes node_modules folder will contain tons of files/folders. Run test:php:coverage, this would result in the coverage command freezing and might end up taking a lot of time as the Iterator class in phpunit iterates over every file in node_modules before it adds them to the blacklist.

Expected Behaviour

Steps to reproduce

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Screenshots

Additional context

  • WordPress version:
  • Plugin version:
  • Gutenberg plugin version (if applicable):
  • PHP version:
  • OS:
  • Browser: [e.g. chrome, safari]
  • Device: [e.g. iPhone6]

Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

Build script

I'd like to see a build script, one that will strip all unnecessary files - tests, dotfiles etc. It should also replace version with the value of git describe.

Setup i18n support

Feature description

We should fully support the i18n requirements for plugins. Someone should research the latest best practices for loading translation files, describe and implement them.

Add WP CLI to the Docker container and add script to initialize WordPress

Feature description

  • Basically WP CLI is missing in the Dockerfile
  • Add a way to quickly setup WordPress in order to avoid going through the installation wizard

Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

Sub-namespaces don't autoload

Bug Description

If there are subfolders in php/, the files in them will not be autoloaded.

Example

| - php/
| - - class-sample.php
| - - BarBaz/
| - - - - class-sample.php

If you do use FooBar\BarBaz\Sample; it will throw an exception.

Expected Behaviour

Sub-namespaces should be autoloaded accordingly.

Steps to reproduce

Create a class nested under a folder within php/ and use it in php/class-plugin.php. It will throw an exception.

Additional context

The current autoloading method does not account for sub-namespaces.


Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

Ignore minified files from Git; only commit minified files to SVN

Committing minified JS and CSS to the Git repo is problematic. First of all, it's easy to forget to run the minification causing the source files to get out of sync. Secondly, minified files in the repo will often cause merge conflicts in PRs.

WordPress Core does not include minified files for source files in its develop repo (there are minified files, but only for external libraries). The minified files are only loaded if WP is running off of a non-develop (build) repo, and if SCRIPT_DEBUG is not true.

I suggest that we:

Fix directory separator issue in Windows

Bug Description

See xwp/unsplash-wp#194 xwp/unsplash-wp#201

Expected Behaviour

Steps to reproduce

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Screenshots

Additional context

  • WordPress version:
  • Plugin version:
  • Gutenberg plugin version (if applicable):
  • PHP version:
  • OS:
  • Browser: [e.g. chrome, safari]
  • Device: [e.g. iPhone6]

Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

WP trunk (with target version 5.9) requires yoast/phpunit-polyfills for the WP unit test library

Bug Description

The phpunit tests for this project fail to run with the latest trunk revision of WP core.

See https://core.trac.wordpress.org/changeset/51559/

Expected Behaviour

The phpunit test suite for this project should be able to run on all supported versions of WP which includes the upcoming version 5.9 which adds support for PHP 8 and updates the associated phpunit dependency.

Steps to reproduce

The CI run for this job

wp-foo-bar/.travis.yml

Lines 106 to 108 in bcf3609

- name: PHP unit tests (7.4, WordPress trunk)
php: "7.4"
env: WP_VERSION=trunk DEV_LIB_ONLY=phpunit
now fails.

See https://app.travis-ci.com/github/xwp/wp-foo-bar/jobs/536042989#L473

Screenshots

Additional context

  • WordPress version:
  • Plugin version:
  • Gutenberg plugin version (if applicable):
  • PHP version:
  • OS:
  • Browser: [e.g. chrome, safari]
  • Device: [e.g. iPhone6]

Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

Support external PHP dependencies

Feature description

It would be great to support other PHP libraries as dependencies in projects created from the wp-foo-bar template. It would also enable modular design where some of the existing features such as the docblock hook API or the autoloader can be decoupled into standalone libraries that can be used in other projects such as themes, sites, etc.

This requires that we address the following issues:

  1. Namespace isolation for external libraries to ensure there are no conflicts with other plugins/themes/projects using the same dependencies. This is especially important for plugins hosted on WP.org and used on a variety of site setups.

    This can be solved by libraries such as https://github.com/humbug/php-scoper (used by the Yoast SEO plugin and the Google Site Kit plugin) https://github.com/coenjacobs/mozart or https://github.com/TypistTech/imposter-plugin.

  2. Bundling of dependencies when creating the plugin package. Note that the development dependencies shouldn't be included in the release package.

    Both Yoast SEO and Google Site Kit use a dedicated dependency directory for the scoped dependencies instead of the /vendor directory.

All of this can be added without requiring it to be used by default when creating a new plugin from the template.

Overall this feature would provide the following benefits:

  • Enable the re-use of existing PHP libraries in projects created from this template. Most of the PHP-related development tooling is already added as Composer dependencies so enabling the same re-use for regular dependencies would help with pulling in code in a consistent and reliable way.

  • Enable modular design where features provided by the wp-foo-bar can be developed outside of the wp-foo-bar project and re-used on other projects. For example, we could have a generic library to build settings pages or a helper to load JS scripts asynchronously. The success of reusable JS packages has proven the value of this approach.


Do not alter or remove anything below. The following sections will be managed by moderators only.

Acceptance criteria

Implementation brief

QA testing instructions

Demo

Changelog entry

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.