void JSClass::ConstructorInitializeCallback(const JSContext& js_context, JSObject& this_object) const { if (!this_object.HasProperty("prototype")) { auto js_object = js_context.CreateObject(); this_object.SetProperty("prototype", js_object); } auto proto_object = static_cast<JSObject>(this_object.GetProperty("prototype")); for (const auto v : prototype_functions_map__) { // // NOTE: On HAL, there's no difference between object "static" property and prototype property // so add it to both // this_object.SetProperty(v.first, JSObjectMakeFunctionWithCallback(js_context, v.first, v.second)); proto_object.SetProperty(v.first, JSObjectMakeFunctionWithCallback(js_context, v.first, v.second)); } }
//==================================================================== //==================================================================== void CBaseHTML::SetProperty( const char *pKeyname, JSValue pValue, JSObject pObject ) { JSValue pOldValue = pObject.GetProperty( WSLit(pKeyname) ); //if ( FStrEq(ToString(pOldValue.ToString()).c_str(), ToString(pValue.ToString()).c_str()) ) //return; pObject.SetProperty( WSLit(pKeyname), pValue ); }
void WindowLayoutDelegate::onComponentSizeChange(const Titanium::LayoutEngine::Rect& rect) { if (layout_node__->parent) { WindowsViewLayoutDelegate::onComponentSizeChange(rect); return; } layout_node__->element.measuredHeight = rect.height; layout_node__->element.measuredWidth = rect.width; auto root = Titanium::LayoutEngine::nodeRequestLayout(layout_node__); if (root) { Titanium::LayoutEngine::nodeLayout(root); } auto event_delegate = event_delegate__.lock(); if (event_delegate != nullptr) { JSContext js_context = event_delegate->get_context(); JSObject eventArgs = js_context.CreateObject(); eventArgs.SetProperty("source", event_delegate->get_object()); eventArgs.SetProperty("type", js_context.CreateString("postlayout")); event_delegate->fireEvent("postlayout", eventArgs); } }
NativeViewLayoutDelegate::NativeViewLayoutDelegate(JSObject& this_object) { this_object.SetProperty("NativeViewLayoutDelegate_called", this_object.get_context().CreateBoolean(true)); }
JSValue IrcExtension::Handle( const std::string &functionName, const JSArray &args) { // connect(channelName) if (functionName == "connect") { // were in the middle of something if (irc_is_connected(session)) { return JSValue::Undefined(); } if (hThread) { // thread finished? if (WaitForSingleObject(hThread, 0) == WAIT_OBJECT_0) { CloseHandle(hThread); hThread = NULL; } else { // thread is still running return JSValue::Undefined(); } } if (args.size() < 1 || !args[0].IsString()) { // TODO: log this and exit return JSValue::Undefined(); } channelName = ToString(args[0].ToString()); serverName = channelName + ".jtvirc.com"; port = 6667; if (args.size() >= 2) { if (!(args[1].IsString())) { // log error return JSValue::Undefined(); } serverName = ToString(args[1].ToString()); } if (args.size() == 3) { if (!args[2].IsInteger()) { // log error return JSValue::Undefined(); } port = (unsigned int)args[2].ToInteger(); } isJoinedChannel = false; hThread = (HANDLE)_beginthreadex(NULL, 0, &IrcThread, this, 0, NULL); return JSValue::Undefined(); } else if (functionName == "disconnect") { // disconnect() if (args.size() != 0) { // TODO: log invalid method call return JSValue::Undefined(); } irc_disconnect(session); if (hThread) { WaitForSingleObject( hThread, INFINITE ); CloseHandle(hThread); hThread = NULL; } isJoinedChannel = false; moderators.clear(); latestMessage.Clear(); EnterCriticalSection(&messageLock); messages.clear(); LeaveCriticalSection(&messageLock); return JSValue::Undefined(); } else if (functionName == "getMessages") { // [message, message, ..] getMessages() EnterCriticalSection(&messageLock); if (args.size() != 0) { // TODO: log invalid method call return JSValue::Undefined(); } JSArray returnArgs; while(messages.size()) { IrcMessage &message = messages[0]; JSObject newMessageObject; newMessageObject.SetProperty(WSLit("nickname"), ToWebString(message.username)); newMessageObject.SetProperty(WSLit("message"), ToWebString(message.message)); newMessageObject.SetProperty(WSLit("color"), ToWebString(message.color)); JSArray groups; for(auto i = message.groups.begin(); i != message.groups.end(); i++) { groups.Push(ToWebString(*i)); } newMessageObject.SetProperty(WSLit("groups"), groups); JSArray emoticons; for(auto i = message.emoticons.begin(); i != message.emoticons.end(); i++) { groups.Push(ToWebString(*i)); } newMessageObject.SetProperty(WSLit("emoticons"), emoticons); returnArgs.Push(newMessageObject); messages.erase(messages.begin()); } LeaveCriticalSection(&messageLock); return returnArgs; } else if (functionName == "isConnected") { return JSValue(irc_is_connected(session) && isJoinedChannel); } return JSValue::Undefined(); }
JSObject Skin::getJsSkin() { JSObject skin; if (sizeof(jsParamNames) / sizeof(char*) != espLast) { showError("Список имён не совпадает со списком параметров"); return skin; } for (int i = 0; i < espLast; i++) { eSkinParam eIterator = (eSkinParam)i; int numValue = 0; string strValue = ""; string name = ""; bool bResultIsString = getType(eIterator) == ecvString; if (bResultIsString) { strValue = getString(eIterator); } else { numValue = getInt(eIterator); } bool bError = false; name = jsParamNames[i]; switch (eIterator) { // Целочисленные параметры case espHideScrollAny: case espHideScrollArrows: case espHideScrollMain: case espHideScrollActs: case espHideScrollVars: case espHideScrollObjs: case espUseHtml: case espNoSave: case espDisableScroll: case espViewAlwaysShow: case espIsStandalone: case espShowActs: case espShowVars: case espShowObjs: case espShowInput: break; // Строки с HTML-содержимым case espMsgTextFormat: case espInputTextFormat: case espMainDescTextFormat: case espVarsDescTextFormat: { strValue = applyHtmlFixes(strValue, true); } break; default: { showError("Неизвестный параметр оформления."); bError = true; } break; } if (bError) break; if (bResultIsString) { skin.SetProperty(ToWebString(name), ToWebString(strValue)); } else { skin.SetProperty(ToWebString(name), JSValue(numValue)); } } return skin; }