Giter Site home page Giter Site logo

primefaces-extensions / primefaces-extensions Goto Github PK

View Code? Open in Web Editor NEW
110.0 32.0 105.0 38.5 MB

PrimeFaces Extensions

License: MIT License

Java 13.49% CSS 2.59% JavaScript 76.47% HTML 7.24% TypeScript 0.22%
primefaces primefaces-extensions jsf jsf2 javaee java faces faces-4

primefaces-extensions's Introduction

PrimeFaces Extensions


Maven Actions Status Security Rating Discord Chat Stackoverflow License: MIT

This is an overview page, please visit primefaces-extensions.github.io or the showcase for more information.

Versioning

There are multiple versions available please check which one for your PrimeFaces release version.

Version Explanation
8.x PrimeFaces 8.0
10.x PrimeFaces 10.0.0
11.x PrimeFaces 11.0.0
12.x PrimeFaces 12.0.0
13.x PrimeFaces 13.0.0
14.x PrimeFaces 14.0.0

Maven

Release (javax)

<dependency>
    <groupId>org.primefaces.extensions</groupId>
    <artifactId>primefaces-extensions</artifactId>
    <version>${primefaces-extensions.version}</version>
</dependency>
<dependency>
   <groupId>org.primefaces.extensions</groupId>
   <artifactId>resources-monacoeditor</artifactId>
   <version>${primefaces-extensions.version}</version>
</dependency>

Release (jakarta)

<dependency>
    <groupId>org.primefaces.extensions</groupId>
    <artifactId>primefaces-extensions</artifactId>
    <version>${primefaces-extensions.version}</version>
    <classifier>jakarta</classifier>
</dependency>

Snapshots

<repository>
    <id>sonatype-snapshots</id>
    <name>Sonatype Snapshot Repository</name>
    <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
    <releases>
        <enabled>false</enabled>
    </releases>
    <snapshots>
        <enabled>true</enabled>
    </snapshots>
</repository>

<dependency>
   <groupId>org.primefaces.extensions</groupId>
   <artifactId>primefaces-extensions</artifactId>
   <version>${primefaces-extensions.version}</version>
</dependency>

Namespaces

The PrimeFaces Extensions namespace is necessary to add PrimeFaces Extensions components to your pages.

xmlns:pe="http://primefaces.org/ui/extensions"

Getting Started

Please refer to the Getting Started Guide to see what you need to get started and any optional libraries.

Migration Guide

Please refer to the Migration Guide.

Demo

Please refer to the Showcase submodule in order to see the full usage of the components. Simply do the following to run the Showcase:

cd showcase
mvn clean jetty:run

Then open your web browser to http://localhost:8080/showcase-ext/

Issues

Please report all issues here.

Releasing

  • Run mvn versions:set -DgenerateBackupPoms=false -DnewVersion=8.0.2 to update all modules versions
  • Commit and push the changes to GitHub
  • In GitHub create a new Release titled 8.0.2 to tag this release
  • Run mvn clean deploy -Prelease to push to Maven Central

License

Licensed under the MIT license.

SPDX-License-Identifier: MIT

primefaces-extensions's People

Contributors

aripddev avatar blutorange avatar cnsgithub avatar dennisbayer avatar dependabot[bot] avatar eduarddrenth avatar fcorneli avatar fenoloco avatar francesco-strazzullo avatar jepsar avatar jherkel avatar juanmiguelbg avatar julienng avatar jxmai avatar melloware avatar mgmeiner avatar newk5 avatar nicolaisotta avatar nileshmali avatar obreidenbach avatar ova2 avatar psini avatar rapster avatar rbetjes avatar slany avatar slepage-klee avatar stiemannkj1 avatar sudheerj avatar tandraschko avatar yelhouti 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  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

primefaces-extensions's Issues

Add pe:multiFileDownload

