Projet

Général

Profil

Paste
Télécharger (5,75 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / imce_mkdir / imce_mkdir.js @ 87dbc3bf

1

    
2
(function($) {
3
//add hook:load. process mkdir form 
4
imce.hooks.load.push(function () {
5
  if (!(imce.mkdirForm = imce.el('imce-mkdir-form'))) return;
6
  var form = $(imce.mkdirForm);
7
  //clean up fieldsets
8
  form.find('fieldset').each(function() {
9
    this.removeChild(this.firstChild);
10
    $(this).after(this.childNodes);
11
  }).remove();
12
  imce.mkdirOps = {};
13
  form.find('input:submit').each(function(i) {
14
    var dop = this.id.substr(5);
15
    $(imce.mkdirOps[dop] = this).click(function() {imce.dopSubmit(dop); return false;});
16
  });
17
  imce.opAdd({name: 'mngdir', title: Drupal.t('Directory'), content: form});
18
  imce.mkdirRefreshOps();
19
  //add hook:navigate. set dirops visibility
20
  imce.hooks.navigate.push(function (data, olddir, cached) {
21
    imce.mkdirRefreshOps();
22
  });
23
  // add subdir selector
24
  imce.mkdirSubSelector();
25
});
26

    
27
//change dirops states.
28
imce.mkdirRefreshOps = function () {
29
  var perm, func = 'opDisable';
30
  for (var op in imce.mkdirOps) {
31
    if (perm = imce.conf.perm[op]) func = 'opEnable';
32
    $(imce.mkdirOps[op])[perm ? 'show' : 'hide']();
33
  }
34
  imce[func]('mngdir');
35
};
36

    
37
//successful mkdir
38
imce.mkdirSuccess = function (response) {
39
  if (response.data) {
40
    if (response.data.diradded) imce.dirSubdirs(imce.conf.dir, response.data.diradded);
41
    if (response.data.dirremoved) imce.rmdirSubdirs(imce.conf.dir, response.data.dirremoved);
42
    imce.mkdirSSBuild && imce.mkdirSSBuild();
43
  }
44
  if (response.messages) imce.resMsgs(response.messages);
45
};
46

    
47
//validate default dops(mkdir, rmdir)
48
imce.dopValidate = function(dop) {
49
  var dirname = imce.el('edit-dirname').value, dir = imce.conf.dir, branch = imce.tree[dir], newdir = (dir == '.' ? '' : dir +'/') + dirname;
50
  switch (dop) {
51
    case 'mkdir':
52
      if (imce.conf.mkdirnum && branch.ul && branch.ul.childNodes.length >= imce.conf.mkdirnum) {
53
        return imce.setMessage(Drupal.t('You are not alllowed to create more than %num directories.', {'%num': imce.conf.mkdirnum}), 'error');
54
      }
55
      if (dirname.search(/^[A-Za-z0-9_\-]+$/) == -1) {
56
        return imce.setMessage(Drupal.t('%dirname is not a valid directory name. It should contain only alphanumeric characters, hyphen and underscore.', {'%dirname': dirname}), 'error');
57
      }
58
      if (imce.tree[newdir]) {
59
        return imce.setMessage(Drupal.t('Subdirectory %dir already exists.', {'%dir': dirname}), 'error');
60
      }
61
      return true;
62
    case 'rmdir':
63
      if (!imce.tree[newdir]) {
64
        return imce.setMessage(Drupal.t('Subdirectory %dir does not exist.', {'%dir': dirname}), 'error');
65
      }
66
      return confirm(Drupal.t('Are you sure want to delete this subdirectory with all directories and files in it?'));
67
  }
68

    
69
  var func = dop +'DopValidate';
70
  if (imce[func]) return imce[func](dop);
71
  return true;
72
};
73

    
74
//submit directory operations
75
imce.dopSubmit = function(dop) {
76
  if (!imce.dopValidate(dop)) return false;
77
  var func = dop +'DopSubmit';
78
  if (imce[func]) return imce[func](dop);
79
  imce.fopLoading(dop, true);
80
  $.ajax(imce.dopSettings(dop));
81
};
82

    
83
//ajax settings for directory operations
84
imce.dopSettings = function (dop) {
85
  return {url: imce.ajaxURL(dop), type: 'POST', dataType: 'json', success: imce.mkdirSuccess, complete: function (response) {imce.fopLoading(dop, false); imce.mkdirForm.reset();}, data: $(imce.mkdirForm).serialize()};
86
};
87

    
88
//remove subdirectories
89
imce.rmdirSubdirs = function(dir, subdirs) {
90
  var branch = imce.tree[dir];
91
  if (branch.ul && subdirs && subdirs.length) {
92
    var prefix = dir == '.' ? '' : dir +'/';
93
    for (var i in subdirs) {
94
      var subdir = prefix + subdirs[i];
95
      if (imce.tree[subdir]) {
96
        $(imce.tree[subdir].li).remove();
97
        delete imce.tree[subdir];
98
        if (imce.cache[subdir]) {
99
          $(imce.cache[subdir].files).remove();
100
          delete imce.cache[subdir];
101
        }
102
      }
103
    }
104
    if (!$('li', branch.ul).size()) {
105
      $(branch.ul).remove();
106
      $(branch.li).removeClass('expanded').addClass('leaf');
107
      delete branch.ul;
108
    }
109
  }
110
};
111

    
112
// visual sub directory selector
113
imce.mkdirSubSelector = function () {
114
  var ie7 = $('html').is('.ie-7');
115
  var $inp = $(imce.el('edit-dirname'));
116
  // create selector
117
  var $subsel = $(imce.newEl('div')).attr({id: 'subdir-selector'}).css('display', 'none').appendTo(document.body);
118
  // create selector button
119
  var $button = $(imce.newEl('a')).attr({id: 'subdir-selector-button', href: '#'}).click(function() {
120
    var offset = $inp.offset();
121
    offset.top += $inp.outerHeight();
122
    $subsel.css(offset).slideDown('normal', itemfocus);
123
    $(document).mouseup(hide);
124
    ie7 && $subsel.css('width', 'auto') && $subsel.width($subsel[0].offsetWidth);
125
    return false;
126
  }).insertAfter($inp[0]);
127
  // focus on first subdir item
128
  var itemfocus = function(){$subsel.children().eq(0).focus()};
129
  // hide selector
130
  var hide = function(e){
131
    if (e.target != $subsel[0]) {
132
      $subsel.hide();
133
      $(document).unbind('mouseup', hide);
134
    }
135
  };
136
  // adjust newdir input
137
  var newdir = imce.el('edit-newdirname');
138
  newdir && $(newdir).css('marginRight', parseFloat($(newdir).css('marginRight')) + parseFloat($button.css('width')));
139
  // subdir click
140
  var subclick = function() {
141
    $inp.val(this.title.substr(this.title.lastIndexOf('/') + 1)).focus();
142
    $subsel.hide();
143
    return false;
144
  };
145
  // subdir process
146
  var subproc = function(i, a) {
147
    $(imce.newEl('a')).attr({href: '#', title: a.title}).html(a.innerHTML).click(subclick).appendTo($subsel[0]);
148
  };
149
  // navigation hook
150
  var navhook = imce.mkdirSSBuild = function() {
151
    var branch = imce.tree[imce.conf.dir];
152
    $subsel.empty();
153
    if (branch.ul && branch.ul.firstChild) {
154
      $(branch.ul).children('li').children('a').each(subproc);
155
      $button.css('visibility', 'visible');
156
    }
157
    else {
158
      $button.css('visibility', 'hidden');
159
    }
160
  };
161
  imce.hooks.navigate.push(navhook);
162
  navhook();
163
};
164

    
165
})(jQuery);