Giter Site home page Giter Site logo

atom-language-cfml's Introduction

Hey, I'm Adam.

I built a career on writing CFML, but I've since transitioned to TypeScript, React, and hopefully, Svelte.

I'm the CTO of AlumnIQ.

I have a blog where I write about mostly tech stuff. Lately I've been on a mission to get better at testing.

I am the founder and co-host of the Working Code Podcast, and I wrote a book called REST Assured: A Pramatic Approach to API Design.

In my free time I like to skydive (700+ jumps to date), make wooden bowls and furniture, go hiking and camping with my family, and sometimes I still find time to work on open source software.

Other places you can find me:

atom-language-cfml's People

Contributors

abramadams avatar ajlemke avatar amaroom avatar andrew-dixon avatar atuttle avatar awayken avatar dajester2013 avatar david-polehonski avatar elpete avatar kliakos avatar seancoyne avatar seybsen avatar spiraldev avatar tollus avatar zoo1 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

Watchers

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

atom-language-cfml's Issues

cfsavecontent breaks syntax highlight

Hi, I'm working from few hours with atom editor and atom-language-cfml
I noticed that the tag breaks syntax highlight.
I hope you'll fix it. I really want to switch to atom editor! :)

Highlighting gets stuck when opening multiple cfc files

Using version 0.8.4.

If I open script.cfc...

component {
    public function init() {
        // ...
    }
}

...and then I open tags.cfc...

<cfcomponent>
    <cffunction name="init" access="public">
        <!-- ... -->
    </cffunction>
<cfcomponent>

...then tags.cfc does not highlight correctly.

If I close and open atom, and then open tags.cfc and then script.cfc, then script.cfc does not highlight correctly.

Whichever one is opened first highlights correctly, but it seems to get stuck in that mode.

Using the new in HTML breaks

If you use the word new in some HTML it thinks it is the new keyword and breaks color coding for the remainder of the document. For example:
<p>This is new ohno</p>

Unquoted strings in tag attributes do not highlight cfml

Given:

<span class=#className#></span>

className should be tokenized as cfml.

Currently, the string.unquoted.html scope overrides it.

There is a failing test committed for this issue in html-cfml-spec.js: should tokenize cfml in unquoted attributes (around line 210).

Backslash in string literal as a function argument confuses highlighter

The syntax highlighter is getting confused on backslashes in string literals that are function parameters. The string with the backslash can be defined as a variable outside the function call, so there's an easy work-around.

capture

Similar to #27.
Using v0.11.0.

Thanks for all the work that you maintainers put into this package! It really helps me out with my work!

Large CFML files do not get code coloring after so far in the file.

When working with large files (>1500 lines), the code coloring seems to stop after a certain point in the file. The areas where code coloring does not happen seems to be relative to your original position in the file. For example, if you open the file at the start of it, the end does not get colored properly. If you open the file in the middle, the start and end of the file do not get colored, but the middle does. And so on from there.

If there is anything I can do to help out here, please let me know!

Uncaught TypeError: Cannot read property 'emitter' of undefined

Opened an ORM entity and got this exception:

Atom Version: 1.0.0
System: Mac OS X 10.10.4
Thrown From: language-cfml package, v0.8.4

Stack Trace

Uncaught TypeError: Cannot read property 'emitter' of undefined

At /Applications/Atom.app/Contents/Resources/app.asar/node_modules/q/q.js:128

TypeError: Cannot read property 'emitter' of undefined
  at bindCfcChangeChecker (/Users/adam/.atom/packages/language-cfml/lib/languageCFML.js:71:32)
  at /Users/adam/.atom/packages/language-cfml/lib/languageCFML.js:24:5
  at Emitter.module.exports.Emitter.emit (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/event-kit/lib/emitter.js:82:11)
  at /Applications/Atom.app/Contents/Resources/app.asar/src/workspace.js:492:25
  at _fulfilled (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/q/q.js:794:54)
  at self.promiseDispatch.done (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/q/q.js:823:30)
  at Promise.promise.promiseDispatch (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/q/q.js:756:13)
  at /Applications/Atom.app/Contents/Resources/app.asar/node_modules/q/q.js:564:44
  at flush (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/q/q.js:110:17)
  at process._tickCallback (node.js:357:13)

