Example #1
0
	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));
		}
	}
Example #2
0
//====================================================================
//====================================================================
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;
	}