Extend fileDownload tag, FileDownloadTagHandler, FileDownloadActionListener, StreamedContent, DefaultStreamedContent. The main goal is to generate a zip file of many StreamedContents.

  1. Allow to add childs of type StreamedContent to the new ZipStreamedContent (extends StreamedContent). ZipStreamedContent zips all containing childs of type SreamedContent.
  2. Allow to handle byte arrays (byte[]) as content and not only InputStream.
  3. FileDownloadActionListener should distinguish between StreamedContent and ZipStreamedContent. It should zip files and generate zipped output if "file" implements ZipStreamedContent.
  4. FileDownloadActionListener should be able to be used in portlet environment (no direct access to reqiest object!).
  5. Add a new attribute "responseHeader" to the tag fileDownload which accepts a single value, an array, a collection or list of string(s). Possible response headers are e.g. Cache-Control and Pragma. FileDownloadTagHandler should be extended to this attribute.

Don't forget to check in action listener if response was completed. If yes ==> return from action listener. Call facesContext.responseComplete() (s. PF's FileDownloadActionListener) is not enough because events are queued and all action listeners are called in INVOKE_APPLICATION phase until the phase finished (regardless of set flags). At the end of each phase UIViewRoot.clearFacesEvents() is called, checks set flags and clears queued events if nessesary.

PF related bug http://code.google.com/p/primefaces/issues/detail?id=1656

By the way, iframe will not solve problem with ajaxified components. FileDownload cann't be ajaxified.

CodeMirror: Autocomplete feature shows escaped characters

I was using pe:codeMirror with the autocomplete feature via a bean method. The bean method returned several suggestions, including &&. The problem was that this got displayed as &amp;&amp; in the hint overlay from CodeMirror:

image

This is caused by the client script which evaluates the suggestions incorrectly. The fix #221 is a one-liner.

image


					<pe:codeMirror id="input" value="#{model.customExpression}"
						completeMethod="#{bean.completeCustomExpression}"
						escapeSuggestions="true"
					</pe:codeMirror>
  public List<String> completeCustomExpression(CompleteEvent event) {
    final List<String> suggestions = new ArrayList<>();
    suggestions.add("&&");
    return suggestions;
  }

LetterAvatar: not rendered correctly using small height values

Describe the bug
After update to 8.0 to 8.0.4 the component Letter Avatar doesn't rendered correct! See above:

Reproducer
Use: <pe:letterAvatar value="#{twebusuariosTO.nomeCompleto}" size="1rem" rounded="false"/>

Opera Instantâneo_2020-09-29_100613_localhost

Environment:

  • PF Version: 8.0
  • JSF + version: Mojarra 2.3.14
  • Affected browsers: ALL

To Reproduce

  • Just use <pe:letterAvater/> in some page!

Expected behavior
Opera Instantâneo_2020-09-29_100433_10 5 103 241

Sample XHTML
-Not necessary!

Sample Bean
-Not necessary!

TimePicker: CSS Updates

We use TimePicker heavily in our apps and for new premium themes it doesn't look quite like it used to.

I am going to update the CSS to look great by default in Omega and Nova-Light themes. For all other premium themes you simply need to add this SCSS in your _extensions.scss provided by PrimeTek to have it styled for your theme.

/** PrimeFaces Extensions TimePicker used heavily in ExSchedule */
.ui-timepicker {
    background-color: $panelContentBgColor;

    .ui-timepicker-table {
        background-color: $panelContentBgColor;
        color: $textColor;
    }
    .ui-timepicker-title {
        border: $inputListBorder;
        padding: 0 1em;
    }
    .ui-timepicker-table td a {
        width: 2em;
        text-align: center;

        &.ui-state-active {
            color: $primaryTextColor;
            background-color: $primaryColor;
        }

        &.ui-state-default {
            border: 1px solid $inputBorderColor;
            padding: 0.286em;
            color: $textColor;
            
            &.ui-state-active {
                color: $primaryTextColor;
                background-color: $primaryColor;
            }
        }
    }

    td.ui-timepicker-minutes {
        padding-left: 4px;
        padding-right: 4px;
        padding-bottom: 4px;
        border-left: 1px solid $inputBorderColor;
    }
}

