protected function assets()
    {
        $firstCss = Requirements::get_files_by_type('css');
        $firstJs = Requirements::get_files_by_type('js');
        $lastCss = Requirements::get_files_by_type('css', 'last');
        $lastJs = Requirements::get_files_by_type('js', 'last');
        $this->css = array_merge($firstCss + array_diff_key($this->css, $firstCss, $lastCss), $lastCss);
        $this->javascript = array_merge($firstJs + array_diff_key($this->javascript, $firstJs, $lastJs), $lastJs);
        $this->issueReplacements();
        $inline = array_merge(Requirements::get_files_by_type('css', 'inline'), Requirements::get_files_by_type('css', 'inline-head'));
        $this->inlineFiles($inline, 'customCSS', 'css', '%s', 'Inline-CSS');
        $this->inlineFiles(Requirements::get_files_by_type('js', 'inline-head'), 'customHeadTags', 'javascript', '<script type="text/javascript">%s</script>', 'Inline-JS-Head');
        $this->inlineFiles(Requirements::get_files_by_type('js', 'inline'), 'customScript', 'javascript', '%s', 'Inline-JS');
        $deferred = Requirements::get_files_by_type('css', 'defer');
        $time = time();
        if (count($deferred)) {
            foreach ($deferred as $file => $data) {
                $this->removeIfFound($file, 'css');
                $this->removeIfFound('Deferred-CSS', 'customScript');
                $function = 'js' . $time;
                $script = Requirements::defer_css($deferred, $function);
                if (Director::is_ajax()) {
                    $script .= '
	' . $function . '();
					';
                } else {
                    Requirements::js_attach_to_event();
                    $script .= '
	mwm.utilities.attachToEvent(window, "load", ' . $function . ');
					';
                }
                $this->customScript($script, 'Deferred-CSS');
            }
        }
        $deferred = Requirements::get_files_by_type('js', 'defer');
        if (count($deferred)) {
            foreach ($deferred as $file => $data) {
                $this->removeIfFound($file, 'javascript');
                $this->removeIfFound('Deferred-JS', 'customScript');
                $function = 'js' . $time;
                $script = Requirements::defer_scripts($deferred, $function);
                if (Director::is_ajax()) {
                    $script .= '
	' . $function . '();
					';
                } else {
                    Requirements::js_attach_to_event();
                    $script .= '
	mwm.utilities.attachToEvent(window, "load", ' . $function . ');
					';
                }
                $this->customScript($script, 'Deferred-JS');
            }
        }
    }