Compare commits
	
		
			60 Commits
		
	
	
		
			1.7.4-stab
			...
			notebook-i
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					ab95f947e8 | ||
| 
						 | 
					179e69867b | ||
| 
						 | 
					b2fb958a77 | ||
| 
						 | 
					3ee6a04db0 | ||
| 
						 | 
					59fd3415d6 | ||
| 
						 | 
					8aeef6ae37 | ||
| 
						 | 
					0543aa9521 | ||
| 
						 | 
					78ae568302 | ||
| 
						 | 
					fad3afbd3c | ||
| 
						 | 
					6f975c2d9d | ||
| 
						 | 
					9fd397b34e | ||
| 
						 | 
					cbddfac96f | ||
| 
						 | 
					b5153b0f27 | ||
| 
						 | 
					b766a22034 | ||
| 
						 | 
					4bde1c1ab8 | ||
| 
						 | 
					1d314a91e0 | ||
| 
						 | 
					e370fbd6c5 | ||
| 
						 | 
					25cce4dd0d | ||
| 
						 | 
					78dd80d081 | ||
| 
						 | 
					944fb5e53a | ||
| 
						 | 
					ac7ea7ba44 | ||
| 
						 | 
					5d34628dd8 | ||
| 
						 | 
					c3a2ac3dd5 | ||
| 
						 | 
					62ebcd7277 | ||
| 
						 | 
					79a5e479cb | ||
| 
						 | 
					d9b66e23aa | ||
| 
						 | 
					f1c3a56147 | ||
| 
						 | 
					02e5defbdc | ||
| 
						 | 
					9897883335 | ||
| 
						 | 
					c15bb45411 | ||
| 
						 | 
					a085b2a7b8 | ||
| 
						 | 
					3366f21155 | ||
| 
						 | 
					45d5b0752b | ||
| 
						 | 
					07d7f8fd5f | ||
| 
						 | 
					2b7b4a552c | ||
| 
						 | 
					3f9bad1805 | ||
| 
						 | 
					fec1d38f7e | ||
| 
						 | 
					499655def2 | ||
| 
						 | 
					d5985b844c | ||
| 
						 | 
					59bb5d3d55 | ||
| 
						 | 
					5b298525e3 | ||
| 
						 | 
					1540fbcf54 | ||
| 
						 | 
					b15f193f5d | ||
| 
						 | 
					bdf856526b | ||
| 
						 | 
					9aafb5cbf9 | ||
| 
						 | 
					2ccf3f0fb1 | ||
| 
						 | 
					46d7c117cb | ||
| 
						 | 
					60168ea87b | ||
| 
						 | 
					5ba3afb1a8 | ||
| 
						 | 
					3974991cfd | ||
| 
						 | 
					39c5b1bbfd | ||
| 
						 | 
					c82563c80f | ||
| 
						 | 
					01fda1adfc | ||
| 
						 | 
					bf5ed84f94 | ||
| 
						 | 
					7c34f03a95 | ||
| 
						 | 
					3cf1ad8e40 | ||
| 
						 | 
					3fab80c276 | ||
| 
						 | 
					194dc43e24 | ||
| 
						 | 
					16e0eeff67 | ||
| 
						 | 
					37be478a08 | 