If using FontAwesome instead of PrimeIcons also add this.

.pe-timepicker-trigger {
    .ui-icon-clock {
        @include icon_override("\f017");
    }
}

Build: Switch to Spotless Plugin

Doing some work on Apache Commons BeanUtils to clean it up I was using the same Eclipse formatter Maven plugin as here. Apache PMC Member suggested I switch to Spotless plugin https://github.com/diffplug/spotless.

It is great and allows me to replace the two current plugins we are using that this does the same thing but better:

  • License Plugin
  • Eclipse Formatter Plugin

You can run mvn spotless:check to see the issues it wants to correct or fail on build.

And mvn spotless:apply simply fixes all those problems! Now that we have a multi-module build I can enforce this in all projects with 1 config.

Showcase: RemoteCommand parameter examples do not work using JDK 11

Works in production, no longer when built from source:

Oct 04, 2020 11:34:47 AM org.primefaces.application.exceptionhandler.PrimeExceptionHandler logException
SEVERE: Unparseable date: "5/14/07 12:55:42 PM"
java.text.ParseException: Unparseable date: "5/14/07 12:55:42 PM"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
at javax.faces.convert.DateTimeConverter$FormatWrapper.parse(DateTimeConverter.java:489)
at javax.faces.convert.DateTimeConverter$FormatWrapper.access$100(DateTimeConverter.java:470)
at javax.faces.convert.DateTimeConverter.getAsObject(DateTimeConverter.java:437)
at org.primefaces.extensions.component.remotecommand.RemoteCommandRenderer.decode(RemoteCommandRenderer.java:77)

Document Viewer: Upgrade PDF.js 2.9.35

Is your feature request related to a problem? Please describe.
It has been a few years since the underlying PDF.js lib has been updated under Document Viewer. There was an issue with fonts in a IFRAME but it was resolved recently.

mozilla/pdf.js#8271

Layout: updates don't work properly

I'm implementing an SPA (single page application) using the pe:layout component.
I'm using Primefaces 8 and Primefaces extensions 8
So the content of the layoutPanes need to be updated using ajax requests while the application runs.
So the whole construct looks more or less like that:

<h:form id="mainForm">
  <pe:layout fullPage="true" id="layout">
    <pe:layoutPane position="north">
    </pe:layoutPane>
    <pe:layoutPane position="west">
    </pe:layoutPane>
    <pe:layoutPane position="center">
      <ui:include src="#{indexView.centerView}" />
    </pe:layoutPane>
</h:form>

So now I want to update the center pane. I do that by updating the payoutPane element:

<p:menuitem value="User"
  actionListener="#{indexView.showSettingsUser}"
update=":mainForm:center" />

When I do that, the center pane gets updated. But it gets moved to the top of the screen. Beeing displayed over the north pane.

So I try to update the whole layout component:

<p:menuitem value="User"
  actionListener="#{indexView.showSettingsUser}"
update=":mainForm:layout" />

When I do that, absolutely nothing happns.
The only way that seems to work is updating everything at once:

<p:menuitem value="User"
  actionListener="#{indexView.showSettingsUser}"
update=":mainForm" />

Layout: LayoutPane not respecting XHTML attributes

Seems that some attributes (closable, minSize, maxSize) for pe:layoutPane are not working if a layout is configured by options defined as attributes of layoutPane component. If a layoutPane is created via LayoutOptions as Java model it works.

Environment:

  • PF Version: 8.0.3
    PF extension Version 8.0.4
  • JSF + version:2.3
  • Affected browsers: Chrome, Firefox

Expected behavior
It would be nice to also create a layout by options defined as attributes of pe:layoutPane.

Sample XHTML

 <pe:layout id="documentLayout" fullPage="false"
                                        stateCookie="false"
                                        state="#{documentLayoutController.documentLayoutState}"
                                        widgetVar="documentLayoutWidget">
                                <p:ajax event="resize" process="@this" update="@none"/>
                                <!--West pane-->
                                <pe:layoutPane id="westCnt"
                                               position="west"
                                               closable="false"
                                               size="#{documentLayoutController.westSize}"
                                               minSize="20%"
                                               maxSize="70%"
                                               rendered="#{documentLayoutController.layoutState.west}">
                                    <p:outputPanel layout="block" id="westPane">
                                        <h:form>

