રીઅલ-ટાઇમ કોષ્ટકોમાં jQuery શોધ ફિલ્ટર સમસ્યાઓનું નિવારણ
ડાયનેમિક કોષ્ટકોનું સંચાલન કરતી વખતે રીઅલ-ટાઇમમાં ડેટા ફિલ્ટર કરવું એ એક આવશ્યક સુવિધા છે, અને jQuery આ કાર્યક્ષમતાને અમલમાં મૂકવાની એક સરળ રીત પ્રદાન કરે છે. આપેલા ઉદાહરણમાં, વપરાશકર્તાની ક્વેરી પર આધારિત કોષ્ટકની પંક્તિઓ ફિલ્ટર કરવા માટે શોધ ઇનપુટ ફીલ્ડનો ઉપયોગ કરવાનો ધ્યેય છે. સ્પષ્ટ બટનનો ઉપયોગ કરીને શોધ ઇનપુટને ખાલી મૂલ્ય પર રીસેટ કરવાનો પ્રયાસ કરતી વખતે સમસ્યા ઊભી થાય છે, પરંતુ કોષ્ટક સામગ્રી તે મુજબ અપડેટ થતી નથી.
સામાન્ય રીતે, શોધ ઇનપુટને સાફ કરવાથી બધી પંક્તિઓ ફરીથી બતાવવા માટે કોષ્ટકને ટ્રિગર કરવું જોઈએ. જો કે, વર્તમાન પરિસ્થિતિમાં, ઇનપુટ ફીલ્ડ સાફ કરવામાં આવ્યું હોવા છતાં, ફિલ્ટર કરેલ પંક્તિઓ યથાવત રહે છે. આ વર્તણૂક મૂંઝવણ ઊભી કરીને વપરાશકર્તાના અનુભવને વિક્ષેપિત કરી શકે છે, કારણ કે શોધ માપદંડને રીસેટ કર્યા પછી ઇન્ટરફેસ અપેક્ષા મુજબ વર્તે નહીં.
સમસ્યા કીઅપ ઇવેન્ટ અને બટન ક્લિક ઇવેન્ટ વચ્ચેની ક્રિયાપ્રતિક્રિયાથી ઉદ્ભવે છે. જ્યારે સ્પષ્ટ બટન સફળતાપૂર્વક ઇનપુટ ફીલ્ડને ખાલી કરે છે, ત્યારે સ્ક્રિપ્ટ ફિલ્ટરિંગ લોજિકને ફરીથી ટ્રિગર કરી શકશે નહીં, ટેબલને તેની પહેલાની સ્થિતિમાં છોડીને. jQuery માં આ ઇવેન્ટ્સ કેવી રીતે વર્તે છે તે સમજવું આવા મુદ્દાઓને ઉકેલવા માટે મહત્વપૂર્ણ છે.
આ લેખમાં, અમે સમસ્યાનું વિગતવાર અન્વેષણ કરીશું, તે શા માટે થાય છે તેની આંતરદૃષ્ટિ પ્રદાન કરીશું અને એક શુદ્ધ ઉકેલ પ્રદાન કરીશું જે ખાતરી કરે છે કે શોધ ઇનપુટ ક્ષેત્રને સાફ કર્યા પછી પણ દોષરહિત રીતે કાર્ય કરે છે. થોડા ફેરફારો સાથે, તમારું શોધ ફિલ્ટર જ્યારે પણ વપરાશકર્તા શોધને રીસેટ કરશે ત્યારે સરળતાથી અપડેટ થશે.
| આદેશ | ઉપયોગ અને વર્ણનનું ઉદાહરણ |
|---|---|
| filter() | તત્વો પર પુનરાવર્તિત કરવા અને શરત સાથે મેળ ખાતાને પરત કરવા માટે jQuery માં વપરાય છે. $("#ડેટા tr").ફિલ્ટર(ફંક્શન() {...}); વર્ણન: શોધ ઇનપુટના આધારે કોષ્ટકની પંક્તિઓ ફિલ્ટર કરે છે, ફક્ત ઇનપુટ સાથે મેળ ખાતી પંક્તિઓ દર્શાવે છે. |
| toggle() | તત્વોની પ્રદર્શન સ્થિતિને ગતિશીલ રીતે નિયંત્રિત કરે છે. $(આ).ટૉગલ(શરત); વર્ણન: શોધ શબ્દ મળ્યો છે કે કેમ તેના આધારે પંક્તિની દૃશ્યતાને ટૉગલ કરે છે. |
| dispatchEvent() | એલિમેન્ટ પર મેન્યુઅલી ઇવેન્ટ ટ્રિગર કરે છે. searchInput.dispatchEvent(નવી ઇવેન્ટ("ઇનપુટ")); વર્ણન: ખાતરી કરે છે કે ઇનપુટ સાફ કર્યા પછી શોધ તર્ક પ્રોગ્રામેટિકલી ટ્રિગર થાય છે. |
| addEventListener() | વેનીલા JavaScript માં એક ઘટક સાથે ઇવેન્ટ હેન્ડલર જોડે છે. clearButton.addEventListener("ક્લિક", ફંક્શન() {...}); વર્ણન: ઇનપુટ ફીલ્ડ રીસેટ કરવા અને ફિલ્ટરને તાજું કરવા માટે સ્પષ્ટ બટન ક્લિક માટે સાંભળે છે. |
| querySelectorAll() | CSS પસંદગીકારોનો ઉપયોગ કરીને બધા મેળ ખાતા તત્વો પસંદ કરે છે. const rows = document.querySelectorAll("#ડેટા tr"); વર્ણન: ફિલ્ટરિંગ તર્ક લાગુ કરવા માટે કોષ્ટકમાંથી બધી પંક્તિઓ પુનઃપ્રાપ્ત કરે છે. |
| module.exports | Node.js અથવા JavaScript મોડ્યુલોમાં ફંક્શન નિકાસ કરવા માટે વપરાય છે. module.exports = { filterTable }; વર્ણન: ફિલ્ટરિંગ લોજિકની નિકાસ કરે છે જેથી તે બહુવિધ સ્ક્રિપ્ટ્સમાં ફરીથી ઉપયોગમાં લઈ શકાય. |
| beforeEach() | જાસ્મીન ટેસ્ટ ફંક્શન જે દરેક ટેસ્ટ કેસ પહેલા સેટઅપ કોડ ચલાવે છે. beforeEach(function() {...}); વર્ણન: નવી શરૂઆતની ખાતરી કરવા માટે દરેક એકમ પરીક્ષણ પહેલાં DOM તત્વો તૈયાર કરે છે. |
| textContent | તત્વની ટેક્સ્ટ સામગ્રી પુનઃપ્રાપ્ત કરે છે. row.textContent.toLowerCase(); વર્ણન: ફિલ્ટરિંગ દરમિયાન કેસ-સંવેદનશીલ સરખામણી માટે પંક્તિ સામગ્રીને બહાર કાઢે છે. |
| expect() | પરીક્ષણોમાં અપેક્ષિત પરિણામોને વ્યાખ્યાયિત કરવા માટે ઉપયોગમાં લેવાતી જાસ્મિન નિવેદન પદ્ધતિ. અપેક્ષા(row.style.display).toBe(""); વર્ણન: ચકાસે છે કે ફિલ્ટરિંગ લોજિક હેતુ મુજબ પંક્તિઓ દર્શાવે છે અથવા છુપાવે છે. |
| DOMContentLoaded | જ્યારે પ્રારંભિક HTML દસ્તાવેજ સંપૂર્ણપણે લોડ થઈ જાય ત્યારે JavaScript ઇવેન્ટ ફાયર થાય છે. document.addEventListener("DOMContentLoaded", function() {...}); વર્ણન: DOM તૈયાર થયા પછી જ સ્ક્રિપ્ટ ચાલે તેની ખાતરી કરે છે. |
jQuery અને JavaScript માં સરળ શોધ ફિલ્ટરિંગ અને ક્લિયરિંગની ખાતરી કેવી રીતે કરવી
પ્રથમ સ્ક્રિપ્ટ ઉદાહરણમાં, અમે એક ગતિશીલ અમલીકરણ કર્યું jQuery નો ઉપયોગ કરીને. તર્ક સાથે જોડાયેલ છે ઇનપુટ ફીલ્ડની ઘટના, જે દરેક વખતે વપરાશકર્તા ટાઇપ કરે છે ત્યારે ટ્રિગર થાય છે. કેસ-અસંવેદનશીલ મેચિંગની ખાતરી કરવા માટે ઇનપુટ મૂલ્યને લોઅરકેસમાં રૂપાંતરિત કરવામાં આવે છે. દરેક કોષ્ટક પંક્તિ એ જોવા માટે તપાસવામાં આવે છે કે તે શોધ શબ્દ ધરાવે છે કે કેમ, અને પંક્તિઓનો ઉપયોગ કરીને તે મુજબ ટૉગલ કરવામાં આવે છે. કાર્ય આ ફક્ત મેળ ખાતી પંક્તિઓને જ દૃશ્યમાન રહેવાની મંજૂરી આપે છે, વપરાશકર્તાઓ માટે મોટા કોષ્ટકોમાં ચોક્કસ ડેટા શોધવાનું સરળ બનાવે છે.
જો કે, સ્પષ્ટ બટન સાથે શોધને ફરીથી સેટ કરવાનો પ્રયાસ કરતી વખતે સમસ્યા ઊભી થાય છે. મૂળ સ્ક્રિપ્ટમાં, સ્પષ્ટ બટન ઇનપુટ ફીલ્ડને ખાલી સ્ટ્રિંગ પર સેટ કરે છે પરંતુ શોધ અપડેટને આપમેળે ટ્રિગર કરતું નથી. ઉન્નત સોલ્યુશન એ સુનિશ્ચિત કરે છે કે સ્પષ્ટ બટન દબાવવામાં આવ્યા પછી, કીઅપ ઇવેન્ટ મેન્યુઅલી સાથે ફરીથી ટ્રિગર થાય છે. પદ્ધતિ, જે બધી પંક્તિઓ ફરીથી બતાવીને કોષ્ટક દૃશ્યને અપડેટ કરે છે. આ પદ્ધતિ સરળ કાર્યક્ષમતાને સુનિશ્ચિત કરે છે અને જ્યારે શોધ ક્ષેત્રને ખાલી પર રીસેટ કરવામાં આવે ત્યારે મૂંઝવણને ટાળે છે.
બીજું ઉદાહરણ jQuery ને સાદા JavaScript સાથે બદલીને વૈકલ્પિક અભિગમ પૂરો પાડે છે. અમે એક જોડીને સમાન કાર્યક્ષમતા પ્રાપ્ત કરીએ છીએ શોધ ક્ષેત્રમાં ઇવેન્ટ સાંભળનાર અને તેની સાથે સીધી પંક્તિઓ અપડેટ કરે છે . વેનીલા જાવાસ્ક્રિપ્ટનો ઉપયોગ બાહ્ય પુસ્તકાલયો પર નિર્ભરતા ઘટાડે છે અને પ્રદર્શન સુધારે છે. ક્લિયર બટન, જ્યારે ક્લિક કરવામાં આવે છે, ત્યારે તે માત્ર શોધ ક્ષેત્રને જ સાફ કરતું નથી પરંતુ ટેબલની સામગ્રી યોગ્ય રીતે તાજું થાય તેની ખાતરી કરીને ફિલ્ટરિંગ લોજિકને ફરીથી ચલાવવા માટે નવી ઇવેન્ટને પણ મોકલે છે.
મોડ્યુલર ઉદાહરણ મુખ્ય સ્ક્રિપ્ટમાંથી શોધ તર્કને અલગ કરવા માટે ES6 મોડ્યુલોનો ઉપયોગ કરે છે. આ અભિગમ ફિલ્ટરિંગ ફંક્શનને અલગ ફાઇલમાં રાખીને કોડની પુનઃઉપયોગીતા અને જાળવણીને પ્રોત્સાહન આપે છે. અમે શોધ અને સ્પષ્ટ કાર્યક્ષમતાઓને માન્ય કરવા માટે જાસ્મીન ફ્રેમવર્કનો ઉપયોગ કરીને એકમ પરીક્ષણો કેવી રીતે લખવા તે પણ દર્શાવ્યું. આ પરીક્ષણો ખાતરી કરે છે કે શોધ યોગ્ય રીતે પંક્તિઓ સાથે મેળ ખાય છે અને ઇનપુટ સાફ કરવાથી બધી પંક્તિઓ પુનઃસ્થાપિત થાય છે. મોડ્યુલારિટી, યુનિટ ટેસ્ટ અને ઑપ્ટિમાઇઝ ઇવેન્ટ હેન્ડલિંગ સાથે, સોલ્યુશન વિવિધ વેબ એપ્લિકેશન્સમાં ઉપયોગ માટે મજબૂત અને માપી શકાય તેવું બને છે.
બહુવિધ અભિગમો સાથે jQuery ટેબલ ફિલ્ટર રીસેટ સમસ્યા ઉકેલવી
ફ્રન્ટ-એન્ડ ડાયનેમિક ટેબલ ફિલ્ટરિંગ અને ઇવેન્ટ હેન્ડલિંગ માટે jQuery નો ઉપયોગ કરવો
$(document).ready(function() {$("#SearchInput").on("keyup", function() {var value = $(this).val().toLowerCase();$("#Data tr").filter(function() {$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);});});$("#clearSearch").click(function() {$("#SearchInput").val("");$("#SearchInput").trigger("keyup"); // Ensure search updates on clear});});
વેનીલા જાવાસ્ક્રિપ્ટમાં ઈવેન્ટ-ડ્રિવન લોજિક સાથે ક્લિયર બટનનો અમલ કરવો
jQuery વિના સમાન કાર્યક્ષમતા પ્રાપ્ત કરવા માટે સાદા JavaScript નો ઉપયોગ કરવો
document.addEventListener("DOMContentLoaded", function() {const searchInput = document.getElementById("SearchInput");const clearButton = document.getElementById("clearSearch");const rows = document.querySelectorAll("#Data tr");searchInput.addEventListener("input", function() {const value = searchInput.value.toLowerCase();rows.forEach(row => {row.style.display = row.textContent.toLowerCase().includes(value) ? "" : "none";});});clearButton.addEventListener("click", function() {searchInput.value = "";searchInput.dispatchEvent(new Event("input")); // Trigger filtering});});
ES6 મોડ્યુલ્સ સાથે મોડ્યુલર અભિગમનો ઉપયોગ કરીને ડાયનેમિક સર્ચ ફિલ્ટર્સને હેન્ડલ કરવું
બહેતર કોડ પુનઃઉપયોગ માટે નિકાસયોગ્ય કાર્યો સાથે મોડ્યુલર JavaScript
// searchFilter.js - Search filtering logic as an ES6 moduleexport function filterTable(inputId, tableId) {const input = document.getElementById(inputId);const rows = document.querySelectorAll(`#${tableId} tr`);input.addEventListener("input", () => {const query = input.value.toLowerCase();rows.forEach(row => {row.style.display = row.textContent.toLowerCase().includes(query) ? "" : "none";});});}// main.js - Importing and using the filter logicimport { filterTable } from "./searchFilter.js";document.addEventListener("DOMContentLoaded", () => {filterTable("SearchInput", "Data");document.getElementById("clearSearch").addEventListener("click", () => {document.getElementById("SearchInput").value = "";document.getElementById("SearchInput").dispatchEvent(new Event("input"));});});
જાસ્મિનનો ઉપયોગ કરીને એકમ પરીક્ષણો સાથે શોધ અને સ્પષ્ટ કાર્યક્ષમતાનું પરીક્ષણ કરવું
કાર્યક્ષમતાને માન્ય કરવા માટે જાસ્મીન પરીક્ષણ માળખું
describe("Search and Clear Functionality", function() {beforeEach(function() {document.body.innerHTML = `<input type="text" id="SearchInput" /><button id="clearSearch">Clear</button><table id="Data"><tr><td>Row 1</td></tr><tr><td>Row 2</td></tr></table>`;require("./searchFilter.js").filterTable("SearchInput", "Data");});it("should filter rows based on search input", function() {document.getElementById("SearchInput").value = "Row 1";document.getElementById("SearchInput").dispatchEvent(new Event("input"));expect(document.querySelector("#Data tr").style.display).toBe("");});it("should clear search input and show all rows", function() {document.getElementById("clearSearch").click();expect(document.getElementById("SearchInput").value).toBe("");expect(document.querySelectorAll("#Data tr").length).toBe(2);});});
ડાયનેમિક ફિલ્ટર્સ માટે ઇવેન્ટ હેન્ડલિંગ અને રીઅલ-ટાઇમ અપડેટ્સનું અન્વેષણ કરવું
એક પાસું જે અગાઉ ચર્ચાતું ન હતું તે કાર્યક્ષમતાનું મહત્વ છે શોધ ફિલ્ટર્સનું સંચાલન કરવા માટે JavaScript માં. વપરાશકર્તા ઇનપુટ સાથે કામ કરતી વખતે, ઘટનાઓ જેવી ખાતરી કરવી અથવા સરળ વપરાશકર્તા અનુભવ જાળવવા માટે ઑપ્ટિમાઇઝ કરેલ છે તે મહત્વપૂર્ણ છે. જો બહુવિધ ઇવેન્ટ શ્રોતાઓ ખોટી રીતે અથવા બિનજરૂરી રીતે જોડાયેલા હોય, તો તે પ્રદર્શન સમસ્યાઓમાં પરિણમી શકે છે, ખાસ કરીને મોટા ડેટાસેટ્સ સાથે. સેંકડો અથવા હજારો કોષ્ટક પંક્તિઓ સાથેના દૃશ્યોમાં, શોધને ઑપ્ટિમાઇઝ કરવું અને સ્પષ્ટ કાર્યક્ષમતા આવશ્યક બની જાય છે.
અન્ય વિચારણા ઉપયોગ કરી રહી છે વપરાશકર્તાના કીસ્ટ્રોક દ્વારા ટ્રિગર થતા ફંક્શન કૉલ્સની આવર્તન ઘટાડવા માટે. ડિબાઉન્સિંગ એ સુનિશ્ચિત કરે છે કે જ્યારે વપરાશકર્તાએ ચોક્કસ સમયગાળા માટે ટાઇપ કરવાનું બંધ કરી દીધું હોય ત્યારે જ ફંક્શન એક્ઝિક્યુટ થાય છે. આ શોધ ફિલ્ટર્સના પ્રદર્શનમાં નોંધપાત્ર સુધારો કરી શકે છે, ખાસ કરીને જ્યારે તેમાં જટિલ તર્ક અથવા નેટવર્ક વિનંતીઓ શામેલ હોય. સર્ચ ઇનપુટ પર ડિબાઉન્સનો અમલ કરવો બિનજરૂરી DOM અપડેટ્સને ઘટાડીને ઉપયોગિતા અને કાર્યક્ષમતા બંનેમાં સુધારો કરે છે.
ગતિશીલ રીતે જનરેટ કરેલ કોષ્ટકો સાથે કામ કરતા વિકાસકર્તાઓ માટે, એક સામાન્ય પડકાર એ સુનિશ્ચિત કરવાનો છે કે નવી પંક્તિઓ ઉમેર્યા પછી પણ ફિલ્ટરિંગ કાર્ય કરે છે. આના માટે ઇવેન્ટ શ્રોતાઓને ફરીથી જોડવાની અથવા પિતૃ તત્વ દ્વારા પ્રતિનિધિમંડળનો ઉપયોગ કરવાની જરૂર છે. ઘટના પ્રતિનિધિમંડળ ખાતરી કરે છે કે સ્ક્રિપ્ટને ફરીથી શરૂ કરવાની જરૂર વગર પંક્તિઓ ગતિશીલ રીતે ઉમેરવામાં આવે તો પણ ઇવેન્ટ હજુ પણ ફેરફારોને કેપ્ચર કરે છે. આને મોડ્યુલર જાવાસ્ક્રિપ્ટ અને પરીક્ષણ માટે જાસ્મીન જેવા ફ્રેમવર્ક સાથે સંયોજિત કરવાથી એક મજબૂત સોલ્યુશન સુનિશ્ચિત થાય છે જે વિવિધ પરિસ્થિતિઓને સંભાળે છે.
- હું કેવી રીતે ખાતરી કરી શકું કે શોધ ફિલ્ટર ગતિશીલ રીતે ઉમેરવામાં આવેલી પંક્તિઓ સાથે કામ કરે છે?
- ઉપયોગ કરો જોડીને પંક્તિઓના પિતૃ તત્વની ઘટના. આ રીતે, ઇવેન્ટ નવી ઉમેરવામાં આવેલી પંક્તિઓ માટે પણ ટ્રિગર થશે.
- વચ્ચે શું તફાવત છે અને ઘટનાઓ?
- આ કી રીલીઝ થયા પછી જ ઇવેન્ટ ટ્રિગર થાય છે, જ્યારે ઇવેન્ટ પેસ્ટ ઇવેન્ટ્સ અને અક્ષર કાઢી નાખવા સહિત ઇનપુટમાં કોઈપણ ફેરફાર માટે ટ્રિગર કરે છે.
- હું મોટા ડેટાસેટ્સ સાથે શોધ ફિલ્ટરનું પ્રદર્શન કેવી રીતે સુધારી શકું?
- અમલ કરો સર્ચ ઇનપુટ પર ટાઇપિંગ દરમિયાન ફિલ્ટર ફંક્શનને કૉલ કરવામાં આવે તે સંખ્યા ઘટાડવા માટે.
- શું ટેબલના બહુવિધ કૉલમ પર શોધ ફિલ્ટરનો ઉપયોગ કરવો શક્ય છે?
- હા, તમે બહુવિધ તપાસવા માટે ફિલ્ટર તર્કમાં ફેરફાર કરી શકો છો દરેક પંક્તિની અંદરના તત્વો શોધ માપદંડ સાથે મેળ ખાય છે.
- શા માટે મારું સ્પષ્ટ બટન ક્લિક કર્યા પછી ટેબલ રિફ્રેશ કરતું નથી?
- મેન્યુઅલી ટ્રિગર કરવાની ખાતરી કરો અથવા ટેબલ ડિસ્પ્લેને તાજું કરવા માટે ઇનપુટ ફીલ્ડને સાફ કર્યા પછીની ઘટના.
jQuery સાથે શોધ ફિલ્ટર્સની યોગ્ય કામગીરીની ખાતરી કરવી એ સીમલેસ વપરાશકર્તા અનુભવ માટે જરૂરી છે. ઇનપુટ સાફ કર્યા પછી શોધ અપડેટ ન થવા જેવી સમસ્યાઓ ઘટનાઓને યોગ્ય રીતે સંચાલિત કરીને અને જ્યારે જરૂર પડે ત્યારે તમામ સંબંધિત તર્ક ફરીથી ટ્રિગર થાય તેની ખાતરી કરીને ઉકેલી શકાય છે.
પ્રદર્શન ઑપ્ટિમાઇઝેશનનો અમલ કરવો, જેમ કે ડિબાઉન્સિંગ, અને આધુનિક JavaScript અભિગમોનો ઉપયોગ કરવાથી ફિલ્ટરની એકંદર કાર્યક્ષમતામાં સુધારો થઈ શકે છે. આ શ્રેષ્ઠ પ્રયાસો સાથે, તમે મજબૂત, ગતિશીલ કોષ્ટકો બનાવી શકો છો જે શોધને હેન્ડલ કરે છે અને કાર્યક્ષમતાને સરળતાથી રીસેટ કરે છે, મોટા ડેટાસેટ્સ અથવા વારંવાર અપડેટ કરાયેલ સામગ્રી સાથે પણ.
- આ લેખ યોગ્ય ઇવેન્ટ હેન્ડલિંગ અને ફિલ્ટરિંગ લોજિકની ખાતરી કરવા માટે jQuery લાઇબ્રેરીમાંથી સત્તાવાર દસ્તાવેજીકરણ અને શ્રેષ્ઠ પ્રયાસોનો લાભ લે છે. વધુ વિગતો માટે, સત્તાવાર jQuery દસ્તાવેજોની મુલાકાત લો: jQuery API દસ્તાવેજીકરણ .
- JavaScript ઇવેન્ટ મેનેજમેન્ટ અને ઇનપુટ અને કીઅપ ઇવેન્ટ્સનો અસરકારક રીતે ઉપયોગ કેવી રીતે કરવો તેના ઉદાહરણો માટે, મોઝિલા ડેવલપર નેટવર્ક પર ઇવેન્ટ હેન્ડલિંગ પર માર્ગદર્શિકા જુઓ: MDN વેબ ડૉક્સ - ઇવેન્ટ્સ .
- મોડ્યુલર JavaScript અને કોડ ઑપ્ટિમાઇઝેશનની આંતરદૃષ્ટિ નીચેના સંસાધનમાંથી લેવામાં આવી છે: JavaScript.info - મોડ્યુલ્સ .
- જાસ્મિન જેવા પરીક્ષણ ફ્રેમવર્કનો ઉપયોગ અહીંના સત્તાવાર દસ્તાવેજોમાંથી સંદર્ભિત કરવામાં આવ્યો હતો: જાસ્મીન દસ્તાવેજીકરણ .