lib/relations/JavaScriptExtJsRequire.js

lib/ AssetGraph.js errors.js index.js query.js
assets/ Asset.js Atom.js CacheManifest.js CoffeeScript.js Css.js Flash.js Gif.js Htc.js Html.js I18n.js Ico.js Image.js JavaScript.js Jpeg.js Json.js KnockoutJsTemplate.js Less.js Png.js Rss.js StaticUrlMap.js Stylus.js Text.js Xml.js index.js
relations/ CacheManifestEntry.js CssAlphaImageLoader.js CssBehavior.js CssFontFaceSrc.js CssImage.js CssImport.js CssUrlTokenRelation.js HtmlAlternateLink.js HtmlAnchor.js HtmlAppleTouchStartupImage.js HtmlApplet.js HtmlAudio.js HtmlCacheManifest.js HtmlConditionalComment.js HtmlDataBindAttribute.js HtmlEdgeSideInclude.js HtmlEmbed.js HtmlFrame.js HtmlIFrame.js HtmlIFrameSrcDoc.js HtmlImage.js HtmlInlineScriptTemplate.js HtmlKnockoutContainerless.js HtmlObject.js HtmlRelation.js HtmlRequireJsMain.js HtmlScript.js HtmlShortcutIcon.js HtmlStyle.js HtmlStyleAttribute.js HtmlVideo.js HtmlVideoPoster.js JavaScriptAmdDefine.js JavaScriptAmdRequire.js JavaScriptCommonJsRequire.js JavaScriptExtJsRequire.js JavaScriptGetStaticUrl.js JavaScriptGetText.js JavaScriptInclude.js JavaScriptShimRequire.js JavaScriptTrHtml.js Relation.js StaticUrlMapEntry.js index.js
resolvers/ data.js extJs4Dir.js file.js fixedDirectory.js http.js index.js javascript.js
transforms/ addCacheManifest.js bundleRelations.js bundleRequireJs.js compileCoffeeScriptToJavaScript.js compileLessToCss.js compileStylusToCss.js compressJavaScript.js convertCssImportsToHtmlStyles.js convertHtmlStylesToInlineCssImports.js convertStylesheetsToInlineStyles.js drawGraph.js executeJavaScriptInOrder.js externalizeRelations.js flattenStaticIncludes.js inlineCssImagesWithLegacyFallback.js inlineRelations.js loadAssets.js mergeIdenticalAssets.js minifyAssets.js moveAssets.js moveAssetsInOrder.js populate.js prettyPrintAssets.js pullGlobalsIntoVariables.js registerRequireJsConfig.js removeAssets.js removeRelations.js setAssetContentType.js setAssetEncoding.js setAssetExtension.js setHtmlImageDimensions.js startOverIfAssetSourceFilesChange.js writeAssetsToDisc.js writeAssetsToStdout.js writeStatsToStderr.js
util/ deepCopy.js extendWithGettersAndSetters.js fsTools.js getImageInfoFromBuffers.js memoizeAsyncAccessor.js uniqueId.js urlTools.js
var util = require('util'),
    _ = require('underscore'),
    extendWithGettersAndSetters = require('../util/extendWithGettersAndSetters'),
    Relation = require('./Relation');

function JavaScriptExtJsRequire(config) {
    Relation.call(this, config);
}

util.inherits(JavaScriptExtJsRequire, Relation);

extendWithGettersAndSetters(JavaScriptExtJsRequire.prototype, {
    baseAssetQuery: {type: 'Html', isInline: false},

    inline: function () {
        throw new Error("JavaScriptExtJsRequire.inline(): Not supported.");
    },

    get href() {
        return this.node[1][2][0][1];
    },

    set href(href) {
        this.node[1][2][0][1] = href;
    },

    attach: function (asset, position, adjacentRelation) {
        throw new Error("Not implemented");
    },

    detach: function () {
        if (this.extRequireStatNode) {
            var parameters = this.extRequireStatNode[1][2];
            if (parameters.length === 2 && parameters[0] === this.node && parameters[1][0] === 'function') {
                // Substitute Ext.require('Foo.Bar', function () {}) => Ext.require([], function (){})
                // Must keep the array there, Ext.require(function () {}) doesn't work
                parameters.splice(0, 1, ['array', []]);
            } else if (parameters.length === 1 && (parameters[0][0] === 'string' || parameters[0][0] === 'array' && parameters[0][0][1].length === 1)) {
                // The only relation left (and no trailing function), remove the entire Ext.require statement
                this.extRequireStatParentNode.splice(this.extRequireStatParentNode.indexOf(this.extRequireStatNode), 1);
            } else if (parameters.length === 2 && parameters[1][0] === 'function' && parameters[0][0] === 'array') {
                // Must keep the array there, Ext.require(function () {}) doesn't work
                parameters[0][1].splice(parameters[0][1].indexOf(this.node), 1);
            } else if (parameters.length > 2 && parameters.indexOf(this.node) !== -1) {
                parameters.splice(parameters.indexOf(this.node, 1));
            }
            // Else give up, people shouldn't do Ext.require([...], [...], function (){}) anyway
            delete this.extRequireStatNode;
        } else {
            // FIXME: Implement detach from Ext.define({requires:...}) (not imperative, but would be nice).
        }
        delete this.node;
        delete this.parentNode;
        return Relation.prototype.detach.call(this);
    }
});

module.exports = JavaScriptExtJsRequire;