root/kladr/kladr/addr_suggest.js

Revision 61, 6.2 kB (checked in by teiko, 4 years ago)

KladrGroup? проверяет свои поля, обводит неправильное поле индекса. В пользовательский index.html добавилась строчка для вывода результата проверки. В пользовательский скрипт addr_user.js добавился вызов проверки и обновление строки результатов по таймеру.

Line 
1 var KLADR_SERVER = "http://kladr.org.ru/addr_suggest.php";
2
3 function AddressSuggestions() {}
4 AddressSuggestions.prototype.requestSuggestions = function(autoControl, bTypeAhead) {
5     var oThis = this;
6     var sendValue = autoControl.textbox.value;
7     var req = { task: "suggest", value: sendValue };
8     var parent = autoControl.group.getParent(autoControl);
9     for (t in parent) req[t] = parent[t];  // add all properties in request
10
11     if (this.lastReq)
12         if (req.region != this.lastReq.region ||
13             req.zone != this.lastReq.zone ||
14             req.settlement != this.lastReq.settlement)
15                 JsHttpRequest.CACHE = {};
16
17     if (!autoControl.needAutocomplete()) return;           
18     JsHttpRequest.query(
19         KLADR_SERVER, req, function(result, errors) {
20                 if (result) {
21                 if (autoControl.textbox.value == sendValue) {
22                     if (result.level > 4) {
23                         autoControl.selectedNode = result;
24                         autoControl.showInputs();
25                     } else {
26                         autoControl.autosuggest(result, bTypeAhead);
27                         oThis.lastReq = req;
28                     }
29                 }
30             }           
31             },
32             false
33         );
34 }
35 AddressSuggestions.prototype.fieldToString = function(s) {
36     if (s.level<5) return s.name + " (" + s.type + ")";
37     else return s.name + " (" + s.type + ", " + s._index + ")";
38 }
39
40 function KladrGroup() {
41     this.inputs = [];
42     this.titles = [];
43     this.correct = null;
44 }
45
46 KladrGroup.prototype.check = function() {
47     var oThis = this;
48     var index = this.getIndex();
49     var bId = this.getBuildingId();
50     var sId = this.getStreetId();
51     var req = {
52         task: "checkIndex",
53         userIndex: index,
54         buildingId: bId,
55         streetId: sId
56     };
57     oThis.correct = 2; // идет проверка
58     JsHttpRequest.query(
59         KLADR_SERVER, req, function(result, errors) {
60                 if (result && result.correct) {
61                 oThis.correct = 1;
62                 oThis.getIndexInput().textbox.className = "";
63             }
64             else {
65                 oThis.correct = 0;
66                 oThis.getIndexInput().textbox.className = "blocked";
67             }
68             },
69             false
70         );         
71 }
72
73 KladrGroup.prototype.getIndexInput = function() {
74     for (var i=0;i<this.inputs.length;i++) {
75         if (this.inputs[i].selectedNode &&
76             this.inputs[i].selectedNode.level == 5) break; // дом
77     }
78     if (i<this.inputs.length-1)
79         return this.inputs[i+1];
80     return null;
81 }
82
83 KladrGroup.prototype.getIndex = function() {
84     for (var i=0;i<this.inputs.length;i++) {
85         if (this.inputs[i].selectedNode &&
86             this.inputs[i].selectedNode.level == 5) break; // дом
87     }
88     if (i<this.inputs.length-1)
89         return this.inputs[i+1].textbox.value;
90     return null;
91 }
92 KladrGroup.prototype.getBuildingId = function() {
93     for (var i=0;i<this.inputs.length;i++) {
94         if (this.inputs[i].selectedNode &&
95             this.inputs[i].selectedNode.level == 5)
96             return this.inputs[i].selectedNode.id;
97     }
98     return null;
99 }
100
101 KladrGroup.prototype.getStreetId = function() {
102     for (var i=0;i<this.inputs.length;i++) {
103         if (this.inputs[i].selectedNode &&
104             this.inputs[i].selectedNode.level == 4)
105             return this.inputs[i].selectedNode.id;
106     }
107     return null;
108 }
109
110 KladrGroup.prototype.add = function(c,t) {
111     if (this.inputs.length>0) c.textbox.style.display = "none";
112     this.inputs.push(c);
113     c.group = this;
114     this.titles.push(t);
115 }
116 KladrGroup.prototype.needAutoComplete = function(c) {
117     var p = this.inputs.indexOf(c);
118     if (p>0 && this.inputs[p-1].selectedNode.level == 5) return false;
119     return true;
120 }
121 KladrGroup.prototype.showNextInput = function(c) {
122     var p = this.inputs.indexOf(c);
123     if (p<this.inputs.length-1) {
124         this.inputs[p+1].textbox.value = "";
125         this.inputs[p+1].textbox.style.display = "block";
126         if (c.selectedNode.level==4)
127             this.titles[p+1].innerHTML = "Дом:"
128         else if (c.selectedNode.level==5)
129             this.titles[p+1].innerHTML = "Индекс:"
130         else if (c.selectedNode.level==3)
131             this.titles[p+1].innerHTML = "Улица/дом:"
132         else {
133             switch(p) {
134                 case 0:
135                     if (c.selectedNode.type=="Город")
136                         this.titles[p+1].innerHTML = "Город/поселение/улица:";
137                     else
138                         this.titles[p+1].innerHTML = "Адм.Район/город:";
139                     break;
140                 case 1:
141                     if (c.selectedNode.level==2)
142                         this.titles[p+1].innerHTML = "Поселение/улица/дом:";
143                     else
144                         this.titles[p+1].innerHTML = "Город/село/улица:"
145                     break;
146                 case 2:
147                     if (c.selectedNode.level==2)
148                         this.titles[p+1].innerHTML = "Поселение/улица/дом:";
149                     break;
150             }
151         }
152     }
153 }
154 KladrGroup.prototype.hideNextInputs = function(c) {
155     var p = this.inputs.indexOf(c);
156     for (var i=p+1;i<this.inputs.length;i++) {
157         this.inputs[i].textbox.style.display = "none";
158         this.titles[i].innerHTML = "";
159     }
160 }
161 KladrGroup.prototype.focusNext = function(c) {
162     var p = this.inputs.indexOf(c);
163     if (p<this.inputs.length-1) {
164         this.inputs[p+1].textbox.focus();
165     }
166 }
167 KladrGroup.prototype.getParent = function(input) {
168     var res = [];
169     var p = this.inputs.indexOf(input);
170     if (p==0 || p==-1) return null;
171     var cn = this.inputs[p-1].selectedNode;
172     if (!cn) return null;
173     switch (cn.level) {
174         case "0": return {region:cn.id};
175         case "1": return {zone:cn.id};
176         case "2": return {city:cn.id};
177         case "3": return {settlement:cn.id};
178         case "4": return {street:cn.id};
179         case "5": return {building:cn.id};
180     }
181 }
182 KladrGroup.prototype.setFilter = function(filter) {
183     this.filter = filter;
184 }
Note: See TracBrowser for help on using the browser.