summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.BuildTasks/JsPack.cs
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2009-09-27 21:26:15 -0700
committerAndrew Arnott <andrewarnott@gmail.com>2009-09-27 21:26:15 -0700
commitb9c010dfab0a2e526a4719fdf7c1454ef20660b3 (patch)
tree50b6d334c6d387c6d01a150b3a6801114addc834 /src/DotNetOpenAuth.BuildTasks/JsPack.cs
parentf1ccc1033b430153a0006bb6534bde6dbbb7fb30 (diff)
downloadDotNetOpenAuth-b9c010dfab0a2e526a4719fdf7c1454ef20660b3.zip
DotNetOpenAuth-b9c010dfab0a2e526a4719fdf7c1454ef20660b3.tar.gz
DotNetOpenAuth-b9c010dfab0a2e526a4719fdf7c1454ef20660b3.tar.bz2
Javascript is now packed for release builds.
Diffstat (limited to 'src/DotNetOpenAuth.BuildTasks/JsPack.cs')
-rw-r--r--src/DotNetOpenAuth.BuildTasks/JsPack.cs63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/DotNetOpenAuth.BuildTasks/JsPack.cs b/src/DotNetOpenAuth.BuildTasks/JsPack.cs
new file mode 100644
index 0000000..ee119ec
--- /dev/null
+++ b/src/DotNetOpenAuth.BuildTasks/JsPack.cs
@@ -0,0 +1,63 @@
+//-----------------------------------------------------------------------
+// <copyright file="JsPack.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOpenAuth.BuildTasks {
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Text;
+ using Microsoft.Build.Framework;
+ using Microsoft.Build.Utilities;
+
+ /// <summary>
+ /// Compresses .js files.
+ /// </summary>
+ public class JsPack : Task {
+ /// <summary>
+ /// The Javascript packer to use.
+ /// </summary>
+ private Dean.Edwards.ECMAScriptPacker packer = new Dean.Edwards.ECMAScriptPacker();
+
+ /// <summary>
+ /// Gets or sets the set of javascript files to compress.
+ /// </summary>
+ /// <value>The inputs.</value>
+ [Required]
+ public ITaskItem[] Inputs { get; set; }
+
+ /// <summary>
+ /// Gets or sets the paths where the packed javascript files should be saved.
+ /// </summary>
+ /// <value>The outputs.</value>
+ [Required]
+ public ITaskItem[] Outputs { get; set; }
+
+ /// <summary>
+ /// Executes this instance.
+ /// </summary>
+ /// <returns>A value indicating whether the packing was successful.</returns>
+ public override bool Execute() {
+ if (this.Inputs.Length != this.Outputs.Length) {
+ Log.LogError("{0} inputs and {1} outputs given.", this.Inputs.Length, this.Outputs.Length);
+ return false;
+ }
+
+ for (int i = 0; i < this.Inputs.Length; i++) {
+ if (!File.Exists(this.Outputs[i].ItemSpec) || File.GetLastWriteTime(this.Outputs[i].ItemSpec) < File.GetLastWriteTime(this.Inputs[i].ItemSpec)) {
+ Log.LogMessage(MessageImportance.Normal, TaskStrings.PackingJsFile, this.Inputs[i].ItemSpec);
+ string input = File.ReadAllText(this.Inputs[i].ItemSpec);
+ string output = this.packer.Pack(input);
+ File.WriteAllText(this.Outputs[i].ItemSpec, output, Encoding.UTF8);
+ } else {
+ Log.LogMessage(MessageImportance.Low, TaskStrings.SkipPackingJsFile, this.Inputs[i].ItemSpec);
+ }
+ }
+
+ return true;
+ }
+ }
+}