3 febbraio 2015

PHP | JS: convert date format to sql timestamp


HTML
<input id="myinput" type="text" value="20/09/1973" /> <!-- format: dd/mm/yyyy -->


Javascript
var mydate = document.getElementById("myinput").value;
var t = mydate.replace(/^(\d{2})\/(\d{2})\/(\d{4})$/, "$3-$2-$1 00:00:00");

//t= "1973-09-20 00:00:00"



PHP
echo preg_replace("/^(\d{2})\/(\d{2})\/(\d{4})$/", "$3-$2-$1 00:00:00", "20/09/1973");

3 dicembre 2014

angular js: set input focus

var app = angular

.module("app")

.factory("mySetFocus", ["$timeout", function($timeout){
return {
focus : {},
set : function(name){
this.focus[name] = !!!this.focus[name];
}
};
}])

.directive('myFocus', ["$timeout", "mySetFocus", function($timeout, mySetFocus) {
return {
restrict: 'A',
link : function(scope, element, attrs) {
scope.setter = mySetFocus;
scope.$watch("setter.focus."+attrs.name, function(v){
if(v==undefined) return;
$timeout(function() {
element[0].focus();
});
});
}
};
}])

.controller("myCtrl", ["$scope", "mySetFocus", function($scope, mySetFocus){
mySetFocus.set("myfield");
}]);

17 maggio 2014

AngularJs: creare una tabella con riodinamenti crescenti e decrescenti via template


Nel template html seguente, viene creata una tabella tramite AngularJs in cui le colonne sono riordinabli con un click sull'header della colonna.
Questo viene fatto tramite una semplice condizione

ng-click = "colOrd= colOrd=='fieldname' && '-fieldame' || 'fieldname'"

che assegna al parametro "colOrd" utilizzato per il filtro "orderBy", il nome del campo preceduto dal segno meno (ordinamento decrescente) se gia è attivo l'ordinamento crescente su questa colonna.


<span>ordinamento attuale: {{colOrd}}</span>
<table border=1 cellpadding=5>
  <tr>
      <td ng-click="colOrd= colOrd=='id' && '-id' || 'id'">Id:</td>
      <td ng-click="colOrd= colOrd=='nome' && '-nome' || 'nome'">Nome:</td>
      <td ng-click="colOrd= colOrd=='cognome' && '-cognome' || 'cognome'">Cognome:</td>
      <td ng-click="colOrd= colOrd=='cell' && '-cell' || 'cell' ">Cellulare:</td>
  </tr>
  <tr ng-repeat="item in mylist | orderBy:colOrd">
      <td>{{item.id}}</td>
      <td>{{item.nome}}</td>
      <td>{{item.cognome}}</td>
      <td>{{item.cell}}</td>
  </tr>
</table>

9 novembre 2013

dojo autocomplete (suggest box)

CLIENT



(html)



<input id="mySuggestBox" />



(javascript dojo v.1.9):



require([
    "dojo/_base/declare",
    "dojox/data/QueryReadStore",
    "dijit/form/ComboBox",
    "dojo/domReady!",

], function(declare, QueryReadStore, ComboBox) {


var AutocompleteStore = declare(QueryReadStore, {

    fetch: function(request){
        request.serverQuery = {q:request.query.name};
        return this.inherited("fetch", arguments);
    },
    wrapItem: function(rawItem, callback){
        this._xhrFetchHandler({
                identifier:'id',
                items: [rawItem],
                label: 'label'
            },
            {},
            function(items){ 
                callback(items[0]); 
            }
        );

    }
});
var store new AutocompleteStore({url:'services/myservice.php'});
var cb = new ComboBox({

        store: store,
        searchAttr: "name",
        labelAttr: "label",
        autoComplete: true,
        onChange: function(){  if(!this.item)  this.set("displayedValue", "");  }
  }, "mySuggestBox");

  //set default value

  store.wrapItem({id:111, name:"lorem", label: "ipsum"}, function(item){ 
       cb.set("item", item);
  });

 });



SERVER


(myservice.php):

<?php
$q = $_GET["q"];
$sql = "SELECT field_id AS id, field_xxx AS name, CONCACT('<b>',field_xxx,'</b')" AS label FROM myTable WHERE field_xxx LIKE "%{$q}% ORDER BY field_xxx LIMIT 10";
//fetch query... :
/*
$fields = array(
    array (id=>1, name=>"lorem", label=> "<span>lorem</span>",
    array (id=>2, name=>"ipsum", label=>"<span>impsum</span>", 
   ....
);
*/
header("Content-Type", "text/json");
echo json_encode(array('numRows'=>count($fields), 'items'=>$fields, 'identity'=>'id'));

11 febbraio 2012

GWT: SplitLayoutPanel, double(or single) click to show/hide panel

La classe seguente consente di chiudere o mostrare i pannelli di uno SplitLayoutPanel tramite un doppio click sugli "splitters" (le barre per ridimensionare i pannelli). 
Il doppio click viene riconosciuto se l'intervallo tra un click e quello successivo non supera un secondo (primo valore evidenziato in giallo espresso in millisecondi). 
L'animazione che mostra o nasconde il pannello dura 500 millisecondi (secondo valore evidenziato in giallo).


public class SplitLayoutPanelExt extends SplitLayoutPanel {


