From 60fab95e0e6f4a4435af64db8b847bac1798e664 Mon Sep 17 00:00:00 2001 From: Elliot Nahman Date: Wed, 25 May 2016 05:32:40 -0700 Subject: [PATCH] first commit --- .bowerrc | 3 + .editorconfig | 18 + .gitignore | 8 + .jshintrc | 38 + Dancing_banana.gif | Bin 0 -> 562001 bytes Gruntfile.js | 145 +++ HISTORY.md | 3 + LICENSE.md | 65 ++ README.md | 97 ++ bower.json | 26 + css/px-vis-timeseries-sketch.css | 1008 +++++++++++++++++++++ css/px-vis-timeseries.css | 1029 ++++++++++++++++++++++ demo.html | 89 ++ favicon.ico | 1 + index.html | 13 + package.json | 26 + px-vis-timeseries.html | 448 ++++++++++ sass/px-vis-timeseries-predix.scss | 35 + sass/px-vis-timeseries-sketch.scss | 40 + test/px-vis-timeseries-base-tests.js | 197 +++++ test/px-vis-timeseries-custom-tests.js | 9 + test/px-vis-timeseries-test-fixture.html | 28 + wct.conf.js | 14 + 23 files changed, 3340 insertions(+) create mode 100644 .bowerrc create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .jshintrc create mode 100644 Dancing_banana.gif create mode 100644 Gruntfile.js create mode 100644 HISTORY.md create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 bower.json create mode 100644 css/px-vis-timeseries-sketch.css create mode 100644 css/px-vis-timeseries.css create mode 100644 demo.html create mode 100644 favicon.ico create mode 100644 index.html create mode 100644 package.json create mode 100644 px-vis-timeseries.html create mode 100644 sass/px-vis-timeseries-predix.scss create mode 100644 sass/px-vis-timeseries-sketch.scss create mode 100644 test/px-vis-timeseries-base-tests.js create mode 100644 test/px-vis-timeseries-custom-tests.js create mode 100644 test/px-vis-timeseries-test-fixture.html create mode 100644 wct.conf.js diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 00000000..637d54ea --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "./bower_components" +} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..46b61b1c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] + +# Change these settings to your own preference +indent_style = space +indent_size = 2 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a8c7de10 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules +.DS_Store +temp +bower_components +.idea +reports +css/noprefix +.yo-rc.json diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 00000000..e3a4ea7a --- /dev/null +++ b/.jshintrc @@ -0,0 +1,38 @@ +{ + "curly": true, + "eqeqeq": true, + "immed": true, + "latedef": true, + "noarg": true, + "sub": true, + "undef": true, + "boss": true, + "eqnull": true, + "node": true, + "browser": true, + "expr":true, + "globals" : { + "it" : false, + "xit" : false, + "describe" : false, + "xdescribe" : false, + "before" : false, + "after" : false, + "beforeEach" : false, + "afterEach" : false, + "expect" : false, + "spyOn" : false, + "alert" : false, + "require" : false, + "requirejs" : false, + "Card" : true, + "iOS" : false, + "$" : true, + "define" : false, + "angular": false, + "Polymer": false, + "suite": false, + "test": false, + "assert": false + } +} diff --git a/Dancing_banana.gif b/Dancing_banana.gif new file mode 100644 index 0000000000000000000000000000000000000000..455e7875a02382c86b255002e96859928ce73537 GIT binary patch literal 562001 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' + } + }, + webdriver: { + options: { + specFiles: ['test/*spec.js'] + }, + local: { + webdrivers: ['chrome'] + } + }, + concurrent: { + devmode: { + tasks: ['watch', 'depserve'], + options: { + logConcurrentOutput: true + } + } + } + }); + + grunt.loadNpmTasks('grunt-sass'); + grunt.loadNpmTasks('grunt-shell'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-dep-serve'); + grunt.loadNpmTasks('webdriver-support'); + grunt.loadNpmTasks('grunt-autoprefixer'); + grunt.loadNpmTasks('grunt-concurrent'); + + // Default task. + grunt.registerTask('default', 'Basic build', [ + 'sass', + 'autoprefixer' + ]); + + grunt.registerTask('devmode', 'Development Mode', [ + 'concurrent:devmode' + ]); + + // First run task. + grunt.registerTask('firstrun', 'Basic first run', function() { + grunt.config.set('depserveOpenUrl', '/index.html'); + grunt.task.run('default'); + grunt.task.run('depserve'); + }); + + // Default task. + grunt.registerTask('test', 'Test', [ + 'jshint', + 'webdriver' + ]); + + grunt.registerTask('release', 'Release', [ + 'clean', + 'shell:bower', + 'default', + 'test' + ]); + +}; diff --git a/HISTORY.md b/HISTORY.md new file mode 100644 index 00000000..f5e5c9c2 --- /dev/null +++ b/HISTORY.md @@ -0,0 +1,3 @@ +v0.0.1 +================== +* Initial release diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..a59df513 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,65 @@ +GE Software Development License Agreement – General Release + +THIS SOFTWARE LICENSE AGREEMENT (the “License”) describes the rights granted by the General Electric Company, operating through GE Digital (also referred to as “GE Software”), located at 2623 Camino Ramon, San Ramon, CA 94583 (herein referred to as “Licensor”) to any entity (the “Licensee”) receiving a copy of any of the following GE Digital development materials: Predix DevBox; Predix Reference Application (“RefApp”); Predix Dashboard Seed; Predix Px, Predix Security Service redistributable .jar files; Predix Machine redistributable .jar files; and Predix Machine SDK . These materials may include scripts, compiled code, supporting components, and documentation and are collectively referred to as the “Licensed Programs”. Both Licensor and Licensee are referred to hereinafter as a “Party” and collectively as the “Parties” to this License + +Section 1 – Conditional Grant. + +No Licensee is required to accept this License for use of the Licensed Programs. In the absence of a signed license agreement between Licensor and Licensee specifying alternate terms, any use of the Licensed Programs by the Licensee shall be considered acceptance of these terms. The Licensed Programs are copyrighted and are licensed, not sold, to you. If you are not willing to be bound by the terms of this License, do not install, copy or use the Licensed Programs. If you received this software from any source other than the Licensor, your access to the Licensed Programs is NOT permitted under this License, and you must delete the software and any copies from your systems. + +Section 2 – Warranty Disclaimer. + +NO WARRANTIES. LICENSOR AND OUR AFFILIATES, RESELLERS, DISTRIBUTORS, AND VENDORS, MAKE NO WARRANTIES, EXPRESS OR IMPLIED, GUARANTEES OR CONDITIONS WITH RESPECT TO USE OF THE LICENSED PROGRAMS. LICENSEE’S USE OF ALL SUCH PROGRAMS ARE AT LICENSEE’S AND CUSTOMERS’ OWN RISK. LICENSOR PROVIDES THE LICENSED PROGRAMS ON AN “AS IS” BASIS “WITH ALL FAULTS” AND “AS AVAILABLE.” LICENSOR DOES NOT GUARANTEE THE ACCURACY OR TIMELINESS OF INFORMATION AVAILABLE FROM, OR PROCESSED BY, THE LICENSED PROGRAMS. TO THE EXTENT PERMITTED UNDER LAW, LICENSOR EXCLUDES ANY IMPLIED WARRANTIES, INCLUDING FOR MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE, WORKMANLIKE EFFORT, AND NON-INFRINGEMENT. NO GUARANTEE OF UNINTERRUPTED, TIMELY, SECURE, OR ERROR-FREE OPERATION IS MADE. + +THESE LICENSED PROGRAMS MAY BE USED AS PART OF A DEVELOPMENT ENVIRONMENT, AND MAY BE COMBINED WITH OTHER CODE BY END-USERS. LICENSOR IS NOT ABLE TO GUARANTEE THAT THE LICENSED PROGRAMS WILL OPERATE WITHOUT DEFECTS WHEN USED IN COMBINATION WITH END-USER SOFTWARE. LICENSEE IS ADVISED TO SAFEGUARD IMPORTANT DATA, TO USE CAUTION, AND NOT TO RELY IN ANY WAY ON THE CORRECT FUNCTIONING OR PERFORMANCE OF ANY COMBINATION OF END-USER SOFTWARE AND THE LICENSED PROGRAMS AND/OR ACCOMPANYING MATERIALS. LICENSEE IS ADVISED NOT TO USE ANY COMBINATION OF LICENSED PROGRAMS AND END-USER PROVIDED SOFTWARE IN A PRODUCTION ENVIRONMENT WITHOUT PRIOR SUITABILITY AND DEFECT TESTING. + +Section 3 – Feedback. + +It is expressly understood, acknowledged and agreed that you may provide GE reasonable suggestions, comments and feedback regarding the Software, including but not limited to usability, bug reports and test results, with respect to Software testing (collectively, "Feedback"). If you provide such Feedback to GE, you shall grant GE the following worldwide, non-exclusive, perpetual, irrevocable, royalty free, fully paid up rights: + +a. to make, use, copy, modify, sell, distribute, sub-license, and create derivative works of, the Feedback as part of any product, technology, service, specification or other documentation developed or offered by GE or any of its affiliates (individually and collectively, "GE Products"); b. to publicly perform or display, import, broadcast, transmit, distribute, license, offer to sell, and sell, rent, lease or lend copies of the Feedback (and derivative works thereof) as part of any GE Product; c. solely with respect to Licensee's copyright and trade secret rights, to sublicense to third parties the foregoing rights, including the right to sublicense to further third parties; and d. to sublicense to third parties any claims of any patents owned or licensable by Licensee that are necessarily infringed by a third party product, technology or service that uses, interfaces, interoperates or communicates with the Feedback or portion thereof incorporated into a GE Product, technology or service. Further, you represent and warrant that your Feedback is not subject to any license terms that would purport to require GE to comply with any additional obligations with respect to any GE Products that incorporate any Feedback. + +Section 4 – Reserved + +Section 5 – Limitation of Liability. + +LIABILITY ARISING UNDER THIS LICENSE, WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), SHALL BE LIMITED TO DIRECT, OBJECTIVELY MEASURABLE DAMAGES. LICENSOR SHALL HAVE NO LIABILITY TO THE OTHER PARTY OR TO ANY THIRD PARTY, FOR ANY INCIDENTAL, PUNITIVE, INDIRECT, OR CONSEQUENTIAL DAMAGES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. LIABILITY FOR ANY SOFTWARE LICENSED FROM THIRD PARTIES FOR USE WITH THE SERVICES IS EXPLICILTLY DISCLAIMED AND LIMITED TO THE MAXIMUM EXTENT PERMITTED BY LAW. + +Notwithstanding anything to the contrary, the aggregate liability of Licensor and its suppliers under this License shall not exceed the total amounts paid by Licensee to Licensor hereunder during the one-year period immediately preceding the event which gave rise to the claims. + +Section 6 – License. + +A. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants Licensee a worldwide, perpetual, royalty-free, non-exclusive license to: + +install the Licensed Programs on Licensee’s premises, and permit Licensee’s users to use the Licensed Programs so installed, solely for Licensee’s own development, testing, demonstration, staging, and production of Licensee’s own software that makes use of the Licensed Programs in a way that adds substantial functionality not present in the Licensed Programs (the result, a “Licensee Application”); + +permit Licensee to permit third-party hosts (“Hosts”) to install the Licensee Application on such Hosts’ respective premises on Licensee’s behalf, and permit Licensee’s users to access and use the Licensed Programs so installed, solely for Licensee’s own development, testing, demonstration, staging and production purposes + +install the Licensee Application on Licensee’s own premises and permit its own users to use the Licensee Application so installed on the same terms as sub-sections (i) and (ii) above. + +B. For the purposes of this License, the right to “use” the Licensed Programs shall include the right to utilize, run, access, store, copy, test or display the Licensed Programs. No right or license is granted or agreed to be granted to disassemble or decompile any Licensed Programs furnished in object code form, and Licensee agrees not to engage in any such conduct unless permitted by law. Reverse engineering of Licensed Programs provided in object code form is prohibited, unless such a right is explicitly granted by any explicit license subject to sub-section (d) below or as a matter of law, and then only to the extent explicitly permitted. Licensor shall have no obligation to support any such reverse engineering, any product or derivative of such reverse engineering, or any use of the Licensed Programs with any modified versions of any of their components under this License. + +C. Licensee shall ensure that any Licensee Applications incorporate the Licensed Programs in such a way as to prevent third parties (other than Hosts) from viewing the code of the Licensed Programs or gaining access to any programmatic interface or other hidden aspect of the Licensed Programs. Licensee shall also restrict distribution of the Licensed Programs, including as part of Licensee Applications, to only those parties who are notified of, and subject to, an enforceable obligation to refrain from any of the prohibited activities listed herein, such as reverse engineering or disassembling the Licensed Programs. + +D. Use of some open source and third party software applications or components included in or accessed through the Licensed Programs may be subject to other terms and conditions found in a separate license agreement, terms of use or “Notice” file located at the download page. The Licensed Programs are accompanied by additional software components solely to enable the Licensed Programs to operate as designed. Licensee is not permitted to use such additional software independently of the Licensed Programs unless Licensee secures a separate license for use from the named vendor. Do not use any third party code unless you agree with the applicable license terms for that code. + +E. Title. Title to and ownership of the Licensed Programs shall at all times remain with Licensor. + +Section 7 – Termination. + +A) The Licensor reserves the right to cease distribution and grant of further licenses to any or all of the Licensed Programs at any time in its sole discretion. + +B) The Licensor reserves the right to at any time and at its sole discretion provide updated versions of any or all of the Licensed Programs that supercede and replace the prior version of that Licensed Program. + +C) Your license rights under Section 6 are effective until terminated as described below: + +i) This license and all rights under it will terminate or cease to be effective without notice if Licensee breaches the terms of the License and does not correct or remedy such breach promptly. + +ii) Notwithstanding the foregoing, Licensee may terminate this License at any time for any reason or no reason by providing the Licensor written notice thereof. + +D) Upon any expiration or termination of this License, the rights and licenses granted to you under this License shall immediately terminate, and you shall immediately cease using and delete the Licensed Programs. Licensee Applications based upon the Licensed Programs (see Section 6(a) above) are not subject to this limitation. + +In the event of any expiration or termination of this Licensee, any Confidentiality provision, disclaimers of GE’s representations and warranties, choice of applicable law and limitations of GE’s liability shall survive. + +Section 8 – Applicable Law. + +The License shall be governed by and interpreted in accordance with the substantive law of the State of California, U.S.A., excluding its conflicts of law provisions, and by the courts of that state. diff --git a/README.md b/README.md new file mode 100644 index 00000000..98eeba3c --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +Px-Vis-Timeseries +----------------------------------------------- + +## Overview + +Px-Vis-Timeseries is a Predix Experience ('Px') component + +## Getting Started + +Read https://github.com/pages/PX/technical-principles/ + +From the component's directory... + +``` +$ npm install +$ bower install +$ grunt sass +``` + +### API and examples + +From the component's directory + +``` +$ grunt depserve +``` + +Starts a local server. Navigate to the root of that server (e.g. http://localhost:8080/) in a browser to open the API documentation page, with link to the "Demo" / working examples. + +### LiveReload + +By default grunt depserve is configured to enable LiveReload and will be watching for modifications in your root directory as well as `/css`. + +Your browser will also need to have the LiveReload extension installed and enabled. For instructions on how to do this please refer to [livereload.com/extensions/](http://livereload.com/extensions/). + +Add, remove, modify file system patterns specified in the `depserve.options.livereload` array in your `Gruntfile.js` + +This is an example depserve configuration: + +``` +depserve: { + options: { + open: '<%= depserveOpenUrl %>, + livereload: [__dirname + "/js", __dirname + "/css", __dirname] + } +} +``` + +Disable LiveReload by removing the `livereload` key from the configuration object. + +### DevMode + +From the component's directory run: + +``` +$ grunt devmode +``` + +Starts a local server exactly the same as if you had run `grunt depserve` however in addition it also runs `grunt watch` concurrently which will execute commands on file change according to the specified matching patterns. + +This is an example `grunt watch` configuration which watches for changes to SASS files, then on changes executes SASS compilation and automatic prefixing: + +``` +watch: { + sass: { + files: ['sass/**/*.scss'], + tasks: ['sass', 'autoprefixer'], + options: { + interrupt: true + } + } +} +``` + +### Options + +Does this component have runtime configuration options? If so, they should be able to be passed as attributes on the element with examples shown below. + +### Function calls + +What is the public API of this component? + +### Extending styles + +Documented CSS extension points? + +### Extending behavior + +See Polymer composition patterns + +GE Coding Style Guide +--------------------- + +[GE JS Developer's Guide](https://github.com/GeneralElectric/javascript) + + +### Known Issues diff --git a/bower.json b/bower.json new file mode 100644 index 00000000..4e845ed4 --- /dev/null +++ b/bower.json @@ -0,0 +1,26 @@ +{ + "name": "px-vis-timeseries", + "version": "0.0.1", + "main": [ + "px-vis-timeseries.html" + ], + "ignore": [ + ".*", + "npm-debug.log", + "Gruntfile.js", + "sass", + "bower_components", + "node_modules", + "test" + ], + "dependencies": { + "polymer": "~1.4.0", + "px-theme": "~0.7.0", + "px-vis": "https://github.com/PredixDev/px-vis.git" + }, + "devDependencies": { + "iron-component-page" : "PolymerElements/iron-component-page#~v1.1.0", + "px-demo-data": "~0.0.1", + "px-starter-kit-design": "~0.4.9" + } +} diff --git a/css/px-vis-timeseries-sketch.css b/css/px-vis-timeseries-sketch.css new file mode 100644 index 00000000..7e50c8ba --- /dev/null +++ b/css/px-vis-timeseries-sketch.css @@ -0,0 +1,1008 @@ +@charset "UTF-8"; +/* + * Copyright (c) 2014 GE Global Research. All rights reserved. + * + * The copyright to the computer software herein is the property of + * GE Global Research. The software may be used and/or copied only + * with the written permission of GE Global Research or in accordance + * with the terms and conditions stipulated in the agreement/contract + * under which the software has been supplied. + */ +/* +THIS FILE SHOULD CONTAIN ONLY ABSTRACT/'SKETCH' THEME RULES, NOT SPECIFIC TO PREDIX BRANDING +Predix branding rules go in px-vis-timeseries-predix.scss, not in this file. +*/ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +/** + * + * 1. Set the default `font-size` and `line-height` for the entire project, + * sourced from our default variables. The `font-size` is calculated to exist + * in ems, the `line-height` is calculated to exist unitlessly. + * 2. Force scrollbars to always be visible to prevent awkward ‘jumps’ when + * navigating between pages that do/do not have enough content to produce + * scrollbars naturally. + * 3. Ensure the page always fills at least the entire height of the viewport. + * 4. Prevent certain mobile browsers from automatically zooming fonts. + * 5. Fonts on OSX will look more consistent with other systems that do not + * render text using sub-pixel anti-aliasing. + */ +html { + font-size: 0.9375em; + /* [1] */ + line-height: 1.3333333333; + /* [1] */ + background-color: white; + color: black; + overflow-y: scroll; + /* [2] */ + min-height: 100%; + /* [3] */ + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + text-size-adjust: 100%; + /* [4] */ + -moz-osx-font-smoothing: grayscale; + /* [5] */ + -webkit-font-smoothing: antialiased; + /* [5] */ } + +/** + * Remove default margin. + */ +body { + margin: 0; } + +/* HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; } + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ +audio, +canvas, +progress, +video { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ } + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +audio:not([controls]) { + display: none; + height: 0; } + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; } + +/* Margins + ========================================================================== */ +/** + * Where `margin-bottom` is concerned,this value will be the same as the + * base line-height. This allows us to keep a consistent vertical rhythm. + * As per: csswizardry.com/2012/06/single-direction-margin-declarations + */ +h1, h2, h3, h4, h5, h6, +ul, ol, dl, +blockquote, p, address, +hr, +table, +fieldset, figure, +pre { + margin-bottom: 1rem; } + +/** + * Remove extra vertical spacing when nesting lists. + */ +li > ul, +li > ol { + margin-bottom: 0; } + +/** + * Where `margin-left` is concerned we want to try and indent certain elements + * by a consistent amount. Define that amount once,here. + */ +ul, ol, dd { + margin-left: 2rem; } + +/* Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9/10. Make images shrink from their largest size. + */ +img { + max-width: 100%; + border: 0; } + +/** + * Correct overflow not hidden in IE 9/10/11. + */ +svg:not(:root) { + overflow: hidden; } + +/* Grouping content + ========================================================================== */ +/** + * Zero margins for figure. + */ +figure { + margin: 0; } + +/** + * Address differences between Firefox and other browsers. + */ +hr { + box-sizing: content-box; + height: 0; } + +/** + * Contain overflow in all browsers. + */ +pre { + overflow: auto; } + +/** + * Set the global `box-sizing` state to `border-box`. + * + * css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice + * paulirish.com/2012/box-sizing-border-box-ftw + */ +html { + box-sizing: border-box; } + +:host { + /*! Comment to prevent cssmin munging this rule with html above and borking Safari */ + box-sizing: border-box; } + +*, *:before, *:after { + box-sizing: inherit; } + +/** + * A series of helper classes to use arbitrarily. Only use a helper class if an + * element/component doesn’t already have a class to which you could apply this + * styling, e.g. if you need to float `.main-nav` left then add `float:left;` to + * that ruleset as opposed to adding the `.float--left` class to the markup. + * + * A lot of these classes carry `!important` as you will always want them to win + * out over other selectors. + */ +/*------------------------------------* #PX-COLORS-DESIGN +\*------------------------------------*/ +/** + * Brand Colors + */ +/** + * Primary + */ +/** + * Light + */ +/** + * Dark + */ +/** + * Monochromatic (gray10 is darkest, gray1 is lightest) + */ +/** + * Define grey = gray to avoid dev typos + */ +/** + * Buttons + */ +/** + * Selection + */ +/** + * Alerts + */ +/** + * Data Visualization + */ +/** + * Basic + */ +/** + * Light + */ +/** + * Dark + */ +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; + /** + * Default link colors + */ + /** + * Improve readability when focused and also mouse hovered in all browsers. + */ } + a:link, a:visited { + color: #3e87e8; } + a:hover { + color: #3573c5; } + a:active { + color: #2b5ea2; } + a:active, a:hover { + outline: 0; } + +/** + * Add/remove floats + */ +.float--right { + float: right !important; } + +.float--left { + float: left !important; } + +.float--none { + float: none !important; } + +/** + * Text alignment + */ +.text--left { + text-align: left !important; } + +.text--center { + text-align: center !important; } + +.text--right { + text-align: right !important; } + +/** + * Full height element + */ +.full-height { + height: 100% !important; } + +/** + * Add a help cursor to any element that gives the user extra information on + * `:hover`. + */ +.informative { + cursor: help !important; } + +/** + * Mute an object by reducing its opacity. + */ +.muted { + opacity: 0.5 !important; } + +/** + * Align items to the right where they imply progression/movement forward, e.g.: + * +

