blob: 6b06d9c2479b218b33307134fa878bfa947593ca [file] [log] [blame]
/*
* Copyright (C) 2012 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @constructor
* @extends {WebInspector.ContentProviderBasedProjectDelegate}
* @param {string} name
* @param {string} type
*/
WebInspector.SimpleProjectDelegate = function(name, type)
{
WebInspector.ContentProviderBasedProjectDelegate.call(this, type);
this._name = name;
this._lastUniqueSuffix = 0;
}
WebInspector.SimpleProjectDelegate.projectId = function(name, type)
{
var typePrefix = type !== WebInspector.projectTypes.Network ? (type + ":") : "";
return typePrefix + name;
}
WebInspector.SimpleProjectDelegate.prototype = {
/**
* @return {string}
*/
id: function()
{
return WebInspector.SimpleProjectDelegate.projectId(this._name, this.type());
},
/**
* @return {string}
*/
displayName: function()
{
if (typeof this._displayName !== "undefined")
return this._displayName;
if (!this._name) {
this._displayName = this.type() !== WebInspector.projectTypes.Snippets ? WebInspector.UIString("(no domain)") : "";
return this._displayName;
}
var parsedURL = new WebInspector.ParsedURL(this._name);
if (parsedURL.isValid) {
this._displayName = parsedURL.host + (parsedURL.port ? (":" + parsedURL.port) : "");
if (!this._displayName)
this._displayName = this._name;
}
else
this._displayName = this._name;
return this._displayName;
},
/**
* @param {string} parentPath
* @param {string} name
* @param {string} url
* @param {!WebInspector.ContentProvider} contentProvider
* @param {boolean} isEditable
* @param {boolean=} isContentScript
* @return {string}
*/
addFile: function(parentPath, name, forceUniquePath, url, contentProvider, isEditable, isContentScript)
{
if (forceUniquePath)
name = this._ensureUniqueName(parentPath, name);
return this.addContentProvider(parentPath, name, url, contentProvider, isEditable, isContentScript);
},
/**
* @param {string} parentPath
* @param {string} name
* @return {string}
*/
_ensureUniqueName: function(parentPath, name)
{
var path = parentPath ? parentPath + "/" + name : name;
var uniquePath = path;
var suffix = "";
var contentProviders = this.contentProviders();
while (contentProviders[uniquePath]) {
suffix = " (" + (++this._lastUniqueSuffix) + ")";
uniquePath = path + suffix;
}
return name + suffix;
},
__proto__: WebInspector.ContentProviderBasedProjectDelegate.prototype
}
/**
* @constructor
* @extends {WebInspector.Object}
* @param {!WebInspector.Workspace} workspace
* @param {string} type
*/
WebInspector.SimpleWorkspaceProvider = function(workspace, type)
{
this._workspace = workspace;
this._type = type;
this._simpleProjectDelegates = {};
}
WebInspector.SimpleWorkspaceProvider.prototype = {
/**
* @param {string} projectName
* @return {!WebInspector.SimpleProjectDelegate}
*/
_projectDelegate: function(projectName)
{
if (this._simpleProjectDelegates[projectName])
return this._simpleProjectDelegates[projectName];
var simpleProjectDelegate = new WebInspector.SimpleProjectDelegate(projectName, this._type);
this._simpleProjectDelegates[projectName] = simpleProjectDelegate;
this._workspace.addProject(simpleProjectDelegate);
return simpleProjectDelegate;
},
/**
* @param {string} url
* @param {!WebInspector.ContentProvider} contentProvider
* @param {boolean} isEditable
* @param {boolean=} isContentScript
* @return {!WebInspector.UISourceCode}
*/
addFileForURL: function(url, contentProvider, isEditable, isContentScript)
{
return this._innerAddFileForURL(url, contentProvider, isEditable, false, isContentScript);
},
/**
* @param {string} url
* @param {!WebInspector.ContentProvider} contentProvider
* @param {boolean} isEditable
* @param {boolean=} isContentScript
* @return {!WebInspector.UISourceCode}
*/
addUniqueFileForURL: function(url, contentProvider, isEditable, isContentScript)
{
return this._innerAddFileForURL(url, contentProvider, isEditable, true, isContentScript);
},
/**
* @param {string} url
* @param {!WebInspector.ContentProvider} contentProvider
* @param {boolean} isEditable
* @param {boolean} forceUnique
* @param {boolean=} isContentScript
* @return {!WebInspector.UISourceCode}
*/
_innerAddFileForURL: function(url, contentProvider, isEditable, forceUnique, isContentScript)
{
var splitURL = WebInspector.ParsedURL.splitURL(url);
var projectName = splitURL[0];
var parentPath = splitURL.slice(1, splitURL.length - 1).join("/");
var name = splitURL[splitURL.length - 1];
var projectDelegate = this._projectDelegate(projectName);
var path = projectDelegate.addFile(parentPath, name, forceUnique, url, contentProvider, isEditable, isContentScript);
var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (this._workspace.uiSourceCode(projectDelegate.id(), path));
console.assert(uiSourceCode);
return uiSourceCode;
},
reset: function()
{
for (var projectName in this._simpleProjectDelegates)
this._simpleProjectDelegates[projectName].reset();
this._simpleProjectDelegates = {};
},
__proto__: WebInspector.Object.prototype
}