Skip to content

Commit bb2a283

Browse files
committed
Merge branch 'staging'
2 parents f41b70d + c28a6b5 commit bb2a283

21 files changed

+728
-180
lines changed

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,5 @@ gem 'rest-client'
128128
gem 'user_agent_parser' # 2.6 requires ruby 2.4
129129
gem 'rails_same_site_cookie'
130130
gem 'sprockets', '< 4.0.0'
131+
gem 'image_hash'
132+
gem 'carrierwave', '1.3.1'

Gemfile.lock

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ GEM
128128
rack-test (>= 0.6.3)
129129
regexp_parser (~> 1.2)
130130
xpath (~> 3.2)
131+
carrierwave (1.3.1)
132+
activemodel (>= 4.0.0)
133+
activesupport (>= 4.0.0)
134+
mime-types (>= 1.16)
131135
celluloid (0.17.4)
132136
celluloid-essentials
133137
celluloid-extras
@@ -228,6 +232,8 @@ GEM
228232
domain_name (~> 0.5)
229233
i18n (0.9.5)
230234
concurrent-ruby (~> 1.0)
235+
image_hash (1.0.0)
236+
mini_magick
231237
immigrant (0.3.6)
232238
activerecord (>= 3.0)
233239
ims-lti (1.1.13)
@@ -270,6 +276,7 @@ GEM
270276
mime-types (3.2.2)
271277
mime-types-data (~> 3.2015)
272278
mime-types-data (3.2019.0331)
279+
mini_magick (4.11.0)
273280
mini_mime (1.0.2)
274281
mini_portile2 (2.4.0)
275282
minitest (5.14.1)
@@ -500,6 +507,7 @@ DEPENDENCIES
500507
capistrano-rvm
501508
capistrano3-puma!
502509
capybara
510+
carrierwave (= 1.3.1)
503511
cocoon
504512
codemirror-rails
505513
coffee-rails (~> 4.0.0)
@@ -517,6 +525,7 @@ DEPENDENCIES
517525
gravtastic
518526
haml (>= 3.1.4)
519527
haml-rails
528+
image_hash
520529
immigrant
521530
ims-lti (~> 1.1.8)
522531
jquery-rails

