Example #1
0
        private SPFile CreateOrUpdateMinifiedFile(SPItemEventProperties properties)
        {
            SPFile returnValue = null;

            RunForMainFile(properties, (fileNameParser, targetFolder, mainFile, minifiedFile) =>
            {
                var reader   = new FileContentParser(mainFile);
                var content  = reader.GetCompiledContent();
                var minifier = new FileMinifier(fileNameParser.FileExtension, content);

                if (minifiedFile != null)
                {
                    if (minifiedFile.CheckedOutByUser == null)
                    {
                        minifiedFile.CheckOut();
                    }

                    minifiedFile.SaveBinary(minifier.MinifyAsByteArray());
                }
                else
                {
                    var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site);
                    var fileHash           = fileHashDictionary[fileNameParser.FilePath];
                    var minifiedFileName   = fileNameParser.GenerateMinifiedVersionFileName(fileHash);

                    string fileUrl = String.Format("{0}/{1}", targetFolder.Url, minifiedFileName);
                    minifiedFile   = targetFolder.Files.Add(fileUrl, minifier.MinifyAsByteArray());
                }

                returnValue = minifiedFile;
            });

            return(returnValue);
        }
Example #2
0
        /// <summary>
        /// An item is being deleted
        /// </summary>
        public override void ItemDeleting(SPItemEventProperties properties)
        {
            base.ItemDeleting(properties);

            lock (_lock)
            {
                RunForMainFile(properties, (fileNameParser, targetFolder, mainFile, minifiedFile) =>
                {
                    if (minifiedFile != null)
                    {
                        minifiedFile.Delete();

                        var path = FileUtilities.RemoveStyleLibraryFromPath(mainFile.Url);
                        var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site);
                        fileHashDictionary.Remove(path);
                    }
                });
            }
        }
Example #3
0
        /// <summary>
        /// An item is being deleted
        /// </summary>
        public override void ItemDeleting(SPItemEventProperties properties)
        {
            base.ItemDeleting(properties);

            lock (_lock)
            {
                RunForMainFile(properties, (fileNameParser, targetFolder, mainFile, minifiedFile) =>
                {
                    if (minifiedFile != null)
                    {
                        minifiedFile.Delete();

                        var path = FileUtilities.RemoveStyleLibraryFromPath(mainFile.Url);
                        var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site);
                        fileHashDictionary.Remove(path);
                    }
                });
            }
        }
Example #4
0
        private void PerformCheckIn(SPItemEventProperties properties, SPFile mainFile, SPFile minifiedFile)
        {
            CheckInType checkInType = new CheckInTypeDetector(properties).Detect();

            if (checkInType != CheckInType.MajorVersion)
            {
                return;
            }

            var hash           = FileUtilities.GetMD5Hash(minifiedFile.OpenBinary());
            var path           = FileUtilities.RemoveStyleLibraryFromPath(mainFile.Url);
            var fileNameParser = new FileNameParser(path);

            minifiedFile.CheckIn("", SPCheckinType.MajorCheckIn);
            minifiedFile.Item[SPBuiltInFieldId.FileLeafRef] = fileNameParser.GenerateMinifiedVersionFileName(hash);
            minifiedFile.Item.SystemUpdate();

            var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site);

            fileHashDictionary.Update(path, hash);
        }
Example #5
0
        /// <summary>
        /// Gets the final path for the specified asset based on the environment mode
        /// </summary>
        /// <returns>Final path</returns>
        protected string GetFinalPath()
        {
            string path = FilePath;

            if (EnvironmentMode == EnvironmentMode.Production)
            {
                var fileNameParser = new FileNameParser(path);

                if (fileNameParser.ShouldBeMinified)
                {
                    var fileHashDictionary = new FileHashDictionary(SPContext.Current.Site);
                    var fileHash           = fileHashDictionary[path];
                    var minifiedFileName   = fileNameParser.GenerateMinifiedVersionFileName(fileHash);

                    path = String.Format("{0}/{1}", Constants.SPMinFolderName, minifiedFileName);
                }
            }

            path = String.Format("{0}/Style Library/{1}", SPContext.Current.Site.RootWeb.ServerRelativeUrl, path);
            path = FileUtilities.RemoveDuplicatedSlashesFromPath(path);

            return(path);
        }