Commands

     -0:51.8.0 core:backspace (atom-text-editor.editor.is-focused)
     -0:51.4.0 core:save (atom-text-editor.editor.is-focused)
     -0:28.7.0 core:backspace (atom-text-editor.editor.is-focused)
     -0:28 core:move-up (atom-text-editor.editor.is-focused)
     -0:27.7.0 editor:newline (atom-text-editor.editor.is-focused)
  5x -0:25.7.0 core:backspace (atom-text-editor.editor.is-focused)
  3x -0:17.9.0 core:move-down (atom-text-editor.editor.is-focused.autocomplete-active)
     -0:17.3.0 core:move-up (atom-text-editor.editor.is-focused.autocomplete-active)
     -0:17 autocomplete-plus:confirm (atom-text-editor.editor.is-focused.autocomplete-active)
     -0:17 snippets:expand (atom-text-editor.editor.is-focused.autocomplete-active)
     -0:15.4.0 editor:move-to-first-character-of-line (atom-text-editor.editor.is-focused)
     -0:14.9.0 core:delete (atom-text-editor.editor.is-focused)
     -0:14.3.0 editor:move-to-end-of-word (atom-text-editor.editor.is-focused)
  5x -0:14 core:move-right (atom-text-editor.editor.is-focused)
     -0:04.4.0 fuzzy-finder:toggle-file-finder (atom-text-editor.editor.is-focused)
     -0:00.7.0 core:confirm (atom-text-editor.editor.mini.is-focused)

Config

{
  "core": {
    "themes": [
      "atom-dark-ui",
      "apathy-theme"
    ]
  }
}

Installed Packages

# User
apathy-theme, v1.5.1
language-cfml, v0.8.4

# Dev
No dev packages

The entity code is:

