예제 #1
0
    def optimizeFile(self,
                     file,
                     callback,
                     minimize=False,
                     new_path=None,
                     prepend="opt"):
        """optimizes a single file

        Arguments:
        file -- path to file
        callback -- function to run the file through
        minimize -- whether or not we should minimize the file contents (html)
        prepend -- what extension to prepend

        Returns:
        void

        """
        content = callback(file)
        if new_path is None:
            new_path = Util.prependExtension(prepend, file)
        if minimize is True:
            self.output("minimizing " + file)
            content = self.minimize(content)
        self.output("optimizing " + file + " to " + new_path)
        Util.filePutContents(new_path, content)

        if self.config.show_savings:
            SizeTracker.trackFile(file, new_path)
예제 #2
0
    def optimizeJsManifest(self):
        contents = Util.fileGetContents(self.config.js_manifest)

        for key, value in self.manifest_ids.items():
            if "#" + value in self.id_map:
                contents = re.sub(r'((?<!\$)\${1}[A-Z0-9_]+\s?=\s?[\'|\"])(' + value + ')([\'|\"][,|;])', r'\1' + self.id_map["#" + value].replace("#", "") + r'\3', contents)

        for key, value in self.manifest_classes.items():
            if "." + value in self.class_map:
                contents = re.sub(r'(\${2}[A-Z0-9_]+\s?=\s?[\'|\"])(' + value + ')([\'|\"][,|;])', r'\1' + self.class_map["." + value].replace(".", "") + r'\3', contents)

        if self.config.rewrite_constants:
            constants = re.findall(r'(\s+?(var\s)?([A-Z0-9_]+)\s?=\s?[\'|\"](.*?)[\'|\"][,|;])', contents)
            new_constants = {}
            i = 0
            for constant in constants:
                # underscore variables are ignored
                if constant[2][0] == "_":
                    continue

                i += 1
                new_constant = re.sub(r'=(.*)([,|;])','= ' + str(i) + r'\2', constant[0])
                contents = contents.replace(constant[0], new_constant)

        new_manifest = Util.prependExtension("opt", self.config.js_manifest)
        Util.filePutContents(new_manifest, contents)

        if self.config.show_savings:
            SizeTracker.trackFile(self.config.js_manifest, new_manifest)
예제 #3
0
    def optimizeJsManifest(self):
        contents = Util.fileGetContents(self.config.js_manifest)

        for key, value in self.manifest_ids.items():
            if "#" + value in self.id_map:
                contents = re.sub(r'((?<!\$)\${1}[A-Z0-9_]+\s?=\s?[\'|\"])(' + value + ')([\'|\"][,|;])', r'\1' + self.id_map["#" + value].replace("#", "") + r'\3', contents)

        for key, value in self.manifest_classes.items():
            if "." + value in self.class_map:
                contents = re.sub(r'(\${2}[A-Z0-9_]+\s?=\s?[\'|\"])(' + value + ')([\'|\"][,|;])', r'\1' + self.class_map["." + value].replace(".", "") + r'\3', contents)

        if self.config.rewrite_constants:
            constants = re.findall(r'(\s+?(var\s)?([A-Z0-9_]+)\s?=\s?[\'|\"](.*?)[\'|\"][,|;])', contents)
            new_constants = {}
            i = 0
            for constant in constants:
                # underscore variables are ignored
                if constant[2][0] == "_":
                    continue

                i += 1
                new_constant = re.sub(r'=(.*)([,|;])','= ' + str(i) + r'\2', constant[0])
                contents = contents.replace(constant[0], new_constant)

        new_manifest = Util.prependExtension("opt", self.config.js_manifest)
        Util.filePutContents(new_manifest, contents)

        if self.config.show_savings:
            SizeTracker.trackFile(self.config.js_manifest, new_manifest)
예제 #4
0
    def savings():
        percent = 100 - (float(SizeTracker.new_size) / float(SizeTracker.original_size)) * 100
        gzip_percent = 100 - (float(SizeTracker.new_size_gzip) / float(SizeTracker.original_size_gzip)) * 100

        string = "\noriginal size:   " + SizeTracker.getSize(SizeTracker.original_size) + " (" + SizeTracker.getSize(SizeTracker.original_size_gzip) + " gzipped)"
        string += "\nmunched size:    " + SizeTracker.getSize(SizeTracker.new_size) + " (" + SizeTracker.getSize(SizeTracker.new_size_gzip) + " gzipped)"
        string += "\n                 saved " + str(round(percent, 2)) + "% off the original size (" + str(round(gzip_percent, 2)) + "% off the gzipped size)\n"
        return string
