public function getTemplate($id)
    {
        // Default system wide template wrapping config
        $wrapTemplate = Primer::$WRAP_TEMPLATES;

        $id = Primer::cleanId($id);

        // Create the template
        $template = new Pattern('templates/' . $id);

        $templateData = new ViewData([
            "primer" => [
                'bodyClass' => 'is-template',
                'template' => $id,
            ],
        ]);

        $data = $template->getData();

        // Template level wrapping config
        if (isset($data->primer->wrapTemplate)) {
            $wrapTemplate = $data->primer->wrapTemplate;
        }

        if ($wrapTemplate) {
            $view = 'template';

            // Check the data to see if there is a custom view
            if (isset($data->primer) && isset($data->primer->view)) {
                $view = $data->primer->view;
            }

            $templateData->primer->items = $template->render(false);

            Event::fire('render', $templateData);

            return View::render($view, $templateData);
        } else {
            // Merge the data we would have passed into the view into the template
            $template->setData($templateData);

            // Get a reference to the template data so that we can pass it to anyone who's listening
            $viewData = $template->getData();
            Event::fire('render', $viewData);

            return $template->render(false);
        }
    }