component
    output = "false"
    mappedSuperClass="true"
    table = "EMSEvent"
{

    property name="eventId" fieldtype="id" generator="identity";
    property name="externalEventId" sqltype="varchar(40)" hint="the advance/banner/peoplesoft event identifier";
    property name="guid" sqltype="varchar(36)" hint="for public exposure";

    property name="eventgroupname" sqltype="nvarchar(200)" hint="if we are grouping this event, make this the same for every event in the bundle";

    property name="Skin"
                fieldtype="many-to-one"
                cfc="Skin"
                fkColumn="skinId"
                hint="the html wrapper template to be used for this registration flow";

    property name="ConfirmationEmailTemplate"
                fieldtype="many-to-one"
                cfc="orm.EmailTemplate"
                fkColumn="emailTemplateId"
                hint="the template to wrap confirmation emails in";

    property    name="Account"
                fieldtype="many-to-one"
                cfc="Account"
                fkColumn="accountId"
                notnull="false"
                hint="default account to drop event revenues in to";

    property    name="FiscalYear"
                fieldtype="many-to-one"
                cfc="FiscalYear"
                fkColumn="fiscalYearId"
                notnull="true"
                hint="fiscal year for transactions";

    property name="name" sqltype="nvarchar(200)" hint="actual name of the event";
    property name="shortname" sqltype="nvarchar(50)" hint="name without XML-invalid characters (including spaces)";
    property name="intro" sqltype="text" hint="introductory text for the registration landing page";
    property name="friendlyURL" sqltype="varchar(200)" hint="just the part of the url that handles redirection. system responsible for the rest.";
    property name="marketingURL" sqltype="varchar(200)" hint="url of the event's marketing website (if any)";

    property name="contactName" sqltype="varchar(200)" hint="who to talk to with questions";
    property name="contactPhone" sqltype="varchar(20)" hint="phone number of a human contact";
    property name="contactEmailAddress" sqltype="varchar(50)" hint="email address of a human contact";
    property name="confirmationNote" sqltype="text" hint="per-event message to be included in the confirmation email";
    property name="confirmationSenderEmailAddress" sqltype="varchar(50)" hint="email address that confirmation emails come from";
    property name="confirmationCCEmailAddresses" sqltype="varchar(150)" hint="email addresses to copy the confirmation emails to";

    /*
        NOTE:   Convention is to set all booleans to the most favorable/ideal configuration by default
                This means that the field is tilted to indicate permissiveness wherever possible and 1 is better than 0.
    */

    property name="showEventTimes" sqltype="tinyint" dbdefault="1" hint="if 0, hide start/end time in favor of tour time(s)";
    property name="dateTimeEventStart" ormtype="timestamp" sqltype="datetime" hint="";
    property name="dateTimeEventEnd" ormtype="timestamp" sqltype="datetime" hint="";

    property name="isPublic" sqltype="tinyint" dbdefault="1" hint="if 0, do not show in calendar regardless of calendar dates";
    property name="dateTimeCalendarStart" ormtype="timestamp" sqltype="datetime" hint="";
    property name="dateTimeCalendarEnd" ormtype="timestamp" sqltype="datetime" hint="";

    property name="isRegisterable" sqltype="tinyint" dbdefault="1" hint="if 0, this event is a calendar entry only and not a registerable event";
    property name="dateTimeRegistrationStart" ormtype="timestamp" sqltype="datetime" hint="";
    property name="dateTimeRegistrationEnd" ormtype="timestamp" sqltype="datetime" hint="";

    property name="maxGuests" sqltype="tinyint" dbdefault="9" hint="rarely will we need to cap the num of guests on a registration but if we have to, we can. maxGuests DOES NOT INCLUDE PRIMARY REGISTRANT.";

    property name="isAuthenticationRequired" sqltype="tinyint" dbdefault="0" hint="if 1, do not allow 'naked' registration - all registrants must log in";
    property name="isOnlinePaymentEnabled" sqltype="tinyint" dbdefault="1" hint="if 0, disable online payment capability. Important to not change once registration is open!";
    property name="offlinePaymentInstructions" sqltype="nvarchar(200)" hint="if isOnlinePaymentEnabled=0, where to mail or hand over payment?";

    /* NPS section */
    property name="allowEvaluations" sqltype="tinyint" dbdefault="1" hint="if 0, do not allow registrants to evaluate this event and associated activities";
    property name="dateTimeSendEvaluationRequest" ormtype="timestamp" sqltype="datetime" hint=" to send the email to all registrants asking them to evaluate this event.";

    property name="dateTimeCreated" ormtype="timestamp" sqltype="datetime" hint="";
    property name="dateTimeClosed" ormtype="timestamp" sqltype="datetime" hint=" this event is officially closed out (no more changes permitted and money can be moved)";

    /* Activities can override, but Event location is the principal */
    property    name="Location"
                fieldtype="many-to-one"
                cfc="Location"
                fkColumn="locationId"
                notnull="false"
                hint="if specified, pointer to actual location where this event is taking place. can be overridden at Activity level";

    property    name="EventFees"
                singularname="EventFee"
                type="array"
                fieldtype="one-to-many"
                cfc="EventFee"
                fkColumn="eventId"
                inverse="true"
                hint="EventFee = a cover charge. most fees are tied to activity selections.";

    property    name="Activities"
                singularname="Activity"
                type="array"
                fieldtype="one-to-many"
                cfc="Activity"
                fkColumn="eventId"
                inverse="true";

    property    name="EventGiftDesignations"
                singularname="EventGiftDesignation"
                type="array"
                fieldtype="one-to-many"
                cfc="EventGiftDesignation"
                fkColumn="eventId"
                inverse="true";

    property    name="EventProducts"
                singularname="EventProduct"
                type="array"
                fieldtype="one-to-many"
                cfc="EventProduct"
                fkColumn="eventId"
                inverse="true";

    property    name="EventSurveyQs"
                singularname="EventSurveyQ"
                type="array"
                fieldtype="one-to-many"
                cfc="EventSurveyQ"
                fkColumn="eventId"
                inverse="true"
                hint="Survey questions: we need to know {this} for {just primaries, all adults, only guests, only children, everybody}";


    function isRegistrationOpen(){
        var isRegistrationOpen = true;
        var regStart = this.getDateTimeRegistrationStart();
        var regEnd = this.getDateTimeRegistrationEnd();
        var today = application.timeService.currentUTC();

        if(!isNull(regStart) AND dateCompare(today, regStart) lt 0){
            isRegistrationOpen = false;
        }

        if(!isNull(regEnd) AND dateCompare(regEnd, today) lt 0){
            isRegistrationOpen = false;
        }

        return isRegistrationOpen;
    }

    function getEventProducts( activeFlag = "all" ){
        switch( activeFlag ){
            case "all":
                return entityLoad("EventProduct", {event: this}, false);
            case "active":
                return entityLoad("EventProduct", {event: this, isActive: 1}, false);
            case "inactive":
                return entityLoad("EventProduct", {event: this, isActive: 1}, false);
            default:
                throw(message="Unexpected activeFlag value: `#arguments.activeFlag#`",detail="Expected one of: `all`,`active`,`inactive`.");
        }
    }

}

