You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			149 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // <copyright file="ScriptResourceInfo.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright>
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| namespace System.Web.UI {
 | |
|     using System;
 | |
|     using System.Collections;
 | |
|     using System.Collections.Generic;
 | |
|     using System.Globalization;
 | |
|     using System.Reflection;
 | |
|     using System.Web.Handlers;
 | |
|     using System.Web.Resources;
 | |
|     using System.Web.Util;
 | |
| 
 | |
|     internal class ScriptResourceInfo {
 | |
|         private string _contentType;
 | |
|         private bool _performSubstitution;
 | |
|         private string _scriptName;
 | |
|         private string _scriptResourceName;
 | |
|         private string _typeName;
 | |
|         private bool _isDebug;
 | |
|         private string _cdnPath;
 | |
|         private string _cdnPathSecureConnection;
 | |
|         private readonly string _loadSuccessExpression;
 | |
| 
 | |
|         private static readonly IDictionary _scriptCache = Hashtable.Synchronized(new Hashtable());
 | |
|         private static readonly IDictionary _duplicateScriptAttributesChecked = Hashtable.Synchronized(new Hashtable());
 | |
| 
 | |
|         public static readonly ScriptResourceInfo Empty = new ScriptResourceInfo();
 | |
| 
 | |
|         private ScriptResourceInfo() {
 | |
|         }
 | |
| 
 | |
|         public ScriptResourceInfo(WebResourceAttribute wra, ScriptResourceAttribute sra, Assembly assembly)
 | |
|             : this() {
 | |
|             _scriptName = wra.WebResource;
 | |
|             _cdnPath = wra.CdnPath;
 | |
|             _contentType = wra.ContentType;
 | |
|             _performSubstitution = wra.PerformSubstitution;
 | |
|             _loadSuccessExpression = wra.LoadSuccessExpression;
 | |
|             _isDebug = !String.IsNullOrEmpty(_scriptName) && _scriptName.EndsWith(".debug.js", StringComparison.OrdinalIgnoreCase);
 | |
|             if (sra != null) {
 | |
|                 _scriptResourceName = sra.StringResourceName;
 | |
|                 _typeName = sra.StringResourceClientTypeName;
 | |
|             }
 | |
|             if (!String.IsNullOrEmpty(_cdnPath)) {
 | |
|                 _cdnPath = AssemblyResourceLoader.FormatCdnUrl(assembly, _cdnPath);
 | |
|                 _cdnPathSecureConnection = AssemblyResourceLoader.FormatCdnUrl(assembly, wra.CdnPathSecureConnection);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public string CdnPath {
 | |
|             get {
 | |
|                 return _cdnPath;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public string CdnPathSecureConnection {
 | |
|             get {
 | |
|                 return _cdnPathSecureConnection;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public string LoadSuccessExpression {
 | |
|             get {
 | |
|                 return _loadSuccessExpression;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public string ContentType {
 | |
|             get { return _contentType; }
 | |
|         }
 | |
| 
 | |
|         public bool IsDebug {
 | |
|             get { return _isDebug; }
 | |
|         }
 | |
| 
 | |
|         public bool PerformSubstitution {
 | |
|             get { return _performSubstitution; }
 | |
|         }
 | |
| 
 | |
|         public string ScriptName {
 | |
|             get { return _scriptName; }
 | |
|         }
 | |
| 
 | |
|         public string ScriptResourceName {
 | |
|             get { return _scriptResourceName; }
 | |
|         }
 | |
| 
 | |
|         public string TypeName {
 | |
|             get { return _typeName; }
 | |
|         }
 | |
| 
 | |
|         public static ScriptResourceInfo GetInstance(Assembly assembly, string resourceName) {
 | |
|             // The first time this API is called, check for attributes that point to the same script
 | |
|             if (!_duplicateScriptAttributesChecked.Contains(assembly)) {
 | |
|                 Dictionary<string, bool> scripts = new Dictionary<string, bool>();
 | |
|                 foreach (ScriptResourceAttribute attr
 | |
|                     in assembly.GetCustomAttributes(typeof(ScriptResourceAttribute), false)) {
 | |
| 
 | |
|                     string scriptName = attr.ScriptName;
 | |
|                     if (scripts.ContainsKey(scriptName)) {
 | |
|                         throw new InvalidOperationException(
 | |
|                             String.Format(CultureInfo.CurrentCulture,
 | |
|                                   AtlasWeb.ScriptResourceHandler_DuplicateScriptResources,
 | |
|                                   scriptName, assembly.GetName()));
 | |
|                     }
 | |
|                     scripts.Add(scriptName, true);
 | |
|                 }
 | |
| 
 | |
|                 _duplicateScriptAttributesChecked[assembly] = true;
 | |
|             }
 | |
|             Tuple<Assembly, string> cacheKey = new Tuple<Assembly, string>(assembly, resourceName);
 | |
|             ScriptResourceInfo resourceInfo = (ScriptResourceInfo)_scriptCache[cacheKey];
 | |
|             if (resourceInfo == null) {
 | |
|                 WebResourceAttribute webResourceAttribute = null;
 | |
|                 ScriptResourceAttribute scriptResourceAttribute = null;
 | |
|                 // look for a WebResourceAttribute with that name
 | |
|                 object[] attrs = assembly.GetCustomAttributes(typeof(WebResourceAttribute), false);
 | |
|                 foreach (WebResourceAttribute wra in attrs) {
 | |
|                     if (String.Equals(wra.WebResource, resourceName, StringComparison.Ordinal)) {
 | |
|                         webResourceAttribute = wra;
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|                 if (webResourceAttribute != null) {
 | |
|                     // look for a script resource attribute with that name
 | |
|                     attrs = assembly.GetCustomAttributes(typeof(ScriptResourceAttribute), false);
 | |
|                     foreach (ScriptResourceAttribute sra in attrs) {
 | |
|                         if (String.Equals(sra.ScriptName, resourceName, StringComparison.Ordinal)) {
 | |
|                             scriptResourceAttribute = sra;
 | |
|                             break;
 | |
|                         }
 | |
|                     }
 | |
|                     resourceInfo = new ScriptResourceInfo(webResourceAttribute, scriptResourceAttribute, assembly);
 | |
|                 }
 | |
|                 else {
 | |
|                     resourceInfo = ScriptResourceInfo.Empty;
 | |
|                 }
 | |
|                 // Cache the results so we don't have to do this again
 | |
|                 _scriptCache[cacheKey] = resourceInfo;
 | |
|             }
 | |
|             return resourceInfo;
 | |
|         }
 | |
|     }
 | |
| }
 |