app/assets/javascripts/application.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,4 @@ $.fn.editable.defaults.mode = 'inline';
8787
$(document).ready(function() {
8888
$('.xeditable').editable();
8989
});
90+
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
var oldfileList = document.getElementById("exercise_oldfileList").value.split(' ')
2+
var oldfilesName = transferData("exercise_oldfileList")
3+
var oldfilesNameBackup = oldfilesName.slice()
4+
var oldfilesHashName = transferData("exercise_ownerships_res_name")
5+
var totalList = oldfilesName.slice()
6+
var table = document.getElementById("tablelist")
7+
var path = "/uploads/resource_file/"
8+
document.getElementById("exercise_fileList").value = totalList.toString()
9+
10+
function applyHideAndShow(){
11+
if(totalList.length==0){
12+
$(filelist).addClass("hidden");
13+
}
14+
else{
15+
$(function () {
16+
$('#filelist').removeClass('hidden')
17+
})
18+
}
19+
}
20+
21+
22+
function transferData(tag){
23+
var data = []
24+
oldfileList = document.getElementById(tag).value.split(' ')
25+
for( var i = 0; i < oldfileList.length; i++){
26+
if(oldfileList[i].replace(/\s/g, '').length){
27+
data.push(oldfileList[i])
28+
}
29+
}
30+
return data
31+
}
32+
33+
34+
function removeEle(arr,ele){
35+
if(!Array.isArray(arr)){
36+
arr = arr.split(",")
37+
}
38+
for( var i = 0; i < arr.length; i++){
39+
if ( arr[i] == ele.trim()) {
40+
arr.splice(i, 1)
41+
}
42+
}
43+
return arr
44+
}
45+
46+
47+
function deleteTableRow(row){
48+
var count = $('#tablelist tr').length;
49+
if(row == -1){
50+
for(var i = 1; i < count; i++){
51+
table.deleteRow(1)
52+
}
53+
}
54+
else{
55+
var entireRow= document.getElementById(row+"row")
56+
entireRow.remove()
57+
}
58+
}
59+
60+
61+
62+
function isImage(filename){
63+
var filename = /[^.]+$/.exec(filename)
64+
if (String(filename).match(/(jpg|jpeg|png|gif)/g))
65+
return true
66+
return false
67+
}
68+
69+
70+
function addButtonListener(){
71+
document.getElementById("tablelist").addEventListener('click',function(e){
72+
if(e.target && e.target.id != null && e.target.id!= "" && e.target.id.length<=2 ){
73+
var id = parseInt(e.target.id.charAt(0))
74+
var filename = document.getElementById(id+"name").innerHTML.trim()
75+
totalList = removeEle(totalList, filename)
76+
if(oldfilesName.includes(filename)){
77+
oldfilesName = removeEle(oldfilesName, filename)
78+
}
79+
deleteTableRow(id)
80+
document.getElementById("exercise_fileList").value = totalList.toString()
81+
applyHideAndShow()
82+
}
83+
});
84+
}
85+
86+
87+
function checkRes(fileName){
88+
var a = oldfilesNameBackup.indexOf(fileName)
89+
if(a != -1){
90+
return oldfilesHashName[a]
91+
}
92+
return null
93+
}
94+
95+
96+
function createTextAndButton(fileName,SizeList){
97+
deleteTableRow(-1)
98+
for (var i = 0; i < fileName.length; i++) {
99+
var exist = checkRes(fileName[i])
100+
var row = table.insertRow();
101+
row.setAttribute("id",(i+1)+"row")
102+
var imageOrNot = isImage(fileName[i])
103+
// Type info
104+
var cell0 = row.insertCell(0)
105+
if(imageOrNot){
106+
cell0.innerHTML = "Image"
107+
}
108+
else{
109+
cell0.innerHTML = "File"
110+
}
111+
// Thumbnail display
112+
var cell1 = row.insertCell(1)
113+
if(exist != null && imageOrNot){
114+
cell1.innerHTML = "<img class=\"img\" src=\""+path+exist+"\">"
115+
}
116+
else if (exist != null && !imageOrNot){
117+
cell1.innerHTML = "Not showable"
118+
}
119+
else{
120+
cell1.innerHTML = "Unknown"
121+
}
122+
//Name text
123+
var cell2 = row.insertCell(2)
124+
cell2.setAttribute("id",(i+1)+"name")
125+
cell2.innerHTML = fileName[i]
126+
//Pixel text
127+
var cell3 = row.insertCell(3)
128+
tempsrc = path+oldfilesHashName[i]
129+
if(exist != null && imageOrNot){
130+
var img = new Image()
131+
img.src = tempsrc
132+
cell3.innerHTML = img.width + 'x' + img.height+" pixels"
133+
}
134+
else if (exist != null && !imageOrNot){
135+
//wait
136+
}
137+
else if (exist == null && imageOrNot){
138+
cell3.innerHTML = "0x0 pixels"
139+
} else if (exist == null && !imageOrNot){
140+
var index = i - oldfilesName.length
141+
cell3.innerHTML = SizeList[index] + " bytes"
142+
}
143+
//Mark icon
144+
var cell4 = row.insertCell(4)
145+
if(exist != null){
146+
cell4.innerHTML = "<a href=\"#\"> <span class=\"glyphicon glyphicon-ok iconpadding fa-lg\"></span> </a>"
147+
}else{
148+
cell4.innerHTML = "<a > <span class=\"glyphicon glyphicon-remove iconpadding fa-lg\"></span> </a>"
149+
}
150+
//Delete Button
151+
var cell5 = row.insertCell(5)
152+
cell5.innerHTML = "<button class=\"btn btn-link glyphicon glyphicon-trash fa-lg\" id="+(i+1)+" type=\"button\"></button>"
153+
}
154+
addButtonListener()
155+
}
156+
157+
158+
// upload button
159+
$("#exercise_files").bind("change", function (e)
160+
{
161+
totalList = oldfilesName.slice()
162+
var SizeList=[]
163+
var file = document.getElementById("exercise_files")
164+
for (var i = 0; i < file.files.length; i++) {
165+
filename = file.files[i].name
166+
if(totalList.indexOf(filename) === -1) {
167+
totalList.push(filename.trim())
168+
SizeList.push(file.files[i].size)
169+
}
170+
}
171+
document.getElementById("exercise_fileList").value = totalList.toString()
172+
applyHideAndShow()
173+
createTextAndButton(totalList,SizeList)
174+
});
175+
176+
177+
applyHideAndShow()
178+
createTextAndButton(oldfilesName,"old")

app/assets/stylesheets/custom.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ html, body { height: 100%; }
1818
padding-left: 0px;
1919
padding-right: 0px;
2020
}
21-
.content, .maincol {
22-
padding-bottom: 40px;
21+
.content .inner, .maincol {
22+
padding-bottom: 60px;
2323
}
2424
.content {
2525
h1.left-padded {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
img {
2+
3+
max-width: 58%;
4+
height: auto;
5+
}
6+
7+
.image-upload > input
8+
{
9+
display: none;
10+
}
11+
12+
.image-upload > label{
13+
cursor:pointer;
14+
padding-left: 1em;
15+
16+
}
17+
18+
.hidden
19+
{
20+
display: none;
21+
}
22+
23+
.iconpadding
24+
{
25+
padding-left: 1em;
26+
27+
}

0 commit comments

Comments
 (0)