mediaEmbedder.js 1.4 KB
angular.module('mediaEmbedder', [])

.service('mediaEmbedder', [function () {
    function embedHtml(payload, targetEl) {
        if (/^<script /i.test(payload)) {
            return embedScript(payload, targetEl);
        }

        angular.element(targetEl).html(payload);

        if (window.FB) {
            FB.XFBML.parse(angular.element(targetEl)[0]);
        }

        if (window.instgrm) {
            instgrm.Embeds.process();
        }
    }

    function embedScript(payload, targetEl) {
        var script = document.createElement('script');

        angular.forEach($(payload)[0].attributes, function (attr) {
            script.setAttribute(attr.name, attr.value);
        });

        angular.element(targetEl).html('');
        angular.element(targetEl).append(script);
    }

    function embedImage(imageUrl, targetEl) {
        angular.element(targetEl).html('<img src="' + imageUrl + '">');
    }

    return {
        embed: function (media, targetEl) {
            switch (media.payloadType) {
                case 'html':
                    embedHtml(media.payload, targetEl);
                    break;

                case 'image':
                    embedImage(media.payload, targetEl);
                    break;

                default:
                    console.error('mediaEmbedder: ' + media.payloadType + ' type is not configured.');
                    break;
            }
        },
    };
}]);