# 0.0.0-6 6/3/13 6/3/13 dev version with "slider on pipe" faucet control (FaucetNode4) # 0.0.0-5 6/3/13 6/3/13 dev version with "slider on valve" faucet control (FaucetNode3) # 0.0.0-4 6/3/13 6/3/13 dev version with "pinball shooter" faucet control (FaucetNode2) 6/3/13 FaucetNode4: alternate design with slider on pipe 6/3/13 FaucetNode3: alternate design with slider on valve, ala Java version 6/3/13 FaucetNode2: alternate design that uses a pinball shooter 6/3/13 rename FaucetNode1 and related image files, preparing for 2 alternative implementations 5/31/13 migrate ChemUtils to nitroglycerin.ChemUtils 5/31/13 migrate ColorUtils.interpolateRGBA to scenery.Color 5/31/13 migrate StringUtils to phetcommon.util 5/30/13 create solutions array using [] instead of new Array() 5/30/13 varargs implementation of StringUtil.format 5/29/13 replace DebugOriginNode with scenery.Circle # 0.0.0-3 5/28/13 5/28/13 {resize: false} for control panels that shouldn't resize 5/28/13 workaround for layout of invisible SaturatedIndicator, due to change in semantics of scenery bounds 5/24/13 migrate ComboBox from beers-law-lab to sun 5/24/13 remove ComboBoxItem from ComboBox API, document the "item" contract 5/23/13 rename BLLStrings.fixed to BLLStrings.preset 5/21/13 generalize DebugOriginNode 5/21/13 remove uses of Color.toCSS in Beam and ConcentrationSlider 5/21/13 resize wavelength control panel when slider is shown/hidden 5/21/13 delete questionable tags that were supposedly for mobile Safari cache busting 5/21/13 remove lib/font-awesome, not used 5/20/13 scrub my email address from source files 5/20/13 temporarily restore CSS to remove browser window margins, should be handled by joist#6 5/20/13 ComboBoxNode: add "click to dismiss" feature, by attaching a 'down' listener to the scene 5/20/13 remove lousy solution for dragging the dropper by its button, investigate other approaches 5/20/13 ComboBoxNode: support for listParent (and coordinate-frame transforms this requires) so that combo box list is always on top 5/20/13 remove Color.toCSS calls from places where a Color is supported 5/20/13 remove Font.toCSS calls from places where a Font is supported 5/15/13 encapsulate fonts in BLLFont, use scenery.Font, provide a fallback family and limited options (size and weight) 5/15/13 switch from beers-law-lab.Color to scenery.Color (major change) 5/15/13 JSDoc parameters and return types 5/15/13 use "_" prefix for methods that are not intended to be part of public interface 5/15/13 review TODO items in code, delete some that have been done # 0.0.0-2 5/14/13 5/14/13 event batching added to joist.Sim, resolves lag time when dragging text 5/14/13 make AT detector radio buttons smaller until we get a bigger graphic 5/14/13 remove "Node" suffix from type names that are UI components or clearly have no analogous model element 5/14/13 fixed scenery#38 with JO (combo box popup works every other time) 5/14/13 fix: orientation of shaker node was being set in degrees, should use radians 5/14/13 fix: shaker particle go up, incorrect shaker orientation set incorrect initial velocity 5/14/13 replace ControlPanelNode with sun.PanelNode 5/14/13 move ruler to front, so it won't get lost behind things 5/14/13 move Solute control panel to the right a bit, so it doesn't interfere with shaker 5/14/13 move ruler down and left a tad 5/14/13 make wavelength slider thumbs bigger so it's easier to grab on tablets 5/14/13 make ruler taller so that it's more tablet-friendly 5/14/13 increase default size of radio buttons to work better on tablets 5/14/13 add a "hit area" to radio buttons, so we don't have a dead spot between button and node 5/14/13 make evaporation and concentration slider thumbs bigger so that they are easier to grab on tablets 5/14/13 scenery.DOMLayer fixed so that HTML text doesn't wrap 5/14/13 scenery.Text boundsMethod was changed to "fastCanvas", resulting in fewer layers, and able to run nicely on iPad # 0.0.0-1 5/13/13 5/13/13 increase performance of wavelength spectrum image by drawing it directly to a canvas 5/10/13 replace build.config with package.json 5/10/13 move Gruntfile.js and build.sh to chipper 5/8/13 make Gruntfile independent of sim project by reading project name from package.json 5/8/13 build.sh 5/8/13 set up Grunt.js and package.json 5/8/13 use a single listener instance for all items in combo box list 5/8/13 replace "new Array()" with "[]" to appease Crockford disciples 5/8/13 fix various jshint warnings 5/7/13 == to === throughout 5/7/13 fix equilateral triangles in slider buttons 5/7/13 add up/down glyph to combo box button 5/7/13 add fill highlighting to ComboBoxNode 5/7/13 delete list alignment feature from ComboBoxNode, "left" is sufficient 5/7/13 format all BLL code again with correct PhetStyle.xml (after restarting IDEA) 5/7/13 install latest PhetStyle.xml and format all BLL code 5/6/13 align baselines of labels and values 5/6/13 add optional label to left of combo box 5/6/13 get rid of SolutionChoiceNode, fold into SolutionControlNode 5/6/13 delete vestigial CSS related to bootstrap UI components 5/6/13 switch from RequireJS.images to jQuery.imagesLoaded for loading images 5/6/13 prevent dropper from being dragged by on/off button 5/6/13 add support for list alignment to combo box 5/6/13 add ComboBoxItem combo box, eliminate "selectedItem" delegate property, push boilerplate code into ComboBoxNode 5/6/13 add color chips to Solute and Solution combo boxes 5/6/13 fix default assignment of BeersLawSolution.saturatedColor 5/6/13 handle reset for Solution combo box 5/6/13 handle reset for Solute combo box 5/6/13 move wavelength value display from slider to control panel 5/6/13 add increment/decrement buttons to concentration slider, rewire when solution changes 5/6/13 use left/right arrows instead of +/- buttons for wavelength slider 5/6/13 move concentration value between label and slider 5/6/13 concentration slider: move ticks above track 5/6/13 evaporation slider: move ticks above track, make knob point up 5/6/13 change "fixed" to "preset" in wavelength control panel 5/6/13 fix shaker rotation angle 5/1/13 ******* FEATURE COMPLETE ******** 5/1/13 delete bootstrap from beers-law-lab, no longer used 5/1/13 replace bootstrap with ComboBoxNode in implementation of solute combo box 5/1/13 display correct format of solution names in combo box 5/1/13 add remaining solution types to "Beer's Law" model 5/1/13 wire up combo box for selecting solution 5/1/13 primitive combo box 5/1/13 delete assertion-disabling code from config.js 5/1/13 adjust ruler drag bounds 5/1/13 make ticks and label larger on evaporation slider 5/1/13 make ticks and thumb larger on concentration slider 5/1/13 add highlighting to evaporation slider thumb 5/1/13 made cuvette drag handle 50% larger 5/1/13 vertically flip AT detector body, so that value display is at the top 5/1/13 change connection points and control points for AT detector, so that body can be in upper-right of play area 5/1/13 move things around in "Beer's Law" tab to correspond to layout in design doc 4/30/13 fix initial location of concentration slider thumb 4/30/13 update numeric value in concentration control panel, rewire observer when solution changes 4/30/13 completed port of concentration slider 4/30/13 add track with linear gradient to concentration slider 4/30/13 stubs for solution and concentration controls 4/30/13 use _.isUndefined 4/30/13 slightly better +/- buttons for sliders 4/30/13 use double quotes consistently 4/30/13 fix layout of dropper label, increase font size 4/30/13 add query-parameters.js and check-assertions.js to html file 4/30/13 migrate RulerNode to scenery-phet 4/30/13 complete port of Java RulerNode 4/30/13 replace DOMText with Text and HTMLText, as appropriate 4/30/13 placeholder for ruler node 4/30/13 use scenery's coordinate-frame transform methods in input listeners 4/30/13 handle click offset for thumb in wavelength slider and evaporation slider 4/30/13 add option to clamp value to range for LinearFunction 4/29/13 add + and - buttons to wavelength slider 4/29/13 fully-functional wavelength slider 4/29/13 first pass at wavelength slider 4/29/13 rename RadioButtonNode to RadioButton, add options and doc 4/29/13 use scenery-phet.ResetAllButton 4/29/13 replace "Remove Solute" button with sun.Button 4/29/13 tweak layout of text in concentration meter and AT detector 4/29/13 replace bootstrap radio buttons with RadioButtonNode ("solid" and "solution") 4/29/13 generalize RadioButtonNode to use a Node instead of text string 4/25/13 attempt to resize wavelength control panel as slider is show/hidden 4/25/13 first pass at wavelength control panel, with stub for wavelength slider 4/25/13 fix wires that connect probe to meters (this was apparently not generalized in the Java sim for good reason) 4/25/13 add radio buttons to AT detector, for selecting mode 4/25/13 implemented basic radio button 4/25/13 display value in AT detector 4/25/13 pickable=false for solution in cuvette, because AT detector probe goes behind it 4/25/13 add "Saturated" indicator to Concentration tab 4/25/13 fix transparency of solution in cuvette 4/25/13 fix positioning of AT detector probe 4/25/13 use DOMText node in DropperNode 4/25/13 use identify mvt in Concentration tab 4/25/13 adjust how faucet pipe length is computed, in model and view 4/25/13 correct some mvt errors in Concentration tab, by testing with non-identify mvt 4/25/13 switch to ModelViewTransform2 4/25/13 create temporary DOMText node, for use until Text node supports HTML 4/24/13 generalize WireNode, for use in both concentration meter and AT detector 4/24/13 partial port of ATDetectorNode 4/24/13 handle 'up' in FillHighlighter by attaching a listener to 'down' pointer (yuck) 4/23/13 reposition "Reset All" button 4/23/13 default to "Beer's Law" tab for development 4/23/13 fix beam gradient 4/23/13 fix positioning of light 4/23/13 first pass at port of BeamNode, some bugs 4/23/13 add double-headed arrow drag handle to cuvette 4/23/13 add cuvette drag handler 4/23/13 port CuvetteNode, no resize behavior yet 4/23/13 add toggle button to light 4/23/13 port LightNode 4/23/13 add missing license.txt entries for images 4/23/13 move contrib/ to lib/ 4/23/13 delete tpl.js, this sim no longer uses templates 4/23/13 delete stuff associated with PerformanceMonitor 4/23/13 validate various function args using assert 4/23/13 load strings once, in BLLStrings 4/23/13 compute fill color for Beam using scenery.LinearGradient 4/23/13 use scenery/Rectangle instead of Kite/Shape.rect for particles, to improve performance 4/23/13 add has.js to contrib/ and html, disable assertions in config.js 4/22/13 ported parts of VisibleColor needed by this sim 4/22/13 changed "module" to "tab" throughout, to use joist terminology 4/22/13 Sim framework moved to joist 4/19/13 remove "scene" div, it is automatically created by Sim.js with proper CSS 4/19/13 add temp icons for modules 4/19/13 rework module and view in order to use scenery-phet/Sim framework 4/17/13 partial port of beam model (need to port VisibleColor and figure out gradient paint) 4/17/13 port of absorbance/transmittance detector 4/17/13 port of absorbance model 4/17/13 ported most of model for Beer's Law module, loads with require.js, instantiates without errors, but untested 4/17/13 added modules (in the PhET sim sense), created skeleton for "Beer's Law" module 4/16/13 call invalidateDOM when changing value in concentration meter, so that DOM node bounds are correct 4/16/13 use a non-empty in html file 4/16/13 concentration meter workaround for scenery#16 (poor Text node performance) 3/27/13 fix dropper so that it changes color to match solute 3/27/13 left-justify radio buttons under solute dropdown 3/27/13 center radio buttons under solute dropdown 3/27/13 used fixed-width button for solute dropdown menu 3/27/13 put label and caret on one button for solute dropdown menu, this is the bootstrap "style" 3/27/13 allow user to click either button or caret to get dropdown menu 3/27/13 wire up selection of solute from dropdown, make notes about what isn't working 3/26/13 alphabetize imports 3/26/13 rewrite polyfill for requestAnimationFrame 3/26/13 switch from phetcommon.util.Inheritance to phet-core.inherit and phet-core.callSuper 3/26/13 delete Rectangle, replace with dot.Bounds2 3/26/13 switch from phetcommon.MathUtil to dot.Util 3/26/13 use renderer:'svg' for solute control panel, so it doesn't block events to other DOM elements in the scene 3/26/13 add SoluteControlsNode last, so that other DOM nodes get events. 3/26/13 add selection handler to solute dropdown, only does console.log 3/26/13 solute dropdown pops up, but no selection yet 3/26/13 include bootstap.js in html instead of config.js, so that bootstrap-dropdown.js plugin works 3/25/13 first attempt at using a bootstrap dropdown for choosing solute 3/25/13 put solute controls in a control panel (SoluteControlsNode) 3/25/13 fix reset for shaker and dropper 3/25/13 "use strict"; 3/25/13 use 'var thisNode = this' consistently 3/25/13 move window resize handler to ConcentrationView, use inheritance for scene subtype 3/25/13 change to radio buttons for solid/solution control 3/25/13 make dropper initially invisible, add visible arg to dropper and shaker constructors 3/25/13 make slider knob wider 3/25/13 rename EvaporatorNode 3/25/12 specify a font for ButtonNode 3/25/13 demonstrate using custom icons with bootstrap 3/25/13 use class instead of tag when changing check box icon, so that additional icons can be supported 3/25/13 test commit from IDEA 3/25/13 test commit from command line 3/24/13 enabled setVisible calls in DropperNode and ShakerNode 3/24/13 added PHET_CORE 3/20/13 generalize ControlPanelNode 3/20/13 evaporation control tweaks, general slider tweaks 3/20/13 create a control panel for evaporation, ala java sim 3/20/13 adjust layout of controls to match java sim 3/20/13 first pass at horizontal slider with tick marks, wired up to control evaporation rate 3/20/13 add CSS styling for font and spacing of buttons and check boxes 3/20/13 fix reset of solution color 3/20/13 delete reset all button from html file 3/20/13 flesh out CheckBoxNode to handle property and icon changes 3/20/13 delete enum SoluteForm and model.soluteForm, unnecessary 3/20/13 add contrib/font-awesome-3.0.2/ 3/19/13 add debug output for setVisible problem in ShakerNode and DropperNode 3/19/13 wire up Solid and Solution buttons 3/19/13 add bootstrap controls for switching between shaker and dropper (not wired up, not correct look) 3/19/13 add DOM controls to scenegraph last, so that they are not obscured by canvas-based nodes and receive DOM event 3/19/13 changes for breaking changes in scenery 3/19/13 delete window.phetcommon.locale in config.js, it's invalid JSON and causes grunt failure 3/18/13 add some button nodes that combine bootstrap+dom+scenery (not working yet) 3/18/13 remove all particles when the solute amount goes to zero 3/18/13 add missing mvts to Concentration nodes 3/18/13 add wire that connects probe to meter 3/18/13 add probe to concentration meter 3/18/13 use same bit-depth and ColorSync profile for all concentration meter images (didn't fix color issue) 3/18/13 fix in HorizontalTiledNode 3/18/13 rework text layout for shaker and concentration meter 3/17/13 add text to concentration meter 3/14/13 change location of performance monitor 3/14/13 first pass at concentration meter, only the body is rendered 3/14/13 port of HorizontalTiledNode from piccolo-phet, for use in concentration meter 3/14/13 fix stroke color of solution in beaker 3/14/13 reorganize observer function in ConcentrationSolution 3/14/13 add Color.toString 3/14/13 add bootstrap dependency 3/14/13 switch to lodash 3/14/13 add <div> for Reset All button 3/13/13 fix label on dropper 3/13/13 first pass at StockSolutionNode, not rendering 3/13/13 bug fix in Color.interpolateRBGA 3/13/13 port MomentaryButtonNode from piccolo-phet, add to DropperNode 3/13/13 partial implementation of DropperNode 3/13/13 add precipitate view, bug fixes 3/13/13 bug fixes in model, for array methods that didn't port directly 3/13/13 convert common to CommonJS-style imports 3/13/13 convert concentration.model to CommonJS-style imports 3/13/13 convert concentration.view to CommonJS-style imports 3/13/13 try CommonJS-style imports in BeakerNode 3/13/13 add shaker particles to view 3/13/13 **** concentration model fully ported ****** 3/13/13 fix derived properties in ConcentrationSolution 3/12/13 add '_' prefix to private methods in particle model 3/12/13 wire up shaker particles in concentration model 3/12/13 port shaker particles model 3/12/13 port precipitate model 3/12/13 add '_' prefix to private methods in concentration model 3/12/13 port Concentration Meter model 3/12/13 port Evaporator model 3/12/13 port Evaporator model 3/12/13 port time-based portion of concentration model (untested) 3/12/13 port property listeners that are internal to concentration model 3/12/13 drop "Property" suffix from all vars of type Property 3/12/13 add dropper model element, flesh out some of concentration model 3/12/13 create instances of all solute types 3/12/13 display solution in beaker 3/12/13 add basic scaling of the scene on browser window resize 3/12/13 add missing semicolons throughout 3/12/13 turn off faucet when it's disabled 3/12/13 modifications for kite change: Shape.rect(upperleft,lowerright) -> Shape.rect(x,y,width,height) 3/12/13 modifications for scenery change: Finger -> Pointer 3/12/13 implement faucet fluid geometry 3/12/13 set faucet flow to zero when handle is released 3/12/13 rename top-level files to beers-law-lab 3/11/13 faucet handle drag handler working 3/11/13 added dependency on kite, change imports for things that moved from scenery to kite 3/11/13 more partial work on faucet handler drag handler 3/11/13 "use strict" 3/8/13 more partial work on faucet handler drag handler, getting closer 3/8/13 partial work on faucet handler drag handler, not working yet 3/7/13 rotate faucet handle in pivot 3/7/13 adjust imports for new locations of scenery/js/shapes/Shape 3/6/13 add css to hide top and left margin in browser window 3/6/13 delete phetcommon type (Dimension2D, Vector2D, Point2D), use dot type (Dimension2 and Vector2) 3/6/13 ignore scenery submodules, checkout dependencies as sibling repos 3/6/13 initial layout of faucet images 3/5/13 automate subscripting in molecule formulas (port of ChemUtils.toSubscript) 3/5/13 use css to style shaker label DOM node 3/5/13 ***** end port from Easel to Scenery ***** 3/5/13 generalize drag handler for Movables 3/5/13 create DOM element programmatically for shaker label, update html dynamically, bounds are fubar 3/5/13 add drag bounds to shaker 3/5/13 polyfill for requestAnimationFrame 3/5/13 basic dragging with model-view roundtrip for shaker 3/5/13 use "round" cap and join, now supported by scenery 3/5/13 incremental step towards porting MovableDragHandler to scenery 3/5/13 StringUtils.format for Java-like MessageFormat 3/4/13 set pointer cursor on shaker 3/4/13 adjust imports for SCENERY/nodes/Node 3/4/13 add stub drag handler to ShakerNode 3/4/13 remove Easel from Color 3/4/13 port BeakerNode to scenery 3/4/13 set background color, add stub for window resize handler 3/4/13 port FaucetFluidNode to scenery 3/4/13 fix rotation of shaker 3/4/13 make local copies of libs required by phetcommon, so I can ignore its submodules 3/4/13 port FaucetNode to scenery 3/4/13 add PerformanceMonitor 3/4/13 add animation loop 3/4/13 fix imports of Inheritance to point to new location in phetcommon 3/4/13 bail on submodules for common code, use sibling repositories in IDEA workspace 3/4/13 partial port to Scenery 3/4/13 ***** begin port from Easel to Scenery ***** 2/28/13 added phetLocale for reading the locale from URL query parameters 2/28/13 test i18n local config 2/28/13 replace i18n fork with official release i18n-2.0.2.js 2/19/13 upgrade from requirejs 2.1.2 to 2.1.4 2/19/13 fix in MoveableDragHandler 2/19/13 upgrade from jquery 1.8.3 to 1.9.1 2/19/13 upgraded to Easel 0.6.0 (couldn't find non-minified version) 2/19/13 use double quotes for requirejs import strings 2/19/13 use Inheritance.callSuper to chain reset calls to supertypes 2/19/13 move Fluid to common/model/ 2/19/13 add view of fluid coming out of faucet (FaucetFluidNode) 2/19/13 add solution model (ConcentrationSolution) 2/19/13 add fluid model (Fluid) and subtype solvent and solution models 2/19/13 add Faucet model and image files 2/15/13 change submodule urls to https so they are not read-only 2/15/13 rename top-level "concentration" files to "beers-law-lab" 2/15/13 delete files for 2nd tab until approach stabilizes 2/11/13 fix requirejs imports in concentration/model/ and concentration/view, sim runs 2/11/13 create contrib directory with copies of libs 2/11/13 delete jquery-mobile from top-level hmtl 2/11/13 reformat to use 2-space indentation 2/11/13 fix config.js and requirejs imports to use uppercase for symbolic constants 2/11/13 ***** moved this project from Unfuddle SVN to GitHub, lost all commit history before here, does not run ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1/30/13 port particle models (untested) 1/30/13 drag handler for shaker, with constrained bounds 1/30/13 rotate and label shaker 1/30/13 add DebugOriginNode for debugging origins 1/30/13 set up model-view transforms to match Java implementation 1/30/13 rename FrameRateDisplay to FrameRateNode 1/30/13 add shaker node 1/30/13 add model types for rgba color, rectangle, solute, solute colorscheme 1/30/13 implement important bits of Java's MessageFormat for i18n using patterns 1/30/13 add tick marks to BeakerNode 1/28/13 add BeakerNode (no ticks yet) 1/28/13 i18n of titles 1/28/13 ported a few model classes from Java to JS 1/28/13 set up project skeleton