Déplacement pour eggification.
[Plinn.git] / Products / Plinn / skins / ajax_scripts / generic_header_script.js
diff --git a/Products/Plinn/skins/ajax_scripts/generic_header_script.js b/Products/Plinn/skins/ajax_scripts/generic_header_script.js
new file mode 100755 (executable)
index 0000000..4843f80
--- /dev/null
@@ -0,0 +1,140 @@
+// (c) Benoît PIN 2006-2007
+// http://plinn.org
+// Licence GPL
+// 
+// 
+
+
+function initHeaderScript() {
+       var toggleButton = document.getElementById("ToggleFormButton");
+       if (!toggleButton) return;
+       var ob_url = absolute_url();
+       var metadataInspector = new InspectorPalette(portal_url(),
+                                                                                                document.getElementById("ToggleFormButton").childNodes[0],
+                                                                                                document.getElementById("HeaderArea"));
+
+       metadataInspector.onExpand = function(inspector) {
+               var onAfterPopulate = function() {
+                       // init simple metadata form manager
+                       var metadataForm = inspector.contentNode.getElementsByTagName('FORM')[0];
+                       var fm = new FormManager(metadataForm);
+                       fm.onResponseLoad = function(){inspector.collapse();};
+                       
+                       // init event handler to show full metadata form
+                       var showFullMetadataForm = function(evt) {
+                               disableDefault(evt);
+                               disablePropagation(evt);
+
+                               var initFullMetadataForm = function () {
+                                       var metadataForm = inspector.contentNode.getElementsByTagName('FORM')[0];
+                                       var fm = new FormManager(metadataForm);
+                                       fm.onResponseLoad = function(){inspector.collapse();};
+                                       
+                                       addListener(document.getElementById('showSimpleMetadataForm'),
+                                                               'click',
+                                                               function(evt){inspector.expand(); disableDefault(evt); disablePropagation(evt);});
+                               };
+                               var fi = new FragmentImporter(absolute_url(), initFullMetadataForm);
+                               fi.useMacro('header_widgets', 'fullMetadataForm', 'HeaderArea');
+                       };
+                       addListener(document.getElementById('showFullMetadataForm'), 'click', showFullMetadataForm);
+               };
+               var fi = new FragmentImporter(ob_url, onAfterPopulate);
+               fi.useMacro('header_widgets', 'titleAndDescForm', 'HeaderArea');
+       };
+
+       metadataInspector.onCollapse = function(inspector) {
+               var fi = new FragmentImporter(ob_url);
+               fi.useMacro('header_widgets', 'viewTitleAndDesc', 'HeaderArea');
+       };
+}
+
+
+function MetadataDateManager(baseFieldName, defaultDate) {
+       var thisManager = this;
+       this.baseFieldName = baseFieldName;
+       this.defaultDate = defaultDate;
+       this._previousDate = new Date();
+       
+       var calConfig = [];
+       // setup js calendar
+       calConfig["inputField"]         =       baseFieldName;          // id of the input field
+       calConfig["ifFormat"]           =       "%Y %m %d %H %M";   // format of the input field
+       calConfig["date"]                       =       function() { return thisManager.builDateFromInputs(); };
+       calConfig["showsTime"]          =       true;               // will display a time selector
+       calConfig["button"]                     =       "show_" + baseFieldName + "_cal";     // trigger for the calendar (button ID)
+       calConfig["singleClick"]        =       false;              // double-click mode
+       calConfig["showOthers"]         =       true;               // show overlapping months
+       calConfig["weekNumbers"]        =       false;
+       calConfig["firstDay"]           =       1;
+       calConfig["onSelect"]           =       thisManager.splitDate;
+
+       Calendar.setup(calConfig);
+       
+       //init event listener on checkbox
+       var cb = document.getElementById(baseFieldName + "_cb");
+       if (cb) {
+               addListener(cb, 'click', function(){thisManager.toggleDisplay();});
+               if ( this.builDateFromInputs().valueOf() == this.defaultDate.valueOf() ) {
+                       document.getElementById(baseFieldName + "_fields").style.display = "none";
+                       cb.checked = true;
+               }
+       }
+}
+
+MetadataDateManager.prototype.builDateFromInputs = function() {
+       var baseFieldName = this.baseFieldName;
+       var year        =       document.getElementById(baseFieldName + "_year").value;
+       var month       =       document.getElementById(baseFieldName + "_month").value;
+       var day         =       document.getElementById(baseFieldName + "_day").value;
+       var hour        =       document.getElementById(baseFieldName + "_hour").value;
+       var minute      =       document.getElementById(baseFieldName + "_minute").value;
+
+       if ( (year && month && day && hour && minute) != "" ) {
+               var dateStr = month + "/" + day + "/" +  year + " " + hour + ":" + minute + ":00";
+               return new Date(dateStr) ;
+       }
+       else
+               return new Date();
+};
+
+MetadataDateManager.prototype.splitDate = function(calendar, date) {
+       var inputId = (typeof calendar == "string") ? this.baseFieldName : calendar.params['inputField'].id;
+
+       var tokens;
+       if (typeof date == "object") {
+               tokens = new Array(5);
+               tokens[0] = String( date.getFullYear() );
+               var month = date.getMonth() +1;
+               tokens[1] = (month <10) ? "0" + String(month) : String(month);
+               var day = date.getDate()
+               tokens[2] = (day < 10) ? "0" + String(day) : String(day);
+               var hours = date.getHours();
+               tokens[3] = (hours < 10) ? "0" + String(hours) : String(hours);
+               var minutes = date.getMinutes();
+               tokens[4] = (minutes < 10) ? "0" + String(minutes) : String(minutes);
+       } 
+       else
+               tokens = date.split(" ");
+
+       document.getElementById(inputId + "_year").value = tokens[0];
+       document.getElementById(inputId + "_month").value = tokens[1];
+       document.getElementById(inputId + "_day").value = tokens[2];
+       document.getElementById(inputId + "_hour").value = tokens[3];
+       document.getElementById(inputId + "_minute").value = tokens[4];
+};
+
+
+MetadataDateManager.prototype.toggleDisplay = function() {
+       var cb          = document.getElementById(this.baseFieldName + '_cb');
+       var fields      = document.getElementById(this.baseFieldName + '_fields');
+       if (cb.checked) {
+               fields.style.display = "none";
+               this._previousDate = this.builDateFromInputs();
+               this.splitDate('', this.defaultDate)
+       }
+       else {
+               this.splitDate('', this._previousDate);
+               fields.style.display = "block";
+       }
+};
\ No newline at end of file