New component: Shepherd.js - ProductTour

Hi,

It would be very great, if you can add the following component into PFE:

Here is one example, I guess there are also other JS available.
http://eragonj.github.io/Trip.js/

I would need this component to implement a Guide in my webpage, like you maybe know from intercom.
Please see as reference this video: https://www.youtube.com/watch?v=TyWefNd1Tlc

For me it´s also important

  • Information can be coming also from database (so I can have a loop around that)
  • Content can be also in HTML: <h:outputText value="Text Text" escape="false"/>

Properties

  • modal
  • currentTab (integer)
  • titel (String), but you can also define it in <f:facet name="header">
  • startOnPageLoad
  • DelayPageLoad
  • labelNext
  • labelPrevious
  • labelEnd
    Please see also: https://shepherdjs.dev/

Events:

  • Click next page
  • Start tour
  • Close tour
  • Stop
<p:repeat>
<pe:tourGuide>

     <f:facet name="header">
        List of Cars
    </f:facet>

     <h:outputText value="Text Text" />

    <f:facet name="footer">
        List of Cars
    </f:facet>
</pe:tourGuide>
</p:repeat>

Many thanks

ResourceHandler: Always add version

Based on this ticket reported to PF: primefaces/primefaces#6083

Modify the PrimeExt ResourceHandler to always add the extension version to URL's for cache busting and change it from v= to e= for extensions.

So for example this URL now becomes.
/primeext-showcase/javax.faces.resource/primeicons/primeicons.css.jsf?ln=primefaces&v=8.0&e=8.0.4

With the url displaying both versions ?ln=primefaces&v=8.0&e=8.0.4 This way it differentiates the two versions and it will cache bust if you update either PF or PF Extensions.

New Component: HandleServerDownOrRestarted

I have an idea for a simple component without any gui but only javascript.

Preface:
When i restart, stop or reload my server on the client side the page can't be reloaded
and the user is currently not informed that the server is down at the moment.

So i tried the following to handle this special case which could also be
an improvement for other users:

1.) Try to ping the server via AJAX like the ping in the speedtest component.
2.) On Error remember that the server is currently offline and show a sidebar panel in fullscreen mode that the server is currently offline.
Retry with the ping as described on 1.)
3.) On Success check if the server was offline before. If so, now redirect to login page. If the server was not offline before retry with the ping as described on 1.)

Here is the sidebar i used in a general template:

				<!-- Sidebar to show that server is currently offline -->
				<p:sidebar widgetVar="SideBarServerOffline" fullScreen="true" baseZIndex="10000">
					<div style="text-align: center;">
						<h1 style="font-weight: normal;">
							<p:outputLabel value="<span style='color:red;'>Server is currently offline.</span>" escape="false"/>
						</h1>
						<h2>
							<p:outputLabel value="You will be redirected when server is online again." escape="false"/>
						</h2>
					</div>
				</p:sidebar>

And here is the javascript which will do the action:

