Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(969)

Side by Side Diff: chrome/browser/resources/chromeos/chromevox/chromevox/injected/api_util.js

Issue 2740793002: Minimize the Classic API and enable it for Next (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * @fileoverview Shared util methods between api.js and api_implementation.js
7 * for doing common tasks such as passing node references between page script
8 * and ChromeVox.
9 */
10
11 if (typeof(goog) != 'undefined' && goog.provide){
12 goog.provide('cvox.ApiUtil');
13 }
14
15
16 if (!window['cvox']) {
17 window['cvox'] = {};
18 }
19
20 /**
21 * @constructor
22 */
23 cvox.ApiUtils = function() {
24 };
25
26 /**
27 * The next id to use for the cvoxid attribute that we add to elements
28 * in order to be able to find them from the content script.
29 * @type {number}
30 */
31 cvox.ApiUtils.nextCvoxId_ = 1;
32
33 /**
34 * Makes a serializable reference to a node.
35 * If the node or its parent has an ID, reference it directly. Otherwise,
36 * add a temporary cvoxid attribute. This has a corresponding method in
37 * api_implementation.js to decode this and return a node.
38 * @param {Node} targetNode The node to reference.
39 * @return {Object} A serializable node reference.
40 */
41 cvox.ApiUtils.makeNodeReference = function(targetNode) {
42 if (targetNode.id && document.getElementById(targetNode.id) == targetNode) {
43 return {'id': targetNode.id};
44 } else if (targetNode instanceof HTMLElement) {
45 var cvoxid = cvox.ApiUtils.nextCvoxId_;
46 targetNode.setAttribute('cvoxid', cvoxid);
47 cvox.ApiUtils.nextCvoxId_ = (cvox.ApiUtils.nextCvoxId_ + 1) % 100;
48 return {'cvoxid': cvoxid};
49 } else if (targetNode.parentElement) {
50 var parent = targetNode.parentElement;
51 var childIndex = -1;
52 for (var i = 0; i < parent.childNodes.length; i++) {
53 if (parent.childNodes[i] == targetNode) {
54 childIndex = i;
55 break;
56 }
57 }
58 if (childIndex >= 0) {
59 var cvoxid = cvox.ApiUtils.nextCvoxId_;
60 parent.setAttribute('cvoxid', cvoxid);
61 cvox.ApiUtils.nextCvoxId_ = (cvox.ApiUtils.nextCvoxId_ + 1) % 100;
62 return {'cvoxid': cvoxid, 'childIndex': childIndex};
63 }
64 }
65 throw 'Cannot reference node: ' + targetNode;
66 };
67
68 /**
69 * Retrieves a node from its serializable node reference.
70 *
71 * @param {Object} nodeRef A serializable reference to a node.
72 * @return {Node} The node on the page that this object refers to.
73 */
74 cvox.ApiUtils.getNodeFromRef = function(nodeRef) {
75 if (nodeRef['id']) {
76 return document.getElementById(nodeRef['id']);
77 } else if (nodeRef['cvoxid']) {
78 var selector = '*[cvoxid="' + nodeRef['cvoxid'] + '"]';
79 var element = document.querySelector(selector);
80 if (element && element.removeAttribute) {
81 element.removeAttribute('cvoxid');
82 }
83 if (nodeRef['childIndex'] != null) {
84 return element.childNodes[nodeRef['childIndex']];
85 } else {
86 return element;
87 }
88 }
89 throw 'Bad node reference: ' + cvox.ChromeVoxJSON.stringify(nodeRef);
90 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698