[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/kcfinder/js/browser/ -> folders.js (source)

   1  <?php
   2  
   3  /** This file is part of KCFinder project
   4    *
   5    *      @desc Folder related functionality
   6    *   @package KCFinder
   7    *   @version 2.21
   8    *    @author Pavel Tzonkov <[email protected]>
   9    * @copyright 2010 KCFinder Project
  10    *   @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2
  11    *   @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2
  12    *      @link http://kcfinder.sunhater.com
  13    */?>
  14  
  15  browser.initFolders = function() {
  16      $('#folders').scroll(function() {
  17          browser.hideDialog();
  18      });
  19      $('div.folder > a').unbind();
  20      $('div.folder > a').bind('click', function() {
  21          browser.hideDialog();
  22          return false;
  23      });
  24      $('div.folder > a > span.brace').unbind();
  25      $('div.folder > a > span.brace').click(function() {
  26          if ($(this).hasClass('opened') || $(this).hasClass('closed'))
  27              browser.expandDir($(this).parent());
  28      });
  29      $('div.folder > a > span.folder').unbind();
  30      $('div.folder > a > span.folder').click(function() {
  31          browser.changeDir($(this).parent());
  32      });
  33      $('div.folder > a > span.folder').rightClick(function(e) {
  34          browser.menuDir($(this).parent(), e);
  35      });
  36  
  37      if ($.browser.msie && $.browser.version &&
  38          (parseInt($.browser.version.substr(0, 1)) < 8)
  39      ) {
  40          var fls = $('div.folder').get();
  41          var body = $('body').get(0);
  42          var div;
  43          $.each(fls, function(i, folder) {
  44              div = document.createElement('div');
  45              div.style.display = 'inline';
  46              div.style.margin = div.style.border = div.style.padding = '0';
  47              div.innerHTML='<table style="border-collapse:collapse;border:0;margin:0;width:0"><tr><td nowrap="nowrap" style="white-space:nowrap;padding:0;border:0">' + $(folder).html() + "</td></tr></table>";
  48              body.appendChild(div);
  49              $(folder).css('width', $(div).innerWidth() + 'px');
  50              body.removeChild(div);
  51          });
  52      }
  53  };
  54  
  55  browser.setTreeData = function(xml, path) {
  56      if (!path)
  57          path = "";
  58      else if (path.length && (path.substr(path.length - 1, 1) != '/'))
  59          path += '/';
  60      var data = {
  61          name: browser.xmlData(xml.getElementsByTagName('name')[0].childNodes),
  62          readable: xml.getAttribute('readable') == 'yes',
  63          writable: xml.getAttribute('writable') == 'yes',
  64          removable: xml.getAttribute('removable') == 'yes',
  65          hasDirs: xml.getAttribute('hasDirs') == 'yes',
  66          current: xml.getAttribute('current') ? true : false
  67      };
  68      path += data.name;
  69      var selector = '#folders a[href="kcdir:/' + _.escapeDirs(path) + '"]';
  70      $(selector).data({
  71          name: data.name,
  72          path: path,
  73          readable: data.readable,
  74          writable: data.writable,
  75          removable: data.removable,
  76          hasDirs: data.hasDirs
  77      });
  78      $(selector + ' span.folder').addClass(data.current ? 'current' : 'regular');
  79      if (xml.getElementsByTagName('dirs').length) {
  80          $(selector + ' span.brace').addClass('opened');
  81          var dirs = xml.getElementsByTagName('dirs')[0];
  82          $.each(dirs.childNodes, function(i, cdir) {
  83              browser.setTreeData(cdir, path + '/');
  84          });
  85      } else if (data.hasDirs)
  86          $(selector + ' span.brace').addClass('closed');
  87  };
  88  
  89  browser.buildTree = function(xml, path) {
  90      if (!path) path = "";
  91      var name = this.xmlData(xml.getElementsByTagName('name')[0].childNodes);
  92      var hasDirs = xml.getAttribute('hasDirs') == 'yes';
  93      path += name;
  94      var html = '<div class="folder"><a href="kcdir:/' + _.escapeDirs(path) + '"><span class="brace">&nbsp;</span><span class="folder">' + _.htmlData(name) + '</span></a>';
  95      if (xml.getElementsByTagName('dirs').length) {
  96          var dirs = xml.getElementsByTagName('dirs')[0];
  97          html += '<div class="folders">';
  98          $.each(dirs.childNodes, function(i, cdir) {
  99              html += browser.buildTree(cdir, path + '/');
 100          });
 101          html += '</div>';
 102      }
 103      html += '</div>';
 104      return html;
 105  };
 106  
 107  browser.expandDir = function(dir, callBack) {
 108      var path = dir.data('path');
 109      if (dir.children('.brace').hasClass('opened')) {
 110          dir.parent().children('.folders').hide(500, function() {
 111              if (path == browser.dir.substr(0, path.length))
 112                  browser.changeDir(dir);
 113          });
 114          dir.children('.brace').removeClass('opened');
 115          dir.children('.brace').addClass('closed');
 116          if (callBack) callBack();
 117      } else {
 118          if (dir.parent().children('.folders').get(0)) {
 119              dir.parent().children('.folders').show(500);
 120              dir.children('.brace').removeClass('closed');
 121              dir.children('.brace').addClass('opened');
 122              if (callBack) callBack();
 123          } else if (!$('#loadingDirs').get(0)) {
 124              dir.parent().append('<div id="loadingDirs">' + this.label("Loading folders...") + '</div>');
 125              $('#loadingDirs').css('display', 'none');
 126              $('#loadingDirs').show(200, function() {
 127                  $.ajax({
 128                      type: 'POST',
 129                      url: browser.baseGetData('expand'),
 130                      data: {dir:path},
 131                      async: false,
 132                      success: function(xml) {
 133                          $('#loadingDirs').hide(200, function() {
 134                              $('#loadingDirs').detach();
 135                          });
 136                          if (browser.errors(xml)) return;
 137                          var dirs = xml.getElementsByTagName('dir');
 138                          var html = '';
 139                          var pth, name, hadDirs;
 140                          $.each(dirs, function(i, cdir) {
 141                              name = browser.xmlData(cdir.getElementsByTagName('name')[0].childNodes);
 142                              hasDirs = cdir.getAttribute('hasDirs') == 'yes';
 143                              pth = path + '/' + name;
 144                              html += '<div class="folder"><a href="kcdir:/' + _.escapeDirs(pth) + '"><span class="brace">&nbsp;</span><span class="folder">' + _.htmlData(name) + '</span></a></div>';
 145                          });
 146                          if (html.length) {
 147                              dir.parent().append('<div class="folders">' + html + '</div>');
 148                              var folders = $(dir.parent().children('.folders').first());
 149                              folders.css('display', 'none');
 150                              $(folders).show(500);
 151                              $.each(dirs, function(i, cdir) {
 152                                  browser.setTreeData(cdir, path, true);
 153                              });
 154                          }
 155                          if (dirs.length) {
 156                              dir.children('.brace').removeClass('closed');
 157                              dir.children('.brace').addClass('opened');
 158                          } else {
 159                              dir.children('.brace').removeClass('opened');
 160                              dir.children('.brace').removeClass('closed');
 161                          }
 162  
 163                          browser.initFolders();
 164                          if (callBack) callBack(xml);
 165                      },
 166                      error: function(request, error) {
 167                          $('#loadingDirs').detach();
 168                          alert(browser.label("Unknown error."));
 169                      }
 170                  });
 171              });
 172          }
 173      }
 174  };
 175  
 176  browser.changeDir = function(dir) {
 177      if (dir.children('span.folder').hasClass('regular')) {
 178          $('div.folder > a > span.folder').removeClass('current');
 179          $('div.folder > a > span.folder').removeClass('regular');
 180          $('div.folder > a > span.folder').addClass('regular');
 181          dir.children('span.folder').removeClass('regular');
 182          dir.children('span.folder').addClass('current');
 183          $('#files').html(browser.label("Loading files..."));
 184          $.ajax({
 185              type: 'POST',
 186              url: browser.baseGetData('chDir'),
 187              data: {dir:dir.data('path')},
 188              async: false,
 189              success: function(xml) {
 190                  if (browser.errors(xml)) return;
 191                  var files = xml.getElementsByTagName('file');
 192                  browser.loadFiles(files);
 193                  browser.orderFiles();
 194                  browser.dir = dir.data('path');
 195                  var dirWritable =
 196                      xml.getElementsByTagName('files')[0].getAttribute('dirWritable');
 197                  browser.dirWritable = (dirWritable == 'yes');
 198                  var title = "KCFinder: /" + browser.dir;
 199                  document.title = title;
 200                  if (browser.opener.TinyMCE)
 201                      tinyMCEPopup.editor.windowManager.setTitle(window, title);
 202                  browser.statusDir();
 203              },
 204              error: function(request, error) {
 205                  $('#files').html(browser.label("Unknown error."));
 206              }
 207          });
 208      }
 209  };
 210  
 211  browser.statusDir = function() {
 212      for (var i = 0, size = 0; i < this.files.length; i++)
 213          size += parseInt(this.files[i].size);
 214      size = this.humanSize(size);
 215      $('#fileinfo').html(this.files.length + ' ' + this.label("files") + ' (' + size + ')');
 216  };
 217  
 218  browser.menuDir = function(dir, e) {
 219      var data = dir.data();
 220      var html = '<div class="menu">';
 221      if (!this.readonly && this.clipboard && this.clipboard.length) html +=
 222          '<a href="kcact:cpcbd"' + (!data.writable ? ' class="denied"' : '') + '>' + this.label("Copy {count} files", {count: this.clipboard.length}) + '</a>' +
 223          '<a href="kcact:mvcbd"' + (!data.writable ? ' class="denied"' : '') + '>' + this.label("Move {count} files", {count: this.clipboard.length}) + '</a>' +
 224          '<div class="delimiter"></div>';
 225      html +=
 226          '<a href="kcact:refresh">' + this.label("Refresh") + '</a>';
 227      if (this.support.zip) html+=
 228          '<div class="delimiter"></div>' +
 229          '<a href="kcact:download">' + this.label("Download") + '</a>';
 230      if (!this.readonly) html +=
 231          '<div class="delimiter"></div>' +
 232          '<a href="kcact:mkdir"' + (!data.writable ? ' class="denied"' : '') + '>' + this.label("New Subfolder...") + '</a>' +
 233          '<a href="kcact:mvdir"' + (!data.removable ? ' class="denied"' : '') + '>' + this.label("Rename...") + '</a>' +
 234          '<a href="kcact:rmdir"' + (!data.removable ? ' class="denied"' : '') + '>' + this.label("Delete") + '</a>';
 235      html += '</div>';
 236  
 237      $('#dialog').html(html);
 238      this.showMenu(e);
 239      $('div.folder > a > span.folder').removeClass('context');
 240      if (dir.children('span.folder').hasClass('regular'))
 241          dir.children('span.folder').addClass('context');
 242  
 243      if (this.clipboard && this.clipboard.length && data.writable) {
 244  
 245          $('.menu a[href="kcact:cpcbd"]').click(function() {
 246              browser.hideDialog();
 247              browser.copyClipboard(data.path);
 248              return false;
 249          });
 250  
 251          $('.menu a[href="kcact:mvcbd"]').click(function() {
 252              browser.hideDialog();
 253              browser.moveClipboard(data.path);
 254              return false;
 255          });
 256      }
 257  
 258      $('.menu a[href="kcact:refresh"]').click(function() {
 259          browser.hideDialog();
 260          browser.refreshDir(dir);
 261          return false;
 262      });
 263  
 264      $('.menu a[href="kcact:download"]').click(function() {
 265          browser.hideDialog();
 266          browser.post(browser.baseGetData('downloadDir'), {dir:data.path});
 267          return false;
 268      });
 269  
 270      $('.menu a[href="kcact:mkdir"]').click(function(e) {
 271          if (!data.writable) return false;
 272          browser.hideDialog();
 273          browser.fileNameDialog(
 274              e, {dir: data.path},
 275              'newDir', '', browser.baseGetData('newDir'), {
 276                  title: "New folder name:",
 277                  errEmpty: "Please enter new folder name.",
 278                  errSlash: "Unallowable characters in folder name.",
 279                  errDot: "Folder name shouldn't begins with '.'"
 280              }, function(xml) {
 281                  browser.refreshDir(dir);
 282                  if (!data.hasDirs) {
 283                      dir.data('hasDirs', true);
 284                      dir.children('span.brace').addClass('closed');
 285                  }
 286              }
 287          );
 288          return false;
 289      });
 290  
 291      $('.menu a[href="kcact:mvdir"]').click(function(e) {
 292          if (!data.removable) return false;
 293          browser.hideDialog();
 294          browser.fileNameDialog(
 295              e, {dir: data.path},
 296              'newName', data.name, browser.baseGetData('renameDir'), {
 297                  title: "New folder name:",
 298                  errEmpty: "Please enter new folder name.",
 299                  errSlash: "Unallowable characters in folder name.",
 300                  errDot: "Folder name shouldn't begins with '.'"
 301              }, function(xml) {
 302                  if (!xml.getElementsByTagName('name').length) {
 303                      alert(browser.label("Unknown error."));
 304                      return;
 305                  }
 306                  var name = browser.xmlData(xml.getElementsByTagName('name')[0].childNodes);
 307                  dir.children('span.folder').html(_.htmlData(name));
 308                  dir.data('name', name);
 309                  dir.data('path', _.dirname(data.path) + '/' + name);
 310                  if (data.path == browser.dir)
 311                      browser.dir = dir.data('path');
 312              }
 313          );
 314          return false;
 315      });
 316  
 317      $('.menu a[href="kcact:rmdir"]').click(function() {
 318          if (!data.removable) return false;
 319          browser.hideDialog();
 320          if (confirm(browser.label(
 321              "Are you sure you want to delete this folder and all its content?"
 322          ))) {
 323              $.ajax({
 324                  type: 'POST',
 325                  url: browser.baseGetData('deleteDir'),
 326                  data: {dir:data.path},
 327                  async: false,
 328                  success: function(xml) {
 329                      if (browser.errors(xml)) return;
 330                      dir.parent().hide(500, function() {
 331                          var folders = dir.parent().parent();
 332                          var pDir = folders.parent().children('a').first();
 333                          dir.parent().detach();
 334                          if (!folders.children('div.folder').get(0)) {
 335                              pDir.children('span.brace').first().removeClass('opened');
 336                              pDir.children('span.brace').first().removeClass('closed');
 337                              pDir.parent().children('.folders').detach();
 338                              pDir.data('hasDirs', false);
 339                          }
 340                          if (pDir.data('path') == browser.dir.substr(0, pDir.data('path').length))
 341                              browser.changeDir(pDir);
 342                      });
 343                  },
 344                  error: function(request, error) {
 345                      alert(browser.label("Unknown error."));
 346                  }
 347              });
 348          }
 349          return false;
 350      });
 351  };
 352  
 353  browser.refreshDir = function(dir) {
 354      var path = dir.data('path');
 355      if (dir.children('.brace').hasClass('opened') || dir.children('.brace').hasClass('closed')) {
 356          dir.children('.brace').removeClass('opened');
 357          dir.children('.brace').addClass('closed');
 358      }
 359      dir.parent().children('.folders').first().detach();
 360      if (path == browser.dir.substr(0, path.length))
 361          browser.changeDir(dir);
 362      browser.expandDir(dir);
 363      return true;
 364  };


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1