<h:outputScript>
	var SERVERPINGTIME = 30*1000; // in ms
	var SERVERTIMEOUTTIME = 10*1000; // in ms
	var isServerOnline = true;
	var ServerPingTimeout;
	var RedirectURL = "/index?faces-redirect=true";
	// Check server state
	function CheckServerState() {
		console.log("Checking current server state...");
		// Try to ping server and get result or timeout:
		$.ajax({
			url: "/dummy.html" + "?id\x3d" + "1",
			async: false,
			cache: false,
			type: "GET",
			success: function(a) {
				OnServerOnline();
			},
			error: function(a) {
				OnServerOffline();
			},
			timeout: SERVERTIMEOUTTIME
		});
	}
	function OnServerOnline() {
		// Redirect to start page
		if (isServerOnline == false) {
			console.log(" Server is online again, try to redirect to '"+RedirectURL+"'");
			window.location.href = RedirectURL;
		}
		// Re-Check
		if (isServerOnline == true) {
			console.log(" Server is online ...");
			ServerPingTimeout = setTimeout("CheckServerState()", SERVERPINGTIME);
		}
		isServerOnline = true;
	}
	function OnServerOffline() {
		console.log(" Server is now offline - retry ...");
		isServerOnline = false;
		// Show information that server is offline to user:
		PF('SideBarServerOffline').show();
		// Re-Check
		ServerPingTimeout = setTimeout("CheckServerState()", SERVERPINGTIME);
	}
	// Execute script on page ready
	$(document).ready(function()
	{
		// Install a timer to check the server's current state
		clearTimeout(ServerPingTimeout);
		ServerPingTimeout = setTimeout("CheckServerState()", SERVERPINGTIME);
	});
</h:outputScript>

The only thing here todo is to create a new component which
is handling the parameters like SERVERPINGTIME, SERVERTIMEOUT, RedirectURL, ...
because it's currently tested in production and it works as it should ...

Exporter: Remove from Extensions

Wanted to float this out there to anybody watching about removal of the Extensions DataExporter.

PF DataExporter has most of the features now of this exporter and the code in PFE is both ugly and difficult to maintain.

Just wanted to get +1 votes for removal and -1 votes for leaving it in PFE.

NOTE:

  • Remove POI from pom.xml
  • Remove all code and showcase examples and controllers
  • Remove file \src\main\resources\META-INF\services\org.primefaces.extensions.component.exporter.ExporterFactory

Exporter: exportFunction as component or facet

Export built-in solutions for certain components like h:outputLink or p:cellEditor are very nice and can be enhanced by CustomExporter.

ExportFunction:

It is not possible to write a custom exporter for any complex or composite type and exportFunction of primefaces column lacks lacks support of alignment, styling, or potential future improvements like Number type exports (for excel).

It also does not supports an el expression like: #{el:getEnumLabel(varOrder.state)}, which is a very common use case.

Idea

Give more control to the developer to define how to export in markup using a facet or new component.
With a export component, styling could be overriden on cell level and alignment could also be defined which gives a flexible approach.

<p:column>

	<!-- 1. use a facet -->
	<f:facet name="export">
		<h:outputText value="#{varOrder.timeRange.start}-#{varOrder.timeRange.end}"/>
	</f:facet>

	<!-- 2. export component - with optional column styles or type definition -->
	<pe:export value="#{varOrder.timeRange.start}-#{varOrder.timeRange.end}" fontColor="#00ff00" align="center">
		<!-- 2. a) or allow "complex" definition -->
		<h:outputText value="#{varOrder.timeRange.start}-#{varOrder.timeRange.end}"/>
	</pe:exporter>


	<!-- complex composite which is not exported -->
	<comp:timeRange value="#{varOrder.timeRange}"/>
</p:column>

New Component: Search

Original PF issue: primefaces/primefaces#396

What about a new component which can markup any occurences of a word or a part of a word in a specified object(div, panel,...)? Same thing like the browser search function, but for specified containers. This would be great, especially in addition to filter in dataTable.

eg.

<p:mark styleClass="styleClassForMarkDown" 
                        for=":form:searchContainer" 
                        value="wordToSearch" />

This jquery component would be ideal: https://markjs.io/

Sheet: New column type "button"

In the newest component "Sheet" i am missing a ColType for handling button-actions
like Delete Row, Mark Row and so on.

I will eventually need this for our project because in the showcase
the example for using it with right-click is nice,
but not useable on e.g. a touch-screen
or a user who don't know how to use the right-click ;-)

Here would it always be better to support a button with a minimum height of
about 39px, a icon (font awesome if possible) and a listener or onclick .

CommandButtonSingleClick: Respect actionListener as well as action

Describe the bug
The CommandButtonSingleClick renderer appends new JavaScript code to the existing JavaScript code on each update. This increases the size of the DOM tree, and subsequently the data transmitted over the network, continually.

