Commit 56cb8903 by Arturo Montejo Ráez

Merge branch 'develop' into issue611

parents eadd39f9 3d67429d
package com.yottacode.pictogram.dao; package com.yottacode.pictogram.dao;
import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.util.Log; import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.widget.TextView;
import com.yottacode.pictogram.action.VocabularyAction; import com.yottacode.pictogram.action.VocabularyAction;
import com.yottacode.pictogram.net.PictoUploader; import com.yottacode.pictogram.net.PictoUploader;
...@@ -24,9 +13,6 @@ import com.yottacode.pictogram.tools.PCBcontext; ...@@ -24,9 +13,6 @@ import com.yottacode.pictogram.tools.PCBcontext;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/** /**
* A object which represents a pictogram * A object which represents a pictogram
...@@ -77,9 +63,11 @@ public class Picto extends Img { ...@@ -77,9 +63,11 @@ public class Picto extends Img {
private JSONObject attributes; private JSONObject attributes;
private String translation; private String translation;
private boolean is_mirror=false; private boolean is_mirror=false;
private boolean highlight_background=false;
public boolean is_mirror() {return is_mirror;} public boolean is_mirror() {return is_mirror;}
public void set_mirror(boolean is_mirror) { public boolean is_highlight_background() {return highlight_background;}
public void set_mirror(boolean is_mirror, boolean highlight_background) {
this.highlight_background =highlight_background;
this.is_mirror=is_mirror;} this.is_mirror=is_mirror;}
public Picto(int id, String url, String translation, int cat, int row, int column, int freeRow, int freeColumn) throws JSONException { public Picto(int id, String url, String translation, int cat, int row, int column, int freeRow, int freeColumn) throws JSONException {
...@@ -268,11 +256,13 @@ public class Picto extends Img { ...@@ -268,11 +256,13 @@ public class Picto extends Img {
* @return the legend of a picto (none | normal | full) * @return the legend of a picto (none | normal | full)
*/ */
public String get_legend() { public String get_legend() {
String legend;
try { try {
return this.attributes.getString(JSON_ATTTRS.LEGEND); legend=this.attributes.getString(JSON_ATTTRS.LEGEND);
} catch (JSONException e) { } catch (JSONException e) {
return "none"; // By default legend=JSON_ATTTR_LEGEND_VALUES.NONE; // By default
} }
return legend.equalsIgnoreCase("null") ? JSON_ATTTR_LEGEND_VALUES.NONE : legend;
} }
/** /**
...@@ -401,131 +391,4 @@ public class Picto extends Img { ...@@ -401,131 +391,4 @@ public class Picto extends Img {
PCBcontext.getPcbdb().modifyPicto(this.get_id(), this.get_json_attrs()); PCBcontext.getPcbdb().modifyPicto(this.get_id(), this.get_json_attrs());
} }
} }
/**
* override method that draw the legend on the picto bitmap
*/
@Override
public Bitmap get_bitmap(Context context) throws IOException {
if (bitmap == null) {
File file = file(context);
if (file.exists()) {
FileInputStream is = new FileInputStream(file);
this.bitmap = BitmapFactory.decodeStream(is);
is.close();
}
}
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
int width = bitmap.getWidth(); //Ancho original
int height = bitmap.getHeight(); //Alto original
int dens = bitmap.getDensity();
if(!get_legend().equals(JSON_ATTTR_LEGEND_VALUES.NONE)){
String texto = this.translation.toUpperCase();
String[] words = texto.split(" ");
StringBuffer txt = new StringBuffer();
if (words.length == 1) {
if (words[0].length() > 10) {
texto = "";
int mitad = (words[0].length() / 2) - 1;
char r = words[0].charAt(mitad);
char r2 = words[0].charAt(mitad + 1);
while ((r2 == 'A' || r2 == 'E' || r2 == 'I' || r2 == 'O' || r2 == 'U') && (r != 'A' || r != 'E' || r != 'I' || r != 'O' || r != 'U')) {
mitad++;
r = words[0].charAt(mitad);
r2 = words[0].charAt(mitad + 1);
}
int i = 0;
while (i <= mitad) {
txt.append(words[0].charAt(i));
i++;
}
int diff = 10 - mitad;
diff -= 1;
txt.append("-");
while (diff != 10) {
txt.append(" ");
diff++;
}
while (i < words[0].length()) {
txt.append(words[0].charAt(i));
i++;
}
texto = txt.toString();
}
}
if(get_legend().equals(JSON_ATTTR_LEGEND_VALUES.NORMAL)) { //Normal legend
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
if(cont == 0) {
Bitmap bm = Bitmap.createScaledBitmap(bitmap, width / 2, height / 2, false);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); //Poner en blanco el bitmap original para dibujar encima
canvas.drawBitmap(bm, 25, 0, paint);
cont++;
TextView textView = new TextView(context);
textView.layout(0, 50, 100, 100);
textView.setPadding(0, 0, 0, 0);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 13);
textView.setTextColor(Color.BLACK);
textView.setBackgroundColor(Color.WHITE);
textView.setWidth(100);
textView.setGravity(Gravity.CENTER_HORIZONTAL);
textView.setMaxLines(4);
textView.setText(texto);
textView.setDrawingCacheEnabled(true);
canvas.drawBitmap(textView.getDrawingCache(), 0, 50, null);
}
}else{
//Only legend
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
paint.setColor(Color.WHITE);
canvas.drawRect(0,0,100,100,paint);
TextView textView = new TextView(context);
textView.layout(0, 0, 100, 100);
textView.setPadding(0, 0, 0, 0);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 13);
textView.setTextColor(Color.BLACK);
textView.setWidth(100);
textView.setGravity(Gravity.CENTER_HORIZONTAL);
textView.setMaxLines(2);
textView.setText(texto);
textView.setDrawingCacheEnabled(true);
canvas.drawBitmap(textView.getDrawingCache(), 0, 25, null);
}
}
return bitmap;
}
} }
...@@ -54,7 +54,7 @@ public class TTSHelper { ...@@ -54,7 +54,7 @@ public class TTSHelper {
Set<Voice> voices = this.ttobj.getVoices(); Set<Voice> voices = this.ttobj.getVoices();
if (voices!=null) if (voices!=null)
for (Voice avoice : voices) { for (Voice avoice : voices) { Log.i(context.getApplicationInfo().processName,"Voice "+avoice+" available");
if (avoice.getName().equalsIgnoreCase(voice)) { if (avoice.getName().equalsIgnoreCase(voice)) {
this.ttobj.setVoice(avoice); this.ttobj.setVoice(avoice);
this.voice_ok=true; this.voice_ok=true;
......
package com.yottacode.pictogram.tabletlibrary.gui; package com.yottacode.pictogram.tabletlibrary.gui;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.TextView;
import com.yottacode.pictogram.dao.Picto; import com.yottacode.pictogram.dao.Picto;
import com.yottacode.pictogram.tabletlibrary.R; import com.yottacode.pictogram.tabletlibrary.R;
...@@ -22,6 +31,130 @@ public class PictoItemViewGenerator { ...@@ -22,6 +31,130 @@ public class PictoItemViewGenerator {
public static final int LAYOUT = R.layout.picto_grid_item; public static final int LAYOUT = R.layout.picto_grid_item;
public static final int LAYOUT_BIG = R.layout.picto_grid_item_big; public static final int LAYOUT_BIG = R.layout.picto_grid_item_big;
public static int mirror_color=0; public static int mirror_color=0;
/**
*
* @param picto Pictogram to set the legend text
* @return the text modified
*/
private static String format_legend(Picto picto) {
String texto=picto.get_translation().toUpperCase();
String[] words = texto.split(" ");
StringBuffer txt = new StringBuffer();
if (words.length == 1) {
if (words[0].length() > 10) {
texto = "";
int mitad = (words[0].length() / 2) - 1;
char r = words[0].charAt(mitad);
char r2 = words[0].charAt(mitad + 1);
while ((r2 == 'A' || r2 == 'E' || r2 == 'I' || r2 == 'O' || r2 == 'U') && (r != 'A' || r != 'E' || r != 'I' || r != 'O' || r != 'U')) {
mitad++;
r = words[0].charAt(mitad);
r2 = words[0].charAt(mitad + 1);
}
int i = 0;
while (i <= mitad) {
txt.append(words[0].charAt(i));
i++;
}
int diff = 10 - mitad;
diff -= 1;
txt.append("-");
while (diff != 10) {
txt.append(" ");
diff++;
}
while (i < words[0].length()) {
txt.append(words[0].charAt(i));
i++;
}
texto = txt.toString();
}
}
return texto;
}
/**
* @param context
* @param bitmap Bitmap to add the legend and rescale
* @param picto
* @return the bitmap scaled and with the legend or without changes
*/
private static Bitmap set_legend(Context context,Bitmap bitmap,Picto picto) {
{
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
int width = bitmap.getWidth(); //Ancho original
int height = bitmap.getHeight(); //Alto original
String texto = format_legend(picto);
if(picto.get_legend().equals("normal")) { //Normal legend
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
Bitmap bm = Bitmap.createScaledBitmap(bitmap, width / 2, height / 2, false);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); //Poner en blanco el bitmap original para dibujar encima
canvas.drawBitmap(bm, 25, 0, paint);
TextView textView = new TextView(context);
textView.layout(0, 50, 100, 100);
textView.setPadding(0, 0, 0, 0);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 13);
textView.setTextColor(Color.BLACK);
textView.setBackgroundColor(Color.WHITE);
textView.setWidth(100);
textView.setGravity(Gravity.CENTER_HORIZONTAL);
textView.setMaxLines(4);
textView.setText(texto);
textView.setDrawingCacheEnabled(true);
canvas.drawBitmap(textView.getDrawingCache(), 0, 50, null);
}else{
//Only legend
android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
if (bitmapConfig == null) {
bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
}
bitmap = bitmap.copy(bitmapConfig, true);
Canvas canvas = new Canvas(bitmap);
paint.setColor(Color.WHITE);
canvas.drawRect(0,0,100,100,paint);
TextView textView = new TextView(context);
textView.layout(0, 0, 100, 100);
textView.setPadding(0, 0, 0, 0);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 13);
textView.setTextColor(Color.BLACK);
textView.setWidth(100);
textView.setGravity(Gravity.CENTER_HORIZONTAL);
textView.setMaxLines(2);
textView.setText(texto);
textView.setDrawingCacheEnabled(true);
canvas.drawBitmap(textView.getDrawingCache(), 0, 25, null);
}
}
return bitmap;
}
public static View getPictoView(Picto picto, View convertView, ViewGroup parent) { public static View getPictoView(Picto picto, View convertView, ViewGroup parent) {
return getPictoView(picto, convertView, parent, false); return getPictoView(picto, convertView, parent, false);
} }
...@@ -68,7 +201,13 @@ public class PictoItemViewGenerator { ...@@ -68,7 +201,13 @@ public class PictoItemViewGenerator {
} }
try { try {
pictoImage.setImageBitmap(picto.get_bitmap(PCBcontext.getContext()));
Bitmap bm = picto.get_bitmap(PCBcontext.getContext());
if(!picto.get_legend().equals("none")) {
bm = set_legend(PCBcontext.getContext(),bm,picto);
}
pictoImage.setImageBitmap(bm);
if (!picto.is_invisible() || PCBcontext.getPcbdb().getCurrentUser().is_supervisor()) { if (!picto.is_invisible() || PCBcontext.getPcbdb().getCurrentUser().is_supervisor()) {
layoutWrapper.setVisibility(View.VISIBLE); layoutWrapper.setVisibility(View.VISIBLE);
pictoImage.setVisibility(View.VISIBLE); pictoImage.setVisibility(View.VISIBLE);
...@@ -95,7 +234,7 @@ public class PictoItemViewGenerator { ...@@ -95,7 +234,7 @@ public class PictoItemViewGenerator {
mirror_color++; mirror_color++;
pictoImage.setScaleX(scale[mirror_color%scale.length]); pictoImage.setScaleX(scale[mirror_color%scale.length]);
pictoImage.setScaleY(scale[mirror_color%scale.length]); pictoImage.setScaleY(scale[mirror_color%scale.length]);
// layout.setBackgroundColor(color[mirror_color%color.length]); if (picto.is_highlight_background()) layout.setBackgroundColor(color[mirror_color%color.length]);
} }
} }
} catch (IOException e) { } catch (IOException e) {
......
...@@ -132,7 +132,7 @@ public class PictogramActivity extends Activity implements iVocabularyListener { ...@@ -132,7 +132,7 @@ public class PictogramActivity extends Activity implements iVocabularyListener {
public void action(action action, int picto_cat, int picto_id) { public void action(action action, int picto_cat, int picto_id) {
Log.i(this.getClass().getCanonicalName(), action + " from " + picto_cat + "," + picto_id + " catched"); Log.i(this.getClass().getCanonicalName(), action + " from " + picto_cat + "," + picto_id + " catched");
Picto picto = vocabulary.get_picto(picto_cat, picto_id); Picto picto = vocabulary.get_picto(picto_cat, picto_id);
PictogramActivity.this.execHighligthFeeback(picto); PictogramActivity.this.execHighligthFeeback(picto, true);
} }
}); });
this.vocabulary.setImgDownloaderListener(new iImgDownloaderListener() { this.vocabulary.setImgDownloaderListener(new iImgDownloaderListener() {
...@@ -724,12 +724,13 @@ public class PictogramActivity extends Activity implements iVocabularyListener { ...@@ -724,12 +724,13 @@ public class PictogramActivity extends Activity implements iVocabularyListener {
if (PictogramActivity.this.feedback_read)
PictogramActivity.this.tts.play(p.get_translation());
if ( p != null && p.get_id() != 0 && !p.is_invisible() && p.is_enabled()) { if ( p != null && p.get_id() != 0 && !p.is_invisible() && p.is_enabled()) {
Log.d(LOG_TAG, "Clic en picto: " + p.toString()); Log.d(LOG_TAG, "Clic en picto: " + p.toString());
p.set_mirror(false); if (PictogramActivity.this.feedback_read && !p.is_category())
PictogramActivity.this.tts.play(p.get_translation());
p.set_mirror(false,false);
LinkedList<Picto> ll = sort(PCBcontext.getVocabulary().next(p)); LinkedList<Picto> ll = sort(PCBcontext.getVocabulary().next(p));
//LinkedList<Picto> ll = vocabulary.next(p); //LinkedList<Picto> ll = vocabulary.next(p);
Log.d(LOG_TAG, "Lista de pictos recuperada: " + ll.toString()); Log.d(LOG_TAG, "Lista de pictos recuperada: " + ll.toString());
...@@ -754,18 +755,18 @@ public class PictogramActivity extends Activity implements iVocabularyListener { ...@@ -754,18 +755,18 @@ public class PictogramActivity extends Activity implements iVocabularyListener {
showPictoMainGridView(); showPictoMainGridView();
PCBcontext.getActionLog().log(new TalkAction(TalkAction.ADD, p)); PCBcontext.getActionLog().log(new TalkAction(TalkAction.ADD, p));
if (PictogramActivity.this.feedback_read) PictogramActivity.this.tts.play(p.get_translation()); if (PictogramActivity.this.feedback_read) PictogramActivity.this.tts.play(p.get_translation());
if (PictogramActivity.this.feedback_highlight) execHighligthFeeback(p); if (PictogramActivity.this.feedback_highlight) execHighligthFeeback(p,false);
} }
private void execHighligthFeeback(final Picto picto) { private void execHighligthFeeback(final Picto picto,boolean highlight_background) {
boolean same_picto = false; boolean same_picto = false;
picto.set_mirror(true); //comienza feedback picto.set_mirror(true,highlight_background); //comienza feedback
if (exec_mirror != null) { //se cancela ejecución del feedbcack anterior, si lo hay if (exec_mirror != null) { //se cancela ejecución del feedbcack anterior, si lo hay
exec_mirror.shutdown(); exec_mirror.shutdown();
exec_mirror = null; exec_mirror = null;
} }
if (prev_picto != null) { //se cancela marca de feedback del anterior, si lo hay if (prev_picto != null) { //se cancela marca de feedback del anterior, si lo hay
prev_picto.set_mirror(false); prev_picto.set_mirror(false,false);
same_picto=prev_picto == picto; same_picto=prev_picto == picto;
} }
if (same_picto) if (same_picto)
...@@ -781,7 +782,7 @@ public class PictogramActivity extends Activity implements iVocabularyListener { ...@@ -781,7 +782,7 @@ public class PictogramActivity extends Activity implements iVocabularyListener {
public void run() { public void run() {
refresh(); refresh();
if (repeating++ == 20) { if (repeating++ == 20) {
picto.set_mirror(false); picto.set_mirror(false,false);
if (exec_mirror != null) { if (exec_mirror != null) {
exec_mirror.shutdown(); exec_mirror.shutdown();
exec_mirror = null; exec_mirror = null;
......
...@@ -39,16 +39,39 @@ ...@@ -39,16 +39,39 @@
--> -->
<li class="list-group-item"> <li class="list-group-item">
<label translate>legend</label> <div class="row">
<div class="checkbox"> <div class="col-md-12">
<select class="form-control" data-toggle="toggle" ng-model="studentPicto.attributes.legend" ng-change="update_properties()"> <label translate>legend</label><br/>
<option value="none" selected>Sin leyenda</option> <!-- <div class="checkbox">
<option value="normal">Leyenda normal</option> <select class="form-control" data-toggle="toggle" ng-model="studentPicto.attributes.legend" ng-change="update_properties()">
<option value="full">Solo leyenda</option> <option value="none" selected>Sin leyenda</option>
</select> <option value="normal">Leyenda normal</option>
<option value="full">Solo leyenda</option>
</select>
</div> -->
<input type="radio" ng-model="studentPicto.attributes.legend" value="none" ng-change="update_properties()">
Sin leyenda
<br/>
<input type="radio" ng-model="studentPicto.attributes.legend" value="normal" ng-change="update_properties()">
Leyenda normal
<br/>
<input type="radio" ng-model="studentPicto.attributes.legend" value="full" ng-change="update_properties()">
Solo leyenda
</div>
</div>
<hr>
<div class="row">
<div class="col-md-6">
<input type="checkbox">
Aplicar a todos los pictogramas
</div>
<div class="col-md-6">
<div class="form-group text-center">
<button type="submit" class="btn btn-primary ng-scope" ng-click="">Aplicar</button>
</div>
</div>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
<!-- End modal-body --> <!-- End modal-body -->
......
...@@ -45,7 +45,8 @@ ...@@ -45,7 +45,8 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<select class="form-control" name="student_gender" id="student_gender" ng-model="formUser.gender" required> <select class="form-control" name="student_gender" id="student_gender" ng-model="formUser.gender" required>
<option value="F" selected translate>woman</option> <option value=" ">&nsp;</option>
<option value="F" translate>woman</option>
<option value="M" translate>man</option> <option value="M" translate>man</option>
</select> </select>
</div> </div>
...@@ -59,7 +60,7 @@ ...@@ -59,7 +60,7 @@
</div> </div>
</fieldset> </fieldset>
<fieldset> <fieldset ng-if="studentData.supervision != 1">
<legend translate>notes</legend> <legend translate>notes</legend>
<div class="form-group"> <div class="form-group">
<textarea class="form-control" name="student_notes" id="student_notes" ng-model="formUser.notes" rows="5"></textarea> <textarea class="form-control" name="student_notes" id="student_notes" ng-model="formUser.notes" rows="5"></textarea>
...@@ -87,7 +88,7 @@ ...@@ -87,7 +88,7 @@
<!-- Parte derecha: Tutores y dispositivos --> <!-- Parte derecha: Tutores y dispositivos -->
<div class="col-md-6"> <div class="col-md-6">
<!-- Supervisores (terapeutas) del alumno --> <!-- Supervisores (terapeutas) del alumno -->
<div id="student_sups"> <div id="student_sups" ng-if="studentData.supervision != 1">
<h3 translate>supervisors</h3> <h3 translate>supervisors</h3>
<!-- Buscador de supervisores --> <!-- Buscador de supervisores -->
<p> <p>
...@@ -127,7 +128,7 @@ ...@@ -127,7 +128,7 @@
<!-- Fin de id student-sups --> <!-- Fin de id student-sups -->
<!-- Tutores (Padres) --> <!-- Tutores (Padres) -->
<div id="student_tutors"> <div id="student_tutors" ng-if="studentData.supervision != 1">
<h3>{{ 'tutors' | translate }}</h3> <h3>{{ 'tutors' | translate }}</h3>
<!-- Buscador de tutores --> <!-- Buscador de tutores -->
<p> <p>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<!-- Add Student button and Search row --> <!-- Add Student button and Search row -->
<div class="row"> <div class="row">
<div class="col-xs-3"> <div class="col-xs-3">
<p class="text-left" ng-hide="!user.isSupAdmin || !num_licenses_left || !hidestudentadd"> <p class="text-left" ng-hide="!user.isSupAdmin || !hidestudentadd">
<a ng-click="resetForm(); hidestudentadd = false" class="btn btn-success btn-sm" role="button"> <a ng-click="resetForm(); hidestudentadd = false" class="btn btn-success btn-sm" role="button">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span> {{ 'add_student' | translate }} <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> {{ 'add_student' | translate }}
</a> </a>
...@@ -60,9 +60,8 @@ ...@@ -60,9 +60,8 @@
<span class="btn btn-default btn-lg" role="button" alt="{{ 'reports' | translate}}" popover="{{ 'reports' | translate}}" popover-trigger="mouseenter" ng-if="student.supervision == 1"><span class="glyphicon glyphicon-file" aria-hidden="true" style="color: #bbb"></span></span> <span class="btn btn-default btn-lg" role="button" alt="{{ 'reports' | translate}}" popover="{{ 'reports' | translate}}" popover-trigger="mouseenter" ng-if="student.supervision == 1"><span class="glyphicon glyphicon-file" aria-hidden="true" style="color: #bbb"></span></span>
<a class="btn btn-default btn-lg" role="button" href="/app/#/student/{{student.id}}/setup" alt="{{ 'setup' | translate}}" popover="{{ 'setup' | translate}}" popover-trigger="mouseenter" ng-if="student.supervision != 1"><span class="glyphicon glyphicon-cog" aria-hidden="true"></span></a> <a class="btn btn-default btn-lg" role="button" href="/app/#/student/{{student.id}}/setup" alt="{{ 'setup' | translate}}" popover="{{ 'setup' | translate}}" popover-trigger="mouseenter"><span class="glyphicon glyphicon-cog" aria-hidden="true"></span></a>
<span class="btn btn-default btn-lg" role="button" alt="{{ 'setup' | translate}}" popover="{{ 'setup' | translate}}" popover-trigger="mouseenter" ng-if="student.supervision == 1"><span class="glyphicon glyphicon-cog" aria-hidden="true" style="color: #bbb"></span></span>
</td> <!-- /BUTTONS --> </td> <!-- /BUTTONS -->
<td> <td>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment