Coder Social home page Coder Social logo

league-of-foundry-developers / foundryvtt-devmode Goto Github PK

View Code? Open in Web Editor NEW
12.0 12.0 15.0 872 KB

A module with some tools to help enable Foundry VTT package developers.

License: MIT License

JavaScript 83.63% SCSS 3.38% Handlebars 12.89% Shell 0.10%

foundryvtt-devmode's People

Contributors

akrigline avatar arcanistzed avatar ben avatar cswendrowski avatar grygon avatar mkahvi avatar uranusbytes avatar varriount avatar

Stargazers

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

Watchers

 avatar  avatar

foundryvtt-devmode's Issues

The sidebar may render incorrectly if you switch tabs too soon.

Environment Details

  • Foundry Core Version: 9 (or 8)
  • System & Version: n/a
  • OS & Browser: Chrome
  • Hosting: n/a

Describe the bug
If you switch sidebar quickly while Foundry loads, the chat tab might render inside of the current tab.

To Reproduce
Steps to reproduce the behavior:

  1. Enable dev mode
  2. Reload Foundry
  3. Quickly click on a sidebar tab other than chat
  4. After a moment, half of the tab will be replaced with chat.

This doesn't appear to be related directly to the sidebar document ids, as disabling those features has no effect on the issue.

Expected behavior
That this wouldn't happen

Screenshots
dev-mode-sidebar

Typescript error when using the README log code

Environment Details

  • Foundry Core Version: 0.7.9
  • System & Version: dnd5e 1.2.4
  • OS & Browser: Mac OS X 10.15.7, Firefox 87.0
  • Hosting:
    (Docker. For compiling gulp / typescript, running ubuntu 20.04 on remote VM.)

Forgive me, as I am fairly new to typescript and gulp. As such, I am not sure if I have the right solution or not, but I think the README should be updated to explain how to use the log() function with typescript.

Describe the bug
When I add the following code from the README to my project, I get the error error TS2339: Property 'DEV' does not exist on type 'Window & typeof globalThis'. when I run gulp build.

const MODULE_ID = 'my-module-id';

function log(force: boolean, ...args) {
  try {
    const isDebugging = window.DEV?.getPackageDebugValue(MODULE_ID);

    if (force || isDebugging) {
      console.log(MODULE_ID, '|', ...args);
    }
  } catch (e) {}
}

My tsconfig.json, in case it is relevant:

{
  "compilerOptions": {
    "moduleResolution": "node",
    "target": "ES6",
    "lib": ["DOM", "ES6", "ES2017", "ES2018"],
    "types": ["@league-of-foundry-developers/foundry-vtt-types", "node"],
    "allowUmdGlobalAccess": true
  },
  "files": ["./gulpfile.ts"],
  "exclude": [
    "node_modules"
  ]
}

Expected behavior
I would expect the default example in the README to work with typescript without modification or with notes for how to modify it.

Additional observations
I think the reason for this error is described here. Basically, the window global does not have a type defined for DEV (in fact, DEV is not defined until devMode is loaded). So typescript complains that I am trying to access the window.DEV.getPackageDebugValue() function because it cannot find a type for window.DEV.

After some trial/error, I think the following modification works:

let mywindow: any = window;
const isDebugging = mywindow.DEV?.getPackageDebugValue(MODULE_ID);

It might also be worth setting the expected type for isDebugging: const isDebugging: boolean, although this does not fix the error by itself.

DND5e - Error occurred while rendering ActorSheet5eCharacter

Environment Details

  • Foundry Core Version: 10.285 (latest as of 9/10)
  • System & Version: DND5e 2.0.2 (latest as of 9/10)
  • Modules: Developer Mode 1.15.3 (latest as of 9/10)
  • OS & Browser: Chrome/Multiple
  • Hosting: Self Hosted

Describe the bug
Newly created world with a single scene, single actor. Attempting to create a new actor or open character sheet for existing actor throws error in console.

{
    "message": "An error occurred while rendering ActorSheet5eCharacter 41. The partial dnd5e.actor-warnings could not be found",
    "name": "Error"
}
Foundry VTT | Retrieved and compiled template systems/dnd5e/templates/actors/character-sheet.hbs
foundry.js:711 d {description: undefined, fileName: undefined, lineNumber: undefined, endLineNumber: undefined, message: 'An error occurred while rendering ActorSheet5eChar…e partial dnd5e.actor-warnings could not be found', …}description: undefinedendLineNumber: undefinedfileName: undefinedlineNumber: undefinedmessage: "An error occurred while rendering ActorSheet5eCharacter 41. The partial dnd5e.actor-warnings could not be found"name: "Error"number: undefinedstack: "Error: An error occurred while rendering ActorSheet5eCharacter 41. The partial dnd5e.actor-warnings could not be found\n    at Object.h (http://localhost:30000/scripts/handlebars.min.js:27:18644)\n    at Object.c [as invokePartial] (http://localhost:30000/scripts/handlebars.min.js:27:15036)\n    at Object.eval [as main] (eval at createFunctionContext (http://localhost:30000/scripts/handlebars.min.js:29:1808), <anonymous>:17:28)\n    at c (http://localhost:30000/scripts/handlebars.min.js:27:15429)\n    at d (http://localhost:30000/scripts/handlebars.min.js:27:15744)\n    at e (http://localhost:30000/scripts/handlebars.min.js:28:22748)\n    at renderTemplate (http://localhost:30000/scripts/foundry.js:6870:10)\n    at async ActorSheet5eCharacter._renderInner (http://localhost:30000/scripts/foundry.js:5189:16)\n    at async ActorSheet5eCharacter._renderInner (http://localhost:30000/scripts/foundry.js:5750:18)\n    at async ActorSheet5eCharacter._render (http://localhost:30000/scripts/foundry.js:5020:19)"[[Prototype]]: Error
    at Object.<anonymous> (http://localhost:30000/scripts/handlebars.min.js:27:5241)
    at b (http://localhost:30000/scripts/handlebars.min.js:27:330)
    at Object.<anonymous> (http://localhost:30000/scripts/handlebars.min.js:27:2069)
    at b (http://localhost:30000/scripts/handlebars.min.js:27:330)
    at Object.<anonymous> (http://localhost:30000/scripts/handlebars.min.js:27:1435)
    at b (http://localhost:30000/scripts/handlebars.min.js:27:330)
    at Object.<anonymous> (http://localhost:30000/scripts/handlebars.min.js:27:792)
    at b (http://localhost:30000/scripts/handlebars.min.js:27:330)
    at http://localhost:30000/scripts/handlebars.min.js:27:417
    at http://localhost:30000/scripts/handlebars.min.js:27:422
onError @ foundry.js:711
(anonymous) @ foundry.js:4975
Promise.catch (async)
render @ foundry.js:4973
render @ foundry.js:6311
_onClickDocumentName @ foundry.js:60167
dispatch @ jquery.min.js:2
y.handle @ jquery.min.js:2
foundry.js:5005 Foundry VTT | Rendering ActorSheet5eCharacter

Disabling module lets character sheet be rendered

To Reproduce
Steps to reproduce the behavior:

  1. Attempt to open actor character sheet from scene or actor list

Expected behavior
Open actor character sheet

Screenshots
image

Add a button in the sidebar to go to Dev mode settings

Is your feature request related to a problem? Please describe.
I don't like drilling down through settings to find the options

Describe the solution you'd like
Put a button in the sidebar (just like the bug reporter does)

Describe alternatives you've considered
Put a button floating next to the Foundry logo instead! Even more easily accessed!

Additional context
😸

Console warning about globalThis

Environment Details

  • Foundry Core Version: 0.8.8
  • System & Version: Ubuntu 20.04 in a docker environment
  • OS & Browser: Mac OS X 10.15.7, Firefox 90.0.2
  • Hosting: Vultr VM
    (Forge, Self Hosted, Electron App, etc might be relevant)

Describe the bug
Getting tons of this warning in the logs:

_dev-mode | accessing the module api on globalThis is deprecated and will be removed in a future update

To Reproduce
Steps to reproduce the behavior:

  1. Install devMode
  2. Activate devMode.
  3. There is no step 3.

Expected behavior
Expected no warning. It would be nice if this warning could be fixed so it stops flooding my console warnings. Makes it hard to see actual problems with my terrible module code :-)

Always Unpause

An option to always unpause the game when loading it up would be nice.

Provide a setting to use pseudo localization

Is your feature request related to a problem? Please describe.

Following our discussion on discord, I leave this here so it doesn't get lost on the woods. The problem arised from a wiki recommendation to reuse existing i18n flags as much as possible, without any particular warning about cases where that might not be suitable. In my particular case, I had use-cases from the Japanese community and the Italian translation, where reusing keys would have prevented them from localizing some strings in a manner that worked for the UI in their respective languages.

That conversation lead to this article which showcases an interesting dev approach by Netflix for localizations: https://www.techinasia.com/talk/pseudo-localization-netflix

Describe the solution you'd like

A string setting where localization prefixes can be listed (separated by commas or semicolons maybe), and any localization matching that prefix gets pseudolocalized instead (to prevent doing this app-wide)

Describe alternatives you've considered

If it were possible to detect where the localizations are coming from, maybe use flags instead, to only pseudolocalize handpicked modules. (haven't dived much into this to tell at the moment)

Suggestion: Toggle to ban/unban all other players

Is your feature request related to a problem? Please describe.
The Foundry license allows mutliple instances to be run only in the case where only one of those instances is accessible to people other than the license holder. One way to enforce this, and prevent player access while you've got multiple instnaces spun up is to ban all accounts in a world other than the license holder during prep (e.g. in the case where the license is used by A, the license holder, and B, their friend who also GMs, A and B can only prep games at the same time if all other accounts on A's world are inaccessible the players - as otherwise both A's world and B's world are open to "users other than the license holder").

Describe the solution you'd like
A quick toggle button to ban/unban all accounts other than those which are currently logged in. And ideally an obvious UI feature when this is active, as a reminder to unban and let the players back in.

Describe alternatives you've considered
Could be done via a macro. Can also be done with a lot of clicking through the menu. Either runs the risk of not noticing that you've left it in "Developer only" mode.

Additional context
N/A

Shove Developer Mode to the bottom of the Module Debug Flag List

Is your feature request related to a problem? Please describe.
It's almost never the case that someone using developer mode is going to be trying to debug developer mode. It would be best to artificially shove this to the bottom of the list.

Describe the solution you'd like
Push the module's self-toggle to the bottom.

Describe alternatives you've considered
Doing this for all library modules is probably not a bad idea.

Show folder IDs in sidebar

Is your feature request related to a problem? Please describe.
I want to quickly get the ID of a folder.

Describe the solution you'd like
Folder IDs would be displayed in the sidebar just like other document IDs.

Describe alternatives you've considered
Finding it myself in the console is an alternative, but obviously inferior.

Reset Setting to Default

Is your feature request related to a problem? Please describe.
It is frustrating to try testing setting defaults because as soon as the setting exists, that default is not applicable.

Describe the solution you'd like
A button which allows a given setting to be 're-set' to the default on the module settings page.

Describe alternatives you've considered
Something which allows a key to be entered or even autocompleted that would let this work for non-config-able settings.

Error on JournalEntryPage editor rendering in 10.275

Environment Details

  • Foundry Core Version: 10.275
  • System & Version: multiple
  • OS & Browser: Node/Win10/Firefox
  • Hosting: Self-hosted

Describe the bug
Error thrown when module enabled and edit button on JournalEntryPage clicked, see screenshot
Error does not occur when module is not enabled, error occurs under multiple systems including dnd5e 2.0.0-alpha2

To Reproduce
Steps to reproduce the behavior:

  1. Open JournalEntry
  2. Select Page
  3. Click to edit
  4. See error in console, no editor window renders

Expected behavior
Editor window opens

Screenshots
image

Pass `api` to the `devModeReady` hook.

Describe the solution you'd like
It would be nice if the dev mode api were passed into the devModeReady hook so that it wouldn't be necessary to retrieve it from game.modules.get("_dev-mode")?.api.

View JSON of settings

Is your feature request related to a problem? Please describe.
It would be useful to see the JSON format of a setting for a module.

Describe the solution you'd like
I'd like some way to see a JSON.stringify of the settings for a module. Including the config:false ones.

Additional context
Something appended to the settings configuration which allows this to be displayed would be awesome.

Add Print to Console for Drawings

Is your feature request related to a problem? Please describe.
Currently the module does not support logging Drawings to the console.

Describe the solution you'd like
Add the print to console button on Drawing object sheets.

Describe alternatives you've considered

Additional context

Add "onchange" callback for debug level.

Is your feature request related to a problem? Please describe.
When the debug level changes, there isn't a way to "respond" to that change. For instance, if I want a custom application to have a "log to console" button on itself, I can't refresh the application when the log level changes.

Describe the solution you'd like
Add an onchange callback that can be registered.

Additional context
I added buttons in Monarch to log a card to the console from the hand/deck since Dev Mode can only do this for the containers not the cards themselves. But if I change the setting, I have to manually re-render the sheets to add/remove the buttons.

Actor CRUD test assumes "npc" type exists

Currently the CRUD tests assumes all systems have "npc" type actor. This is blatantly false. Either the test should iterate through all actual types, or let users choose one at start of the test.

The actual types can be fetched from the array at game.system.template.Actor.types or via keys in CONFIG.Actor.sheetClasses

Refactor to standard JS

With a heavy heart I believe it is in the best interests of developer mode to convert from Typescript to standard Javascript.

The barrier for entry is too high for this particular project.

This is also an opportunity to refactor some things.

Actor CRUD test unnecessarily includes database operations in it

Currently the actor CRUD test creates database backed actors. This adds unnecessary variance in the statistics via database and network transmission latencies.

It should instead create synthetic actor with Actor.create(data, {temporary:true}) so it measures only the actual processing time instead of also network and server latency.

Option to disable template caching.

When modifying Handlebars templates it's frustrating to reload the page after making changes. However, it's simple enough to make Foundry reload templates when an application renders, by simply removing the template from the template cache.

In Monster Blocks, I do the following:

Hooks.on("renderActorSheet", (...args) => {	// This is just for debugging, it prevents this sheet's template from being cached.
	if (!debugging()) return; 

	let template = "modules/monsterblock/actor-sheet.html";
    delete _templateCache[template];
    console.debug(`Monster Block | removed "${template}" from _templateCache.`);
	console.log(args);
});

This specifically removes my template from the cache, but it's just as easy to purge the entire cache. It would be great if there were a feature of devMode that would purge the cache all the time, or otherwise disable the cache behavior.

Add the posibility to configure the available loglevels

Is your feature request related to a problem? Please describe.
Currently, the order of log levels makes it difficult to easily compare the configured log level against the log level of a given log statement. Additionally, there are more log levels than I actually need.

Describe the solution you'd like
In order to solve the order problem in a backwards compatible way, I would be grate to be able to provide a list of number-lable pairs which would be used as possible values for log levels. This could (optionally) be passed in as part of the options in the call to registerPackageDebugFlag

Describe alternatives you've considered

  • The order could simply be changed but that's a breaking change
  • I could manually check against all different levels but that's quite tedious

Additional context
See the discussion following https://discord.com/channels/732325252788387980/732325252788387983/882371382443384953

Button near logo non-clickable

Environment Details

  • Foundry Core Version: Version 9 Prototype 2
  • System & Version: D&D 5e 1.4.3
  • OS & Browser: Chrome Linux Mint
  • Hosting: Self-hosted
    (Forge, Self Hosted, Electron App, etc might be relevant)

Describe the bug
The button is not clickable

To Reproduce
Steps to reproduce the behavior:

  1. Click the button
  2. Nothing happens

Expected behavior
I would expect the dev mode config to open.

Solution
Set pointer-events: all for DevMode as per Anathema's suggestion in #dev-support

Add a devmode class to the document body.

Is your feature request related to a problem? Please describe.
In some cases it's nice to have slightly different CSS styles when developing vs. production.

Describe the solution you'd like
Add a new class devmode to a high level element such as <body> which can then be used to conditionally apply styles through the application.

Describe alternatives you've considered
Adding a setting/flag for this inside my own module.

Additional context
Great for hiding UI elements that are used for debugging/dev purposes. CSS to hide stuff is easier than a bunch of conditions in your JS/HBS.

Enabling hooks logging causes a mergeObject error

Environment Details

  • Foundry Core Version: 9.269
  • System & Version: DnD5e 1.6.3
  • OS & Browser: Native foundry application
  • Hosting: Self hosted

Describe the bug
The save changes operation of the debug flag config dialog crashes with these messages in the console:
foundry.js:3856 Error: One of original or other are not Objects!
at mergeObject (helpers.mjs:472)
at DevModeConfig._updateObject (DevModeConfig.mjs:271)
at DevModeConfig._onSubmit (foundry.js:3853)
_onSubmit @ foundry.js:3856
async function (async)
_onSubmit @ foundry.js:3853

To Reproduce
Steps to reproduce the behavior:

  1. Disable all modules except Developer Mode module v1.15.2
  2. Click on the Developer Mode Icon
  3. Enable the Hooks checkbox
  4. Click 'Save Changes'

Expected behavior
I expect to start seeing a log of hooks being fired as I interact with actors/etc.

Screenshots

I've tried deleting the module and reinstalling, no change in behavior. This affects all my worlds equally, Any assistance in helping me at least get rid of the bad data poisoning this operation would be very helpful.

Add `title` attributes to sidebar ID buttons

Is your feature request related to a problem? Please describe.
It may not be immediately clear what the buttons do and it is not very accessible if using a screen reader.

Describe the solution you'd like
Title attributes would be added: "Copy ID" and "Print ID"

Autoopen Document Sheet on load

Is your feature request related to a problem? Please describe.
As a developer working on Sheets, I would like a way to automatically open a specific Document's sheet when the world loads

Describe the solution you'd like
MVP: Given an ID and a Type, a single Sheet is opened on load
Expanded scope: Multiple Documents can be registered to open
Out of Scope: Canvas items

Describe alternatives you've considered
Currently I often register a Hook in my module for testing

Deprecation Errors instead of Warnings

Is your feature request related to a problem? Please describe.
It is sometimes difficult to isolate the deprecation warnings from other warnings while testing a module and would be useful to have a "strict" mode which throws errors instead of warnings.

Describe the solution you'd like
I'd like DEBUG mode where deprecation warnings would instead throw errors.

Describe alternatives you've considered
Dealing with deprecations the old fashioned, not easy way.

Additional context
This was originally requested from Spetzel on the mothership: https://discord.com/channels/170995199584108546/811676497965613117/922889009422802984

Module JSON Changes getting triggered for modules using `entity` in their packs in v9

Environment Details

  • Foundry Core Version: v9d2
  • System & Version: dnd5e 1.5.5
  • OS & Browser: Chrome Linux Mint
  • Hosting: Selfhosted NodeJS

Describe the bug
The new "Module JSON Changes" feature is getting triggered when using a module that still uses the entity field in their packs in v9. Core changes this field to type which make Dev Mode think it was changed.

To Reproduce
Steps to reproduce the behavior:

  1. Install module using entity in packs on a v9 instance
  2. See notification and console message describing a change

Expected behavior
I would expect Dev Mode to detect if this is the only change before alerting me. Otherwise, it could be beneficial to allow users to choose only certain modules which they care about changes to (perhaps keyed off of the author name).

Screenshots
image

LibWrapperPackageError in FVTT 11

Environment Details

  • Foundry Core Version: 11, Testing 1, Build 296
  • System & Version: DnD5e 2.1.5
  • OS & Browser: Windows 10, Chrome
  • Hosting: Self hosted

Describe the bug
Enabling libWrapper and dev-mode triggers this error:

image

To Reproduce
Enabled both the libWrapper and Developer Mode modules and reload the world.

Expected behavior
No error.

Add a button to print a document to console from its Application Header

Is your feature request related to a problem? Please describe.
It's frustrating to work with embedded documents after getting used to printing documents direclty to console from the sidebar.

Describe the solution you'd like
A button in the document sheet header which prints that document out to console would be amazing.

Copying the ID of a document to clipboard doesn't work in Firefox

It keeps throwing this error:

TypeError: 'clipboard-write' (value of 'name' member of PermissionDescriptor) is not a valid value for enumeration PermissionName.

I looked some more into this and Firefox doesn't seem to support this permission yet at all. (Which is kinda surprising to me.)
There's a ticket in their bug tracker which is now 3 years old and has had the last comment a year ago.

So I guess to get this to work on Firefox it seems like you should just simply write to the clipboard without asking for permission.

Suppress Window Too Small

This should be a togglable setting.

Is your feature request related to a problem? Please describe.
With devtools open, Foundry often complains about the window being too small while starting up. This is "fine" but annoying.

Describe the solution you'd like
I'd like this warning suppressed but no other warnings.

Describe alternatives you've considered
Some other modules have this ability, but since this would fit with the theme of development mode, it makes sense to put it in here too.

Throws error if vueport module not installed.

Environment Details

  • Foundry Core Version: 9.269
  • System & Version:
  • OS & Browser: Win10; Chrome latest
  • Hosting: self hosted
    (Forge, Self Hosted, Electron App, etc might be relevant)

Describe the bug
v1.15.0 throws error if vueport not installed

foundry.js:319 TypeError: Cannot read properties of undefined (reading 'active')
    at foundryvtt-devMode.mjs:74:35
    at Hooks._call (foundry.js:294:14)
    at Hooks.callAll (foundry.js:253:12)
    at Game.setupGame (foundry.js:5567:11)
    at async Game._initializeGameView (foundry.js:6514:5)
    at async Game.initialize (foundry.js:5431:5)
onError @ foundry.js:319
_call @ foundry.js:298
callAll @ foundry.js:253
setupGame @ foundry.js:5567
await in setupGame (async)
_initializeGameView @ foundry.js:6514
_initializeView @ foundry.js:6490
initialize @ foundry.js:5431
await in initialize (async)
window.addEventListener.once @ foundry.js:62701

Option to clear compendiumConfiguration in v11 to reset Compendium Folders while testing

Is your feature request related to a problem? Please describe.
In Foundry v11, Folder structure gets stored in core.compendiumConfiguration which doesn't update if a module modifies the folder structure in its manifest.

Describe the solution you'd like
To update folders from from modules, you must clear the Compendium Configuration data. The command to do this is:

game.settings.set("core", "compendiumConfiguration", undefined)

See @cswendrowski 's comment in the Foundry VTT repo.

Having an option (e.g. a button or macro) that either clears this on demand or a setting that always clears when loading a world (is that possible?) might be useful when testing modules during development.

Describe alternatives you've considered
I've created a macro for myself to do this when needed, but that could be at risk of accidentally getting lost.

Additional context
None.

Tag gives sidebar a horizontal scroll

Environment Details

  • Foundry Core Version: v9p2
  • System & Version: dnd5e 1.4.3
  • OS & Browser: Linux Mint Chrome
  • Hosting: Self Hosted

Describe the bug
Dev Mode tag has a right: -1px CSS property which gives the sidebar a horizontal scroll bar:
CopyQ JyTBdC

To Reproduce
Steps to reproduce the behavior:

  1. Go to Sidebar
  2. See horizontal scrollbar

Expected behavior
I expect no horizontal scollbar

Solution
Set the right CSS property to 0: right: 0;

Option to not show IDs, but just the buttons

Is your feature request related to a problem? Please describe.
Displaying the IDs can have a performance hit if you have many Documents in your sidebar.

Describe the solution you'd like
There would be an option which would prevent all of the IDs from being looked up and only give you the buttons for copying and printing.

Ability to dump object data to console

Is your feature request related to a problem? Please describe.
It is always so much fiddling to get data of certain objects, especially their id, via console and digging around in the HTML.

Describe the solution you'd like
I wish there was a "dump data" button / context menu / whatever to allow me to just quickly get data on any object / item that is around.

Describe alternatives you've considered
Keeping it as it is, I guess. Just would things a bit easier, with less steps to just get the relevant data.

Additional context

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.