Read more...

+ * + */ +.proceed { + text-align: right !important; } + +/** + * Apply capital case to an element (usually a `strong`). + */ +.caps { + text-transform: uppercase !important; } + +/** + * Hide visually and from screen readers: + * http://juicystudio.com/article/screen-readers-display-none.php + */ +.hidden { + display: none !important; + visibility: hidden; } + +/** + * Hide content off-screen without resorting to `display:none;` + */ +.a11y, +.visuallyhidden { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } + +.a11y.focusable:active, .a11y.focusable:focus, +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + position: static; + overflow: visible; + width: auto; + height: auto; + margin: 0; + clip: auto; } + +@media screen and (max-width: 44.9375em) { + .a11y-palm, + .visuallyhidden-palm { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media screen and (min-width: 45em) and (max-width: 63.9375em) { + .a11y-lap, + .visuallyhidden-lap { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media screen and (min-width: 45em) { + .a11y-lap-and-up, + .visuallyhidden-lap-and-up { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media screen and (max-width: 63.9375em) { + .a11y-portable, + .visuallyhidden-portable { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media screen and (min-width: 64em) { + .a11y-desk, + .visuallyhidden-desk { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) { + .a11y-retina, + .visuallyhidden-retina { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +/** + * Hide visually and from screen readers, but maintain layout + */ +.invisible { + visibility: hidden !important; } + +.flex { + display: -ms-flexbox; + display: flex; } + +.inline--flex { + display: -ms-inline-flexbox; + display: inline-flex; } + +.flex--row { + -ms-flex-direction: row; + flex-direction: row; } + +.flex--row--rev { + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + +.flex--col { + -ms-flex-direction: column; + flex-direction: column; } + +.flex--col--rev { + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } + +.flex--nowrap { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + +.flex--wrap { + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + +.flex--wrap--rev { + -ms-flex-wrap: wrap-reverse; + flex-wrap: wrap-reverse; } + +.flex--left { + -ms-flex-pack: start; + justify-content: flex-start; } + +.flex--center { + -ms-flex-pack: center; + justify-content: center; } + +.flex--right { + -ms-flex-pack: end; + justify-content: flex-end; } + +.flex--justify { + -ms-flex-pack: justify; + justify-content: space-between; } + +.flex--spaced { + -ms-flex-pack: distribute; + justify-content: space-around; } + +.flex--top { + -ms-flex-align: start; + align-items: flex-start; } + +.flex--middle { + -ms-flex-align: center; + align-items: center; } + +.flex--bottom { + -ms-flex-align: end; + align-items: flex-end; } + +.flex--stretch { + -ms-flex-align: stretch; + align-items: stretch; } + +.flex--baseline { + -ms-flex-align: baseline; + align-items: baseline; } + +.flex--top--multi { + -ms-flex-line-pack: start; + align-content: flex-start; } + +.flex--middle--multi { + -ms-flex-line-pack: center; + align-content: center; } + +.flex--bottom--multi { + -ms-flex-line-pack: end; + align-content: flex-end; } + +.flex--stretch--multi { + -ms-flex-line-pack: stretch; + align-content: stretch; } + +.flex--justify--multi { + -ms-flex-line-pack: justify; + align-content: space-between; } + +.flex--spaced--multi { + -ms-flex-line-pack: distribute; + align-content: space-around; } + +.flex__item { + -ms-flex: 1; + flex: 1; } + +.flex__item--top { + -ms-flex-item-align: start; + align-self: flex-start; } + +.flex__item--middle { + -ms-flex-item-align: center; + align-self: center; } + +.flex__item--bottom { + -ms-flex-item-align: end; + align-self: flex-end; } + +.flex__item--baseline { + -ms-flex-item-align: baseline; + align-self: baseline; } + +.viewport { + width: 100%; + max-width: 80rem; + margin-right: auto; + margin-left: auto; } + +.viewport--full-height { + min-height: 100vh; } + +/*------------------------------------* #CLEARFIX +\*------------------------------------*/ +/** + * Micro clearfix, as per: css-101.org/articles/clearfix/latest-new-clearfix-so-far.php + * Extend the clearfix class with Sass to avoid the `.clearfix` class appearing + * over and over in your markup. + */ +.clearfix:after { + content: ""; + display: table; + clear: both; } + +/** + * Margin and padding helper classes with breakpoint prefixes. Use these to tweak layout on a micro + * level based on viewport widths. + * + * `.u-[breakpoint]-(m|p)(t|r|b|l|h|v)(-|+|0) {}` = utility - breakpoint - margin/padding top/right/bottom/left/horizontal/vertical less/more/none + */ +/** + * Margin and padding helper classes. Use these to tweak layout on a micro + * level. + * + * `.u-(m|p)(t|r|b|l|h|v)(-|+|0) {}` = utility - margin/padding top/right/bottom/left/horizontal/vertical less/more/none + */ +/** + * Margin helper classes. + * + * Add margins. + */ +.u-m { + margin: 1rem !important; } + +.u-mt { + margin-top: 1rem !important; } + +.u-mr { + margin-right: 1rem !important; } + +.u-mb { + margin-bottom: 1rem !important; } + +.u-ml { + margin-left: 1rem !important; } + +.u-mh { + margin-right: 1rem !important; + margin-left: 1rem !important; } + +.u-mv { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + +/** + * A series of width helper classes that you can use to size things like grid + * systems. Classes can take a fraction-like format (e.g. `.u-2/3`) or a spoken- + * word format (e.g. `.u-2-of-3`). + * + */ +.u-1\/1 { + width: 100% !important; } + +.u-1\/2 { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-1\/3 { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-2\/3 { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-1\/4 { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-2\/4 { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-3\/4 { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-1\/6 { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-2\/6 { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-3\/6 { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-4\/6 { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-5\/6 { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + +@media screen and (max-width: 47.9375rem) { + .u-1\/1-palm { + width: 100% !important; } + .u-1\/2-palm { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-palm { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-palm { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-palm { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-palm { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-palm { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-palm { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-palm { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-palm { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-palm { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-palm { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (min-width: 48rem) and (max-width: 68.204166667rem) { + .u-1\/1-lap { + width: 100% !important; } + .u-1\/2-lap { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-lap { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-lap { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-lap { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-lap { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-lap { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-lap { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-lap { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-lap { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-lap { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-lap { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (min-width: 48rem) { + .u-1\/1-lap-and-up { + width: 100% !important; } + .u-1\/2-lap-and-up { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-lap-and-up { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-lap-and-up { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-lap-and-up { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-lap-and-up { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-lap-and-up { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-lap-and-up { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-lap-and-up { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-lap-and-up { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-lap-and-up { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-lap-and-up { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (max-width: 68.2rem) { + .u-1\/1-portable { + width: 100% !important; } + .u-1\/2-portable { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-portable { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-portable { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-portable { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-portable { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-portable { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-portable { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-portable { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-portable { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-portable { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-portable { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (min-width: 68.266666667rem) { + .u-1\/1-desk { + width: 100% !important; } + .u-1\/2-desk { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-desk { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-desk { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-desk { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-desk { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-desk { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-desk { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-desk { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-desk { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-desk { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-desk { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (min-width: 80rem) { + .u-1\/1-desk-wide { + width: 100% !important; } + .u-1\/2-desk-wide { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-desk-wide { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-desk-wide { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-desk-wide { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-desk-wide { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-desk-wide { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-desk-wide { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-desk-wide { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-desk-wide { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-desk-wide { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-desk-wide { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) { + .u-1\/1-retina { + width: 100% !important; } + .u-1\/2-retina { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-retina { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-retina { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-retina { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-retina { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-retina { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-retina { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-retina { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-retina { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-retina { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-retina { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } diff --git a/css/px-vis-timeseries.css b/css/px-vis-timeseries.css new file mode 100644 index 00000000..08f49980 --- /dev/null +++ b/css/px-vis-timeseries.css @@ -0,0 +1,1029 @@ +@charset "UTF-8"; +/* + * Copyright (c) 2014 GE Global Research. All rights reserved. + * + * The copyright to the computer software herein is the property of + * GE Global Research. The software may be used and/or copied only + * with the written permission of GE Global Research or in accordance + * with the terms and conditions stipulated in the agreement/contract + * under which the software has been supplied. + */ +/* +THIS FILE SHOULD CONTAIN ONLY RULES SPECIFIC TO PREDIX BRANDING +common/abstract rules go in px-vis-timeseries-sketch.scss, not in this file. +*/ +/*------------------------------------* #PX-COLORS-DESIGN +\*------------------------------------*/ +/** + * Brand Colors + */ +/** + * Primary + */ +/** + * Light + */ +/** + * Dark + */ +/** + * Monochromatic (gray10 is darkest, gray1 is lightest) + */ +/** + * Define grey = gray to avoid dev typos + */ +/** + * Buttons + */ +/** + * Selection + */ +/** + * Alerts + */ +/** + * Data Visualization + */ +/** + * Basic + */ +/** + * Light + */ +/** + * Dark + */ +/* + * Copyright (c) 2014 GE Global Research. All rights reserved. + * + * The copyright to the computer software herein is the property of + * GE Global Research. The software may be used and/or copied only + * with the written permission of GE Global Research or in accordance + * with the terms and conditions stipulated in the agreement/contract + * under which the software has been supplied. + */ +/* +THIS FILE SHOULD CONTAIN ONLY ABSTRACT/'SKETCH' THEME RULES, NOT SPECIFIC TO PREDIX BRANDING +Predix branding rules go in px-vis-timeseries-predix.scss, not in this file. +*/ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +/** + * + * 1. Set the default `font-size` and `line-height` for the entire project, + * sourced from our default variables. The `font-size` is calculated to exist + * in ems, the `line-height` is calculated to exist unitlessly. + * 2. Force scrollbars to always be visible to prevent awkward ‘jumps’ when + * navigating between pages that do/do not have enough content to produce + * scrollbars naturally. + * 3. Ensure the page always fills at least the entire height of the viewport. + * 4. Prevent certain mobile browsers from automatically zooming fonts. + * 5. Fonts on OSX will look more consistent with other systems that do not + * render text using sub-pixel anti-aliasing. + */ +html { + font-size: 0.9375em; + /* [1] */ + line-height: 1.3333333333; + /* [1] */ + background-color: white; + color: black; + overflow-y: scroll; + /* [2] */ + min-height: 100%; + /* [3] */ + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + text-size-adjust: 100%; + /* [4] */ + -moz-osx-font-smoothing: grayscale; + /* [5] */ + -webkit-font-smoothing: antialiased; + /* [5] */ } + +/** + * Remove default margin. + */ +body { + margin: 0; } + +/* HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; } + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ +audio, +canvas, +progress, +video { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ } + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +audio:not([controls]) { + display: none; + height: 0; } + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; } + +/* Margins + ========================================================================== */ +/** + * Where `margin-bottom` is concerned,this value will be the same as the + * base line-height. This allows us to keep a consistent vertical rhythm. + * As per: csswizardry.com/2012/06/single-direction-margin-declarations + */ +h1, h2, h3, h4, h5, h6, +ul, ol, dl, +blockquote, p, address, +hr, +table, +fieldset, figure, +pre { + margin-bottom: 1rem; } + +/** + * Remove extra vertical spacing when nesting lists. + */ +li > ul, +li > ol { + margin-bottom: 0; } + +/** + * Where `margin-left` is concerned we want to try and indent certain elements + * by a consistent amount. Define that amount once,here. + */ +ul, ol, dd { + margin-left: 2rem; } + +/* Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9/10. Make images shrink from their largest size. + */ +img { + max-width: 100%; + border: 0; } + +/** + * Correct overflow not hidden in IE 9/10/11. + */ +svg:not(:root) { + overflow: hidden; } + +/* Grouping content + ========================================================================== */ +/** + * Zero margins for figure. + */ +figure { + margin: 0; } + +/** + * Address differences between Firefox and other browsers. + */ +hr { + box-sizing: content-box; + height: 0; } + +/** + * Contain overflow in all browsers. + */ +pre { + overflow: auto; } + +/** + * Set the global `box-sizing` state to `border-box`. + * + * css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice + * paulirish.com/2012/box-sizing-border-box-ftw + */ +html { + box-sizing: border-box; } + +:host { + /*! Comment to prevent cssmin munging this rule with html above and borking Safari */ + box-sizing: border-box; } + +*, *:before, *:after { + box-sizing: inherit; } + +/** + * A series of helper classes to use arbitrarily. Only use a helper class if an + * element/component doesn’t already have a class to which you could apply this + * styling, e.g. if you need to float `.main-nav` left then add `float:left;` to + * that ruleset as opposed to adding the `.float--left` class to the markup. + * + * A lot of these classes carry `!important` as you will always want them to win + * out over other selectors. + */ +/* Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background-color: transparent; + /** + * Default link colors + */ + /** + * Improve readability when focused and also mouse hovered in all browsers. + */ } + a:link, a:visited { + color: #3e87e8; } + a:hover { + color: #3573c5; } + a:active { + color: #2b5ea2; } + a:active, a:hover { + outline: 0; } + +/** + * Add/remove floats + */ +.float--right { + float: right !important; } + +.float--left { + float: left !important; } + +.float--none { + float: none !important; } + +/** + * Text alignment + */ +.text--left { + text-align: left !important; } + +.text--center { + text-align: center !important; } + +.text--right { + text-align: right !important; } + +/** + * Full height element + */ +.full-height { + height: 100% !important; } + +/** + * Add a help cursor to any element that gives the user extra information on + * `:hover`. + */ +.informative { + cursor: help !important; } + +/** + * Mute an object by reducing its opacity. + */ +.muted { + opacity: 0.5 !important; } + +/** + * Align items to the right where they imply progression/movement forward, e.g.: + * +

Read more...

+ * + */ +.proceed { + text-align: right !important; } + +/** + * Apply capital case to an element (usually a `strong`). + */ +.caps { + text-transform: uppercase !important; } + +/** + * Hide visually and from screen readers: + * http://juicystudio.com/article/screen-readers-display-none.php + */ +.hidden { + display: none !important; + visibility: hidden; } + +/** + * Hide content off-screen without resorting to `display:none;` + */ +.a11y, +.visuallyhidden { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } + +.a11y.focusable:active, .a11y.focusable:focus, +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + position: static; + overflow: visible; + width: auto; + height: auto; + margin: 0; + clip: auto; } + +@media screen and (max-width: 44.9375em) { + .a11y-palm, + .visuallyhidden-palm { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media screen and (min-width: 45em) and (max-width: 63.9375em) { + .a11y-lap, + .visuallyhidden-lap { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media screen and (min-width: 45em) { + .a11y-lap-and-up, + .visuallyhidden-lap-and-up { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media screen and (max-width: 63.9375em) { + .a11y-portable, + .visuallyhidden-portable { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media screen and (min-width: 64em) { + .a11y-desk, + .visuallyhidden-desk { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) { + .a11y-retina, + .visuallyhidden-retina { + position: absolute !important; + overflow: hidden !important; + width: 1px !important; + height: 1px !important; + margin: -1px !important; + border: 0 !important; + padding: 0 !important; + clip: rect(0 0 0 0) !important; } } + +/** + * Hide visually and from screen readers, but maintain layout + */ +.invisible { + visibility: hidden !important; } + +.flex { + display: -ms-flexbox; + display: flex; } + +.inline--flex { + display: -ms-inline-flexbox; + display: inline-flex; } + +.flex--row { + -ms-flex-direction: row; + flex-direction: row; } + +.flex--row--rev { + -ms-flex-direction: row-reverse; + flex-direction: row-reverse; } + +.flex--col { + -ms-flex-direction: column; + flex-direction: column; } + +.flex--col--rev { + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; } + +.flex--nowrap { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; } + +.flex--wrap { + -ms-flex-wrap: wrap; + flex-wrap: wrap; } + +.flex--wrap--rev { + -ms-flex-wrap: wrap-reverse; + flex-wrap: wrap-reverse; } + +.flex--left { + -ms-flex-pack: start; + justify-content: flex-start; } + +.flex--center { + -ms-flex-pack: center; + justify-content: center; } + +.flex--right { + -ms-flex-pack: end; + justify-content: flex-end; } + +.flex--justify { + -ms-flex-pack: justify; + justify-content: space-between; } + +.flex--spaced { + -ms-flex-pack: distribute; + justify-content: space-around; } + +.flex--top { + -ms-flex-align: start; + align-items: flex-start; } + +.flex--middle { + -ms-flex-align: center; + align-items: center; } + +.flex--bottom { + -ms-flex-align: end; + align-items: flex-end; } + +.flex--stretch { + -ms-flex-align: stretch; + align-items: stretch; } + +.flex--baseline { + -ms-flex-align: baseline; + align-items: baseline; } + +.flex--top--multi { + -ms-flex-line-pack: start; + align-content: flex-start; } + +.flex--middle--multi { + -ms-flex-line-pack: center; + align-content: center; } + +.flex--bottom--multi { + -ms-flex-line-pack: end; + align-content: flex-end; } + +.flex--stretch--multi { + -ms-flex-line-pack: stretch; + align-content: stretch; } + +.flex--justify--multi { + -ms-flex-line-pack: justify; + align-content: space-between; } + +.flex--spaced--multi { + -ms-flex-line-pack: distribute; + align-content: space-around; } + +.flex__item { + -ms-flex: 1; + flex: 1; } + +.flex__item--top { + -ms-flex-item-align: start; + align-self: flex-start; } + +.flex__item--middle { + -ms-flex-item-align: center; + align-self: center; } + +.flex__item--bottom { + -ms-flex-item-align: end; + align-self: flex-end; } + +.flex__item--baseline { + -ms-flex-item-align: baseline; + align-self: baseline; } + +.viewport { + width: 100%; + max-width: 80rem; + margin-right: auto; + margin-left: auto; } + +.viewport--full-height { + min-height: 100vh; } + +/*------------------------------------* #CLEARFIX +\*------------------------------------*/ +/** + * Micro clearfix, as per: css-101.org/articles/clearfix/latest-new-clearfix-so-far.php + * Extend the clearfix class with Sass to avoid the `.clearfix` class appearing + * over and over in your markup. + */ +.clearfix:after { + content: ""; + display: table; + clear: both; } + +/** + * Margin and padding helper classes with breakpoint prefixes. Use these to tweak layout on a micro + * level based on viewport widths. + * + * `.u-[breakpoint]-(m|p)(t|r|b|l|h|v)(-|+|0) {}` = utility - breakpoint - margin/padding top/right/bottom/left/horizontal/vertical less/more/none + */ +/** + * Margin and padding helper classes. Use these to tweak layout on a micro + * level. + * + * `.u-(m|p)(t|r|b|l|h|v)(-|+|0) {}` = utility - margin/padding top/right/bottom/left/horizontal/vertical less/more/none + */ +/** + * Margin helper classes. + * + * Add margins. + */ +.u-m { + margin: 1rem !important; } + +.u-mt { + margin-top: 1rem !important; } + +.u-mr { + margin-right: 1rem !important; } + +.u-mb { + margin-bottom: 1rem !important; } + +.u-ml { + margin-left: 1rem !important; } + +.u-mh { + margin-right: 1rem !important; + margin-left: 1rem !important; } + +.u-mv { + margin-top: 1rem !important; + margin-bottom: 1rem !important; } + +/** + * A series of width helper classes that you can use to size things like grid + * systems. Classes can take a fraction-like format (e.g. `.u-2/3`) or a spoken- + * word format (e.g. `.u-2-of-3`). + * + */ +.u-1\/1 { + width: 100% !important; } + +.u-1\/2 { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-1\/3 { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-2\/3 { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-1\/4 { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-2\/4 { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-3\/4 { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-1\/6 { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-2\/6 { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-3\/6 { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-4\/6 { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + +.u-5\/6 { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + +@media screen and (max-width: 47.9375rem) { + .u-1\/1-palm { + width: 100% !important; } + .u-1\/2-palm { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-palm { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-palm { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-palm { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-palm { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-palm { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-palm { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-palm { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-palm { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-palm { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-palm { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (min-width: 48rem) and (max-width: 68.204166667rem) { + .u-1\/1-lap { + width: 100% !important; } + .u-1\/2-lap { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-lap { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-lap { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-lap { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-lap { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-lap { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-lap { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-lap { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-lap { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-lap { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-lap { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (min-width: 48rem) { + .u-1\/1-lap-and-up { + width: 100% !important; } + .u-1\/2-lap-and-up { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-lap-and-up { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-lap-and-up { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-lap-and-up { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-lap-and-up { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-lap-and-up { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-lap-and-up { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-lap-and-up { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-lap-and-up { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-lap-and-up { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-lap-and-up { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (max-width: 68.2rem) { + .u-1\/1-portable { + width: 100% !important; } + .u-1\/2-portable { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-portable { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-portable { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-portable { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-portable { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-portable { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-portable { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-portable { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-portable { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-portable { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-portable { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (min-width: 68.266666667rem) { + .u-1\/1-desk { + width: 100% !important; } + .u-1\/2-desk { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-desk { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-desk { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-desk { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-desk { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-desk { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-desk { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-desk { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-desk { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-desk { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-desk { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media screen and (min-width: 80rem) { + .u-1\/1-desk-wide { + width: 100% !important; } + .u-1\/2-desk-wide { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-desk-wide { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-desk-wide { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-desk-wide { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-desk-wide { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-desk-wide { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-desk-wide { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-desk-wide { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-desk-wide { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-desk-wide { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-desk-wide { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) { + .u-1\/1-retina { + width: 100% !important; } + .u-1\/2-retina { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/3-retina { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/3-retina { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/4-retina { + width: 25% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/4-retina { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/4-retina { + width: 75% !important; + -ms-flex: none !important; + flex: none !important; } + .u-1\/6-retina { + width: 16.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-2\/6-retina { + width: 33.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } + .u-3\/6-retina { + width: 50% !important; + -ms-flex: none !important; + flex: none !important; } + .u-4\/6-retina { + width: 66.6666666667% !important; + -ms-flex: none !important; + flex: none !important; } + .u-5\/6-retina { + width: 83.3333333333% !important; + -ms-flex: none !important; + flex: none !important; } } + +.circle { + border-style: none; + box-shadow: 0.2rem 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.5); } + +.counter { + background-color: #005cb9; + color: white; } diff --git a/demo.html b/demo.html new file mode 100644 index 00000000..6d6463ae --- /dev/null +++ b/demo.html @@ -0,0 +1,89 @@ + + + + + + + px-vis Demo + + + + + + + + + + + + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/favicon.ico @@ -0,0 +1 @@ + diff --git a/index.html b/index.html new file mode 100644 index 00000000..e4c7b726 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + px-vis-timeseries API + + + + + + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 00000000..3380dd51 --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "px-vis-timeseries", + "author": "General Electric", + "description": "A Px component", + "version": "0.0.1", + "private": true, + "extName" : null, + "repository" : + { + "type": "git", + "url": "https://github.com/PredixDev/change-this-in-package.json-please.git" + }, + "homepage": "http://predix.io/", + "devDependencies": { + "grunt": "~v0.4.5", + "grunt-sass": "^v1.0.0", + "grunt-shell": "~v1.1.1", + "grunt-contrib-clean": "~v0.6.0", + "grunt-contrib-jshint": "~v0.10.0", + "grunt-contrib-watch": "~v0.6.1", + "grunt-dep-serve": "git+https://github.com/GeneralElectric/grunt-dep-serve.git#master", + "grunt-autoprefixer": "^3.0.3", + "node-sass-import-once": "^1.2.0", + "grunt-concurrent": "^2.0.1" + } +} diff --git a/px-vis-timeseries.html b/px-vis-timeseries.html new file mode 100644 index 00000000..f9c49c72 --- /dev/null +++ b/px-vis-timeseries.html @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sass/px-vis-timeseries-predix.scss b/sass/px-vis-timeseries-predix.scss new file mode 100644 index 00000000..2a7ef4af --- /dev/null +++ b/sass/px-vis-timeseries-predix.scss @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2014 GE Global Research. All rights reserved. + * + * The copyright to the computer software herein is the property of + * GE Global Research. The software may be used and/or copied only + * with the written permission of GE Global Research or in accordance + * with the terms and conditions stipulated in the agreement/contract + * under which the software has been supplied. + */ + +// +// Sass for the Predix notion of the px-vis-timeseries component +// +// @author +// + +/* +THIS FILE SHOULD CONTAIN ONLY RULES SPECIFIC TO PREDIX BRANDING +common/abstract rules go in px-vis-timeseries-sketch.scss, not in this file. +*/ + +// Settings +@import "px-colors-design/_settings.colors.scss"; + +@import 'px-vis-timeseries-sketch.scss'; + +.circle { + border-style: none; + box-shadow: .2rem .2rem .2rem 0 rgba($black,.5); +} + +.counter { + background-color: $blue; + color: $white; +} diff --git a/sass/px-vis-timeseries-sketch.scss b/sass/px-vis-timeseries-sketch.scss new file mode 100644 index 00000000..51d907fd --- /dev/null +++ b/sass/px-vis-timeseries-sketch.scss @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2014 GE Global Research. All rights reserved. + * + * The copyright to the computer software herein is the property of + * GE Global Research. The software may be used and/or copied only + * with the written permission of GE Global Research or in accordance + * with the terms and conditions stipulated in the agreement/contract + * under which the software has been supplied. + */ + +// +// Sass for the "sketch" notion of the px-vis-timeseries component +// +// @author +// + +/* +THIS FILE SHOULD CONTAIN ONLY ABSTRACT/'SKETCH' THEME RULES, NOT SPECIFIC TO PREDIX BRANDING +Predix branding rules go in px-vis-timeseries-predix.scss, not in this file. +*/ + + + +// Generic +@import "px-normalize-design/_generic.normalize.scss"; +@import "px-box-sizing-design/_generic.box-sizing.scss"; +@import "px-helpers-design/_generic.helpers.scss"; + +// Base +@import "px-flexbox-design/_base.flexbox.scss"; +@import "px-viewport-design/_base.viewport.scss"; + + + +// Trumps +@import "inuit-clearfix/_trumps.clearfix.scss"; +$inuit-enable-margins : true; +$inuit-enable-padding : true; +@import "px-spacing-responsive-design/_trumps.spacing-responsive.scss"; +@import "px-widths-responsive-design/_trumps.widths-responsive.scss"; diff --git a/test/px-vis-timeseries-base-tests.js b/test/px-vis-timeseries-base-tests.js new file mode 100644 index 00000000..b33b753d --- /dev/null +++ b/test/px-vis-timeseries-base-tests.js @@ -0,0 +1,197 @@ +// This will be an automatically-generated variable based on the component +// name provided to the pxtestkit yeoman generator +var px_vis_timeseries_1; + +// This is the bootstrapping function that will run the base and custom tests +// upon the completion of web components construction by Polymer +document.addEventListener("WebComponentsReady", function() { + runBaseTests(); + runCustomTests(); +}); + +// This is a utility/wrapper function for the test() function of +// web-component-tester; the developer can use this to specify tests +// through a configuration object instead of repeatedly writing the test +// case construction and assertion code patterns +/** + * + * testCase(options) : + * Utility wrapper for web-component-tester's test() function to perform the + * most common test cases. Accepts a configuration object that determines + * how test() will be called (e.g., synchronously/asynchronously, event string + * to use, etc). Each call to testCase corresponds to exactly 1 call to test(). + * + * options : test configuration object that accepts the following properties + * + * description : optional + * The description for the test case + * + * root : required + * The innermost HTML node which is ancestor to any and all nodes that are + * involved in the test case. root can be specified either as a CSS selector + * string or an HTMLElement. For the former case, the element located by + * document.querySelector(root) will be used. + * + * eventSource : optional + * The element from which the specified event will be dispatched. eventSource + * can be specified either as a CSS selector string or an HTMLElement. For + * the former case, the element located by root.querySelector(eventSource) + * will be used to dispatch the event from. This means that if eventSource + * was specified as a CSS selector string, the event will be dispatched from + * and element that is a descendant of root. For eventSource specified as + * an HTML element, the event source element can be any element in the DOM, + * and not necessarily a descendant of root. + * + * eventChain: optional + * The eventChain is a collection/array of objects with the following + * structure: { eventSource, eventString, modifyFunction } that are processed + * in sequence by this function (testCase), to provide the simulation of tests + * that involve a series of interactions from the end user. + * At each stage of the series these steps are perfomed: an eventCallback is + * added as an event listener to eventSource for the eventString event, + * modifyFunction is called with rootElement as argument, then an event with + * eventString is dispatched from eventSource. The eventCallback added + * earlier performs the same set of steps for the next stage. If all stages + * (all elements of the eventChain array) have been processed, eventCallback + * finally calls assertFunction instead. + * + * event : optional + * The event string for the event that will be dispatched from event source. + * Specifying the event string will run the test() function asynchronously + * (i.e., callback will have the 'done' parameter used by Mocha in + * asynchronous test cases). + * + * modifyFunction : optional + * A function that will be called before the event is dispatched, for an + * asynchronous test. The developer can use modifyFunction to perform + * anything such as modifying the DOM to set up the test. modifyFunction is + * presently guaranteed to work only synchronously (i.e., no event or timer + * callbacks involved). + * + * assertFunction : + * The assertion function that will used to test the case. This function + * must return true or false. +**/ + +function testCase(options) { + var testDescription, rootElement, eventSource, eventString, eventChain, modifyFunction, assertFunction; + var isAsync = false; + var eventStr, eventSrc, modFn, assertFn; + function _failTest(message) { + test(message, function() { + assert.isTrue(false); + }); + } + if (typeof options === 'object') { + testDescription = options['description'] || 'No test description provided'; + rootElement = options['root'] || document; + eventSource = options['eventSource'] || ''; + eventString = options['event'] || ''; + modifyFunction = options['modifyFunction']; + assertFunction = options['assertFunction'] || function() { return true; }; + eventChain = options['eventChain'] || + [{ 'eventSource': eventSource, 'eventString': eventString, 'modifyFunction': modifyFunction }]; + } + // fail the test if options was not provided + else { + _failTest(testDescription + ' Invalid test spec'); + return; + } + + function _deriveRoot() { + if (typeof rootElement === 'string') { + rootElement = Polymer.dom(document).querySelector(rootElement); + } + } + + // if test is asynchronous (i.e., eventString is non-blank or non-empty eventChain was provided) + if (eventString !== '' || (eventChain instanceof Array && eventChain.length > 0)) { + isAsync = true; + } + // at this point eventSource is guaranteed to be an HTML element + if (isAsync) { + if (eventChain === []) { + eventChain = [{'eventSource': eventSource, 'eventString': eventString, 'modifyFunction': modifyFunction}]; + } + test(testDescription, function(done) { + thisDone = done; + _deriveRoot(); + if (!(rootElement instanceof HTMLElement) && !(rootElement instanceof HTMLDocument)) { + assert.isTrue(false); + done(); + return; + } + + // Add the interactions specified in the eventChain argument: + // The interactions are added in reverse order of event dispatching + // because of the general fact that event listeners are added before + // corresponding events are dispatched. + + // Utility function that uses closure to generate callbacks for each event + // Without closure the test infinite-loops on the 2nd event; + function createCallback(eventSource, eventString, modifyFunction, rootElement) { + return function() { + if (modifyFunction instanceof Function) { + modifyFunction(rootElement); + } + eventSource.dispatchEvent(new Event(eventString)); + }; + } + var assertTest = function() { + flush(function() { + assertFunction(rootElement); + thisDone(); + }); + }; + // TODO: add validation on the eventChain structure and content types + for (var ecLength = eventChain.length, ecIndex = ecLength-1; ecIndex >= 0; ecIndex--) { + eventStr = eventChain[ecIndex].eventString; + eventSrc = document.querySelector(eventChain[ecIndex].eventSource); + if (ecIndex === (ecLength-1)) { + eventSrc.addEventListener(eventStr, assertTest); + } + else { + modFn = eventChain[ecIndex].modifyFunction; + var prevEventSrc = document.querySelector(eventChain[ecIndex+1].eventSource); + var prevEventStr = eventChain[ecIndex+1].eventString; + eventSrc.addEventListener(eventStr, + createCallback( + document.querySelector(eventChain[ecIndex+1].eventSource), + eventChain[ecIndex+1].eventString, + modFn, + rootElement + ) + ); + } + } + eventSrc.dispatchEvent(new Event(eventStr)); + }); + } + else { + test(testDescription, function() { + _deriveRoot(); + if (!(rootElement instanceof HTMLElement) && !(rootElement instanceof HTMLDocument)) { + assert.isTrue(false); + return; + } + assert.isTrue(assertFunction(rootElement)); + }); + } +} + +// Wrapper for base automation tests. This function is automatically +// generated by the pxtestkit yeoman generator +function runBaseTests() { + px_vis_timeseries_1 = document.getElementById('px_vis_timeseries_1'); + + suite('Base Automation Tests for px-vis-timeseries', function() { + + test('Polymer exists', function() { + assert.isTrue(Polymer !== null); + }); + test('px-vis-timeseries fixture is created', function() { + assert.isTrue(document.getElementById('px_vis_timeseries_1') !== null); + }); + + }); +} diff --git a/test/px-vis-timeseries-custom-tests.js b/test/px-vis-timeseries-custom-tests.js new file mode 100644 index 00000000..e7e99847 --- /dev/null +++ b/test/px-vis-timeseries-custom-tests.js @@ -0,0 +1,9 @@ +// This is the wrapper for custom tests, called upon web components ready state +function runCustomTests() { + // Place any setup steps like variable declaration and initialization here + + // This is the placeholder suite to place custom tests in + // Use testCase(options) for a more convenient setup of the test cases + suite('Custom Automation Tests for px-vis-timeseries', function() { + }); +}; diff --git a/test/px-vis-timeseries-test-fixture.html b/test/px-vis-timeseries-test-fixture.html new file mode 100644 index 00000000..085891e9 --- /dev/null +++ b/test/px-vis-timeseries-test-fixture.html @@ -0,0 +1,28 @@ + + + + + + Web Component Test : Fixture for px-vis-timeseries + + + + + + + + + + + + + + + + +

Web Component Test : Fixture for px-vis-timeseries

+ + + diff --git a/wct.conf.js b/wct.conf.js new file mode 100644 index 00000000..d214d28b --- /dev/null +++ b/wct.conf.js @@ -0,0 +1,14 @@ +module.exports = { + verbose: true, + plugins: { + local: { + browsers: ['chrome', 'firefox'] + }, + sauce: { + disabled: true + } + }, + suites: [ + 'test/px-vis-timeseries-test-fixture.html' + ] +};