├── archive ├── settingsPage │ ├── font.png │ ├── settingsLarge.png │ ├── settingsPage.png │ ├── settingsSmall.png │ └── README.md ├── KeyboardRefresh │ ├── scaling.png │ ├── accessibility.png │ ├── converterAfter.png │ ├── converterBefore.png │ ├── graphingAfter.png │ ├── needsGlyphKey.png │ ├── operatorPanel.png │ ├── programmerAfter.png │ ├── scientificAfter.png │ ├── standardAfter.png │ ├── standardBefore.png │ ├── graphingAnnotated.png │ ├── programmerBefore.png │ ├── scientificBefore.png │ ├── standardAnnotated.png │ ├── converterAnnotated.png │ ├── miniProofOfConcept.png │ ├── programmerAnnotated.png │ ├── scientificAnnotated.png │ ├── operatorPanelAnnotated.png │ ├── operatorPanelShiftOptions.png │ ├── operatorPanelTrigAnnotated.png │ ├── operatorPanelBitwiseAnnotated.png │ ├── operatorPanelFunctionsAnnotated.png │ ├── operatorPanelInequalitiesAnnotated.png │ └── README.md ├── README.md ├── Always-on-top │ ├── imgs │ │ ├── figure_1.png │ │ ├── figure_2.png │ │ ├── figure_3.png │ │ ├── figure_4.png │ │ ├── figure_5.png │ │ ├── figure_6.png │ │ ├── figure_7.png │ │ ├── enter_AoT_icon.png │ │ └── exit_AoT_icon.png │ └── README.md ├── GraphingMode │ ├── images │ │ ├── graphOptions.png │ │ ├── graphingAfter.png │ │ ├── mathMLSample.png │ │ ├── graphingAnnotated.png │ │ ├── graphingAreaClean.png │ │ ├── equationInputSample.png │ │ └── equationInputStates.png │ ├── Keyboard.md │ ├── EquationInputArea.md │ ├── GraphingArea.md │ └── README.md └── diagnosticData │ └── README.md ├── active └── README.md ├── CODE_OF_CONDUCT.md ├── .github └── pull_request_template.md ├── LICENSE-CODE ├── SECURITY.md ├── spec_template.md ├── README.md ├── .gitignore └── LICENSE /archive/settingsPage/font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/settingsPage/font.png -------------------------------------------------------------------------------- /active/README.md: -------------------------------------------------------------------------------- 1 | This directory contains spec documents for features that are under active development in Windows Calculator. 2 | -------------------------------------------------------------------------------- /archive/KeyboardRefresh/scaling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/scaling.png -------------------------------------------------------------------------------- /archive/README.md: -------------------------------------------------------------------------------- 1 | This directory contains archived spec documents for features that have already shipped in Windows Calculator. 2 | -------------------------------------------------------------------------------- /archive/settingsPage/settingsLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/settingsPage/settingsLarge.png -------------------------------------------------------------------------------- /archive/settingsPage/settingsPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/settingsPage/settingsPage.png -------------------------------------------------------------------------------- /archive/settingsPage/settingsSmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/settingsPage/settingsSmall.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/figure_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/figure_1.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/figure_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/figure_2.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/figure_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/figure_3.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/figure_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/figure_4.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/figure_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/figure_5.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/figure_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/figure_6.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/figure_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/figure_7.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/accessibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/accessibility.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/converterAfter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/converterAfter.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/converterBefore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/converterBefore.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/graphingAfter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/graphingAfter.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/needsGlyphKey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/needsGlyphKey.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/operatorPanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/operatorPanel.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/programmerAfter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/programmerAfter.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/scientificAfter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/scientificAfter.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/standardAfter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/standardAfter.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/standardBefore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/standardBefore.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/enter_AoT_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/enter_AoT_icon.png -------------------------------------------------------------------------------- /archive/Always-on-top/imgs/exit_AoT_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/Always-on-top/imgs/exit_AoT_icon.png -------------------------------------------------------------------------------- /archive/GraphingMode/images/graphOptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/GraphingMode/images/graphOptions.png -------------------------------------------------------------------------------- /archive/GraphingMode/images/graphingAfter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/GraphingMode/images/graphingAfter.png -------------------------------------------------------------------------------- /archive/GraphingMode/images/mathMLSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/GraphingMode/images/mathMLSample.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/graphingAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/graphingAnnotated.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/programmerBefore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/programmerBefore.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/scientificBefore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/scientificBefore.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/standardAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/standardAnnotated.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/converterAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/converterAnnotated.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/miniProofOfConcept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/miniProofOfConcept.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/programmerAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/programmerAnnotated.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/scientificAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/scientificAnnotated.png -------------------------------------------------------------------------------- /archive/GraphingMode/images/graphingAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/GraphingMode/images/graphingAnnotated.png -------------------------------------------------------------------------------- /archive/GraphingMode/images/graphingAreaClean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/GraphingMode/images/graphingAreaClean.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/operatorPanelAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/operatorPanelAnnotated.png -------------------------------------------------------------------------------- /archive/GraphingMode/images/equationInputSample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/GraphingMode/images/equationInputSample.png -------------------------------------------------------------------------------- /archive/GraphingMode/images/equationInputStates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/GraphingMode/images/equationInputStates.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/operatorPanelShiftOptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/operatorPanelShiftOptions.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/operatorPanelTrigAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/operatorPanelTrigAnnotated.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/operatorPanelBitwiseAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/operatorPanelBitwiseAnnotated.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/operatorPanelFunctionsAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/operatorPanelFunctionsAnnotated.png -------------------------------------------------------------------------------- /archive/KeyboardRefresh/operatorPanelInequalitiesAnnotated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/microsoft/calculator-specs/HEAD/archive/KeyboardRefresh/operatorPanelInequalitiesAnnotated.png -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 5 | or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or 6 | comments. 7 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 10 | 11 | ### [UPDATE YOUR FEATURE TITLE HERE] 12 | 13 | **Feature Pitch Link:** Microsoft/calculator# 14 | 17 | -------------------------------------------------------------------------------- /LICENSE-CODE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) Microsoft Corporation 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 5 | associated documentation files (the "Software"), to deal in the Software without restriction, 6 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 8 | subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all copies or substantial 11 | portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 14 | NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 15 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 16 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 17 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /archive/GraphingMode/Keyboard.md: -------------------------------------------------------------------------------- 1 | ## Keyboard 2 | 3 | Graphing Keyboard is copied here for reference, but full details are captured by microsoft/calculator#428 4 | 5 | #### Graphing Keyboard Layout 6 | 7 | | ![Graphing Calculator](./images/graphingAfter.png) | ![Graphing Calculator Annotated Changes](./images/graphingAnnotated.png) | 8 | | :------------------------------------------------: | :----------------------------------------------------------: | 9 | | After | Annotated | 10 | 11 | **Orange Region - Operator Groups** 12 | 13 | * Graphing has following overflow operator groups 14 | * Trig (same as Scientific) 15 | * Inequalities (=, <, <=, >, >=) 16 | * Functions (floor, ceil, and abs) 17 | * See overflow panel slide for more details 18 | 19 | **Red Region - Variables** 20 | * X and Y are special variables exposed top-level 21 | 22 | **Green Region - Equals and Submit** 23 | * In graphing mode, the equals button means something else, so the “submit” button is replaced with a submit/enter button to plot the equation in bottom-right corner 24 | * The “=“ button is exposed top-level (also included in variables operator overflow group) 25 | 26 | **Black Region - Mode-specific** 27 | * Space not used by common keyboard components are reserved for mode-specific buttons 28 | * Like operators are grouped together, when possible -------------------------------------------------------------------------------- /archive/settingsPage/README.md: -------------------------------------------------------------------------------- 1 | ## Add Settings Page to Windows Calculator 2 | 3 | Feature Pitch Link: https://github.com/microsoft/calculator/issues/596 4 | 5 | ### Problem Statement 6 | Calculator currently does not have a settings page, which will block future work. The current about dialog is also inconsistent with many other Microsoft apps. 7 | 8 | ### Evidence or User Insights 9 | Many suggested features have suggested adding options in settings (see feature pitch link for details). Without a Settings Page, we are blocked from moving forward with some of these features. 10 | 11 | ### Proposal 12 | Replace the current "About" dialog with a Settings page consistent with other Microsoft applications and add app theme option as initial setting. 13 | 14 | ### Goals 15 | * Replace current about dialog with settings page 16 | * Be consistent with settings UX patterns established in other Microsoft apps 17 | * Add basic theme selection option common across many other apps 18 | 19 | ### Non-Goals 20 | * Add any additional options at this time. 21 | 22 | ### Feature Requirements 23 | * Users can navigate to a new Settings page that takes up the full view. 24 | * Users can set the current app theme. 25 | * Users can review information about the app (e.g., version number, terms, etc.) 26 | 27 | ### Feature Details and High-Fidelity Concept 28 | ![Figure 1: Settings page flow)](./settingsPage.png) 29 | 30 | The "About" dialog entry point should be replaced with one for the new settings page. The icon is already included as part of the Calculator font: 31 | 32 | ![Figure 2: Settings gear font icon)](./font.png) 33 | 34 | The new "App theme" setting should be set to "Use system setting" by default and should persist accross app sessions when updated by the user. 35 | 36 | The "About this app" section can be adapted from the existing about dialog code and leverage the same format strings and URLs (except updating "About" to "About this app"). 37 | 38 | #### Design Details 39 | 40 | ![Figure 3: Settings page on small layouts)](./settingsSmall.png) 41 | ![Figure 4: Settings page on large layouts)](./settingsLarge.png) 42 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). 40 | 41 | 42 | -------------------------------------------------------------------------------- /spec_template.md: -------------------------------------------------------------------------------- 1 | > See comments in Markdown for tips on how to use this spec template 2 | ### YOUR FEATURE TITLE 3 | 4 | 5 | ### Feature Pitch Link 6 | https://github.com/Microsoft/calculator/Issues/ 7 | 10 | 11 | ### Problem Statement 12 | 17 | 18 | ### Evidence or User Insights 19 | 24 | 25 | ### Proposal 26 | 31 | 32 | ### Goals and Non-Goals 33 | 38 | 39 | 43 | 44 | ### Success Criteria 45 | 49 | 50 | ### Feature Requirements 51 | 56 | 57 | ### Feature Details and High-Fidelity Concept 58 | 65 | 66 | ### Appendix 67 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /archive/GraphingMode/EquationInputArea.md: -------------------------------------------------------------------------------- 1 | ## Equation Input Area 2 | 3 | The equation inptu area is comprised of: 4 | 5 | - A list of equation input boxes, each of which supports 6 | - Ability to input/edit a math equation 7 | - Ability to toggle visibility of the equation 8 | - Ability to analzye the equation for key graph features (e.g., zeroes, intercepts, etc.) 9 | - Ability to customize the style of the line 10 | - Ability to delete the equation from the list 11 | - A list of global variables that have been used in equations that can be manipulated live to understand how changes impact plots 12 | - A button to add a new equation to the list 13 | 14 | ![Equation Input Area](./images/equationInputSample.png) 15 | 16 | > Note: Style options in comp are slightly out-of-date; see below for more details. 17 | 18 | #### Equation Input Area Requirements 19 | 20 | ##### 1) User can enter an equation with 1 or 2 variables (x, y) 21 | 22 | An equation is an expression through an equality (e.g., =) between the two algebraic quantities or a set of quantity. We will officially support the following equation types at launch: 23 | 24 | * Linear 25 | * Quadratic 26 | * Polynomial 27 | * Trigonometric 28 | * Radical 29 | * Exponential 30 | * Inequality 31 | * Conics/circles 32 | 33 | ##### 2) Equations are displayed in rich MathML styling format 34 | 35 | Mathematical Markup Language (MathML) is a low-level specification for mathematical and scientific content on the Web and beyond ([source](https://www.w3.org/Math/)). MathML or "pretty math" ensures that we are rendering math expressions in the same way that you might write the equation on a whiteboard. 36 | 37 | In other calculator modes, we currently render _linear_ input. If we did this in graphing mode, expressions would be represented like this: 38 | 39 | x ^ 2 + √(2x) 40 | 41 | instead of this: 42 | 43 | ![MathML Sample](./images/mathMLSample.png) 44 | 45 | ##### 3) Users can input their equations with freeform input 46 | 47 | In other calculator modes, when you input an expression, you are comitting previous input with each operator, which means that you cannot easily edit or undo what you have already comitted. We also have a key mapping such that keyboard keys are mapped to specific button inputs. This means that to enter "cos()", you actually press o. This is unintuitive and makes entering equations difficult. 48 | 49 | For graphing mode, we will support freeform input, which means that users can place the cursor anywhere inside of an equation input box to edit the expression. This also means that users can type or paste in "cos(x)", which feels natural, as this is how you would write this expression up on a whiteboard. 50 | 51 | ##### 4) User can toggle the visibility of an equation 52 | 53 | ##### 5) Users can change the color and style of equation lines 54 | 55 | ##### 6) Users can manipulate a variable within an equation to see the effect it has on the graph 56 | 57 | #### Detailed Visual States 58 | 59 | > TODO: Annotate visual states 60 | 61 | ![Equation Input States](./images/equationInputStates.png) 62 | -------------------------------------------------------------------------------- /archive/GraphingMode/GraphingArea.md: -------------------------------------------------------------------------------- 1 | ## Graphing Area 2 | 3 | The graphing area is comprised of: 4 | 5 | * Graphing engine output, which renders equation plots 6 | * Button grouping in the bottom-right corner to allow for manipulation of graph surface: 7 | * Zoom in/out 8 | * Reset to best view 9 | * Button group in the top-right corner which surfaces the following functionality: 10 | * Enter/exit active tracing 11 | * Global graph settings (e.g., specify x-min/x-max) 12 | * Share 13 | 14 | ![Graphing Area](./images/graphingAreaClean.png) 15 | 16 | > Note: Graph styling in comp is slightly out-of-date; tick mark values should appear along each axis instead of along the border. Also, degrees and radians buttons should be swapped. 17 | 18 | #### Graphing Area Requirements 19 | 20 | ##### 1) User can change the viewing window by dragging and zooming the graphing area 21 | 22 | The graphing surface viewing area can be manipulated by users with pointer input, similar to exploring a map. This includes support for panning and zooming gestures and pointer interactions: 23 | 24 | * **Panning**: Users can click or tap and drag to pan the graphing surface. 25 | * **Zooming**: Users can pinch-to-zoom (touch) or use the scroll wheel (mouse) to zoom in and out of the the graphing surface. 26 | 27 | > Open Question: Should we support keyboard shortcuts (e.g., "Ctrl + Plus" to zoom in, arrow keys to pan, etc.) 28 | 29 | ##### 2) User can zoom the viewing window via onscreen buttons 30 | 31 | For a more accessible experience, we will support on-screen zoom buttons for improved keyboard input. 32 | 33 | > Note: Final font glyph assets for zoom buttons are subject to change 34 | 35 | ##### 3) User can reset the viewing window to "best fit" via onscreen buttons 36 | 37 | The graphing engine automatically returns a "best fit" graph view window. If the user changes the view, this button will allow the user to instantly reset to that "best fit" view. 38 | 39 | > Note: Final font glyph assets for "best fit" button is subject to change 40 | 41 | ##### 4) User can export the graph to other applications 42 | 43 | When exporting the graph, we will generate an image made up of the current graph viewing with the list of equations rendered underneath the graph as a key. 44 | 45 | > TODO: Missing design asset 46 | 47 | ##### 5) User can save the graph as an image 48 | 49 | In addition to sharing with other applications, the user should be able to save the image to disk. Supported filetypes include .png, .jpg, .jpeg, and .svg. The default file name should be prefixed with "graph". 50 | 51 | ##### 6) Users can change the min and max x/y values for the graph window. 52 | 53 | ![Graph Options](./images/graphOptions.png) 54 | 55 | Users can manually specify the min and max values for x and y coordinates. A "lock aspect ratio" button allows users to quickly change these values while optimizing for a square graph area (e.g., -15 to 15). 56 | 57 | The default changes based on what equations are being plotted and is determined based on the generated "best fit" graph output from the graphing engine. 58 | 59 | > Note: Final font glyph assets for locking aspect ratio button is subject to change 60 | 61 | > Open Question: Is "lock aspect ratio" useful accelerator or should it be removed for simplicity? 62 | 63 | ##### 7) Users can switch between operating in degrees and radians. 64 | 65 | When users toggle between degrees and radians, this affects all plots, as it is a global setting. The default is reset to radians upon starting a new graphing session. 66 | 67 | ##### 8) The x and y intercepts are highlighted on the graph 68 | 69 | X- and y-intercepts are highlighted on the graph by default for each plot. 70 | 71 | > TODO: Missing design asset 72 | -------------------------------------------------------------------------------- /archive/diagnosticData/README.md: -------------------------------------------------------------------------------- 1 | # Calculator Diagnostic Data Spec 2 | 3 | ## Goals 4 | To make decisions about what user experiences to focus on, we need to understand which parts of calculator are used most often and whether they're working correctly. We want to update the app-specific diagnostic information Calculator is collecting to answer questions like these: 5 | 6 | 1. Is Calculator app meeting its performance metrics? 7 | 2. Which Calculator mode is the best default experience? 8 | 3. Can users discover all the calculators and converters in the app? 9 | 4. What changes can we make to the keyboard layout to optimize for the most used operators? 10 | 5. Are History and memory features used by the users? 11 | 6. Does Calculator need to support multi-instance? 12 | 7. Where is the product non-fatally failing (error/exception)? 13 | 14 | ## Proposal 15 | Removing legacy diagnostics that we do not anticipate needing for upcoming planning. Update the diagnostic events being logged. Create new clean diagnostic schema to support the goals. 16 | 17 | ## Feature Details 18 | ### Event Logging 19 | _Note: As mentioned in Microsoft’s Privacy Statement https://privacy.microsoft.com/en-US/privacystatement#maindiagnosticsmodule, sampling is involved in Microsoft’s diagnostic data collection process. The keywords that are associated to event definitions provide additional input into how frequently an event might be sampled. Lower level events may be sampled more frequently than higher level events._ 20 | 21 | ### Performance 22 | All events in below table are tagged: 23 | 24 | 1. **Privacy tag:** PDT_ProductAndServicePerformance 25 | 2. **Event level:** MICROSOFT_KEYWORD_LEVEL_2 26 | 27 | | Event Name | Description| Fields | 28 | |---------------|--------|-------------| 29 | | ModernAppLaunch
ModernAppResume
ModernAppResize | Standard app lifecycle trace logger | **AumId**
**PackageFullName**
**PsmKey**
| 30 | 31 | ### Errors/Failure 32 | | Event Name | Description | Fields | 33 | |------------|--------|-------------| 34 | | Exception | Logs information about non-fatal errors | **CalcMode:** The Calculator mode
**ExceptionMessage:** Message returned by error
**FunctionName:** The name of the function logging the exception
**HResults:** The error code
| 35 | 36 | ### Feature Usage 37 | All events in below table are tagged: 38 | 39 | 1. **Privacy tag:** PDT_ProductAndServiceUsage 40 | 2. **Event level:** MICROSOFT_KEYWORD_LEVEL_2 41 | 42 | | Event Name | Description | Fields | 43 | |------------|--------|-------------| 44 | | NavigationViewOpened | Logged when the user opens the hamburger menu | | 45 | | ModeChanged | Logged when the user changes the calculator mode | **CalcMode:** The Calculator mode | 46 | | KeyboardOperatorUsageInSession | Logged when function button or toggle button is clicked | **CalcMode:** The Calculator mode
**ButtonId:** Id of the button
**ButtonName:** Name of button
**ViewModeId:** Portrait or landscape view
**UsageCount:** Number of times the button has been invoked in the session | 47 | | DateCalculationModeUsed | Logged when DateCalculation fields are changed | **CalcMode:** The Calculator mode
**CalculationType:** Logs which type of calculation was used | 48 | | HistoryItemLoad | Logged when history item is clicked | **CalcMode:** The Calculator mode
**HistoryListSize:** The total number of history items
**HistoryItemIndex:** The index of the invoked history item | 49 | | VisualStateChanged | Logged when the user changes the visual state of the window via resizing | **CalcMode:** The Calculator mode
**VisualState:** The new visual state | 50 | | MemoryItemLoad | Logged when a memory item is clicked | **CalcMode:** The Calculator mode
**MemoryListSize:** The total number of memory items
**MemoryItemIndex:** The index of the invoked memory item| 51 | | WindowCreated | Logged when the user instantiates multiple instance of the window | **CalcMode:** The Calculator Mode
**NumOfOpenWindows:** The number of open windows | 52 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Calculator Specs 3 | The Windows Calculator app is a modern Windows app written in C++ that ships pre-installed with Windows. 4 | This repository contains in-progress and archived spec documents for new features in 5 | [Microsoft/calculator](https://github.com/Microsoft/calculator). 6 | 7 | Documents in this repo are used for features in development and are not intended to be up-to-date 8 | developer or user documentation. For product issues, bugs, and feature requests please go to 9 | [Microsoft/calculator](https://github.com/Microsoft/calculator). 10 | 11 | ## Contributing 12 | We welcome your contributions to the project, and we thank you for your interest in making Calculator 13 | better! We follow a 14 | [user-centered process for developing features](https://github.com/Microsoft/calculator/blob/master/docs/NewFeatureProcess.md). 15 | 16 | * **DO** provide feedback on **active pull requests**, which represent new features that are being 17 | reviewed 18 | * **DO** provide feedback on spec documents in the `active` folder, which represent new features 19 | that are being worked on 20 | * **DO NOT** provide feedback on spec documents in the `archive` folder since those features have 21 | already been released 22 | * **DO NOT** submit pull requests that create new specs for ideas that do not have an associated 23 | approved feature pitch tracked in [Microsoft/calculator](https://github.com/Microsoft/calculator). 24 | To propose a new feature, please follow the Calculator 25 | [contribution process](https://github.com/Microsoft/calculator/blob/master/CONTRIBUTING.md) 26 | 27 | ### Workflow 28 | 29 | 1. Ensure that your pitch has been approved and moved into 30 | [planning](https://github.com/Microsoft/calculator/projects/1). When features enter this stage, 31 | a new working branch in this repo will be created: `feature/` 32 | 33 | 2. Create a new working branch off of that feature branch for your work in progress. Create a new 34 | directory for your spec under the `active` directory: `/active/`. 35 | 36 | 3. Write your spec following the [spec template](./spec_template.md), leveraging relative links when 37 | referencing images or other assets in the directory. Rename your file as `README.md`. 38 | 39 | 5. Once all feedback has been addressed and your spec has been merged into `master`, your feature will 40 | move into [implementation](https://github.com/Microsoft/calculator/projects/1). 41 | 42 | 6. After your feature is merged into `master` in the [Calculator](https://github.com/Microsoft/calculator) 43 | project, you can submit a pull request to move your spec from `active` to `archive`. (We'll do 44 | this for you if we don't see the pull request come in after some time.) 45 | 46 | ### Spec review 47 | Once there is a high-fidelity design which addresses the goals described in the original pitch, the 48 | Microsoft product team will review the spec and ensure all items on this checklist are addressed: 49 | 50 | - [ ] Is there a high-fidelity design which gives reviewers a clear idea of how the feature will 51 | look and function when implemented? 52 | - [ ] Has the plan been shared with the community and have others been given an opportunity to provide 53 | suggestions? 54 | - [ ] Are [Fluent design principles](https://docs.microsoft.com/en-us/windows/uwp/design/fluent-design-system/) 55 | followed? If we do something which deviates from the guidelines, do we have a good reason? 56 | - [ ] Does the design include provisions for 57 | [all users](https://docs.microsoft.com/en-us/windows/uwp/design/accessibility/designing-inclusive-software) 58 | and [all cultures](https://docs.microsoft.com/en-us/windows/uwp/design/globalizing/guidelines-and-checklist-for-globalizing-your-app)? 59 | - [ ] Is it technically feasible to build this feature? Take a look at the 60 | ["before committing" checklist](https://github.com/Microsoft/calculator/blob/master/docs/NewFeatureProcess.md#technical-review) 61 | and identify any issues which are likely to be blockers. 62 | 63 | ## Contributor License Agreement 64 | 65 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 66 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 67 | the rights to use your contribution. For details, visit https://cla.microsoft.com. 68 | 69 | When you submit a pull request, a CLA-bot will automatically determine whether you need to provide 70 | a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions 71 | provided by the bot. You will only need to do this once across all repos using our CLA. 72 | 73 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 74 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 75 | or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or 76 | comments. 77 | 78 | ## Legal Notices 79 | 80 | Microsoft and any contributors grant you a license to the Microsoft documentation and other content 81 | in this repository under the 82 | [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode), 83 | see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the 84 | [MIT License](https://opensource.org/licenses/MIT), see the [LICENSE-CODE](LICENSE-CODE) file. 85 | 86 | Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation 87 | may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. 88 | The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. 89 | Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653. 90 | 91 | Privacy information can be found at https://privacy.microsoft.com/en-us/ 92 | 93 | Microsoft and any contributors reserve all other rights, whether under their respective copyrights, 94 | patents, or trademarks, whether by implication, estoppel or otherwise. 95 | -------------------------------------------------------------------------------- /archive/Always-on-top/README.md: -------------------------------------------------------------------------------- 1 | # Calculator Always-on-top 2 | 3 | ## Problem Statment 4 | When attempting to use Calculator with another application, such as a spreadsheet, clicking on the other app (e.g. scroll, copy) moves Calculator to the background. Users want Calculator to stay on top of other apps to facilitate ongoing use with other apps. Alt-tab allows them to quickly bring Calculator back to the foreground, but their flow is interrupted. 5 | 6 | ## Evidence or User Insights 7 | Having an always-on-top mode is the second highest (2670) customer request we have received. Without it is a substantial feature gap, and people complain about having to pay for an app which is sticky because the OS version won’t do it. 8 | 9 | ## Proposal 10 | Create an “always-on-top” mode for Calculator. This requires making a compact view of the app for the picture-in-picture mode which supports this implementation. 11 | 12 | ## Goals 13 | - Customer can easily switch to the always-on-top mode 14 | - Customer can easily continue with other tasks while using Calculator always-on-top mode 15 | - Customer can always and easily view/input into essential Calculator functions when using compact view 16 | - Customer can easily switch back to the app’s full windowed mode when leaving always-on-top mode 17 | 18 | ## Non-goals 19 | - Parity with the full version of the app 20 | 21 | 22 | ## User Experience 23 | Always-on-top mode for calculator is a special mode (uses the Compact Overlay mode API) that keeps the calculator window on top of other windows regardless which window is in focus. This mode provides limited functionalities compared to the normal mode. 24 | 25 | ### Elements/functions removed from the standard mode 26 | Only standard calculator is supported in the always-on-top mode. The following elements/functions are removed from the normal mode standard calculator in the always-on-top mode. 27 | 28 | - Application title 29 | - Minimize window button 30 | - Maximize window button 31 | - Hamburger menu 32 | - Calculator type title 33 | - Previous typed number (the secondary line above the number) 34 | - History 35 | - Memory 36 | - MC, MR, M+ M-, MS, M(with a down arrow) 37 | 38 | The previously typed keys are shown in the primary number text area in the always-on-top mode. E.G. The user typed 6 + 9 and then =. Before = is pressed, 6 + 9 are shown in the primary text area. If the numbers don’t fit in the width of the window, they get pushed out of the view on the left side and an arrow is shown on the left side of the primary number text area. The user can press the arrow to scroll the numbers (the scrolling behavior is the same as that of the secondary text area in the normal mode). 39 | 40 | ![Figure 1 - Default size](./imgs/figure_1.png) 41 | > Figure 1 - Default size 42 | 43 | ![Figure 2 - Default size (left scroll arrow shown)](./imgs/figure_2.png) 44 | > Figure 2 - Default size (left scroll arrow shown) 45 | 46 | ![Figure 3 - Hover over the chevron arrow](./imgs/figure_3.png) 47 | > Figure 3 - Hover over the chevron arrow 48 | 49 | ![Figure 4 - Default size (right scroll arrow shown)](./imgs/figure_4.png) 50 | > Figure 4 - Default size (right scroll arrow shown) 51 | 52 | ### Keyboard shortcuts 53 | All keyboard shortcuts for the mode other than standard are disabled in the always-on-top mode. The table below lists the standard keyboard shortcuts that are supported in the always-on-top mode. 54 | 55 | > Note: The keyboard shortcuts only supported in the regular and max-size layouts are called out in the table. 56 | 57 | | Shortcut | Action | 58 | |----------|-------------| 59 | | % | Select % | 60 | | @ | Calculate the square root | 61 | | q | Select x2 | 62 | | r | Select 1/X | 63 | | Esc | Clear all input (select C) | 64 | | Delete | Clear current input (select CE) | 65 | | Backspace | Delete last character | 66 | | / | Divide | 67 | | * | Multiply | 68 | | - | Subtract | 69 | | + | Add | 70 | | F9 | Select ± | 71 | | . | Decimal point | 72 | | Enter | Equal | 73 | 74 | ### Window sizes & management 75 | Window resizing is enabled in the always-on-top mode. The default window size for the always-on-top mode is 320 x 394 epx. The minimum size of the window is 150 x 150 epx. The maximum size is 500 x 500 epx or half of the screen height depending on which is smaller. 76 | 77 | When the user shrinks the window down from the default size, the %, √, x ², 1/x keys are removed. 78 | 79 | ![Figure 5 - Min-size (150x150 epx)](./imgs/figure_5.png) 80 | > Figure 5 - Min-size (150x150 epx) 81 | 82 | ![Figure 6 - Min-size (150x150 epx)](./imgs/figure_6.png) 83 | > Figure 6 - Max-size (500 x 500 epx) 84 | 85 | If the user resizes the always-on-top window, the user configured size is saved and used as the default size the next time user enters the always-on-top mode (both in the same session and in new sessions). 86 | 87 | Window snapping is disabled in the always-on-top mode. 88 | 89 | ### Enter Always-on-top mode 90 | Always-on-top button only shows in the standard mode. Clicking the always-on-top button ![Enter Always-on-Top icon](./imgs/enter_AoT_icon.png) in the UI enables the always-on-top mode and places the always-on-top mode window at the upper right corner (position managed by the Compact Overlay mode API) of the screen. If another app is already in Compact overlay mode, Calculator always-on-top window is stacked on top of the other window and offset to the lower left direction to ensure that the first window is still partially visible (Compact Overlay mode API manages the positioning of the windows). 91 | 92 | A tool tip (“Always-on-top”) is shown when mouse is hovered over the always-on-top mode button. 93 | 94 | ![Figure 7 - Always-on-top entry point](./imgs/figure_7.png) 95 | > Figure 7 - Always-on-top entry point 96 | 97 | 98 | ### Exit Always-on-top mode 99 | Clicking the Exit always-on-top mode button ![Exit Always-on-Top icon](./imgs/exit_AoT_icon.png)in the always-on-top mode exits the mode and restores the Calculator normal mode window at its last position before always-on-top mode is enabled. 100 | 101 | When Calculator is closed from the always-on-top mode, opening it again launches it in the normal mode and positions the app window at the last position the normal mode is at. 102 | 103 | A tool tip (“Exit always-on-top”) is shown when mouse is hovered over the exit always-on-top mode button. 104 | 105 | 106 | ## Usage metrics 107 | Telemetries are added to answer whether the users use the always-on-top mode. 108 | 109 | 1. Number of monthly devices in which always-on-top is used/Number of all monthly active devices 110 | 2. NUmber of monthly sessions in which always-on-top is used/Number of all monthly sessions 111 | 112 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015/2017 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # Visual Studio 2017 auto generated files 33 | Generated\ Files/ 34 | 35 | # MSTest test Results 36 | [Tt]est[Rr]esult*/ 37 | [Bb]uild[Ll]og.* 38 | 39 | # NUNIT 40 | *.VisualState.xml 41 | TestResult.xml 42 | 43 | # Build Results of an ATL Project 44 | [Dd]ebugPS/ 45 | [Rr]eleasePS/ 46 | dlldata.c 47 | 48 | # Benchmark Results 49 | BenchmarkDotNet.Artifacts/ 50 | 51 | # .NET Core 52 | project.lock.json 53 | project.fragment.lock.json 54 | artifacts/ 55 | **/Properties/launchSettings.json 56 | 57 | # StyleCop 58 | StyleCopReport.xml 59 | 60 | # Files built by Visual Studio 61 | *_i.c 62 | *_p.c 63 | *_i.h 64 | *.ilk 65 | *.meta 66 | *.obj 67 | *.iobj 68 | *.pch 69 | *.pdb 70 | *.ipdb 71 | *.pgc 72 | *.pgd 73 | *.rsp 74 | *.sbr 75 | *.tlb 76 | *.tli 77 | *.tlh 78 | *.tmp 79 | *.tmp_proj 80 | *.log 81 | *.vspscc 82 | *.vssscc 83 | .builds 84 | *.pidb 85 | *.svclog 86 | *.scc 87 | 88 | # Chutzpah Test files 89 | _Chutzpah* 90 | 91 | # Visual C++ cache files 92 | ipch/ 93 | *.aps 94 | *.ncb 95 | *.opendb 96 | *.opensdf 97 | *.sdf 98 | *.cachefile 99 | *.VC.db 100 | *.VC.VC.opendb 101 | 102 | # Visual Studio profiler 103 | *.psess 104 | *.vsp 105 | *.vspx 106 | *.sap 107 | 108 | # Visual Studio Trace Files 109 | *.e2e 110 | 111 | # TFS 2012 Local Workspace 112 | $tf/ 113 | 114 | # Guidance Automation Toolkit 115 | *.gpState 116 | 117 | # ReSharper is a .NET coding add-in 118 | _ReSharper*/ 119 | *.[Rr]e[Ss]harper 120 | *.DotSettings.user 121 | 122 | # JustCode is a .NET coding add-in 123 | .JustCode 124 | 125 | # TeamCity is a build add-in 126 | _TeamCity* 127 | 128 | # DotCover is a Code Coverage Tool 129 | *.dotCover 130 | 131 | # AxoCover is a Code Coverage Tool 132 | .axoCover/* 133 | !.axoCover/settings.json 134 | 135 | # Visual Studio code coverage results 136 | *.coverage 137 | *.coveragexml 138 | 139 | # NCrunch 140 | _NCrunch_* 141 | .*crunch*.local.xml 142 | nCrunchTemp_* 143 | 144 | # MightyMoose 145 | *.mm.* 146 | AutoTest.Net/ 147 | 148 | # Web workbench (sass) 149 | .sass-cache/ 150 | 151 | # Installshield output folder 152 | [Ee]xpress/ 153 | 154 | # DocProject is a documentation generator add-in 155 | DocProject/buildhelp/ 156 | DocProject/Help/*.HxT 157 | DocProject/Help/*.HxC 158 | DocProject/Help/*.hhc 159 | DocProject/Help/*.hhk 160 | DocProject/Help/*.hhp 161 | DocProject/Help/Html2 162 | DocProject/Help/html 163 | 164 | # Click-Once directory 165 | publish/ 166 | 167 | # Publish Web Output 168 | *.[Pp]ublish.xml 169 | *.azurePubxml 170 | # Note: Comment the next line if you want to checkin your web deploy settings, 171 | # but database connection strings (with potential passwords) will be unencrypted 172 | *.pubxml 173 | *.publishproj 174 | 175 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 176 | # checkin your Azure Web App publish settings, but sensitive information contained 177 | # in these scripts will be unencrypted 178 | PublishScripts/ 179 | 180 | # NuGet Packages 181 | *.nupkg 182 | # The packages folder can be ignored because of Package Restore 183 | **/[Pp]ackages/* 184 | # except build/, which is used as an MSBuild target. 185 | !**/[Pp]ackages/build/ 186 | # Uncomment if necessary however generally it will be regenerated when needed 187 | #!**/[Pp]ackages/repositories.config 188 | # NuGet v3's project.json files produces more ignorable files 189 | *.nuget.props 190 | *.nuget.targets 191 | 192 | # Microsoft Azure Build Output 193 | csx/ 194 | *.build.csdef 195 | 196 | # Microsoft Azure Emulator 197 | ecf/ 198 | rcf/ 199 | 200 | # Windows Store app package directories and files 201 | AppPackages/ 202 | BundleArtifacts/ 203 | Package.StoreAssociation.xml 204 | _pkginfo.txt 205 | *.appx 206 | 207 | # Visual Studio cache files 208 | # files ending in .cache can be ignored 209 | *.[Cc]ache 210 | # but keep track of directories ending in .cache 211 | !*.[Cc]ache/ 212 | 213 | # Others 214 | ClientBin/ 215 | ~$* 216 | *~ 217 | *.dbmdl 218 | *.dbproj.schemaview 219 | *.jfm 220 | *.pfx 221 | *.publishsettings 222 | orleans.codegen.cs 223 | 224 | # Including strong name files can present a security risk 225 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 226 | #*.snk 227 | 228 | # Since there are multiple workflows, uncomment next line to ignore bower_components 229 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 230 | #bower_components/ 231 | 232 | # RIA/Silverlight projects 233 | Generated_Code/ 234 | 235 | # Backup & report files from converting an old project file 236 | # to a newer Visual Studio version. Backup files are not needed, 237 | # because we have git ;-) 238 | _UpgradeReport_Files/ 239 | Backup*/ 240 | UpgradeLog*.XML 241 | UpgradeLog*.htm 242 | ServiceFabricBackup/ 243 | *.rptproj.bak 244 | 245 | # SQL Server files 246 | *.mdf 247 | *.ldf 248 | *.ndf 249 | 250 | # Business Intelligence projects 251 | *.rdl.data 252 | *.bim.layout 253 | *.bim_*.settings 254 | *.rptproj.rsuser 255 | 256 | # Microsoft Fakes 257 | FakesAssemblies/ 258 | 259 | # GhostDoc plugin setting file 260 | *.GhostDoc.xml 261 | 262 | # Node.js Tools for Visual Studio 263 | .ntvs_analysis.dat 264 | node_modules/ 265 | 266 | # Visual Studio 6 build log 267 | *.plg 268 | 269 | # Visual Studio 6 workspace options file 270 | *.opt 271 | 272 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 273 | *.vbw 274 | 275 | # Visual Studio LightSwitch build output 276 | **/*.HTMLClient/GeneratedArtifacts 277 | **/*.DesktopClient/GeneratedArtifacts 278 | **/*.DesktopClient/ModelManifest.xml 279 | **/*.Server/GeneratedArtifacts 280 | **/*.Server/ModelManifest.xml 281 | _Pvt_Extensions 282 | 283 | # Paket dependency manager 284 | .paket/paket.exe 285 | paket-files/ 286 | 287 | # FAKE - F# Make 288 | .fake/ 289 | 290 | # JetBrains Rider 291 | .idea/ 292 | *.sln.iml 293 | 294 | # CodeRush 295 | .cr/ 296 | 297 | # Python Tools for Visual Studio (PTVS) 298 | __pycache__/ 299 | *.pyc 300 | 301 | # Cake - Uncomment if you are using it 302 | # tools/** 303 | # !tools/packages.config 304 | 305 | # Tabs Studio 306 | *.tss 307 | 308 | # Telerik's JustMock configuration file 309 | *.jmconfig 310 | 311 | # BizTalk build output 312 | *.btp.cs 313 | *.btm.cs 314 | *.odx.cs 315 | *.xsd.cs 316 | 317 | # OpenCover UI analysis results 318 | OpenCover/ 319 | 320 | # Azure Stream Analytics local run output 321 | ASALocalRun/ 322 | 323 | # MSBuild Binary and Structured Log 324 | *.binlog 325 | 326 | # NVidia Nsight GPU debugger configuration file 327 | *.nvuser 328 | 329 | # MFractors (Xamarin productivity tool) working folder 330 | .mfractor/ 331 | -------------------------------------------------------------------------------- /archive/GraphingMode/README.md: -------------------------------------------------------------------------------- 1 | # Graphing Mode 2 | 3 | ## Problem Statement 4 | High school algebra is the gateway to mathematics and all other disciplines of STEM. However, algebra is the single most failed course in high school, as well as the most failed course in community college ([Washington Post](https://www.washingtonpost.com/news/answer-sheet/wp/2017/09/15/of-course-algebra-is-important-its-also-a-huge-problem/)). Graphing capabilities in their daily tools are essential for students who are beginning to explore linear algebra as early as 8th grade. Physical graphing calculators can be expensive, software solutions require licenses and configuration by school IT departments, and online solutions are not always an option. At present, Windows Calculator does not currently have the needed functionality to meet the demands of students. 5 | 6 | ## Evidence or User Insights 7 | Graphing calculator provides an accessible and engaging method for students and teachers to learn and teach. Research has shown that graphing calculators foster conceptual understanding of developmental math students (Hopkins & Amelia, 1998; Laughbaum, 2002, 2003; Shore & Shore, 2003) by: 8 | * Increased speed 9 | * Opportunity to study rich mathematics through technology 10 | * Make connections through different data representations 11 | * Deeper understanding on “why” 12 | 13 | Graphing Calculator is also the top requested feature in [Feedback Hub](https://aka.ms/AA43wie). 14 | 15 | ## Proposal 16 | Empower students to learn mathematics by improving conceptual understanding and attitudes towards math by adding graphing support to Windows Calculator targeting grades 8-12 students and teachers (math/physics). With graphing calculator, we can improve learning outcomes of students by increasing engagement and visualization of math equations. 17 | 18 | ## Goals and Non-Goals 19 | **Goals** 20 | * Provide a great baseline graphing calculator experience in Windows Calculator 21 | * Support all [US common core math curriculum](http://www.corestandards.org/Math/), including: 22 | * Ability to build and interpret functions 23 | * Understand linear, quadratic, and exponential models 24 | * Trigonometric functions 25 | * Reason with equations and inequalities 26 | 27 | **Non-Goals** 28 | * Support advanced calculus or statistics functionality 29 | * Parity with more advanced graphing solutions 30 | 31 | ## Success Criteria 32 | Success with the graphing calculator can be measured by monthly active users, engagement time, and retention. 33 | 34 | ## Overview 35 | The specification is divided up into three sections: 36 | 1. Key graphing calculator scenarios 37 | 2. Feature requirements as highlighted by the key user scenarios 38 | 3. Specifics about information architecture and components that enable the key graphing scenarios 39 | 40 | In order to set context on the feature requirements and components needed for the graphing calculator, a set of 11 key user scenarios were established. The golden path for each scenario will be described within the specification. With the key user scenarios establish, requirements for each component and graphing calculator were extracted and documented. 41 | 42 | Windows calculator is built on top of the [Windows Fluent design system](https://www.microsoft.com/design/fluent/#/windows) leveraging the style, design patterns and controls. With the graphing calculator feature, the common controls within the Windows Fluent design system was not enough. We extended the design system, by creating specific components for the graphing calculator including the equation input and graph area. We stressed test the components using the key scenarios. By establishing a set of common controls, we enable the community to extend the graphing calculator and enable new user scenarios. 43 | 44 | ### Scenarios 45 | 11 user scenarios were established and prioritized based on the core task that students and teachers need to complete within a classroom setting. Each scenario helped align and inform the feature requirements for each of the areas of the graphing calculator. The golden path of each key scenario will be described through a series of storyboards. 46 | 47 | | Order | Scenario | Component Area(s) | 48 | |:------:|:----------|:-------------------| 49 | | 1 | User can enter an equation so that they can see the graphed plot. | Graphing area, Equation area, Keyboard area | 50 | | 2 | User can enter multiple equations so that they can compare plots against each other and see the interactions between the lines. | Equation area, Keyboard area | 51 | | 3 | User can edit an equation so that they can see how changes affect the plot and correct mistakes. | Equation area | 52 | | 4 | User can change the graph viewing window so that they can see different parts of the plot at different levels of detail. | Graphing area | 53 | | 5 | User can export a graph so that they can share it with others or incorporate into Office/Teams. | Graphing area | 54 | | 6 | User can analyze equations for common features and summon key graph features in a list so that they can better understand the important features of a given function. | Equation area | 55 | | 7 | User can easily manipulate secondary variables in equations so that they can quickly understand how changes to equations affect the graph. | Equation area | 56 | | 8 | User can change graph visuals so that they can clearly differentiate between multiple plots. | Graphing area | 57 | | 9 | User can trace plots with a mouse or gesture so that they can better understand the relationship between variables in the equation on the graph. | Graphing area | 58 | | 10 | User can use their keyboard to activate a crosshair so that they can better understand the relationship between variables in the equation on the graph. | Graphing area | 59 | | 11 | User can see traceable key graph features as nodes/dots on the equations so that they can better understand the important features of a given function. | Graphing area | 60 | | Future | User can enter a set of points so that they can see the multiple points graphed. | Graphing area, Equation area, Keyboard area | 61 | | Future | User can bound their equations so that they can create step functions. | Equation area | 62 | 63 | ## Feature Details and High-Fidelity Concept 64 | Graphing calculator can be split into four main components: (1) Graphing Area, (2) Keyboard, and (3) Equation Input Area. Leveraging the [US common core standards](http://www.corestandards.org/Math/), and the key user scenarios we were able to start defining the requirements needed for each of these components. 65 | 66 | ### Graphing Area 67 | | # | Requirement | Notes | 68 | |---|:-------------|:-------| 69 | | 1 | User can change the viewing window by dragging and zooming the graphing area | Leveraging touch and mouse, a user can change the zoom level | 70 | | 2 | User can zoom the viewing window via onscreen buttons | Keyboard accessibility support | 71 | | 3 | User can reset the viewing window to "best fit" via onscreen buttons | | 72 | | 4 | User can export the graph to other applications | | 73 | | 5 | User can save the graph as an image | Default file name should be prefixed with "graph". Should support .png, .jpg, .jpeg, and .svg. | 74 | | 6 | Users can change the min and max x/y values for the graph window. | Users should be able to input a specific value of the min and max. | 75 | | 7 | Users can switch between operating in degrees and radians. | | 76 | | 8 | The x and y intercepts are highlighted on the graph | | 77 | 78 | See more details about the graphing area component [here](./GraphingArea.md). 79 | 80 | ### Keyboard 81 | | # | Requirement | Notes | 82 | |---|:-------------|:-------| 83 | | 1 | User can input numerals and symbols for supported equation types via the keyboard | | 84 | | 2 | Users can both submit equations and leverage the '=' symbol in equations | The equals button in other calculator modes is submit. Graphing mode needs to distinguish the two. | 85 | | 3 | Users can input _x_ and _y_ variables. | | 86 | 87 | See more details about the keyboard component [here](./Keyboard.md). 88 | 89 | ### Equation Input Area 90 | | # | Requirement | Notes | 91 | |---|:-------------|:-------| 92 | | 1 | User can enter an equation with 1 or 2 variables (x, y) | An equation is an expression through an equality (e.g., =) between the two algebraic quantities or a set of quantity. We will officially support the following equation types: linear, quadratic, polynomial, trigonometric, radical, exponential, inequality, and conics/circles. | 93 | | 2 | Equations are displayed in rich MathML styling format | | 94 | | 3 | Users can input their equations with freeform input | | 95 | | 4 | User can toggle the visibility of an equation | | 96 | | 5 | Users can change the color and style of equation lines | | 97 | | 6 | Users can manipulate a variable within an equation to see the effect it has on the graph | | 98 | 99 | See more details about the equation input area [here](./EquationInputArea.md). 100 | 101 | ### Layout 102 | 103 | Windows Calculator is desgined to be responsive to window size changes. As such, we must support both large and small window sizes. Due to the complexity of graphing equations, we are optimizing for larger windows layouts, but graphing calcualtor should work great for smaller sized windows as well. See more details about layout [here](./Layout.md). 104 | -------------------------------------------------------------------------------- /archive/KeyboardRefresh/README.md: -------------------------------------------------------------------------------- 1 | # Update Calculator keyboard for greater consistency and extensibility 2 | 3 | ## Problem Statement 4 | The Calculator keyboard requires some changes to meet the demands of upcoming features, including graphing mode and always-on-top mode. Furthermore, the current standard keyboard could be better at accommodating scaled screen sizes, which improves overall accessibility of the app. There are a number of other problems this spec seeks to address, including reducing confusion over the up arrow used as the shift key and reducing the number of keyboard layout states. 5 | 6 | ## Evidence or User Insights 7 | The current keyboard is not scalable to support new minimum size requirements for CompactOverlay mode, nor is it extensible to support additional functionality in graphing calculator. 8 | 9 | ## Proposal 10 | Update they keyboard app-wide for increased consistency and greater extensibility to prepare for upcoming feature improvements. 11 | 12 | ## Goals and Non-Goals 13 | **Goals** 14 | * No functionality takebacks in existing calculator modes 15 | * Opportunistically add missing functionality across modes 16 | * Increase clarity around shifted operations 17 | 18 | **Non-Goals** 19 | * Changes to display option buttons are out of scope (e.g., BYTE/WORD mode in programmer calculator), unless the button is better suited to be included in the keyboard 20 | 21 | ## Success Criteria 22 | Success here is unblocking future feature development and improving overall accessibility. 23 | 24 | ## Feature Requirements 25 | | Priority | Requirement | 26 | |:-:|:-| 27 | | P1 | Keyboard in Standard mode is updated to new layout and styling | 28 | | P1 | Keyboard in Scientific mode is updated to new layout and styling | 29 | | P1 | Keyboard in Programmer mode is updated to new layout and styling | 30 | | P1 | Keyboard in Converters are updated to new layout and styling | 31 | | P1 | Create new Operator Overflow Panel and operator groupings | 32 | | P1 | Calculator font updated with new/updated icons to support keyboard changes | 33 | | P2 | Add support for X-Y focus keyboard navigation using arrow keys | 34 | | P2 | Keyboard in Graphing Mode added with new layout and styling | 35 | 36 | ## Feature Details and High-Fidelity Concept 37 | ![Scientific Calculator After](./scientificAfter.png) 38 | 39 |
Standard Mode 40 | 41 | ### Standard Mode 42 | Standard Calculator functionality which offers basic operations and evaluates commands immediately as they are entered. 43 | 44 | |![Standard Calculator Before](./standardBefore.png)|![Standard Calculator After](./standardAfter.png)| ![Standard Calculator Annotated Changes](./standardAnnotated.png)| 45 | |:-:|:-:|:-:| 46 | | Before | After | Annotated | 47 | 48 | **Red Region - Number Pad** 49 | * Standard number pad across all keyboards 50 | * Button styling extended to sign and decimal buttons 51 | 52 | **Green Region - Operator Pad** 53 | * Core arithmetic operators always grouped and ordered the same across all keyboards 54 | * “Submit” button is always bottom-right corner across all keyboards 55 | * “Submit” button has styling applied to draw user attention 56 | 57 | **Yellow Region - Backspace/Clear** 58 | * Backspace and clear buttons moved to upper-right corner across all keyboards 59 | 60 | **Black Region - Mode-specific** 61 | * Space not used by common keyboard components are reserved for mode-specific buttons 62 | * Like operators are grouped together, when possible 63 |
64 | 65 |
Scientific Mode 66 | 67 | ### Scientific Mode 68 | Scientific Calculator functionality which offers expanded operations and evaluates commands using order of operations. 69 | 70 | |![Scientific Calculator Before](./scientificBefore.png)|![Scientific Calculator After](./scientificAfter.png)|![Scientific Calculator Annotated Changes](./scientificAnnotated.png)| 71 | |:-:|:-:|:-:| 72 | | Before | After | Annotated | 73 | 74 | **Red Region - Shifted Operators** 75 | * In supported keyboards, 2nd bar will always appear here in this grouping 76 | * Shifted operations have visual treatment applied 77 | * Shifted operations must either be the inverse operation or a variation of unshifted operator 78 | * Adding cubes and cubic root buttons 79 | * Adding 2x button 80 | * Adding logxy button 81 | 82 | **Yellow Region - Backspace/Clear** 83 | * Outside of Standard mode, we combine CE and C buttons into one 84 | * By default, “CE” will appear to allow user to clear everything 85 | * Once there is input, “C” will appear instead to allow user to clear current input 86 | 87 | **Green Region - Parenthesis** 88 | * In supported keyboards, parenthesis will always appear here in this grouping 89 | 90 | **Orange Region - Operator Groups** 91 | * Modes with rich functionality will utilize a new operator overflow panel for easy access to sets of operators 92 | * Operator groups are consistent between modes 93 | * Scientific has following overflow operator groups 94 | * Trig (sin, cos, tan, sec, csc, cot, with hyperbolics and inverse variants) 95 | * Functions (abs, floor, ceil, rand, dms, deg) 96 | * See overflow panel section for more details 97 | 98 | **Purple Region - New Operators** 99 | * Add absolute value to scientific calculator 100 | 101 | **Black Region - Mode-specific** 102 | * Space not used by common keyboard components are reserved for mode-specific buttons 103 | * Like operators are grouped together, when possible 104 |
105 | 106 |
Programmer Mode 107 | 108 | ### Programmer Mode 109 | Programmer Calculator functionality which offers common mathematical operations for developers including conversion between common bases. 110 | 111 | |![Programmer Calculator Before](./programmerBefore.png)|![Programmer Calculator After](./programmerAfter.png)|![Programmer Calculator Annotated Changes](./programmerAnnotated.png)| 112 | |:-:|:-:|:-:| 113 | | Before | After | Annotated | 114 | 115 | **Red Region - HEX Values** 116 | * A-F buttons available for HEX input along left side 117 | * Use same style as number pad 118 | 119 | **Orange Region - Operator Groups** 120 | * Programmer has following overflow operator groups 121 | * Bitwise Operators 122 | * Bit Shifts 123 | * Adding support for NAND, NOR and XNOR bitwise operators 124 | * Adding support for logical left/right and rotate through carry circular left/right bit sifts 125 | * See overflow panel slide for more details 126 | 127 | **Yellow Region - Decimal** 128 | * Decimal key disabled in programmer mode (same as today) 129 | 130 | **Purple Region - New Shift Behavior** 131 | * Adding Left and Right Shift buttons, since those can be done in rapid succession. Option to change shift mode moved to operator group. 132 | * Indicator will display when non-default shift is active in upper-right corner. 133 | 134 | **Black Region - Mode-specific** 135 | * Space not used by common keyboard components are reserved for mode-specific buttons 136 | * Like operators are grouped together, when possible 137 |
138 | 139 |
Converters 140 | 141 | ### Converters 142 | Conversion between many units of measurement. 143 | 144 | |![Converter Before](./converterBefore.png)|![Converter After](./converterAfter.png)|![Converter Annotated Changes](./converterAnnotated.png)| 145 | |:-:|:-:|:-:| 146 | | Before | After | Annotated | 147 | 148 | **Red Region - Sign Button** 149 | * Sign button should only appear in supported modes and is enabled for all data types that support negative values: 150 | * Temperature (sub-zero temperatures; when input is Kelvin, disable sign button) 151 | * Power (time-rate of energy, which can be negative) 152 | * Angle (negative angles) 153 | * Decimal Button should be enabled for all conversations (no change) 154 |
155 | 156 |
Graphing Mode 157 | 158 | ### Graphing Mode (_new_) 159 | 160 | |![Graphing Calculator](./graphingAfter.png)|![Graphing Calculator Annotated Changes](./graphingAnnotated.png)| 161 | |:-:|:-:| 162 | | After | Annotated | 163 | 164 | **Orange Region - Operator Groups** 165 | * Graphing has following overflow operator groups 166 | * Trig (same as Scientific) 167 | * Inequalities (=, <, <=, >, >=) 168 | * Functions (floor, ceil, and abs) 169 | * See overflow panel slide for more details 170 | 171 | **Red Region - Variables** 172 | * X and Y are special variables exposed top-level 173 | 174 | **Green Region - Equals and Submit** 175 | * In graphing mode, the equals button means something else, so the “submit” button is replaced with a submit/enter button to plot the equation in bottom-right corner 176 | * The “=“ button is exposed top-level (also included in variables operator overflow group) 177 | 178 | **Black Region - Mode-specific** 179 | * Space not used by common keyboard components are reserved for mode-specific buttons 180 | * Like operators are grouped together, when possible 181 |
182 | 183 |
Operator Panels 184 | 185 | ### Operator Panels 186 | |![Operator Panel](./operatorPanel.png)|![Operator Panel](./operatorPanelAnnotated.png)| 187 | |:-:|:-:| 188 | | After | Annotated | 189 | 190 | **Red Region - Operator Panel** 191 | * Operator groups ordered from most common to least common 192 | * For small screen sizes or long localized strings, operator groups should overflow off the side and FlipView-like arrow buttons will appear (you can also scroll) 193 | 194 | **Green Region - Toggle Buttons** 195 | * Toggle button pattern with chevron flip to indicate toggle state 196 | 197 | **Orange Region - Flyout** 198 | * Panel is light-dismissible and closes if user clicks a button 199 | * Buttons follow same styling as other keyboard buttons 200 | 201 | #### Trig 202 | ![Operator Panel](./operatorPanelTrigAnnotated.png) 203 | 204 | #### Functions 205 | ![Operator Panel](./operatorPanelFunctionsAnnotated.png) 206 | 207 | * Graphing mode only has abs, floor, and ceil 208 | 209 | #### Inequalities 210 | ![Operator Panel](./operatorPanelInequalitiesAnnotated.png) 211 | 212 | #### Bitwise Operators 213 | ![Operator Panel](./operatorPanelBitwiseAnnotated.png) 214 | 215 | #### Bit Shifts 216 | ![Operator Panel](./operatorPanelShiftOptions.png) 217 | 218 | * Default to Arithmetic Shift every time you enter programmer mode 219 | * If user changes option, preserve through mode session (i.e., if they leave and come back, reset) 220 | 221 |
222 | 223 |
Scaling 224 | 225 | ### Scaling 226 | We are reducing the number of distinct keyboard layout states to _two_. 227 | 228 | ![Scaling Keyboard](./scaling.png) 229 | 230 | * Subtitle (20)/Title (24) font size for buttons/numpad buttons on small (320x320) and medium (640x640) layouts 231 | * Sub-Header (34)/Header (48) font size for buttons/numpad buttons on large (1080x1080) layouts 232 | 233 |
234 | 235 |
Accessibility 236 | 237 | ### Accessibility 238 | * Add support for X-Y focus navigation when focus is inside of any keyboard area (including overflow panels) 239 | * Addresses feedback from recent Calculator accessibility review as one of the issues preventing us from achieving an “A” rating 240 | 241 | ![Keyboard Accessibility](./accessibility.png) 242 |
243 | 244 | _**Note:** Strings and icons above are not final._ 245 | 246 | ![needs glyph marker](./needsGlyphKey.png) 247 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public 379 | licenses. Notwithstanding, Creative Commons may elect to apply one of 380 | its public licenses to material it publishes and in those instances 381 | will be considered the “Licensor.” The text of the Creative Commons 382 | public licenses is dedicated to the public domain under the CC0 Public 383 | Domain Dedication. Except for the limited purpose of indicating that 384 | material is shared under a Creative Commons public license or as 385 | otherwise permitted by the Creative Commons policies published at 386 | creativecommons.org/policies, Creative Commons does not authorize the 387 | use of the trademark "Creative Commons" or any other trademark or logo 388 | of Creative Commons without its prior written consent including, 389 | without limitation, in connection with any unauthorized modifications 390 | to any of its public licenses or any other arrangements, 391 | understandings, or agreements concerning use of licensed material. For 392 | the avoidance of doubt, this paragraph does not form part of the 393 | public licenses. 394 | 395 | Creative Commons may be contacted at creativecommons.org. --------------------------------------------------------------------------------