Changeset 5777


Ignore:
Timestamp:
Sep 7, 2017, 12:54:10 PM (2 years ago)
Author:
joamuran
Message:

release 0.4

Location:
classroom-assembly/trunk/fuentes
Files:
132 added
15 edited

Legend:

Unmodified
Added
Removed
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/components/classmates/classmates.css

    r5035 r5777  
    8888/*  Drawing Component */
    8989
    90 .emptySchool{
    91     background: url("/components/classmates/img/school.png");
    92     background-size: contain;
    93     background-repeat: no-repeat;
    94     background-position: center;
    95    
    96        
    97 }
     90.emptySchool, .emptySchool.editable{
     91    background-image: url("/components/classmates/img/school.png");
     92    background-size: contain;
     93    background-repeat: no-repeat;
     94    background-position: center;
     95}
     96
     97
    9898
    9999.classmatesContainer{
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/components/classmates/classmates.js

    r5035 r5777  
    33    this.icon="components/componentIcons/classmates.png";
    44    this.items2Delete=[];
     5    this.componentname="classmates";
    56   
    67}
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/components/component.js

    r5035 r5777  
    5252};
    5353
     54Component.prototype.cleanImage=function cleanImage(itemclicked, componentname){
     55    var self=this;
     56   
     57    try{
     58        var fs=require("fs");
     59        var css=require("css");
     60        var selector="."+itemclicked;
     61       
     62       
     63        // Getting path for custom library
     64        //console.log("self.configDir:"+self.configDir);
     65       
     66        var customConfigDir=self.configDir+"/.customCSS";
     67        var mycssfile=customConfigDir+"/"+componentname+".css";
     68       
     69        // Check if there is custom CSS file
     70        var content="";
     71        if (fs.existsSync(mycssfile)){ // Read css file
     72            content=(fs.readFileSync(mycssfile)).toString();
     73        }
     74        var ast = css.parse(content);
     75           
     76        // Creating a new array to delete this selector
     77        var newArray=[];
     78        var selectorhover="."+componentname+"SelectIcon"+selector+":hover";
     79       
     80        for (index in ast.stylesheet.rules){
     81            var sel=ast.stylesheet.rules[index].selectors[0];
     82            if (sel!=selector && sel!=selectorhover ) newArray.push(ast.stylesheet.rules[index]);
     83        }
     84        ast.stylesheet.rules=newArray;
     85           
     86        // css object to string
     87        var res=css.stringify(ast);
     88       
     89        // Store new array to file               
     90        fs.writeFileSync(mycssfile, res);
     91       
     92        // Apply new styles with a reload of them
     93        appGlobal.setCustomCSS();
     94               
     95    } catch (err){
     96            console.log(err);
     97    }
     98   
     99}
     100
     101
     102Component.prototype.changeImage=function changeImage(itemclicked, componentname){
     103    var self=this;
     104       
     105       
     106    var fileselector=$(document.createElement("input")).attr("id", "fileSelector").attr("type", "file").css("display", "none");
     107    $("body").append(fileselector);
     108   
     109    $(fileselector).on("change", function(){
     110            var newImage=this.value;
     111            try{
     112                    var fs=require("fs");
     113                    var css=require("css");
     114                    var selector="."+itemclicked;
     115                   
     116                    // get file Name extension
     117                    var patharray=newImage.split("/");
     118                    var filename=patharray[patharray.length-1];
     119                    var filearray=newImage.split(".");
     120                    var extension=filearray[filearray.length-1];
     121                    filename=itemclicked+"."+extension;
     122                   
     123                    // Getting path for custom library
     124                    //console.log("self.configDir:"+self.configDir);
     125                    //var customConfigDir=self.configDir+"/.customCSS/img/"+filename;
     126                   
     127                    var customConfigDir=self.configDir+"/.customCSS";
     128                    //console.log("customConfigDir:"+customConfigDir);
     129
     130                    // Copy file to custom library
     131                    fs.createReadStream(newImage).pipe(fs.createWriteStream(customConfigDir+"/img/"+filename));                   
     132                   
     133                    var mycssfile=customConfigDir+"/"+componentname+".css";
     134                   
     135                    // Check if there is custom CSS file
     136                    var content="";
     137                    if (fs.existsSync(mycssfile)){ // Read css file
     138                        content=(fs.readFileSync(mycssfile)).toString();
     139                    }
     140                    var ast = css.parse(content);
     141                       
     142                    // Creating a new array to delete duplicates for this selector
     143                    var newArray=[];
     144                    var selectorhover="."+componentname+"SelectIcon"+selector+":hover";
     145                   
     146                    for (index in ast.stylesheet.rules){
     147                        var sel=ast.stylesheet.rules[index].selectors[0];
     148                        if (sel!=selector && sel!=selectorhover ) newArray.push(ast.stylesheet.rules[index]);
     149                    }
     150                    ast.stylesheet.rules=newArray;
     151                   
     152                         
     153                    // Creating new objects
     154                   
     155                    // 1) for selector
     156                    var item=new Object();
     157                    item.type="rule";
     158                    item.selectors=[selector];
     159                    item.declarations=[{type:"declaration", property:"background-image", value:"url(img/"+filename+"?v="+(new Date).getTime()+")"}];
     160                    ast.stylesheet.rules.push(item);
     161                   
     162                    // 2) for selector with hover
     163                    var item=new Object();
     164                    item.type="rule";
     165                    item.selectors=[selectorhover];
     166                    item.declarations=[{type:"declaration", property:"background-image", value:"url(img/"+filename+"?v="+(new Date).getTime()+"), linear-gradient( 0deg, white, white 20%, rgba(255,255,255,0.5));"}];
     167                    ast.stylesheet.rules.push(item);
     168                   
     169                    //3) css object to string
     170                    var res=css.stringify(ast);
     171                   
     172                    // Store new array to file               
     173                    fs.writeFileSync(mycssfile, res);
     174                   
     175                    //$(selector).hide();
     176                   
     177                    // Apply new styles with a reload of them
     178                    appGlobal.setCustomCSS();
     179                   
     180                    /* // 1) Remove previous link
     181                    var link=$("link[title='"+componentname+"']");
     182                    $(link).remove();
     183                    // 2) Create new link
     184                    var style=$(document.createElement("link")).attr("rel", "stylesheet").attr("type",  "text/css").attr("title", componentname);
     185                    $(style).attr("href", "file://"+mycssfile);
     186                    $('head').append(style);*/
     187                   
     188            } catch (err){
     189                    console.log(err);
     190            }
     191    });
     192    $(fileselector).click();
     193
     194}
     195
     196
     197Component.prototype.bindClickForChangeImg=function bindClickForChangeImg(configIconClass){
     198    var self=this;
     199    $("."+configIconClass).on("click", function(event){
     200            event.stopPropagation();
     201           
     202            // Get item clicked
     203            var item=$($(event)[0].target).attr("class").replace("modifyable","").replace(configIconClass,"").split(" ").join("");
     204           
     205            var menu = new nw.Menu();
     206            menu.append(new nw.MenuItem({
     207                label: i18n.gettext('add.new.image'),
     208                click: function(){
     209                    self.changeImage(item, self.componentname);
     210                }
     211            }));
     212           
     213            menu.append(new nw.MenuItem({
     214                label: i18n.gettext('back.to.default.image'),
     215                click: function(){
     216                    self.cleanImage(item, self.componentname);
     217                }
     218                }));
     219            menu.popup(event.clientX, event.clientY);
     220
     221    });
     222
     223}
     224
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/components/month/month.js

    r5035 r5777  
    55    this.name="Month Selector";
    66    this.icon="components/componentIcons/month.png";
     7    this.componentname="month";
    78}
    89
     
    134135        var monthText=i18n.gettext(month);
    135136       
    136         var icon=$(document.createElement("div")).addClass(month).addClass("monthConfigIcon");
     137        var icon=$(document.createElement("div")).addClass(month).addClass("monthConfigIcon modifyable").attr("title", i18n.gettext("click.change.img"));
    137138        var text=$(document.createElement("div")).html(monthText).addClass("monthConfigText");
    138139        /*var selected=$(document.createElement("input")).attr("type","checkbox");*/
     
    155156            if($(this).hasClass("monthStatusActive")) $(this).removeClass("monthStatusActive");
    156157            else $(this).addClass("monthStatusActive");
    157             }); 
     158            });
     159       
     160       
     161        // Click to change image
     162        // Calling to parent class method to bind click event on icon for change its image
     163        self.bindClickForChangeImg("monthConfigIcon");
     164
     165        /*$(".monthConfigIcon").on("click", function(event){
     166            event.stopPropagation();
     167            var item=$($(event)[0].target).attr("class").replace("monthConfigIcon","").replace(" ", "");
     168            self.changeImage(item, self.componentname);
     169        });*/
     170       
    158171    };
    159172   
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/components/season/season.js

    r5035 r5777  
    44    this.name="Season Selector";
    55    this.icon="components/componentIcons/season.png";
     6    this.componentname="season";
    67}
    78
     
    7576        $(".seasonSelectIcon").on("click", function(){
    7677
     78            // Click to select season
    7779            $(".seasonSelectIcon").removeClass("seasonSelected");
    7880            $(this).addClass("seasonSelected");
    79             }); 
     81            });
    8082    };
    8183   
     
    108110        var seasonText=i18n.gettext(season);
    109111       
    110         var icon=$(document.createElement("div")).addClass(season).addClass("seasonConfigIcon");
     112        var icon=$(document.createElement("div")).addClass(season).addClass("seasonConfigIcon  modifyable").attr("title", i18n.gettext("click.change.img"));
    111113        var text=$(document.createElement("div")).html(seasonText).addClass("seasonConfigText");
    112114        /*var selected=$(document.createElement("input")).attr("type","checkbox");*/
     
    129131            if($(this).hasClass("seasonStatusActive")) $(this).removeClass("seasonStatusActive");
    130132            else $(this).addClass("seasonStatusActive");
    131             }); 
     133            });
     134       
     135        // Calling to parent class method to bind click event on icon for change its image
     136        self.bindClickForChangeImg("seasonConfigIcon");
     137               
     138       
     139        /*$(".seasonConfigIcon").on("click", function(event){
     140            event.stopPropagation();
     141            var item=$($(event)[0].target).attr("class").replace("seasonConfigIcon","").replace(" ", "");
     142            self.changeImage(item, self.componentname);
     143        });*/
     144       
    132145    };
    133146   
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/components/weather/weather.js

    r5035 r5777  
    44    this.name="Weather Selector";
    55    this.icon="components/componentIcons/weather.png";
     6    this.componentname="weather";
    67   
    78}
     
    118119        var weatherText=i18n.gettext(weather);
    119120       
    120         var icon=$(document.createElement("div")).addClass(weather).addClass("weatherConfigIcon");
     121        var icon=$(document.createElement("div")).addClass(weather).addClass("weatherConfigIcon modifyable").attr("title", i18n.gettext("click.change.img"));
    121122        var text=$(document.createElement("div")).html(weatherText).addClass("weatherConfigText");
    122123        /*var selected=$(document.createElement("input")).attr("type","checkbox");*/
     
    139140            if($(this).hasClass("weatherStatusActive")) $(this).removeClass("weatherStatusActive");
    140141            else $(this).addClass("weatherStatusActive");
    141             }); 
     142            });
     143       
     144        // Click to change image
     145        // Calling to parent class method to bind click event on icon for change its image
     146        self.bindClickForChangeImg("weatherConfigIcon");
     147        /*
     148        $(".weatherConfigIcon").on("click", function(event){
     149            event.stopPropagation();
     150            var item=$($(event)[0].target).attr("class").replace("weatherConfigIcon","").replace(" ", "");
     151            self.changeImage(item, self.componentname);
     152        });*/
     153       
    142154    };
    143155   
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/components/weekday/weekday.css

    r5035 r5777  
    109109}
    110110
     111/*.weekdayConfigIcon:hover{
     112    cursor: copy;
     113}*/
     114
    111115.weekdayConfig{}
    112116
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/components/weekday/weekday.js

    r5035 r5777  
    44    this.name="WeekDay Selector";
    55    this.icon="components/componentIcons/weekday.png";
    6 }
     6    this.componentname="weekday";
     7    //this.loadCustomStyle();
     8}
     9
     10
    711
    812weekdayComponentClass.prototype=new Component();
    913weekdayComponentClass.prototype.constructor = weekdayComponentClass;
     14
     15/*weekdayComponentClass.prototype.changeImageDay=function changeImageDay(itemclicked, componentname){
     16    var self=this;
     17       
     18    var fileselector=$(document.createElement("input")).attr("id", "fileSelector").attr("type", "file").css("display", "none");
     19    $("body").append(fileselector);
     20   
     21    $(fileselector).on("change", function(){
     22            var newImage=this.value;
     23            try{
     24                    var fs=require("fs");
     25                    var css=require("css");
     26                    var selector="."+itemclicked;
     27                   
     28                    // get file Name extension
     29                    var patharray=newImage.split("/");
     30                    var filename=patharray[patharray.length-1];
     31                    var filearray=newImage.split(".");
     32                    var extension=filearray[filearray.length-1];
     33                    filename=itemclicked+"."+extension;
     34                   
     35                    // Getting path for custom library
     36                    console.log("self.configDir:"+self.configDir);
     37                    //var customConfigDir=self.configDir+"/.customCSS/img/"+filename;
     38                   
     39                    var customConfigDir=self.configDir+"/.customCSS";
     40                    console.log("customConfigDir:"+customConfigDir);
     41
     42                    // Copy file to custom library
     43                    fs.createReadStream(newImage).pipe(fs.createWriteStream(customConfigDir+"/img/"+filename));                   
     44                   
     45                    var mycssfile=customConfigDir+"/"+componentname+".css";
     46                   
     47                    // Check if there is custom CSS file
     48                    var content="";
     49                    if (fs.existsSync(mycssfile)){ // Read css file
     50                        content=(fs.readFileSync(mycssfile)).toString();
     51                    }
     52                    var ast = css.parse(content);
     53                       
     54                    // Creating a new array to delete duplicates for this selector
     55                    var newArray=[];
     56                    var selectorhover="."+componentname+"SelectIcon"+selector+":hover";
     57                   
     58                    for (index in ast.stylesheet.rules){
     59                        var sel=ast.stylesheet.rules[index].selectors[0];
     60                        if (sel!=selector && sel!=selectorhover ) newArray.push(ast.stylesheet.rules[index]);
     61                    }
     62                    ast.stylesheet.rules=newArray;
     63                   
     64                         
     65                    // Creating new objects
     66                   
     67                    // 1) for selector
     68                    var item=new Object();
     69                    item.type="rule";
     70                    item.selectors=[selector];
     71                    item.declarations=[{type:"declaration", property:"background-image", value:"url(img/"+filename+"?v="+(new Date).getTime()+")"}];
     72                    ast.stylesheet.rules.push(item);
     73                   
     74                    // 2) for selector with hover
     75                    var item=new Object();
     76                    item.type="rule";
     77                    item.selectors=[selectorhover];
     78                    item.declarations=[{type:"declaration", property:"background-image", value:"url(img/"+filename+"?v="+(new Date).getTime()+"), linear-gradient( 0deg, white, white 20%, rgba(255,255,255,0.5));"}];
     79                    ast.stylesheet.rules.push(item);
     80                   
     81                    //3) css object to string
     82                    var res=css.stringify(ast);
     83                   
     84                    // Store new array to file               
     85                    fs.writeFileSync(mycssfile, res);
     86                   
     87                    //$(selector).hide();
     88                   
     89                    // Apply new styles:
     90                    // 1) Remove previous link
     91                    var link=$("link[title='"+componentname+"']");
     92                    $(link).remove();
     93                    // 2) Create new link
     94                    var style=$(document.createElement("link")).attr("rel", "stylesheet").attr("type",  "text/css").attr("title", componentname);
     95                    $(style).attr("href", "file://"+mycssfile);
     96                    $('head').append(style);
     97                   
     98            } catch (err){
     99                    console.log(err);
     100            }
     101    });
     102    $(fileselector).click();
     103
     104   
     105}
     106*/
    10107
    11108weekdayComponentClass.prototype.setBaseConfig=function setBaseConfig(){
     
    94191}
    95192
    96 
    97 
    98193weekdayComponentClass.prototype.getConfigDialog=function getConfigDialog(){
    99194    var self=this;
     
    110205        var weekdayText=i18n.gettext(weekday);
    111206       
    112         var icon=$(document.createElement("div")).addClass(weekday).addClass("weekdayConfigIcon");
     207        var icon=$(document.createElement("div")).addClass(weekday).addClass("weekdayConfigIcon modifyable").attr("title", i18n.gettext("click.change.img"));
    113208        var text=$(document.createElement("div")).html(weekdayText).addClass("weekdayConfigText");
    114209        /*var selected=$(document.createElement("input")).attr("type","checkbox");*/
     
    131226            if($(this).hasClass("weekdayStatusActive")) $(this).removeClass("weekdayStatusActive");
    132227            else $(this).addClass("weekdayStatusActive");
    133             }); 
     228            });
     229       
     230        // Calling to parent class method to bind click event on icon for change its image
     231        self.bindClickForChangeImg("weekdayConfigIcon");
     232       
     233       
    134234    };
    135235   
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/css/main.css

    r5035 r5777  
    263263    text-align: center;
    264264}
     265
     266.modifyable{
     267       cursor: copy;
     268}
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/index.html

    r5035 r5777  
    22        <head>
    33                <meta charset="UTF-8">
    4                
     4                <meta http-equiv="cache-control" content="no-cache" />
    55               
    66                <!-- Loading libs -->
     
    5151                <link rel="stylesheet" type="text/css" href="components/weekday/weekday.css">
    5252                <link rel="stylesheet" type="text/css" href="components/classmates/classmates.css">
    53 
     53               
     54                <style id="customStyles"></style>
    5455
    5556       
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/js/main.js

    r5035 r5777  
    99
    1010*/
     11
     12// Global Reference to App
     13appGlobal=null;
    1114
    1215function resizeFonts(){
     
    172175        console.log("self.menuHidden is "+self.menuHidden);
    173176        event.stopPropagation();
    174         if (self.menuHidden) {self.showControlPanel(); console.log("111");}
    175         else {self.hideControlPanel(); console.log("222");}
     177        if (self.menuHidden) {self.showControlPanel(); }
     178        else {self.hideControlPanel(); }
    176179           
    177180        self.menuHidden=!self.menuHidden;
     
    522525    var assembleaList=fs.readdirSync(self.configBaseDir);
    523526    for (assemblea in assembleaList){
     527        if (fs.lstatSync(self.configBaseDir+"/"+assembleaList[assemblea]).isDirectory() &&
     528            assembleaList[assemblea][0]!="."){
     529            // Check if it's a directory
     530       
    524531        var config=JSON.parse(fs.readFileSync(self.configBaseDir+"/"+assembleaList[assemblea]+"/config.json"));
    525532        console.log(config.metadata.id);
     
    532539        $(slidee).append(li);
    533540       
     541        }
    534542    }
    535543   
     
    748756        self.bindEvents();
    749757        // Aplying font resize
     758        self.setCustomCSS();
    750759        resizeFonts();
    751760        $(".loadMainContainer").remove(); // Destroys load dialog
     
    760769};
    761770
     771UI.prototype.setCustomCSS=function setCustomCSS(){
     772    var self=this;
     773   
     774    var customPath=self.configDir+"/.customCSS";
     775    var fs=require("fs");
     776   
     777    var cssStyles="";
     778   
     779    if (fs.existsSync(customPath)){
     780   
     781        var customCSSFileList=fs.readdirSync(customPath);
     782        console.log("customPath is:"+customPath);
     783        for (var customCSSFile in customCSSFileList){
     784           
     785            var CSSFile=customPath+"/"+customCSSFileList[customCSSFile];
     786                   
     787            if (CSSFile.substring(CSSFile.length-4)==".css") {
     788                // If it's a CSS file, let's get it
     789               
     790                console.log(CSSFile);
     791                if (fs.existsSync(CSSFile)){
     792                    var csstemp=fs.readFileSync(CSSFile);
     793                   
     794                    // A little hack of my friends... replace relative (extension) path to absolute...
     795                    //cssStyles+=csstemp.toString().replace("url(", "url(file://"+customPath+"/");
     796                    cssStyles+=csstemp.toString().split("url(").join( "url(file://"+customPath+"/");
     797                       
     798                    cssStyles+="\n";
     799                   
     800                    /*var style=$(document.createElement("link")).attr("rel", "stylesheet").attr("type",  "text/css").attr("title", customCSSFileList[customCSSFile].replace(".css",""));
     801                    $(style).attr("href", "file://"+CSSFile);
     802                    //$(style).attr("id", customCSSFile.replace(".","_"));
     803                   
     804                    $('head').append(style);*/
     805                   
     806                }
     807            } // endif (customCSSFile.substring(customCSSFile.length-4)==".css")
     808        }
     809       
     810       
     811        $("#customStyles").empty();
     812        $("#customStyles").html(cssStyles);
     813       
     814    } //   endif (fs.existsSync(customPath))
     815}
     816
     817
    762818$(document).ready(function() {
    763819   
     
    771827    var app=new UI();
    772828   
    773     app.speakPhrase("Welcome to Classroom Assembly");
     829    appGlobal=app;
     830   
     831    //app.speakPhrase("Welcome to Classroom Assembly");
    774832    app.showLoadDialog(); // Shows load dialog and launches assembly
    775833   
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/locale/ca_ES.UTF-8.json

    r5035 r5777  
    2626  "saturday":"Dissabte",
    2727  "sunday":"Diumenge",
     28  "click.change.img":"Feu click per canviar la imatge",
    2829 
    2930  "month.component.title":"En quin mes estem?",
     
    6364  "Month Selector":"Selector de mes",
    6465  "WeekDay Selector":"Selector de dia",
    65   "Classmates Selector":"Companys de classe"
     66  "Classmates Selector":"Companys de classe",
     67 
     68  "add.new.image":"Modifiqueu la imatge",
     69  "back.to.default.image": "Restaura la imatge per defecte"
    6670 
    6771 
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/locale/en_US.UTF-8.json

    r5035 r5777  
    2626  "saturday":"Saturday",
    2727  "sunday":"Sunday",
     28  "click.change.img":"Click to change image",
    2829 
    2930  "month.component.title":"In wich month we are?",
     
    6364  "Month Selector":"Month Selector",
    6465  "WeekDay Selector":"WeekDay Selector",
    65   "Classmates Selector":"Classmates Selector"
     66  "Classmates Selector":"Classmates Selector",
     67  "add.new.image":"Modify picture",
     68  "back.to.default.image": "Restore default picture"
    6669 
    6770
  • classroom-assembly/trunk/fuentes/classroom-assembly/src/package.json

    r5035 r5777  
    77    "application"
    88  ],
    9   "repository":"",
    10   "license":"GPL-3.0",
     9  "repository": "",
     10  "license": "GPL-3.0",
    1111  "window": {
    1212    "title": "Assemblea",
     
    2121    "plugin": true
    2222  },
    23   "chromium-args": "--enable-speech-dispatcher"
     23  "chromium-args": "--enable-speech-dispatcher",
     24  "dependencies": {
     25    "css": "^2.2.1"
     26  }
    2427}
  • classroom-assembly/trunk/fuentes/debian/changelog

    r5268 r5777  
     1classroom-assembly (0.4) xenial; urgency=high
     2
     3  * Added capabilities to modify and remove pictures for component items
     4
     5 -- Jose A. Murcia <joamuran@gmail.com>  Thu, 07 Sep 2017 12:51:14 +0200
     6
    17classroom-assembly (0.3-lliurex3) xenial; urgency=medium
    28
Note: See TracChangeset for help on using the changeset viewer.