public void SaveTranslation(string path)
        {
            IAsset file = new Asset(path);
            TypeScriptTranslator translator = new TypeScriptTranslator();
            var compiled = translator.Translate(file);

            var normalScript = path.Replace("." + FileExtension, ".js");

            using (var compiledScript = File.CreateText(HostingEnvironment.MapPath(normalScript)))
            {
                compiledScript.Write(compiled.Content);
                compiledScript.Close();
            }
        }
        public IEnumerable<Exception> ValidateTranslation(string path)
        {
            var retVal = new List<Exception>();
            try
            {
                IAsset file = new Asset(path);
                TypeScriptTranslator translator = new TypeScriptTranslator();
                translator.Translate(file);
            }
            catch (AssetTranslationException ex)
            {
                retVal.Add(ex);
            }

            return retVal;
        }
        public void FillingOfDependenciesIsCorrect()
        {
            // Arrange
            var virtualFileSystemMock = new Mock<IVirtualFileSystemWrapper>();

            string jqueryTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                "jquery.d.ts");
            virtualFileSystemMock
                .Setup(fs => fs.FileExists(jqueryTsAssetVirtualPath))
                .Returns(true)
                ;
            virtualFileSystemMock
                .Setup(fs => fs.GetFileTextContent(jqueryTsAssetVirtualPath))
                .Returns("")
                ;

            string iTranslatorBadgeTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                "ITranslatorBadge.d.ts");
            virtualFileSystemMock
                .Setup(fs => fs.FileExists(iTranslatorBadgeTsAssetVirtualPath))
                .Returns(true)
                ;
            virtualFileSystemMock
                .Setup(fs => fs.GetFileTextContent(iTranslatorBadgeTsAssetVirtualPath))
                .Returns(@"interface ITranslatorBadge {
            getText(): string;
            setText(text: string): void;
            show(): void;
            hide(): void;
            }")
                ;

            string translatorBadgeTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                "TranslatorBadge.ts");
            virtualFileSystemMock
                .Setup(fs => fs.FileExists(translatorBadgeTsAssetVirtualPath))
                .Returns(true)
                ;
            virtualFileSystemMock
                .Setup(fs => fs.GetFileTextContent(translatorBadgeTsAssetVirtualPath))
                .Returns(@"/// <reference path=""jquery.d.ts"" />
            /*
            /// <reference path=""typings/knockout/knockout.d.ts"" />
            */
            /// <reference path=""//netdna.bootstrapcdn.com/bootstrap/3.0.0/typings/bootstrap.d.ts"" />
            /// <reference path=""ITranslatorBadge.d.ts"" />

            class TranslatorBadge implements ITranslatorBadge {
            public $badgeElem: any;
            public $linkElem: any;

            constructor (public elementId: string) {
            this.$badgeElem = jQuery(""#"" + elementId);
            this.$linkElem = this.$badgeElem.find(""A:first"");
            }

            public getText(): string {
            return this.$linkElem.text();
            }

            public setText(text: string): void {
            this.$linkElem.text(text);
            }

            public show(): void {
            this.$badgeElem.show(0);
            }

            public hide(): void {
            this.$badgeElem.hide(0);
            }
            }")
                ;

            string coloredTranslatorBadgeTsAssetVirtualPath = UrlHelpers.Combine(SCRIPTS_DIRECTORY_VIRTUAL_PATH,
                "ColoredTranslatorBadge.ts");
            virtualFileSystemMock
                .Setup(fs => fs.FileExists(coloredTranslatorBadgeTsAssetVirtualPath))
                .Returns(true)
                ;
            virtualFileSystemMock
                .Setup(fs => fs.GetFileTextContent(coloredTranslatorBadgeTsAssetVirtualPath))
                .Returns(@"/// <reference path=""jquery.d.ts"" />
            /// <reference path=""TranslatorBadge.ts"" />

            class ColoredTranslatorBadge extends TranslatorBadge {
            public getTextColor(): string {
            return this.$linkElem.css(""color"");
            }

            public setTextColor(color: string): void {
            this.$linkElem.css(""color"", color);
            }

            public getBorderColor(): string {
            return this.$badgeElem.css(""border-color"");
            }

            public setBorderColor(color: string) {
            this.$badgeElem.css(""border-color"", color);
            }
            }")
                ;

            Func<IJsEngine> createJsEngineInstance = () => (new Mock<IJsEngine>()).Object;
            IVirtualFileSystemWrapper virtualFileSystemWrapper = virtualFileSystemMock.Object;
            var relativePathResolver = new MockRelativePathResolver();
            var tsConfig = new TypeScriptSettings();

            var tsTranslator = new TypeScriptTranslator(createJsEngineInstance,
                virtualFileSystemWrapper, relativePathResolver, tsConfig);

            const string assetContent = @"/// <reference path=""ColoredTranslatorBadge.ts"" />
            var TS_BADGE_TEXT = ""TypeScript"";
            var TS_BADGE_COLOR = ""#0074C1"";

            var tsBadge = new ColoredTranslatorBadge(""ts"");
            tsBadge.setText(TS_BADGE_TEXT);
            tsBadge.setTextColor(TS_BADGE_COLOR);
            tsBadge.setBorderColor(TS_BADGE_COLOR);";
            string assetUrl = UrlHelpers.Combine(SCRIPTS_DIRECTORY_URL, "TestTypeScript.ts");
            TsScript script = tsTranslator.PreprocessScript(assetContent, assetUrl);
            var dependencies = new DependencyCollection();

            // Act
            tsTranslator.FillDependencies(assetUrl, script, dependencies);

            // Assert
            Assert.AreEqual(4, dependencies.Count);

            Dependency coloredTranslatorBadgeTsAsset = dependencies[0];
            Dependency jqueryTsAsset = dependencies[1];
            Dependency translatorBadgeTsAsset = dependencies[2];
            Dependency iTranslatorBadgeTsAsset = dependencies[3];

            Assert.AreEqual(coloredTranslatorBadgeTsAssetVirtualPath, coloredTranslatorBadgeTsAsset.Url);
            Assert.AreEqual(true, coloredTranslatorBadgeTsAsset.IsObservable);

            Assert.AreEqual(jqueryTsAssetVirtualPath, jqueryTsAsset.Url);
            Assert.AreEqual(true, jqueryTsAsset.IsObservable);

            Assert.AreEqual(translatorBadgeTsAssetVirtualPath, translatorBadgeTsAsset.Url);
            Assert.AreEqual(true, translatorBadgeTsAsset.IsObservable);

            Assert.AreEqual(iTranslatorBadgeTsAssetVirtualPath, iTranslatorBadgeTsAsset.Url);
            Assert.AreEqual(true, iTranslatorBadgeTsAsset.IsObservable);
        }
Exemple #4
0
        public static void RegisterBundles(BundleCollection bundles)
        {
            // bundles.IgnoreList.Clear();
            //  AddDefaultIgnorePatterns(bundles.IgnoreList);
            //NOTE: it's bundles.DirectoryFilter in Microsoft.AspNet.Web.Optimization.1.1.3 and not bundles.IgnoreList

            var engine = new V8JsEngine();

            var uglySettings = new UglifySettings();

            uglySettings.Js.CodeGeneration.Beautify = true;

            bundles.UseCdn = false;

            var uglifyJsMinifier = new UglifyJsMinifier(() => engine, uglySettings)

            {
                CompressionOptions = { Angular = true },
                ParsingOptions = new ParsingOptions { Strict = true },
                CodeGenerationOptions = new CodeGenerationOptions()
            };

            var lessTranslator = new LessTranslator();

            var cssTransformer = new CssTransformer(new CleanCssMinifier(), new ITranslator[] { lessTranslator });

            var tsTranslater = new TypeScriptTranslator();

            var jsTransformer = new JsTransformer(uglifyJsMinifier, new List<ITranslator> { tsTranslater });

            var jsBundle = new CustomScriptBundle("~/bundles/js");

            jsBundle.IncludeDirectory("~/scripts", "*.js", true);
            jsBundle.IncludeDirectory("~/scripts", "*.map", true);

            bundles.IgnoreList.Ignore("angular-mocks.js");
            bundles.IgnoreList.Ignore("angular-scenario.js");

             //   jsBundle.IncludeDirectory("~/scripts/angular-dialog-service-5.1.2", "*.js", true);

            jsBundle.Builder = new DefaultBundleBuilder();

            jsBundle.Orderer = new JsBundlerOrderer();

            jsBundle.Transforms.Add(jsTransformer);

            bundles.Add(jsBundle);

            var typeScriptBundle = new CustomScriptBundle("~/bundles/ts");    //// Typescript generatred locally via visual studio and checked in - not done on the fly

            typeScriptBundle.IncludeDirectory("~/app", "*.js", true);

            typeScriptBundle.Transforms.Add(jsTransformer);

            typeScriptBundle.Builder = new DefaultBundleBuilder();

            typeScriptBundle.Orderer = new JsBundlerOrderer();

            bundles.Add(typeScriptBundle);

            var lessCssBundle = new Bundle("~/bundles/less");

            lessCssBundle.Include("~/Content/bootstrap/bootstrap.less");

            lessCssBundle.Builder = new DefaultBundleBuilder();

            lessCssBundle.Transforms.Add(cssTransformer);

            lessCssBundle.Orderer = new DefaultBundleOrderer();

            bundles.Add(lessCssBundle);

            var cssBundle = new StyleBundle("~/bundles/css");

            cssBundle.IncludeDirectory("~/Content/Bootstrap", "*.css", false);
            cssBundle.IncludeDirectory("~/Content/", "*.css", false);
            cssBundle.IncludeDirectory("~/Content/css", "*.css", false);

            cssBundle.Builder = new DefaultBundleBuilder();

            cssBundle.Transforms.Add(cssTransformer);

            cssBundle.Orderer = new PushToTopOrderer("bootstrap");

            bundles.Add(cssBundle);

            var publicCssBundle = new StyleBundle("~/bundles/public/css");
            publicCssBundle.IncludeDirectory("~/Content/public", "*.css", true);
            publicCssBundle.Builder = new DefaultBundleBuilder();
            publicCssBundle.Transforms.Add(cssTransformer);
            publicCssBundle.Orderer = new PushToTopOrderer("bootstrap");
            bundles.Add(publicCssBundle);
        }