1 2/** 3@class AjaxManager 4@static 5**/ 6var AjaxManager = (function () 7{ 8 // Constructor 9 var Class = function () 10 { 11 this.Key = ""; 12 }; 13 14 // Private 15 16 var Events = $({}); 17 18 var Manager = { 19 isReady: false, 20 on: Events.on.bind(Events), 21 trigger: Events.trigger.bind(Events) 22 }; 23 24 // Public Methods 25 (function (Methods) 26 { 27 /** 28 @method Post 29 @static 30 @param {String} Url 31 @param {Object} [Data] 32 @param {Function} [Callback_Success] 33 @param {Function} [Callback_Error] 34 @param {Object} [Context] default value = window. 35 **/ 36 Methods.Post = function (Url, Data, CallBack_Success, CallBack_Error, Context, Async) 37 { 38 Async = Async === false ? false : true; 39 AjaxCall.call(this, Url, "POST", Data, CallBack_Success, CallBack_Error, Context, Async); 40 }; 41 42 Methods.PromisifiedPost = ((Url, Data, Context, Async) => { 43 Context.callbackInPromise = true; 44 return new Promise((resolve, reject) => { 45 AjaxManager.Post(Url, Data, resolve, reject, Context, Async) 46 }); 47 }); 48 49 /** 50 @method Get 51 @static 52 @param {String} Url 53 @param {Object} [Data] 54 @param {Function} [Callback_Success] 55 @param {Function} [Callback_Error] 56 @param {Object} [Context] default value = window. 57 **/ 58 Methods.Get = function (Url, Data, CallBack_Success, CallBack_Error, Context, Async) 59 { 60 Async = Async === false ? false : true; 61 AjaxCall.call(this, Url, "GET", Data, CallBack_Success, CallBack_Error, Context, Async); 62 }; 63 64 Methods.PromisifiedGet = ((Url, Data, Context, Async) => { 65 Context.callbackInPromise = true; 66 return new Promise((resolve, reject) => { 67 AjaxManager.Get(Url, Data, resolve, reject, Context, Async) 68 }); 69 }); 70 71 /** 72 @method SetKey 73 @static 74 @param {String} Key 75 **/ 76 Methods.SetKey = function (Key) 77 { 78 this.Key = Key; 79 if (Key) { 80 Manager.isReady = true; 81 Manager.trigger('ready'); 82 } 83 }; 84 85 Methods.OnReady = function (Callback) 86 { 87 if (Manager.isReady) { 88 Callback(this); 89 } else { 90 Manager.on('ready', function () { 91 Callback(this); 92 }); 93 } 94 }; 95 96 })(Class.prototype); 97 98 // Html action handlers 99 var HtmlActionHandlers = { 100 101 Create: function (Data) 102 { 103 if (!Data.Value) throw "Data value cannot be null."; 104 105 return $(Data.Value); 106 }, 107 108 Add: function (Data) 109 { 110 if (!Data.Value) throw "must have content"; 111 if (!Data.Selector) throw "must have Selector"; 112 if (!Data.Position) throw "must have Position"; 113 114 var el = $(Data.Value); 115 var Pos = Data.Position.toLowerCase(); 116 if (Pos === "after") $(Data.Selector).after(el); 117 else if (Pos === "before") $(Data.Selector).before(el); 118 else if (Pos === "inside") $(Data.Selector).append(el); 119 120 return el; 121 }, 122 123 "Delete": function (Data) 124 { 125 if (!Data.Selector) throw "must have Selector"; 126 $(Data.Selector).remove(); 127 }, 128 129 Update: function (Data) 130 { 131 if (!Data.Value) throw "must have content"; 132 if (!Data.Selector) throw "must have Selector"; 133 134 var el = $(Data.Value); 135 $(Data.Selector).html(el); 136 137 return el; 138 }, 139 140 Replace: function (Data) 141 { 142 if (!Data.Value) throw "must have content"; 143 if (!Data.Selector) throw "must have Selector"; 144
145 var el = $(Data.Value); 146 $(Data.Selector).replaceWith(el); 147 148 return el; 149 } 150 }; 151 152 // Manager and Callers 153 var HtmlManager = function (Data, Elements) 154 { 155 if (!Data) throw "data must exist!"; 156 if (!Data.Action) throw "must have an Action"; 157 158 var handler = HtmlActionHandlers[Data.Action]; 159 if (!handler) throw "Invalid Action type : '" + Data.Action + "'."; 160 var el = handler(Data); 161 if (el) Elements.push(el); 162 }; 163 164 var ResourceManagerCall = function (Data, Elements, DataObj, Context) 165 { 166 if (!Data.Value) throw "ResourceManagerCall : value must exist!"; 167 if (Data.IsUrl && !Data.IsRegisterCallBack) { ResourceManager.LoadFromUrl(Data.Name, Data.Value, Data.Type); } 168 else if (Data.IsRegisterCallBack) 169 { 170 if (Data.IsUrl) ResourceManager.RegisterCallBack(Data.Dependencies, function () { ResourceManager.LoadFromUrl(Data.Name, Data.Value, Data.Type); }, Context); 171 else ResourceManager.RegisterCallBack(Data.Name, function () { ResourceManager.Load.call(this, Data.Value, Elements, DataObj); }, Context); 172 } 173 else 174 { 175 ResourceManager.Load.call(Context, Data.Value, Elements, DataObj); 176 } 177 }; 178 179 var DataManager = function (Data) 180 { 181 return (Data.Value ? Data.Value : null); 182 }; 183 184 // Ajax data handlers 185 var AjaxDataHandlers = { 186 187 Html: function (Data, Elements) 188 { 189 HtmlManager(Data, Elements) 190 }, 191 192 Script: function (Data, Elements, DataObj, Context) 193 { 194 ResourceManagerCall(Data, Elements, DataObj, Context) 195 }, 196 197 Style: function (Data) 198 { 199 ResourceManagerCall(Data) 200 }, 201 202 Data: function (Data) 203 { 204 return DataManager(Data) 205 } 206 }; 207 208 var dataSortOrder = ["Html", "Data", "Style", "Script"]; 209 var dataSortFunction = function (a, b) 210 { 211 return dataSortOrder.indexOf(a.Type) - dataSortOrder.indexOf(b.Type); 212 }; 213 214 // Ajax Get,Post Request 215 var AjaxCall = function (Url, Type, Data, CallBack_Success, CallBack_Error, Context, Async) 216 { 217 var Me = this; 218 if (!Url) throw "url is necessary!"; 219 220 if (Data) 221 { 222 if (typeof Data != "object") throw "Data must be a valid javascript object."; 223 if (Type === "POST") Data = JSON.stringify(Data); 224 } 225 Context = Context || window; 226 Async = Async === false ? false : true; 227 228 // Request 229 $.ajax({
230 231 url: Url, // Url handler 232 data: Data, // Data à envoyer au serveur, JSON pour POST, QueryString pour GET 233 type: Type, // POST, GET 234 contentType: (Type === "POST" ? "application/json; charset=UTF-8" : "application/x-www-form-urlencoded; charset=UTF-8"), // format des données envoyées au serveur 235 headers: { 'x-key': Me.Key }, 236 dataType: "json", // format de retour du server : json utilisé (xml, json, script, or html) 237 async: Async 238 239 }).done(function (Data, TextStatus, jqXHR) 240 { 241 // Redirection 242 if (jqXHR.getResponseHeader("isRedir") && jqXHR.getResponseHeader("isRedir") == "1") 243 { 244 var str = Data[0].Value.split('|'); 245 if (str[0] == "top") top.location.href = str[1]; 246 else window.location.href = str[0]; 247 248 return; 249 } 250 251 Data.sort(dataSortFunction); 252 var Elements = []; 253 var HtmlDependencies = []; 254 var DataObj = null; 255 var dataTypeReturnCount = 0; 256 257 for (var i = 0; i < Data.length; i++) { if (Data[i].Type == "Html" && Data[i].Dependencies) HtmlDependencies[HtmlDependencies.length] = Data[i].Dependencies; } 258 for (var i = 0; i < Data.length; i++) { if (Data[i].Type == "Data") dataTypeReturnCount++; } 259 if (dataTypeReturnCount > 1) throw "Cannot have more than one data object in response!"; 260 261 for (var i = 0; i < Data.length; i++) 262 { 263 var handler = AjaxDataHandlers[Data[i].Type]; 264 if (!handler) throw "Invalid data Type : '" + Data[i].Type + "'."; 265 var obj = handler(Data[i], Elements, DataObj, Context); 266 if (Data[i].Type == "Data") DataObj = obj; 267 } 268 269 const sucessCallbackCall = Context.callbackInPromise 270 ? (() => { CallBack_Success(Elements); }) 271 : (() => { CallBack_Success.call(Context, DataObj, Elements, jqXHR); }); 272 273 if (HtmlDependencies.length > 0) 274 { 275 ResourceManager.RegisterCallBack(HtmlDependencies, function () { 276 if (CallBack_Success && (typeof CallBack_Success == "function")) { 277 sucessCallbackCall(); 278 } 279 }, Context); 280 } 281 else 282 { 283 if (CallBack_Success && (typeof CallBack_Success == "function")) { 284 sucessCallbackCall(); 285 } 286 } 287 288 }).fail(function (jqXHR, textStatus, errorThrown) 289 { 290 if (CallBack_Error && (typeof CallBack_Error == "function")) { 291 CallBack_Error.call(Context, jqXHR.responseText, jqXHR); 292 } 293 }); 294 }; 295 296 297 return new Class(); 298})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.