  private class ClickSplitter {
  private Widget widget;
    private Widget splitter;
    private long t = 0;
    public ClickSplitter(Widget w, Widget splitter){
    this.widget = w;
     this.splitter = splitter;
   }
    public void onAttach(){
    DOM.setEventListener(splitter.getElement(), new EventListener() {
    @Override
     public void onBrowserEvent(Event event) {
     if(Event.ONMOUSEDOWN==event.getTypeInt()){
       long t2 = (new Date()).getTime();
         if(t2-t>1000) { t = t2; splitter.onBrowserEvent(event); return; }
         LayoutData layout = (LayoutData)widget.getLayoutData();
         if(layout.size>0){
            layout.oldSize = layout.size;
           layout.size = 0;
           }else {
          layout.size = layout.oldSize;
           layout.oldSize = 0;
           }
          t=0;
           animate(500);
          event.preventDefault();
          }else {
          splitter.onBrowserEvent(event);
          }
        }
      });
    }
  }


private List<ClickSplitter> clickSplitterList = new ArrayList< ClickSplitter >();

public void addWestClosable( Widget widget, double size) {
  super.addWest(widget, size);
  addClickSplitter(widget);
}


  public void addEastClosable( Widget widget, double size){
    super.addEast(widget, size);
    addClickSplitter(widget);
}

public void addNorthClosable(Widget widget, double size){
  super.addNorth(widget, size);
    addClickSplitter(widget);
}

public void addSouthClosable(Widget widget, double size){
  super.addSouth(widget, size);
  addClickSplitter(widget);
}


  private void  addClickSplitter(Widget widget){
    int idx = super.getWidgetIndex(widget);
   if(idx>-1 && idx < getWidgetCount()-1){
      Widget splitter = super.getWidget(idx+1);
     clickSplitterList.add(new ClickSplitter(widget, splitter));
    }
}


  @Override
  protected void onAttach() {
   super.onAttach();
    for(ClickSplitter clickSplitter: clickSplitterList){
      clickSplitter.onAttach();
    }
}
}


Example:

/**
* This is the entry point method.
*/
public void onModuleLoad() {

SplitLayoutPanelExt splitLayoutPanelExt = new SplitLayoutPanelExt();

splitLayoutPanelExt.addWestClosable(new Label("west panel"), 200);
splitLayoutPanelExt.addWestClosable(new Label("west2 panel"), 200);
splitLayoutPanelExt.addEastClosable(new Label("east panel"), 200);
splitLayoutPanelExt.addEastClosable(new Label("east2 panel"), 200);
splitLayoutPanelExt.addNorthClosable(new Label("north panel"), 100);
splitLayoutPanelExt.addSouthClosable(new Label("south panel"), 100);
splitLayoutPanelExt.add(new Label("center panel"));

RootLayoutPanel.get().add(splitLayoutPanelExt);

}

Variante single click
Per mostrare/nascondere i pannelli con un click singolo, sostituire il metodo "onBrowserEvent" con il seguente codice:

    @Override
     public void onBrowserEvent(Event event) {
     if(Event.ONMOUSEDOWN==event.getTypeInt()){
                   t = (new Date()).getTime();
               }else if(Event.ONMOUSEUP==event.getTypeInt()) {
                   long t2 = (new Date()).getTime();
         if(t2-t>200) { t = 0; splitter.onBrowserEvent(event); return; }
         LayoutData layout = (LayoutData)widget.getLayoutData();
         if(layout.size>0){
            layout.oldSize = layout.size;
           layout.size = 0;
           }else {
          layout.size = layout.oldSize;
           layout.oldSize = 0;
           }
          t=0;
           animate(500);
          }
          splitter.onBrowserEvent(event);
        }

29 gennaio 2012

GWT: eventi righe per FlexTable


La classe GWT seguente consente di aggiungere un handler per gli eventi di onclick, onmouseover e onmouseout per le righe di una flextable.

import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;


public class FlexTableExt extends FlexTable {


    public static interface RowEventsHandler {
        public void onClick(FlexTableExt source, int row);
        public void onMouseOver(FlexTableExt source, int row);
        public void onMouseOut(FlexTableExt source, int row);
    }


    public void setRowEventsHandler(final int row, final  RowEventsHandler  handler){
        Element rowEl = this.getRowFormatter().getElement(row);
        DOM.setEventListener(rowEl, new EventListener(){
             @Override
              public void onBrowserEvent(Event event) {
                   switch(event.getTypeInt()){
                         case Event.ONCLICK:
                             handler.onClick(FlexTableExt.thisrow); break;
                         case Event.ONMOUSEOVER:
                              handler.onMouseOver(FlexTableExt.thisrow); break;
                         case Event.ONMOUSEOUT:
                              handler.onMouseOut(FlexTableExt.thisrow); break;
                   }
              }
        });
        DOM.sinkEvents(rowEl, Event.ONCLICK | Event.ONMOUSEOUT | Event.ONMOUSEOVER);
    }


}




Example:


FlexTableExt ft = new FlextTableExt();
FlexTableExt.RowEventsHandler rowHandler = new FlexTableExt.RowEventsHandler(){
        @Override
         public void onClick(FlexTableExt  ft, int row){
                Window.alert("click row: "+row);
        }
        @Override
        public void onMouseOver(FlexTableExt  ft, int row){
               ft.getRowFormatter().getElement(row).getStyle().setBackgroundColor("yellow");
        }
        @Override
        public void onMouseOut(FlexTableExt  ft, int row){
               ft.getRowFormatter().getElement(row).getStyle().setBackgroundColor("");
        }

   };
for( int r=0; r<10; r++){
     for(int c=0; c<5; c++){
          ft.setText(r,c, "cell " + r + "," + c );
    }
    ft.setRowEventsHandler(r, rowHandler );
}

1 ottobre 2011

Come far funzionare la scheda wireless Broadcom 4303 su ubuntu

Per far funzionare la scheda wireless Broadcom 4303 occorre il driver b43. Per installarlo aprite un terminale e scrivete:

sudo apt-get install b43-fwcutter
una volta installato, riavviate il sistema e dal network manager (l'icona vicino all'orologio) selezionate "Abilita rete senza fili".