symphonycms/symphony-2

View on GitHub
symphony/assets/js/src/backend.js

Summary

Maintainability
A
40 mins
Test Coverage
/**
 * Symphony backend initialisation
 *
 * @package assets
 */

(function($, Symphony) {
    'use strict';

    // Set environment
    var environment = (function () {
        var env = document.getElementById('environment');
        return env ? JSON.parse(env.textContent) : {};
    })();
    Symphony.Context.add(null, environment);

    // Get translations
    Symphony.Language.add({
        'Are you sure you want to proceed?': false,
        'Reordering was unsuccessful.': false,
        'Change Password': false,
        'Remove File': false,
        'Untitled Field': false,
        'The field “{$title}” ({$type}) has been removed.': false,
        'Undo?': false,
        'untitled': false,
        'Expand all': false,
        'Collapse all': false,
        'drag to reorder': false,
        'Please reset your password': false,
        'required': false,
        'Click to select': false,
        'Type to search': false,
        'Clear': false,
        'Search for {$item}': false,
        'Add filter': false,
        'filtered': false,
        'None': false,
        'Clear filters': false,
        'Apply filters': false,
        'The Symphony calendar widget has been disabled because your system date format is currently not supported. Try one of the following instead or disable the calendar in the field settings:': false,
        'no leading zero': false
    });

    // Initialise backend
    $(function() {

        // Cache main elements
        Symphony.Elements.window = $(window);
        Symphony.Elements.html = $('html').addClass('js-active');
        Symphony.Elements.body = $('body');
        Symphony.Elements.wrapper = $('#wrapper');
        Symphony.Elements.header = $('#header');
        Symphony.Elements.nav = $('#nav');
        Symphony.Elements.session = $('#session');
        Symphony.Elements.context = $('#context');
        Symphony.Elements.breadcrumbs = $('#breadcrumbs');
        Symphony.Elements.contents = $('#contents');

        // Create context id
        var path = Symphony.Context.get('path');
        var route = Symphony.Context.get('route');
        if (path && route) {
            var contextId = (path + route).split('/').filter(function(part) {
                return (part != 'edit' && part != 'new' && part != 'created' && part != 'saved' && part != '');
            }).join('.');
            Symphony.Context.add('context-id', contextId);
        }

        // Render view
        Symphony.View.render();

        // Update state to canonical url
        if (window.history.replaceState) {
            var replaceState = function () {
                $('head > link[rel="canonical"][href]').eq(0).each(function () {
                    var href = $(this).attr('href');
                    if (href) {
                        window.history.replaceState(document.title, null, href);
                    }
                });
            };
            // Let extensions read the window.location when load is completed
            if (document.readyState === 'complete') {
                replaceState();
            } else {
                // Document not loaded, delay change on load
                $(window).on('load', replaceState);
            }
        }
    });

})(window.jQuery, window.Symphony);