예제 #5
0
    def savings():
        percent = 100 - (float(SizeTracker.new_size) /
                         float(SizeTracker.original_size)) * 100
        gzip_percent = 100 - (float(SizeTracker.new_size_gzip) /
                              float(SizeTracker.original_size_gzip)) * 100

        string = "\noriginal size:   " + SizeTracker.getSize(
            SizeTracker.original_size) + " (" + SizeTracker.getSize(
                SizeTracker.original_size_gzip) + " gzipped)"
        string += "\nmunched size:    " + SizeTracker.getSize(
            SizeTracker.new_size) + " (" + SizeTracker.getSize(
                SizeTracker.new_size_gzip) + " gzipped)"
        string += "\n                 saved " + str(round(
            percent, 2)) + "% off the original size (" + str(
                round(gzip_percent, 2)) + "% off the gzipped size)\n"
        return string
예제 #6
0
    def optimizeFile(self, file, callback, minimize = False, new_path = None, prepend = "opt"):
        """optimizes a single file

        Arguments:
        file -- path to file
        callback -- function to run the file through
        minimize -- whether or not we should minimize the file contents (html)
        prepend -- what extension to prepend

        Returns:
        void

        """
        content = callback(file)
        if new_path is None:
            new_path = Util.prependExtension(prepend, file)
        if minimize is True:
            self.output("minimizing " + file)
            content = self.minimize(content)
        self.output("optimizing " + file + " to " + new_path)
        Util.filePutContents(new_path, content)

        if self.config.show_savings:
            SizeTracker.trackFile(file, new_path)
예제 #7
0
    def run(self):
        """runs the optimizer and does all the magic

        Returns:
        void

        """
        self.output("searching for classes and ids...", False)

        if self.config.js_manifest is not None:
            self.outputJsWarnings()

        self.processCss()
        self.processViews()

        if self.config.js_manifest is None:
            self.processJs()
        else:
            self.processJsManifest()

        self.output("mapping classes and ids to new names...", False)
        # maps all classes and ids found to shorter names
        self.processMaps()

        # optimize everything
        self.output("munching css files...", False)
        self.optimizeFiles(self.config.css, self.optimizeCss)

        self.output("munching html files...", False)
        self.optimizeFiles(self.config.views, self.optimizeHtml,
                           self.config.view_extension,
                           self.config.compress_html)

        self.output("munching js files...", False)

        if self.config.js_manifest is None:
            self.optimizeFiles(self.config.js, self.optimizeJavascript)
        else:
            self.optimizeJsManifest()

        self.output("done", False)

        if self.config.show_savings:
            self.output(SizeTracker.savings(), False)
예제 #8
0
    def run(self):
        """runs the optimizer and does all the magic

        Returns:
        void

        """
        self.output("searching for classes and ids...", False)

        if self.config.js_manifest is not None:
            self.outputJsWarnings()

        self.processCss()
        self.processViews()

        if self.config.js_manifest is None:
            self.processJs()
        else:
            self.processJsManifest()

        self.output("mapping classes and ids to new names...", False)
        # maps all classes and ids found to shorter names
        self.processMaps()

        # optimize everything
        self.output("munching css files...", False)
        self.optimizeFiles(self.config.css, self.optimizeCss)

        self.output("munching html files...", False)
        self.optimizeFiles(self.config.views, self.optimizeHtml, self.config.view_extension, self.config.compress_html)

        self.output("munching js files...", False)

        if self.config.js_manifest is None:
            self.optimizeFiles(self.config.js, self.optimizeJavascript)
        else:
            self.optimizeJsManifest()

        self.output("done", False)

        if self.config.show_savings:
            self.output(SizeTracker.savings(), False)
예제 #9
0
 def trackFile(path, new_path):
     SizeTracker.addSize(path)
     SizeTracker.addSize(new_path, True)
예제 #10
0
 def trackFile(path, new_path):
     SizeTracker.addSize(path)
     SizeTracker.addSize(new_path, True)