From c128c346bb24c070b9f4bdbdc979d5e33d3a3dff Mon Sep 17 00:00:00 2001 From: M Clark Date: Tue, 12 Apr 2016 21:56:02 +0800 Subject: [PATCH] Added react-tagcloud (#8899) --- react-tagcloud/react-tagcloud-tests.tsx | 102 ++++++++++++++++++++++++ react-tagcloud/react-tagcloud.d.ts | 43 ++++++++++ 2 files changed, 145 insertions(+) create mode 100644 react-tagcloud/react-tagcloud-tests.tsx create mode 100644 react-tagcloud/react-tagcloud.d.ts diff --git a/react-tagcloud/react-tagcloud-tests.tsx b/react-tagcloud/react-tagcloud-tests.tsx new file mode 100644 index 0000000000..76a0328670 --- /dev/null +++ b/react-tagcloud/react-tagcloud-tests.tsx @@ -0,0 +1,102 @@ +/// +/// +/// + + +// simple cloud +import * as React from "react"; +import * as ReactDOM from "react-dom"; +import {TagCloud, DefaultRenderer} from "react-tagcloud"; + +let data = [ + { value: "jQuery", count: 25 }, { value: "MongoDB", count: 18 }, + { value: "JavaScript", count: 38 }, { value: "React", count: 30 }, + { value: "Nodejs", count: 28 }, { value: "Express.js", count: 25 }, + { value: "HTML5", count: 33 }, { value: "CSS3", count: 20 } +]; + +ReactDOM.render( + // minSize, maxSize - font size in px + // tags - array of objects with properties value and count + // shuffle - indicates if data should be shuffled (true by default) + // onClick event handler has `tag` and `event` parameter + console.log("clicking on tag:", tag)} />, + document.getElementById("simple-cloud") +); + + + +// default-renderer + +// DefaultRenderer creates default renderer implementation with custom options +// usage of tagRenderer option is described in ./custom-tag-renderer.js + +// custom props will be applied on each tag component +const props = { + style: {border: "1px solid silver", padding: "5px"}, + className: "my-tag-class" +}; + +// custom random color options +// see randomColor package: https://github.com/davidmerfield/randomColor +const colorOptions = { + luminosity: "light", + hue: "blue" +}; + +let customizedDefaultRenderer = new DefaultRenderer({ props, colorOptions }); + +ReactDOM.render( + , + document.getElementById("default-renderer") +); +// +// custom-renderer.js +// using custom renderer the default renderer will be overriden + +// custom renderer is function which takes tag, computed font size and +// elemnt key as arguments, and returns react component +let customRenderer2 = (tag: any, size: number, key: string|number) => { + return {tag.value}; +}; + +ReactDOM.render( + , + document.getElementById("custom-renderer") +); + + +// example from custom-tag-renderer.js +let data2 = [ + { value: { name: "google", link: "http://google.com" }, count: 25 }, + { value: { name: "yahoo", link: "http://yahoo.com" }, count: 18 }, + { value: { name: "facebook", link: "http://facebook.com" }, count: 38 }, + { value: { name: "twitter", link: "http://twitter.com" }, count: 30 }, + { value: { name: "github", link: "http://github.com" }, count: 28 }, + { value: { name: "npmjs", link: "http://npmjs.com" }, count: 25 }, + { value: { name: "stackoverflow", link: "http://stackoverflow.com" }, count: 33 } +]; + +// with tagRenderer option it is possible to customize rendering of each tag +// tagRender is a function which takes tag as argument and returns react component or simple string +const tagRenderer = (tag: any) => ({tag.value.name}); + +const customizedDefaultRenderer4 = new DefaultRenderer({ tagRenderer }); + +ReactDOM.render( + , + document.getElementById("custom-tag-renderer") +); diff --git a/react-tagcloud/react-tagcloud.d.ts b/react-tagcloud/react-tagcloud.d.ts new file mode 100644 index 0000000000..4049070893 --- /dev/null +++ b/react-tagcloud/react-tagcloud.d.ts @@ -0,0 +1,43 @@ +// Type definitions for react-tagcloud v0.4.0 +// Project: https://github.com/madox2/react-tagcloud +// Definitions by: wassname +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare namespace ReactTagCloud { + interface TagCloudProps extends __React.Props { + tags: any[]; + maxSize: number; + minSize: number; + shuffle?: boolean; + renderer?: Function; + className?: string; + onClick?: Function; + } + interface TagCloudClass extends __React.ComponentClass { } + + interface DefaultRendererFactoryOptions { + tagRenderer?: Function; + colorOptions?: any; + props?: any; + } + interface RendererFunction { + (tag: any, size: number, key: string | number, handlers: any): any; + } + interface DefaultRendererFactory { + new (_ref?: DefaultRendererFactoryOptions): RendererFunction; + (_ref?: DefaultRendererFactoryOptions): RendererFunction; + } +} + + +// export = TagCloud +declare module reactTagCloud { + const TagCloud: ReactTagCloud.TagCloudClass; + const DefaultRenderer: ReactTagCloud.DefaultRendererFactory; +} + +declare module "react-tagcloud" { + export = reactTagCloud +}