express_translate 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +7 -4
- data/VERSION +1 -1
- data/app/assets/stylesheets/express_translate/express_translate.css.scss +27 -1
- data/app/controllers/express_translate/files_controller.rb +28 -18
- data/app/views/express_translate/ajax/languages/_content_language.html.erb +1 -1
- data/app/views/express_translate/ajax/packages/_content_index.html.erb +9 -1
- data/app/views/express_translate/options/index.html.erb +68 -1
- data/app/views/express_translate/options/languages.html.erb +1 -69
- data/express_translate.gemspec +2 -2
- metadata +3 -3
data/README.md
CHANGED
@@ -22,7 +22,7 @@ Express Translate
|
|
22
22
|
##Installation
|
23
23
|
### 1. Gemfile
|
24
24
|
```bash
|
25
|
-
gem 'express_translate', '~> 1.0.
|
25
|
+
gem 'express_translate', '~> 1.0.3'
|
26
26
|
```
|
27
27
|
|
28
28
|
### 2. Setup
|
@@ -84,9 +84,12 @@ Note: You can see before login. Account for login in config file ("/config/expre
|
|
84
84
|
##Support
|
85
85
|
|
86
86
|
### Files
|
87
|
-
|
87
|
+
#### Import
|
88
|
+
* CSV file
|
89
|
+
* YML file
|
90
|
+
#### Export
|
91
|
+
* CSV file
|
88
92
|
|
89
93
|
### Application
|
90
94
|
Backend for Ruby on Rails
|
91
|
-
|
92
|
-
Get data with json (for Javascript)
|
95
|
+
Get data with json (for Javascript) => Development
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.3
|
@@ -112,7 +112,7 @@ body#express_translate {
|
|
112
112
|
&:hover {
|
113
113
|
box-shadow:0px 0px 3px #665;
|
114
114
|
background: #398ac4;
|
115
|
-
p {display:none;}
|
115
|
+
& > p {display:none;}
|
116
116
|
h5 {display:block;}
|
117
117
|
h4 {display:block;}
|
118
118
|
.tool {
|
@@ -388,6 +388,32 @@ body#express_translate {
|
|
388
388
|
}
|
389
389
|
}
|
390
390
|
|
391
|
+
&.wait {
|
392
|
+
&:hover {
|
393
|
+
.tool {
|
394
|
+
z-index:-1;
|
395
|
+
opacity:0;
|
396
|
+
}
|
397
|
+
};
|
398
|
+
.waiting {
|
399
|
+
display:block;
|
400
|
+
}
|
401
|
+
}
|
402
|
+
|
403
|
+
.waiting {
|
404
|
+
background: rgba(0,0,0,0.6);
|
405
|
+
width:100%;
|
406
|
+
height:100%;
|
407
|
+
position:relative;
|
408
|
+
top:0px;
|
409
|
+
left:0px;
|
410
|
+
border-radius:200px;
|
411
|
+
display:none;
|
412
|
+
.bubblingG {
|
413
|
+
margin-left:-30px;
|
414
|
+
}
|
415
|
+
}
|
416
|
+
|
391
417
|
span {
|
392
418
|
text-align:center;
|
393
419
|
width:90%;
|
@@ -33,7 +33,9 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
33
33
|
File.open(filename, 'wb') do |file|
|
34
34
|
file.write(params[:file_yml].read)
|
35
35
|
end
|
36
|
-
|
36
|
+
@list_data = []
|
37
|
+
lang_id = import_yml_file(File.open(filename, 'r').path)
|
38
|
+
add_data_form_list(params["pack"], lang_id)
|
37
39
|
render text: "Uploaded"
|
38
40
|
end
|
39
41
|
|
@@ -76,23 +78,31 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
76
78
|
# Import yml file
|
77
79
|
def import_yml_file(path)
|
78
80
|
data = YAML.load_file(path)
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
81
|
+
data.each do |lang|
|
82
|
+
@list_data = to_shallow_hash(lang[1])
|
83
|
+
return lang[0]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def add_data_form_list(pack, lang)
|
88
|
+
language_detail = LanguageDetail.info({"id"=> lang, "packages"=> pack})
|
89
|
+
language_detail.destroy
|
90
|
+
@list_data.each do |item|
|
91
|
+
language_detail.add({code: item[0], text: item[1]})
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def to_shallow_hash(hash)
|
96
|
+
hash.inject({}) do |shallow_hash, (key, value)|
|
97
|
+
if value.is_a?(Hash)
|
98
|
+
to_shallow_hash(value).each do |sub_key, sub_value|
|
99
|
+
shallow_hash[[key, sub_key].join(".")] = sub_value
|
100
|
+
end
|
101
|
+
else
|
102
|
+
shallow_hash[key.to_s] = value
|
103
|
+
end
|
104
|
+
shallow_hash
|
105
|
+
end
|
96
106
|
end
|
97
107
|
|
98
108
|
# Processing
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% @languages.each do |lang| %>
|
2
|
-
<a class="lang
|
2
|
+
<a class="lang origin_<%= lang['is_origin'] %>" href="/express_translate/language/<%= params[:packages] %>/<%= lang['id'] %>">
|
3
3
|
<span><%= lang['text'].slice(0,1).capitalize + lang['text'].slice(1..-1) %></span>
|
4
4
|
<p><%= (@LanguageDetail.info(lang).all.count.to_f / (@max == 0 ? 1 : @max) * 100).to_i %>%</p>
|
5
5
|
<h5><%= @LanguageDetail.info(lang).all.count %>/<%= @max %></h5>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% @packages.each do |package| %>
|
2
|
-
<a class="lang package <%= package['language'].count > 1 ? "multi" : "" %>" href="/express_translate/package/<%= package['id'] %>">
|
2
|
+
<a data="<%= package['id'] %>" class="lang package <%= package['language'].count > 1 ? "multi" : "" %>" href="/express_translate/package/<%= package['id'] %>">
|
3
3
|
<span><%= package['text'].slice(0,1).capitalize + package['text'].slice(1..-1) %></span>
|
4
4
|
<p><%= package['language'].count %></p>
|
5
5
|
<div class="list_review">
|
@@ -12,6 +12,14 @@
|
|
12
12
|
<div class="tool setting" data="<%= package['id'] %>" text="<%= package['text'] %>"></div>
|
13
13
|
<div class="tool json" data="<%= package['id'] %>"></div>
|
14
14
|
</div>
|
15
|
+
|
16
|
+
<div class="waiting">
|
17
|
+
<div class="bubblingG">
|
18
|
+
<p id="bubblingG_1"></p>
|
19
|
+
<p id="bubblingG_2"></p>
|
20
|
+
<p id="bubblingG_3"></p>
|
21
|
+
</div>
|
22
|
+
</div>
|
15
23
|
</a>
|
16
24
|
<div class="delete_dialog_<%= package['id'] %>" style="display: none">
|
17
25
|
<h4>Are you sure you want to delete?</br><%= package['text'] %></h4>
|
@@ -147,7 +147,74 @@
|
|
147
147
|
$(".json").click(function(event) {
|
148
148
|
event.preventDefault();
|
149
149
|
openInNewTab(window.location.origin + "/express_translate/service/" + $(event.target).attr("data") + ".json");
|
150
|
-
})
|
150
|
+
});
|
151
|
+
|
152
|
+
var obj = $(".package");
|
153
|
+
|
154
|
+
obj.on('dragenter', function (e){
|
155
|
+
e.stopPropagation();
|
156
|
+
e.preventDefault();
|
157
|
+
$(this).removeClass("add_files");
|
158
|
+
});
|
159
|
+
|
160
|
+
obj.on('dragover', function (e){
|
161
|
+
e.stopPropagation();
|
162
|
+
e.preventDefault();
|
163
|
+
$(this).addClass("add_files");
|
164
|
+
});
|
165
|
+
|
166
|
+
obj.on('drop', function (e){
|
167
|
+
$(this).removeClass("add_files");
|
168
|
+
e.preventDefault();
|
169
|
+
var files = e.originalEvent.dataTransfer.files;
|
170
|
+
handleFileUpload(files, obj);
|
171
|
+
});
|
172
|
+
|
173
|
+
obj.on('dragleave', function (e) {
|
174
|
+
$(this).removeClass("add_files");
|
175
|
+
});
|
176
|
+
|
177
|
+
function handleFileUpload(files, obj) {
|
178
|
+
obj.addClass("wait");
|
179
|
+
for (var i = 0; i < files.length; i++) {
|
180
|
+
var fd = new FormData();
|
181
|
+
fd.append("pack", obj.attr("data"));
|
182
|
+
fd.append('file_yml', files[i]);
|
183
|
+
sendFileToServer(fd, obj);
|
184
|
+
}
|
185
|
+
}
|
186
|
+
|
187
|
+
function sendFileToServer(formData, obj) {
|
188
|
+
var uploadURL ="/express_translate/import_yml";
|
189
|
+
var jqXHR = $.ajax({
|
190
|
+
xhr: function() {
|
191
|
+
var xhrobj = $.ajaxSettings.xhr();
|
192
|
+
if (xhrobj.upload) {
|
193
|
+
xhrobj.upload.addEventListener('progress', function(event) {
|
194
|
+
var percent = 0;
|
195
|
+
var position = event.loaded || event.position;
|
196
|
+
var total = event.total;
|
197
|
+
if (event.lengthComputable) {
|
198
|
+
percent = Math.ceil(position / total * 100);
|
199
|
+
console.log(percent)
|
200
|
+
}
|
201
|
+
}, false);
|
202
|
+
}
|
203
|
+
return xhrobj;
|
204
|
+
},
|
205
|
+
url: uploadURL,
|
206
|
+
type: "POST",
|
207
|
+
contentType:false,
|
208
|
+
processData: false,
|
209
|
+
cache: false,
|
210
|
+
data: formData,
|
211
|
+
success: function(data){
|
212
|
+
console.log(data)
|
213
|
+
// Uploaded
|
214
|
+
obj.removeClass("wait");
|
215
|
+
}
|
216
|
+
});
|
217
|
+
}
|
151
218
|
}
|
152
219
|
|
153
220
|
runJavascriptsIndex();
|
@@ -172,75 +172,7 @@
|
|
172
172
|
$(".json").click(function(event) {
|
173
173
|
event.preventDefault();
|
174
174
|
openInNewTab(window.location.origin + "/express_translate/service/" + $(event.target).attr("data") + ".json")
|
175
|
-
});
|
176
|
-
|
177
|
-
var obj = $(".lang");
|
178
|
-
|
179
|
-
obj.on('dragenter', function (e){
|
180
|
-
e.stopPropagation();
|
181
|
-
e.preventDefault();
|
182
|
-
$(this).removeClass("add_files");
|
183
|
-
});
|
184
|
-
|
185
|
-
obj.on('dragover', function (e){
|
186
|
-
e.stopPropagation();
|
187
|
-
e.preventDefault();
|
188
|
-
$(this).addClass("add_files");
|
189
|
-
});
|
190
|
-
|
191
|
-
obj.on('drop', function (e){
|
192
|
-
$(this).removeClass("add_files");
|
193
|
-
e.preventDefault();
|
194
|
-
var files = e.originalEvent.dataTransfer.files;
|
195
|
-
handleFileUpload(files, obj);
|
196
|
-
});
|
197
|
-
|
198
|
-
obj.on('dragleave', function (e) {
|
199
|
-
$(this).removeClass("add_files");
|
200
|
-
});
|
201
|
-
|
202
|
-
function handleFileUpload(files, obj) {
|
203
|
-
for (var i = 0; i < files.length; i++) {
|
204
|
-
var fd = new FormData();
|
205
|
-
fd.append('file_yml', files[i]);
|
206
|
-
sendFileToServer(fd);
|
207
|
-
}
|
208
|
-
}
|
209
|
-
|
210
|
-
function sendFileToServer(formData) {
|
211
|
-
var uploadURL ="/express_translate/import_yml";
|
212
|
-
var extraData ={};
|
213
|
-
var jqXHR = $.ajax({
|
214
|
-
xhr: function() {
|
215
|
-
var xhrobj = $.ajaxSettings.xhr();
|
216
|
-
if (xhrobj.upload) {
|
217
|
-
xhrobj.upload.addEventListener('progress', function(event) {
|
218
|
-
var percent = 0;
|
219
|
-
var position = event.loaded || event.position;
|
220
|
-
var total = event.total;
|
221
|
-
if (event.lengthComputable) {
|
222
|
-
percent = Math.ceil(position / total * 100);
|
223
|
-
}
|
224
|
-
}, false);
|
225
|
-
}
|
226
|
-
return xhrobj;
|
227
|
-
},
|
228
|
-
url: uploadURL,
|
229
|
-
type: "POST",
|
230
|
-
contentType:false,
|
231
|
-
processData: false,
|
232
|
-
cache: false,
|
233
|
-
data: formData,
|
234
|
-
success: function(data){
|
235
|
-
console.log(data)
|
236
|
-
$(".import").html("Import");
|
237
|
-
setTimeout(function(){
|
238
|
-
// window.location.reload();
|
239
|
-
}, 100);
|
240
|
-
}
|
241
|
-
});
|
242
|
-
}
|
243
|
-
|
175
|
+
});
|
244
176
|
}
|
245
177
|
|
246
178
|
runJavascriptsLanguage();
|
data/express_translate.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "express_translate"
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Karl"]
|
12
|
-
s.date = "2014-
|
12
|
+
s.date = "2014-07-01"
|
13
13
|
s.description = "longer description of your gem"
|
14
14
|
s.email = "karl@rubify.com"
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: express_translate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-07-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
@@ -355,7 +355,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
355
355
|
version: '0'
|
356
356
|
segments:
|
357
357
|
- 0
|
358
|
-
hash:
|
358
|
+
hash: 2342580513378280072
|
359
359
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
360
360
|
none: false
|
361
361
|
requirements:
|