Doesn't recognize closing CFML comment tags <!--- --->

Syntax highlighting responds correctly to (closing) HTML comment tags

but not CFML comment tags (with an extra dash on open and close)
<!--- --->

Instead all lines following a closing CFML tag (until the next HTML comment close) are greyed out as if part of a comment.

Package.loadSettings is deprecated.

Store package settings files in the settings/ directory instead of scoped-properties/

Package.loadSettings (C:\Users\mavelar\AppData\Local\atom\app-0.190.0\resources\app\src\package.js:550:9)
<unknown> (C:\Users\mavelar\AppData\Local\atom\app-0.190.0\resources\app\src\package.js:172:43)

question about tag matching

not sure if this is the proper forum to ask a question, but I have searched high and low for answer as to how to get tag highlighting turned on for CFML tags in atom. This works nicely ST3..
(see screenshot of what i mean
http://www.evernote.com/shard/s349/sh/2ee21b1c-e296-4c80-b6b7-86b247bd04e2/d2a8c36156d179fa64ff4ac7041fb3e6)

I thought it might be the atom/bracket-matcher package but from what i can tell it is not.
This feature is a must for me.
any pointers would be appreciated.
Thanks

UPDATE:

I just noticed that it seems to work when I put my cursor on the closing tag eg: but not on the opening one? is this by design?

UPDATE

Sorry to blow up this post... but it seems it is working for most tags... on start and close : cflock, cfloop, etc...just not the start tag of a cfif.. finding the matching closing seems more useful than the other way around

Syntax coloring issue

I have an href that points to a div like so <a href="#EditForm" id="NewAdjust" class="btn blue btn-sm"><i class="fa fa-pencil"></i> New Adjustment</a>
I am not inside a cfoutput so I have no need to double it up. This is breaking the syntax coloring.

image

This package is affecting non-CF language files

As an example, I'm working in a HTML (Mustache) file (.hbs).The CFML plug-in is injecting CFML classes and breaking syntax coloring even in non-CFML files.

I've verified that it is this package by disabling it and seeing normal syntax highlighting work in this file.

Here is a screenshot:
https://onedrive.live.com/redir?resid=91F7060A4D6A37E4!162&authkey=!ANXoBcj86l4FqnY&v=3&ithint=photo%2cpng

Is there any other information that would help troubleshoot this?

How to install on Atom 1.0?

This package isn't listed on the atom.io listing, so I can't install it via atom's GUI. I tried installing the atom command line tools, but can't find an invocation of apm that will install from the command line (did a git clone and cd'd to it, "apm install ." claims to work, but doesn't appear to install anything.)

Package.loadSettings is deprecated with v0.189

Store package settings files in the settings/ directory instead of scoped-properties/

Package.loadSettings (/Applications/Atom.app/Contents/Resources/app/src/package.js:565:9)
<unknown> (/Applications/Atom.app/Contents/Resources/app/src/package.js:187:43)

Code Completion

Is there a way to get cfml code completion? Or do you just need to have file open in another buffer?

Single quote confuses highlighting after it.

image

Adding the above code snippet to a cfc file (haven't tested but I expect cfml also ) breaks highlighting after the test until another single quote is found. Removing the single quote from the listQualify's second parameter fixes the issue. Seems to be an issue with adding the js class and the invalid class.

I tried to shrink the code to be as simple as possible to show the issue so I removed the rest of the HQL.

grammar syntax to look at (possibly)

Hi @elpete (et al.), I was inspired to try porting the CFML syntax I have been working on in Sublime Text over to Atom. It is not a straight one-to-one match, but most of it seems to work.

Anyways, if you are interested, I added it to my fork of this repo (https://github.com/jcberquist/atom-language-cfml). It wreaks havoc on the test suite, though at least for the tag syntax most of the differences are minor.

Feel free to ignore it all, or make use of what will help.

Only one code complete option shown for each prefix

Not sure if this is an issue with the package, or with Atom itself...

If you start typing a keyword such as cfquery, the complete options are simply "cfquery (update sql)" and "cfqueryparam". However, there are multiple different completion templates which all have the prefix "cfquery"; it looks like only the last one is being displayed in the list. The same is observed for cfregistry - only "cfregistry (set)" is displayed as an option.

Syntax Highlight Issue

I'm seeing lots of syntax highlighting issues. Is there any fix for these coming soon ?

Syntax Highlighting breaks with <cfhttp>

If you include the protocol in the URL and use a CFML variable as parameter value, the highlighting breaks for the rest of the document. Everything is colored like a string except for the number signs.
When you remove either the protocol or the CFML variable, the highlighting works again.

Example

2015-07-30 13_26_13-test cfm - s__pro-alter_ch - atom

Atom version: 1.0.3
language-cfml version: 0.8.8

<script> breaks syntax highlight

Atom is a awesome and atom-language-cfml is what I looking for!
My example to replicate the issue:

<!-- Inline scripts -->
<!--- Inline scripts --->
<script>
    <!--- Before jQuery(document).ready --->
    <!--- Load modules --->
    <cfloop list="#application.modules_scripts_inline#" index="template" delimiters=",">
        <cfinclude template="/#session.version#/modules/#template#">
    </cfloop>
    <!---
    Module: Standalone /#session.version#/modules/module_scripts_inline_standalone.inc
    --->
</script>

Add support for interfaces in cfscript

A little known feature of Coldfusion is that you can actually create component interfaces. The CFScript version of interfaces is very similar to components but with a few key differences. Currently the atom-language-cfml package does not correctly highlight CFScript interfaces.

Here is an example interface:

interface {
    public void function updateObject(required string bucket, required string fileKey);
    public void function loadObject(numeric rangeMin=0, numeric rangeMax=0);
    public any function getObjectInputStream(numeric rangeMin=0, numeric rangeMax=0);
    public string function getObjectURL(numeric lifetime=5);
    public boolean function objectExists();
    public struct function getObjectMetadata();
}

Interface function definitions don't include curly brackets and they end in a semi-colon.

Here is an example implementation:

component implements="CloudStorageProvider" {
    public GoogleCloudObject function init(required string bucket, required string fileKey) {
        //Functionality here
        return this;
    }

    public void function updateObject(required string bucket, required string fileKey) {
        //Functionality here
    }

    public void function loadObject(numeric rangeMin=0, numeric rangeMax=0) {
        //Functionality here
    }

    public any function getObjectInputStream(numeric rangeMin=0, numeric rangeMax=0) {
        //Functionality here
    }

    public string function getObjectURL(numeric lifetime=5) {
        //Functionality here
    }

    public boolean function objectExists() {
        //Functionality here
    }

    public struct function getObjectMetadata() {
        //Functionality here
    }
}

An odd quirk is that functions in an interface can have public access only. Declaring an interface function as private or implementing a function and changing it to private will cause an error.

Syntax Highlighting breaks after (

For example:

Price: #dollarformat(qFeat.listprice)#

All code after the opening parenthesis is white with only subsequent functions in any other coloring.

Syntax highlighting after strings that contain fully qualified URLs and variable output pounds (##) are broken after recent update to 0.10.0

This seems complicated. Some combination of the doubled slashes in http:// and the output pounds (##). It almost seems like its trying to do some kind of URL highlighting but doing it wrong.

Test strings that causes syntax highlighting to break:
testUrl = "http://www.google.com/#test#";
testUrl = "http://www.google.com/test#";

These strings do not break syntax highlighting:
testUrl = "http:/www.google.com/#test#";
testUrl = "http//www.google.com/#test#";
testUrl = "http://www.google.com/#test";

Backslash in string confuses highlighter

Tried this in CF 10 -

<cfscript>
    a = "\";
    WriteDump(a);
</cfscript>

atom-language-cfml thinks that the string never ends (while the CF engine prints out a single backslash). Looks like it correctly handles the literal string """"

Code completion generates <<cfsometag ...

When using code completion for a tag snippet by typing <cfsometag, the snippet inserts a superflous bracket character < before the tag. So either one has to get used to leaving off the leading bracket when typing the beginning of the tag or you'd have to jump back to the start of the tag in order to delete the superflous bracket.

If I type <cfso and use code completion for <cfsometag, I'd expect the snippet it to complete this to exactly this <cfsometag, not to <<cfsometag.

Is there some setting that I may have missed that would rectify this?

Anyway, thank you very much indeed for this great atom package, we're finally able to ditch Dreamweaver for development!

CFML within in-page JavaScript does not get syntax highlighting

On CFML pages that have JavaScript in them, if there are CFML tags within the JavaScript, they do not get CFML syntax highlighting. It is colored solely as JavaScript. Is there any way to resolve this? Please let me know if there is anything I can do to help!

Syntax highlighting inside of strings

Currently It doesn't highlight variables or functions used inside of strings. I looked in the dev tools and there's no way to target them with a stylesheet because they're wrapped in span or anything.

screen shot 2015-08-12 at 11 30 20 am

In the screen shot #_.detail# should be highlighted at the end of that string.

Failed to activate the language-cfml package

Immediately after updating to 0.8.1, language-cfml generated the following:

Atom Version: 1.0.0
System: Mac OS X 10.10.4
Thrown From: language-cfml package, v0.8.1

Stack Trace

Failed to activate the language-cfml package

At Cannot read property 'endsWith' of undefined

TypeError: Cannot read property 'endsWith' of undefined
    at Object.module.exports.activate (/Users/ron/.atom/packages/language-cfml/lib/languageCFML.js:14:23)
    at Package.module.exports.Package.activateNow (/Applications/Atom.app/Contents/Resources/app.asar/src/package.js:240:19)
    at /Applications/Atom.app/Contents/Resources/app.asar/src/package.js:221:30
    at Package.module.exports.Package.measure (/Applications/Atom.app/Contents/Resources/app.asar/src/package.js:165:15)
    at Package.module.exports.Package.activate (/Applications/Atom.app/Contents/Resources/app.asar/src/package.js:213:14)
    at PackageManager.module.exports.PackageManager.activatePackage (/Applications/Atom.app/Contents/Resources/app.asar/src/package-manager.js:452:21)
    at /Applications/Atom.app/Contents/Resources/app.asar/node_modules/settings-view/lib/package-manager.js:306:60
    at exit (/Applications/Atom.app/Contents/Resources/app.asar/node_modules/settings-view/lib/package-manager.js:53:16)
    at triggerExitCallback (/Applications/Atom.app/Contents/Resources/app.asar/src/buffered-process.js:213:47)
    at /Applications/Atom.app/Contents/Resources/app.asar/src/buffered-process.js:227:18

Commands

     -0:10 settings-view:check-for-package-updates (atom-workspace.workspace.scrollbars-visible-when-scrolling.theme-solarized-light-syntax.theme-one-light-ui)

Config

{
  "core": {
    "themes": [
      "one-light-ui",
      "solarized-light-syntax"
    ]
  }
}

Installed Packages

# User
emmet, v2.3.12
language-cfml, v0.8.1

# Dev
No dev packages

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.