Stephen2

sf-image-field.js

Mar 25th, 2016
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function ($) {
  2.     var sfFields = angular.module('sfFields');
  3.     sfFields.requires.push('sfImageField');
  4.  
  5.     angular.module('sfImageField', ['sfServices', 'sfImageSelector'])
  6.         .directive('sfImageField', ['serverContext', 'sfMediaService', 'sfMediaFilter', function (serverContext, sfMediaService, sfMediaFilter) {
  7.             return {
  8.                 restrict: "AE",
  9.                 scope: {
  10.                     sfModel: '=',
  11.                     sfImage: '=?',
  12.                     sfProvider: '=?',
  13.                     sfAutoOpenSelector: '@'
  14.                 },
  15.                 templateUrl: function (elem, attrs) {
  16.                     var assembly = attrs.sfTemplateAssembly || 'Telerik.Sitefinity.Frontend';
  17.                     var url = attrs.sfTemplateUrl || 'client-components/fields/image-field/sf-image-field.sf-cshtml';
  18.                     return serverContext.getEmbeddedResourceUrl(assembly, url);
  19.                 },
  20.                 link: function (scope, element, attrs, ctrl) {
  21.                     var guidEmpty = "00000000-0000-0000-0000-000000000000";
  22.                     scope.guidEmpty = guidEmpty;
  23.                     var autoOpenSelector = attrs.sfAutoOpenSelector !== undefined && attrs.sfAutoOpenSelector.toLowerCase() !== 'false';
  24.  
  25.                     var getDateFromString = function (dateStr) {
  26.                         return (new Date(parseInt(dateStr.substring(dateStr.indexOf('Date(') + 'Date('.length, dateStr.indexOf(')')))));
  27.                     };
  28.  
  29.                     var getImage = function (id) {
  30.                         sfMediaService.images.getById(id, scope.sfProvider).then(function (data) {
  31.                             if (data && data.Item) {
  32.                                 refreshScopeInfo(data.Item);
  33.                             }
  34.                         });
  35.                     };
  36.  
  37.                     var refreshScopeInfo = function (item) {
  38.                         scope.sfImage = item;
  39.                         scope.sfImageIsVisible = scope.sfImage.ThumbnailUrl && scope.sfImage.ThumbnailUrl !== "";
  40.                         scope.imageSize = Math.ceil(item.TotalSize / 1024) + " KB";
  41.                         scope.uploaded = getDateFromString(item.DateCreated);
  42.                     };
  43.  
  44.                     scope.showEditPropertiesButton = (window && window.radopen);
  45.  
  46.                     var editDialog;
  47.                     var editAllPropertiesUrl = serverContext.getRootedUrl('/Sitefinity/Dialog/ContentViewEditDialog?ControlDefinitionName=ImagesBackend&ViewName=ImagesBackendEdit&IsInlineEditingMode=true');
  48.  
  49.                     var createDialog = function (dialogManager) {
  50.                         editWindow = window.radopen(editAllPropertiesUrl);
  51.                         var dialogName = editWindow.get_name();
  52.                         var dialog = dialogManager.getDialogByName(dialogName);
  53.                         dialog.add_close(closeEditAllProperties);
  54.  
  55.                         return dialog;
  56.                     };
  57.  
  58.                     var getDialogContext = function (dialog, parentId) {
  59.                         var itemsList = {};
  60.                         itemsList.getBinder = function () {
  61.                             var binder = {};
  62.                             binder.get_provider = function () {
  63.                                 return scope.sfProvider;
  64.                             };
  65.                             return binder;
  66.                         };
  67.  
  68.                         var dialogContext = {
  69.                             commandName: 'edit',
  70.                             itemsList: itemsList,
  71.                             dataItem: {
  72.                                 Id: scope.sfImage.Id,
  73.                                 ProviderName: scope.sfProvider
  74.                             },
  75.                             dialog: dialog,
  76.                             params: {
  77.                                 IsEditable: true,
  78.                                 parentId: parentId
  79.                             },
  80.                             key: { Id: scope.sfImage.Id },
  81.                             commandArgument: { languageMode: 'edit', language: serverContext.getUICulture() }
  82.                         };
  83.  
  84.                         return dialogContext;
  85.                     };
  86.  
  87.                     var closeEditAllProperties = function (sender, args) {
  88.                         if (args && args.get_argument() && args.get_argument() == 'rebind') {
  89.                             getImage(scope.sfModel);
  90.                         }
  91.                         sender.remove_close(closeEditAllProperties);
  92.                     };
  93.  
  94.                     scope.editAllProperties = function () {
  95.                         var parentId = scope.sfImage.ParentId || scope.sfImage.Album.Id;
  96.                         var fullEditAllPropertiesUrl = editAllPropertiesUrl + ('&parentId=' + parentId);
  97.  
  98.                         var dialogManager = window.top.GetDialogManager();
  99.                         editDialog = createDialog(dialogManager);
  100.                         editDialog.setUrl(fullEditAllPropertiesUrl);
  101.  
  102.                         var dialogName = editDialog.get_name();
  103.                         var dialogContext = getDialogContext(editDialog, parentId);
  104.  
  105.                         dialogManager.openDialog(dialogName, null, dialogContext);
  106.                     };
  107.  
  108.                     scope.done = function () {
  109.                         scope.$modalInstance.close();
  110.  
  111.                         if (scope.model.selectedItems && scope.model.selectedItems.length) {
  112.                             scope.sfProvider = scope.model.provider;
  113.  
  114.                             // Id is passed -> get image
  115.                             getImage(scope.model.selectedItems[0].Id || scope.model.selectedItems[0]);
  116.                         }
  117.                     };
  118.  
  119.                     scope.cancel = function () {
  120.                         // cancels the image properties if no image is selected
  121.                         if (scope.sfModel === undefined) {
  122.                             scope.sfModel = null;
  123.                         }
  124.  
  125.                         scope.$modalInstance.dismiss();
  126.                     };
  127.  
  128.                     scope.changeImage = function () {
  129.                         scope.model = {
  130.                             selectedItems: [],
  131.                             filterObject: null,
  132.                             provider: scope.sfProvider
  133.                         };
  134.  
  135.                         if (scope.sfImage && scope.sfImage.Id) {
  136.                             scope.model.selectedItems.push(scope.sfImage);
  137.                             scope.model.filterObject = sfMediaFilter.newFilter();
  138.                             scope.model.filterObject.set.parent.to(scope.sfImage.FolderId || scope.sfImage.Album.Id);
  139.                         }
  140.  
  141.                         var imageSelectorModalScope = element.find('.imageSelectorModal').scope();
  142.  
  143.                         if (imageSelectorModalScope)
  144.                             imageSelectorModalScope.$openModalDialog();
  145.                     };
  146.  
  147.                     scope.clearImage = function() {
  148.                         scope.sfModel = guidEmpty;
  149.                         delete scope.sfImage;
  150.                         scope.sfImageIsVisible = false;
  151.                     }
  152.  
  153.                     // Initialize
  154.                     if (scope.sfModel && scope.sfModel !== guidEmpty) {
  155.                         getImage(scope.sfModel);
  156.                     }
  157.                     else if (autoOpenSelector) {
  158.                         scope.changeImage();
  159.                     }
  160.  
  161.                     scope.$on('sf-image-selector-image-uploaded', function (event, uploadedImageInfo) {
  162.                         scope.sfProvider = scope.model.provider;
  163.                         getImage(uploadedImageInfo.ContentId);
  164.                         scope.$modalInstance.dismiss();
  165.                     });
  166.  
  167.                     scope.$watch('sfImage.Id', function (newVal) {
  168.                         scope.sfModel = newVal;
  169.                     });
  170.                 }
  171.             };
  172.         }]);
  173. })(jQuery);
Advertisement
Add Comment
Please, Sign In to add comment