/**
 * @brief タグ関連処理
 */
var gspecv = gspecv || {};
gspecv.tag = {};

/**
 * @brief タグ関連処理のセットアップ
 *
 * @param selecters セレクタをまとめたオブジェクト
 * @param updateView 表示の更新関数
 */
gspecv.tag.setup = function(selecters, updateView) {
  var editFileName;
  var fileTagNameArray = [];
  var stockTagNameArray = [];

  function updateTagList() {
    // 既存のタグ情報を削除
    selecters.$fileTagList.find('.tag').remove();
    selecters.$stockTagList.find('.tag').remove();

    fileTagNameArray.forEach(function(tagName) {
      selecters.$fileTagList.append(gspecv.tag.createTagLabel(tagName));
    });

    stockTagNameArray.forEach(function(tagName) {
      selecters.$stockTagList.append(gspecv.tag.createTagLabel(tagName));
    });
  }

  // ダイアログのセットアップメソッドを設定
  selecters.$tagEditDialog.setup = function(fileName, data) {
    editFileName = fileName;
    fileTagNameArray = data.file_tags;
    stockTagNameArray = data.stock_tags;

    // タグ情報を構築
    selecters.$fileTagList.droppable({
      drop: function(event, ui) {
        var $dropedSelecter = $(ui.draggable[0]);
        var droppedTagName = $dropedSelecter.text();
        fileTagNameArray.push(droppedTagName);
        stockTagNameArray = _.remove(stockTagNameArray, function(name) { return name !== droppedTagName; });

        updateTagList();
      }
    });

    updateTagList();

    return selecters.$tagEditDialog;
  };

  selecters.$tagCreateButton.on('click', function() {
    // 新しいタグをリストに追加する
    var newTagName = $(selecters.tagCreateNameInput).val();
    if(newTagName !== '') {
      fileTagNameArray.push(newTagName);

      selecters.$fileTagList.append(gspecv.tag.createTagLabel(newTagName));
    }
  });

  // 編集したタグを適用する
  selecters.$applyTagButton.on('click', function() {
    var info = {
      file_name: editFileName,
      tag_names: fileTagNameArray
    };

    $.post('/apply_tag', info)
      .done(function(data) {
        if(data.errorMessage) {
          alsert(data.errorMessage);
        }
      })
      .fail(function(error, errorMessage) {
        alsert(errorMessage);
      });

    selecters.$tagEditDialog.modal('hide');

    // 表示を更新する
    updateView();
  });
};

/**
 * @brief タグのラベルを生成
 *
 * @param tagName タグ名
 *
 * @return タグのラベル
 */
gspecv.tag.createTagLabel = function createTagLabel(tagName) {
  return $('<span>')
          .addClass('label label-default tag')
          .draggable({ revert: true })
          .text(tagName);
};

@@ -919,18 +919,19 @@
    // %E3%82%BF%E3%82%B0
-%E6%83%85%E5%A0%B1
+%E3%83%AA%E3%82%B9%E3%83%88
 %E3%82%92%E6%A7%8B%E7%AF%89%0A    
@@ -1145,24 +1145,24 @@
 edTagName);%0A
-
         stoc
@@ -1255,24 +1255,398 @@
 gName; %7D);%0A%0A
+        updateTagList();%0A      %7D%0A    %7D);%0A    selecters.$stockTagList.droppable(%7B%0A      drop: function(event, ui) %7B%0A        var $dropedSelecter = $(ui.draggable%5B0%5D);%0A        var droppedTagName = $dropedSelecter.text();%0A        stockTagNameArray.push(droppedTagName);%0A        fileTagNameArray = _.remove(fileTagNameArray, function(name) %7B return name !== droppedTagName; %7D);%0A%0A
         upda

タグ編集ダイアログで、タグをD&Dで削除できるように対応