@@ -25,4 +25,4 @@
 | 
			
		||||
    "html2canvas": "^0.4.1",
 | 
			
		||||
    "moment-timezone": "^0.5.13"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@@ -37,6 +37,7 @@ module.exports = function(config) {
 | 
			
		||||
            {pattern: 'bower_components/**/*.js', included: false},
 | 
			
		||||
            {pattern: 'node_modules/d3-*/**/*.js', included: false},
 | 
			
		||||
            {pattern: 'node_modules/vue/**/*.js', included: false},
 | 
			
		||||
            {pattern: 'node_modules/@cristian77/**/*.js', included: false},
 | 
			
		||||
            {pattern: 'src/**/*.js', included: false},
 | 
			
		||||
            {pattern: 'example/**/*.html', included: false},
 | 
			
		||||
            {pattern: 'example/**/*.js', included: false},
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,8 @@ requirejs.config({
 | 
			
		||||
        "d3-format": "node_modules/d3-format/build/d3-format.min",
 | 
			
		||||
        "d3-interpolate": "node_modules/d3-interpolate/build/d3-interpolate.min",
 | 
			
		||||
        "d3-time": "node_modules/d3-time/build/d3-time.min",
 | 
			
		||||
        "d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min"
 | 
			
		||||
        "d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min",
 | 
			
		||||
        "painterro": "node_modules/@cristian77/painterro/build/painterro.min"
 | 
			
		||||
    },
 | 
			
		||||
    "shim": {
 | 
			
		||||
        "angular": {
 | 
			
		||||
@@ -67,6 +68,9 @@ requirejs.config({
 | 
			
		||||
        "moment-duration-format": {
 | 
			
		||||
            "deps": ["moment"]
 | 
			
		||||
        },
 | 
			
		||||
        "painterro": {
 | 
			
		||||
            "exports": "Painterro"
 | 
			
		||||
        },
 | 
			
		||||
        "saveAs": {
 | 
			
		||||
            "exports": "saveAs"
 | 
			
		||||
        },
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
  "version": "0.12.1-SNAPSHOT",
 | 
			
		||||
  "description": "The Open MCT core platform",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@cristian77/painterro": "^0.2.48",
 | 
			
		||||
    "d3-array": "^1.0.2",
 | 
			
		||||
    "d3-axis": "^1.0.4",
 | 
			
		||||
    "d3-collection": "^1.0.2",
 | 
			
		||||
 
 | 
			
		||||
@@ -77,6 +77,7 @@ define([
 | 
			
		||||
                overlayContainer;
 | 
			
		||||
 | 
			
		||||
            function openOverlay() {
 | 
			
		||||
 | 
			
		||||
                // Remove frame classes from being applied in a non-frame context
 | 
			
		||||
                $(frame).removeClass('frame frame-template');
 | 
			
		||||
                overlay = document.createElement('div');
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										333
									
								
								platform/features/notebook/bundle.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										333
									
								
								platform/features/notebook/bundle.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,333 @@
 | 
			
		||||
define([
 | 
			
		||||
    "legacyRegistry",
 | 
			
		||||
    "./src/controllers/NotebookController",
 | 
			
		||||
    "./src/controllers/NewEntryController",
 | 
			
		||||
    "./src/controllers/SelectSnapshotController",
 | 
			
		||||
    "./src/controllers/LayoutNotebookController",
 | 
			
		||||
    "./src/directives/MCTSnapshot",
 | 
			
		||||
    "./src/directives/MCTModalNotebook",
 | 
			
		||||
    "./src/directives/EntryDnd",
 | 
			
		||||
    "./src/actions/ViewSnapshot",
 | 
			
		||||
    "./src/actions/AnnotateSnapshot",
 | 
			
		||||
    "./src/actions/RemoveEmbed",
 | 
			
		||||
    "./src/actions/CreateSnapshot",
 | 
			
		||||
    "./src/actions/RemoveSnapshot",
 | 
			
		||||
    "./src/actions/NewEntryContextual",
 | 
			
		||||
    "./src/capabilities/NotebookCapability",
 | 
			
		||||
    "./src/policies/CompositionPolicy",
 | 
			
		||||
    "./src/policies/ViewPolicy"
 | 
			
		||||
 | 
			
		||||
], function (
 | 
			
		||||
    legacyRegistry,
 | 
			
		||||
    NotebookController,
 | 
			
		||||
    NewEntryController,
 | 
			
		||||
    SelectSnapshotController,
 | 
			
		||||
    LayoutNotebookController,
 | 
			
		||||
    MCTSnapshot,
 | 
			
		||||
    MCTModalNotebook,
 | 
			
		||||
    MCTEntryDnd,
 | 
			
		||||
    ViewSnapshotAction,
 | 
			
		||||
    AnnotateSnapshotAction,
 | 
			
		||||
    RemoveEmbedAction,
 | 
			
		||||
    CreateSnapshotAction,
 | 
			
		||||
    RemoveSnapshotAction,
 | 
			
		||||
    newEntryAction,
 | 
			
		||||
    NotebookCapability,
 | 
			
		||||
    CompositionPolicy,
 | 
			
		||||
    ViewPolicy
 | 
			
		||||
) {
 | 
			
		||||
    legacyRegistry.register("platform/features/notebook", {
 | 
			
		||||
        "name": "Notebook Plugin",
 | 
			
		||||
        "description": "Create and save timestamped notes with embedded object snapshots.",
 | 
			
		||||
        "extensions":
 | 
			
		||||
        {
 | 
			
		||||
            "types": [
 | 
			
		||||
            {
 | 
			
		||||
                "key": "notebook",
 | 
			
		||||
                "name": "Notebook",
 | 
			
		||||
                "cssClass": "icon-notebook",
 | 
			
		||||
                "description": "Create and save timestamped notes with embedded object snapshots.",
 | 
			
		||||
                "features": ["creation"],
 | 
			
		||||
                "model": {
 | 
			
		||||
                      "entries": [],
 | 
			
		||||
                      "composition": [],
 | 
			
		||||
                      "entryTypes": []
 | 
			
		||||
                  }
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
            "views": [
 | 
			
		||||
            {
 | 
			
		||||
                "key": "notebook.view",
 | 
			
		||||
                "type": "notebook",
 | 
			
		||||
                "cssClass": "icon-notebook",
 | 
			
		||||
                "name": "notebook",
 | 
			
		||||
                "templateUrl": "templates/notebook.html",
 | 
			
		||||
                "editable": false,
 | 
			
		||||
                "uses": [
 | 
			
		||||
                      "composition",
 | 
			
		||||
                      "action"
 | 
			
		||||
                  ],
 | 
			
		||||
                "gestures": [
 | 
			
		||||
                    "drop"
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "key": "layoutNotebook",
 | 
			
		||||
                "name": "Display Layout",
 | 
			
		||||
                "cssClass": "icon-layout",
 | 
			
		||||
                "type": "layout",
 | 
			
		||||
                "templateUrl": "templates/layoutNotebook.html",
 | 
			
		||||
                "editable": true,
 | 
			
		||||
                "uses": [],
 | 
			
		||||
                "toolbar": {
 | 
			
		||||
                    "sections": [
 | 
			
		||||
                        {
 | 
			
		||||
                            "items": [
 | 
			
		||||
                                {
 | 
			
		||||
                                    "method": "showFrame",
 | 
			
		||||
                                    "cssClass": "icon-frame-show",
 | 
			
		||||
                                    "control": "button",
 | 
			
		||||
                                    "title": "Show frame",
 | 
			
		||||
                                    "description": "Show frame"
 | 
			
		||||
                                },
 | 
			
		||||
                                {
 | 
			
		||||
                                    "method": "hideFrame",
 | 
			
		||||
                                    "cssClass": "icon-frame-hide",
 | 
			
		||||
                                    "control": "button",
 | 
			
		||||
                                    "title": "Hide frame",
 | 
			
		||||
                                    "description": "Hide frame"
 | 
			
		||||
                                }
 | 
			
		||||
                            ]
 | 
			
		||||
                        }
 | 
			
		||||
                    ]
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
            "controllers": [
 | 
			
		||||
             {
 | 
			
		||||
                 "key": "NotebookController",
 | 
			
		||||
                 "implementation": NotebookController,
 | 
			
		||||
                 "depends": ["$scope",
 | 
			
		||||
                             "dialogService",
 | 
			
		||||
                             "popupService",
 | 
			
		||||
                             "agentService",
 | 
			
		||||
                             "objectService",
 | 
			
		||||
                             "navigationService",
 | 
			
		||||
                             "now",
 | 
			
		||||
                             "actionService",
 | 
			
		||||
                             "$timeout",
 | 
			
		||||
                             "$element"
 | 
			
		||||
                             ]
 | 
			
		||||
             },
 | 
			
		||||
             {
 | 
			
		||||
                 "key": "NewEntryController",
 | 
			
		||||
                 "implementation": NewEntryController,
 | 
			
		||||
                 "depends": ["$scope",
 | 
			
		||||
                              "$rootScope"
 | 
			
		||||
                             ]
 | 
			
		||||
             },
 | 
			
		||||
             {
 | 
			
		||||
                 "key": "selectSnapshotController",
 | 
			
		||||
                 "implementation": SelectSnapshotController,
 | 
			
		||||
                 "depends": ["$scope",
 | 
			
		||||
                              "$rootScope"
 | 
			
		||||
                             ]
 | 
			
		||||
             },
 | 
			
		||||
             {
 | 
			
		||||
                 "key": "LayoutNotebookController",
 | 
			
		||||
                 "implementation": LayoutNotebookController,
 | 
			
		||||
                 "depends": ["$scope"]
 | 
			
		||||
             }
 | 
			
		||||
           ],
 | 
			
		||||
            "representations": [
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "draggedEntry",
 | 
			
		||||
                    "templateUrl": "templates/entry.html"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "frameLayoutNotebook",
 | 
			
		||||
                    "templateUrl": "templates/frameLayoutNotebook.html"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "templates": [
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "annotate-snapshot",
 | 
			
		||||
                    "templateUrl": "templates/annotation.html"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "notificationTemplate",
 | 
			
		||||
                    "templateUrl": "templates/notifications.html"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "directives": [
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "mctSnapshot",
 | 
			
		||||
                    "implementation": MCTSnapshot,
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                        "$rootScope",
 | 
			
		||||
                        "$document",
 | 
			
		||||
                        "exportImageService",
 | 
			
		||||
                        "dialogService",
 | 
			
		||||
                        "notificationService"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "mctEntryDnd",
 | 
			
		||||
                    "implementation": MCTEntryDnd,
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                        "$rootScope",
 | 
			
		||||
                        "$compile",
 | 
			
		||||
                        "dndService",
 | 
			
		||||
                        "typeService",
 | 
			
		||||
                        "notificationService"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                 {
 | 
			
		||||
                    "key": "mctModalNotebook",
 | 
			
		||||
                    "implementation": MCTModalNotebook,
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                        "$document"
 | 
			
		||||
                    ]
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "actions": [
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "view-snapshot",
 | 
			
		||||
                    "implementation": ViewSnapshotAction,
 | 
			
		||||
                    "name": "View Snapshot",
 | 
			
		||||
                    "description": "View the large image in a modal",
 | 
			
		||||
                    "category": "embed",
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                      "$compile"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "annotate-snapshot",
 | 
			
		||||
                    "implementation": AnnotateSnapshotAction,
 | 
			
		||||
                    "name": "Annotate Snapshot",
 | 
			
		||||
                    "cssClass": "icon-pencil labeled",
 | 
			
		||||
                    "description": "Annotate embed's snapshot",
 | 
			
		||||
                    "category": "embed",
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                      "dialogService",
 | 
			
		||||
                      "dndService",
 | 
			
		||||
                      "$rootScope"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "remove-embed",
 | 
			
		||||
                    "implementation": RemoveEmbedAction,
 | 
			
		||||
                    "name": "Remove...",
 | 
			
		||||
                    "cssClass": "icon-trash labeled",
 | 
			
		||||
                    "description": "Remove this embed",
 | 
			
		||||
                    "category": [
 | 
			
		||||
                        "embed",
 | 
			
		||||
                        "embed-no-snap"
 | 
			
		||||
                    ],
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                      "dialogService"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "remove-snapshot",
 | 
			
		||||
                    "implementation": RemoveSnapshotAction,
 | 
			
		||||
                    "name": "Remove Snapshot",
 | 
			
		||||
                    "cssClass": "icon-trash labeled",
 | 
			
		||||
                    "description": "Remove Snapshot of the embed",
 | 
			
		||||
                    "category": "embed",
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                      "dialogService"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "create-snapshot",
 | 
			
		||||
                    "implementation": CreateSnapshotAction,
 | 
			
		||||
                    "name": "Create Snapshot",
 | 
			
		||||
                    "description": "Create a snapshot for the embed",
 | 
			
		||||
                    "category": "embed-no-snap",
 | 
			
		||||
                    "priority": "preferred",
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                      "$compile"
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "notebook-new-entry",
 | 
			
		||||
                    "implementation": newEntryAction,
 | 
			
		||||
                    "name": "New Notebook Entry",
 | 
			
		||||
                    "cssClass": "icon-notebook labeled",
 | 
			
		||||
                    "description": "Add a new entry",
 | 
			
		||||
                    "category": [
 | 
			
		||||
                        "contextual",
 | 
			
		||||
                         "view-control"
 | 
			
		||||
                    ],
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                      "$compile",
 | 
			
		||||
                      "$rootScope",
 | 
			
		||||
                      "dialogService",
 | 
			
		||||
                      "notificationService",
 | 
			
		||||
                      "linkService"
 | 
			
		||||
                    ],
 | 
			
		||||
                    "priority": "preferred"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "licenses": [
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "painterro",
 | 
			
		||||
                    "version": "4.1.0",
 | 
			
		||||
                    "author": "Mike Bostock",
 | 
			
		||||
                    "description": "D3 (or D3.js) is a JavaScript library for visualizing data using web standards. D3 helps you bring data to life using SVG, Canvas and HTML. D3 combines powerful visualization and interaction techniques with a data-driven approach to DOM manipulation, giving you the full capabilities of modern browsers and the freedom to design the right visual interface for your data.",
 | 
			
		||||
                    "website": "https://d3js.org/",
 | 
			
		||||
                    "copyright": "Copyright 2010-2016 Mike Bostock",
 | 
			
		||||
                    "license": "BSD-3-Clause",
 | 
			
		||||
                    "link": "https://github.com/d3/d3/blob/master/LICENSE"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "capabilities": [
 | 
			
		||||
                {
 | 
			
		||||
                    "key": "notebook",
 | 
			
		||||
                    "name": "Notebook Capability",
 | 
			
		||||
                    "description": "Provides a capability for looking for a notebook domain object",
 | 
			
		||||
                    "implementation": NotebookCapability,
 | 
			
		||||
                    "depends": [
 | 
			
		||||
                        "typeService"
 | 
			
		||||
                    ]
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "policies": [
 | 
			
		||||
                {
 | 
			
		||||
                    "category": "composition",
 | 
			
		||||
                    "implementation": CompositionPolicy,
 | 
			
		||||
                    "message": "Objects of this type cannot contain objects of that type."
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "category": "view",
 | 
			
		||||
                    "implementation": ViewPolicy
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "controls": [
 | 
			
		||||
              {
 | 
			
		||||
                  "key": "embed-control",
 | 
			
		||||
                  "templateUrl": "templates/controls/embedControl.html"
 | 
			
		||||
              },
 | 
			
		||||
               {
 | 
			
		||||
                  "key": "snapshot-select",
 | 
			
		||||
                  "templateUrl":  "templates/controls/snapSelect.html"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            "stylesheets": [
 | 
			
		||||
                {
 | 
			
		||||
                    "stylesheetUrl": "css/notebook.css"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "stylesheetUrl": "css/notebook-espresso.css",
 | 
			
		||||
                    "theme": "espresso"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "stylesheetUrl": "css/notebook-snow.css",
 | 
			
		||||
                    "theme": "snow"
 | 
			
		||||
                }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										334
									
								
								platform/features/notebook/res/sass/_notebook-base.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										334
									
								
								platform/features/notebook/res/sass/_notebook-base.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,334 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2016, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
.w-notebook {
 | 
			
		||||
    //@include test($a: 0.1);
 | 
			
		||||
    //display: flex;
 | 
			
		||||
    //flex-direction: column;
 | 
			
		||||
    //flex-wrap: nowrap;
 | 
			
		||||
    font-size: 0.8rem;
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 0px;
 | 
			
		||||
    right: 0px;
 | 
			
		||||
    bottom: 0px;
 | 
			
		||||
    left: 0px;
 | 
			
		||||
    width: auto;
 | 
			
		||||
    height: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.mct-notebook {
 | 
			
		||||
    div.example-button-group {
 | 
			
		||||
        margin-top: 12px;
 | 
			
		||||
        margin-bottom: 12px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .example-button-group a {
 | 
			
		||||
        padding: 3px;
 | 
			
		||||
        margin: 3px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .example-button-group a.selected {
 | 
			
		||||
        border: 1px gray solid;
 | 
			
		||||
        border-radius: 3px;
 | 
			
		||||
        background: #444;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .example-task-completed .example-task-description {
 | 
			
		||||
        text-decoration: line-through;
 | 
			
		||||
        opacity: 0.75;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .example-task-description.selected {
 | 
			
		||||
        background: #46A;
 | 
			
		||||
        border-radius: 3px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .example-message {
 | 
			
		||||
        font-style: italic;
 | 
			
		||||
    } 
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.notebook-new-entry {
 | 
			
		||||
    height: 350px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.l-notebook-drag-area {
 | 
			
		||||
    padding: 10px 0;
 | 
			
		||||
    //margin: 15px 0;
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    .glyph{
 | 
			
		||||
        flex: 1 1 0;
 | 
			
		||||
        &:before{
 | 
			
		||||
            left:10px;
 | 
			
		||||
            position: relative;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    p {
 | 
			
		||||
        flex: 4 1 0;
 | 
			
		||||
        margin: 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.frame{
 | 
			
		||||
   .icon-notebook{
 | 
			
		||||
        margin-right: 5px;
 | 
			
		||||
    } 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.overlay.l-dialog .title{
 | 
			
		||||
    white-space: normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.w-notebook-entries {
 | 
			
		||||
    //@include test($a: 0.1);
 | 
			
		||||
    padding-right: $interiorMarginSm;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    overflow-x: hidden;
 | 
			
		||||
    overflow-y: scroll;
 | 
			
		||||
    .t-entries-list {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.l-notebook-entry {
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    margin-bottom: $interiorMarginSm;
 | 
			
		||||
    padding: $interiorMargin $interiorMarginLg;
 | 
			
		||||
 | 
			
		||||
    &:hover {
 | 
			
		||||
        .entry-content .entry-text{
 | 
			
		||||
            .unedited-text{
 | 
			
		||||
                //display: none;
 | 
			
		||||
            }
 | 
			
		||||
            textarea{
 | 
			
		||||
                //background-color: $colorBodyBg;
 | 
			
		||||
                min-height: 50px;
 | 
			
		||||
                height: auto;
 | 
			
		||||
                resize: none;
 | 
			
		||||
                //display: block;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    &.active {
 | 
			
		||||
        background-color: rgba(red, 0.5);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .entry-time{
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .entry-content{
 | 
			
		||||
        //flex: 4 1 0;
 | 
			
		||||
        //padding: 0 15px;
 | 
			
		||||
        //min-height: 65px;
 | 
			
		||||
        .entry-embeds{
 | 
			
		||||
            flex-wrap: wrap;
 | 
			
		||||
        }
 | 
			
		||||
        .snap-thumb {
 | 
			
		||||
            cursor: pointer;
 | 
			
		||||
        }
 | 
			
		||||
        .entry-text {
 | 
			
		||||
            display: block;
 | 
			
		||||
 | 
			
		||||
            .s-entry-input {
 | 
			
		||||
                background-color: rgba(black, 0.1);
 | 
			
		||||
                padding: 2px;
 | 
			
		||||
                &:active {
 | 
			
		||||
                    background-color: red;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .s-entry-input {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    .entry-delete{
 | 
			
		||||
        //padding: 0 15px;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.l-entry-embed {
 | 
			
		||||
    $m: $interiorMargin;
 | 
			
		||||
    margin: 0 $m $m 0;
 | 
			
		||||
    position: relative;
 | 
			
		||||
 | 
			
		||||
    &:not(.has-snapshot) {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.has-snapshot {
 | 
			
		||||
        &:before {
 | 
			
		||||
            position: absolute;
 | 
			
		||||
            top: $m;
 | 
			
		||||
            left: $m;
 | 
			
		||||
            text-shadow: rgba(black, 0.7) 0 1px 5px;
 | 
			
		||||
            z-index: 2;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    .snap-thumb {
 | 
			
		||||
        $d: 50px;
 | 
			
		||||
        width: $d;
 | 
			
		||||
        height: $d;
 | 
			
		||||
        border-radius: 5px;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        img {
 | 
			
		||||
            height: 100%;
 | 
			
		||||
            width: 100%;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .embed-info {
 | 
			
		||||
        margin-left: $interiorMargin;
 | 
			
		||||
        .embed-title {
 | 
			
		||||
            font-weight: bold;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.t-contents,
 | 
			
		||||
.snap-annotation {
 | 
			
		||||
    // Todo: don't write this to t-contents, add a l- class
 | 
			
		||||
    overflow: hidden;
 | 
			
		||||
    img{
 | 
			
		||||
        width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.notebook-filters{
 | 
			
		||||
    .select{
 | 
			
		||||
        margin-left: 10px;
 | 
			
		||||
        border-radius: 5px;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/********************************************* SNAPSHOT VIEWING IN OVERLAY CONTEXT */
 | 
			
		||||
.view-header {
 | 
			
		||||
    .view-date{
 | 
			
		||||
        float: right;
 | 
			
		||||
    }
 | 
			
		||||
    .view-snap-info{
 | 
			
		||||
        float: left;
 | 
			
		||||
    }
 | 
			
		||||
    .s-button{
 | 
			
		||||
        clear: both;
 | 
			
		||||
        float: left;
 | 
			
		||||
        margin-top: 10px;
 | 
			
		||||
        font-size: 14px;
 | 
			
		||||
    }
 | 
			
		||||
    .view-info{
 | 
			
		||||
        float: left;
 | 
			
		||||
        .embed-icon{
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
        }
 | 
			
		||||
        .embed-title{
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
            margin: 0 5px 0 10px;
 | 
			
		||||
        }
 | 
			
		||||
        .object-header{
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ptro-color-main{
 | 
			
		||||
    top: 0;
 | 
			
		||||
    z-index: 10;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    height: auto;
 | 
			
		||||
    min-height: 41px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ptro-wrapper{
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    top: 40px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/********************************************* New Notebook Entry from Large View overlay */
 | 
			
		||||
.notebook-button-container {
 | 
			
		||||
    //margin-right: $interiorMargin; // TODO: change to apply margin-left to view switcher button in Large View
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/********************************************* NO IDEA WHAT THERE ARE APPLYING TO */
 | 
			
		||||
.context-available {
 | 
			
		||||
    outline: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.menu-element.menu-view{
 | 
			
		||||
    z-index: 999;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.overlay.l-dialog .abs.editor{
 | 
			
		||||
    padding-right: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.overlay.l-dialog .outer-holder.annotation-dialog{
 | 
			
		||||
    width: 90%;
 | 
			
		||||
    height: 90%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.snap-annotation-wrapper{
 | 
			
		||||
    padding-top: 40px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.t-console {
 | 
			
		||||
    // Temp console-like reporting element
 | 
			
		||||
    max-height: 200px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*@media screen and (max-width: 1024px){
 | 
			
		||||
    .w-notebook-entries{
 | 
			
		||||
        font-size: 14px;
 | 
			
		||||
    }
 | 
			
		||||
    .l-message{
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        .type-icon.message-type{
 | 
			
		||||
            margin: 0 auto 40px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .top-bar .title{
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            white-space: normal;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .ptro-color-main{
 | 
			
		||||
        height: 80px;
 | 
			
		||||
        .tool-controls,>div>span:not(.ptro-info){
 | 
			
		||||
            float: left;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .ptro-wrapper{
 | 
			
		||||
        top: 80px;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media screen and (max-width: 768px){
 | 
			
		||||
    .ptro-bar>div {
 | 
			
		||||
        white-space: normal;
 | 
			
		||||
    }
 | 
			
		||||
}*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										59
									
								
								platform/features/notebook/res/sass/_notebook-thematic.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								platform/features/notebook/res/sass/_notebook-thematic.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
.s-notebook-entry {
 | 
			
		||||
    background-color: rgba($colorBodyFg, 0.1);
 | 
			
		||||
    border-radius: $basicCr;
 | 
			
		||||
    &:hover {
 | 
			
		||||
        background-color: rgba($colorBodyFg, 0.2);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .entry-time{
 | 
			
		||||
        color: rgba($colorBodyFg, 0.5);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.l-notebook-drag-area {
 | 
			
		||||
    border: 1px dashed $colorKey;
 | 
			
		||||
    border-radius: $controlCr;
 | 
			
		||||
    &.drag-active{
 | 
			
		||||
        border-color: $colorKey;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.l-entry-embed {
 | 
			
		||||
    &.has-snapshot {
 | 
			
		||||
        &:before {
 | 
			
		||||
            color: $colorBodyFg;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.snapshot {
 | 
			
		||||
    background: $colorBodyBg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.snap-thumb {
 | 
			
		||||
    border: 1px solid $colorInteriorBorder;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								platform/features/notebook/res/sass/notebook-espresso.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								platform/features/notebook/res/sass/notebook-espresso.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
$output-bourbon-deprecation-warnings: false;
 | 
			
		||||
@import "bourbon";
 | 
			
		||||
 | 
			
		||||
@import "../../../../commonUI/general/res/sass/constants";
 | 
			
		||||
@import "../../../../commonUI/general/res/sass/mixins";
 | 
			
		||||
@import "../../../../commonUI/general/res/sass/glyphs";
 | 
			
		||||
@import "../../../../commonUI/themes/espresso/res/sass/constants";
 | 
			
		||||
@import "../../../../commonUI/themes/espresso/res/sass/mixins";
 | 
			
		||||
//@import "constants";
 | 
			
		||||
//@import "constants-espresso";
 | 
			
		||||
@import "notebook-thematic";
 | 
			
		||||
							
								
								
									
										32
									
								
								platform/features/notebook/res/sass/notebook-snow.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								platform/features/notebook/res/sass/notebook-snow.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
$output-bourbon-deprecation-warnings: false;
 | 
			
		||||
@import "bourbon";
 | 
			
		||||
 | 
			
		||||
@import "../../../../commonUI/general/res/sass/constants";
 | 
			
		||||
@import "../../../../commonUI/general/res/sass/mixins";
 | 
			
		||||
@import "../../../../commonUI/general/res/sass/glyphs";
 | 
			
		||||
@import "../../../../commonUI/themes/snow/res/sass/constants";
 | 
			
		||||
@import "../../../../commonUI/themes/snow/res/sass/mixins";
 | 
			
		||||
//@import "constants";
 | 
			
		||||
//@import "constants-snow";
 | 
			
		||||
@import "notebook-thematic";
 | 
			
		||||
							
								
								
									
										26
									
								
								platform/features/notebook/res/sass/notebook.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								platform/features/notebook/res/sass/notebook.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2015, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
$output-bourbon-deprecation-warnings: false;
 | 
			
		||||
@import "bourbon";
 | 
			
		||||
@import "../../../../commonUI/general/res/sass/constants";
 | 
			
		||||
@import "../../../../commonUI/general/res/sass/mixins";
 | 
			
		||||
@import "notebook-base";
 | 
			
		||||
							
								
								
									
										2
									
								
								platform/features/notebook/res/templates/annotation.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								platform/features/notebook/res/templates/annotation.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
<div class="snap-annotation" id="snap-annotation" ng-init="ngModel.tracker()">
 | 
			
		||||
</div>
 | 
			
		||||
@@ -0,0 +1,51 @@
 | 
			
		||||
<!--
 | 
			
		||||
 Open MCT, Copyright (c) 2009-2016, United States Government
 | 
			
		||||
 as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 Administration. All rights reserved.
 | 
			
		||||
 | 
			
		||||
 Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 You may obtain a copy of the License at
 | 
			
		||||
 http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 | 
			
		||||
 Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 License for the specific language governing permissions and limitations
 | 
			
		||||
 under the License.
 | 
			
		||||
 | 
			
		||||
 Open MCT includes source code licensed under additional open source
 | 
			
		||||
 licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 this source code distribution or the Licensing information page available
 | 
			
		||||
 at runtime from the About dialog for additional information.
 | 
			
		||||
-->
 | 
			
		||||
<!--
 | 
			
		||||
This element appears in the overlay dialog when initiating a new Notebook Entry from a view's Notebook button -->
 | 
			
		||||
<div class='form-control'>
 | 
			
		||||
    <ng-form name="mctControl">
 | 
			
		||||
        <div class='fields' ng-controller="NewEntryController">
 | 
			
		||||
            <div class="l-flex-row new-notebook-entry-embed l-entry-embed {{cssClass}}"
 | 
			
		||||
                 ng-class="{ 'has-snapshot' : snapToggle }">
 | 
			
		||||
                <div class="holder flex-elem snap-thumb"
 | 
			
		||||
                    ng-if="snapToggle">
 | 
			
		||||
                    <img ng-src="{{snapshot.src}}" alt="{{snapshot.modified}}">
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="holder flex-elem embed-info">
 | 
			
		||||
                    <div class="embed-title">{{objectName}}</div>
 | 
			
		||||
                    <div class="embed-date"
 | 
			
		||||
                         ng-if="snapToggle">{{snapshot.modified| date:'yyyy-MM-dd HH:mm:ss'}}</div>
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
                <div class="holder flex-elem annotate-new"
 | 
			
		||||
                     ng-if="snapToggle">
 | 
			
		||||
                    <a class="s-button flex-elem icon-pencil "
 | 
			
		||||
                       title="Annotate this snapshot"
 | 
			
		||||
                       ng-click="annotateSnapshot()">
 | 
			
		||||
                        <span class="title-label">Annotate</span>
 | 
			
		||||
                    </a>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </ng-form>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -0,0 +1,30 @@
 | 
			
		||||
<!--
 | 
			
		||||
 Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 Administration. All rights reserved.
 | 
			
		||||
 | 
			
		||||
 Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 You may obtain a copy of the License at
 | 
			
		||||
 http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 | 
			
		||||
 Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 License for the specific language governing permissions and limitations
 | 
			
		||||
 under the License.
 | 
			
		||||
 | 
			
		||||
 Open MCT includes source code licensed under additional open source
 | 
			
		||||
 licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 this source code distribution or the Licensing information page available
 | 
			
		||||
 at runtime from the About dialog for additional information.
 | 
			
		||||
-->
 | 
			
		||||
<div class='form-control select' ng-controller="selectSnapshotController">
 | 
			
		||||
    <select
 | 
			
		||||
            ng-model="selectModel"
 | 
			
		||||
            ng-options="opt.value as opt.name for opt in options"
 | 
			
		||||
            ng-required="ngRequired"
 | 
			
		||||
            name="mctControl">
 | 
			
		||||
        <!-- <option value="" ng-show="!ngModel[field]">- Select One -</option> -->
 | 
			
		||||
    </select>
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										38
									
								
								platform/features/notebook/res/templates/entry.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								platform/features/notebook/res/templates/entry.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
<!--
 | 
			
		||||
 Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 Administration. All rights reserved.
 | 
			
		||||
 | 
			
		||||
 Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 You may obtain a copy of the License at
 | 
			
		||||
 http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 | 
			
		||||
 Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 License for the specific language governing permissions and limitations
 | 
			
		||||
 under the License.
 | 
			
		||||
 | 
			
		||||
 Open MCT includes source code licensed under additional open source
 | 
			
		||||
 licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 this source code distribution or the Licensing information page available
 | 
			
		||||
 at runtime from the About dialog for additional information.
 | 
			
		||||
-->
 | 
			
		||||
<div class="frame snap-frame frame-template t-frame-inner abs t-object-type-{{ representation.selected.key }}">
 | 
			
		||||
    <div class="abs object-browse-bar l-flex-row">
 | 
			
		||||
        <div class="btn-bar right l-flex-row flex-elem flex-justify-end flex-fixed">
 | 
			
		||||
            <mct-representation
 | 
			
		||||
                    key="'switcher'"
 | 
			
		||||
                    ng-model="representation"
 | 
			
		||||
                    mct-object="domainObject">
 | 
			
		||||
            </mct-representation>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="abs object-holder" data-entry = "{{parameters.entry}}" data-embed = "{{parameters.embed}}" mct-snapshot ng-if="representation.selected.key">
 | 
			
		||||
        <mct-representation
 | 
			
		||||
                key="representation.selected.key"
 | 
			
		||||
                mct-object="representation.selected.key && domainObject">
 | 
			
		||||
        </mct-representation>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -0,0 +1,54 @@
 | 
			
		||||
<!--
 | 
			
		||||
 Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 Administration. All rights reserved.
 | 
			
		||||
 | 
			
		||||
 Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 You may obtain a copy of the License at
 | 
			
		||||
 http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 | 
			
		||||
 Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 License for the specific language governing permissions and limitations
 | 
			
		||||
 under the License.
 | 
			
		||||
 | 
			
		||||
 Open MCT includes source code licensed under additional open source
 | 
			
		||||
 licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 this source code distribution or the Licensing information page available
 | 
			
		||||
 at runtime from the About dialog for additional information.
 | 
			
		||||
-->
 | 
			
		||||
<div class="frame frame-template t-frame-inner abs t-object-type-{{ representation.selected.key }}">
 | 
			
		||||
    <div class="abs object-browse-bar l-flex-row">
 | 
			
		||||
        <div class="left flex-elem l-flex-row grows">
 | 
			
		||||
            <mct-representation
 | 
			
		||||
                    key="'object-header-frame'"
 | 
			
		||||
                    mct-object="domainObject"
 | 
			
		||||
                    class="l-flex-row flex-elem object-header grows">
 | 
			
		||||
            </mct-representation>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="btn-bar right l-flex-row flex-elem flex-justify-end flex-fixed">
 | 
			
		||||
            <mct-representation
 | 
			
		||||
                    key="'switcher'"
 | 
			
		||||
                    ng-model="representation"
 | 
			
		||||
                    mct-object="domainObject">
 | 
			
		||||
            </mct-representation>
 | 
			
		||||
            <a class="s-button icon-notebook t-btn-view-large"
 | 
			
		||||
               title="New Notebook Entry"
 | 
			
		||||
               ng-if="parameters"
 | 
			
		||||
               ng-click="ngModel()">
 | 
			
		||||
            </a>
 | 
			
		||||
            <a class="s-button icon-expand t-btn-view-large"
 | 
			
		||||
               title="View large"
 | 
			
		||||
               mct-modal-notebook>
 | 
			
		||||
            </a>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="abs object-holder">
 | 
			
		||||
        <mct-representation
 | 
			
		||||
                key="representation.selected.key"
 | 
			
		||||
                mct-object="representation.selected.key && domainObject">
 | 
			
		||||
        </mct-representation>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										84
									
								
								platform/features/notebook/res/templates/layoutNotebook.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								platform/features/notebook/res/templates/layoutNotebook.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
<!--
 | 
			
		||||
 Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 Administration. All rights reserved.
 | 
			
		||||
 | 
			
		||||
 Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 You may obtain a copy of the License at
 | 
			
		||||
 http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 | 
			
		||||
 Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 License for the specific language governing permissions and limitations
 | 
			
		||||
 under the License.
 | 
			
		||||
 | 
			
		||||
 Open MCT includes source code licensed under additional open source
 | 
			
		||||
 licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 this source code distribution or the Licensing information page available
 | 
			
		||||
 at runtime from the About dialog for additional information.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<div class="abs l-layout"
 | 
			
		||||
     ng-controller="LayoutController as controller"
 | 
			
		||||
     ng-click="controller.clearSelection()">
 | 
			
		||||
 | 
			
		||||
    <!-- Background grid -->
 | 
			
		||||
    <div class="l-grid-holder" ng-click="controller.clearSelection()">
 | 
			
		||||
        <div class="l-grid l-grid-x"
 | 
			
		||||
             ng-if="!controller.getGridSize()[0] < 3"
 | 
			
		||||
             ng-style="{ 'background-size': controller.getGridSize() [0] + 'px 100%' }"></div>
 | 
			
		||||
        <div class="l-grid l-grid-y"
 | 
			
		||||
             ng-if="!controller.getGridSize()[1] < 3"
 | 
			
		||||
             ng-style="{ 'background-size': '100% ' + controller.getGridSize() [1] + 'px' }"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <div class='abs frame t-frame-outer child-frame panel s-selectable s-moveable s-hover-border'
 | 
			
		||||
         ng-class="{ 'no-frame': !controller.hasFrame(childObject), 's-selected':controller.selected(childObject) }"
 | 
			
		||||
         ng-repeat="childObject in composition"
 | 
			
		||||
         ng-click="controller.select($event, childObject.getId())"
 | 
			
		||||
         ng-style="controller.getFrameStyle(childObject.getId())">
 | 
			
		||||
 | 
			
		||||
         <div ng-controller="LayoutNotebookController as controller">
 | 
			
		||||
            <mct-representation key="'frameLayoutNotebook'"
 | 
			
		||||
                            class="t-rep-frame holder contents abs"
 | 
			
		||||
                            parameters = "hasNotebookAction"
 | 
			
		||||
                            ng-model="newNotebook"
 | 
			
		||||
                            mct-object="childObject">
 | 
			
		||||
            </mct-representation>
 | 
			
		||||
         </div>
 | 
			
		||||
        
 | 
			
		||||
        <!-- Drag handles -->
 | 
			
		||||
        <span class="abs t-edit-handle-holder s-hover-border" ng-if="controller.selected(childObject)">
 | 
			
		||||
            <span class="edit-handle edit-move"
 | 
			
		||||
                  mct-drag-down="controller.startDrag(childObject.getId(), [1,1], [0,0])"
 | 
			
		||||
                  mct-drag="controller.continueDrag(delta)"
 | 
			
		||||
                  mct-drag-up="controller.endDrag()">
 | 
			
		||||
            </span>
 | 
			
		||||
 | 
			
		||||
            <span class="edit-corner edit-resize-nw"
 | 
			
		||||
                  mct-drag-down="controller.startDrag(childObject.getId(), [1,1], [-1,-1])"
 | 
			
		||||
                  mct-drag="controller.continueDrag(delta)"
 | 
			
		||||
                  mct-drag-up="controller.endDrag()">
 | 
			
		||||
            </span>
 | 
			
		||||
            <span class="edit-corner edit-resize-ne"
 | 
			
		||||
                  mct-drag-down="controller.startDrag(childObject.getId(), [0,1], [1,-1])"
 | 
			
		||||
                  mct-drag="controller.continueDrag(delta)"
 | 
			
		||||
                  mct-drag-up="controller.endDrag()">
 | 
			
		||||
            </span>
 | 
			
		||||
            <span class="edit-corner edit-resize-sw"
 | 
			
		||||
                  mct-drag-down="controller.startDrag(childObject.getId(), [1,0], [-1,1])"
 | 
			
		||||
                  mct-drag="controller.continueDrag(delta)"
 | 
			
		||||
                  mct-drag-up="controller.endDrag()">
 | 
			
		||||
            </span>
 | 
			
		||||
            <span class="edit-corner edit-resize-se"
 | 
			
		||||
                  mct-drag-down="controller.startDrag(childObject.getId(), [0,0], [1,1])"
 | 
			
		||||
                  mct-drag="controller.continueDrag(delta)"
 | 
			
		||||
                  mct-drag-up="controller.endDrag()">
 | 
			
		||||
            </span>
 | 
			
		||||
        </span>
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										132
									
								
								platform/features/notebook/res/templates/notebook.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								platform/features/notebook/res/templates/notebook.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,132 @@
 | 
			
		||||
<div ng-controller="NotebookController as controller" class="mct-notebook w-notebook l-flex-col">
 | 
			
		||||
    <div class="l-notebook-head holder l-flex-row flex-elem">
 | 
			
		||||
        <div class="l-flex-row holder holder-search">
 | 
			
		||||
            <div class="search-bar flex-elem l-flex-row"
 | 
			
		||||
                   ng-class="{ holder: !(entrySearch === '' || entrySearch === undefined) }">
 | 
			
		||||
                  <div class="holder flex-elem grows">
 | 
			
		||||
                      <input class="search-input"
 | 
			
		||||
                             type="text" tabindex="10000"
 | 
			
		||||
                             ng-model="entrySearch"
 | 
			
		||||
                             ng-keyup="controller.search()"/>
 | 
			
		||||
                      <a class="clear-icon clear-input icon-x-in-circle"
 | 
			
		||||
                         ng-class="{show: !(entrySearch === '' || entrySearch === undefined)}"
 | 
			
		||||
                         ng-click="entrySearch = ''; controller.search()"></a>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <a class="holder s-button flex-elem btn-cancel"
 | 
			
		||||
                     ng-show="!(entrySearch === '' || entrySearch === undefined)"
 | 
			
		||||
                     ng-click="entrySearch = ''; ngModel.checkAll = true; menuController.checkAll(); controller.search()">
 | 
			
		||||
                      Cancel</a>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
        <div class="notebook-filters right l-flex-row flex-elem grows flex-justify-end">
 | 
			
		||||
            <div class="select">
 | 
			
		||||
                <select ng-model="showTime">
 | 
			
		||||
                    <option value="0" selected="selected">Show all</option>
 | 
			
		||||
                    <option value="1">Last Hour</option>
 | 
			
		||||
                    <option value="8">Last 8 Hours</option>
 | 
			
		||||
                    <option value="24">Last 24 Hours</option>
 | 
			
		||||
                </select>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="select">
 | 
			
		||||
                <select ng-model="sortEntries">
 | 
			
		||||
                    <option value="-createdOn" selected="selected">Newest first</option>
 | 
			
		||||
                    <option value="createdOn">Oldest first</option>
 | 
			
		||||
                </select>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!--  drag area -->
 | 
			
		||||
    <div class="holder flex-elem l-flex-row l-notebook-drag-area icon-plus" ng-click="newEntry($event)" id="newEntry" mct-entry-dnd>
 | 
			
		||||
        <span class="label">To start a new entry, click here or drag and drop any object</span>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- entries -->
 | 
			
		||||
    <div class="holder flex-elem grows w-notebook-entries t-entries-list" ng-mouseover="handleActive()">
 | 
			
		||||
        <ul>
 | 
			
		||||
            <li class="l-flex-row l-notebook-entry s-notebook-entry"
 | 
			
		||||
              id="{{'entry_'+ entry.id}}"
 | 
			
		||||
              ng-if="hoursFilter(showTime,entry.createdOn)"
 | 
			
		||||
              ng-repeat="entry in model.entries | filter:entrySearch | orderBy: sortEntries track by $index"
 | 
			
		||||
              ng-init="$last && finished(model.entries)"
 | 
			
		||||
              mct-entry-dnd>
 | 
			
		||||
            <div class="holder flex-elem entry-time">
 | 
			
		||||
                <span>{{entry.createdOn | date:'yyyy-MM-dd'}}</span>
 | 
			
		||||
                <span>{{entry.createdOn | date:'HH:mm:ss'}}</span>
 | 
			
		||||
                <!--<div>{{'entry_'+entry.id}}</div>-->
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="holder flex-elem l-flex-col grows entry-content">
 | 
			
		||||
                <div class="holder flex-elem entry-text">
 | 
			
		||||
                    <!--<div>Rows: {{parseText(entry.text).length}} Chars: {{entry.text.length}}</div>
 | 
			
		||||
                    <div class="unedited-text">
 | 
			
		||||
                        <p ng-repeat="line in parseText(entry.text) track by $index">{{line}}</p>
 | 
			
		||||
                    </div>-->
 | 
			
		||||
                    <div contenteditable="true"
 | 
			
		||||
                        ng-blur="textBlur($event, entry.id)"
 | 
			
		||||
                        ng-focus="textFocus($event, entry.id)"
 | 
			
		||||
                        ng-model="entry.text"
 | 
			
		||||
                        placeholder="Enter text here"
 | 
			
		||||
                        class="t-entry-input s-entry-input">
 | 
			
		||||
                        {{entry.text}}
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <!-- embeds -->
 | 
			
		||||
                <div class="holder flex-elem entry-embeds l-flex-row">
 | 
			
		||||
                    <div class="l-flex-row l-entry-embed {{embed.cssClass}}"
 | 
			
		||||
                         ng-repeat="embed in entry.embeds track by $index"
 | 
			
		||||
                         ng-class="{ 'has-snapshot' : embed.snapshot }"
 | 
			
		||||
                         id="{{embed.id}}">
 | 
			
		||||
                        <!--<div ng-class="embed.cssClass" class="embed-icon" ng-click="viewSnapshot($event,embed.snapshot.src,embed.id,entry.createdOn,this,embed)"></div>-->
 | 
			
		||||
                        <div class="snap-thumb"
 | 
			
		||||
                             ng-if="embed.snapshot"
 | 
			
		||||
                             ng-click="viewSnapshot($event,embed.snapshot.src,embed.id,entry.createdOn,this,embed)">
 | 
			
		||||
                            <img ng-src="{{embed.snapshot.src}}" src="//:0" alt="{{embed.id}}" >
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="embed-info l-flex-col">
 | 
			
		||||
                            <div class="embed-title object-header">
 | 
			
		||||
                                <a ng-click='navigate($event,embed.type)'>{{embed.name}}</a>
 | 
			
		||||
                                <a class='context-available' ng-click='openMenu($event,embed.type)'></a>
 | 
			
		||||
                            </div>
 | 
			
		||||
                            <div class="hide-menu" ng-show="false">
 | 
			
		||||
                                <div class="menu-element context-menu-wrapper mobile-disable-select">
 | 
			
		||||
                                    <div class="menu context-menu">
 | 
			
		||||
                                        <ul>
 | 
			
		||||
                                            <li ng-repeat="menu in menuEmbed"
 | 
			
		||||
                                                ng-click="menu.perform($event,embed.snapshot.src,embed.id,entry.createdOn,this,embed)"
 | 
			
		||||
                                                title="{{menu.getMetadata().description}}"
 | 
			
		||||
                                                class="{{menu.getMetadata().cssClass}}"
 | 
			
		||||
                                                ng-if="embed.snapshot">
 | 
			
		||||
                                                {{menu.getMetadata().name}}
 | 
			
		||||
                                            </li>
 | 
			
		||||
                                            <li ng-repeat="menu in menuEmbedNoSnap"
 | 
			
		||||
                                                ng-click="menu.perform($event,embed.snapshot.src,embed.id,entry.createdOn,this)"
 | 
			
		||||
                                                title="{{menu.getMetadata().description}}"
 | 
			
		||||
                                                class="{{menu.getMetadata().cssClass}}"
 | 
			
		||||
                                                ng-if="!embed.snapshot">
 | 
			
		||||
                                                {{menu.getMetadata().name}}
 | 
			
		||||
                                            </li>
 | 
			
		||||
                                            <li ng-repeat="menu in embedActions"
 | 
			
		||||
                                                ng-click="menu.perform()"
 | 
			
		||||
                                                title="{{menu.name}}"
 | 
			
		||||
                                                class="{{menu.cssClass}}">
 | 
			
		||||
                                                {{menu.name}}
 | 
			
		||||
                                            </li>
 | 
			
		||||
                                        </ul>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </div>
 | 
			
		||||
                            <div class="embed-date"
 | 
			
		||||
                                 ng-if="embed.snapshot">{{embed.id| date:'yyyy-MM-dd HH:mm:ss'}}</div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <!-- delete entry -->
 | 
			
		||||
            <div class="holder flex-elem entry-delete">
 | 
			
		||||
              <a class="s-icon-button icon-trash" title="Delete Entry" ng-click="deleteEntry($event)"></a>
 | 
			
		||||
            </div>
 | 
			
		||||
          </li>
 | 
			
		||||
        </ul>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
<span class="status block">
 | 
			
		||||
    <!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
 | 
			
		||||
    <span class="status-indicator icon-bell"></span>
 | 
			
		||||
    <span class="label">
 | 
			
		||||
        Notifications
 | 
			
		||||
    </span>
 | 
			
		||||
    <span class="count"></span>
 | 
			
		||||
</span>
 | 
			
		||||
							
								
								
									
										111
									
								
								platform/features/notebook/src/actions/AnnotateSnapshot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								platform/features/notebook/src/actions/AnnotateSnapshot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Module defining viewSnapshot (Originally NewWindowAction). Created by vwoeltje on 11/18/14.
 | 
			
		||||
 */
 | 
			
		||||
define(
 | 
			
		||||
    ["painterro", "zepto"],
 | 
			
		||||
    function (Painterro, $) {
 | 
			
		||||
 | 
			
		||||
        var ANNOTATION_STRUCT = {
 | 
			
		||||
            title: "Annotate Snapshot",
 | 
			
		||||
            template: "annotate-snapshot",
 | 
			
		||||
            options: [{
 | 
			
		||||
                name: "OK",
 | 
			
		||||
                key: "ok",
 | 
			
		||||
                description: "save annotation"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                name: "Cancel",
 | 
			
		||||
                key: "cancel",
 | 
			
		||||
                description: "cancel editing"
 | 
			
		||||
            }]
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        function AnnotateSnapshot(dialogService,dndService,$rootScope,context) {
 | 
			
		||||
            context = context || {};
 | 
			
		||||
 | 
			
		||||
            // Choose the object to be opened into a new tab
 | 
			
		||||
            this.domainObject = context.selectedObject || context.domainObject;
 | 
			
		||||
            this.dialogService = dialogService;
 | 
			
		||||
            this.dndService = dndService;
 | 
			
		||||
            this.$rootScope = $rootScope;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        AnnotateSnapshot.prototype.perform = function ($event,snapshot,embedId,entryId,$scope) {
 | 
			
		||||
 | 
			
		||||
            var DOMAIN_OBJECT = this.domainObject;
 | 
			
		||||
            var ROOTSCOPE = this.$rootScope;
 | 
			
		||||
 | 
			
		||||
            this.dialogService.getUserChoice(ANNOTATION_STRUCT)
 | 
			
		||||
                        .then(saveNotes);
 | 
			
		||||
 | 
			
		||||
            var painterro;
 | 
			
		||||
 | 
			
		||||
            var tracker = function () {
 | 
			
		||||
                $(document.body).find('.l-dialog .outer-holder').addClass('annotation-dialog');
 | 
			
		||||
                painterro = Painterro({
 | 
			
		||||
                    id: 'snap-annotation',
 | 
			
		||||
                    backgroundFillColor: '#eee',
 | 
			
		||||
                    hiddenTools: ['save', 'open', 'close','eraser'],
 | 
			
		||||
                    saveHandler: function (image, done) {
 | 
			
		||||
                        if (entryId && embedId) {
 | 
			
		||||
                            var elementPos = DOMAIN_OBJECT.model.entries.map(function (x) {
 | 
			
		||||
                                return x.createdOn;
 | 
			
		||||
                            }).indexOf(entryId);
 | 
			
		||||
                            var entryEmbeds = DOMAIN_OBJECT.model.entries[elementPos].embeds;
 | 
			
		||||
                            var embedPos = entryEmbeds.map(function (x) {
 | 
			
		||||
                                return x.id;
 | 
			
		||||
                            }).indexOf(embedId);
 | 
			
		||||
                            $scope.saveSnap(image.asBlob(), embedPos, elementPos);
 | 
			
		||||
                        }else {
 | 
			
		||||
                            ROOTSCOPE.snapshot = {'src': image.asDataURL('image/png'),
 | 
			
		||||
                                                  'modified': Date.now()};
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        done(true);
 | 
			
		||||
                    }
 | 
			
		||||
                }).show(snapshot);
 | 
			
		||||
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            ANNOTATION_STRUCT.model = {'tracker': tracker};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            function saveNotes(param) {
 | 
			
		||||
                if (param === 'ok') {
 | 
			
		||||
                    painterro.save();
 | 
			
		||||
                }else {
 | 
			
		||||
                    ROOTSCOPE.snapshot = "annotationCancelled";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return AnnotateSnapshot;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										65
									
								
								platform/features/notebook/src/actions/CreateSnapshot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								platform/features/notebook/src/actions/CreateSnapshot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
define(
 | 
			
		||||
    [],
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        var SNAPSHOT_TEMPLATE = '<mct-representation key="\'draggedEntry\'"' +
 | 
			
		||||
                                    'parameters="{entry:entryId,embed:embedId}"' +
 | 
			
		||||
                                    'class="t-rep-frame holder"' +
 | 
			
		||||
                                    'mct-object="selObj">' +
 | 
			
		||||
                                '</mct-representation>';
 | 
			
		||||
 | 
			
		||||
        function CreateSnapshot($compile,context) {
 | 
			
		||||
            context = context || {};
 | 
			
		||||
            this.domainObject = context.selectedObject || context.domainObject;
 | 
			
		||||
            this.context = context;
 | 
			
		||||
            this.$compile = $compile;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        CreateSnapshot.prototype.perform = function ($event,snapshot,embedId,entryId,$scope) {
 | 
			
		||||
            var compile = this.$compile;
 | 
			
		||||
            var model = this.domainObject.model;
 | 
			
		||||
            var elementPos = model.entries.map(function (x) {
 | 
			
		||||
                return x.createdOn;
 | 
			
		||||
            }).indexOf(entryId);
 | 
			
		||||
            var entryEmbeds = model.entries[elementPos].embeds;
 | 
			
		||||
            var embedPos = entryEmbeds.map(function (x) {
 | 
			
		||||
                return x.id;
 | 
			
		||||
            }).indexOf(embedId);
 | 
			
		||||
            var embedType = entryEmbeds[embedPos].type;
 | 
			
		||||
 | 
			
		||||
            $scope.getDomainObj(embedType).then(function (resp) {
 | 
			
		||||
                if (entryId >= 0 && embedId >= 0) {
 | 
			
		||||
                    $scope.selObj = resp[embedType];
 | 
			
		||||
                    $scope.entryId = elementPos;
 | 
			
		||||
                    $scope.embedId = embedPos;
 | 
			
		||||
                    compile(SNAPSHOT_TEMPLATE)($scope);
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return CreateSnapshot;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										191
									
								
								platform/features/notebook/src/actions/NewEntryContextual.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								platform/features/notebook/src/actions/NewEntryContextual.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,191 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
define(
 | 
			
		||||
    [],
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        var SNAPSHOT_TEMPLATE = '<mct-representation key="\'draggedEntry\'"' +
 | 
			
		||||
                                    'class="t-rep-frame holder"' +
 | 
			
		||||
                                    'mct-object="selObj">' +
 | 
			
		||||
                                '</mct-representation>';
 | 
			
		||||
 | 
			
		||||
        var NEW_TASK_FORM = {
 | 
			
		||||
            name: "Create a Notebook Entry",
 | 
			
		||||
            hint: "Please select one Notebook",
 | 
			
		||||
            sections: [{
 | 
			
		||||
                rows: [{
 | 
			
		||||
                    name: 'Entry',
 | 
			
		||||
                    key: 'entry',
 | 
			
		||||
                    control: 'textarea',
 | 
			
		||||
                    required: true,
 | 
			
		||||
                    "cssClass": "l-textarea-sm"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    name: 'Embed Type',
 | 
			
		||||
                    key: 'withSnapshot',
 | 
			
		||||
                    control: 'snapshot-select',
 | 
			
		||||
                    "options": [
 | 
			
		||||
                        {
 | 
			
		||||
                            "name": "Link and Snapshot",
 | 
			
		||||
                            "value": true
 | 
			
		||||
                        },
 | 
			
		||||
                        {
 | 
			
		||||
                            "name": "Link only",
 | 
			
		||||
                            "value": false
 | 
			
		||||
                        }
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    name: 'Embed',
 | 
			
		||||
                    key: 'embedObject',
 | 
			
		||||
                    control: 'embed-control'
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    name: 'Save in Notebook',
 | 
			
		||||
                    key: 'saveNotebook',
 | 
			
		||||
                    control: 'locator',
 | 
			
		||||
                    validate: validateLocation
 | 
			
		||||
                }]
 | 
			
		||||
            }]
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        function NewEntryContextual($compile,$rootScope,dialogService,notificationService,linkService,context) {
 | 
			
		||||
            context = context || {};
 | 
			
		||||
            this.domainObject = context.selectedObject || context.domainObject;
 | 
			
		||||
            this.dialogService = dialogService;
 | 
			
		||||
            this.notificationService = notificationService;
 | 
			
		||||
            this.linkService = linkService;
 | 
			
		||||
            this.$rootScope = $rootScope;
 | 
			
		||||
            this.$compile = $compile;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function validateLocation(newParentObj) {
 | 
			
		||||
            return newParentObj.model.type === 'notebook';
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        NewEntryContextual.prototype.perform = function () {
 | 
			
		||||
 | 
			
		||||
            var self = this;
 | 
			
		||||
            var domainObj = this.domainObject;
 | 
			
		||||
            var notification = this.notificationService;
 | 
			
		||||
            var dialogService = this.dialogService;
 | 
			
		||||
            var rootScope = this.$rootScope;
 | 
			
		||||
            rootScope.newEntryText = '';
 | 
			
		||||
            // Create the overlay element and add it to the document's body
 | 
			
		||||
            this.$rootScope.selObj = domainObj;
 | 
			
		||||
            this.$rootScope.selValue = "";
 | 
			
		||||
            var newScope = rootScope.$new();
 | 
			
		||||
            newScope.selObj = domainObj;
 | 
			
		||||
            newScope.selValue = "";
 | 
			
		||||
            this.$compile(SNAPSHOT_TEMPLATE)(newScope);
 | 
			
		||||
            //newScope.$destroy();
 | 
			
		||||
 | 
			
		||||
            this.$rootScope.$watch("snapshot", setSnapshot);
 | 
			
		||||
 | 
			
		||||
            function setSnapshot(value) {
 | 
			
		||||
                if (value === "annotationCancelled") {
 | 
			
		||||
                    rootScope.snapshot = rootScope.lastValue;
 | 
			
		||||
                    rootScope.lastValue = '';
 | 
			
		||||
                }else if (value && value !== rootScope.lastValue) {
 | 
			
		||||
                    var overlayModel = {
 | 
			
		||||
                        title: NEW_TASK_FORM.name,
 | 
			
		||||
                        message: NEW_TASK_FORM.message,
 | 
			
		||||
                        structure: NEW_TASK_FORM,
 | 
			
		||||
                        value: {'entry': rootScope.newEntryText || ""}
 | 
			
		||||
                    };
 | 
			
		||||
 | 
			
		||||
                    rootScope.currentDialog = overlayModel;
 | 
			
		||||
 | 
			
		||||
                    dialogService.getDialogResponse(
 | 
			
		||||
                        "overlay-dialog",
 | 
			
		||||
                        overlayModel,
 | 
			
		||||
                        function () {
 | 
			
		||||
                            return overlayModel.value;
 | 
			
		||||
                        }
 | 
			
		||||
                    ).then(addNewEntry);
 | 
			
		||||
 | 
			
		||||
                    rootScope.lastValue = value;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            function addNewEntry(options) {
 | 
			
		||||
                options.selectedModel = options.embedObject.getModel();
 | 
			
		||||
                options.cssClass = options.embedObject.getCapability('type').typeDef.cssClass;
 | 
			
		||||
                if (self.$rootScope.snapshot) {
 | 
			
		||||
                    options.snapshot = self.$rootScope.snapshot;
 | 
			
		||||
                    self.$rootScope.snapshot = undefined;
 | 
			
		||||
                }else {
 | 
			
		||||
                    options.snapshot = undefined;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!options.withSnapshot) {
 | 
			
		||||
                    options.snapshot = '';
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                createSnap(options);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            function createSnap(options) {
 | 
			
		||||
                options.saveNotebook.useCapability('mutation', function (model) {
 | 
			
		||||
                    var entries = model.entries;
 | 
			
		||||
                    var lastEntry = entries[entries.length - 1];
 | 
			
		||||
                    if (lastEntry === undefined || lastEntry.text || lastEntry.embeds) {
 | 
			
		||||
                        model.entries.push({
 | 
			
		||||
                            'createdOn': Date.now(),
 | 
			
		||||
                            'text': options.entry,
 | 
			
		||||
                            'embeds': [{'type': options.embedObject.getId(),
 | 
			
		||||
                                       'id': '' + Date.now(),
 | 
			
		||||
                                       'cssClass': options.cssClass,
 | 
			
		||||
                                       'name': options.selectedModel.name,
 | 
			
		||||
                                       'snapshot': options.snapshot
 | 
			
		||||
                                     }]
 | 
			
		||||
                        });
 | 
			
		||||
                    }else {
 | 
			
		||||
                        model.entries[entries.length - 1] = {
 | 
			
		||||
                            'createdOn': Date.now(),
 | 
			
		||||
                            'text': options.entry,
 | 
			
		||||
                            'embeds': [{'type': options.embedObject.getId(),
 | 
			
		||||
                                       'id': '' + Date.now(),
 | 
			
		||||
                                       'cssClass': options.cssClass,
 | 
			
		||||
                                       'name': options.selectedModel.name,
 | 
			
		||||
                                       'snapshot': options.snapshot
 | 
			
		||||
                                     }]
 | 
			
		||||
                        };
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                notification.info({
 | 
			
		||||
                    title: "Notebook Entry created"
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        NewEntryContextual.appliesTo = function (context) {
 | 
			
		||||
            var domainObject = context.domainObject;
 | 
			
		||||
            return domainObject && domainObject.hasCapability("notebook") &&
 | 
			
		||||
                domainObject.getCapability("notebook").isNotebook();
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return NewEntryContextual;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										72
									
								
								platform/features/notebook/src/actions/RemoveEmbed.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								platform/features/notebook/src/actions/RemoveEmbed.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
define(
 | 
			
		||||
    [],
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        function RemoveEmbed(dialogService,context) {
 | 
			
		||||
            context = context || {};
 | 
			
		||||
 | 
			
		||||
            this.domainObject = context.selectedObject || context.domainObject;
 | 
			
		||||
            this.dialogService = dialogService;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        RemoveEmbed.prototype.perform = function ($event,snapshot,embedId,entryId) {
 | 
			
		||||
            var DOMAIN_OBJ = this.domainObject;
 | 
			
		||||
            var errorDialog = this.dialogService.showBlockingMessage({
 | 
			
		||||
                severity: "error",
 | 
			
		||||
                title: "This action will permanently delete this Embed. Do you want to continue?",
 | 
			
		||||
                minimized: true, // want the notification to be minimized initially (don't show banner)
 | 
			
		||||
                options: [{
 | 
			
		||||
                    label: "OK",
 | 
			
		||||
                    callback: function () {
 | 
			
		||||
                        errorDialog.dismiss();
 | 
			
		||||
                        remove();
 | 
			
		||||
                    }
 | 
			
		||||
                },{
 | 
			
		||||
                    label: "Cancel",
 | 
			
		||||
                    callback: function () {
 | 
			
		||||
                        errorDialog.dismiss();
 | 
			
		||||
                    }
 | 
			
		||||
                }]
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            function remove() {
 | 
			
		||||
                DOMAIN_OBJ.useCapability('mutation', function (model) {
 | 
			
		||||
                    var elementPos = model.entries.map(function (x) {
 | 
			
		||||
                        return x.createdOn;
 | 
			
		||||
                    }).indexOf(entryId);
 | 
			
		||||
                    var entryEmbeds = model.entries[elementPos].embeds;
 | 
			
		||||
                    var embedPos = entryEmbeds.map(function (x) {
 | 
			
		||||
                        return x.id;
 | 
			
		||||
                    }).indexOf(embedId);
 | 
			
		||||
                    model.entries[elementPos].embeds.splice(embedPos, 1);
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return RemoveEmbed;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										74
									
								
								platform/features/notebook/src/actions/RemoveSnapshot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								platform/features/notebook/src/actions/RemoveSnapshot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
define(
 | 
			
		||||
    [],
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        function RemoveSnapshot(dialogService,context) {
 | 
			
		||||
            context = context || {};
 | 
			
		||||
 | 
			
		||||
            this.domainObject = context.selectedObject || context.domainObject;
 | 
			
		||||
            this.dialogService = dialogService;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        RemoveSnapshot.prototype.perform = function ($event,snapshot,embedId,entryId) {
 | 
			
		||||
 | 
			
		||||
            var DOMAIN_OBJ = this.domainObject;
 | 
			
		||||
            var errorDialog = this.dialogService.showBlockingMessage({
 | 
			
		||||
                severity: "error",
 | 
			
		||||
                title: "This action will permanently delete this Snapshot. Do you want to continue?",
 | 
			
		||||
                minimized: true, // want the notification to be minimized initially (don't show banner)
 | 
			
		||||
                options: [{
 | 
			
		||||
                    label: "OK",
 | 
			
		||||
                    callback: function () {
 | 
			
		||||
                        errorDialog.dismiss();
 | 
			
		||||
                        remove();
 | 
			
		||||
                    }
 | 
			
		||||
                },{
 | 
			
		||||
                    label: "Cancel",
 | 
			
		||||
                    callback: function () {
 | 
			
		||||
                        errorDialog.dismiss();
 | 
			
		||||
                    }
 | 
			
		||||
                }]
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            function remove() {
 | 
			
		||||
                DOMAIN_OBJ.useCapability('mutation', function (model) {
 | 
			
		||||
                    var elementPos = model.entries.map(function (x) {
 | 
			
		||||
                        return x.createdOn;
 | 
			
		||||
                    }).indexOf(entryId);
 | 
			
		||||
                    var entryEmbeds = model.entries[elementPos].embeds;
 | 
			
		||||
                    var embedPos = entryEmbeds.map(function (x) {
 | 
			
		||||
                        return x.id;
 | 
			
		||||
                    }).indexOf(embedId);
 | 
			
		||||
                    model.entries[elementPos].embeds[embedPos].snapshot = "";
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return RemoveSnapshot;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										160
									
								
								platform/features/notebook/src/actions/ViewSnapshot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								platform/features/notebook/src/actions/ViewSnapshot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,160 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Module defining ViewSnapshot
 | 
			
		||||
 */
 | 
			
		||||
define(
 | 
			
		||||
    ['zepto'],
 | 
			
		||||
    function ($) {
 | 
			
		||||
 | 
			
		||||
        var OVERLAY_TEMPLATE = '' +
 | 
			
		||||
        '    <div class="abs blocker"></div>' +
 | 
			
		||||
        '    <div class="abs outer-holder">' +
 | 
			
		||||
        '       <a class="close icon-x-in-circle"></a>' +
 | 
			
		||||
        '       <div class="abs inner-holder l-flex-col">' +
 | 
			
		||||
        '           <div class="t-contents flex-elem holder grows"></div>' +
 | 
			
		||||
        '           <div class="bottom-bar flex-elem holder">' +
 | 
			
		||||
        '               <a class="t-done s-button major">Done</a>' +
 | 
			
		||||
        '           </div>' +
 | 
			
		||||
        '       </div>' +
 | 
			
		||||
        '    </div>';
 | 
			
		||||
 | 
			
		||||
        var toggleOverlay,
 | 
			
		||||
            overlay,
 | 
			
		||||
            closeButton,
 | 
			
		||||
            doneButton,
 | 
			
		||||
            blocker,
 | 
			
		||||
            overlayContainer,
 | 
			
		||||
            img,
 | 
			
		||||
            annotateButton,
 | 
			
		||||
            annotateImg;
 | 
			
		||||
 | 
			
		||||
        function ViewSnapshot($compile,context) {
 | 
			
		||||
            context = context || {};
 | 
			
		||||
 | 
			
		||||
            this.$compile = $compile;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function openOverlay(url,header) {
 | 
			
		||||
            overlay = document.createElement('div');
 | 
			
		||||
            $(overlay).addClass('abs overlay l-large-view');
 | 
			
		||||
            overlay.innerHTML = OVERLAY_TEMPLATE;
 | 
			
		||||
            overlayContainer = overlay.querySelector('.t-contents');
 | 
			
		||||
            closeButton = overlay.querySelector('a.close');
 | 
			
		||||
            closeButton.addEventListener('click', toggleOverlay);
 | 
			
		||||
            doneButton = overlay.querySelector('a.t-done');
 | 
			
		||||
            doneButton.addEventListener('click', toggleOverlay);
 | 
			
		||||
            blocker = overlay.querySelector('.abs.blocker');
 | 
			
		||||
            blocker.addEventListener('click', toggleOverlay);
 | 
			
		||||
            annotateButton = header.querySelector('a.icon-pencil');
 | 
			
		||||
            annotateButton.addEventListener('click', annotateImg);
 | 
			
		||||
            document.body.appendChild(overlay);
 | 
			
		||||
            img = document.createElement('img');
 | 
			
		||||
            img.src = url;
 | 
			
		||||
            overlayContainer.appendChild(header);
 | 
			
		||||
            overlayContainer.appendChild(img);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function closeOverlay() {
 | 
			
		||||
            overlayContainer.removeChild(img);
 | 
			
		||||
            document.body.removeChild(overlay);
 | 
			
		||||
            closeButton.removeEventListener('click', toggleOverlay);
 | 
			
		||||
            closeButton = undefined;
 | 
			
		||||
            doneButton.removeEventListener('click', toggleOverlay);
 | 
			
		||||
            doneButton = undefined;
 | 
			
		||||
            blocker.removeEventListener('click', toggleOverlay);
 | 
			
		||||
            blocker = undefined;
 | 
			
		||||
            overlayContainer = undefined;
 | 
			
		||||
            overlay = undefined;
 | 
			
		||||
            img = undefined;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function headerTemplate() {
 | 
			
		||||
            var template = '<div class="view-header">' +
 | 
			
		||||
                                '<div class="view-info">' +
 | 
			
		||||
                                    '<div ng-class="cssClass" class="embed-icon"></div>' +
 | 
			
		||||
                                    '<div class="embed-title">{{entryName}}</div>' +
 | 
			
		||||
                                    '<div class="object-header">' +
 | 
			
		||||
                                        '<a href="" class="context-available" ng-click="openMenu($event,embedType)""></a>' +
 | 
			
		||||
                                    '</div>' +
 | 
			
		||||
                                    '<div class="hide-menu" ng-show="false">' +
 | 
			
		||||
                                        '<div class="menu-element menu-view context-menu-wrapper mobile-disable-select">' +
 | 
			
		||||
                                            '<div class="menu context-menu">' +
 | 
			
		||||
                                                '<ul>' +
 | 
			
		||||
                                                    '<li ng-repeat="menu in embedActions"' +
 | 
			
		||||
                                                        'ng-click="menu.perform()"' +
 | 
			
		||||
                                                        'title="{{menu.name}}"' +
 | 
			
		||||
                                                        'class="{{menu.cssClass}}">' +
 | 
			
		||||
                                                        '{{menu.name}}' +
 | 
			
		||||
                                                    '</li>' +
 | 
			
		||||
                                                '</ul>' +
 | 
			
		||||
                                            '</div>' +
 | 
			
		||||
                                        '</div>' +
 | 
			
		||||
                                      '</div>' +
 | 
			
		||||
                                '</div>' +
 | 
			
		||||
                                '<div class="view-date">' +
 | 
			
		||||
                                    '<span class="icon-alert-rect" title="Snapshot">' +
 | 
			
		||||
                                    '</span>  ' +
 | 
			
		||||
                                    'SNAPSHOT {{snapDate | date:\'yyyy-MM-dd HH:mm:ss\'}}' +
 | 
			
		||||
                                '</div>' +
 | 
			
		||||
                                '<a class="s-button icon-pencil" title="Annotate">' +
 | 
			
		||||
                                    '<span class="title-label">Annotate</span>' +
 | 
			
		||||
                                '</a>' +
 | 
			
		||||
                            '</div>';
 | 
			
		||||
            return template;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        ViewSnapshot.prototype.perform = function ($event,snapshot,embedId,entryId,$scope,embed) {
 | 
			
		||||
            var isOpen = false;
 | 
			
		||||
 | 
			
		||||
            // Create the overlay element and add it to the document's body
 | 
			
		||||
            $scope.cssClass = embed.cssClass;
 | 
			
		||||
            $scope.embedType = embed.type;
 | 
			
		||||
            $scope.entryName = embed.name;
 | 
			
		||||
            $scope.snapDate = +embedId;
 | 
			
		||||
            var element = this.$compile(headerTemplate())($scope);
 | 
			
		||||
 | 
			
		||||
            var annotateAction = $scope.action.getActions({category: 'embed'})[1];
 | 
			
		||||
 | 
			
		||||
            toggleOverlay = function () {
 | 
			
		||||
                if (!isOpen) {
 | 
			
		||||
                    openOverlay(snapshot, element[0]);
 | 
			
		||||
                    isOpen = true;
 | 
			
		||||
                } else {
 | 
			
		||||
                    closeOverlay();
 | 
			
		||||
                    isOpen = false;
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            annotateImg = function () {
 | 
			
		||||
                closeOverlay();
 | 
			
		||||
                annotateAction.perform($event, snapshot, embedId, entryId, $scope);
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            toggleOverlay();
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return ViewSnapshot;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
@@ -0,0 +1,50 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
define(
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The notebook capability allows a domain object to know whether the
 | 
			
		||||
         * notebook plugin is present or not.
 | 
			
		||||
         *
 | 
			
		||||
         * @constructor
 | 
			
		||||
         */
 | 
			
		||||
        function NotebookCapability(typeService, domainObject) {
 | 
			
		||||
            this.domainObject = domainObject;
 | 
			
		||||
            this.typeService = typeService;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Returns true if there is a notebook domain Object.
 | 
			
		||||
         *
 | 
			
		||||
         * @returns {Boolean}
 | 
			
		||||
         */
 | 
			
		||||
        NotebookCapability.prototype.isNotebook = function () {
 | 
			
		||||
            return this.typeService.getType('notebook');
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return NotebookCapability;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
@@ -0,0 +1,54 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This bundle implements object types and associated views for
 | 
			
		||||
 * display-building.
 | 
			
		||||
 */
 | 
			
		||||
define(
 | 
			
		||||
    [],
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * The LayoutNotebookController is responsible for supporting the
 | 
			
		||||
         * notebook feature creation on theLayout view.
 | 
			
		||||
         **/
 | 
			
		||||
 | 
			
		||||
        function LayoutNotebookController($scope) {
 | 
			
		||||
            $scope.hasNotebookAction = undefined;
 | 
			
		||||
 | 
			
		||||
            $scope.newNotebook = undefined;
 | 
			
		||||
 | 
			
		||||
            var actions = $scope.domainObject.getCapability('action');
 | 
			
		||||
            var notebookAction = actions.getActions({'key': 'notebook-new-entry'});
 | 
			
		||||
            if (notebookAction.length > 0) {
 | 
			
		||||
                $scope.hasNotebookAction = true;
 | 
			
		||||
                $scope.newNotebook = function () {
 | 
			
		||||
                    notebookAction[0].perform();
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return LayoutNotebookController;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1,66 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Module defining NewEntryController. */
 | 
			
		||||
define(
 | 
			
		||||
    [],
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        function NewEntryController($scope,$rootScope) {
 | 
			
		||||
 | 
			
		||||
            $scope.snapshot = undefined;
 | 
			
		||||
            $scope.snapToggle = true;
 | 
			
		||||
            $scope.entryText = '';
 | 
			
		||||
            var annotateAction = $rootScope.selObj.getCapability('action').getActions(
 | 
			
		||||
                                                                            {category: 'embed'})[1];
 | 
			
		||||
 | 
			
		||||
            $scope.$parent.$parent.ngModel[$scope.$parent.$parent.field] = $rootScope.selObj;
 | 
			
		||||
            $scope.objectName = $rootScope.selObj.getModel().name;
 | 
			
		||||
            $scope.cssClass = $rootScope.selObj.getCapability('type').typeDef.cssClass;
 | 
			
		||||
 | 
			
		||||
            $scope.annotateSnapshot = function ($event) {
 | 
			
		||||
                if ($rootScope.currentDialog.value) {
 | 
			
		||||
                    $rootScope.newEntryText = $scope.$parent.$parent.ngModel.entry;
 | 
			
		||||
                    $rootScope.currentDialog.cancel();
 | 
			
		||||
                    annotateAction.perform($event, $rootScope.snapshot.src);
 | 
			
		||||
                    $rootScope.currentDialog = undefined;
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            function updateSnapshot(img) {
 | 
			
		||||
                $scope.snapshot = img;
 | 
			
		||||
            }
 | 
			
		||||
            // Update set of actions whenever the action capability
 | 
			
		||||
            // changes or becomes available.
 | 
			
		||||
            $rootScope.$watch("snapshot", updateSnapshot);
 | 
			
		||||
 | 
			
		||||
            $rootScope.$watch("selValue", toggleEmbed);
 | 
			
		||||
 | 
			
		||||
            function toggleEmbed(value) {
 | 
			
		||||
                $scope.snapToggle = value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return NewEntryController;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										365
									
								
								platform/features/notebook/src/controllers/NotebookController.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										365
									
								
								platform/features/notebook/src/controllers/NotebookController.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,365 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
 /*-- main controller file, here is the core functionality of the notebook plugin --*/
 | 
			
		||||
 | 
			
		||||
define(
 | 
			
		||||
    ['zepto'],
 | 
			
		||||
    function ($) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        function NotebookController(
 | 
			
		||||
                $scope,
 | 
			
		||||
                dialogService,
 | 
			
		||||
                popupService,
 | 
			
		||||
                agentService,
 | 
			
		||||
                objectService,
 | 
			
		||||
                navigationService,
 | 
			
		||||
                now,
 | 
			
		||||
                actionService,
 | 
			
		||||
                $timeout,
 | 
			
		||||
                $element
 | 
			
		||||
        ) {
 | 
			
		||||
 | 
			
		||||
            $scope.entriesEl = $(document.body).find('.t-entries-list');
 | 
			
		||||
            $scope.sortEntries = '-createdOn';
 | 
			
		||||
            $scope.showTime = "0";
 | 
			
		||||
            $scope.editEntry = false;
 | 
			
		||||
            $scope.entrySearch = '';
 | 
			
		||||
            $scope.entryTypes = [];
 | 
			
		||||
            $scope.embedActions = [];
 | 
			
		||||
            $scope.currentEntryValue = '';
 | 
			
		||||
 | 
			
		||||
            /*--seconds in an hour--*/
 | 
			
		||||
 | 
			
		||||
            var SECONDS_IN_AN_HOUR  = 60 * 60 * 1000;
 | 
			
		||||
 | 
			
		||||
            this.scope = $scope;
 | 
			
		||||
 | 
			
		||||
            $scope.reportModel = function () {
 | 
			
		||||
                var entries = $scope.domainObject.model.entries;
 | 
			
		||||
                // console.log("REPORT_MODEL:");
 | 
			
		||||
                // console.log(entries.length + " entries");
 | 
			
		||||
                for (var i=0; i<entries.length; i++) {
 | 
			
		||||
                    var cEntry = entries[i];
 | 
			
		||||
                    // console.log(cEntry.id + ": " + cEntry.createdOn + " / " + cEntry.text);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $scope.hoursFilter = function (hours,entryTime) {
 | 
			
		||||
                if (+hours) {
 | 
			
		||||
                    return entryTime > (now() - SECONDS_IN_AN_HOUR * (+hours));
 | 
			
		||||
                }else {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.scrollToTop = function () {
 | 
			
		||||
                var entriesContainer = $scope.entriesEl.parent();
 | 
			
		||||
                entriesContainer[0].scrollTop = 0;
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            /*--create a new entry--*/
 | 
			
		||||
            $scope.newEntry = function ($event) {
 | 
			
		||||
                $scope.scrollToTop();
 | 
			
		||||
                $scope.reportModel();
 | 
			
		||||
                var entries = $scope.domainObject.model.entries;
 | 
			
		||||
                var lastEntry = entries[entries.length - 1];
 | 
			
		||||
                if (lastEntry === undefined || lastEntry.text || lastEntry.embeds) {
 | 
			
		||||
                    $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                        var id = now();
 | 
			
		||||
                        model.entries.push({'id': id, 'createdOn': id});
 | 
			
		||||
                    });
 | 
			
		||||
                } else {
 | 
			
		||||
                    $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                        model.entries[entries.length - 1].createdOn = now();
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
                $scope.entrySearch = '';
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            /*--delete an entry--*/
 | 
			
		||||
            $scope.deleteEntry = function ($event) {
 | 
			
		||||
                /* This is really brittle - change the markup and this doesn't work */
 | 
			
		||||
                var delId = $event.currentTarget.parentElement.parentElement.id;
 | 
			
		||||
                // console.log("Trying to delete " + delId);
 | 
			
		||||
                var errorDialog = dialogService.showBlockingMessage({
 | 
			
		||||
                    severity: "error",
 | 
			
		||||
                    title: "This action will permanently delete this Notebook entry. Do you want to continue?",
 | 
			
		||||
                    minimized: true, // want the notification to be minimized initially (don't show banner)
 | 
			
		||||
                    options: [{
 | 
			
		||||
                        label: "OK",
 | 
			
		||||
                        callback: function () {
 | 
			
		||||
                            errorDialog.dismiss();
 | 
			
		||||
                            var elementPos = $scope.domainObject.model.entries.map(function (x) {
 | 
			
		||||
                                return x.id;
 | 
			
		||||
                            }).indexOf(+delId.replace('entry_', ''));
 | 
			
		||||
                            if (elementPos !== -1) {
 | 
			
		||||
                                $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                                    model.entries.splice(elementPos, 1);
 | 
			
		||||
                                });
 | 
			
		||||
                            } else {
 | 
			
		||||
                                window.console.log('delete error');
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                    },{
 | 
			
		||||
                        label: "Cancel",
 | 
			
		||||
                        callback: function () {
 | 
			
		||||
                            errorDialog.dismiss();
 | 
			
		||||
                        }
 | 
			
		||||
                    }]
 | 
			
		||||
                });
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.textFocus = function ($event, entryId) {
 | 
			
		||||
                // if ($event.currentTarget && $event.currentTarget.innerText) {
 | 
			
		||||
                    /*
 | 
			
		||||
                     On focus, if the currentTarget isn't blank, set the global currentEntryValue = the
 | 
			
		||||
                     content of the current focus. This will be used at blur to determine if the
 | 
			
		||||
                     current entry has been modified or not.
 | 
			
		||||
                     Not sure this is right, would think we'd always want to set curEntVal even if blank
 | 
			
		||||
                     */
 | 
			
		||||
                    $scope.currentEntryValue = $event.currentTarget.innerText;
 | 
			
		||||
                // }
 | 
			
		||||
                // console.log('focus: ' + entryId + '; currentEntryValue: ' + $scope.currentEntryValue);
 | 
			
		||||
                // console.log('----');
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.textBlur = function ($event, entryId) {
 | 
			
		||||
                // entryId is the unique numeric based on the original createdOn
 | 
			
		||||
                if ($event.target && $event.target.innerText !== "") {
 | 
			
		||||
                    var elementPos = $scope.domainObject.model.entries.map(function (x) {
 | 
			
		||||
                        return x.id;
 | 
			
		||||
                    }).indexOf(+(entryId));
 | 
			
		||||
 | 
			
		||||
                    // If the text of an entry has been changed, then update the text and the createdOn numeric
 | 
			
		||||
                    // Otherwise, don't do anything
 | 
			
		||||
                    if ($scope.currentEntryValue !== $event.target.innerText) {
 | 
			
		||||
                        $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                            model.entries[elementPos].text = $event.target.innerText;
 | 
			
		||||
                            model.entries[elementPos].createdOn = now();
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
/*                    $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                        model.entries[elementPos].text = $event.target.innerText;
 | 
			
		||||
                        if ($scope.currentEntryValue !== $event.target.innerText) {
 | 
			
		||||
                            model.entries[elementPos].createdOn = now();
 | 
			
		||||
                        }
 | 
			
		||||
                    });*/
 | 
			
		||||
                }
 | 
			
		||||
                // console.log('blur: ' + entryId + '; currentEntryValue: ' + $scope.currentEntryValue);
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.finished = function (model) {
 | 
			
		||||
                var lastEntry = model[model.length - 1];
 | 
			
		||||
                if (!lastEntry.text) {
 | 
			
		||||
                    var newEntry = $scope.entriesEl.find('#entry_' + lastEntry.id).addClass('active');
 | 
			
		||||
                    newEntry.find('.t-entry-input').focus();
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.handleActive = function () {
 | 
			
		||||
                var newEntry = $scope.entriesEl.find('.active');
 | 
			
		||||
                if (newEntry) {
 | 
			
		||||
                    newEntry.removeClass('active');
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            $scope.clearSearch = function () {
 | 
			
		||||
                $scope.entrySearch = '';
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.viewSnapshot = function ($event,snapshot,embedId,entryId,$innerScope,domainObject) {
 | 
			
		||||
                var viewAction = $scope.action.getActions({category: 'embed'})[0];
 | 
			
		||||
                viewAction.perform($event, snapshot, embedId, entryId, $innerScope, domainObject);
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            $scope.parseText = function (text) {
 | 
			
		||||
                if (text) {
 | 
			
		||||
                    return text.split(/\r\n|\r|\n/gi);
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.renderImage = function (img) {
 | 
			
		||||
                return URL.createObjectURL(img);
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.getDomainObj = function (id) {
 | 
			
		||||
                return objectService.getObjects([id]);
 | 
			
		||||
            };
 | 
			
		||||
            /*-----*/
 | 
			
		||||
            function refreshComp(change) {
 | 
			
		||||
                if (change && change.length) {
 | 
			
		||||
                    change[0].getCapability('action').getActions({key: 'remove'})[0].perform();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $scope.actionToMenuOption = function (action) {
 | 
			
		||||
                return {
 | 
			
		||||
                    key: action.getMetadata().key,
 | 
			
		||||
                    name: action.getMetadata().name,
 | 
			
		||||
                    cssClass: action.getMetadata().cssClass,
 | 
			
		||||
                    perform: action.perform
 | 
			
		||||
                };
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            // Maintain all "conclude-editing" and "save" actions in the
 | 
			
		||||
            // present context.
 | 
			
		||||
            function updateActions() {
 | 
			
		||||
                $scope.menuEmbed = $scope.action ?
 | 
			
		||||
                        $scope.action.getActions({category: 'embed'}) :
 | 
			
		||||
                        [];
 | 
			
		||||
 | 
			
		||||
                $scope.menuEmbedNoSnap = $scope.action ?
 | 
			
		||||
                        $scope.action.getActions({category: 'embed-no-snap'}) :
 | 
			
		||||
                        [];
 | 
			
		||||
 | 
			
		||||
                $scope.menuActions = $scope.action ?
 | 
			
		||||
                        $scope.action.getActions({key: 'window'}) :
 | 
			
		||||
                        [];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Update set of actions whenever the action capability
 | 
			
		||||
            // changes or becomes available.
 | 
			
		||||
            $scope.$watch("action", updateActions);
 | 
			
		||||
 | 
			
		||||
            $scope.navigate = function ($event,embedType) {
 | 
			
		||||
                if ($event) {
 | 
			
		||||
                    $event.preventDefault();
 | 
			
		||||
                }
 | 
			
		||||
                $scope.getDomainObj(embedType).then(function (resp) {
 | 
			
		||||
                    navigationService.setNavigation(resp[embedType]);
 | 
			
		||||
                });
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $scope.saveSnap = function (url,embedPos,entryPos) {
 | 
			
		||||
                var snapshot = false;
 | 
			
		||||
                if (url) {
 | 
			
		||||
                    if (embedPos !== -1 && entryPos !== -1) {
 | 
			
		||||
                        var reader = new window.FileReader();
 | 
			
		||||
                        reader.readAsDataURL(url);
 | 
			
		||||
                        reader.onloadend = function () {
 | 
			
		||||
                            snapshot = reader.result;
 | 
			
		||||
                            $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                                if (model.entries[entryPos]) {
 | 
			
		||||
                                    model.entries[entryPos].embeds[embedPos].snapshot = {'src': snapshot,
 | 
			
		||||
                                                                                     'type': url.type,
 | 
			
		||||
                                                                                     'size': url.size,
 | 
			
		||||
                                                                                     'modified': Date.now()
 | 
			
		||||
                                                                                 };
 | 
			
		||||
                                    model.entries[entryPos].embeds[embedPos].id = Date.now();
 | 
			
		||||
                                }
 | 
			
		||||
                            });
 | 
			
		||||
                        };
 | 
			
		||||
                    }
 | 
			
		||||
                }else {
 | 
			
		||||
                    $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                        model.entries[entryPos].embeds[embedPos].snapshot = snapshot;
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            /*---popups menu embeds----*/
 | 
			
		||||
 | 
			
		||||
            function getEmbedActions(embedType) {
 | 
			
		||||
                if (!$scope.embedActions.length) {
 | 
			
		||||
                    $scope.getDomainObj(embedType).then(function (resp) {
 | 
			
		||||
                        $scope.embedActions = [];
 | 
			
		||||
                        $scope.embedActions.push($scope.actionToMenuOption(
 | 
			
		||||
                                                    $scope.action.getActions({key: 'window',selectedObject: resp[embedType]})[0]
 | 
			
		||||
                                              ));
 | 
			
		||||
                        $scope.embedActions.push({
 | 
			
		||||
                                                key: 'navigate',
 | 
			
		||||
                                                name: 'Go to Original',
 | 
			
		||||
                                                cssClass: '',
 | 
			
		||||
                                                perform: function () {
 | 
			
		||||
                                                    $scope.navigate('', embedType);
 | 
			
		||||
                                                }
 | 
			
		||||
                                            });
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $scope.openMenu = function ($event,embedType) {
 | 
			
		||||
                $event.preventDefault();
 | 
			
		||||
 | 
			
		||||
                getEmbedActions(embedType);
 | 
			
		||||
 | 
			
		||||
                var body = $(document).find('body'),
 | 
			
		||||
                    initiatingEvent = agentService.isMobile() ?
 | 
			
		||||
                            'touchstart' : 'mousedown',
 | 
			
		||||
                    dismissExistingMenu,
 | 
			
		||||
                    menu,
 | 
			
		||||
                    popup;
 | 
			
		||||
 | 
			
		||||
                var container = $($event.currentTarget).parent().parent();
 | 
			
		||||
 | 
			
		||||
                menu = container.find('.menu-element');
 | 
			
		||||
 | 
			
		||||
                // Remove the context menu
 | 
			
		||||
                function dismiss() {
 | 
			
		||||
                    container.find('.hide-menu').append(menu);
 | 
			
		||||
                    body.off("mousedown", dismiss);
 | 
			
		||||
                    dismissExistingMenu = undefined;
 | 
			
		||||
                    $scope.embedActions = [];
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Dismiss any menu which was already showing
 | 
			
		||||
                if (dismissExistingMenu) {
 | 
			
		||||
                    dismissExistingMenu();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // ...and record the presence of this menu.
 | 
			
		||||
                dismissExistingMenu = dismiss;
 | 
			
		||||
 | 
			
		||||
                popup = popupService.display(menu, [$event.pageX,$event.pageY], {
 | 
			
		||||
                    marginX: 0,
 | 
			
		||||
                    marginY: -50
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                // Stop propagation so that clicks or touches on the menu do not close the menu
 | 
			
		||||
                menu.on(initiatingEvent, function (event) {
 | 
			
		||||
                    event.stopPropagation();
 | 
			
		||||
                    $timeout(dismiss, 300);
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                // Dismiss the menu when body is clicked/touched elsewhere
 | 
			
		||||
                // ('mousedown' because 'click' breaks left-click context menus)
 | 
			
		||||
                // ('touchstart' because 'touch' breaks context menus up)
 | 
			
		||||
                body.on(initiatingEvent, dismiss);
 | 
			
		||||
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            $scope.$watchCollection("composition", refreshComp);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            $scope.$on('$destroy', function () {});
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return NotebookController;
 | 
			
		||||
    });
 | 
			
		||||
@@ -0,0 +1,44 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Module defining SelectSnapshotController. */
 | 
			
		||||
define(
 | 
			
		||||
    [],
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        function SelectSnapshotController($scope,$rootScope) {
 | 
			
		||||
 | 
			
		||||
            $scope.selectModel = true;
 | 
			
		||||
 | 
			
		||||
            function selectprint(value) {
 | 
			
		||||
                $rootScope.selValue = value;
 | 
			
		||||
                $scope.$parent.$parent.ngModel[$scope.$parent.$parent.field] = value;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $scope.$watch("selectModel", selectprint);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return SelectSnapshotController;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										140
									
								
								platform/features/notebook/src/directives/EntryDnd.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								platform/features/notebook/src/directives/EntryDnd.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,140 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2016, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
define(['zepto'], function ($) {
 | 
			
		||||
    var SNAPSHOT_TEMPLATE = '<mct-representation key="\'draggedEntry\'"' +
 | 
			
		||||
                                    'parameters="{entry:entryId,embed:embedId}"' +
 | 
			
		||||
                                    'class="t-rep-frame holder"' +
 | 
			
		||||
                                    'mct-object="selObj">' +
 | 
			
		||||
                                '</mct-representation>';
 | 
			
		||||
 | 
			
		||||
    function EntryDnd($rootScope,$compile,dndService,typeService,notificationService) {
 | 
			
		||||
 | 
			
		||||
        function link($scope, $element) {
 | 
			
		||||
 | 
			
		||||
            function drop(e) {
 | 
			
		||||
                var selectedObject = dndService.getData('mct-domain-object');
 | 
			
		||||
                var selectedModel = selectedObject.getModel();
 | 
			
		||||
                var cssClass = selectedObject.getCapability('type').typeDef.cssClass;
 | 
			
		||||
                var entryId = -1;
 | 
			
		||||
                var embedId = -1;
 | 
			
		||||
 | 
			
		||||
                $scope.clearSearch();
 | 
			
		||||
                if ($element[0].id === 'newEntry') {
 | 
			
		||||
                    entryId = $scope.domainObject.model.entries.length;
 | 
			
		||||
                    embedId = 0;
 | 
			
		||||
                    var lastEntry = $scope.domainObject.model.entries[entryId - 1];
 | 
			
		||||
                    if (lastEntry === undefined || lastEntry.text || lastEntry.embeds) {
 | 
			
		||||
                        $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                            model.entries.push({'createdOn': +Date.now(),
 | 
			
		||||
                                                'embeds': [{'type': selectedObject.getId(),
 | 
			
		||||
                                                       'id': '' + Date.now(),
 | 
			
		||||
                                                       'cssClass': cssClass,
 | 
			
		||||
                                                       'name': selectedModel.name,
 | 
			
		||||
                                                       'snapshot': ''
 | 
			
		||||
                                                     }]
 | 
			
		||||
                                            });
 | 
			
		||||
                        });
 | 
			
		||||
                    }else {
 | 
			
		||||
                        $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                            model.entries[entryId - 1] =
 | 
			
		||||
                                                    {'createdOn': +Date.now(),
 | 
			
		||||
                                                     'embeds': [{'type': selectedObject.getId(),
 | 
			
		||||
                                                                'id': '' + Date.now(),
 | 
			
		||||
                                                                'cssClass': cssClass,
 | 
			
		||||
                                                                'name': selectedModel.name,
 | 
			
		||||
                                                                'snapshot': ''
 | 
			
		||||
                                                               }]
 | 
			
		||||
                                                    };
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    $scope.scrollToTop();
 | 
			
		||||
                    notificationService.info({
 | 
			
		||||
                        title: "Notebook Entry created"
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                }else {
 | 
			
		||||
 | 
			
		||||
                    entryId = $scope.domainObject.model.entries.map(function (x) {
 | 
			
		||||
                        return x.createdOn;
 | 
			
		||||
                    }).indexOf(+($element[0].id.replace('entry_', '')));
 | 
			
		||||
                    if (!$scope.domainObject.model.entries[entryId].embeds) {
 | 
			
		||||
                        $scope.domainObject.model.entries[entryId].embeds = [];
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    $scope.domainObject.useCapability('mutation', function (model) {
 | 
			
		||||
                        model.entries[entryId].embeds.push({'type': selectedObject.getId(),
 | 
			
		||||
                                                                          'id': '' + Date.now(),
 | 
			
		||||
                                                                          'cssClass': cssClass,
 | 
			
		||||
                                                                          'name': selectedModel.name,
 | 
			
		||||
                                                                          'snapshot': ''
 | 
			
		||||
                                                                        });
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                    embedId = $scope.domainObject.model.entries[entryId].embeds.length - 1;
 | 
			
		||||
 | 
			
		||||
                    if (selectedObject) {
 | 
			
		||||
                        e.preventDefault();
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (entryId >= 0 && embedId >= 0) {
 | 
			
		||||
                    $scope.selObj = selectedObject;
 | 
			
		||||
                    $scope.entryId = entryId;
 | 
			
		||||
                    $scope.embedId = embedId;
 | 
			
		||||
                    $compile(SNAPSHOT_TEMPLATE)($scope);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if ($(e.currentTarget).hasClass('drag-active')) {
 | 
			
		||||
                    $(e.currentTarget).removeClass('drag-active');
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            function dragover(e) {
 | 
			
		||||
                if (!$(e.currentTarget).hasClass('drag-active')) {
 | 
			
		||||
                    $(e.currentTarget).addClass('drag-active');
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Listen for the drop itself
 | 
			
		||||
            $element.on('dragover', dragover);
 | 
			
		||||
            $element.on('drop', drop);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            $scope.$on('$destroy', function () {
 | 
			
		||||
                $element.off('dragover', dragover);
 | 
			
		||||
                $element.off('drop', drop);
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            restrict: 'A',
 | 
			
		||||
            link: link
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return EntryDnd;
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										164
									
								
								platform/features/notebook/src/directives/MCTModalNotebook.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								platform/features/notebook/src/directives/MCTModalNotebook.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2016, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
define([
 | 
			
		||||
    'zepto'
 | 
			
		||||
], function (
 | 
			
		||||
    $
 | 
			
		||||
) {
 | 
			
		||||
 | 
			
		||||
    var OVERLAY_TEMPLATE = '' +
 | 
			
		||||
'    <div class="abs blocker"></div>' +
 | 
			
		||||
'    <div class="abs outer-holder">' +
 | 
			
		||||
'       <a class="close icon-x-in-circle"></a>' +
 | 
			
		||||
'       <div class="abs inner-holder l-flex-col">' +
 | 
			
		||||
'           <div class="t-contents flex-elem holder grows"></div>' +
 | 
			
		||||
'           <div class="bottom-bar flex-elem holder">' +
 | 
			
		||||
'               <a class="t-done s-button major">Done</a>' +
 | 
			
		||||
'           </div>' +
 | 
			
		||||
'       </div>' +
 | 
			
		||||
'    </div>';
 | 
			
		||||
 | 
			
		||||
    var NEW_NOTEBOOK_BUTTON_TEMPLATE = '<a class="s-button labeled icon-notebook new-notebook-entry" title="New Notebook Entry">' +
 | 
			
		||||
                                    '<span class="title-label">New Notebook Entry</span>' +
 | 
			
		||||
                                '</a>';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * MCT Trigger Modal is intended for use in only one location: inside the
 | 
			
		||||
     * object-header to allow views in a layout to be popped out in a modal.
 | 
			
		||||
     * Users can close the modal and go back to normal, and everything generally
 | 
			
		||||
     * just works fine.
 | 
			
		||||
     *
 | 
			
		||||
     * This code is sensitive to how our html is constructed-- particularly with
 | 
			
		||||
     * how it locates the the container of an element in a layout. However, it
 | 
			
		||||
     * should be able to handle slight relocations so long as it is always a
 | 
			
		||||
     * descendent of a `.frame` element.
 | 
			
		||||
     */
 | 
			
		||||
    function MCTModalNotebook($document) {
 | 
			
		||||
        var document = $document[0];
 | 
			
		||||
 | 
			
		||||
        function link($scope, $element) {
 | 
			
		||||
            var frame = $element.parent();
 | 
			
		||||
 | 
			
		||||
            for (var i = 0; i < 10; i++) {
 | 
			
		||||
                if (frame.hasClass('frame')) {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                frame = frame.parent();
 | 
			
		||||
            }
 | 
			
		||||
            if (!frame.hasClass('frame')) {
 | 
			
		||||
                $element.remove();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            frame = frame[0];
 | 
			
		||||
            var layoutContainer = frame.parentElement,
 | 
			
		||||
                isOpen = false,
 | 
			
		||||
                toggleOverlay,
 | 
			
		||||
                overlay,
 | 
			
		||||
                closeButton,
 | 
			
		||||
                doneButton,
 | 
			
		||||
                notebookButton,
 | 
			
		||||
                blocker,
 | 
			
		||||
                overlayContainer,
 | 
			
		||||
                notebookButtonEl;
 | 
			
		||||
 | 
			
		||||
            function openOverlay() {
 | 
			
		||||
                // Remove frame classes from being applied in a non-frame context
 | 
			
		||||
                $(frame).removeClass('frame frame-template');
 | 
			
		||||
                overlay = document.createElement('div');
 | 
			
		||||
                $(overlay).addClass('abs overlay l-large-view');
 | 
			
		||||
                overlay.innerHTML = OVERLAY_TEMPLATE;
 | 
			
		||||
                overlayContainer = overlay.querySelector('.t-contents');
 | 
			
		||||
                closeButton = overlay.querySelector('a.close');
 | 
			
		||||
                closeButton.addEventListener('click', toggleOverlay);
 | 
			
		||||
                doneButton = overlay.querySelector('a.t-done');
 | 
			
		||||
                doneButton.addEventListener('click', toggleOverlay);
 | 
			
		||||
                blocker = overlay.querySelector('.abs.blocker');
 | 
			
		||||
                blocker.addEventListener('click', toggleOverlay);
 | 
			
		||||
                document.body.appendChild(overlay);
 | 
			
		||||
                layoutContainer.removeChild(frame);
 | 
			
		||||
                overlayContainer.appendChild(frame);
 | 
			
		||||
 | 
			
		||||
                //verify if there is a new notebook entry action
 | 
			
		||||
                var actions = $scope.domainObject.getCapability('action');
 | 
			
		||||
                var notebookAction = actions.getActions({'key': 'notebook-new-entry'});
 | 
			
		||||
                if (notebookAction.length > 0) {
 | 
			
		||||
                    notebookButtonEl = document.createElement('div');
 | 
			
		||||
                    $(notebookButtonEl).addClass('notebook-button-container');
 | 
			
		||||
                    notebookButtonEl.innerHTML = NEW_NOTEBOOK_BUTTON_TEMPLATE;
 | 
			
		||||
                    notebookButton = frame.querySelector('.object-browse-bar .right');
 | 
			
		||||
                    notebookButton.prepend(notebookButtonEl);
 | 
			
		||||
                    // $(frame.querySelector('.object-holder')).addClass('container-notebook');
 | 
			
		||||
                    notebookButton.addEventListener('click', function () {
 | 
			
		||||
                        notebookAction[0].perform();
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            function closeOverlay() {
 | 
			
		||||
                $(frame).addClass('frame frame-template');
 | 
			
		||||
                overlayContainer.removeChild(frame);
 | 
			
		||||
                layoutContainer.appendChild(frame);
 | 
			
		||||
                document.body.removeChild(overlay);
 | 
			
		||||
                closeButton.removeEventListener('click', toggleOverlay);
 | 
			
		||||
                closeButton = undefined;
 | 
			
		||||
                doneButton.removeEventListener('click', toggleOverlay);
 | 
			
		||||
                doneButton = undefined;
 | 
			
		||||
                blocker.removeEventListener('click', toggleOverlay);
 | 
			
		||||
                blocker = undefined;
 | 
			
		||||
                overlayContainer = undefined;
 | 
			
		||||
                overlay = undefined;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                if (notebookButton) {
 | 
			
		||||
                    notebookButton.removeChild(notebookButtonEl);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            toggleOverlay = function () {
 | 
			
		||||
                if (!isOpen) {
 | 
			
		||||
                    openOverlay();
 | 
			
		||||
                    isOpen = true;
 | 
			
		||||
                } else {
 | 
			
		||||
                    closeOverlay();
 | 
			
		||||
                    isOpen = false;
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            $element.on('click', toggleOverlay);
 | 
			
		||||
            $scope.$on('$destroy', function () {
 | 
			
		||||
                $element.off('click', toggleOverlay);
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            restrict: 'A',
 | 
			
		||||
            link: link
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return MCTModalNotebook;
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										134
									
								
								platform/features/notebook/src/directives/MCTSnapshot.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								platform/features/notebook/src/directives/MCTSnapshot.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,134 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2016, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
define(['zepto'], function ($) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
     */
 | 
			
		||||
    function MCTSnapshot($rootScope,$document,exportImageService,dialogService,notificationService) {
 | 
			
		||||
        var document = $document[0];
 | 
			
		||||
 | 
			
		||||
        function link($scope, $element,$attrs) {
 | 
			
		||||
            var element = $element[0];
 | 
			
		||||
            var layoutContainer = element.parentElement,
 | 
			
		||||
                toggleOverlay,
 | 
			
		||||
                makeImg,
 | 
			
		||||
                saveImg,
 | 
			
		||||
                snapshot = document.createElement('div');
 | 
			
		||||
 | 
			
		||||
            function openOverlay() {
 | 
			
		||||
                // Remove frame classes from being applied in a non-frame context
 | 
			
		||||
                $(snapshot).addClass('abs overlay l-large-view snapshot');
 | 
			
		||||
                snapshot.appendChild(element);
 | 
			
		||||
                document.body.appendChild(snapshot);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            function closeOverlay() {
 | 
			
		||||
                if (snapshot) {
 | 
			
		||||
                    snapshot.removeChild(element);
 | 
			
		||||
                    layoutContainer.remove();
 | 
			
		||||
                }
 | 
			
		||||
                document.body.removeChild(snapshot);
 | 
			
		||||
                snapshot = undefined;
 | 
			
		||||
                $element.remove();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            toggleOverlay = function () {
 | 
			
		||||
                openOverlay();
 | 
			
		||||
                makeImg(element);
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            makeImg = function (el) {
 | 
			
		||||
                var scope = $scope;
 | 
			
		||||
                var dialog = dialogService.showBlockingMessage({
 | 
			
		||||
                        title: "Saving...",
 | 
			
		||||
                        hint: "Taking Snapshot...",
 | 
			
		||||
                        unknownProgress: true,
 | 
			
		||||
                        severity: "info",
 | 
			
		||||
                        delay: true
 | 
			
		||||
                    });
 | 
			
		||||
                this.$timeout(function () {
 | 
			
		||||
                    window.EXPORT_IMAGE_TIMEOUT = 5000;
 | 
			
		||||
                    exportImageService.exportPNGtoSRC(el).then(function (img) {
 | 
			
		||||
 | 
			
		||||
                        if (img) {
 | 
			
		||||
                            if (dialog) {
 | 
			
		||||
                                dialog.dismiss();
 | 
			
		||||
                            }
 | 
			
		||||
                            if ($element[0].dataset.entry && $element[0].dataset.embed) {
 | 
			
		||||
                                saveImg(img, +$element[0].dataset.entry, +$element[0].dataset.embed);
 | 
			
		||||
                                closeOverlay(false);
 | 
			
		||||
                            } else {
 | 
			
		||||
                                var reader = new window.FileReader();
 | 
			
		||||
                                reader.readAsDataURL(img);
 | 
			
		||||
                                reader.onloadend = function () {
 | 
			
		||||
                                        //closeOverlay(true);
 | 
			
		||||
                                        $($element[0]).attr("data-snapshot", reader.result);
 | 
			
		||||
                                        $rootScope.snapshot = {'src': reader.result,
 | 
			
		||||
                                                                 'type': img.type,
 | 
			
		||||
                                                                 'size': img.size,
 | 
			
		||||
                                                                 'modified': Date.now()
 | 
			
		||||
                                                              };
 | 
			
		||||
                                        closeOverlay(false);
 | 
			
		||||
                                        scope.$destroy();
 | 
			
		||||
                                    };
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                        } else {
 | 
			
		||||
                            dialog.dismiss();
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }, function (error) {
 | 
			
		||||
                        if (dialog) {
 | 
			
		||||
                            dialog.dismiss();
 | 
			
		||||
                        }
 | 
			
		||||
                        closeOverlay();
 | 
			
		||||
                    });
 | 
			
		||||
                }, 500);
 | 
			
		||||
                window.EXPORT_IMAGE_TIMEOUT = 500;
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            saveImg = function (url,entryId,embedId) {
 | 
			
		||||
                $scope.$parent.$parent.$parent.saveSnap(url, embedId, entryId);
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            if ($(document.body).find('.overlay.snapshot').length === 0) {
 | 
			
		||||
                toggleOverlay();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $scope.$on('$destroy', function () {
 | 
			
		||||
                $element.off('click', toggleOverlay);
 | 
			
		||||
                $element.remove();
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            restrict: 'A',
 | 
			
		||||
            link: link
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return MCTSnapshot;
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										44
									
								
								platform/features/notebook/src/policies/CompositionPolicy.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								platform/features/notebook/src/policies/CompositionPolicy.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This bundle implements "containment" rules, which determine which objects
 | 
			
		||||
 * can be contained within a notebook.
 | 
			
		||||
 */
 | 
			
		||||
define(
 | 
			
		||||
    [],
 | 
			
		||||
    function () {
 | 
			
		||||
        function CompositionPolicy() {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        CompositionPolicy.prototype.allow = function (parent, child) {
 | 
			
		||||
            var parentDef = parent.getCapability('type').getName();
 | 
			
		||||
 | 
			
		||||
            if (parentDef === 'Notebook' && child.getCapability('status').list().length) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return CompositionPolicy;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										40
									
								
								platform/features/notebook/src/policies/ViewPolicy.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								platform/features/notebook/src/policies/ViewPolicy.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
/*****************************************************************************
 | 
			
		||||
 * Open MCT, Copyright (c) 2014-2017, United States Government
 | 
			
		||||
 * as represented by the Administrator of the National Aeronautics and Space
 | 
			
		||||
 * Administration. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 | 
			
		||||
 * "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0.
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
 * License for the specific language governing permissions and limitations
 | 
			
		||||
 * under the License.
 | 
			
		||||
 *
 | 
			
		||||
 * Open MCT includes source code licensed under additional open source
 | 
			
		||||
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | 
			
		||||
 * this source code distribution or the Licensing information page available
 | 
			
		||||
 * at runtime from the About dialog for additional information.
 | 
			
		||||
 *****************************************************************************/
 | 
			
		||||
 | 
			
		||||
define(
 | 
			
		||||
    function () {
 | 
			
		||||
 | 
			
		||||
        function ViewPolicy() {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ViewPolicy.prototype.allow = function (view, domainObject) {
 | 
			
		||||
            if (view.key === 'layout') {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return ViewPolicy;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
@@ -167,6 +167,17 @@ define(
 | 
			
		||||
            });
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Takes a screenshot of a DOM node in PNG format.
 | 
			
		||||
         * @param {node} element to be exported
 | 
			
		||||
         * @param {string} filename the exported image
 | 
			
		||||
         * @returns {promise}
 | 
			
		||||
         */
 | 
			
		||||
 | 
			
		||||
        ExportImageService.prototype.exportPNGtoSRC = function (element) {
 | 
			
		||||
            return renderElement(element, "png");
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        polyfillToBlob();
 | 
			
		||||
 | 
			
		||||
        return ExportImageService;
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ define([
 | 
			
		||||
    './autoflow/AutoflowTabularPlugin',
 | 
			
		||||
    './timeConductor/plugin',
 | 
			
		||||
    '../../example/imagery/plugin',
 | 
			
		||||
    '../../platform/features/notebook/bundle',
 | 
			
		||||
    '../../platform/import-export/bundle',
 | 
			
		||||
    './summaryWidget/plugin',
 | 
			
		||||
    './URLIndicatorPlugin/URLIndicatorPlugin',
 | 
			
		||||
@@ -38,6 +39,7 @@ define([
 | 
			
		||||
    AutoflowPlugin,
 | 
			
		||||
    TimeConductorPlugin,
 | 
			
		||||
    ExampleImagery,
 | 
			
		||||
    Notebook,
 | 
			
		||||
    ImportExport,
 | 
			
		||||
    SummaryWidget,
 | 
			
		||||
    URLIndicatorPlugin,
 | 
			
		||||
@@ -49,6 +51,7 @@ define([
 | 
			
		||||
        Espresso: 'platform/commonUI/themes/espresso',
 | 
			
		||||
        LocalStorage: 'platform/persistence/local',
 | 
			
		||||
        MyItems: 'platform/features/my-items',
 | 
			
		||||
        Notebook: 'platform/features/notebook',
 | 
			
		||||
        Snow: 'platform/commonUI/themes/snow'
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -75,7 +75,8 @@ requirejs.config({
 | 
			
		||||
        "d3-format": "node_modules/d3-format/build/d3-format.min",
 | 
			
		||||
        "d3-interpolate": "node_modules/d3-interpolate/build/d3-interpolate.min",
 | 
			
		||||
        "d3-time": "node_modules/d3-time/build/d3-time.min",
 | 
			
		||||
        "d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min"
 | 
			
		||||
        "d3-time-format": "node_modules/d3-time-format/build/d3-time-format.min",
 | 
			
		||||
        "painterro": "node_modules/@cristian77/painterro/build/painterro.min"
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    "shim": {
 | 
			
		||||
@@ -125,4 +126,4 @@ requirejs.config({
 | 
			
		||||
            window.__karma__.start.apply(window.__karma__, args);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
});
 | 
			
		||||
		Reference in New Issue
	
	Block a user