Export Netvibes (source)
Cette procédure construit le Widget Netvibes :
<source lang='delphi'> const
netvibes_widget=
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'#13#10+ '<html xmlns="http://www.w3.org/1999/xhtml" xmlns:widget="http://www.netvibes.com/ns/">'#13#10+ '<head>'#13#10+ '<title>Sage France</title>'#13#10+ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'#13#10+ '<meta name="author" content="Sage France" />'#13#10+ '<meta name="description" content="" />'#13#10+ '<meta name="apiVersion" content="1.0" />'#13#10+ '<meta name="debugMode" content="false" />'#13#10+ '<widget:preferences>'#13#10+ '</widget:preferences>'#13#10+ //'<link rel="stylesheet" type="text/css" href="http://www.netvibes.com/themes/uwa/style.css"/>'#13#10+ //'<script type="text/javascript" src="http://www.netvibes.com/js/UWA/load.js.php?env=Standalone">$BUG</script>'#13#10+ '<script type="text/javascript">'#13#10+ '<![CDATA['#13#10+ 'var SageUTILS={};'#13#10+ 'SageUTILS.setFrameProperties=function(f) {'#13#10+ ' f.border="0"; f.frameBorder="0"; f.scrolling="no";'#13#10+ ' with (f.style) { border="0px"; margin="0px"; padding="0px"; width="100%"; display="block";}'#13#10+ '};'#13#10+ 'SageUTILS.extractInt=function(s) {'#13#10+ ' if (!(s) || (s =="")) return "";'#13#10+ ' var i=s.indexOf("%");'#13#10+ ' if (i > 0) return "";'#13#10+ ' i=s.indexOf("px");'#13#10+ ' if (i > 0) s=s.substr(0, i);'#13#10+ ' return s;'#13#10+ '};'#13#10+ 'SageUTILS.createFrameContent=function() {'#13#10+ ' var f=widget.createElement("iframe");'#13#10+ ' f.id="frame_"+widget.id;'#13#10+ ' var s=SageUTILS.extractInt(widget.getValue("height"));'#13#10+ ' SageUTILS.setFrameProperties(f);'#13#10+ ' if (s !="") {f.height=s; f.style.height=s+"px";}'#13#10+ ' widget.setBody(f);'#13#10+ ' var fsrc="$URL"$URLPARAMS;'#13#10+ ' fsrc=fsrc+"&rfid="+widget.id;'#13#10+ ' f.src=fsrc;'#13#10+ '};'#13#10+ 'widget.onLoad=function() {'#13#10+ ' SageUTILS.createFrameContent();'#13#10+ '};'#13#10+ '//]]>'#13#10+ '</script>'#13#10+ '</head>'#13#10+ '<body>'#13#10+
'
Sage Module is loading ...
'#13#10+
'</body>'#13#10+ '</html>';
class procedure TXMLRpcPortalServer.createNetvibesParams(iSender, iTarget: Tobject; var iStrParams: String; var index: integer); var p: TxmlItem; param: TModuleParam; itm, ci, ni: TxmlItem;
var s1, s2, s3: String; idy: integer;
begin
p := TxmlItem(iTarget);
param := TModuleParam(iSender);
if not TXMLRpcPortalServer.canShowParam(param, true) then Exit;
s1 := Format('+"&p[%d].name=%s"',[index, THtmlUtility.HTTPEncode(param.ParamName)]);
s2 := Format('+"&p[%d].value="+encodeURIComponent(widget.getValue("%s"))', [index, THtmlUtility.HTTPEncode(param.ParamName)]);
s3 := ;
//tjBoolean, tjNumber, tjDateTime,, tjEnum, tjObject, tjArray
if (param.ParamType = tjString) or (param.ParamType = tjInt)
or (param.ParamType = tjNumber) or (param.ParamType = tjMemo)
or (param.ParamType = tjDateTime) or (param.ParamType = tjObject)
or (param.ParamType = tjArray)or (param.Title = ) or (param.ParamType = tjBoolean)
then
begin
itm := TxmlItem.Create(p,'preference');
itm.AttributesValue['name']:=param.ParamName;
if( param.Title = ) or not TXMLRpcPortalServer.canShowParam(param, false) then
begin
itm.AttributesValue['type']:='hidden';
end else
begin
if param.ParamType = tjBoolean then
itm.AttributesValue['type']:='boolean'
else
itm.AttributesValue['type']:='text';
end;
itm.AttributesValue['defaultValue']:=param.ParamValue;
end else if (param.ParamType = tjEnum) then
begin
itm := TxmlItem.Create(p,'preference');
itm.AttributesValue['name']:=param.ParamName;
itm.AttributesValue['type']:='list';
itm.AttributesValue['label']:=param.Title;
itm.AttributesValue['defaultValue']:=param.ParamValue;
for idy := 0 to param.Count - 1 do
begin
ci := param[idy];
if SameText(ci.ItemName, 'enum') then
begin
ni := TxmlItem.Create(itm, 'option');
ni.AddAttribute('value', ci.AttributesValue['value']);
ni.AddAttribute('label', ci.AttributesValue['display']);
end;
end;
end;
if (param.ParamType = tjBoolean) then
s3 := Format('+"&p[%d].paramtype=bool"', [Index])
else if (param.ParamType = tjInt) then
s3 := Format('+"&p[%d].paramtype=int"', [Index]);
iStrParams := iStrParams + s1 + s2 + s3;
inc(Index);
end;
class function TXMLRpcPortalServer.ProduceNetvibesModule(iRequest: TXmlRpcCall;
iHttpRequest: TxmlDocument; var info: String; iFormat: TXmlResponseFormatType): TObject;
var
doc : TxmlDocument; iResInfo: TXmlWebResponseInfo; iurl, ititle, s: String; modid, iconfirm: String; iapp: TApplicationItem; m: TModuleItem; iroot, itm, pref: TxmlItem; idx, index : integer; isError, igetURL:boolean; mn: String; ss : TxmlRpcStruct; canConfirm: boolean; ph: TModuleParam;
begin
iconfirm := ;
canConfirm:= true;
isError := false;
Result := nil;
ititle := _TP('Sage Module');
modid := ExtractParamByName(iRequest, 'id');
iurl := ExtractParamByName(iRequest, 'url');
igetURL := ExtractParamByName(iRequest, 'export') ='1' ;
if iurl = then iurl := 'http://www.sage.fr';
if iurl[length(iurl)] <> '/' then iurl := iurl + '/';
iurl := iurl + Format('%s/%s/%s/%s.%s?netvibes=1', [c_l1000_root_server,c_xmlrpc_action, TXmlRpcUtility.ResponseFormatToString(rREST),c_rest_service_portal,c_rest_service_standalone]);
iapp := TPortalDocument(UserContexts.CurrentUser.UserPortal).Application;
m := iapp.FindModule(modid);
mn := 'emptymodule';
if Assigned(m) then
begin
ititle := m.Title;
iurl := iurl + '&modtype=' + m.ModType;
mn:=m.ModType;
ph := m.FindParamByName('height');
if Assigned(ph) then canConfirm := false;
end;
doc := TxmlDocument.Create(nil);
doc.Encoding := cstUTF8Encoding;
iResInfo := TXmlWebResponseInfo.Create(nil);
try
doc.LoadfromString(StringReplace(netvibes_widget, '$URL', iurl, []));
iurl := ;
if Assigned(m) then
begin
iroot := doc.DocumentElement;
iroot := iroot.FindSelfItem('head');
pref := iroot.FindSelfItem('title');
if Assigned(pref) then pref.text:=ititle;
pref := nil;
if Assigned(iroot) then
pref := iroot.FindSelfItem('widget:preferences');
if Assigned(pref) then
begin
index := 0;
m.EnumParams(pref,createNetvibesParams, iurl, index);
end;
end;
iroot := doc.DocumentElement;
iroot := iroot.FindSelfItem('head');
for idx := 0 to iroot.Count - 1 do
begin
itm := iroot.Items[idx];
if SameText(itm.ItemName, 'script') and (itm.AttributesValue['src']=) then
begin
s := itm.Text;
s := StringReplace(s, '$URLPARAMS', iurl, []);
itm.Text := #13#10'//';
itm.AddCData(s);
itm.AddText(#13#10);
end;
end;
doc.FormatOptions := doc.FormatOptions + [xfoOmitXMLDeclaration, xfoUTF8];
s :=StringReplace(doc.SaveToString, '$BUG', , []);
s :=StringReplace(s, '//<![CDATA[', , []);
s := StringReplace(s, '//]]>', , []);
Result := TStringStream.Create(s);
if (igetURL) then
begin
try
mn := StringReplace(mn, '-', , [rfReplaceAll]);
mn := StringReplace(mn, '.', , [rfReplaceAll]);
iurl := TExportUtility.ExportFile(TStream(Result), mn+FormatDateTime('yyyymmddhhmmssnn', Now())+'.html');
except
isError := true;
end;
FreeAndNil(Result);
if isError or (iurl=) then
begin
s := ExtractParamByName(iRequest, 'url');
if s= then s:='/';
if s[length(s)] <> '/' then s := s + '/';
iurl := s + Format('%s/%s/%s/%s.%s?id=%s&url=%s', [c_l1000_root_server,c_xmlrpc_action,
TXmlRpcUtility.ResponseFormatToString(rREST),c_rest_service_portal,
'netvibes', modid ,THtmlUtility.HTTPEncode(s)]);
end else
begin
if canConfirm then iconfirm := Format(_TP('Ajoutez un "UWA widget" vide, cochez "Inline this widget" et%s mettez "Widget URL":'),[#13#10]);
end;
Result := TXmlRpcResult.Create(nil);
ss:=TXmlRpcResult(Result).Params.AddStruct;
ss.AddString('URI', iurl);
ss.AddString('confirm', iconfirm);
end else
begin
iResInfo.AddHeader('date', LocalDateTimeToGMT(Now()));
iResInfo.AddHeader('expires', LocalDateTimeToGMT(Now()));
iResInfo.AddResponse('content_type',c_utf8_html_type);
iResInfo.AddResponse('bin_stream', '1');
FreeAndNil(doc);
end
finally
FreeAndNil(doc);
if Assigned(iResInfo.DocumentElement) then info := iResInfo.SaveToString;
FreeAndnil(iResInfo);
end;
end;
</source>
{{#if:|
{{#if:{{{1}}}|— [[{{{1}}}]] |}} — Développement DSM —
|
{{#if:|— [[{{{1}}}]] |}} — Développement DSM —
}}