Actualizar plugin Glossary a 1.1.0
This commit is contained in:
parent
24560c8598
commit
b9e569d03f
103 changed files with 954 additions and 2967 deletions
|
@ -1,47 +0,0 @@
|
||||||
= Redmine 用語集プラグイン
|
|
||||||
|
|
||||||
Redmine(プロジェクト管理システム)に用語集の機能を追加するプラグインです。
|
|
||||||
以下のような用途に使えます。
|
|
||||||
* 業務分析工程での専門用語の管理
|
|
||||||
* 対訳表
|
|
||||||
* 用語とデータ型(クラス名)との変換辞書
|
|
||||||
* コーディング時の略名の付け方の方針管理
|
|
||||||
|
|
||||||
|
|
||||||
== プラグインパッケージの取得
|
|
||||||
|
|
||||||
プラグインパッケージは以下から取得してください。
|
|
||||||
* {SourceForge.JP}[http://sourceforge.jp/projects/rp-glossary/releases/]
|
|
||||||
|
|
||||||
|
|
||||||
== インストールと設定
|
|
||||||
|
|
||||||
1. 取得した圧縮ファイルを (インストールディレクトリ)/vender/plugins に展開します。
|
|
||||||
2. データベースの設定を行います。 http://www.redmine.org/wiki/1/Plugins
|
|
||||||
rake db:migrate_plugins RAILS_ENV=production
|
|
||||||
3. Redmine の WEB サーバ(Apache など)を再起動します。
|
|
||||||
4. "管理" メニューの "ロールと権限" から用語集の各権限を設定します。
|
|
||||||
5. 用語集を使用したいプロジェクトの "設定" メニューで "用語集" のモジュールにチェックを入れます。
|
|
||||||
6. 非表示にしたい項目があれば、プラグインの "設定" ページで設定してください。
|
|
||||||
|
|
||||||
cf. http://www.r-labs.org/projects/r-labs/wiki/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95
|
|
||||||
|
|
||||||
|
|
||||||
== 使用法
|
|
||||||
|
|
||||||
プロジェクトメニューの "用語集" からご利用ください。
|
|
||||||
|
|
||||||
使用法の詳細は以下をご覧ください。
|
|
||||||
* http://www.r-labs.org/projects/rp-glossary/wiki/Usage
|
|
||||||
|
|
||||||
|
|
||||||
== 質問、バグ報告など
|
|
||||||
|
|
||||||
不具合報告や要望などありましたら、以下で Defect や Proposal のチケットを発行して下さい。
|
|
||||||
http://www.r-labs.org/projects/rp-glossary/issues
|
|
||||||
|
|
||||||
質問などは以下のフォーラムに記述して下さい。要望などはこちらに書いてもらってもかまいません。
|
|
||||||
http://www.r-labs.org/projects/rp-glossary/boards
|
|
||||||
|
|
||||||
|
|
||||||
|
|
39
plugins/redmine_glossary/README.md
Normal file
39
plugins/redmine_glossary/README.md
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# Redmine Glossary Plugin
|
||||||
|
|
||||||
|
This is a plugin for Redmine to create a glossary that is a list of terms in a project.
|
||||||
|
|
||||||
|
This is a remake version of [the original glossary plugin](https://ja.osdn.net/projects/rp-glossary/releases/). The main goal of remaking is to fit for the recent redmine version to be maintainable.
|
||||||
|
|
||||||
|
## The use
|
||||||
|
|
||||||
|
- Management of technical terms in a system analysis phase
|
||||||
|
- Interlinear translation table
|
||||||
|
- Translate table from term to data type (class name)
|
||||||
|
- Management of naming examples in a coding
|
||||||
|
|
||||||
|
## To get
|
||||||
|
|
||||||
|
### Repository
|
||||||
|
|
||||||
|
- <https://github.com/torutk/redmine_glossary>
|
||||||
|
|
||||||
|
The branches are as follows:
|
||||||
|
|
||||||
|
- __master__ for the recent Redmine version
|
||||||
|
- __development__ under developping for the next release
|
||||||
|
- __support/2.x__ original glossary plugin ported for Redmine 2.x
|
||||||
|
- __support/3.x__ original glossary plugin ported for Redmine 3.x
|
||||||
|
- __support/4.0or1/based_original__ original glossary plugin ported for Redmine 4.0 or 4.1
|
||||||
|
|
||||||
|
### Installation and Setup
|
||||||
|
|
||||||
|
1. Copy the plugin directory into the Redmine's plugin directory. Note that the name of plugin's directory should be "redmine_glossary".
|
||||||
|
2. Migrate plugin task.
|
||||||
|
3. Restart the redmine.
|
||||||
|
4. Set permission of glossary plugin in "Administration > Roles and permissions"
|
||||||
|
|
||||||
|
### Uninstall
|
||||||
|
|
||||||
|
- rails redmine:plugins:migrate NAME=redmine_glossary VERSION=0
|
||||||
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
= Redmine Glossary Plugin
|
|
||||||
|
|
||||||
This is the Redmine(Project manage system) plug-in which adds the feature of the glossary.
|
|
||||||
|
|
||||||
Ported to 3.0.x and 3.1.x on master branch.
|
|
||||||
It doesn't keep compatibility with 2.x!
|
|
||||||
|
|
||||||
Ported to comming 4.0.x on support-redmine4 branch.
|
|
||||||
It doesn't keep compativility with 3.x and below.
|
|
||||||
|
|
||||||
== Use Cases
|
|
||||||
|
|
||||||
* Management of technical terms in a system analysis phase
|
|
||||||
* Interlinear translation table
|
|
||||||
* Translate table from term to data type (class name)
|
|
||||||
* Management of naming examples in a coding
|
|
||||||
|
|
||||||
== Installation and Setup (redmine 3.x)
|
|
||||||
|
|
||||||
cf. http://www.redmine.org/wiki/1/Plugins
|
|
||||||
|
|
||||||
1. Put the downloaded package in the /plugins directory.
|
|
||||||
2. run the following command to upgrade your database.
|
|
||||||
rake redmine:plugins:migrate RAILS_ENV=production
|
|
||||||
3. Restart Redmine WEB server.
|
|
||||||
4. Set permissions of glossary plugin in "Administration" -> "Roles and permissions"
|
|
||||||
5. Open the setting page of projects you need, check the "Glossary" module
|
|
||||||
6. If you need, select items to make hidden in plugin setting page.
|
|
||||||
|
|
||||||
== Installation and Setup (redmine 4.x)
|
|
||||||
|
|
||||||
T.B.D.
|
|
||||||
|
|
||||||
1. Put the downloaded package in the /plugins directory.
|
|
||||||
Or clone from this repository.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
== Usage
|
|
||||||
|
|
||||||
Start from "Glossary" item of a project menu.
|
|
||||||
|
|
||||||
|
|
||||||
For the details of the usage, see the following page.
|
|
||||||
* http://www.r-labs.org/projects/rp-glossary/wiki/UsageEn
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
class GlossaryCategoriesController < ApplicationController
|
||||||
|
|
||||||
|
before_action :find_category_from_id, only: [:show, :edit, :update, :destroy]
|
||||||
|
before_action :find_project_by_project_id, :authorize
|
||||||
|
|
||||||
|
def index
|
||||||
|
@categories = GlossaryCategory.where(project_id: @project.id).sorted
|
||||||
|
end
|
||||||
|
|
||||||
|
def show
|
||||||
|
end
|
||||||
|
|
||||||
|
def new
|
||||||
|
@category = GlossaryCategory.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
category = GlossaryCategory.new(glossary_category_params)
|
||||||
|
category.project = @project
|
||||||
|
if category.save
|
||||||
|
redirect_to [@project, category], notice: l(:notice_successful_create)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@category.attributes = glossary_category_params
|
||||||
|
if @category.save
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {
|
||||||
|
redirect_to [@project, @category],
|
||||||
|
notice: l(:notice_successful_update)
|
||||||
|
}
|
||||||
|
format.js {
|
||||||
|
head 200
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rescue ActiveRecord::StaleObjectError
|
||||||
|
flash.now[:error] = l(:notice_locking_conflict)
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
@category.destroy
|
||||||
|
redirect_to project_glossary_categories_path(@project)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Find the category whose id is the :id parameter
|
||||||
|
def find_category_from_id
|
||||||
|
@category = GlossaryCategory.find(params[:id])
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def glossary_category_params
|
||||||
|
params.require(:glossary_category).permit(
|
||||||
|
:name, :position
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,386 +0,0 @@
|
||||||
|
|
||||||
class GlossaryController < ApplicationController
|
|
||||||
menu_item :glossary
|
|
||||||
unloadable
|
|
||||||
|
|
||||||
layout 'base'
|
|
||||||
before_filter :find_project, :authorize
|
|
||||||
before_filter :find_term, :only => [:show, :edit, :destroy]
|
|
||||||
before_filter :retrieve_glossary_style, :only => [:index, :show, :show_all, :import_csv_exec]
|
|
||||||
|
|
||||||
helper :attachments
|
|
||||||
include AttachmentsHelper
|
|
||||||
helper :sort
|
|
||||||
include SortHelper
|
|
||||||
helper :glossary
|
|
||||||
include GlossaryHelper
|
|
||||||
helper :glossary_port
|
|
||||||
include GlossaryPortHelper
|
|
||||||
helper :glossary_styles
|
|
||||||
include GlossaryStylesHelper
|
|
||||||
|
|
||||||
|
|
||||||
def index
|
|
||||||
|
|
||||||
@is_index = true
|
|
||||||
set_show_params
|
|
||||||
@terms = find_terms(@glossary_style.project_scope)
|
|
||||||
unless @terms.empty?
|
|
||||||
sortparams = @glossary_style.sort_params
|
|
||||||
sort_terms(@terms, sortparams) unless sortparams.empty?
|
|
||||||
off_params = @show_params.clone
|
|
||||||
off_params.delete("category")
|
|
||||||
off_params.delete("project")
|
|
||||||
if (!@glossary_style.grouping?)
|
|
||||||
check_nouse_params(@terms, off_params)
|
|
||||||
else
|
|
||||||
@terms = grouping(@glossary_style.groupby, @terms, off_params)
|
|
||||||
end
|
|
||||||
@show_params.delete_if {|prm| off_params.member?(prm) }
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
respond_to do |format|
|
|
||||||
format.html { render :template => 'glossary/index.html.erb', :layout => !request.xhr? }
|
|
||||||
format.csv {
|
|
||||||
ary = @terms
|
|
||||||
ary = GroupingTerms.flatten(@terms) if (@glossary_style.grouping?)
|
|
||||||
send_data(glossary_to_csv(ary), :type => 'text',
|
|
||||||
:filename => "glossary-export.csv")
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def index_clear
|
|
||||||
params[:search_index_ch] = nil
|
|
||||||
redirect_to :controller => 'glossary', :action => 'index', :project_id => @project
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def show
|
|
||||||
set_show_params
|
|
||||||
@term_categories = TermCategory.where(:project_id => @project.id).order(:position)
|
|
||||||
respond_to do |format|
|
|
||||||
format.html { render :template => 'glossary/show.html.erb', :layout => !request.xhr? }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def new
|
|
||||||
@term_categories = TermCategory.where(:project_id => @project.id).order(:position)
|
|
||||||
@term = Term.new(params[:term])
|
|
||||||
@term.name = CGI::unescapeHTML(params[:new_term_name]) if params[:new_term_name]
|
|
||||||
@term.project_id = @project.id
|
|
||||||
|
|
||||||
unless (request.get? || request.xhr?)
|
|
||||||
@term.author_id = User.current.id
|
|
||||||
@term.updater_id = User.current.id
|
|
||||||
if @term.save
|
|
||||||
attach_files(@term, params[:attachments])
|
|
||||||
flash[:notice] = l(:notice_successful_create)
|
|
||||||
if (params[:continue])
|
|
||||||
redirect_to :controller => 'glossary', :action => 'new', :project_id => @project
|
|
||||||
else
|
|
||||||
redirect_to :controller => 'glossary', :action => 'show', :project_id => @project,
|
|
||||||
:id => @term
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def preview
|
|
||||||
@text = params[:term][:description]
|
|
||||||
render :partial => 'common/preview'
|
|
||||||
end
|
|
||||||
|
|
||||||
def edit
|
|
||||||
@term_categories = TermCategory.where(:project_id => @project.id).order(:position)
|
|
||||||
|
|
||||||
if request.post? || request.put? || request.patch?
|
|
||||||
@term.attributes = params[:term]
|
|
||||||
@term.updater_id = User.current.id
|
|
||||||
if @term.save
|
|
||||||
attach_files(@term, params[:attachments])
|
|
||||||
flash[:notice] = l(:notice_successful_update)
|
|
||||||
redirect_to(:controller => 'glossary', :action => 'show',
|
|
||||||
:project_id => @project, :id => @term.id)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
rescue ActiveRecord::StaleObjectError
|
|
||||||
# Optimistic locking exception
|
|
||||||
flash.now[:error] = l(:notice_locking_conflict)
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
@term.destroy
|
|
||||||
redirect_to :action => 'index', :project_id => @project
|
|
||||||
end
|
|
||||||
|
|
||||||
def add_term_category
|
|
||||||
@category = TermCategory.new(params[:category])
|
|
||||||
@category.project_id = @project.id
|
|
||||||
if request.post? and @category.save
|
|
||||||
respond_to do |format|
|
|
||||||
format.html do
|
|
||||||
flash[:notice] = l(:notice_successful_create)
|
|
||||||
redirect_to :controller => 'term_categories', :action => 'index', :project_id => @project
|
|
||||||
end
|
|
||||||
format.js do
|
|
||||||
term_categories = TermCategory.where(:project_id => @project.id)
|
|
||||||
render(:update) {|page| page.replace "term_category_id",
|
|
||||||
content_tag('select', '<option></option>' + options_from_collection_for_select(term_categories, 'id', 'name', @category.id), :id => 'term_category_id', :name => 'term[category_id]')
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def move_all
|
|
||||||
projs = Project.visible.all
|
|
||||||
@allowed_projs = projs.find_all {|proj|
|
|
||||||
User.current.allowed_to?({:controller =>'glossary', :action => 'index'}, proj) and
|
|
||||||
User.current.allowed_to?({:controller =>'glossary', :action => 'move_all'}, proj) and
|
|
||||||
proj != @project
|
|
||||||
}
|
|
||||||
if request.post?
|
|
||||||
newproj = Project.find(params[:new_project_id])
|
|
||||||
cats = TermCategory.where(:project_id => newproj.id).order(:position)
|
|
||||||
posbase = (cats.blank?) ? 0 : cats.last.position - 1;
|
|
||||||
cats = TermCategory.where(:project_id => @project.id)
|
|
||||||
cats.each {|cat|
|
|
||||||
cat.project_id = newproj.id
|
|
||||||
cat.position += cat.position + posbase
|
|
||||||
cat.save
|
|
||||||
}
|
|
||||||
Term.where(project_id: @project.id).update_all(project_id: newproj.id)
|
|
||||||
flash[:notice] = l(:notice_successful_update)
|
|
||||||
redirect_to({:action => 'index', :project_id => newproj})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def import_csv
|
|
||||||
end
|
|
||||||
|
|
||||||
def import_csv_exec
|
|
||||||
@import_info = CsvGlossaryImportInfo.new(params)
|
|
||||||
glossary_from_csv(@import_info, @project.id)
|
|
||||||
if (@import_info.success?)
|
|
||||||
flash[:notice] = l(:notice_successful_create)
|
|
||||||
else
|
|
||||||
flash.now[:error] = l(:error_import_failed) + " " + @import_info.err_string
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def show_param?(prmname)
|
|
||||||
case prmname
|
|
||||||
when 'project'
|
|
||||||
return false unless @glossary_style.project_scope != GlossaryStyle::ProjectCurrent
|
|
||||||
return true unless @is_index
|
|
||||||
@glossary_style.groupby != GlossaryStyle::GroupByProject
|
|
||||||
when 'category'
|
|
||||||
return true unless @is_index
|
|
||||||
@glossary_style.groupby != GlossaryStyle::GroupByCategory
|
|
||||||
when 'rubi'
|
|
||||||
(param_visible?(prmname) and !@is_index)
|
|
||||||
when 'abbr_whole'
|
|
||||||
(param_visible?(prmname) and !@is_index)
|
|
||||||
else
|
|
||||||
param_visible?(prmname)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_show_params
|
|
||||||
@show_params = default_show_params.find_all {|prmname|
|
|
||||||
show_param?(prmname)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def check_nouse_params(terms, off_params)
|
|
||||||
terms.each {|term|
|
|
||||||
return if off_params.empty?
|
|
||||||
off_params.delete_if {|prm| !term[prm].empty? }
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def grouping(type, terms, off_params)
|
|
||||||
grouptbl = {}
|
|
||||||
terms.each {|term|
|
|
||||||
off_params.delete_if {|prm| !term[prm].empty? }
|
|
||||||
tgt = (type == GlossaryStyle::GroupByProject) ? term.project : term.category
|
|
||||||
gterms = grouptbl[tgt];
|
|
||||||
unless (gterms)
|
|
||||||
gterms = GroupingTerms.new(type, tgt)
|
|
||||||
grouptbl[tgt] = gterms
|
|
||||||
end
|
|
||||||
gterms.ary << term
|
|
||||||
}
|
|
||||||
grouptbl.values.sort
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
#### sort
|
|
||||||
|
|
||||||
def sort_terms(terms, prms)
|
|
||||||
terms.to_a.sort! {|a, b|
|
|
||||||
re = nil
|
|
||||||
prms.each {|prm|
|
|
||||||
re = Term.compare_by_param(prm, a, b)
|
|
||||||
break if (re != 0)
|
|
||||||
}
|
|
||||||
(re == 0) ? a.id <=> b.id : re
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
#### find
|
|
||||||
|
|
||||||
def join_queries(ary, ex = 'OR')
|
|
||||||
joinstr = " #{ex} "
|
|
||||||
((ary.size == 1) ? ary[0] : "( #{ary.join(joinstr)} )")
|
|
||||||
end
|
|
||||||
|
|
||||||
def query_project_scope(projscope, queries)
|
|
||||||
ary = authorized_projects(projscope, @project,
|
|
||||||
{:controller => :glossary, :action => :index})
|
|
||||||
return false if ary.empty?
|
|
||||||
queries << join_queries(ary.collect{|proj| "project_id = #{proj.id}" })
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def query_category(catname, queries)
|
|
||||||
return if (!catname or catname.empty? )
|
|
||||||
if (catname == "(#{l(:label_not_categorized)})")
|
|
||||||
queries << "( category_id IS NULL )"
|
|
||||||
else
|
|
||||||
cats = TermCategory.where(["name LIKE :catname",
|
|
||||||
{:catname => catname + "%"}])
|
|
||||||
ary = []
|
|
||||||
ptn = /^#{Regexp.escape(catname)}\//
|
|
||||||
cats.each {|encat|
|
|
||||||
if (encat.name == catname or encat.name =~ ptn)
|
|
||||||
ary << "category_id = #{encat.id}"
|
|
||||||
end
|
|
||||||
}
|
|
||||||
queries << join_queries(ary) unless (ary.empty?)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def query_search_str(str, queries, symbols)
|
|
||||||
return unless (str and !str.empty?)
|
|
||||||
strs = tokenize_by_space(str)
|
|
||||||
cnt = 0
|
|
||||||
strs.each {|ss|
|
|
||||||
symbols["search_str_#{cnt}".to_sym] = "%#{ss}%"
|
|
||||||
cnt += 1
|
|
||||||
}
|
|
||||||
ary = []
|
|
||||||
default_searched_params.each {|prm|
|
|
||||||
subary = []
|
|
||||||
cnt = 0
|
|
||||||
strs.each {|ss|
|
|
||||||
subary << "( #{prm} LIKE :search_str_#{cnt} )"
|
|
||||||
cnt += 1
|
|
||||||
}
|
|
||||||
ary << join_queries(subary, 'AND')
|
|
||||||
}
|
|
||||||
queries << join_queries(ary) if (0 < ary.size)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def get_search_index_charset(ch, type)
|
|
||||||
charset = [ch]
|
|
||||||
return charset if type
|
|
||||||
idx = l(:index_ary).index(ch)
|
|
||||||
subary = l(:index_subary)
|
|
||||||
if (subary.is_a?(Array) and subary[idx] and !subary[idx].empty?)
|
|
||||||
if (subary[idx].is_a?(Array))
|
|
||||||
subary[idx].each {|subch|
|
|
||||||
charset << subch
|
|
||||||
}
|
|
||||||
else
|
|
||||||
charset << subary[idx]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
charset
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def query_search_index(ch, type, queries, symbols)
|
|
||||||
return unless (ch and !ch.empty?)
|
|
||||||
charset = get_search_index_charset(ch, type)
|
|
||||||
searchprms = [:name, :abbr_whole, :rubi]
|
|
||||||
searchprms << :name_en if (type)
|
|
||||||
cnt = 0
|
|
||||||
charset.each {|tch|
|
|
||||||
symbols["search_ch_#{cnt}".to_sym] = tch + '%'
|
|
||||||
cnt += 1
|
|
||||||
}
|
|
||||||
ary = []
|
|
||||||
searchprms.each {|prm|
|
|
||||||
subary = []
|
|
||||||
cnt = 0
|
|
||||||
charset.each {|tch|
|
|
||||||
subary << "( #{prm} LIKE :search_ch_#{cnt} )"
|
|
||||||
cnt += 1
|
|
||||||
}
|
|
||||||
ary << join_queries(subary)
|
|
||||||
}
|
|
||||||
@query_string = join_queries(ary)
|
|
||||||
queries << join_queries(ary) if (0 < ary.size)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def find_terms(project_scope)
|
|
||||||
queries = []
|
|
||||||
symbols = {}
|
|
||||||
return [] unless query_project_scope(project_scope, queries)
|
|
||||||
query_category(params[:search_category], queries)
|
|
||||||
query_search_str(params[:search_str], queries, symbols)
|
|
||||||
query_search_index(params[:search_index_ch], params[:search_index_type],
|
|
||||||
queries, symbols)
|
|
||||||
terms = nil
|
|
||||||
if (queries.empty?)
|
|
||||||
terms = Term.all
|
|
||||||
else
|
|
||||||
query_str = join_queries(queries, "AND")
|
|
||||||
terms = Term.where(query_str, symbols)
|
|
||||||
end
|
|
||||||
if (terms and params[:latest_days] and !params[:latest_days].empty?)
|
|
||||||
limitsec = Time.now.to_i - params[:latest_days].to_i * 60 * 60 * 24
|
|
||||||
limittm = Time.at(limitsec)
|
|
||||||
# terms.delete_if {|prm| (prm.datetime < limittm)}
|
|
||||||
recent_terms = []
|
|
||||||
terms.collect{|prm| recent_terms << prm if prm.datetime >= limittm}
|
|
||||||
recent_terms
|
|
||||||
else
|
|
||||||
terms
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def find_project
|
|
||||||
project_id = params[:project_id] || (params[:issue] && params[:issue][:project_id])
|
|
||||||
@project = Project.find(project_id)
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
|
||||||
render_404
|
|
||||||
end
|
|
||||||
|
|
||||||
def find_term
|
|
||||||
@term = Term.find_by(project_id: @project.id, id: params[:id])
|
|
||||||
render_404 unless @term
|
|
||||||
rescue
|
|
||||||
render_404
|
|
||||||
end
|
|
||||||
|
|
||||||
def attach_files(val, prm)
|
|
||||||
Attachment.attach_files(val, prm)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,61 +0,0 @@
|
||||||
class GlossaryStylesController < ApplicationController
|
|
||||||
unloadable
|
|
||||||
|
|
||||||
helper :glossary_styles
|
|
||||||
include GlossaryStylesHelper
|
|
||||||
|
|
||||||
def search
|
|
||||||
newparams = {
|
|
||||||
:controller => 'glossary', :action => 'index', :project_id => Project.find(params[:project_id])
|
|
||||||
}
|
|
||||||
unless (params[:search_clear])
|
|
||||||
for prm in [:search_category, :search_str, :latest_days]
|
|
||||||
if (params[prm] and !params[prm].empty?)
|
|
||||||
if (prm == :latest_days and !(params[prm] =~ /^\d+$/))
|
|
||||||
flash[:warning] = sprintf(l(:error_to_number), params[prm])
|
|
||||||
else
|
|
||||||
newparams[prm] = params[prm]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
redirect_to(newparams)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def edit
|
|
||||||
if (User.current.anonymous?)
|
|
||||||
if (params[:clear])
|
|
||||||
session[:glossary_style] = nil
|
|
||||||
else
|
|
||||||
session[:glossary_style] = params[:glossary_style]
|
|
||||||
end
|
|
||||||
else
|
|
||||||
unless params[:glossary_style_id].blank?
|
|
||||||
@glossary_style = GlossaryStyle.find_by(:user_id => User.current.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
if (@glossary_style)
|
|
||||||
if (params[:clear])
|
|
||||||
@glossary_style.set_default!
|
|
||||||
else
|
|
||||||
params[:glossary_style].each {|key,val|
|
|
||||||
@glossary_style[key] = val
|
|
||||||
}
|
|
||||||
end
|
|
||||||
else
|
|
||||||
@glossary_style = GlossaryStyle.new(params[:glossary_style])
|
|
||||||
end
|
|
||||||
|
|
||||||
@glossary_style.user_id = User.current.id
|
|
||||||
unless @glossary_style.save
|
|
||||||
flash[:error] = l(:notice_glossary_style_create_f)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
newparams = {:controller => 'glossary', :action => 'index',
|
|
||||||
:project_id => Project.find(params[:project_id]),
|
|
||||||
:glossary_style_id => @glossary_style_id}
|
|
||||||
add_search_params(newparams)
|
|
||||||
redirect_to(newparams)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
class GlossaryTermsController < ApplicationController
|
||||||
|
|
||||||
|
before_action :find_term_from_id, only: [:show, :edit, :update, :destroy]
|
||||||
|
before_action :find_project_by_project_id, :authorize, except: [:preview]
|
||||||
|
before_action :find_attachments, only: [:preview]
|
||||||
|
|
||||||
|
def index
|
||||||
|
@glossary_terms = GlossaryTerm.where(project_id: @project.id)
|
||||||
|
if not params[:index].nil?
|
||||||
|
@glossary_terms = @glossary_terms.search_by_name(params[:index])
|
||||||
|
elsif not params[:index_rubi].nil?
|
||||||
|
@glossary_terms = @glossary_terms.search_by_rubi(params[:index_rubi])
|
||||||
|
end
|
||||||
|
@grouping = params[:grouping] unless params[:grouping].nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
def new
|
||||||
|
@term = GlossaryTerm.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
term = GlossaryTerm.new(glossary_term_params)
|
||||||
|
term.project = @project
|
||||||
|
term.save_attachments params[:attachments]
|
||||||
|
if term.save
|
||||||
|
render_attachment_warning_if_needed term
|
||||||
|
redirect_to [@project, term], notice: l(:notice_successful_create)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@term.attributes = glossary_term_params
|
||||||
|
@term.save_attachments params[:attachments]
|
||||||
|
if @term.save
|
||||||
|
render_attachment_warning_if_needed @term
|
||||||
|
redirect_to [@project, @term], notice: l(:notice_successful_update)
|
||||||
|
end
|
||||||
|
rescue ActiveRecord::StaleObjectError
|
||||||
|
flash.now[:error] = l(:notice_locking_conflict)
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
@term.destroy
|
||||||
|
redirect_to project_glossary_terms_path(@project)
|
||||||
|
end
|
||||||
|
|
||||||
|
def preview
|
||||||
|
term = GlossaryTerm.find_by_id(params[:id])
|
||||||
|
if term
|
||||||
|
@attachments += term.attachments
|
||||||
|
@previewed = term
|
||||||
|
end
|
||||||
|
@text = params[:glossary_term][:description]
|
||||||
|
render partial: 'common/preview'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Find the term whose id is the :id parameter
|
||||||
|
def find_term_from_id
|
||||||
|
@term = GlossaryTerm.find(params[:id])
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
|
||||||
|
def import
|
||||||
|
GlossaryTerm.import(params[:file], @project)
|
||||||
|
redirect_to project_glossary_terms_path(@project)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def glossary_term_params
|
||||||
|
params.require(:glossary_term).permit(
|
||||||
|
:name, :description, :category_id,
|
||||||
|
:name_en, :rubi, :abbr_whole, :datatype, :codename
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,75 +0,0 @@
|
||||||
class TermCategoriesController < ApplicationController
|
|
||||||
unloadable
|
|
||||||
|
|
||||||
layout 'base'
|
|
||||||
menu_item :glossary, :only => [:index, :edit, :destroy]
|
|
||||||
|
|
||||||
before_filter :find_project, :authorize
|
|
||||||
before_filter :retrieve_glossary_style, :only => [:index]
|
|
||||||
|
|
||||||
helper :glossary
|
|
||||||
include GlossaryHelper
|
|
||||||
helper :glossary_styles
|
|
||||||
include GlossaryStylesHelper
|
|
||||||
|
|
||||||
|
|
||||||
def index
|
|
||||||
@categories = TermCategory.where(project_id: @project.id).order(:position)
|
|
||||||
end
|
|
||||||
|
|
||||||
def edit
|
|
||||||
@category = TermCategory.find_by(project_id: @project.id, id: params[:id])
|
|
||||||
if request.patch? and @category.update_attributes(params[:category])
|
|
||||||
flash[:notice] = l(:notice_successful_update)
|
|
||||||
redirect_to :controller => 'term_categories', :action => 'index', :project_id => @project
|
|
||||||
end
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
|
||||||
render_404
|
|
||||||
end
|
|
||||||
|
|
||||||
def change_order
|
|
||||||
if request.post?
|
|
||||||
category = TermCategory.find_by(project_id: @project.id, id: params[:id])
|
|
||||||
case params[:position]
|
|
||||||
when 'highest'; category.move_to_top
|
|
||||||
when 'higher'; category.move_higher
|
|
||||||
when 'lower'; category.move_lower
|
|
||||||
when 'lowest'; category.move_to_bottom
|
|
||||||
end if params[:position]
|
|
||||||
redirect_to :controller => 'term_categories', :action => 'index', :project_id => @project
|
|
||||||
end
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
|
||||||
render_404
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
@category = TermCategory.find_by(project_id: @project.id, id: params[:id])
|
|
||||||
@term_count = @category.terms.size
|
|
||||||
if @term_count == 0
|
|
||||||
@category.destroy
|
|
||||||
redirect_to :controller => 'term_categories', :action => 'index', :project_id => @project
|
|
||||||
elsif params[:todo]
|
|
||||||
reassign_to = TermCategory.find_by(project_id: @project.id, id: params[:reassign_to_id]) if params[:todo] == 'reassign'
|
|
||||||
@category.destroy(reassign_to)
|
|
||||||
redirect_to :controller => 'term_categories', :action => 'index', :project_id => @project
|
|
||||||
end
|
|
||||||
@categories = TermCategory.where(project_id: @project.id) - [@category]
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
|
||||||
render_404
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
def find_project
|
|
||||||
@project = Project.find(params[:project_id])
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
|
||||||
render_404
|
|
||||||
end
|
|
||||||
|
|
||||||
def conditions_projects()
|
|
||||||
ary = authorized_projects(@glossary_style.project_scope, @project,
|
|
||||||
{:controller => :term_categories, :action => :edit})
|
|
||||||
return nil if ary.empty?
|
|
||||||
return ary.collect{|proj| "project_id = #{proj.id}" }.join(" OR ")
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
module GlossaryCategoriesHelper
|
||||||
|
end
|
|
@ -1,73 +0,0 @@
|
||||||
require 'glossary_import_info'
|
|
||||||
|
|
||||||
module GlossaryHelper
|
|
||||||
|
|
||||||
def label_param(prmname)
|
|
||||||
case prmname
|
|
||||||
when 'id'
|
|
||||||
'#'
|
|
||||||
when 'project'
|
|
||||||
I18n.t(:label_project)
|
|
||||||
when 'category'
|
|
||||||
I18n.t(:field_category)
|
|
||||||
when 'datetime'
|
|
||||||
I18n.t(:field_updated_on)
|
|
||||||
when 'author'
|
|
||||||
I18n.t(:field_author)
|
|
||||||
when 'updater'
|
|
||||||
I18n.t(:label_updater)
|
|
||||||
when 'created_on'
|
|
||||||
I18n.t(:field_created_on)
|
|
||||||
when 'updated_on'
|
|
||||||
I18n.t(:field_updated_on)
|
|
||||||
when 'description'
|
|
||||||
I18n.t(:field_description)
|
|
||||||
else
|
|
||||||
I18n.t("label.#{prmname}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def param_visible?(prmname)
|
|
||||||
!Setting.plugin_redmine_glossary["hide_item_#{prmname}"]
|
|
||||||
end
|
|
||||||
|
|
||||||
def collect_visible_params(prmary)
|
|
||||||
ary = []
|
|
||||||
prmary.collect{|prm| ary << prm if param_visible?(prm)}
|
|
||||||
ary
|
|
||||||
end
|
|
||||||
|
|
||||||
def default_show_params; Term.default_show_params; end
|
|
||||||
def default_searched_params; Term.default_searched_params; end
|
|
||||||
def default_sort_params; Term.default_sort_params; end
|
|
||||||
|
|
||||||
|
|
||||||
def params_select(form, name, prms)
|
|
||||||
vprms = collect_visible_params(prms)
|
|
||||||
options = vprms.collect{|prm| [label_param(prm), prm]}
|
|
||||||
form.select(name, options, :include_blank=>true)
|
|
||||||
end
|
|
||||||
|
|
||||||
def params_select_tag(name, prms, defaultprm)
|
|
||||||
options = [""]
|
|
||||||
options += prms.collect{|prm| [label_param(prm), prm]}
|
|
||||||
select_tag(name, options_from_collection_for_select(options), defaultprm)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
# extract tokens from the question
|
|
||||||
# eg. hello "bye bye" => ["hello", "bye bye"]
|
|
||||||
def tokenize_by_space(str)
|
|
||||||
str.scan(%r{((\s|^)"[\s\w]+"(\s|$)|\S+)}).collect {|m|
|
|
||||||
m.first.gsub(%r{(^\s*"\s*|\s*"\s*$)}, '')
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def updated_by(updated, author)
|
|
||||||
l(:label_updated_time_by, :author => link_to_user(author), :age => time_tag(updated)).html_safe
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,99 +0,0 @@
|
||||||
module GlossaryPortHelper
|
|
||||||
|
|
||||||
|
|
||||||
#def glossary_csvout(csv, ic, ary)
|
|
||||||
def glossary_csvout(csv, ary)
|
|
||||||
csv << ary.collect {|c|
|
|
||||||
begin
|
|
||||||
#ic.iconv(c.to_s)
|
|
||||||
Redmine::CodesetUtil.from_utf8(c.to_s, l(:general_csv_encoding))
|
|
||||||
rescue
|
|
||||||
c.to_s
|
|
||||||
end
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def glossary_to_csv(terms)
|
|
||||||
#ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')
|
|
||||||
export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv|
|
|
||||||
# csv header fields
|
|
||||||
headers = Term.export_params.collect {|prm|
|
|
||||||
label_param(prm)
|
|
||||||
}
|
|
||||||
|
|
||||||
#glossary_csvout(csv, ic, headers)
|
|
||||||
glossary_csvout(csv, headers)
|
|
||||||
|
|
||||||
# csv lines
|
|
||||||
terms.each do |term|
|
|
||||||
fields = Term.export_params.collect {|prm|
|
|
||||||
term.param_to_s(prm)
|
|
||||||
}
|
|
||||||
#glossary_csvout(csv, ic, fields)
|
|
||||||
glossary_csvout(csv, fields)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
export
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def glossary_from_csv(portinfo, projid)
|
|
||||||
line_count = 0
|
|
||||||
begin
|
|
||||||
#ic = Iconv.new('UTF-8', portinfo.in_encoding)
|
|
||||||
|
|
||||||
raise l(:error_file_none) if (!portinfo.import_file)
|
|
||||||
FCSV::parse(portinfo.import_file.read) { |row|
|
|
||||||
line_count += 1
|
|
||||||
next if (portinfo.is_first_comment and line_count == 1)
|
|
||||||
next if (row.empty?)
|
|
||||||
|
|
||||||
name = row[portinfo.param_col('name')]
|
|
||||||
raise sprintf(l(:error_no_name), t("label.name")) unless name
|
|
||||||
|
|
||||||
#name = ic.iconv(name)
|
|
||||||
name = Redmine::CodesetUtil.to_utf8(name, portinfo.in_encoding)
|
|
||||||
term = Term.find_by(project_id: projid, name: name)
|
|
||||||
if (term)
|
|
||||||
portinfo.upterm_num += 1
|
|
||||||
else
|
|
||||||
term = Term.new(:name => name, :project_id => projid)
|
|
||||||
portinfo.newterm_num += 1
|
|
||||||
end
|
|
||||||
|
|
||||||
for col in 0 ... row.size
|
|
||||||
prm = portinfo.col_param(col)
|
|
||||||
next unless prm
|
|
||||||
#val = ic.iconv(row[col].to_s)
|
|
||||||
val = Redmine::CodesetUtil.to_utf8(row[col].to_s, portinfo.in_encoding)
|
|
||||||
case prm
|
|
||||||
when 'name'
|
|
||||||
when 'category'
|
|
||||||
unless val.empty? then
|
|
||||||
cat = TermCategory.find_by_name(val)
|
|
||||||
unless (cat)
|
|
||||||
cat = TermCategory.new(:name => val, :project_id => projid)
|
|
||||||
unless (cat.save)
|
|
||||||
raise l(:error_create_term_category)
|
|
||||||
end
|
|
||||||
portinfo.cat_num += 1
|
|
||||||
end
|
|
||||||
term['category_id'] = cat.id
|
|
||||||
end
|
|
||||||
else
|
|
||||||
term[prm] = val
|
|
||||||
end
|
|
||||||
end
|
|
||||||
unless (term.save)
|
|
||||||
raise l(:error_create_term)
|
|
||||||
end
|
|
||||||
}
|
|
||||||
rescue => evar
|
|
||||||
portinfo.err_string = evar.to_s
|
|
||||||
if (0 < line_count)
|
|
||||||
portinfo.err_string += sprintf(l(:error_csv_import_row), line_count)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,107 +0,0 @@
|
||||||
module GlossaryStylesHelper
|
|
||||||
|
|
||||||
def retrieve_glossary_style
|
|
||||||
if (User.current.anonymous?)
|
|
||||||
if (session[:glossary_style])
|
|
||||||
@glossary_style = GlossaryStyle.new(session[:glossary_style])
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if !params[:glossary_style_id].blank?
|
|
||||||
@glossary_style = GlossaryStyle.find_by(params[:glossary_style_id])
|
|
||||||
else
|
|
||||||
@glossary_style= GlossaryStyle.find_by(:user_id => User.current.id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
unless (@glossary_style)
|
|
||||||
@glossary_style = GlossaryStyle.new(:groupby => GlossaryStyle::GroupByCategory)
|
|
||||||
@glossary_style.user_id = User.current.id
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
def search_index_table(ary, sepcnt, proj, search_index_type = nil)
|
|
||||||
return "" if (!ary.is_a?(Array) or sepcnt <= 0)
|
|
||||||
str = '<table id="glossary_index"><tr>'
|
|
||||||
cnt = 0
|
|
||||||
for ch in ary
|
|
||||||
str += '</tr><tr>' if ((cnt != 0) and (cnt % sepcnt) == 0 )
|
|
||||||
cnt += 1
|
|
||||||
str += '<td>'
|
|
||||||
if (ch and !ch.empty?)
|
|
||||||
prms = {:controller => 'glossary', :action => 'index', :project_id => proj,
|
|
||||||
:search_index_ch => ch}
|
|
||||||
prms[:search_index_type] = search_index_type if (search_index_type)
|
|
||||||
str += link_to(ch, prms)
|
|
||||||
end
|
|
||||||
str += '</td>'
|
|
||||||
end
|
|
||||||
str += '</tr></table>'
|
|
||||||
str.html_safe
|
|
||||||
end
|
|
||||||
|
|
||||||
def search_params
|
|
||||||
[:search_str, :search_category, :latest_days]
|
|
||||||
end
|
|
||||||
|
|
||||||
def search_params_all
|
|
||||||
search_params + [:search_index_ch, :search_index_type]
|
|
||||||
end
|
|
||||||
|
|
||||||
def add_search_params(prms)
|
|
||||||
search_params_all.each {|prm|
|
|
||||||
prms[prm] = params[prm] if (params[prm] and !params[prm].empty?)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def glossary_searching?
|
|
||||||
search_params.each {|prm|
|
|
||||||
return true if (params[prm] and !params[prm].empty?)
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def authorized_projects(projscope, curproj, authcnd)
|
|
||||||
ary = []
|
|
||||||
case projscope
|
|
||||||
when GlossaryStyle::ProjectCurrent
|
|
||||||
return [curproj]
|
|
||||||
when GlossaryStyle::ProjectMine
|
|
||||||
ary = User.current.memberships.collect(&:project).compact.uniq
|
|
||||||
when GlossaryStyle::ProjectAll
|
|
||||||
ary = Project.visible.all
|
|
||||||
end
|
|
||||||
ary.find_all {|proj|
|
|
||||||
User.current.allowed_to?(authcnd, proj)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def break_categories(cats)
|
|
||||||
catstrs = []
|
|
||||||
cats.each {|cat|
|
|
||||||
catstrs << cat.name
|
|
||||||
if (cat.name.include?('/'))
|
|
||||||
str = cat.name
|
|
||||||
while (str =~ /^(.+)\/[^\/]+$/)
|
|
||||||
str = $1
|
|
||||||
catstrs << str
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
catstrs
|
|
||||||
end
|
|
||||||
|
|
||||||
def seach_category_options(projscope, curproj)
|
|
||||||
options = [""]
|
|
||||||
projs = authorized_projects(projscope, curproj, {:controller => :glossary, :action => :index})
|
|
||||||
unless (projs.empty?)
|
|
||||||
querystr = projs.collect {|proj| "project_id = #{proj.id}"}.join(" OR ")
|
|
||||||
options += break_categories(TermCategory.where(querystr)).sort.uniq
|
|
||||||
end
|
|
||||||
options << "(#{l(:label_not_categorized)})"
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
module GlossaryTermsHelper
|
||||||
|
end
|
|
@ -1,2 +0,0 @@
|
||||||
module TermCategoriesHelper
|
|
||||||
end
|
|
9
plugins/redmine_glossary/app/models/glossary_category.rb
Normal file
9
plugins/redmine_glossary/app/models/glossary_category.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
class GlossaryCategory < ActiveRecord::Base
|
||||||
|
has_many :terms, class_name: 'GlossaryTerm', foreign_key: 'category_id'
|
||||||
|
belongs_to :project
|
||||||
|
|
||||||
|
acts_as_positioned
|
||||||
|
|
||||||
|
scope :sorted, lambda { order(:position) }
|
||||||
|
|
||||||
|
end
|
|
@ -1,52 +0,0 @@
|
||||||
class GlossaryStyle < ActiveRecord::Base
|
|
||||||
unloadable
|
|
||||||
|
|
||||||
GroupByNone = 0
|
|
||||||
GroupByCategory = 1
|
|
||||||
GroupByProject = 2
|
|
||||||
|
|
||||||
ProjectCurrent = 0
|
|
||||||
ProjectMine = 1
|
|
||||||
ProjectAll = 2
|
|
||||||
|
|
||||||
belongs_to :project
|
|
||||||
|
|
||||||
attr_accessible :groupby
|
|
||||||
|
|
||||||
def grouping?
|
|
||||||
case groupby
|
|
||||||
when GroupByCategory
|
|
||||||
return true
|
|
||||||
when GroupByProject
|
|
||||||
return (project_scope != ProjectCurrent)
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_default!
|
|
||||||
self['show_desc'] = false
|
|
||||||
self['groupby'] = 1
|
|
||||||
self['project_scope'] = 0
|
|
||||||
self['sort_item_0'] = ''
|
|
||||||
self['sort_item_1'] = ''
|
|
||||||
self['sort_item_2'] = ''
|
|
||||||
end
|
|
||||||
|
|
||||||
def sort_params
|
|
||||||
ary = []
|
|
||||||
for cnt in 0...3
|
|
||||||
prm = self["sort_item_#{cnt}"]
|
|
||||||
if (prm and !prm.empty?)
|
|
||||||
case prm
|
|
||||||
when 'project'
|
|
||||||
next if (groupby == GroupByProject or project_scope == ProjectCurrent)
|
|
||||||
when 'category'
|
|
||||||
next if (groupby == GroupByCategory)
|
|
||||||
end
|
|
||||||
ary << prm
|
|
||||||
end
|
|
||||||
end
|
|
||||||
ary.uniq
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
59
plugins/redmine_glossary/app/models/glossary_term.rb
Normal file
59
plugins/redmine_glossary/app/models/glossary_term.rb
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
require 'csv'
|
||||||
|
|
||||||
|
class GlossaryTerm < ActiveRecord::Base
|
||||||
|
belongs_to :category, class_name: 'GlossaryCategory', foreign_key: 'category_id'
|
||||||
|
belongs_to :project
|
||||||
|
belongs_to :author, class_name: 'User', foreign_key: 'author_id'
|
||||||
|
belongs_to :updater, class_name: 'User', foreign_key: 'updater_id'
|
||||||
|
|
||||||
|
# class method from Redmine::Acts::Attachable::ClassMethods
|
||||||
|
acts_as_attachable view_permission: :view_glossary_terms, edit_permission: :manage_glossary_terms,
|
||||||
|
delete_permission: :manage_glossary_terms
|
||||||
|
|
||||||
|
acts_as_event datetime: :updated_at,
|
||||||
|
description: :description,
|
||||||
|
author: nil,
|
||||||
|
title: Proc.new {|o| "#{l(:glossary_title)} ##{o.id} - #{o.name}" },
|
||||||
|
url: Proc.new {|o| { controller: 'glossary_terms',
|
||||||
|
action: 'show',
|
||||||
|
id: o.id,
|
||||||
|
project_id: o.project }
|
||||||
|
}
|
||||||
|
|
||||||
|
acts_as_searchable columns: [ "#{table_name}.name", "#{table_name}.description", "#{table_name}.rubi"],
|
||||||
|
preload: [:project ],
|
||||||
|
date_column: "#{table_name}.created_at",
|
||||||
|
scope: joins(:project),
|
||||||
|
permission: :view_glossary_terms
|
||||||
|
|
||||||
|
acts_as_activity_provider scope: joins(:project),
|
||||||
|
type: 'glossary_terms',
|
||||||
|
permission: :view_glossary_terms,
|
||||||
|
timestamp: :updated_at
|
||||||
|
|
||||||
|
scope :search_by_name, -> (keyword) {
|
||||||
|
where 'name like ?', "#{sanitize_sql_like(keyword)}%"
|
||||||
|
}
|
||||||
|
|
||||||
|
scope :search_by_rubi, -> (keyword) {
|
||||||
|
where 'rubi like ?', "#{sanitize_sql_like(keyword)}%"
|
||||||
|
}
|
||||||
|
|
||||||
|
def self.csv_attributes
|
||||||
|
["name", "name_en", "datatype", "codename", "description", "rubi", "abbr_whole"]
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.import(file, project)
|
||||||
|
CSV.foreach(file.path, headers: true, encoding: "CP932:UTF-8" ) do |row|
|
||||||
|
term = new
|
||||||
|
term.attributes = row.to_hash.slice(*csv_attributes)
|
||||||
|
term.project = project
|
||||||
|
unless row["category"].blank?
|
||||||
|
term.category = GlossaryCategory.find_by(name: row["category"]) ||
|
||||||
|
GlossaryCategory.create(name: row["category"], project: project)
|
||||||
|
end
|
||||||
|
term.save!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -1,149 +0,0 @@
|
||||||
class Term < ActiveRecord::Base
|
|
||||||
unloadable
|
|
||||||
|
|
||||||
belongs_to :category, :class_name => 'TermCategory', :foreign_key => 'category_id'
|
|
||||||
belongs_to :project
|
|
||||||
belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
|
|
||||||
|
|
||||||
validates_presence_of :name, :project
|
|
||||||
validates_length_of :name, :maximum => 255
|
|
||||||
|
|
||||||
acts_as_attachable
|
|
||||||
|
|
||||||
acts_as_searchable :columns => ["#{table_name}.name", "#{table_name}.description"],
|
|
||||||
:project_key => [:project]
|
|
||||||
|
|
||||||
acts_as_event :title => Proc.new {|o| "#{l(:glossary_title)} ##{o.id}: #{o.name}" },
|
|
||||||
:description => Proc.new {|o| "#{o.description}"},
|
|
||||||
:datetime => :created_on,
|
|
||||||
:type => 'terms',
|
|
||||||
:url => Proc.new {|o| {:controller => 'glossary', :action => 'show', :id => o.project, :term_id => o.id} }
|
|
||||||
|
|
||||||
attr_accessible :project_id, :category_id, :author, :name, :name_en, :datatype, :codename, :description,
|
|
||||||
:rubi, :abbr_whole
|
|
||||||
|
|
||||||
def author
|
|
||||||
author_id ? User.find_by_id(author_id) : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def updater
|
|
||||||
updater_id ? User.find_by_id(updater_id) : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def project
|
|
||||||
Project.find_by_id(project_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def datetime
|
|
||||||
(self[:created_on] != self[:updated_on]) ? self[:updated_on] : self[:created_on]
|
|
||||||
end
|
|
||||||
|
|
||||||
def value(prmname)
|
|
||||||
case prmname
|
|
||||||
when 'project'
|
|
||||||
(project) ? project.name : ""
|
|
||||||
when 'category'
|
|
||||||
(category) ? category : ""
|
|
||||||
when 'datetime'
|
|
||||||
datetime
|
|
||||||
else
|
|
||||||
self[prmname]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def param_to_s(prmname)
|
|
||||||
if (prmname == 'created_on' or prmname == 'updated_on')
|
|
||||||
format_time(self[prmname])
|
|
||||||
else
|
|
||||||
value(prmname).to_s
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def <=>(term)
|
|
||||||
id <=> term.id
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def self.compare_safe(a, b, &blk)
|
|
||||||
if (!a and !b)
|
|
||||||
return 0
|
|
||||||
elsif (!a or !b)
|
|
||||||
return -1 if a
|
|
||||||
return 1 if b
|
|
||||||
end
|
|
||||||
yield(a,b)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def self.compare_by_param(prm, a, b)
|
|
||||||
case prm
|
|
||||||
when 'project'
|
|
||||||
a.project.identifier <=> b.project.identifier
|
|
||||||
when 'category'
|
|
||||||
self.compare_safe(a.category, b.category) {|acat, bcat|
|
|
||||||
acat.position <=> bcat.position
|
|
||||||
}
|
|
||||||
when 'datetime'
|
|
||||||
self.compare_safe(a.value(prm), b.value(prm)) {|aval, bval|
|
|
||||||
(aval <=> bval) * -1
|
|
||||||
}
|
|
||||||
when 'name'
|
|
||||||
((a.rubi.empty?) ? a.name : a.rubi) <=> ((b.rubi.empty?) ? b.name : b.rubi)
|
|
||||||
else
|
|
||||||
self.compare_safe(a.value(prm), b.value(prm)) {|aval, bval|
|
|
||||||
aval <=> bval
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def to_s
|
|
||||||
"##{id}: #{name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.find_for_macro(tname, proj, all_project = false)
|
|
||||||
if proj
|
|
||||||
term = Term.find_by(:project_id => proj.id, :name => tname)
|
|
||||||
return term if term
|
|
||||||
end
|
|
||||||
return nil unless all_project
|
|
||||||
return self.find_by_name(tname)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.default_show_params
|
|
||||||
['name_en', 'rubi', 'abbr_whole', 'datatype', 'codename', 'project', 'category']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.default_searched_params
|
|
||||||
['name', 'name_en', 'abbr_whole', 'datatype', 'codename', 'description']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.default_sort_params
|
|
||||||
['id', 'name', 'name_en', 'abbr_whole', 'datatype', 'codename', 'project', 'category',
|
|
||||||
'datetime']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.hidable_params
|
|
||||||
['name_en', 'rubi', 'abbr_whole', 'datatype', 'codename']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.setting_params
|
|
||||||
['name_en', 'rubi', 'abbr_whole', 'datatype', 'codename']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.export_params
|
|
||||||
['id','project',
|
|
||||||
'name', 'name_en', 'rubi', 'abbr_whole', 'category', 'datatype', 'codename',
|
|
||||||
'author', 'updater', 'created_on', 'updated_on',
|
|
||||||
'description']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.import_params
|
|
||||||
['name', 'name_en', 'rubi', 'abbr_whole', 'category', 'datatype', 'codename',
|
|
||||||
'description']
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,29 +0,0 @@
|
||||||
class TermCategory < ActiveRecord::Base
|
|
||||||
belongs_to :project
|
|
||||||
has_many :terms, :foreign_key => 'category_id', :dependent => :nullify
|
|
||||||
|
|
||||||
acts_as_list :scope => :project_id
|
|
||||||
|
|
||||||
attr_accessible :name, :project_id, :position
|
|
||||||
|
|
||||||
validates_presence_of :name
|
|
||||||
validates_uniqueness_of :name, :scope => [:project_id]
|
|
||||||
|
|
||||||
alias :destroy_without_reassign :destroy
|
|
||||||
|
|
||||||
# Destroy the category
|
|
||||||
# If a category is specified, terms are reassigned to this category
|
|
||||||
def destroy(reassign_to = nil)
|
|
||||||
if reassign_to && reassign_to.is_a?(TermCategory) && reassign_to.project == self.project
|
|
||||||
Term.update_all("category_id = #{reassign_to.id}", "category_id = #{id}")
|
|
||||||
end
|
|
||||||
destroy_without_reassign
|
|
||||||
end
|
|
||||||
|
|
||||||
def <=>(category)
|
|
||||||
position <=> category.position
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_s; name end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,10 +0,0 @@
|
||||||
<h3 class="title"><%=l(:label_term_category_new)%></h3>
|
|
||||||
|
|
||||||
<% form = labelled_form_for @category, :as => :category, :url => { :action => 'add_term_category', :project_id => @project }, :html => {:class => 'tabular'} do |f| %>
|
|
||||||
<%= render :partial => 'term_categories/form', :locals => { :f => f } %>
|
|
||||||
<p class="buttons">
|
|
||||||
<%= submit_tag l(:button_create), :name => nil %>
|
|
||||||
<%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
|
|
||||||
</p>
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
|
@ -1,38 +0,0 @@
|
||||||
|
|
||||||
<p><%= f.text_field :name, :label=>t('label.name'), :size => 100, :required => true %></p>
|
|
||||||
|
|
||||||
<% for prm in Term.setting_params %>
|
|
||||||
<% if param_visible?(prm) %>
|
|
||||||
<p><%= f.text_field prm, :label=>label_param(prm), :size => 100 %></p>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div class="splitcontentleft">
|
|
||||||
<p><%= f.select :category_id, (@term_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
|
|
||||||
<% if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
<%= link_to(l(:label_term_category_new),
|
|
||||||
{:controller => 'glossary', :action => 'add_term_category', :project_id => @project.id },
|
|
||||||
:category => 'category[name]',
|
|
||||||
:class => 'icon icon-add',
|
|
||||||
:tabindex => 199,
|
|
||||||
:method => 'get',
|
|
||||||
:remote => true) if authorize_for('glossary', 'add_term_category') %></p>
|
|
||||||
<% else %>
|
|
||||||
<%= prompt_to_remote(l(:label_term_category_new),
|
|
||||||
l(:label_term_category_new), 'category[name]',
|
|
||||||
{:controller => 'glossary', :action => 'add_term_category', :project_id => @project },
|
|
||||||
:class => 'icon icon-add', :tabindex => 199) if authorize_for('glossary', 'add_term_category') %></p>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<p><%= f.text_area :description, :label=>t('label.description'),
|
|
||||||
:cols => 60,
|
|
||||||
:rows => (@term.description.blank? ? 10 : [[10, @term.description.length / 50].max, 100].min),
|
|
||||||
:accesskey => accesskey(:edit),
|
|
||||||
:class => 'wiki-edit' %></p>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p />
|
|
||||||
<p><label><%=l(:label_attachment_plural)%></label><%= render :partial => 'attachments/form' %></p>
|
|
||||||
|
|
||||||
<%= wikitoolbar_for 'term_description' %>
|
|
|
@ -1,31 +0,0 @@
|
||||||
<table class="list glossary">
|
|
||||||
<thead><tr align="left">
|
|
||||||
<th>#</th>
|
|
||||||
<th><%=h t('label.name') %></th>
|
|
||||||
<% for prm in @show_params %>
|
|
||||||
<th><%=h label_param(prm) %></th>
|
|
||||||
<% end %>
|
|
||||||
<th><%=h l(:field_description)%></th>
|
|
||||||
<th></th>
|
|
||||||
</tr></thead>
|
|
||||||
<tbody>
|
|
||||||
<% for term in index_in_category -%>
|
|
||||||
<tr class="<%= cycle("odd", "even") %> term">
|
|
||||||
<td><%=h term.id %></td>
|
|
||||||
<td><%= term_link(term) %></td>
|
|
||||||
<% for prm in @show_params %>
|
|
||||||
<td><%=h term.value(prm) %></td>
|
|
||||||
<% end %>
|
|
||||||
<!--td><%=h truncate(term.description, :length=>50) %></td-->
|
|
||||||
<td><% @paragraphs = Nokogiri::HTML.parse(term.description).css('p') %><%=textilizable @paragraphs.first.inner_html + (@paragraphs.size > 1 ? '<p>…</p>' : '') %></td>
|
|
||||||
<td align="right" width="40px">
|
|
||||||
<% if term.project_id == @project.id %>
|
|
||||||
<%= link_to_if_authorized(image_tag('edit.png'), {:action => 'edit', :project_id => @project, :id => term}, :title => l(:button_edit)) %>
|
|
||||||
<%= link_to_if_authorized(image_tag('delete.png'), {:action => 'destroy', :project_id => @project, :id => term}, :confirm => l(:text_are_you_sure), :method => :post, :title => l(:button_delete)) %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<br />
|
|
|
@ -1,9 +0,0 @@
|
||||||
|
|
||||||
<% for term in show_all_in_category -%>
|
|
||||||
<div class="term" >
|
|
||||||
<h3> <%= term_link(term) %> </h3>
|
|
||||||
<%= render(:partial => "glossary/show_one", :object => term) %>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
<br />
|
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
<% term = show_one %>
|
|
||||||
<% if @show_params.size > 1 %>
|
|
||||||
<table class="term_items">
|
|
||||||
<% for prm in @show_params %>
|
|
||||||
<% unless term.value(prm).blank? %><tr><th><%=h label_param(prm) %>:</th><td><%= term.value(prm) %></td></tr><% end %>
|
|
||||||
<% end %>
|
|
||||||
</table>
|
|
||||||
<% end %>
|
|
||||||
<% unless (term.description.empty?) %>
|
|
||||||
<% if @show_params.size > 1 %><strong><%= l(:field_description) %></strong>:<% end %>
|
|
||||||
<div class="wiki">
|
|
||||||
<%= textilizable term, :description, :attachments => term.attachments %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<% if term.attachments.any? %>
|
|
||||||
<%= (@is_index) ? "" : '<hr />' %>
|
|
||||||
<%= link_to_attachments term %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
|
|
||||||
<% if User.current.allowed_to?(:view_terms, @project, :global => true) %>
|
|
||||||
<h3><%= l(:label_view) %></h3>
|
|
||||||
<%= render(:partial => "glossary_styles/form",
|
|
||||||
:object => @view_style) %>
|
|
||||||
<br />
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
|
|
||||||
<% if User.current.allowed_to?(:manage_terms, @project, :global => true) %>
|
|
||||||
<h3><%= l(:label_term) %></h3>
|
|
||||||
<%= link_to(l(:label_term_new), {:controller => 'glossary', :action => 'new', :project_id => @project}, :class => 'icon icon-add') %>
|
|
||||||
<br />
|
|
||||||
<% if (Term.find_by(:project_id => @project.id)) %>
|
|
||||||
<%= link_to_if_authorized(l(:label_move_all_terms), {:controller => 'glossary', :action => 'move_all', :project_id => @project}, :class => 'icon icon-move') %>
|
|
||||||
<br />
|
|
||||||
<% end %>
|
|
||||||
<%= link_to(l(:label_glossary_import_csv), {:controller => 'glossary', :action => 'import_csv', :project_id => @project}, :id => 'glossary_import_csv') %>
|
|
||||||
<br />
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
|
|
||||||
<% if User.current.allowed_to?(:manage_term_categories, @project, :global => true) %>
|
|
||||||
<h3><%= l(:label_term_category) %></h3>
|
|
||||||
<%= link_to(l(:label_term_category_new), {:controller => 'glossary', :action => 'add_term_category', :project_id => @project}, :class => 'icon icon-add') %>
|
|
||||||
<br />
|
|
||||||
<%= link_to(l(:label_manage_term_category), { :controller => 'term_categories', :action => 'index', :project_id => @project }, :id => 'glossary_term_categories') %>
|
|
||||||
<br />
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
|
|
||||||
<% if User.current.allowed_to?(:view_terms, @project, :global => true) %>
|
|
||||||
<h3><%= l(:label_glossary_style_index) %></h3>
|
|
||||||
|
|
||||||
<% if params[:search_index_ch] %>
|
|
||||||
<div class="contextual">
|
|
||||||
<%= link_to_if_authorized(l(:button_clear), {:controller => 'glossary', :action => 'index_clear', :project_id => @project}, :class => 'icon icon-reload') %>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
<%= search_index_table(l(:index_ary_en), l(:index_ary_en_sep_cnt), @project, 'en') %>
|
|
||||||
<br />
|
|
||||||
<%= search_index_table(l(:index_ary), l(:index_ary_sep_cnt), @project) %>
|
|
||||||
<br />
|
|
||||||
<% end %>
|
|
|
@ -1,10 +0,0 @@
|
||||||
|
|
||||||
<% content_for :sidebar do %>
|
|
||||||
<%= render :partial => 'glossary/sidebar' %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% content_for :header_tags do %>
|
|
||||||
<%= stylesheet_link_tag 'glossary', :plugin => 'redmine_glossary' %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% html_title(l(:glossary_title)) -%>
|
|
|
@ -1,9 +0,0 @@
|
||||||
<h2><%=l(:label_term_category_new)%></h2>
|
|
||||||
|
|
||||||
<% form = labelled_form_for @category, :as => :category, :url => { :action => 'add_term_category', :project_id => @project }, :html => {:class => 'tabular'} do |f| %>
|
|
||||||
<%= render :partial => 'term_categories/form', :locals => { :f => f } %>
|
|
||||||
<%= submit_tag l(:button_create) %>
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
|
|
||||||
<% html_title(l(:glossary_title)) -%>
|
|
|
@ -1,2 +0,0 @@
|
||||||
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'glossary/add_term_category_modal') %>');
|
|
||||||
showModal('ajax-modal', '600px');
|
|
|
@ -1,29 +0,0 @@
|
||||||
<h2><%= l(:label_term) %> #<%= @term.id %></h2>
|
|
||||||
|
|
||||||
<% form = labelled_form_for @term, :as => :term,
|
|
||||||
:url => {:action => 'edit', :project_id => @project, :id => @term},
|
|
||||||
:html => {:class => 'tabular', :multipart => true, :id => 'term-form'} do |f| %>
|
|
||||||
<%= error_messages_for 'term' %>
|
|
||||||
<div class="box">
|
|
||||||
<%= render :partial => 'glossary/form', :locals => {:f => f} %>
|
|
||||||
</div>
|
|
||||||
<%= submit_tag l(:button_edit) %>
|
|
||||||
<% if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
<%= preview_link({:controller => 'glossary', :action => 'preview', :project_id => @project.id },
|
|
||||||
"term-form",
|
|
||||||
"preview") %>
|
|
||||||
<% else %>
|
|
||||||
<%= link_to_remote l(:label_preview),
|
|
||||||
{ :url => { :controller => 'glossary', :action => 'preview', :project_id => @project },
|
|
||||||
:method => 'post',
|
|
||||||
:update => 'preview',
|
|
||||||
:with => "Form.serialize('term-form')",
|
|
||||||
:complete => "Element.scrollTo('preview')"
|
|
||||||
}, :accesskey => accesskey(:preview) %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
|
|
||||||
<div id="preview" class="wiki"></div>
|
|
||||||
|
|
||||||
<% html_title(l(:glossary_title)) -%>
|
|
|
@ -1,57 +0,0 @@
|
||||||
<h2><%=h l(:label_glossary_import_csv) %> </h2>
|
|
||||||
|
|
||||||
|
|
||||||
<% form = form_tag({:controller => 'glossary', :action => 'import_csv_exec', :project_id=>@project},
|
|
||||||
{:multipart => true}) do %>
|
|
||||||
|
|
||||||
<%= l(:label_csv_file) %>
|
|
||||||
<%= file_field_tag 'import_file', :accept => 'text/csv', :size => '60%' %>
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<% encs = l(:in_encoding_candidates)
|
|
||||||
if (encs and encs.is_a?(Array) and !encs.empty?)
|
|
||||||
enc_options = []
|
|
||||||
encs.each {|enc|
|
|
||||||
enc_options << enc
|
|
||||||
}
|
|
||||||
%>
|
|
||||||
<%=h l(:label_file_encoding) %>
|
|
||||||
<%= select_tag("in_encoding", options_for_select(enc_options)) %>
|
|
||||||
<br />
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<label> <%= check_box_tag("is_first_comment", '1', true) %>
|
|
||||||
<%= l(:label_csv_import_is_first_comment) %> </label>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<%
|
|
||||||
name_options = []
|
|
||||||
options = [""]
|
|
||||||
for num in 1 ... 30
|
|
||||||
name_options << num
|
|
||||||
options << num
|
|
||||||
end
|
|
||||||
%>
|
|
||||||
<fieldset>
|
|
||||||
<legend><%= l(:label_import_items) %></legend>
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr><th><%=h l(:label_item) %></th><th><%=h l(:label_column) %></th></tr>
|
|
||||||
<% CsvGlossaryImportInfo.default_param_cols {|prm, col| %>
|
|
||||||
<tr><td><%=h label_param(prm) %></td><td>
|
|
||||||
<%= select_tag("colno_#{prm}",
|
|
||||||
options_for_select((prm == 'name') ? name_options : options, col)) %>
|
|
||||||
</td></tr>
|
|
||||||
<% } %>
|
|
||||||
</table>
|
|
||||||
* <%=h l(:message_import_item) %>
|
|
||||||
</fieldset>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<%= submit_tag(l(:label_import)) %>
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
|
|
||||||
<% html_title(l(:glossary_title)) -%>
|
|
|
@ -1,13 +0,0 @@
|
||||||
<h2> <%=h l(:label_csv_import_finished) %> </h2>
|
|
||||||
|
|
||||||
|
|
||||||
<table class="term_items">
|
|
||||||
<tr><th><%=h l(:label_csv_file) %> : </th><td>
|
|
||||||
<%=h (@import_info.import_file) ? @import_info.import_file.original_filename : "" %>
|
|
||||||
</td></tr>
|
|
||||||
<tr><th><%=h l(:label_create_category_num) %> : </th><td> <%= @import_info.cat_num %> </td></tr>
|
|
||||||
<tr><th><%=h l(:label_create_term_num) %> : </th><td> <%= @import_info.newterm_num %> </td></tr>
|
|
||||||
<tr><th><%=h l(:label_update_term_num) %> : </th><td> <%= @import_info.upterm_num %> </td></tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<%= render :partial => 'glossary/view_term' %>
|
|
|
@ -1,42 +0,0 @@
|
||||||
|
|
||||||
<div class="contextual">
|
|
||||||
<%= link_to_if_authorized(l(:label_term_new), {:controller => 'glossary', :action => 'new', :project_id => @project}, :class => 'icon icon-add') %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%
|
|
||||||
subtitle = ""
|
|
||||||
if params[:search_index_ch]
|
|
||||||
subtitlle = "- #{params[:search_index_ch]} -"
|
|
||||||
end %>
|
|
||||||
|
|
||||||
<h2><%= t('glossary_title') %> <%= subtitlle %> </h2>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
<% if User.current.allowed_to?(:view_terms, @project, :global => true) %>
|
|
||||||
<%= render(:partial => "glossary_styles/search") %>
|
|
||||||
<br />
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% tempname = "glossary/#{@glossary_style.show_desc ? 'show_all' : 'index'}_in_category" %>
|
|
||||||
<% unless @terms.empty? %>
|
|
||||||
<% if @glossary_style.grouping? %>
|
|
||||||
<% list_number = 1 %>
|
|
||||||
<% @terms.each do |gterms| %>
|
|
||||||
<h3><%= "#{list_number}. #{gterms.name}" %></h3>
|
|
||||||
<% list_number += 1 %>
|
|
||||||
<%= render(:partial => tempname, :object => gterms.ary) %>
|
|
||||||
<% end %>
|
|
||||||
<% else %>
|
|
||||||
<%= render(:partial => tempname, :object => @terms) %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% other_formats_links do |f| %>
|
|
||||||
<%= f.link_to 'CSV', :url => params %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% else %>
|
|
||||||
<p class="nodata"><%= l(:label_no_data) %></p>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
|
|
||||||
<%= render :partial => 'glossary/view_term' %>
|
|
|
@ -1,22 +0,0 @@
|
||||||
<h2><%= l(:label_move_all_terms) %></h2>
|
|
||||||
|
|
||||||
<% if params[:new_project_id] %>
|
|
||||||
|
|
||||||
<% elsif @allowed_projs.blank? %>
|
|
||||||
<div class="nodata">
|
|
||||||
<%= simple_format(l(:error_no_movement_project)) %>
|
|
||||||
</div>
|
|
||||||
<% else %>
|
|
||||||
<% form = form_tag({:project_id => @project}, :id => 'move_all_form') do %>
|
|
||||||
|
|
||||||
<div class="box tabular">
|
|
||||||
<p><label for="new_project_id"><%=l(:label_movement_project)%>:</label>
|
|
||||||
<%= select_tag "new_project_id",
|
|
||||||
project_tree_options_for_select(@allowed_projs) %>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<%= submit_tag l(:button_move) %>
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
<% end %>
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
<h2><%=l(:label_term_new)%></h2>
|
|
||||||
|
|
||||||
<% form = labelled_form_for @term, :as => :term,
|
|
||||||
:url => {:action => 'new', :project_id => @project, :id => @term},
|
|
||||||
:html => {:class => 'tabular', :multipart => true, :id => 'term-form'} do |f| %>
|
|
||||||
<%= error_messages_for 'term' %>
|
|
||||||
<div class="box">
|
|
||||||
<%= render :partial => 'glossary/form', :locals => {:f => f} %>
|
|
||||||
</div>
|
|
||||||
<%= submit_tag l(:button_create) %>
|
|
||||||
<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
|
|
||||||
<% if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
<%= preview_link({:controller => 'glossary', :action => 'preview', :project_id => @project.id },
|
|
||||||
"term-form",
|
|
||||||
"preview") %>
|
|
||||||
<% else %>
|
|
||||||
<%= link_to_remote l(:label_preview),
|
|
||||||
{ :url => { :controller => 'glossary', :action => 'preview', :project_id => @project },
|
|
||||||
:method => 'post',
|
|
||||||
:update => 'preview',
|
|
||||||
:with => "Form.serialize('term-form')",
|
|
||||||
:complete => "Element.scrollTo('preview')"
|
|
||||||
}, :accesskey => accesskey(:preview) %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
|
|
||||||
<div id="preview" class="wiki"></div>
|
|
||||||
|
|
||||||
<% html_title(l(:glossary_title)) -%>
|
|
|
@ -1,29 +0,0 @@
|
||||||
<div class="contextual">
|
|
||||||
<%= link_to_if_authorized(l(:button_edit), {:controller => 'glossary', :action => 'edit', :project_id => @project, :id => @term}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
|
|
||||||
<%= link_to_if_authorized l(:button_delete), {:controller => 'glossary', :action => 'destroy', :project_id => @project, :id => @term}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h2><%= l(:label_term) %> #<%= @term.id %></h2>
|
|
||||||
|
|
||||||
<div class="term" >
|
|
||||||
|
|
||||||
<h3><%=h @term.name %> </h3>
|
|
||||||
<%= render(:partial => "glossary/show_one", :object => @term) %>
|
|
||||||
|
|
||||||
<p class="author">
|
|
||||||
<%= authoring @term.created_on, @term.author %>.
|
|
||||||
<% if @term.created_on != @term.updated_on
|
|
||||||
if (@term.author_id == @term.updater_id) %>
|
|
||||||
<%= l(:label_updated_time, time_tag(@term.updated_on)).html_safe + '.' %>
|
|
||||||
<% else %>
|
|
||||||
<%= updated_by(@term.updated_on, @term.updater) + '.' %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<%= render :partial => 'glossary/view_term' %>
|
|
||||||
|
|
||||||
<% html_title "##{@term.id}: #{@term.name}" -%>
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
<div class="box">
|
||||||
|
<p><%= form.text_field :name, size: 60, required: true %></p>
|
||||||
|
</div>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<h2><%=l :label_glossary_category %> $<%= @category.id %></h2>
|
||||||
|
|
||||||
|
<%= labelled_form_for :glossary_category, @category,
|
||||||
|
url: project_glossary_category_path do |f| %>
|
||||||
|
<%= render partial: 'glossary_categories/form', locals: {form: f} %>
|
||||||
|
<%= f.submit l(:button_edit) %>
|
||||||
|
<% end %>
|
|
@ -0,0 +1,43 @@
|
||||||
|
<h2><%=l :label_glossary_categories %></h2>
|
||||||
|
|
||||||
|
<div class="contextual">
|
||||||
|
<%= link_to_if_authorized l(:label_glossary_category_new),
|
||||||
|
{ controller: :glossary_categories, action: :new, project_id: @project },
|
||||||
|
class: 'icon icon-add' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render partial: 'glossary_terms/sidebar' %>
|
||||||
|
|
||||||
|
<table class="list table-sortable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th><%=l :field_name %></th>
|
||||||
|
<th/>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @categories.each do |category| %>
|
||||||
|
<tr>
|
||||||
|
<td class="id"><%= category.id %></td>
|
||||||
|
<td class="name"><%= link_to category.name, [@project, category] %></td>
|
||||||
|
<td class="buttons">
|
||||||
|
<%= reorder_handle(category, url: project_glossary_category_path(@project, category)) %>
|
||||||
|
<%= link_to_if_authorized l(:button_edit), {
|
||||||
|
controller: :glossary_categories, action: :edit, id: category,
|
||||||
|
project_id: @project
|
||||||
|
}, class: 'icon icon-edit' %>
|
||||||
|
<%= link_to_if_authorized l(:button_delete), {
|
||||||
|
controller: :glossary_categories, action: :destroy, id: category,
|
||||||
|
project_id: @project
|
||||||
|
}, method: :delete, data: {confirm: l(:text_are_you_sure)},
|
||||||
|
class: 'icon icon-del' %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%= javascript_tag do %>
|
||||||
|
$(function() { $("table.table-sortable tbody").positionedItems(); });
|
||||||
|
<% end %>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<h2><%=l :label_glossary_category_new %></h2>
|
||||||
|
|
||||||
|
<%= labelled_form_for :glossary_category, @category,
|
||||||
|
url: project_glossary_categories_path do |f| %>
|
||||||
|
<%= render partial: 'glossary_categories/form', locals: {form: f} %>
|
||||||
|
<%= f.submit l(:button_create) %>
|
||||||
|
<% end %>
|
|
@ -0,0 +1,17 @@
|
||||||
|
<div class="contextual">
|
||||||
|
<%= link_to_if_authorized l(:button_edit),
|
||||||
|
{ controller: :glossary_categories, action: :edit, project_id: @project },
|
||||||
|
class: 'icon icon-edit' %>
|
||||||
|
<%= link_to_if_authorized l(:button_delete),
|
||||||
|
{ controller: :glossary_categories, action: :destroy,
|
||||||
|
id: @category, project_id: @project },
|
||||||
|
method: :delete, data: {confirm: l(:text_are_you_sure)}, class: 'icon icon-del' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render partial: 'glossary_terms/sidebar' %>
|
||||||
|
|
||||||
|
<h2><%=l :label_glossary_category %> #<%=@category.id %></h2>
|
||||||
|
|
||||||
|
<h3><%= @category.name %></h3>
|
||||||
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
|
|
||||||
<% urlopts = {:controller => 'glossary_styles', :action => 'edit',
|
|
||||||
:project_id => @project,
|
|
||||||
:glossary_style_id => @glossary_style.id}
|
|
||||||
add_search_params(urlopts)
|
|
||||||
form = form_for @glossary_style, :url => urlopts do |f| %>
|
|
||||||
|
|
||||||
|
|
||||||
<%=h l(:label_project) %>
|
|
||||||
<%=
|
|
||||||
options = []
|
|
||||||
options << [l(:label_glossary_style_project_current), GlossaryStyle::ProjectCurrent]
|
|
||||||
options << [l(:label_glossary_style_project_mine), GlossaryStyle::ProjectMine] if User.current.logged?
|
|
||||||
options << [l(:label_glossary_style_project_all), GlossaryStyle::ProjectAll]
|
|
||||||
f.select('project_scope', options)
|
|
||||||
%>
|
|
||||||
|
|
||||||
|
|
||||||
<fieldset id="grouping"><legend><%= l(:label_grouping) %></legend>
|
|
||||||
<% group_labels = [:label_none, :field_category, :label_project] %>
|
|
||||||
<% for gby in [GlossaryStyle::GroupByNone,
|
|
||||||
GlossaryStyle::GroupByCategory,
|
|
||||||
GlossaryStyle::GroupByProject] %>
|
|
||||||
<label><%= f.radio_button('groupby', gby,
|
|
||||||
{ :checked => (gby == @glossary_style.groupby ) } ) %>
|
|
||||||
<%= l(group_labels[gby]) %></label>
|
|
||||||
<% end %>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
|
|
||||||
<fieldset id="sort"><legend><%= l(:label_sort) %></legend>
|
|
||||||
<% for cnt in 0...2 %>
|
|
||||||
<%= cnt+1 %> : <%= params_select(f, "sort_item_#{cnt}", default_sort_params) %><br />
|
|
||||||
<% end %>
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
|
|
||||||
<label id="show_desc"> <%= f.check_box "show_desc" %> <%= l(:label_glossary_style_show_desc) %> </label>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<%= submit_tag l(:label_view) %>
|
|
||||||
<%= submit_tag l(:button_clear), :name => 'clear' %>
|
|
||||||
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
|
@ -1,46 +0,0 @@
|
||||||
|
|
||||||
<% form = form_tag({:controller => 'glossary_styles', :action => 'search', :project_id => @project},
|
|
||||||
{:method => 'get', :id=>'search_form'}
|
|
||||||
) do %>
|
|
||||||
<%= hidden_field_tag 'project_id', @project.id.to_s %>
|
|
||||||
<div id="glossary_search" class="hide-when-print">
|
|
||||||
<fieldset id="filters" class="collapsible <%= (glossary_searching?) ? "" : "collapsed" %>">
|
|
||||||
<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
|
|
||||||
<div style="<%= (glossary_searching?) ? '' : 'display: none;' %>">
|
|
||||||
|
|
||||||
<table id="glossary_search_params">
|
|
||||||
|
|
||||||
<tr><th><%=h l(:label_search) %></th>
|
|
||||||
<td>
|
|
||||||
<%= text_field_tag("search_str", params[:search_str]) %>
|
|
||||||
</td></tr>
|
|
||||||
|
|
||||||
<tr><th><%=h l(:field_category) %></th>
|
|
||||||
<td>
|
|
||||||
<%=
|
|
||||||
select_tag(:search_category,
|
|
||||||
options_for_select(seach_category_options(@glossary_style.project_scope, @project),
|
|
||||||
params[:search_category]),
|
|
||||||
{:include_blank => true})
|
|
||||||
%>
|
|
||||||
</td></tr>
|
|
||||||
|
|
||||||
<tr><th><%=h l(:label_latest) %></th>
|
|
||||||
<td>
|
|
||||||
<%= text_field_tag("latest_days", params[:latest_days], :size=>'10') %>
|
|
||||||
<%=h l(:label_indays) %>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<%= submit_tag l(:label_search) %>
|
|
||||||
<%= submit_tag l(:button_clear), :name => 'search_clear' %>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
<h2>GlossaryStyles#edit</h2>
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
<div class="box tabular">
|
||||||
|
<p><%= form.text_field :name, size: 80, required: true %></p>
|
||||||
|
<p><%= form.text_field :name_en, size: 80 %></p>
|
||||||
|
<p><%= form.text_field :rubi, size: 80 %></p>
|
||||||
|
<p><%= form.text_field :abbr_whole, size: 80 %></p>
|
||||||
|
<p><%= form.text_field :datatype, size: 80 %></p>
|
||||||
|
<p><%= form.text_field :codename, size: 80 %></p>
|
||||||
|
<p><%= form.select :category_id, GlossaryCategory.pluck(:name, :id), include_blank: true %></p>
|
||||||
|
<p><%= form.text_area :description, rows: 10, class: 'wiki-edit', required: false %></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<p>
|
||||||
|
<label><%=l :label_attachment_plural %></label>
|
||||||
|
<%= render partial: 'attachments/form' %>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= wikitoolbar_for 'glossary_term_description' %>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<table class="list">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th><%=l :field_name %></th>
|
||||||
|
<th><%=l :field_category %></th>
|
||||||
|
<th><%=l :field_description %></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% terms.each do |term| %>
|
||||||
|
<tr>
|
||||||
|
<td class="id">
|
||||||
|
<%= term.id %>
|
||||||
|
</td>
|
||||||
|
<td class="name">
|
||||||
|
<%= link_to term.name, [@project, term] %>
|
||||||
|
</td>
|
||||||
|
<td class="roles">
|
||||||
|
<%= term.category.try!(:name) %>
|
||||||
|
</td>
|
||||||
|
<td class="description">
|
||||||
|
<%= term.description %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
|
@ -0,0 +1,61 @@
|
||||||
|
<% content_for :sidebar do %>
|
||||||
|
<h3><%=l :label_view %></h3>
|
||||||
|
|
||||||
|
<%= form_with url: project_glossary_terms_path, method: :get, local: true do |form| %>
|
||||||
|
<fieldset>
|
||||||
|
<legend><%=l :label_grouping %></legend>
|
||||||
|
<%= form.radio_button :grouping, 1, checked: @grouping == '1' ? 'checked' : nil %>
|
||||||
|
<%= form.label :grouping, l(:label_categorized), vaule: 1 %>
|
||||||
|
<%= form.radio_button :grouping, 0, checked: @grouping == '0' ? 'checked' : nil %>
|
||||||
|
<%= form.label :grouping, l(:label_not_categorized), value: 0 %>
|
||||||
|
</fieldset>
|
||||||
|
<%= form.submit l(:label_view) %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<h3><%=l :label_glossary_term %></h3>
|
||||||
|
<p><%= link_to_if_authorized l(:label_glossary_term_new),
|
||||||
|
{ controller: :glossary_terms, action: :new, project_id: @project },
|
||||||
|
class: 'icon icon-add' %></p>
|
||||||
|
|
||||||
|
<fieldset class="collapsible collapsed">
|
||||||
|
<legend onclick="toggleFieldset(this);" class="icon icon-collapsed">
|
||||||
|
<%=l :label_glossary_term_import_csv %>
|
||||||
|
</legend>
|
||||||
|
<div style="display: none;">
|
||||||
|
<%= form_with url: import_project_glossary_terms_path, method: :post, local: true do |form| %>
|
||||||
|
<%= form.file_field :file %>
|
||||||
|
<%= form.submit l(:label_import) %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<h3><%=l :label_glossary_category %></h3>
|
||||||
|
<p><%= link_to_if_authorized l(:label_glossary_category_new),
|
||||||
|
{ controller: :glossary_categories, action: :new, project_id: @project},
|
||||||
|
class: 'icon icon-add' %></p>
|
||||||
|
|
||||||
|
<p><%= link_to l(:label_glossary_categories),
|
||||||
|
project_glossary_categories_path %></p>
|
||||||
|
|
||||||
|
<h3><%=l :label_glossary_index %></h3>
|
||||||
|
<table>
|
||||||
|
<% l(:index_en).each_line do |line| %>
|
||||||
|
<tr>
|
||||||
|
<% line.split(" ").each do |ch| %>
|
||||||
|
<td><%= link_to ch, project_glossary_terms_path(index: ch) %></td>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</table>
|
||||||
|
<table>
|
||||||
|
<% l(:index_rubi).each_line do |line| %>
|
||||||
|
<tr>
|
||||||
|
<% line.split(" ").each do |char| %>
|
||||||
|
<td>
|
||||||
|
<%= link_to char, project_glossary_terms_path(index_rubi: char) %>
|
||||||
|
</td>
|
||||||
|
<% end %>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</table>
|
||||||
|
<% end %>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<h2><%=l :label_glossary_term %> #<%= @term.id %></h2>
|
||||||
|
|
||||||
|
<%= labelled_form_for :glossary_term, @term, url: project_glossary_term_path, html: {multipart: true, id: 'term-form'} do |f| %>
|
||||||
|
<%= render partial: 'glossary_terms/form', locals: {form: f} %>
|
||||||
|
<%= f.submit l(:button_edit) %>
|
||||||
|
<% end %>
|
|
@ -0,0 +1,19 @@
|
||||||
|
require 'csv'
|
||||||
|
|
||||||
|
CSV.generate(row_sep: "\r\n", encoding: "CP932") do |csv|
|
||||||
|
column_names = ["name", "name_en", "category", "datatype", "codename", "description", "rubi", "abbr_whole"]
|
||||||
|
csv << column_names
|
||||||
|
@glossary_terms.each do |term|
|
||||||
|
column_values = [
|
||||||
|
term.name,
|
||||||
|
term.name_en,
|
||||||
|
term.category&.name,
|
||||||
|
term.datatype,
|
||||||
|
term.codename,
|
||||||
|
term.description,
|
||||||
|
term.rubi,
|
||||||
|
term.abbr_whole
|
||||||
|
]
|
||||||
|
csv << column_values
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,28 @@
|
||||||
|
<h2><%=l :label_glossary_terms %></h2>
|
||||||
|
|
||||||
|
<div class="contextual">
|
||||||
|
<%= link_to_if_authorized l(:label_glossary_term_new),
|
||||||
|
{ controller: :glossary_terms, action: :new, project_id: @project },
|
||||||
|
class: 'icon icon-add' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render partial: 'sidebar' %>
|
||||||
|
|
||||||
|
<% if @grouping == '1' %>
|
||||||
|
<% categorized_terms = @glossary_terms.reject { |t| t.category_id.nil? } %>
|
||||||
|
<% uncategorized_terms = @glossary_terms.where(category_id: nil) %>
|
||||||
|
|
||||||
|
<% categorized_terms.group_by(&:category).each do |category, terms| %>
|
||||||
|
<h3><%= category.name %></h3>
|
||||||
|
<%= render partial: 'index_terms', locals: {terms: terms} %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<h3><%=l :label_not_categorized %></h3>
|
||||||
|
<%= render 'index_terms', terms: uncategorized_terms %>
|
||||||
|
<% else %>
|
||||||
|
<%= render 'index_terms', terms: @glossary_terms %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% other_formats_links do |f| %>
|
||||||
|
<%= f.link_to_with_query_parameters 'CSV' %>
|
||||||
|
<% end %>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<h2><%=l :label_glossary_term_new %></h2>
|
||||||
|
|
||||||
|
<%= labelled_form_for :glossary_term, @term,
|
||||||
|
url: project_glossary_terms_path, html: {multipart: true, id: 'term-form'} do |f| %>
|
||||||
|
<%= render partial: 'glossary_terms/form', locals: {form: f} %>
|
||||||
|
<%= f.submit l(:button_create) %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div id="preview" class="wiki"></div>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
<% content_for :header_tags do %>
|
||||||
|
<%= stylesheet_link_tag 'glossary', plugin: 'redmine_glossary' %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="contextual">
|
||||||
|
<%= link_to_if_authorized l(:button_edit),
|
||||||
|
{ controller: :glossary_terms, action: :edit, project_id: @project },
|
||||||
|
class: 'icon icon-edit' %>
|
||||||
|
<%= link_to_if_authorized l(:button_delete),
|
||||||
|
{ controller: :glossary_terms, action: :destroy,
|
||||||
|
id: @term, project_id: @project },
|
||||||
|
method: :delete, data: {confirm: l(:text_are_you_sure)}, class: 'icon icon-del' %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render partial: 'sidebar' %>
|
||||||
|
|
||||||
|
<h2><%=l :label_glossary_term %> #<%= @term.id %></h2>
|
||||||
|
|
||||||
|
<h3><%= @term.name %></h3>
|
||||||
|
|
||||||
|
<table class="term">
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_name_en %>:</th>
|
||||||
|
<td><%= @term.name_en %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_rubi %>:</th>
|
||||||
|
<td><%= @term.rubi %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_abbr_whole %>:</th>
|
||||||
|
<td><%= @term.abbr_whole %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_datatype %>:</th>
|
||||||
|
<td><%= @term.datatype %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_codename %>:</th>
|
||||||
|
<td><%= @term.codename %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_category %>:</th>
|
||||||
|
<td><%= @term.category.try!(:name) %>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_description %>:</th>
|
||||||
|
<td><div class="wiki"><%= textilizable @term, :description %></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_created_on %>:</th>
|
||||||
|
<td><%= format_time(@term.created_at) %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th><%=l :field_updated_on %>:</th>
|
||||||
|
<td><%= format_time(@term.updated_at) %></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<%= render partial: 'attachments/links',
|
||||||
|
locals: {attachments: @term.attachments,
|
||||||
|
options: {deletable: User.current.allowed_to?(:manage_glossary_terms, @project)}
|
||||||
|
}%>
|
|
@ -1,12 +0,0 @@
|
||||||
|
|
||||||
<h2> <%= t('label_hide_item') %> </h2>
|
|
||||||
<table>
|
|
||||||
<% for item in Term.hidable_params %>
|
|
||||||
<% name = "hide_item_#{item}" %>
|
|
||||||
<tr><td>
|
|
||||||
<%= check_box_tag("settings[#{name}]", 1, @settings[name]) %>
|
|
||||||
</td><td>
|
|
||||||
<%= t("label.#{item}") %>
|
|
||||||
</td><tr>
|
|
||||||
<% end %>
|
|
||||||
</table>
|
|
|
@ -1,5 +0,0 @@
|
||||||
<%= error_messages_for 'category' %>
|
|
||||||
|
|
||||||
<div class="box">
|
|
||||||
<p><%= f.text_field :name, :size => 30, :required => true %></p>
|
|
||||||
</div>
|
|
|
@ -1,19 +0,0 @@
|
||||||
<h2><%=l(:label_term_category)%>: <%=h @category.name %></h2>
|
|
||||||
|
|
||||||
<% form = form_tag({}) do %>
|
|
||||||
<div class="box">
|
|
||||||
<p><strong><%= l(:text_term_category_destroy_question, :value => @term_count) %></strong></p>
|
|
||||||
<p><label><%= radio_button_tag 'todo', 'nullify', true %> <%= l(:text_term_category_destroy_assignments) %></label><br />
|
|
||||||
<% if @categories.size > 0 %>
|
|
||||||
<label><%= radio_button_tag 'todo', 'reassign', false %> <%= l(:text_term_category_reassign_to) %></label>:
|
|
||||||
<%= select_tag 'reassign_to_id', options_from_collection_for_select(@categories, 'id', 'name') %></p>
|
|
||||||
<% end %>
|
|
||||||
<%= hidden_field_tag 'id', @category.id %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%= submit_tag l(:button_apply) %>
|
|
||||||
<%= link_to l(:button_cancel), :controller => 'term_categories', :action => 'index', :project_id => @project %>
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
|
|
||||||
<% html_title(l(:glossary_title)) -%>
|
|
|
@ -1,9 +0,0 @@
|
||||||
<h2><%=l(:label_term_category)%></h2>
|
|
||||||
|
|
||||||
<% form = labelled_form_for @category, :as => :category, :url => { :action => 'edit', :project_id => @project, :id => @category }, :html => {:class => 'tabular'} do |f| %>
|
|
||||||
<%= render :partial => 'term_categories/form', :locals => { :f => f } %>
|
|
||||||
<%= submit_tag l(:button_save) %>
|
|
||||||
<% end %>
|
|
||||||
<%= form if Rails::VERSION::MAJOR >= 3 %>
|
|
||||||
|
|
||||||
<% html_title(l(:glossary_title)) -%>
|
|
|
@ -1,44 +0,0 @@
|
||||||
<div class="contextual">
|
|
||||||
<%= link_to_if_authorized(l(:label_term_category_new), {:controller => 'glossary', :action => 'add_term_category', :project_id => @project}, :class => 'icon icon-add') %>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<h2><%= l(:label_term_category) %></h2>
|
|
||||||
|
|
||||||
<% if @categories.any? %>
|
|
||||||
<table class="list">
|
|
||||||
<thead>
|
|
||||||
<th style="text-align:left">#</th>
|
|
||||||
<th style="text-align:left"><%= l(:field_name) %></th>
|
|
||||||
<th style="text-align:left"><%= l(:field_term_counts_under_category) %></th>
|
|
||||||
<th style="text-align:left;width:100px"></th>
|
|
||||||
<th style="text-align:left;width:40px"></th>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<% for category in @categories %>
|
|
||||||
<% unless category.new_record? %>
|
|
||||||
<tr class="<%= cycle 'odd', 'even' %>">
|
|
||||||
<td><%=category.position%></td>
|
|
||||||
<td><%=h(category.name) %></td>
|
|
||||||
<td><%=h(category.terms.size) %></td>
|
|
||||||
<td align="center">
|
|
||||||
<% if authorize_for("term_categories", "edit") %>
|
|
||||||
<%= link_to image_tag('2uparrow.png', :alt => l(:label_sort_highest)), {:controller => 'term_categories', :action => 'change_order', :project_id => @project, :id => category, :position => 'highest'}, :method => :post, :title => l(:label_sort_highest) %>
|
|
||||||
<%= link_to image_tag('1uparrow.png', :alt => l(:label_sort_higher)), {:controller => 'term_categories', :action => 'change_order', :project_id => @project, :id => category, :position => 'higher'}, :method => :post, :title => l(:label_sort_higher) %> -
|
|
||||||
<%= link_to image_tag('1downarrow.png', :alt => l(:label_sort_lower)), {:controller => 'term_categories', :action => 'change_order', :project_id => @project, :id => category, :position => 'lower'}, :method => :post, :title => l(:label_sort_lower) %>
|
|
||||||
<%= link_to image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), {:controller => 'term_categories', :action => 'change_order', :project_id => @project, :id => category, :position => 'lowest'}, :method => :post, :title => l(:label_sort_lowest) %>
|
|
||||||
<% end %>
|
|
||||||
</td>
|
|
||||||
<td align="right">
|
|
||||||
<%= link_to_if_authorized(image_tag('edit.png'), { :action => 'edit', :controller => 'term_categories', :project_id => @project, :id => category }, :title => l(:button_edit)) %>
|
|
||||||
<%= link_to_if_authorized(image_tag('delete.png'), {:action => 'destroy', :controller => 'term_categories', :project_id => @project, :id => category}, :method => :post, :title => l(:button_delete)) %></td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<% else %>
|
|
||||||
<p class="nodata"><%= l(:label_no_data) %></p>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<%= render :partial => 'glossary/view_term' %>
|
|
Binary file not shown.
Before Width: | Height: | Size: 412 B |
|
@ -1,4 +1,4 @@
|
||||||
|
table.term th {
|
||||||
table.term_items th { text-align:right;vertical-align=top }
|
text-align: right;
|
||||||
table.list th { text-align:left }
|
vertical-align: top;
|
||||||
table.list td { text-align:left }
|
}
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
.jstb_termlink {
|
|
||||||
background-image: url('../images/termlink.png');
|
|
||||||
}
|
|
|
@ -1,104 +0,0 @@
|
||||||
# German strings go here for Rails i18n
|
|
||||||
# Initial version: 2011/09/08
|
|
||||||
# Author: Frank Holznagel
|
|
||||||
de:
|
|
||||||
project_module_glossary: Glossar
|
|
||||||
permission_view_terms: Glossar anzeigen
|
|
||||||
permission_manage_terms: Glossar bearbeiten
|
|
||||||
permission_manage_term_categories: Glossarkategorien bearbeiten
|
|
||||||
|
|
||||||
glossary_title: Glossar
|
|
||||||
label:
|
|
||||||
id: Nr.
|
|
||||||
name: Begriff
|
|
||||||
name_en: Englisch
|
|
||||||
category: Kategorie
|
|
||||||
datatype: "Datentyp im Programmcode"
|
|
||||||
codename: "Abkürzung im Programmcode"
|
|
||||||
description: Beschreibung
|
|
||||||
rubi: Ruby
|
|
||||||
abbr_whole: "Ausgeschriebener Begriff (bei Abkürzungen)"
|
|
||||||
label_updater: Updater
|
|
||||||
label_term_plural: Glossare
|
|
||||||
|
|
||||||
label_manage: Verwalten
|
|
||||||
label_manage_term_category: Kategorien verwalten
|
|
||||||
label_not_categorized: ohne Zuordnung
|
|
||||||
|
|
||||||
label_view: Ansicht
|
|
||||||
label_style: Stil
|
|
||||||
|
|
||||||
label_term: Begriff
|
|
||||||
label_term_new: Neuer Begriff
|
|
||||||
label_index: Listenansicht
|
|
||||||
|
|
||||||
label_grouping: Gruppierung
|
|
||||||
label_glossary_style_show_desc: Beschreibungen anzeigen
|
|
||||||
label_glossary_style_all_project: Alle Projekte
|
|
||||||
|
|
||||||
label_glossary_style_project_current: Aktuelles
|
|
||||||
label_glossary_style_project_mine: Meine
|
|
||||||
label_glossary_style_project_all: Alle
|
|
||||||
|
|
||||||
label_latest: Letzte
|
|
||||||
label_indays: Tage
|
|
||||||
|
|
||||||
label_glossary_style_index: Index
|
|
||||||
|
|
||||||
label_import: Importieren
|
|
||||||
label_glossary_import_csv: Aus einer CSV-Datei importieren
|
|
||||||
label_csv_file: CSV-Datei
|
|
||||||
label_csv_import_is_first_comment: die erste Zeile der Datei beim Einlesen ignorieren
|
|
||||||
label_import_items: Elemente zu Spalten zuordnen
|
|
||||||
label_item: Element
|
|
||||||
label_column: Spalte
|
|
||||||
message_import_item: Als Projekt und Benutzer für die importierten Begriffe werden die aktuellen Einstellungen verwendet.
|
|
||||||
label_csv_import_finished: Der CSV-Datenimport wurde erfolgreich beendet
|
|
||||||
error_import_failed: Konnte den CSV-Datenimport nicht ausführen
|
|
||||||
label_create_category_num: Anzahl der neu erstellten Kategorien
|
|
||||||
label_create_term_num: Anzahl der neu erstellten Begriffe
|
|
||||||
label_update_term_num: Anzahl der aktualisierten Begriffe
|
|
||||||
label_file_encoding: Zeichensatz der Datei (File encoding)
|
|
||||||
label_movement_project: Zielprojekt für das Verschieben
|
|
||||||
label_move_all_terms: Alle Begriffe verschieben
|
|
||||||
|
|
||||||
label_term_category: Begriffskategorie
|
|
||||||
label_term_category_new: Neue Kategorie
|
|
||||||
|
|
||||||
field_term_counts_under_category: Anzahl der Begriffe
|
|
||||||
|
|
||||||
text_term_category_destroy_question: Dieser Kategorie sind (@{value}) Begriffe zugeordnet. Was wollen sie tun?
|
|
||||||
text_term_category_destroy_assignments: Kategoriezuordnung entfernen
|
|
||||||
text_term_category_reassign_to: Kategoriezuordnung ändern zu
|
|
||||||
|
|
||||||
label_hide_item: Verstecke folgende Elemente
|
|
||||||
label_tag_termlink: Link zu einem Begriff
|
|
||||||
|
|
||||||
notice_glossary_style_create_f: Konnte die Stil-Daten des Glossars nicht anlegen
|
|
||||||
|
|
||||||
error_term_macro_arg: Das Makro "term" benötigt entweder ein oder zwei Argumente (den Glossar-Begriff und optional die ID des Projekts)
|
|
||||||
error_termno_macro_arg: Das Makro "termno" benötigt genau ein Argument."
|
|
||||||
error_term_not_found_id: "\"%s\": Keinen Begriff mit dieser Nummer gefunden."
|
|
||||||
error_term_not_found_name: "\"%s\": Keinen Begriff mit diesem Namen gefunden."
|
|
||||||
error_term_not_found_name_project: "\"%s\": Keinen Begriff mit diesem Namen im Projekt \"%s\" gefunden."
|
|
||||||
error_project_not_found: "\"%s\": Kein Projekt unter diesem Namen gefunden."
|
|
||||||
error_to_number: Ungültige Zahl. --- %s
|
|
||||||
|
|
||||||
error_csv_import_row: " Zeile : %d"
|
|
||||||
error_import_no_name: "\"%s\" ist unbekannt."
|
|
||||||
error_create_term_category: Konnte eine Begriffskategorie nicht speichern.
|
|
||||||
error_create_term: Konnte einen Begriff nicht speichern.
|
|
||||||
error_file_none: Dateiname fehlt.
|
|
||||||
error_no_movement_project: Kein Zielprojekt für das Verschieben der Begriffe.
|
|
||||||
|
|
||||||
index_ary_en_sep_cnt: 6
|
|
||||||
index_ary_en: [A, B, C, D, E, F,
|
|
||||||
G, H, I, J, K, L,
|
|
||||||
M, N, O, P, Q, R,
|
|
||||||
S, T, U, V, W, X,
|
|
||||||
Y, Z]
|
|
||||||
index_ary_sep_cnt: 0
|
|
||||||
index_ary: []
|
|
||||||
index_subary: []
|
|
||||||
|
|
||||||
in_encoding_candidates: []
|
|
|
@ -1,103 +1,40 @@
|
||||||
# English strings go here for Rails i18n
|
# English strings go here for Rails i18n
|
||||||
en:
|
en:
|
||||||
project_module_glossary: Glossary
|
label_glossary_terms: "Glossary terms"
|
||||||
permission_view_terms: View Glossary
|
label_glossary_term: "Glossary term"
|
||||||
permission_manage_terms: Manage Glossary
|
label_glossary_term_new: "New glossary term"
|
||||||
permission_manage_term_categories: Manage Term Categories
|
label_glossary_term_import_csv: "Import from CSV"
|
||||||
|
label_glossary_categories: "Glossary categories"
|
||||||
|
label_glossary_category: "Glossary category"
|
||||||
|
label_glossary_category_new: "New glossary category"
|
||||||
|
|
||||||
glossary_title: Glossary
|
glossary_title: Glossary
|
||||||
label:
|
project_module_glossary: Glossary
|
||||||
id: No.
|
|
||||||
name: Term
|
|
||||||
name_en: English
|
|
||||||
category: Category
|
|
||||||
datatype: "Data type for coding"
|
|
||||||
codename: "Abbreviation for coding"
|
|
||||||
description: Description
|
|
||||||
rubi: Ruby
|
|
||||||
abbr_whole: Whole word for Abbreviation
|
|
||||||
label_updater: Updater
|
|
||||||
label_term_plural: Glossary
|
|
||||||
|
|
||||||
label_manage: Manage
|
|
||||||
label_manage_term_category: Manage category
|
|
||||||
label_not_categorized: Not categorized
|
|
||||||
|
|
||||||
label_view: View
|
label_view: View
|
||||||
label_style: Style
|
|
||||||
|
|
||||||
label_term: Term
|
|
||||||
label_term_new: New term
|
|
||||||
label_index: List view
|
|
||||||
|
|
||||||
label_grouping: Grouping
|
|
||||||
label_glossary_style_show_desc: Show descriptions
|
|
||||||
label_glossary_style_all_project: All projects
|
|
||||||
|
|
||||||
label_glossary_style_project_current: Current
|
|
||||||
label_glossary_style_project_mine: Mine
|
|
||||||
label_glossary_style_project_all: All
|
|
||||||
|
|
||||||
label_latest: Latest
|
|
||||||
label_indays: Days
|
|
||||||
|
|
||||||
label_glossary_style_index: Index
|
|
||||||
|
|
||||||
label_import: Import
|
label_import: Import
|
||||||
label_glossary_import_csv: Import from CSV
|
label_glossary_index: index
|
||||||
label_csv_file: CSV file
|
label_not_categorized: Not categorized
|
||||||
label_csv_import_is_first_comment: First row is comment line ?
|
label_grouping: Grouping
|
||||||
label_import_items: Import items
|
label_categorized: Categorized
|
||||||
label_item: Item
|
label_glossary_term_plural: Glossary
|
||||||
label_column: Column
|
|
||||||
message_import_item: For the project, creater and so on, the current value is used.
|
|
||||||
label_csv_import_finished: CSV Import finished
|
|
||||||
error_import_failed: Failed to import file.
|
|
||||||
label_create_category_num: The number of create categories
|
|
||||||
label_create_term_num: The number of create terms
|
|
||||||
label_update_term_num: The number of update terms
|
|
||||||
label_file_encoding: File encoding
|
|
||||||
label_movement_project: The movement project
|
|
||||||
label_move_all_terms: Move all terms
|
|
||||||
|
|
||||||
label_term_category: Term category
|
index_en: |
|
||||||
label_term_category_new: New category
|
A B C D E F
|
||||||
|
G H I J K L
|
||||||
|
M N O P Q R
|
||||||
|
S T U V W X
|
||||||
|
Y Z
|
||||||
|
|
||||||
field_term_counts_under_category: Term count
|
index_rubi: |
|
||||||
|
|
||||||
text_term_category_destroy_question: Some term (%{value}) is assigned to this category. What do you want to do ?
|
|
||||||
text_term_category_destroy_assignments: Remove category assignments
|
|
||||||
text_term_category_reassign_to: Reassign term to this category
|
|
||||||
|
|
||||||
label_hide_item: Settings of hidden items
|
permission_view_glossary_terms: View glossary
|
||||||
label_tag_termlink: Link to a term
|
permission_manage_glossary_terms: Manage glossary
|
||||||
|
|
||||||
notice_glossary_style_create_f: Fail to create Glossary Style data
|
field_name_en: English
|
||||||
|
field_abbr_whole: Whole word for Abbreviation
|
||||||
error_term_macro_arg: "\"term\" macro need arguments, 1 or 2."
|
field_datatype: Data type for coding
|
||||||
error_termno_macro_arg: "\"termno\" macro need only one argument."
|
field_codename: Abbreviation for coding
|
||||||
error_term_not_found_id: "\"%s\": No term with such an No."
|
field_rubi: Ruby
|
||||||
error_term_not_found_name: "\"%s\": No term with such a name."
|
|
||||||
error_term_not_found_name_project: "\"%s\": No term with such a name in \"%s\" project."
|
|
||||||
error_project_not_found: "\"%s\": No project of such an identifier."
|
|
||||||
error_to_number: Failed converting to number. --- %s
|
|
||||||
|
|
||||||
error_csv_import_row: " row : %d"
|
|
||||||
error_import_no_name: "\"%s\" isn't descrived."
|
|
||||||
error_create_term_category: Failed to create Term Category.
|
|
||||||
error_create_term: Failed to create Term.
|
|
||||||
error_file_none: No File is specified.
|
|
||||||
error_no_movement_project: There is no project to which a term is moved.
|
|
||||||
|
|
||||||
index_ary_en_sep_cnt: 6
|
|
||||||
index_ary_en: [A, B, C, D, E, F,
|
|
||||||
G, H, I, J, K, L,
|
|
||||||
M, N, O, P, Q, R,
|
|
||||||
S, T, U, V, W, X,
|
|
||||||
Y, Z]
|
|
||||||
index_ary_sep_cnt: 0
|
|
||||||
index_ary: []
|
|
||||||
index_subary: []
|
|
||||||
|
|
||||||
in_encoding_candidates: []
|
|
||||||
|
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
# Spanish strings go here for Rails i18n
|
|
||||||
es:
|
|
||||||
project_module_glossary: Glosario
|
|
||||||
permission_view_terms: Ver Glosario
|
|
||||||
permission_manage_terms: Administrar Glosario
|
|
||||||
permission_manage_term_categories: Administrar Categorías
|
|
||||||
|
|
||||||
glossary_title: Glosario
|
|
||||||
label:
|
|
||||||
id: No.
|
|
||||||
name: Término
|
|
||||||
name_en: En inglés
|
|
||||||
category: Categoría
|
|
||||||
datatype: "Tipo de dato en código"
|
|
||||||
codename: "Abreviatura en código"
|
|
||||||
description: Descripción
|
|
||||||
rubi: Ruby
|
|
||||||
abbr_whole: "Acrónimo de"
|
|
||||||
label_updater: Actualizador
|
|
||||||
label_term_plural: Glosario
|
|
||||||
|
|
||||||
label_manage: Administrar
|
|
||||||
label_manage_term_category: Administrar categorías
|
|
||||||
label_not_categorized: Sin categoría
|
|
||||||
|
|
||||||
label_view: Ver
|
|
||||||
label_style: Estilo
|
|
||||||
|
|
||||||
label_term: Término
|
|
||||||
label_term_new: Nuevo término
|
|
||||||
label_index: Ver lista
|
|
||||||
|
|
||||||
label_grouping: Agrupar
|
|
||||||
label_glossary_style_show_desc: Mostrar descripciones
|
|
||||||
label_glossary_style_all_project: Todos los proyectos
|
|
||||||
|
|
||||||
label_glossary_style_project_current: Actual
|
|
||||||
label_glossary_style_project_mine: Míos
|
|
||||||
label_glossary_style_project_all: Todos
|
|
||||||
|
|
||||||
label_latest: Últimos
|
|
||||||
label_indays: Días
|
|
||||||
|
|
||||||
label_glossary_style_index: Índice
|
|
||||||
|
|
||||||
label_import: Importar
|
|
||||||
label_glossary_import_csv: Importar de CSV
|
|
||||||
label_csv_file: Archivo CSV
|
|
||||||
label_csv_import_is_first_comment: La primera línea tiene comentarios de cabecera
|
|
||||||
label_import_items: Importar ítems
|
|
||||||
label_item: Ítem
|
|
||||||
label_column: Columna
|
|
||||||
message_import_item: Se usará el proyecto y usuario actual para los términos importados.
|
|
||||||
label_csv_import_finished: CSV Import finished
|
|
||||||
error_import_failed: Error al importar archivo.
|
|
||||||
label_create_category_num: Número de categorías creadas
|
|
||||||
label_create_term_num: Número de términos creados
|
|
||||||
label_update_term_num: Número de términos actualizados
|
|
||||||
label_file_encoding: Codificación de archivo
|
|
||||||
label_movement_project: Mover al proyecto
|
|
||||||
label_move_all_terms: Mover todos los términos
|
|
||||||
|
|
||||||
label_term_category: Categorías
|
|
||||||
label_term_category_new: Nueva categoría
|
|
||||||
|
|
||||||
field_term_counts_under_category: Términos
|
|
||||||
|
|
||||||
text_term_category_destroy_question: Algún término (%{value}) está asignado a esta categoría. ¿Qué quiere hacer?
|
|
||||||
text_term_category_destroy_assignments: Eliminar las asignaciones a esta categoria
|
|
||||||
text_term_category_reassign_to: Reasignar término a esta categoría
|
|
||||||
|
|
||||||
label_hide_item: Opciones para ocultar ítems
|
|
||||||
label_tag_termlink: Enlace a un término
|
|
||||||
|
|
||||||
notice_glossary_style_create_f: Error al crear los datos de Estilo del Glosario
|
|
||||||
|
|
||||||
error_term_macro_arg: "La macro \"term\" requiere argumentos, 1 or 2."
|
|
||||||
error_termno_macro_arg: "La macro \"termno\" solo necesita un argumento."
|
|
||||||
error_term_not_found_id: "\"%s\": No hay ningún término con ese número."
|
|
||||||
error_term_not_found_name: "\"%s\": No hay ningún término con ese nombre."
|
|
||||||
error_term_not_found_name_project: "\"%s\": No hay ningún término con ese nombre en el proyecto \"%s\"."
|
|
||||||
error_project_not_found: "\"%s\": No hay ningún proyecto con esa identificación."
|
|
||||||
error_to_number: Fallo convirtiendo a número. --- %s
|
|
||||||
|
|
||||||
error_csv_import_row: " fila : %d"
|
|
||||||
error_import_no_name: "\"%s\" no está descrito."
|
|
||||||
error_create_term_category: Error al crear Categoría de Términos.
|
|
||||||
error_create_term: Error al crear Término.
|
|
||||||
error_file_none: No se ha indicado ningún Archivo.
|
|
||||||
error_no_movement_project: No hay proyecto al que mover los términos.
|
|
||||||
|
|
||||||
index_ary_en_sep_cnt: 6
|
|
||||||
index_ary_en: [A, B, C, D, E, F,
|
|
||||||
G, H, I, J, K, L,
|
|
||||||
M, N, Ñ, O, P, Q,
|
|
||||||
R, S, T, U, V, W,
|
|
||||||
X, Y, Z]
|
|
||||||
index_ary_sep_cnt: 0
|
|
||||||
index_ary: []
|
|
||||||
index_subary: []
|
|
||||||
|
|
||||||
in_encoding_candidates: []
|
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
# Italian strings go here for Rails i18n
|
|
||||||
it:
|
|
||||||
project_module_glossary: Glossario
|
|
||||||
permission_view_terms: Mostra Glossario
|
|
||||||
permission_manage_terms: Gestisci Glossario
|
|
||||||
permission_manage_term_categories: Gestisci Termini Categoria
|
|
||||||
|
|
||||||
glossary_title: Glossario
|
|
||||||
label:
|
|
||||||
id: Nr.
|
|
||||||
name: Termine
|
|
||||||
name_en: Inglese
|
|
||||||
category: Categoria
|
|
||||||
datatype: "Tipo di dato in programmazione"
|
|
||||||
codename: "Abbreviazione per programmazione"
|
|
||||||
description: Descrizione
|
|
||||||
rubi: Ruby
|
|
||||||
abbr_whole: "Parola intera per l'abbreviazione"
|
|
||||||
label_updater: Aggiornamento
|
|
||||||
label_term_plural: Glossari
|
|
||||||
|
|
||||||
label_manage: Gestione
|
|
||||||
label_manage_term_category: Gestisci categoria
|
|
||||||
label_not_categorized: Senza categoria
|
|
||||||
|
|
||||||
label_view: Mostra
|
|
||||||
label_style: Stile
|
|
||||||
|
|
||||||
label_term: Termine
|
|
||||||
label_term_new: Nuovo termine
|
|
||||||
label_index: Elenco
|
|
||||||
|
|
||||||
label_grouping: Raggruppamento
|
|
||||||
label_glossary_style_show_desc: Mostra descrizioni
|
|
||||||
label_glossary_style_all_project: Tutti i progetti
|
|
||||||
|
|
||||||
label_glossary_style_project_current: Currente
|
|
||||||
label_glossary_style_project_mine: Miei
|
|
||||||
label_glossary_style_project_all: Tutti
|
|
||||||
|
|
||||||
label_latest: Ultimo
|
|
||||||
label_indays: Giorni
|
|
||||||
|
|
||||||
label_glossary_style_index: Indice
|
|
||||||
|
|
||||||
label_import: Importa
|
|
||||||
label_glossary_import_csv: Importa da CSV
|
|
||||||
label_csv_file: file CSV
|
|
||||||
label_csv_import_is_first_comment: La prima riga è una linea di commento?
|
|
||||||
label_import_items: Importa elementi
|
|
||||||
label_item: Elemento
|
|
||||||
label_column: Colonna
|
|
||||||
message_import_item: "Per il progetto, l'autore e il resto, viene usato il valore attuale."
|
|
||||||
label_csv_import_finished: Importazione da CSV terminata
|
|
||||||
error_import_failed: Errore in importazione file.
|
|
||||||
label_create_category_num: Il numero di categorie create
|
|
||||||
label_create_term_num: Il numero di termini creati
|
|
||||||
label_update_term_num: Il numero di termini aggiornati
|
|
||||||
label_file_encoding: Codifica del file
|
|
||||||
label_movement_project: Progetto di spostamento
|
|
||||||
label_move_all_terms: Sposta tutti i termini
|
|
||||||
|
|
||||||
label_term_category: Categoria del termine
|
|
||||||
label_term_category_new: Nuova categoria
|
|
||||||
|
|
||||||
field_term_counts_under_category: Numero di termini
|
|
||||||
|
|
||||||
text_term_category_destroy_question: Qualche termine (%{value}) è assegnato a questa categoria. Cosa vuoi fare?
|
|
||||||
text_term_category_destroy_assignments: Rimuovi assegnamenti di categoria
|
|
||||||
text_term_category_reassign_to: Riassegna il termine a questa categoria
|
|
||||||
|
|
||||||
label_hide_item: Impostazione di termini nascosti
|
|
||||||
label_tag_termlink: Collegamento a un termine
|
|
||||||
|
|
||||||
notice_glossary_style_create_f: Errore nella creazione dei dati di Stile del Glossario
|
|
||||||
|
|
||||||
error_term_macro_arg: "\"term\" macro necessita di argomenti, 1 oppure 2."
|
|
||||||
error_termno_macro_arg: "\"termno\" macro usa un solo argomento."
|
|
||||||
error_term_not_found_id: "\"%s\": Nessun termine corrisponde a questo numero."
|
|
||||||
error_term_not_found_name: "\"%s\": Nessun termine ha questo nome."
|
|
||||||
error_term_not_found_name_project: "\"%s\": Nessun termine ha questo nome nel progetto \"%s\"."
|
|
||||||
error_project_not_found: "\"%s\": Nessun progetto a questo identificativo."
|
|
||||||
error_to_number: Errore di conversione numerica. --- %s
|
|
||||||
|
|
||||||
error_csv_import_row: " linea : %d"
|
|
||||||
error_import_no_name: "\"%s\" non è descritto."
|
|
||||||
error_create_term_category: Errore nella creazione di una Categoria di Termini.
|
|
||||||
error_create_term: Errore nella creazione di un Termine.
|
|
||||||
error_file_none: Nessun File specificato.
|
|
||||||
error_no_movement_project: Non esiste un progetto in cui un termine viene spostato.
|
|
||||||
|
|
||||||
index_ary_en_sep_cnt: 6
|
|
||||||
index_ary_en: [A, B, C, D, E, F,
|
|
||||||
G, H, I, J, K, L,
|
|
||||||
M, N, O, P, Q, R,
|
|
||||||
S, T, U, V, W, X,
|
|
||||||
Y, Z]
|
|
||||||
index_ary_sep_cnt: 0
|
|
||||||
index_ary: []
|
|
||||||
index_subary: []
|
|
||||||
|
|
||||||
in_encoding_candidates: []
|
|
||||||
|
|
|
@ -1,121 +1,42 @@
|
||||||
# English strings go here for Rails i18n
|
|
||||||
ja:
|
ja:
|
||||||
project_module_glossary: 用語集
|
label_glossary_terms: "用語集"
|
||||||
permission_view_terms: 用語集の閲覧
|
label_glossary_term: "用語"
|
||||||
permission_manage_terms: 用語集の管理
|
label_glossary_term_new: "用語の作成"
|
||||||
permission_manage_term_categories: 用語のカテゴリの管理
|
label_glossary_term_import_csv: "CSVからインポート"
|
||||||
|
label_glossary_categories: "用語のカテゴリ一覧"
|
||||||
|
label_glossary_category: "用語のカテゴリ"
|
||||||
|
label_glossary_category_new: "カテゴリの作成"
|
||||||
|
|
||||||
glossary_title: 用語集
|
glossary_title: 用語集
|
||||||
label:
|
project_module_glossary: 用語集
|
||||||
name: 用語
|
|
||||||
name_en: 英語名
|
|
||||||
category: カテゴリ
|
|
||||||
datatype: データ型
|
|
||||||
codename: "コーディング用名称例"
|
|
||||||
description: 説明
|
|
||||||
rubi: ふりがな
|
|
||||||
abbr_whole: 略語の展開名称
|
|
||||||
label_updater: 更新者
|
|
||||||
label_term_plural: 用語集
|
|
||||||
|
|
||||||
label_manage: 管理
|
|
||||||
label_manage_term_category: 用語のカテゴリを編集
|
|
||||||
label_not_categorized: 未分類
|
|
||||||
|
|
||||||
label_view: 表示
|
label_view: 表示
|
||||||
label_style: 形式
|
|
||||||
|
|
||||||
label_term: 用語
|
|
||||||
label_term_new: 用語の追加
|
|
||||||
label_index: リスト表示
|
|
||||||
|
|
||||||
label_grouping: グループ化
|
|
||||||
label_glossary_style_show_desc: 説明を表示
|
|
||||||
label_glossary_style_all_project: 全プロジェクト
|
|
||||||
|
|
||||||
label_glossary_style_project_current: カレント
|
|
||||||
label_glossary_style_project_mine: 自分の
|
|
||||||
label_glossary_style_project_all: 全て
|
|
||||||
|
|
||||||
label_latest: 最近
|
|
||||||
label_indays: 日以内
|
|
||||||
|
|
||||||
label_glossary_style_index: 索引
|
|
||||||
|
|
||||||
label_import: インポート
|
label_import: インポート
|
||||||
label_glossary_import_csv: CSV からインポート
|
label_glossary_index: 索引
|
||||||
label_csv_file: CSV ファイル
|
label_not_categorized: 未分類
|
||||||
label_csv_import_is_first_comment: 先頭行はコメント行とみなす ?
|
label_grouping: グループ化
|
||||||
label_import_items: 入力項目
|
label_categorized: カテゴリで分類
|
||||||
label_item: 項目
|
label_glossary_term_plural: 用語集
|
||||||
label_column: 桁
|
|
||||||
message_import_item: プロジェクトや作成者などは現在のものが使用されます。
|
|
||||||
label_csv_import_finished: インポートの完了
|
|
||||||
error_import_failed: インポート中にエラーが発生しました。
|
|
||||||
label_create_category_num: 作成したカテゴリの数
|
|
||||||
label_create_term_num: 作成した用語の数
|
|
||||||
label_update_term_num: 更新した用語の数
|
|
||||||
label_file_encoding: ファイルの文字コード
|
|
||||||
label_movement_project: 移動先のプロジェクト
|
|
||||||
label_move_all_terms: 用語の一括移動
|
|
||||||
|
|
||||||
label_term_category: 用語のカテゴリ
|
index_rubi: |
|
||||||
label_term_category_new: 新しいカテゴリ
|
あ い う え お
|
||||||
|
か き く け こ
|
||||||
|
さ し す せ そ
|
||||||
|
た ち つ て と
|
||||||
|
な に ぬ ね の
|
||||||
|
は ひ ふ へ ほ
|
||||||
|
ま み む め も
|
||||||
|
や ゆ よ
|
||||||
|
ら り る れ ろ
|
||||||
|
わ を ん
|
||||||
|
|
||||||
field_term_counts_under_category: 割り当て用語数
|
|
||||||
|
|
||||||
text_term_category_destroy_question: いくつかの用語 (%{value}) は、このカテゴリに分類されています。どうしましょうか?
|
permission_view_glossary_terms: 用語集の閲覧
|
||||||
text_term_category_destroy_assignments: カテゴリから用語を解除する
|
permission_manage_glossary_terms: 用語集の管理
|
||||||
text_term_category_reassign_to: 用語をこのカテゴリに関連付けする
|
|
||||||
|
|
||||||
label_hide_item: 非表示にする項目の選択
|
field_name_en: 英語名
|
||||||
label_tag_termlink: 用語へのリンク
|
field_abbr_whole: 略語の展開名称
|
||||||
|
field_datatype: データ型
|
||||||
notice_glossary_style_create_f: 表示形式情報の保存に失敗しました。
|
field_codename: コーディング用名称例
|
||||||
|
field_rubi: ふりがな
|
||||||
error_term_macro_arg: "\"term\" マクロは 1 または 2 つの引数を必要とします。"
|
|
||||||
error_termno_macro_arg: "\"termno\" マクロでは引数を一つ指定してください。"
|
|
||||||
error_term_not_found_id: "\"%s\": 指定された番号の用語はありません。"
|
|
||||||
error_term_not_found_name: "\"%s\": 指定された名前の用語はありません。"
|
|
||||||
error_term_not_found_name_project: "プロジェクト \"%2$s\" には \"%1$s\" という名前の用語はありません。"
|
|
||||||
error_project_not_found: "\"%s\": 指定された識別子のプロジェクトはありません。"
|
|
||||||
error_to_number: 数値への変換に失敗しました。 --- %s
|
|
||||||
|
|
||||||
error_csv_import_row: " 行数 : %d"
|
|
||||||
error_import_no_name: "\"%s\" が記述されていません。"
|
|
||||||
error_create_term_category: 用語のカテゴリの作成に失敗しました。
|
|
||||||
error_create_term: 用語の作成に失敗しました。
|
|
||||||
error_file_none: ファイルが指定されていません。
|
|
||||||
error_no_movement_project: 用語を移動可能なプロジェクトがありません。
|
|
||||||
|
|
||||||
index_ary_en_sep_cnt: 6
|
|
||||||
index_ary_en: [A, B, C, D, E, F,
|
|
||||||
G, H, I, J, K, L,
|
|
||||||
M, N, O, P, Q, R,
|
|
||||||
S, T, U, V, W, X,
|
|
||||||
Y, Z]
|
|
||||||
index_ary_sep_cnt: 5
|
|
||||||
index_ary: [あ, い, う, え, お,
|
|
||||||
か, き, く, け, こ,
|
|
||||||
さ, し, す, せ, そ,
|
|
||||||
た, ち, つ, て, と,
|
|
||||||
な, に, ぬ, ね, の,
|
|
||||||
は, ひ, ふ, へ, ほ,
|
|
||||||
ま, み, む, め, も,
|
|
||||||
や, "", ゆ, "", よ,
|
|
||||||
ら, り, る, れ, ろ,
|
|
||||||
わ]
|
|
||||||
index_subary: [ア, イ, ウ, エ, オ,
|
|
||||||
[カ, ガ, が], [キ, ギ, ぎ], [ク, グ, ぐ], [ケ, ゲ, げ], [コ, ゴ, ご],
|
|
||||||
[サ, ザ, ざ], [シ, ジ, じ], [ス, ズ, ず], [セ, ゼ, ぜ], [ソ, ゾ, ぞ],
|
|
||||||
[タ, ダ, だ], [チ, ヂ, じ], [ツ, ヅ, づ], [テ, デ, で], [ト, ド, ど],
|
|
||||||
ナ, ニ, ヌ, ネ, ノ,
|
|
||||||
[ハ, バ, パ, ば, ぱ], [ヒ, ビ, ピ, び, ぴ], [フ, ブ, プ, ぶ, ぷ],
|
|
||||||
[ヘ, ベ, ペ, べ, ぺ], [ホ, ボ, ポ, ぼ, ぽ],
|
|
||||||
マ, ミ, ム, メ, モ,
|
|
||||||
ヤ, "", ユ, "", ヨ,
|
|
||||||
ラ, リ, ル, レ, ロ,
|
|
||||||
ワ]
|
|
||||||
|
|
||||||
in_encoding_candidates: [UTF-8, EUC-JP, SHIFT_JIS, ISO-2022-JP]
|
|
||||||
|
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
# Colocar aqui as cadeias de caracteres para o i18n do Rails
|
|
||||||
pt:
|
|
||||||
project_module_glossary: Glossário
|
|
||||||
permission_view_terms: Ver Glossário
|
|
||||||
permission_manage_terms: Gerir Glossário
|
|
||||||
permission_manage_term_categories: Gerir Categoria dos Termos
|
|
||||||
|
|
||||||
glossary_title: Glossário
|
|
||||||
label:
|
|
||||||
id: N.º
|
|
||||||
name: Termo
|
|
||||||
name_en: Inglês
|
|
||||||
category: Categoria
|
|
||||||
datatype: "Tipo de dados a usar no código"
|
|
||||||
codename: "Abreviatura a usar no código"
|
|
||||||
description: Descrição
|
|
||||||
rubi: Ruby
|
|
||||||
abbr_whole: Palavra completa correspondente à abreviatura
|
|
||||||
label_updater: Actualizador
|
|
||||||
label_term_plural: Glossário
|
|
||||||
|
|
||||||
label_manage: Gerir
|
|
||||||
label_manage_term_category: Gerir categoria
|
|
||||||
label_not_categorized: Por categorizar
|
|
||||||
|
|
||||||
label_view: Ver
|
|
||||||
label_style: Estilo
|
|
||||||
|
|
||||||
label_term: Termo
|
|
||||||
label_term_new: Novo termo
|
|
||||||
label_index: Vista em lista
|
|
||||||
|
|
||||||
label_grouping: Agrupamento
|
|
||||||
label_glossary_style_show_desc: Mostrar descrições
|
|
||||||
label_glossary_style_all_project: Todos os projectos
|
|
||||||
|
|
||||||
label_glossary_style_project_current: Corrente
|
|
||||||
label_glossary_style_project_mine: Meus
|
|
||||||
label_glossary_style_project_all: Todos
|
|
||||||
|
|
||||||
label_latest: Últimos
|
|
||||||
label_indays: Dias
|
|
||||||
|
|
||||||
label_glossary_style_index: Índice
|
|
||||||
|
|
||||||
label_import: Importar
|
|
||||||
label_glossary_import_csv: Importar de CSV
|
|
||||||
label_csv_file: Ficheiro CSV
|
|
||||||
label_csv_import_is_first_comment: A primeira linha é um comentário?
|
|
||||||
label_import_items: Importar itens
|
|
||||||
label_item: Item
|
|
||||||
label_column: Coluna
|
|
||||||
message_import_item: Para o projecto, criador, etc., usa-se o valor corrente.
|
|
||||||
label_csv_import_finished: Importação de CSV terminada
|
|
||||||
error_import_failed: Importação de ficheiro falhou.
|
|
||||||
label_create_category_num: Número de categorias criadas
|
|
||||||
label_create_term_num: Número de termos criados
|
|
||||||
label_update_term_num: Número de termos actualizados
|
|
||||||
label_file_encoding: Codificação do ficheiro
|
|
||||||
label_movement_project: Movimentações no projecto
|
|
||||||
label_move_all_terms: Mover todos os termos
|
|
||||||
|
|
||||||
label_term_category: Categoria do termo
|
|
||||||
label_term_category_new: Nova categoria
|
|
||||||
|
|
||||||
field_term_counts_under_category: Contagem de termos
|
|
||||||
|
|
||||||
text_term_category_destroy_question: Há um termo ({{value}}) com esta categoria. Que deseja que se faça?
|
|
||||||
text_term_category_destroy_assignments: Remover atribuição à categoria
|
|
||||||
text_term_category_reassign_to: Atribuir termo a esta categoria
|
|
||||||
|
|
||||||
label_hide_item: Preferências de atributos escondidos
|
|
||||||
label_tag_termlink: Ligação a um item
|
|
||||||
|
|
||||||
notice_glossary_style_create_f: Criação de dados de Estilo de Glossário falhou
|
|
||||||
|
|
||||||
error_term_macro_arg: "A macro \"term\" precisa de argumentos, 1 ou 2."
|
|
||||||
error_termno_macro_arg: "A macro \"termno\" precisa de exactamente 1 argumento."
|
|
||||||
error_term_not_found_id: "\"%s\": Não há termos com esse n.º."
|
|
||||||
error_term_not_found_name: "\"%s\": Não há termos com esse nome."
|
|
||||||
error_term_not_found_name_project: "\"%s\": Não há termos com esse nome no projecto \"%s\"."
|
|
||||||
error_project_not_found: "\"%s\": Não há qualquer projecto com esse identificador."
|
|
||||||
error_to_number: A conversão em número falhou. --- %s
|
|
||||||
|
|
||||||
error_csv_import_row: " linha : %d"
|
|
||||||
error_import_no_name: "\"%s\" não está descrito."
|
|
||||||
error_create_term_category: Criação de Categoria de Termo falhou.
|
|
||||||
error_create_term: Criação de Termo falhou.
|
|
||||||
error_file_none: Faltou especificar o Ficheiro.
|
|
||||||
error_no_movement_project: Projecto para o qual mover o termo não existe.
|
|
||||||
|
|
||||||
index_ary_en_sep_cnt: 6
|
|
||||||
index_ary_en: [A, B, C, D, E, F,
|
|
||||||
G, H, I, J, K, L,
|
|
||||||
M, N, O, P, Q, R,
|
|
||||||
S, T, U, V, W, X,
|
|
||||||
Y, Z]
|
|
||||||
index_ary_sep_cnt: 0
|
|
||||||
index_ary: []
|
|
||||||
index_subary: []
|
|
||||||
|
|
||||||
in_encoding_candidates: []
|
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
# English strings go here for Rails i18n
|
|
||||||
zh:
|
|
||||||
project_module_glossary: 术语名词
|
|
||||||
permission_view_terms: 查看术语名词
|
|
||||||
permission_manage_terms: 术语名词管理
|
|
||||||
permission_manage_term_categories: 术语名词类别管理
|
|
||||||
|
|
||||||
glossary_title: 术语名词
|
|
||||||
label:
|
|
||||||
id: No.
|
|
||||||
name: 术语名称
|
|
||||||
name_en: 术语英文拼写
|
|
||||||
category: 分类
|
|
||||||
datatype: "编码数据类型"
|
|
||||||
codename: "术语缩写"
|
|
||||||
description: 术语说明
|
|
||||||
rubi: Ruby
|
|
||||||
abbr_whole: 全称
|
|
||||||
label_updater: 更新人
|
|
||||||
label_term_plural: 术语名词
|
|
||||||
|
|
||||||
label_manage: 管理
|
|
||||||
label_manage_term_category: 管理术语类别
|
|
||||||
label_not_categorized: 未分类
|
|
||||||
|
|
||||||
label_view: 视图浏览
|
|
||||||
label_style: 样式
|
|
||||||
|
|
||||||
label_term: 术语
|
|
||||||
label_term_new: 新增术语
|
|
||||||
label_index: 列表显示
|
|
||||||
|
|
||||||
label_grouping: 分组
|
|
||||||
label_glossary_style_show_desc: 是否显示描述
|
|
||||||
label_glossary_style_all_project: 所有项目
|
|
||||||
|
|
||||||
label_glossary_style_project_current: 当前项目
|
|
||||||
label_glossary_style_project_mine: 我的项目
|
|
||||||
label_glossary_style_project_all: 全部项目
|
|
||||||
|
|
||||||
label_latest: 最近
|
|
||||||
label_indays: 天
|
|
||||||
|
|
||||||
label_glossary_style_index: 索引
|
|
||||||
|
|
||||||
label_import: 导入
|
|
||||||
label_glossary_import_csv: 从CSV文件导入
|
|
||||||
label_csv_file: CSV文件
|
|
||||||
label_csv_import_is_first_comment: 第一行是否注释行?
|
|
||||||
label_import_items: 导入配置
|
|
||||||
label_item: 导入项
|
|
||||||
label_column: 对应列
|
|
||||||
message_import_item: 对项目、创建人等,取用当前值。
|
|
||||||
label_csv_import_finished: CSV文件导入完成。
|
|
||||||
error_import_failed: 无法导入文件。
|
|
||||||
label_create_category_num: 类别新建数量
|
|
||||||
label_create_term_num: 属于新建数量
|
|
||||||
label_update_term_num: 术语更新数量
|
|
||||||
label_file_encoding: 文件编码
|
|
||||||
label_movement_project: 目标项目
|
|
||||||
label_move_all_terms: 移动所有术语到新项目
|
|
||||||
|
|
||||||
label_term_category: 术语类别
|
|
||||||
label_term_category_new: 新增术语类别
|
|
||||||
|
|
||||||
field_term_counts_under_category: 术语数量
|
|
||||||
|
|
||||||
text_term_category_destroy_question: 术语(%{value})已配置到当前类别。请选择下一步操作?
|
|
||||||
text_term_category_destroy_assignments: 将当前术语从该类别中移出
|
|
||||||
text_term_category_reassign_to: 重新指定术语所属类别
|
|
||||||
|
|
||||||
label_hide_item: 设置隐藏项
|
|
||||||
label_tag_termlink: 链接到术语
|
|
||||||
|
|
||||||
notice_glossary_style_create_f: 无法创建术语名词样式数据。
|
|
||||||
|
|
||||||
error_term_macro_arg: "\"term\" 宏需提供参数, 1 或 2。"
|
|
||||||
error_termno_macro_arg: "\"termno\" 宏仅需要一个参数。"
|
|
||||||
error_term_not_found_id: "\"%s\": 不存在对应编号的术语。"
|
|
||||||
error_term_not_found_name: "\"%s\": 没有这样名称的术语。"
|
|
||||||
error_term_not_found_name_project: "\"%s\": 在【\"%s\"】项目中,不存在对应名称的术语。"
|
|
||||||
error_project_not_found: "\"%s\": 不存在该标示符对应的项目。"
|
|
||||||
error_to_number: 无法转换位数字类型 --- %s
|
|
||||||
|
|
||||||
error_csv_import_row: " 行 : %d"
|
|
||||||
error_import_no_name: "\"%s\" isn't descrived."
|
|
||||||
error_create_term_category: 无法创建术语类别。
|
|
||||||
error_create_term: 无法创建术语。
|
|
||||||
error_file_none: 未指定文件。
|
|
||||||
error_no_movement_project: 当前无可移动的项目。请在相关项目中开启术语名词模块。
|
|
||||||
|
|
||||||
index_ary_en_sep_cnt: 6
|
|
||||||
index_ary_en: [A, B, C, D, E, F,
|
|
||||||
G, H, I, J, K, L,
|
|
||||||
M, N, O, P, Q, R,
|
|
||||||
S, T, U, V, W, X,
|
|
||||||
Y, Z]
|
|
||||||
index_ary_sep_cnt: 0
|
|
||||||
index_ary: []
|
|
||||||
index_subary: []
|
|
||||||
|
|
||||||
in_encoding_candidates: []
|
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
RedmineApp::Application.routes.draw do
|
# Plugin's routes
|
||||||
match 'glossary_styles/:action', :controller => :glossary_styles, :via => [ :get, :post, :put, :patch ]
|
# See: http://guides.rubyonrails.org/routing.html
|
||||||
|
|
||||||
match 'projects/:project_id/glossary', :to => 'glossary#index', :via => [ :get ]
|
Rails.application.routes.draw do
|
||||||
match 'projects/:project_id/glossary/new', :to => 'glossary#new', :via => [ :get ]
|
resources :projects do
|
||||||
match 'projects/:project_id/glossary/edit', :to => 'glossary#edit', :via => [ :get, :post, :patch ]
|
resources :glossary_terms do
|
||||||
match 'projects/:project_id/glossary/:id/edit', :to => 'glossary#edit', :id => /\d+/, :via => [ :get, :post, :patch ]
|
member do
|
||||||
match 'projects/:project_id/glossary/:id/:action', :controller => :glossary, :id => /\d+/, :via => :all
|
patch 'preview'
|
||||||
match 'projects/:project_id/glossary/:id', :to => 'glossary#show', :id => /\d+/, :via => [ :get ]
|
end
|
||||||
match 'projects/:project_id/glossary/destroy', :to => 'glossary#destroy', :via => [ :delete ]
|
collection do
|
||||||
match 'projects/:project_id/glossary/:action', :controller => :glossary, :via => :all
|
post 'preview'
|
||||||
|
post 'import'
|
||||||
match 'projects/:project_id/term_categories', :to => 'term_categories#index', :via => :all
|
end
|
||||||
match 'projects/:project_id/term_categories/destroy', :to => 'term_categories#destroy', :via => [ :delete ]
|
end
|
||||||
match 'projects/:project_id/term_categories/change_order', :to => 'term_categories#change_order', :via => [ :post ]
|
resources :glossary_categories
|
||||||
match 'projects/:project_id/term_categories/:action', :controller => :term_categories, :via => :all
|
end
|
||||||
match 'projects/:project_id/term_categories/:id/:action', :controller => :term_categories, :id => /\d+/, :via => :all
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreateTerms < ActiveRecord::Migration
|
class CreateTerms < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
# CreateTermCategories
|
# CreateTermCategories
|
||||||
create_table :term_categories, :force => true do |t|
|
create_table :term_categories, :force => true do |t|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreateGlossaryStyles < ActiveRecord::Migration
|
class CreateGlossaryStyles < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
create_table :glossary_styles do |t|
|
create_table :glossary_styles do |t|
|
||||||
t.column :show_desc, :boolean, :default => false
|
t.column :show_desc, :boolean, :default => false
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class TermsAddColumns < ActiveRecord::Migration
|
class TermsAddColumns < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
add_column :terms, :tech_en, :string, :default => ''
|
add_column :terms, :tech_en, :string, :default => ''
|
||||||
add_column :terms, :name_cn, :string, :default => ''
|
add_column :terms, :name_cn, :string, :default => ''
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
class RenameGlossaryTermsFromTerms < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
remove_column :terms, :tech_en, :string
|
||||||
|
remove_column :terms, :name_cn, :string
|
||||||
|
remove_column :terms, :name_fr, :string
|
||||||
|
rename_column :terms, :created_on, :created_at
|
||||||
|
rename_column :terms, :updated_on, :updated_at
|
||||||
|
rename_table :terms, :glossary_terms
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
class RenameGlossaryCategoriesFromTermCategories < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
rename_table :term_categories, :glossary_categories
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
class RenameGlossaryViewSettingsFromGlossaryStyles < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
rename_table :glossary_styles, :glossary_view_settings
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,80 +1,34 @@
|
||||||
require 'redmine'
|
Rails.configuration.to_prepare do
|
||||||
require 'cgi'
|
require_dependency "glossary_macros"
|
||||||
require 'glossary_asset_tag_helper_patch'
|
Redmine::Activity.register :glossary_terms
|
||||||
require 'term_link_helper'
|
Redmine::Search.available_search_types << 'glossary_terms'
|
||||||
require 'csv'
|
|
||||||
FCSV = CSV
|
|
||||||
|
|
||||||
ActionView::Base.class_eval do
|
|
||||||
include ActionView::Helpers::TermLinkHelper
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
Redmine::Plugin.register :redmine_glossary do
|
Redmine::Plugin.register :redmine_glossary do
|
||||||
name 'Redmine Glossary Plugin'
|
name 'Redmine Glossary plugin'
|
||||||
author 'M. Yoshida'
|
author 'Toru Takahashi'
|
||||||
description "This is a Redmine plugin to create a glossary which is is a list of terms in a project"
|
description 'This is a plugin for Redmine to create a glossary that is a list of terms in a project.'
|
||||||
version '0.9.2'
|
version '1.1.0'
|
||||||
requires_redmine :version_or_higher => '3.0.0'
|
url 'https://github.com/torutk/redmine_glossary'
|
||||||
author_url 'http://yohshiy.blog.fc2.com/'
|
author_url 'http://www.torutk.com'
|
||||||
url 'http://www.r-labs.org/projects/rp-glossary/wiki/GlossaryEn'
|
requires_redmine version_or_higher: '4.0'
|
||||||
|
|
||||||
settings :default => {
|
|
||||||
'hide_item_term_en' => false,
|
|
||||||
'hide_item_codename' => false,
|
|
||||||
'hide_item_datatype' => false,
|
|
||||||
'hide_item_rubi' => false,
|
|
||||||
'hide_item_abbr_whole' => false,
|
|
||||||
}, :partial => 'settings/glossary_settings'
|
|
||||||
|
|
||||||
|
|
||||||
project_module :glossary do
|
project_module :glossary do
|
||||||
permission(:view_terms, {:glossary => [:index, :index_clear, :show, :show_all]})
|
permission :view_glossary_terms, {
|
||||||
permission(:manage_terms, {:glossary => [:new, :edit, :destroy, :preview,
|
glossary_terms: [:index, :show],
|
||||||
:import_csv, :import_csv_exec, :move_all]},
|
glossary_categories: [:index, :show]
|
||||||
:require => :member)
|
}
|
||||||
permission(:manage_term_categories,
|
permission :manage_glossary_terms, {
|
||||||
{:glossary => [:add_term_category, :move_all],
|
glossary_terms: [:new, :create, :edit, :update, :destroy, :import],
|
||||||
:term_categories => [:index, :change_order, :edit, :destroy]},
|
glossary_categories: [:new, :create, :edit, :update, :destroy],
|
||||||
:require => :member)
|
},
|
||||||
|
require: :member
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
menu(:project_menu, :glossary,
|
menu :project_menu, :glossary,
|
||||||
{ :controller => 'glossary', :action => 'index' },
|
{ controller: :glossary_terms, action: :index },
|
||||||
:caption => :glossary_title, :param => :project_id)
|
caption: :glossary_title,
|
||||||
|
param: :project_id
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Redmine::WikiFormatting::Macros.register do
|
|
||||||
desc "Glossary term link by ID"
|
|
||||||
macro :termno do |obj, args|
|
|
||||||
raise I18n.t(:error_termno_macro_arg) if (args.size != 1)
|
|
||||||
tid = args[0].strip
|
|
||||||
term = Term.find_by_id(tid.to_i)
|
|
||||||
raise sprintf(I18n.t(:error_term_not_found_id), tid) unless term
|
|
||||||
term_link(term)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
Redmine::WikiFormatting::Macros.register do
|
|
||||||
desc "Glossary term link"
|
|
||||||
macro :term do |obj, args|
|
|
||||||
sargs = args.map {|arg| CGI::unescapeHTML(arg.strip) }
|
|
||||||
term = nil
|
|
||||||
case sargs.size
|
|
||||||
when 1
|
|
||||||
proj = Project.find_by_identifier(params[:project_id]) unless proj
|
|
||||||
term = Term.find_for_macro(sargs[0], proj, true)
|
|
||||||
when 2
|
|
||||||
proj = Project.find_by_identifier(sargs[1])
|
|
||||||
raise sprintf(I18n.t(:error_project_not_found), sargs[1]) unless proj
|
|
||||||
term = Term.find_for_macro(sargs[0], proj)
|
|
||||||
else
|
|
||||||
raise I18n.t(:error_term_macro_arg)
|
|
||||||
end
|
|
||||||
(term) ? term_link(term) : term_link_new(sargs[0], proj)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
module ActionView
|
|
||||||
module Helpers
|
|
||||||
module AssetTagHelper
|
|
||||||
def javascript_include_tag_with_glossary(*sources)
|
|
||||||
out = javascript_include_tag_without_glossary(*sources)
|
|
||||||
if sources.is_a?(Array) and sources[0] == 'jstoolbar/textile'
|
|
||||||
out += javascript_tag <<-javascript_tag
|
|
||||||
jsToolBar.prototype.elements.termlink = {
|
|
||||||
type: 'button',
|
|
||||||
title: '#{l(:label_tag_termlink)}',
|
|
||||||
fn: {
|
|
||||||
wiki: function() { this.encloseSelection("{{term(", ")}}") }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
javascript_tag
|
|
||||||
out += stylesheet_link_tag 'termlink', :plugin => 'redmine_glossary'
|
|
||||||
end
|
|
||||||
out
|
|
||||||
end
|
|
||||||
alias_method_chain :javascript_include_tag, :glossary
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,69 +0,0 @@
|
||||||
#
|
|
||||||
# glossary_import_info.rb
|
|
||||||
#
|
|
||||||
# Author : Mitsuyoshi Yoshida
|
|
||||||
# This program is freely distributable under the terms of an MIT-style license.
|
|
||||||
#
|
|
||||||
|
|
||||||
require 'i18n'
|
|
||||||
|
|
||||||
class GlossaryImportInfo
|
|
||||||
attr_accessor :import_file
|
|
||||||
attr_accessor :err_string
|
|
||||||
|
|
||||||
def initialize(tbl)
|
|
||||||
@import_file = tbl[:import_file]
|
|
||||||
end
|
|
||||||
|
|
||||||
def success?
|
|
||||||
(err_string) ? false : true
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
class CsvGlossaryImportInfo < GlossaryImportInfo
|
|
||||||
attr_accessor :is_first_comment
|
|
||||||
attr_reader :col_max
|
|
||||||
attr_accessor :cat_num, :newterm_num, :upterm_num
|
|
||||||
attr_writer :in_encoding
|
|
||||||
|
|
||||||
def initialize(tbl)
|
|
||||||
super(tbl)
|
|
||||||
@is_first_comment = tbl[:is_first_comment]
|
|
||||||
@in_encoding = tbl[:in_encoding]
|
|
||||||
@colno_tbl = {}
|
|
||||||
Term.import_params.each {|prm|
|
|
||||||
prmcol = tbl["colno_#{prm}"]
|
|
||||||
if (prmcol and !prmcol.empty?)
|
|
||||||
@colno_tbl[prmcol.to_i] = prm
|
|
||||||
end
|
|
||||||
}
|
|
||||||
@col_max = @colno_tbl.keys.max
|
|
||||||
@cat_num = 0
|
|
||||||
@newterm_num = 0
|
|
||||||
@upterm_num = 0
|
|
||||||
end
|
|
||||||
|
|
||||||
def in_encoding
|
|
||||||
(@in_encoding) ? @in_encoding : 'UTF-8'
|
|
||||||
end
|
|
||||||
|
|
||||||
def col_param(colno)
|
|
||||||
@colno_tbl[colno]
|
|
||||||
end
|
|
||||||
|
|
||||||
def param_col(prm)
|
|
||||||
@colno_tbl.each {|key, val|
|
|
||||||
return key if (val == prm)
|
|
||||||
}
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.default_param_cols(&blk)
|
|
||||||
Term.import_params.each {|prm|
|
|
||||||
yield prm, (Term.export_params.index(prm))
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
38
plugins/redmine_glossary/lib/glossary_macros.rb
Normal file
38
plugins/redmine_glossary/lib/glossary_macros.rb
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
module GlossaryMacros
|
||||||
|
|
||||||
|
Redmine::WikiFormatting::Macros.register do
|
||||||
|
|
||||||
|
desc "create macro which links to glossary term by id."
|
||||||
|
macro :termno do |obj, args|
|
||||||
|
begin
|
||||||
|
raise 'no parameters' if args.count.zero?
|
||||||
|
raise 'too many parameters' if args.count > 1
|
||||||
|
term_id = args.first
|
||||||
|
term = GlossaryTerm.find(term_id)
|
||||||
|
link_to term.name, project_glossary_term_path(@project, term)
|
||||||
|
rescue => err_msg
|
||||||
|
raise <<-TEXT.html_safe
|
||||||
|
Parameter error: #{err_msg}<br>
|
||||||
|
Usage: {{termno(glossary_term_id)}}
|
||||||
|
TEXT
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "create macro which links to glossary term by name."
|
||||||
|
macro :term do |obj, args|
|
||||||
|
begin
|
||||||
|
raise 'no parameters' if args.count.zero?
|
||||||
|
raise 'too many parameters' if args.count > 1
|
||||||
|
term = GlossaryTerm.find_by!(name: args.first)
|
||||||
|
link_to term.name, project_glossary_term_path(@project, term)
|
||||||
|
rescue => err_msg
|
||||||
|
raise <<-TEXT.html_safe
|
||||||
|
Parameter error: #{err_msg}<br>
|
||||||
|
Usage: {{term(name)}}
|
||||||
|
TEXT
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -1,50 +0,0 @@
|
||||||
#
|
|
||||||
# category_terms.rb
|
|
||||||
#
|
|
||||||
# Author : Mitsuyoshi Yoshida
|
|
||||||
# This program is freely distributable under the terms of an MIT-style license.
|
|
||||||
#
|
|
||||||
|
|
||||||
require 'i18n'
|
|
||||||
|
|
||||||
class GroupingTerms
|
|
||||||
attr_reader :type, :target
|
|
||||||
attr_accessor :ary
|
|
||||||
|
|
||||||
def initialize(type, target)
|
|
||||||
@type = type
|
|
||||||
@target = target
|
|
||||||
@ary = []
|
|
||||||
end
|
|
||||||
|
|
||||||
def name
|
|
||||||
(@target) ? @target.name : I18n.t(:label_not_categorized)
|
|
||||||
end
|
|
||||||
|
|
||||||
def <=>(rhterm)
|
|
||||||
if (!@target and !rhterm.target)
|
|
||||||
return 0
|
|
||||||
elsif (!@target or !rhterm.target)
|
|
||||||
return -1 if @target
|
|
||||||
return 1 if rhterm.target
|
|
||||||
end
|
|
||||||
case type
|
|
||||||
when GlossaryStyle::GroupByCategory
|
|
||||||
@target.position <=> rhterm.target.position
|
|
||||||
when GlossaryStyle::GroupByProject
|
|
||||||
@target.identifier <=> rhterm.target.identifier
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.flatten(gtarmsary)
|
|
||||||
flatary = []
|
|
||||||
gtarmsary.each {|gtarmsary|
|
|
||||||
return gtarmsary unless gtarmsary.is_a?(GroupingTerms)
|
|
||||||
flatary += gtarmsary.ary
|
|
||||||
}
|
|
||||||
flatary
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
require 'redmine'
|
|
||||||
require 'cgi'
|
|
||||||
|
|
||||||
module ActionView
|
|
||||||
module Helpers
|
|
||||||
module TermLinkHelper
|
|
||||||
|
|
||||||
def term_link_new(name, proj)
|
|
||||||
link_to(name + '?',
|
|
||||||
{:controller => 'glossary', :action => 'new', :project_id => proj,
|
|
||||||
:new_term_name => CGI::escapeHTML(name)},
|
|
||||||
{:class=>'new'})
|
|
||||||
end
|
|
||||||
|
|
||||||
def term_link(term)
|
|
||||||
str = link_to(term.name, :controller => 'glossary', :action => 'show', :project_id => term.project,
|
|
||||||
:id => term.id)
|
|
||||||
unless (term.abbr_whole.empty?)
|
|
||||||
str = content_tag(:abbr, str, :title=>term.abbr_whole)
|
|
||||||
end
|
|
||||||
unless (term.rubi.empty?)
|
|
||||||
str = content_tag(:ruby) {
|
|
||||||
tstr = content_tag(:rb, str)
|
|
||||||
tstr += content_tag(:rp, '(')
|
|
||||||
tstr += content_tag(:rt, term.rubi)
|
|
||||||
tstr += content_tag(:rp, ')')
|
|
||||||
}
|
|
||||||
end
|
|
||||||
str
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,66 +0,0 @@
|
||||||
h1. リリースノート
|
|
||||||
|
|
||||||
h2. 0.6.1
|
|
||||||
|
|
||||||
機能追加
|
|
||||||
* 用語とカテゴリのテーブルで、 編集と削除のリンクをアイコンだけで表示
|
|
||||||
不具合修正
|
|
||||||
* カテゴリでのフィルタリングで、カテゴリ名に正規表現の特殊文字を含んでいるときのエラーを修正
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Feature
|
|
||||||
* In term and term categories tables, Edit and Delete link display only icons.
|
|
||||||
Bugifx
|
|
||||||
* Filtering by category.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
h2. 0.6.0
|
|
||||||
|
|
||||||
機能追加
|
|
||||||
# プロジェクトの用語を一括移動
|
|
||||||
# 用語の一覧表示に説明の一部を表示
|
|
||||||
# インデックス検索の解除の改良
|
|
||||||
# メッセージファイルの追加
|
|
||||||
## ドイツ語 (de)
|
|
||||||
## 簡易中国語 (zh)
|
|
||||||
|
|
||||||
不具合修正
|
|
||||||
# プロジェクトの選択
|
|
||||||
# カテゴリによるフィルター
|
|
||||||
# カテゴリなしの場合の用語集を CSV の出力
|
|
||||||
# rake によるデータベース更新
|
|
||||||
# 用語集から以外の term Wiki マクロの利用
|
|
||||||
# & を含んだ用語の term マクロ
|
|
||||||
# フリガナ、展開名称の非表示設定
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Feature
|
|
||||||
# Feature to move all terms
|
|
||||||
# Show parts of description in index lists
|
|
||||||
# Add clear button for index filter
|
|
||||||
# Add translation
|
|
||||||
## German (de)
|
|
||||||
## Simplified Chinese (zh)
|
|
||||||
|
|
||||||
Bug fix
|
|
||||||
# Selection of project target
|
|
||||||
# Filter by categories
|
|
||||||
# CSV export when category is None
|
|
||||||
# Update database by rake
|
|
||||||
# The Wiki term macro error in wiki page except glossary page
|
|
||||||
# The Wiki term macro error of terms which have & caractor.
|
|
||||||
# Hiden settings of rubi and abbrev.
|
|
||||||
|
|
||||||
|
|
||||||
h2. 0.6.0
|
|
||||||
|
|
||||||
機能追加
|
|
||||||
# Redmine 1.4.0 対応
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Feature
|
|
||||||
# support for Redmine 1.4 対応
|
|
10
plugins/redmine_glossary/test/fixtures/glossary_categories.yml
vendored
Normal file
10
plugins/redmine_glossary/test/fixtures/glossary_categories.yml
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
color:
|
||||||
|
id: 1
|
||||||
|
name: Color
|
||||||
|
project_id: 1
|
||||||
|
|
||||||
|
shape:
|
||||||
|
id: 2
|
||||||
|
name: Shape
|
||||||
|
project_id: 1
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
|
||||||
one:
|
|
||||||
id: 1
|
|
||||||
show_desc:
|
|
||||||
gropby:
|
|
||||||
project_scope: 1
|
|
||||||
sort_item_0: MyString
|
|
||||||
sort_item_1: MyString
|
|
||||||
sort_item_2: MyString
|
|
||||||
user_id: 1
|
|
||||||
two:
|
|
||||||
id: 2
|
|
||||||
show_desc:
|
|
||||||
gropby:
|
|
||||||
project_scope: 1
|
|
||||||
sort_item_0: MyString
|
|
||||||
sort_item_1: MyString
|
|
||||||
sort_item_2: MyString
|
|
||||||
user_id: 1
|
|
31
plugins/redmine_glossary/test/fixtures/glossary_terms.yml
vendored
Normal file
31
plugins/redmine_glossary/test/fixtures/glossary_terms.yml
vendored
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
red:
|
||||||
|
id: 1
|
||||||
|
project_id: 1
|
||||||
|
category_id: 1
|
||||||
|
name: red
|
||||||
|
|
||||||
|
green:
|
||||||
|
id: 2
|
||||||
|
project_id: 1
|
||||||
|
category_id: 1
|
||||||
|
name: green
|
||||||
|
created_at: 2018-08-08 18:18:18
|
||||||
|
updated_at: 2018-08-08 18:18:18
|
||||||
|
|
||||||
|
blue:
|
||||||
|
id: 3
|
||||||
|
project_id: 2
|
||||||
|
category_id: 1
|
||||||
|
name: blue
|
||||||
|
created_at: 2018-08-08 18:18:18
|
||||||
|
updated_at: 2018-08-08 18:18:18
|
||||||
|
|
||||||
|
clear:
|
||||||
|
id: 4
|
||||||
|
project_id: 1
|
||||||
|
name: clear
|
||||||
|
created_at: 2018-08-08 18:18:18
|
||||||
|
updated_at: 2018-08-08 18:18:18
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
|
||||||
one:
|
|
||||||
id: 1
|
|
||||||
show_desc:
|
|
||||||
gropby:
|
|
||||||
project_scope: 1
|
|
||||||
sort_item_0: MyString
|
|
||||||
sort_item_1: MyString
|
|
||||||
sort_item_2: MyString
|
|
||||||
user_id: 1
|
|
||||||
two:
|
|
||||||
id: 2
|
|
||||||
show_desc:
|
|
||||||
gropby:
|
|
||||||
project_scope: 1
|
|
||||||
sort_item_0: MyString
|
|
||||||
sort_item_1: MyString
|
|
||||||
sort_item_2: MyString
|
|
||||||
user_id: 1
|
|
|
@ -1,11 +0,0 @@
|
||||||
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
|
||||||
one:
|
|
||||||
id: 1
|
|
||||||
project_id: 1
|
|
||||||
name: MyString
|
|
||||||
position: 1
|
|
||||||
two:
|
|
||||||
id: 2
|
|
||||||
project_id: 1
|
|
||||||
name: MyString
|
|
||||||
position: 1
|
|
|
@ -1,17 +0,0 @@
|
||||||
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
|
||||||
one:
|
|
||||||
id: 1
|
|
||||||
show_desc:
|
|
||||||
categorized:
|
|
||||||
all_project:
|
|
||||||
search_str:
|
|
||||||
search_category:
|
|
||||||
sort_items: MyString
|
|
||||||
two:
|
|
||||||
id: 2
|
|
||||||
show_desc:
|
|
||||||
categorized:
|
|
||||||
all_project:
|
|
||||||
search_str:
|
|
||||||
search_category:
|
|
||||||
sort_items: MyString
|
|
25
plugins/redmine_glossary/test/fixtures/terms.yml
vendored
25
plugins/redmine_glossary/test/fixtures/terms.yml
vendored
|
@ -1,25 +0,0 @@
|
||||||
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
|
||||||
one:
|
|
||||||
id: 1
|
|
||||||
project_id:
|
|
||||||
category_id:
|
|
||||||
author_id:
|
|
||||||
updater_id:
|
|
||||||
name:
|
|
||||||
name_en:
|
|
||||||
codename:
|
|
||||||
description:
|
|
||||||
created_on:
|
|
||||||
updated_on: 2010-12-13 21:25:16
|
|
||||||
two:
|
|
||||||
id: 2
|
|
||||||
project_id:
|
|
||||||
category_id:
|
|
||||||
author_id:
|
|
||||||
updater_id:
|
|
||||||
name:
|
|
||||||
name_en:
|
|
||||||
codename:
|
|
||||||
description:
|
|
||||||
created_on:
|
|
||||||
updated_on: 2010-12-13 21:25:16
|
|
|
@ -1,19 +0,0 @@
|
||||||
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
|
||||||
one:
|
|
||||||
id: 1
|
|
||||||
show_desc:
|
|
||||||
gropby:
|
|
||||||
project_scope: 1
|
|
||||||
sort_item_0: MyString
|
|
||||||
sort_item_1: MyString
|
|
||||||
sort_item_2: MyString
|
|
||||||
user_id: 1
|
|
||||||
two:
|
|
||||||
id: 2
|
|
||||||
show_desc:
|
|
||||||
gropby:
|
|
||||||
project_scope: 1
|
|
||||||
sort_item_0: MyString
|
|
||||||
sort_item_1: MyString
|
|
||||||
sort_item_2: MyString
|
|
||||||
user_id: 1
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
require File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class GlossaryCategoriesControllerTest < ActionController::TestCase
|
||||||
|
fixtures :projects, :users, :roles, :members, :member_roles
|
||||||
|
plugin_fixtures :glossary_categories
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@project = projects('projects_001')
|
||||||
|
@project.enabled_module_names = [:glossary]
|
||||||
|
roles('roles_001').add_permission! :view_glossary, :manage_glossary
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_index
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
get :index, params: {project_id: 1}
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_edit
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
get :edit, params: {id: 1, project_id: 1}
|
||||||
|
assert_response :success
|
||||||
|
assert_select 'form', true
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_update
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
patch :update, params: {id: 1, project_id: 1, glossary_category: {name: 'Colour'}}
|
||||||
|
category = GlossaryCategory.find(1)
|
||||||
|
assert_redirected_to project_glossary_category_path(@project, category)
|
||||||
|
assert_equal 'Colour', category.name
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
get :new, params: {id: 1, project_id: 1}
|
||||||
|
assert_response :success
|
||||||
|
assert_select 'form', true
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
post :create, params: {
|
||||||
|
project_id: 1, glossary_category: {name: 'Material'}
|
||||||
|
}
|
||||||
|
category = GlossaryCategory.find_by(name: 'Material')
|
||||||
|
assert_not_nil category
|
||||||
|
assert_redirected_to project_glossary_category_path(@project, category)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_destroy
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
delete :destroy, params: { id: 1, project_id: 1 }
|
||||||
|
assert_raise(ActiveRecord::RecordNotFound) { GlossaryCategory.find(1) }
|
||||||
|
assert_redirected_to project_glossary_categories_path(@project)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,8 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/../test_helper'
|
|
||||||
|
|
||||||
class GlossaryControllerTest < ActionController::TestCase
|
|
||||||
# Replace this with your real tests.
|
|
||||||
def test_truth
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,8 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/../test_helper'
|
|
||||||
|
|
||||||
class GlossaryStylesControllerTest < ActionController::TestCase
|
|
||||||
# Replace this with your real tests.
|
|
||||||
def test_truth
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
require File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class GlossaryTermsControllerTest < ActionController::TestCase
|
||||||
|
fixtures :projects, :users, :roles, :members, :member_roles
|
||||||
|
plugin_fixtures :glossary_terms
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@project = projects('projects_001')
|
||||||
|
@project.enabled_module_names = [:glossary]
|
||||||
|
roles('roles_001').add_permission! :view_glossary, :manage_glossary
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_index
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
get :index, params: {project_id: 1}
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_edit
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
get :edit, params: {id: 1, project_id: 1}
|
||||||
|
assert_response :success
|
||||||
|
assert_select 'form', true
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_update
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
patch :update, params: {id: 1, project_id: 1, glossary_term: {
|
||||||
|
name: 'rosso'
|
||||||
|
}}
|
||||||
|
term = GlossaryTerm.find(1)
|
||||||
|
assert_redirected_to project_glossary_term_path(@project, term)
|
||||||
|
assert_equal 'rosso', term.name
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_new
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
get :new, params: {project_id: 1}
|
||||||
|
assert_response :success
|
||||||
|
assert_select 'form', true
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_create
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
post :create, params: { project_id: 1, glossary_term: {
|
||||||
|
name: 'white', category_id: 1
|
||||||
|
}}
|
||||||
|
term = GlossaryTerm.find_by(name: 'white')
|
||||||
|
assert_not_nil term
|
||||||
|
assert_redirected_to project_glossary_term_path(@project, term)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_destroy
|
||||||
|
@request.session[:user_id] = users('users_002').id
|
||||||
|
delete :destroy, params: {id: 1, project_id: 1}
|
||||||
|
assert_raise(ActiveRecord::RecordNotFound) { GlossaryTerm.find(1) }
|
||||||
|
assert_redirected_to project_glossary_terms_path(@project)
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,8 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/../test_helper'
|
|
||||||
|
|
||||||
class GlossrayStylesControllerTest < ActionController::TestCase
|
|
||||||
# Replace this with your real tests.
|
|
||||||
def test_truth
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,8 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/../test_helper'
|
|
||||||
|
|
||||||
class TermCategoriesControllerTest < ActionController::TestCase
|
|
||||||
# Replace this with your real tests.
|
|
||||||
def test_truth
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,8 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/../test_helper'
|
|
||||||
|
|
||||||
class TermQueriesControllerTest < ActionController::TestCase
|
|
||||||
# Replace this with your real tests.
|
|
||||||
def test_truth
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,5 +1,29 @@
|
||||||
# Load the normal Rails helper
|
# Load the Redmine helper
|
||||||
require File.expand_path(File.dirname(__FILE__) + '/../../../../test/test_helper')
|
require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper')
|
||||||
|
|
||||||
# Ensure that we are using the temporary fixture path
|
module Redmine
|
||||||
Engines::Testing.set_fixture_path
|
module PluginFixturesLoader
|
||||||
|
def self.included(base)
|
||||||
|
base.class_eval do
|
||||||
|
def self.plugin_fixtures(*symbols)
|
||||||
|
ActiveRecord::FixtureSet.create_fixtures(File.dirname(__FILE__) + '/fixtures/', symbols)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
## functional test
|
||||||
|
unless ActionController::TestCase.included_modules.include?(Redmine::PluginFixturesLoader)
|
||||||
|
ActionController::TestCase.send :include, Redmine::PluginFixturesLoader
|
||||||
|
end
|
||||||
|
|
||||||
|
## unit test
|
||||||
|
unless ActiveSupport::TestCase.included_modules.include?(Redmine::PluginFixturesLoader)
|
||||||
|
ActiveSupport::TestCase.send :include, Redmine::PluginFixturesLoader
|
||||||
|
end
|
||||||
|
|
||||||
|
## integration test
|
||||||
|
unless Redmine::IntegrationTest.included_modules.include?(Redmine::PluginFixturesLoader)
|
||||||
|
Redmine::IntegrationTest.send :include, Redmine::PluginFixturesLoader
|
||||||
|
end
|
||||||
|
|
15
plugins/redmine_glossary/test/unit/glossary_category_test.rb
Normal file
15
plugins/redmine_glossary/test/unit/glossary_category_test.rb
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# coding: utf-8
|
||||||
|
require File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class GlossaryCategoryTest < ActiveSupport::TestCase
|
||||||
|
fixtures :glossary_categories
|
||||||
|
plugin_fixtures :glossary_categories
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@category = glossary_categories('color')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_valid
|
||||||
|
assert @category.valid?
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,10 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/../test_helper'
|
|
||||||
|
|
||||||
class GlossaryStyleTest < ActiveSupport::TestCase
|
|
||||||
fixtures :glossary_styles
|
|
||||||
|
|
||||||
# Replace this with your real tests.
|
|
||||||
def test_truth
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
21
plugins/redmine_glossary/test/unit/glossary_term_test.rb
Normal file
21
plugins/redmine_glossary/test/unit/glossary_term_test.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
require File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
|
class GlossaryTermTest < ActiveSupport::TestCase
|
||||||
|
fixtures :glossary_terms
|
||||||
|
plugin_fixtures :glossary_terms
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@term = glossary_terms('red')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_valid
|
||||||
|
assert @term.valid?
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_invalid_without_name
|
||||||
|
@term.name = nil
|
||||||
|
assert_raises ActiveRecord::NotNullViolation do
|
||||||
|
@term.save
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,10 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/../test_helper'
|
|
||||||
|
|
||||||
class GrossaryStyleTest < ActiveSupport::TestCase
|
|
||||||
fixtures :grossary_styles
|
|
||||||
|
|
||||||
# Replace this with your real tests.
|
|
||||||
def test_truth
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue