From 75bf956c3d42a362210d3f19c4e9f4261bdcc459 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 21 Sep 2016 14:54:22 -0700 Subject: [PATCH] [Selection] Use context typedef --- src/selection/ContextManager.js | 30 ++++++++++----- src/selection/Path.js | 68 --------------------------------- 2 files changed, 21 insertions(+), 77 deletions(-) delete mode 100644 src/selection/Path.js diff --git a/src/selection/ContextManager.js b/src/selection/ContextManager.js index fb426c9cd5..856af07edc 100644 --- a/src/selection/ContextManager.js +++ b/src/selection/ContextManager.js @@ -20,10 +20,18 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -define(['./Path', 'zepto'], function (Path, $) { +define(['zepto'], function ($) { + /** + * @typedef Context + * @property {*} item + * @property {HTMLElement} element + * @property {Context} parent the containing context (may be undefined) + */ + + function ContextManager() { this.counter = 0; - this.paths = {}; + this.contexts = {}; } ContextManager.prototype.nextId = function () { @@ -31,24 +39,28 @@ define(['./Path', 'zepto'], function (Path, $) { return "context-" + this.counter; }; - ContextManager.prototype.path = function (item, htmlElement) { + ContextManager.prototype.context = function (item, htmlElement) { var $element = $(htmlElement); var id = $element.attr('data-context') || this.nextId(); $element.attr('data-context', id); - if (this.paths[id].head() !== item) { + if (this.contexts[id].item !== item) { this.release(htmlElement); } - if (!this.paths[id]) { + if (!this.contexts[id]) { var $parent = $element.closest('[data-context]'); var parentId = $parent.attr('data-context'); - var parentPath = this.paths[parentId]; - this.paths[id] = new Path(item, parentPath); + var parentContext = parentId ? this.contexts[parentId] : undefined; + this.contexts[id] = { + item: item, + element: htmlElement, + parent: parentContext + }; } - return this.paths[id]; + return this.contexts[id]; }; ContextManager.prototype.release = function (htmlElement) { @@ -56,7 +68,7 @@ define(['./Path', 'zepto'], function (Path, $) { var id = $element.attr('data-context'); if (id) { - delete this.paths[id]; + delete this.contexts[id]; $element.removeAttr('data-context'); } }; diff --git a/src/selection/Path.js b/src/selection/Path.js deleted file mode 100644 index 2430635a86..0000000000 --- a/src/selection/Path.js +++ /dev/null @@ -1,68 +0,0 @@ -/***************************************************************************** - * 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([], function () { - var NULL_PATH; - - function Path(item, path) { - this.item = item; - this.parent = path || NULL_PATH; - } - - Path.prototype.matches = function (path) { - return (this.item === path.head()) && this.parent.matches(path.path()); - }; - - Path.prototype.head = function () { - return this.item; - }; - - Path.prototype.depth = function () { - return 1 + this.parent.depth(); - }; - - Path.prototype.tail = function () { - return this.parent; - }; - - Path.prototype.append = function (item) { - return new Path(item, this); - }; - - Path.prototype.toArray = function () { - return [this.item].concat(this.parent.toArray()); - }; - - NULL_PATH = new Path(undefined, undefined); - NULL_PATH.parent = NULL_PATH; - NULL_PATH.depth = function () { - return 0; - }; - NULL_PATH.matches = function (path) { - return path.depth() === 0; - }; - NULL_PATH.toArray = function () { - return []; - }; - - return Path; -});