Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / devtools / front_end / documentation / JSArticle.js
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  * @constructor
7  */
8 WebInspector.JSArticle = function()
9 {
10     /** @type {string} */
11     this.pageTitle;
12     /** @type {string} */
13     this.standardizationStatus;
14     /** @type {?WebInspector.WikiParser.Block} */
15     this.summary;
16     /** @type {!Array.<!WebInspector.JSArticle.Parameter>} */
17     this.parameters = [];
18     /** @type {?WebInspector.JSArticle.Method} */
19     this.methods;
20     /** @type {?WebInspector.WikiParser.Block} */
21     this.remarks;
22     /** @type {!Array.<!WebInspector.JSArticle.Example>} */
23     this.examples = [];
24 }
25
26 /**
27  * @constructor
28  * @param {?WebInspector.WikiParser.Block} name
29  * @param {?WebInspector.WikiParser.Block} dataType
30  * @param {?WebInspector.WikiParser.Block} optional
31  * @param {?WebInspector.WikiParser.Block} description
32  */
33 WebInspector.JSArticle.Parameter = function(name, dataType, optional, description)
34 {
35     this.name = WebInspector.JSArticle.unfoldStringValue(name);
36     this.dataType = WebInspector.JSArticle.unfoldStringValue(dataType);
37     var textContent = WebInspector.JSArticle.unfoldStringValue(optional);
38     this.optional = textContent ? textContent.toUpperCase() === "YES" : false;
39     this.description = description;
40 }
41
42 /**
43  * @constructor
44  * @param {?WebInspector.WikiParser.Block} language
45  * @param {!WebInspector.WikiParser.Block} code
46  * @param {?WebInspector.WikiParser.Block} liveUrl
47  * @param {?WebInspector.WikiParser.Block} description
48  */
49 WebInspector.JSArticle.Example = function(language, code, liveUrl, description)
50 {
51     this.language = WebInspector.JSArticle.unfoldStringValue(language);
52     this.code = WebInspector.JSArticle.unfoldStringValue(code);
53     this.liveUrl = WebInspector.JSArticle.unfoldStringValue(liveUrl);
54     this.description = description;
55 }
56
57 /**
58  * @constructor
59  * @param {?WebInspector.WikiParser.Block} returnValueName
60  * @param {?WebInspector.WikiParser.Block} returnValueDescription
61  */
62 WebInspector.JSArticle.Method = function(returnValueName, returnValueDescription)
63 {
64     this.returnValueName = WebInspector.JSArticle.unfoldStringValue(returnValueName);
65     this.returnValueDescription = returnValueDescription;
66 }
67
68 /**
69  * @param {?WebInspector.WikiParser.Block} block
70  * @return {?string}
71  */
72 WebInspector.JSArticle.unfoldStringValue = function(block)
73 {
74     if (block && block.hasChildren() && block.children()[0].hasChildren())
75         return block.children()[0].children()[0].text();
76     return null;
77 }
78
79 /**
80  * @param {string} wikiMarkupText
81  * @return {!WebInspector.JSArticle}
82  */
83 WebInspector.JSArticle.parse = function(wikiMarkupText)
84 {
85     var wikiParser = new WebInspector.WikiParser(wikiMarkupText);
86     var wikiDocument = wikiParser.document();
87     var article = new WebInspector.JSArticle();
88     article.pageTitle = wikiDocument["Page_Title"];
89     if (typeof article.pageTitle !== "string")
90         delete article.pageTitle;
91     article.standardizationStatus = wikiDocument["Standardization_Status"];
92     if (article.standardizationStatus !== "string")
93         delete article.standardizationStatus;
94     var apiObjectMethod = wikiDocument["API_Object_Method"];
95     if (apiObjectMethod) {
96         var returnValueName = apiObjectMethod["Javascript_data_type"];
97         var returnValue = apiObjectMethod["Return_value_description"];
98         if (returnValueName && returnValue)
99             article.methods = new WebInspector.JSArticle.Method(returnValueName, returnValue);
100     }
101
102     article.remarks = wikiDocument["Remarks_Section"] ? wikiDocument["Remarks_Section"]["Remarks"] : null;
103     article.summary = wikiDocument["Summary_Section"];
104
105     var examples = wikiDocument["Examples_Section"] && wikiDocument["Examples_Section"]["Examples"] ? wikiDocument["Examples_Section"]["Examples"] : [];
106     if (!Array.isArray(examples) && typeof examples !== "undefined")
107         examples = [examples];
108
109     for (var i = 0; i < examples.length; ++i) {
110         if (!examples[i].values)
111             break;
112         var language = examples[i].values["Language"];
113         var code = examples[i].values["Code"];
114         var liveUrl = examples[i].values["LiveURL"];
115         var description = examples[i].values["Description"];
116         article.examples.push(new WebInspector.JSArticle.Example(language, code, liveUrl, description));
117     }
118
119     var parameters = apiObjectMethod ? apiObjectMethod["Parameters"] : [];
120     if (!Array.isArray(parameters) && typeof parameters !== "undefined")
121         parameters = [parameters];
122
123     for (var i = 0; i < parameters.length; ++i) {
124         if (!parameters[i].values)
125             break;
126         var name = parameters[i].values["Name"];
127         var dataType = parameters[i].values["Data type"];
128         var optional = parameters[i].values["Optional"];
129         var description = parameters[i].values["Description"];
130         article.parameters.push(new WebInspector.JSArticle.Parameter(name, dataType, optional, description));
131     }
132
133     return article;
134 }