From 6a088d76a599a96d1b92af9fa0917c315bca0afa Mon Sep 17 00:00:00 2001 From: Hironsan Date: Wed, 27 Jun 2018 11:07:13 +0900 Subject: [PATCH] Replace LabelAPI in project_admin --- doccano/app/db.sqlite3 | Bin 196608 -> 196608 bytes doccano/app/server/static/project_admin.js | 119 ++++----------------- doccano/app/server/views.py | 5 + 3 files changed, 27 insertions(+), 97 deletions(-) diff --git a/doccano/app/db.sqlite3 b/doccano/app/db.sqlite3 index 848dfb1738d562206d1319d9e569106cb682a096..01642c63ebfadccd8ae7d083faba2c3844670466 100644 GIT binary patch delta 5549 zcmcgwZERcB8NSz!lQ@li5};!f1rFJusYqNqj_o9%K}O4(LLgfzAr_VP*gm#zZQq;T zd)?G6a9e1lF;)rawlEY(A5xiy`eQJJCRMO$v=z`)@B;yp5Yj%hJ@2`W z`#}e#KTy*X$M<}^AJ6-|&$&Bxbne*E`M@Q*`QWk}LZ;ULAA5iP*Oy=1$tKyi*;DLg zb~o#053)_skJ+{C+PN#@2cmlq$1-aUYi)XdQ&(s3O5Kt67HMy&h^(wcFA4*wsy?v8~=Ox6VqMzd2YI;>*<#3^^LrnJ)*I<*r)6x z_5u3~dyO4}+b^&=_Ivg;`xSd+KKi&mqjvjldpB*=-layS#;6)2YV1_w5;b{T562lf&>!1l9!@ZcVnX$gk) zZW_91U^GN&h|thU!x9=gXb98LPD9)LdoSx(bY0aQHZ*pS?P6Awt#2QQCx-gt z>HdMm^u<%L)NnF0l-%CsHBTQL7p_yw3&R$CjbQ^PdBJCJJdWWN%g%GFz;7*!ZK7=O z8-(Ll&g=BdNNOmS7#@tL<9D*K<}pY4o?K^@Yeg|5_?WBIt@Cjn$0uTmcqToZ+8%}Po*()F9A8INtwO=b8KP3DbM*}$m#%G1TNT4m zA-7CPVW5zl-|48FRAwliNZuL2>5lGE;uDi4!`yag4uqUpBYIcWATCbz+iGyCyuX&uO4aOj`yC}|JaEiKi|iDvZCG(7O;hxlRbpE z9_hF>Vb^eoX(?k9cpLi~A3xW0_=pIFa7j+My0OJ8XIv4$dvi zKgt)LIk52JJT@05na-05I$$uV4p1j1`pzYT-kH^t9*HMoLqqY@UjSOUB@nj;INnFzgU}f|O;cB$mZn%}*By%qBO|1yFoxw+`k$8eo86Qjy zw_@?d3Obo_)LMON{;8w-9eOmx-am!A!O?FrMY|!Q-Myb2yKuhcWBr1O7Pgy}@$?6* z|C`Z}cI74EY0KCooP2?PH$HYpLfWNE!zHUI>Axw<*6hQ#2JUWQPp}8Ec!piph3
    sr_mb_A1NV5(F2 zEoAnH7g!z*g|b>?S;v)a548R^ltnLiIOyF|4u!Pcw};UO&Z8c`yj$>sWmmzarl=|! zQxq4Q8d%TAToA73bG;*lOC&dK&0sE;D7tI%vx7L)OySBtK2tJsC2rR$=u-;kynx2V z6X|%8yB1FjrH5jCRm~>WQb?bcwqfPLq%JSoa)u^lWzHgNzyV%^Su4UWf^v8c%qJag zn96_|%dVguq79U20hWRjYjzf6u2yktw&Xd`mb77vgnP#HJMq#~wm3(YbIkov&PFQQQLNePWyuJH*4#>IA?NV{H1 zA*g28W08(X#~Rg(vxLO5Y0a3b6tdC>v*ZPVE^O2CW@-4+r4JK*&C&>6^ZDdr=@9sK zUl0swKUp4bJ{|MUS^4-1q`9(Ll4OnYcd<5Qp#a)7wnzw?&($fZnC}S}LXOr=O0R4b zMM*&aA&w~GIIo#5Ix)=~m&PW8{}92jY;}Q9b5wyh1e+t3UiDd{u|XfVWlrLF6z((# z)pY58K?-J3#Q77Gs2MZwagog%IZz9v9ubLBW5|NCCe_EY=$N*w3d6(Ic3WJ`%W8BqSVb4vb21#7t4 zkwVj8ex>7Yv9ciWqEKYI&Z=9kRW%STFE8tsQ!-+^-9SjYzf92lilTThgD6SD9QgR8 zIX-P8?OBOzkcT-jZMcZ3Lq$rRVmLPCW!6s(t>^3T`1>|eiEt_l_$dBrTzGgD5k=ys zYZU~QBb~lHchLrfns!RJh)oTv)&~FS%*Dn=pI2AWi_qFm7K~f+WK*s2qJ^uq>7x}b zhnC!;@(!C<8Pbh4OvBayB0auIm@X1(%cANz{+A9!UPUMx$n{0v6FpXtj0jAwh%{7@Xe>)eNJRcht{;YL|L7DF?Nnkv~zOG%ZHc zXNf9ehc1nsRK(G#n@6a!zKIa0$`t%@4Hbi1qQOID`ZmK5TlzjI=N6-V@-}wTUBv{r zP$qrOprfF1ias^dUk&K{QJQF?Q$@6C7;v!8qd3NP3mxEJ9X^jc8BZs1O{PrcYBn5j z`GieAjTOYVg!!bEHyc?`+Jr7ywQ|Ikl{04? zPd1|e11#zl1L9Q@TWA~Xo3&88KF)7b8uT^tibUzqnTdhZ4a+FSfNH8B zGvFo%b>8G~TTWL*4h!M=?Reo~@f*Eb8Sh{ERJHhaz*RxHAsGyW7SPPj2%Ligw-9NA zniPIu@1bTQ*ZA6g%@xi;q%-@8;`2jZ4veI zt~Jm`x2x6zj|W)nfYC>2X+KHg6tuU&9k@JL%1gGVk^EA z9M`{W%OFjf{psrgKKu7$ffd-}NsYbBUSUsSk6*CMFAI+9{v9*ZpZMIt!P!?n3XJ;i kEI(t%*>Nm-lPzm+Z`HK0t_K2$L|6-l^*~#z`YIg!A3ahB!vFvP delta 571 zcmZWk-%C?*9Q}U3_wMfAvE6f*nnHpbv%rTo#UCRXWCbBfB=`qxS2l)Y?v82ElU-tu z5y=L(o{EBc=t1g&_f4riR1e~d(L<@!3^cOYAd?L0>sU|0hcAcE`J8jU$27gB>AiD; zj?H&oaE+00$LnXwM_ug-CJ@47EMpFStRbWBA%>V8>|In#YvJhVZQ`cMjOGXWIgyOjy2Iics$MqE!$PvzoSBP}6A+Kvg4f2VpbXUyueQ%25Jnux?YcS(ml z^PiX0E(-nB`aVrtN=uRBrTIv!y&d^%_=f_$XNCs`hx-P@(P-b$K)=0l|I~;~aY%58 zU$#H71FtA3RCFD^E{{zUf4Uy#H9pVtqV_}_p$SdGI>8Uru!D6jt8&>Jl*Ttj>*E3q zak@(I8$VIUF18!=DxB&v4QiUCmI;jjyKq)oYa zHLc6^2#p%)l!p+~EWXcuzQEHc-srvffQbQ_`HDn+=_~S2UiUf06=pJ-!69()fh(Ru s>=rIl>(&YjSnoGk4<{=GpHShX1FKSF=Ol^)f&;$z23c}RgeZ#g7cDrklK=n! diff --git a/doccano/app/server/static/project_admin.js b/doccano/app/server/static/project_admin.js index e38b248c..1bcd65cc 100644 --- a/doccano/app/server/static/project_admin.js +++ b/doccano/app/server/static/project_admin.js @@ -1,26 +1,17 @@ axios.defaults.xsrfCookieName = 'csrftoken'; axios.defaults.xsrfHeaderName = 'X-CSRFToken'; var base_url = window.location.href.split('/').slice(3, 5).join('/'); - - -function swap(values) { - var ret = {}; - for (var item of values) { - ret[item['text']] = item['id']; - } - return ret; -}; +const HTTP = axios.create({ + baseURL: `/api/${base_url}/`, +}) var vm = new Vue({ el: '#root', delimiters: ['[[', ']]'], data: { - todos: [], labels: [], file: null, file_name: '', - newTodo: '', - editedTodo: null, newLabel: '', newShortcut: '', total: 0, @@ -50,95 +41,29 @@ var vm = new Vue({ }, addLabel: function () { var payload = { - 'text': this.newLabel, - 'shortcut': this.newShortcut + text: this.newLabel, + shortcut: this.newShortcut }; - var self = this; - axios.post('/' + base_url + '/apis/labels', payload) - .then(function (response) { - console.log('post data'); - self.newShortcut = ''; - self.newLabel = ''; - self.labels.push(response.data); - }) - .catch(function (error) { - console.log('ERROR!! happend by Backend.') - }); + HTTP.post('labels/', payload).then(response => { + this.newLabel = ''; + this.newShortcut = ''; + this.labels.push(response.data); + }) }, removeLabel: function (index) { - var payload = this.labels[index]; - var self = this; - axios.delete('/' + base_url + '/apis/labels', { - data: payload - }) - .then(function (response) { - self.labels.splice(index, 1); - console.log('delete data'); - }) - .catch(function (error) { - console.log('ERROR!! happend by Backend.') - }); - }, - addTodo: function () { - var value = this.newTodo && this.newTodo.trim(); - if (!value) { - return - } - this.todos.push({ - title: value, + var label_id = this.labels[index].id; + HTTP.delete(`labels/${label_id}`).then(response => { + this.labels.splice(index, 1) }) - this.newTodo = '' - }, - removeTodo: function (todo) { - this.todos.splice(this.todos.indexOf(todo), 1) - }, - - editTodo: function (todo) { - this.beforeEditCache = todo.title - this.editedTodo = todo - }, - doneEdit: function (todo) { - if (!this.editedTodo) { - return - } - this.editedTodo = null - todo.title = todo.title.trim() - if (!todo.title) { - this.removeTodo(todo) - } - }, - cancelEdit: function (todo) { - this.editedTodo = null - todo.title = this.beforeEditCache - }, + } }, created: function () { - var self = this; - axios.get('/' + base_url + '/apis/labels') - .then(function (response) { - self.labels = response.data['labels']; - console.log(self.labels); - }) - .catch(function (error) { - console.log('ERROR!! happend by Backend.') - }); - axios.get('/' + base_url + '/apis/progress') - .then(function (response) { - console.log(response.data); - self.total = response.data['total']; - self.remaining = response.data['remaining']; - console.log(self.total); - console.log(self.remaining); - }) - .catch(function (error) { - console.log('ERROR!! happend by Backend.') - }); - }, - directives: { - 'todo-focus': function (el, binding) { - if (binding.value) { - el.focus() - } - } + HTTP.get('labels').then(response => { + this.labels = response.data + }) + HTTP.get('progress').then(response => { + this.total = response.data['total']; + this.remaining = response.data['remaining']; + }) } -}); \ No newline at end of file +}) \ No newline at end of file diff --git a/doccano/app/server/views.py b/doccano/app/server/views.py index a6c58237..98ecd928 100644 --- a/doccano/app/server/views.py +++ b/doccano/app/server/views.py @@ -212,6 +212,11 @@ class ProjectLabelsAPI(generics.ListCreateAPIView): return queryset + def perform_create(self, serializer): + project_id = self.kwargs['project_id'] + project = get_object_or_404(Project, pk=project_id) + serializer.save(project=project) + class ProjectLabelAPI(generics.RetrieveUpdateDestroyAPIView): queryset = Label.objects.all()