- ///<reference path="../typings/lite/app_references.d.ts" />
- ///<reference path="./_components/BSListView.ts" />
- var __extends = (this && this.__extends) || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- //GULP_ABSTRACT_END
- define(['jquery', 'bootstrapfileinput', 'video', 'platform'], function ($, bootstrapfileinput, videojs, platform) {
- /**
- List all resources and allow for user to preview, manage and upload new resources
- @class ResourcesListView
- @constructor
- @return {Object} instantiated ResourcesListView
- **/
- var ResourcesListView = (function (_super) {
- __extends(ResourcesListView, _super);
- /**
- Class constructor
- @method constructor
- @param {Object} options
- **/
- function ResourcesListView(options) {
- this.m_options = options;
- _super.call(this);
- // let bsListView:BSListView.IBSList = new BSListView();
- //bsListView.isAcceptable('111');
- //var comBroker:ComBroker;
- //comBroker.setService('aaa',self);
- //var aa: typeof BSListView = require('BSListView')
- //var bar: typeof BSListView = new aa('111');
- //bar.isAcceptable('ss');
- }
- /**
- Resource list init
- @method initialize
- **/
- ResourcesListView.prototype.initialize = function () {
- var self = this;
- this.id = self.m_options.el;
- this.$el = $(this.id);
- this.el = this.$el.get(0);
- self.m_property = BB.comBroker.getService(BB.SERVICES['PROPERTIES_VIEW']);
- self.m_property.initPanel(Elements.RESOURCE_LIST_PROPERTIES);
- self.m_videoPlayer = undefined;
- self._listenInputChange();
- self._listenGridList();
- self._listenFilterList();
- self._initVideo();
- $('input[type=file]').bootstrapFileInput();
- self._listenRemoveResource();
- $(Elements.FILE_SELECTION).change(function (e) {
- self._onFileSelected(e);
- });
- self.renderView();
- };
- /**
- Listen to grid or list format selection
- @method _listenGridList
- **/
- ResourcesListView.prototype._listenGridList = function () {
- var self = this;
- $('#list').click(function (event) {
- var query = $(self.id + ' ' + Elements.CLASS_RESOURCES_LIST_ITEMS);
- event.preventDefault();
- $(query).addClass('col-xs-12');
- $(query).removeClass('col-xs-3');
- });
- $('#grid').click(function (event) {
- var query = $(self.id + ' ' + Elements.CLASS_RESOURCES_LIST_ITEMS);
- event.preventDefault();
- $(query).addClass('col-xs-3');
- $(query).removeClass('col-xs-12');
- });
- };
- /**
- When user changes text update msdb, we use xSavePlayerData
- as a json boilerplate that we append values to and save it in msdb as player_data
- @method _listenInputChange
- @return none
- **/
- ResourcesListView.prototype._listenInputChange = function () {
- var self = this;
- var onChange = _.debounce(function (e) {
- var text = $(e.target).val();
- if (BB.lib.isEmpty(text))
- return;
- text = BB.lib.cleanProbCharacters(text, 1);
- BB.Pepper.setResourceRecord(self.m_selected_resource_id, 'resource_name', text);
- var elem = self.$el.find('[data-resource_id="' + self.m_selected_resource_id + '"]');
- elem.find('span').text(text);
- }, 333);
- $(Elements.SELECTED_LIB_RESOURCE_NAME).on("input", onChange);
- };
- /**
- Listen to remove resource event
- @method _listenRemoveResource
- @return none
- **/
- ResourcesListView.prototype._listenRemoveResource = function () {
- var self = this;
- $(Elements.FILE_REMOVE).on('click', function (e) {
- if (self.m_selected_resource_id == undefined)
- return;
- // notify before so channel instances can remove blocks & after so channelList refresh UI
- BB.comBroker.fire(BB.EVENTS.REMOVING_RESOURCE, this, null, self.m_selected_resource_id);
- BB.Pepper.removeResource(self.m_selected_resource_id);
- BB.Pepper.removeBlocksWithResourceID(self.m_selected_resource_id);
- BB.Pepper.removeResourceFromBlockCollectionInScenes(self.m_selected_resource_id);
- BB.Pepper.removeResourceFromBlockCollectionsInChannel(self.m_selected_resource_id);
- self.renderView();
- self._listenResourceSelected();
- $(Elements.RESOURCES_FILTER_LIST).val('');
- BB.comBroker.fire(BB.EVENTS.REMOVED_RESOURCE, this, null, self.m_selected_resource_id);
- });
- };
- /**
- Listen to resource selection, populate the properties panel and open it if needed.
- @method _listenResourceSelected
- **/
- ResourcesListView.prototype._listenResourceSelected = function () {
- var self = this;
- $(Elements.CLASS_RESOURCES_LIST_ITEMS).off('click');
- $(Elements.CLASS_RESOURCES_LIST_ITEMS).on('click', function (e) {
- var resourceElem = $(e.target).closest('li');
- self.m_selected_resource_id = $(resourceElem).data('resource_id');
- $(Elements.CLASS_RESOURCES_LIST_ITEMS).removeClass('activated').find('a').removeClass('whiteFont');
- $(resourceElem).addClass('activated').find('a').addClass('whiteFont');
- var recResource = BB.Pepper.getResourceRecord(self.m_selected_resource_id);
- $(Elements.SELECTED_LIB_RESOURCE_NAME).val(recResource['resource_name']);
- self.m_property.viewPanel(Elements.RESOURCE_LIST_PROPERTIES);
- if (platform.name == 'Chrome') {
- self._populateResourcePreviewLegacy(recResource);
- }
- else {
- self._populateResourcePreviewLegacy(recResource);
- }
- return false;
- });
- };
- /**
- Populate the resource preview with loaded resource file (none CDN)
- @method _populateResourcePreviewLegacy
- @param {Object} i_recResource
- **/
- ResourcesListView.prototype._populateResourcePreviewLegacy = function (i_recResource) {
- var self = this;
- var $img;
- var path;
- if (self.m_videoPlayer) {
- self.m_videoPlayer.pause();
- self.m_videoPlayer.load();
- }
- switch (i_recResource['resource_type']) {
- case 'jpg':
- {
- var ext = 'jpg';
- }
- case 'png':
- {
- if (!ext)
- ext = 'png';
- path = window['g_protocol'] + BB.Pepper.getUserData().domain + '/Resources/business' + BB.Pepper.getUserData().businessID + '/resources/' + BB.Pepper.getResourceNativeID(i_recResource['resource_id']) + '.' + ext;
- $(Elements.RESOURCE_PREVIEW_VIDEO).hide();
- $(Elements.RESOURCE_PREVIEW_IMAGE).fadeIn();
- $(Elements.RESOURCE_PREVIEW_SVG).hide();
- $img = $(Elements.RESOURCE_PREVIEW_IMAGE).find('img');
- $img.attr('src', path);
- break;
- }
- case 'mp4':
- {
- ext = 'mp4';
- $(Elements.RESOURCE_PREVIEW_IMAGE).hide();
- $(Elements.RESOURCE_PREVIEW_SVG).hide();
- $(Elements.RESOURCE_PREVIEW_VIDEO).fadeIn();
- path = window['g_protocol'] + BB.Pepper.getUserData().domain + '/Resources/business' + BB.Pepper.getUserData().businessID + '/resources/' + BB.Pepper.getResourceNativeID(i_recResource['resource_id']) + '.' + ext;
- $(Elements.VIDEO_PREVIEW).find('video:nth-child(1)').attr("src", path);
- break;
- }
- case 'flv':
- {
- if (!ext)
- ext = 'flv';
- }
- case 'swf':
- {
- path = './_assets/flash.png';
- $(Elements.RESOURCE_PREVIEW_VIDEO).hide();
- $(Elements.RESOURCE_PREVIEW_SVG).hide();
- $(Elements.RESOURCE_PREVIEW_IMAGE).fadeIn();
- $img = $(Elements.RESOURCE_PREVIEW_IMAGE).find('img');
- $img.attr('src', path);
- break;
- }
- case 'svg':
- {
- path = window['g_protocol'] + BB.Pepper.getUserData().domain + '/Resources/business' + BB.Pepper.getUserData().businessID + '/resources/' + BB.Pepper.getResourceNativeID(i_recResource['resource_id']) + '.' + 'svg';
- $(Elements.RESOURCE_PREVIEW_VIDEO).hide();
- $(Elements.RESOURCE_PREVIEW_IMAGE).hide();
- $(Elements.RESOURCE_PREVIEW_SVG).fadeIn();
- $img = $(Elements.RESOURCE_PREVIEW_SVG).find('object');
- var urlPath = $.base64.encode(path);
- var srvPath = 'https://secure.digitalsignage.com/proxyRequest/' + urlPath;
- // load svg and force w/h
- $.get(srvPath, function (svg) {
- var svgHeight, svgWidth, re;
- svgHeight = svg.match(/(height=")([^\"]*)/)[2];
- re = new RegExp('height="' + svgHeight + '"', "ig");
- svg = svg.replace(re, 'height="100"');
- svgWidth = svg.match(/(width=")([^\"]*)/)[2];
- re = new RegExp('width="' + svgWidth + '"', "ig");
- svg = svg.replace(re, 'width="100"');
- $('#resourcePreviewSVG').empty();
- var s = new String(svg);
- $('#resourcePreviewSVG').append(svg).wrap('<center>');
- });
- break;
- }
- }
- };
- /**
- Populate the resource preview with loaded resource file (CDN)
- @method _populateResourcePreviewCDN
- @param {Object} i_recResource
- **/
- ResourcesListView.prototype._populateResourcePreviewCDN = function (i_recResource) {
- var self = this;
- var ext;
- if (self.m_videoPlayer) {
- self.m_videoPlayer.pause();
- self.m_videoPlayer.load();
- }
- var path = window['g_protocol'] + 's3.signage.me/business' + BB.Pepper.getUserData().businessID + '/resources/';
- switch (i_recResource['resource_type']) {
- case 'jpg':
- {
- ext = 'jpg';
- }
- case 'png':
- {
- if (!ext)
- ext = 'png';
- path += BB.Pepper.getResourceNativeID(i_recResource['resource_id']) + '.' + ext;
- $(Elements.RESOURCE_PREVIEW_VIDEO).hide();
- $(Elements.RESOURCE_PREVIEW_IMAGE).fadeIn();
- $(Elements.RESOURCE_PREVIEW_SVG).hide();
- var $img = $(Elements.RESOURCE_PREVIEW_IMAGE).find('img');
- $img.attr('src', path);
- break;
- }
- case 'mp4':
- {
- ext = 'mp4';
- }
- case 'flv':
- {
- if (!ext)
- ext = 'flv';
- $(Elements.RESOURCE_PREVIEW_IMAGE).hide();
- $(Elements.RESOURCE_PREVIEW_SVG).hide();
- $(Elements.RESOURCE_PREVIEW_VIDEO).fadeIn();
- path += BB.Pepper.getResourceNativeID(i_recResource['resource_id']) + '.' + ext;
- // path = window['g_protocol'] + BB.Pepper.getUserData().domain + '/Resources/business' + BB.Pepper.getUserData().businessID + '/resources/' + BB.Pepper.getResourceNativeID(i_recResource['resource_id']) + '.' + ext;
- $(Elements.VIDEO_PREVIEW).find('video:nth-child(1)').attr("src", path);
- break;
- }
- case 'swf':
- {
- path = './_assets/flash.png';
- $(Elements.RESOURCE_PREVIEW_VIDEO).hide();
- $(Elements.RESOURCE_PREVIEW_SVG).hide();
- $(Elements.RESOURCE_PREVIEW_IMAGE).fadeIn();
- $img = $(Elements.RESOURCE_PREVIEW_IMAGE).find('img');
- $img.attr('src', path);
- break;
- }
- case 'svg':
- {
- path = window['g_protocol'] + BB.Pepper.getUserData().domain + '/Resources/business' + BB.Pepper.getUserData().businessID + '/resources/' + BB.Pepper.getResourceNativeID(i_recResource['resource_id']) + '.' + 'svg';
- // path += BB.Pepper.getResourceNativeID(i_recResource['resource_id']) + '.' + 'svg';
- $(Elements.RESOURCE_PREVIEW_VIDEO).hide();
- $(Elements.RESOURCE_PREVIEW_IMAGE).hide();
- $(Elements.RESOURCE_PREVIEW_SVG).fadeIn();
- $img = $(Elements.RESOURCE_PREVIEW_SVG).find('object');
- var urlPath = $.base64.encode(path);
- var srvPath = 'https://secure.digitalsignage.com/proxyRequest/' + urlPath;
- // load svg and force w/h
- $.get(srvPath, function (svg) {
- var svgHeight, svgWidth, re;
- svgHeight = svg.match(/(height=")([^\"]*)/)[2];
- re = new RegExp('height="' + svgHeight + '"', "ig");
- svg = svg.replace(re, 'height="100"');
- svgWidth = svg.match(/(width=")([^\"]*)/)[2];
- re = new RegExp('width="' + svgWidth + '"', "ig");
- svg = svg.replace(re, 'width="100"');
- $('#resourcePreviewSVG').empty();
- var s = new String(svg);
- $('#resourcePreviewSVG').append(svg).wrap('<center>');
- });
- break;
- }
- }
- //log('Loading file from ' + path);
- };
- /**
- init HTML5 video.js component
- @method _listenAutoPopup
- **/
- ResourcesListView.prototype._initVideo = function () {
- var self = this;
- videojs(BB.lib.unhash(Elements.VIDEO_PREVIEW)).ready(function () {
- self.m_videoPlayer = this;
- });
- };
- /**
- On selecting new resources through multi-upload from local machine.
- @method _onFileSelected
- @return {number} -1 on fail or 1 on pass
- **/
- ResourcesListView.prototype._onFileSelected = function (e) {
- var self = this;
- var status = BB.Pepper.uploadResources('file');
- if (status.length == 0) {
- bootbox.alert($(Elements.MSG_BOOTBOX_EXT_SUPP).text());
- return -1;
- }
- self.renderView();
- self._listenResourceSelected();
- self._listenRemoveResource();
- var navigationView = BB.comBroker.getService(BB.SERVICES.NAVIGATION_VIEW);
- bootbox.alert($(Elements.MSG_BOOTBOX_WAIT_UPLOAD_RESOURCE).text());
- navigationView.save(function () { });
- setTimeout(function () {
- bootbox.hideAll();
- }, 3000);
- return 1;
- };
- /**
- Listen to keyup to filter resource list
- @method _listenFilterList
- **/
- ResourcesListView.prototype._listenFilterList = function () {
- var self = this;
- $(Elements.RESOURCES_FILTER_LIST).on('keyup', function () {
- var rex = new RegExp($(this).val(), 'i');
- var query = $(self.id + ' ' + Elements.CLASS_RESOURCES_LIST_ITEMS);
- query.hide();
- query.filter(function () {
- return rex.test($(this).text());
- }).show();
- });
- };
- /**
- Populate the UI with all resources for the account (i.e.: videos, images, swfs).
- @method renderView
- @return none
- **/
- ResourcesListView.prototype.renderView = function () {
- var self = this;
- $(Elements.RESOURCE_LIB_LIST).empty();
- var recResources = BB.Pepper.getResources();
- $(recResources).each(function (i) {
- // dont process deleted resources
- if (recResources[i]['change_type'] == 3)
- return;
- var size = (parseInt(recResources[i]['resource_bytes_total']) / 1000).toFixed(2);
- var resourceDescription = 'size: ' + size + 'K dimenstion: ' + recResources[i]['resource_pixel_width'] + 'x' + recResources[i]['resource_pixel_height'];
- var resourceFontAwesome = BB.PepperHelper.getFontAwesome(recResources[i]['resource_type']);
- if (_.isUndefined(resourceFontAwesome)) {
- bootbox.alert($(Elements.MSG_BOOTBOX_FILE_FORMAT_INVALID).text());
- }
- else {
- var snippet = "<li style=\"white-space: nowrap\" class=\"" + BB.lib.unclass(Elements.CLASS_RESOURCES_LIST_ITEMS) + " list-group-item\" data-resource_id=\"" + recResources[i]['resource_id'] + "\">\n <a href=\"#\">\n <i class=\"fa " + resourceFontAwesome + "\"></i>\n <span style=\"overflow-x: hidden\"> " + recResources[i]['resource_name'] + "</span>\n <p></p>\n </a>\n </li>";
- $(Elements.RESOURCE_LIB_LIST).append($(snippet));
- }
- });
- self._listenResourceSelected();
- };
- /**
- Unrender, future support
- @method unrenderView
- **/
- ResourcesListView.prototype.unrenderView = function () {
- var self = this;
- };
- return ResourcesListView;
- })(Backbone.View);
- return ResourcesListView;
- });
- //# sourceMappingURL=ResourcesListView.js.map
-