Example #6
0
        private void RunForMainFile(SPItemEventProperties properties, Action <FileNameParser, SPFolder, SPFile, SPFile> action)
        {
            SPListItem item = properties.ListItem;

            if (item.Folder != null)
            {
                return;
            }

            var url            = FileUtilities.RemoveStyleLibraryFromPath(item.File.Url);
            var fileNameParser = new FileNameParser(url);

            if (fileNameParser.ShouldBeMinified)
            {
                SPList   styleLibrary = properties.ListItem.ParentList;
                SPFolder spminFolder  = EnsureSPMinFolder(styleLibrary);

                var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site);
                var fileHash           = fileHashDictionary[url];

                SPFile minifiedFile = FileUtilities.GetFile(spminFolder, fileNameParser.GenerateMinifiedVersionFileName(fileHash));
                action(fileNameParser, spminFolder, item.File, minifiedFile);
            }
        }
Example #7
0
        private void RunForMainFile(SPItemEventProperties properties, Action<FileNameParser, SPFolder, SPFile, SPFile> action)
        {
            SPListItem item = properties.ListItem;
            if (item.Folder != null)
                return;

            var url = FileUtilities.RemoveStyleLibraryFromPath(item.File.Url);
            var fileNameParser = new FileNameParser(url);

            if (fileNameParser.ShouldBeMinified)
            {
                SPList styleLibrary = properties.ListItem.ParentList;
                SPFolder spminFolder = EnsureSPMinFolder(styleLibrary);

                var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site);
                var fileHash = fileHashDictionary[url];

                SPFile minifiedFile = FileUtilities.GetFile(spminFolder, fileNameParser.GenerateMinifiedVersionFileName(fileHash));
                action(fileNameParser, spminFolder, item.File, minifiedFile);
            }
        }
Example #8
0
        private void PerformCheckIn(SPItemEventProperties properties, SPFile mainFile, SPFile minifiedFile)
        {
            CheckInType checkInType = new CheckInTypeDetector(properties).Detect();
            if (checkInType != CheckInType.MajorVersion)
                return;

            var hash = FileUtilities.GetMD5Hash(minifiedFile.OpenBinary());
            var path = FileUtilities.RemoveStyleLibraryFromPath(mainFile.Url);
            var fileNameParser = new FileNameParser(path);

            minifiedFile.CheckIn("", SPCheckinType.MajorCheckIn);
            minifiedFile.Item[SPBuiltInFieldId.FileLeafRef] = fileNameParser.GenerateMinifiedVersionFileName(hash);
            minifiedFile.Item.SystemUpdate();

            var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site);
            fileHashDictionary.Update(path, hash);
        }
Example #9
0
        private SPFile CreateOrUpdateMinifiedFile(SPItemEventProperties properties)
        {
            SPFile returnValue = null;

            RunForMainFile(properties, (fileNameParser, targetFolder, mainFile, minifiedFile) =>
            {
                var reader = new FileContentParser(mainFile);
                var content = reader.GetCompiledContent();
                var minifier = new FileMinifier(fileNameParser.FileExtension, content);

                if (minifiedFile != null)
                {
                    if (minifiedFile.CheckedOutByUser == null)
                        minifiedFile.CheckOut();

                    minifiedFile.SaveBinary(minifier.MinifyAsByteArray());
                }
                else
                {
                    var fileHashDictionary = new FileHashDictionary(properties.ListItem.Web.Site);
                    var fileHash = fileHashDictionary[fileNameParser.FilePath];
                    var minifiedFileName = fileNameParser.GenerateMinifiedVersionFileName(fileHash);

                    string fileUrl = String.Format("{0}/{1}", targetFolder.Url, minifiedFileName);
                    minifiedFile = targetFolder.Files.Add(fileUrl, minifier.MinifyAsByteArray());
                }

                returnValue = minifiedFile;
            });

            return returnValue;
        }