Source: formatters/bookmarkasset.js

define('application/formatters/bookmarkasset', [
    'rofl/lib/l10n',
    'antie/formatter',
    'antie/iterator',
    'antie/runtimecontext',
    'application/widgets/asset/asset',
    'application/utils',
    'rofl/lib/utils'
], function (
    L10N,
    Formatter,
    Iterator,
    RuntimeContext,
    Asset,
    AppUtils,
    Utils
) {
    'use strict';

    var layout = RuntimeContext.getCurrentApplication().getLayout().asset.bookmark,
        l10n = L10N.getInstance();

    return Formatter.extend({

        /**
         * Formats the widget.
         *
         * @param {Object|Iterator} item - The item.
         * @param {Object} params - Contains format params passed by child class.
         * @returns {Object} - The formatted widget.
         */
        format: function (item, params) {
            var formatParams = params || {},
                button,
                isVodEpisode = item.isVodEpisode(),
                start = new Date(item.getStartTime() * 1000),
                end = new Date(item.getEndTime() * 1000),
                assetWidth = Math.round(formatParams.width || layout.width),
                assetHeight = Math.round(formatParams.height || layout.height),
                background = item.getImageUrl(assetWidth + 'x' + assetHeight),
                title = item.getTitle(),
                subTitle = l10n.get('asset.vodDurationText', {
                    year: item.getYear(),
                    duration: AppUtils.getHourMinutesText(item.getDuration())
                }),
                bookmarkEvHandler = Utils.bind(this._onBookmarkChange, this),
                contentId = item.getId();

            if (isVodEpisode) {
                title = item.getSeriesTitle();
                subTitle = l10n.get('asset.vodEpisodeDurationText', {
                    season: item.getSeason(),
                    episode: item.getEpisodeNumber(),
                    duration: AppUtils.getHourMinutesText(item.getDuration())
                });
            }

            button = new Asset({
                title: title,
                subTitle: subTitle,
                lockedTitle: l10n.get('settings.parental.title'),
                startTime: start,
                endTime: end,
                background: background,
                progressbar: true,
                setBookmarkProgress: true,
                gradient: false,
                classNames: {
                    widget: 'bookmark'
                },
                item: item,
                listeners: [
                    {
                        evName: '$' + contentId + '_bookmark',
                        evHandler: Utils.bind(bookmarkEvHandler, Asset)
                    }
                ],
                playOnSelect: true
            });

            button.addClass('bookmark');

            return button;
        },

        /**
         * Gets executed when the bookmark changes.
         *
         * @param {Object} asset - The asset instance to update.
         * @private
         */
        _onBookmarkChange: function (asset) {
            asset.updateProgressBar();
        }
    });
});