170 args.setProperty(0, status); |
170 args.setProperty(0, status); |
171 callback.call(QScriptValue(), args); |
171 callback.call(QScriptValue(), args); |
172 } |
172 } |
173 } |
173 } |
174 |
174 |
|
175 /*! |
|
176 \qmlmethod object Qt::include(url, callback) |
|
177 |
|
178 Include another JavaScript file. This method can only be used from within JavaScript files, |
|
179 and not regular QML files. |
|
180 |
|
181 Qt.include() returns an object that describes the status of the operation. The object has |
|
182 a single property, \c {status} that is set to one of the following values: |
|
183 |
|
184 \table |
|
185 \header \o Symbol \o Value \o Description |
|
186 \row \o result.OK \o 0 \o The include completed successfully. |
|
187 \row \o result.LOADING \o 1 \o Data is being loaded from the network. |
|
188 \row \o result.NETWORK_ERROR \o 2 \o A network error occurred while fetching the url. |
|
189 \row \o result.EXCEPTION \o 3 \o A JavaScript exception occurred while executing the included code. |
|
190 An additional \c exception property will be set in this case. |
|
191 \endtable |
|
192 |
|
193 The return object's properties will be updated as the operation progresses. |
|
194 |
|
195 If provided, \a callback is invoked when the operation completes. The callback is passed |
|
196 the same object as is returned from the Qt.include() call. |
|
197 */ |
175 QScriptValue QDeclarativeInclude::include(QScriptContext *ctxt, QScriptEngine *engine) |
198 QScriptValue QDeclarativeInclude::include(QScriptContext *ctxt, QScriptEngine *engine) |
176 { |
199 { |
177 if (ctxt->argumentCount() == 0) |
200 if (ctxt->argumentCount() == 0) |
178 return engine->undefinedValue(); |
201 return engine->undefinedValue(); |
179 |
202 |
182 QUrl contextUrl = ep->contextClass->urlFromValue(QScriptDeclarativeClass::scopeChainValue(ctxt, -3)); |
205 QUrl contextUrl = ep->contextClass->urlFromValue(QScriptDeclarativeClass::scopeChainValue(ctxt, -3)); |
183 if (contextUrl.isEmpty()) |
206 if (contextUrl.isEmpty()) |
184 return ctxt->throwError(QLatin1String("Qt.include(): Can only be called from JavaScript files")); |
207 return ctxt->throwError(QLatin1String("Qt.include(): Can only be called from JavaScript files")); |
185 |
208 |
186 QString urlString = ctxt->argument(0).toString(); |
209 QString urlString = ctxt->argument(0).toString(); |
187 QUrl url(ctxt->argument(0).toString()); |
210 QUrl url(urlString); |
188 if (url.isRelative()) { |
211 if (url.isRelative()) { |
189 url = QUrl(contextUrl).resolved(url); |
212 url = QUrl(contextUrl).resolved(url); |
190 urlString = url.toString(); |
213 urlString = url.toString(); |
191 } |
214 } |
192 |
215 |
215 QDeclarativeContextData *context = |
238 QDeclarativeContextData *context = |
216 ep->contextClass->contextFromValue(QScriptDeclarativeClass::scopeChainValue(ctxt, -3)); |
239 ep->contextClass->contextFromValue(QScriptDeclarativeClass::scopeChainValue(ctxt, -3)); |
217 |
240 |
218 QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(engine); |
241 QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(engine); |
219 scriptContext->pushScope(ep->contextClass->newUrlContext(context, 0, urlString)); |
242 scriptContext->pushScope(ep->contextClass->newUrlContext(context, 0, urlString)); |
220 scriptContext->pushScope(ep->globalClass->globalObject()); |
243 scriptContext->pushScope(ep->globalClass->staticGlobalObject()); |
221 QScriptValue scope = QScriptDeclarativeClass::scopeChainValue(ctxt, -5); |
244 QScriptValue scope = QScriptDeclarativeClass::scopeChainValue(ctxt, -5); |
222 scriptContext->pushScope(scope); |
245 scriptContext->pushScope(scope); |
223 scriptContext->setActivationObject(scope); |
246 scriptContext->setActivationObject(scope); |
224 QDeclarativeScriptParser::extractPragmas(code); |
247 QDeclarativeScriptParser::extractPragmas(code); |
225 |
248 |