1e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// found in the LICENSE file. 4e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 5e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/** 6e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @constructor 7e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 8e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.JSArticle = function() 9e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 10e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** @type {string} */ 11e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.pageTitle; 12e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** @type {string} */ 13e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.standardizationStatus; 147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** @type {?WebInspector.WikiParser.Block} */ 15e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.summary; 167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** @type {!Array.<!WebInspector.JSArticle.Parameter>} */ 177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.parameters = []; 187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** @type {?WebInspector.JSArticle.Method} */ 19e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.methods; 207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** @type {?WebInspector.WikiParser.Block} */ 21e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.remarks; 227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** @type {!Array.<!WebInspector.JSArticle.Example>} */ 237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.examples = []; 247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/** 277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @constructor 287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} name 297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} dataType 307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} optional 317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} description 327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.JSArticle.Parameter = function(name, dataType, optional, description) 347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.name = WebInspector.JSArticle.unfoldStringValue(name); 367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.dataType = WebInspector.JSArticle.unfoldStringValue(dataType); 377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var textContent = WebInspector.JSArticle.unfoldStringValue(optional); 387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.optional = textContent ? textContent.toUpperCase() === "YES" : false; 397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.description = description; 407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/** 437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @constructor 447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} language 457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.WikiParser.Block} code 467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} liveUrl 477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} description 487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.JSArticle.Example = function(language, code, liveUrl, description) 507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.language = WebInspector.JSArticle.unfoldStringValue(language); 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.code = WebInspector.JSArticle.unfoldStringValue(code); 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.liveUrl = WebInspector.JSArticle.unfoldStringValue(liveUrl); 547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.description = description; 557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/** 587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @constructor 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} returnValueName 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} returnValueDescription 617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.JSArticle.Method = function(returnValueName, returnValueDescription) 637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.returnValueName = WebInspector.JSArticle.unfoldStringValue(returnValueName); 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.returnValueDescription = returnValueDescription; 667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci/** 697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {?WebInspector.WikiParser.Block} block 707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {?string} 717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.JSArticle.unfoldStringValue = function(block) 737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (block && block.hasChildren() && block.children()[0].hasChildren()) 757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return block.children()[0].children()[0].text(); 767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return null; 77e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 78e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 79e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/** 80e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {string} wikiMarkupText 81e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @return {!WebInspector.JSArticle} 82e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 83e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.JSArticle.parse = function(wikiMarkupText) 84e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 85e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var wikiParser = new WebInspector.WikiParser(wikiMarkupText); 86e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var wikiDocument = wikiParser.document(); 87e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var article = new WebInspector.JSArticle(); 887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci article.pageTitle = wikiDocument["Page_Title"]; 897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (typeof article.pageTitle !== "string") 907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci delete article.pageTitle; 917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci article.standardizationStatus = wikiDocument["Standardization_Status"]; 927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (article.standardizationStatus !== "string") 937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci delete article.standardizationStatus; 947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var apiObjectMethod = wikiDocument["API_Object_Method"]; 957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (apiObjectMethod) { 967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var returnValueName = apiObjectMethod["Javascript_data_type"]; 977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var returnValue = apiObjectMethod["Return_value_description"]; 987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (returnValueName && returnValue) 997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci article.methods = new WebInspector.JSArticle.Method(returnValueName, returnValue); 1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci article.remarks = wikiDocument["Remarks_Section"] ? wikiDocument["Remarks_Section"]["Remarks"] : null; 1037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci article.summary = wikiDocument["Summary_Section"]; 1047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var examples = wikiDocument["Examples_Section"] && wikiDocument["Examples_Section"]["Examples"] ? wikiDocument["Examples_Section"]["Examples"] : []; 1067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!Array.isArray(examples) && typeof examples !== "undefined") 1077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci examples = [examples]; 1087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (var i = 0; i < examples.length; ++i) { 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!examples[i].values) 1117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci break; 1127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var language = examples[i].values["Language"]; 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var code = examples[i].values["Code"]; 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var liveUrl = examples[i].values["LiveURL"]; 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var description = examples[i].values["Description"]; 1167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci article.examples.push(new WebInspector.JSArticle.Example(language, code, liveUrl, description)); 1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var parameters = apiObjectMethod ? apiObjectMethod["Parameters"] : []; 1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!Array.isArray(parameters) && typeof parameters !== "undefined") 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci parameters = [parameters]; 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (var i = 0; i < parameters.length; ++i) { 1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!parameters[i].values) 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci break; 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var name = parameters[i].values["Name"]; 1277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var dataType = parameters[i].values["Data type"]; 1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var optional = parameters[i].values["Optional"]; 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var description = parameters[i].values["Description"]; 1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci article.parameters.push(new WebInspector.JSArticle.Parameter(name, dataType, optional, description)); 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 132e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 133e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return article; 134e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 135