This behavior results, on complex pages, after a short while in multiple megabyte data per update/click.

Environment:

  • PF Version: 8.0.3
  • JSF + version: Mojarra 2.3
  • Affected browsers: Chrome, Firefox

To Reproduce
Steps to reproduce the behavior:

  1. git clone https://github.com/Exandra/primefaces-test
  2. cd primefaces-test
  3. mvn clean jetty:run -Pmojarra23
  4. Open http://localhost:8080/primefaces-test/
  5. Open your web inspector
  6. Click repeately on the button labeled "Update @Form" and keep an eye on the transmitted data or check the size of the DOM
    (also works by switching pages or similar updates)

Expected behavior
The size of DOM/transmitted data should be nearly constant even after ten updates.
Remove the CommandButtonSingleClickRenderer from your faces-config.xml to compare your results with vanilla primefaces.

JavaScript
With each update, the CommandButton onclick gets longer and longer with more disable/enable statements:
var w = PF('widget_frmTest_j_idt6_1_j_idt8'); if (w) { w.disable(); };

SlideOut: Tab word wrapping

problem:
if title attribute contains space, title of handle button will be breakdown in two part, and it's ugly on design

solution:
this problem will resolve by add "width: max-content" in .ui-slideouttab-handle css class

Sheet: Missing updates when pasting more rows than available in the current sheet

Version

PrimeFaces: 6.2.6, PrimeFaces Extensions: 6.2.7, JSF: mojarra 2.2, Server: jetty/9.4.11.v20180605

Related

See also primefaces-extensions/primefaces-extensions.github.com#586

Steps to reproduce

  1. Add a <pe:sheet> component.
  2. Add an ajax listener for the change event
  3. If the data sheet has got, for example, 10 rows, copy 4 rows to the clipboard, click on a cell of the last row, and press ctrl+v to paste those rows.
<pe:sheet>
...
<p:ajax event="change" global="false" listener="#{myBean.onSheetDataChanged}" />
...
<pe:sheet/>

On the client side, 3 new rows are created and displayed. However, when we retrieve the updates in the bean via org.primefaces.extensions.component.sheet.Sheet#getUpdates, we only get one SheetUpdate. All SheetUpdates for cell of newly created rows are missing. This results in inconsistencies between the client and server-side model for me.

As far as I can tell, this happens because a NullPointerException was fixed in issue #586 by ignoring updates from cells of newly created rows.

documentviewer: Add possibility to select which buttons are shown

Is your feature request related to a problem? Please describe.
Currently the pe:documentviewer renders all possible buttons for pdf.js. Sometimes we want users to only use a subset of this buttons. It would be good to add a possibility to select which buttons are shown.

Describe the solution you'd like
It would be great if the pe:documentviewer tag gets a new attribute showButtons which can get a list of buttons that will rendered by pdf.js. E.g. <pe:documentviewer showButtons="download,print">

Badge: compatibility with PF themes

See for example: https://primefaces.org/diamond/misc.xhtml

There the HTML for a button with a badge is:

<span class="ui-overlay-badge">
  <button .../>
  <span class="ui-badge ui-badge-warning">5</span>
</span>

To do so, I think we need to change from:

<p:button id="btnEmail" url="#" icon="fa fa-envelope" title="E-mail">
  <pe:badge content="1" />
</p:button>

to:

<pe:badge content="1" severity="warning">
  <p:button id="btnEmail" url="#" icon="fa fa-envelope" title="E-mail"/>
</pe:badge>

I'm not sure if this makes much sense... I guess it depends on what the plans with the badge will be in terms of the basic templates. Because the only reasons to use this component is that the styling is included. If styling is included you could simply create a composite or custom tag.

Performance: Use getChildCount() instead of size/empty

Description
Do not use size() or isEmpty() for any child counting using getChildCount() instead.

JFYI if you use getChildren().getSize() on a component, where childCount=0, a empty Child-List is created. So getChild() prevents unncessary list instances

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.