mirror of https://github.com/vector-im/riot-web
				
				
				
			Working skin stuff, minus css
							parent
							
								
									f3b9f8c799
								
							
						
					
					
						commit
						2d0c8ac9ff
					
				
							
								
								
									
										35
									
								
								reskindex.js
								
								
								
								
							
							
						
						
									
										35
									
								
								reskindex.js
								
								
								
								
							| 
						 | 
				
			
			@ -22,6 +22,15 @@ try {
 | 
			
		|||
    process.exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var skinfoFile = path.join('src', 'skins', skin, 'skinfo.json');
 | 
			
		||||
 | 
			
		||||
try {
 | 
			
		||||
    fs.accessSync(skinfoFile, fs.F_OK);
 | 
			
		||||
} catch (e) {
 | 
			
		||||
    console.log("Skin "+skin+" has no skinfo.json");
 | 
			
		||||
    process.exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
try {
 | 
			
		||||
    fs.accessSync(path.join('src', 'skins', skin, 'views'), fs.F_OK);
 | 
			
		||||
} catch (e) {
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +55,16 @@ strm.write(" * so you'd just be trying to swim upstream like a salmon.\n");
 | 
			
		|||
strm.write(" * You are not a salmon.\n");
 | 
			
		||||
strm.write(" */\n\n");
 | 
			
		||||
 | 
			
		||||
strm.write("var sdk = require('matrix-react-sdk');\n\n");
 | 
			
		||||
var mySkinfo = JSON.parse(fs.readFileSync(skinfoFile, "utf8"));
 | 
			
		||||
 | 
			
		||||
strm.write("var skin = {\n");
 | 
			
		||||
strm.write("    atoms: {},\n");
 | 
			
		||||
strm.write("    molecules: {},\n");
 | 
			
		||||
strm.write("    organisms: {},\n");
 | 
			
		||||
strm.write("    templates: {},\n");
 | 
			
		||||
strm.write("    pages: {}\n");
 | 
			
		||||
strm.write("};\n");
 | 
			
		||||
strm.write('\n');
 | 
			
		||||
 | 
			
		||||
var tree = {
 | 
			
		||||
    atoms: {},
 | 
			
		||||
| 
						 | 
				
			
			@ -71,15 +89,26 @@ for (var i = 0; i < files.length; ++i) {
 | 
			
		|||
    while (restOfPath.length) {
 | 
			
		||||
        currentPath += '.'+restOfPath[0];
 | 
			
		||||
        if (subtree[restOfPath[0]] == undefined) {
 | 
			
		||||
            strm.write('sdk.'+currentPath+' = {};\n');
 | 
			
		||||
            strm.write('skin.'+currentPath+' = {};\n');
 | 
			
		||||
            strm.uncork();
 | 
			
		||||
        }
 | 
			
		||||
        subtree[restOfPath[0]] = {};
 | 
			
		||||
        restOfPath = restOfPath.slice(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    strm.write('sdk.'+module+" = require('./views/"+file+"');\n");
 | 
			
		||||
    strm.write('skin.'+module+" = require('./views/"+file+"');\n");
 | 
			
		||||
    strm.uncork();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
strm.write("\n");
 | 
			
		||||
 | 
			
		||||
if (mySkinfo.baseSkin) {
 | 
			
		||||
    strm.write("module.exports = require('"+mySkinfo.baseSkin+"');");
 | 
			
		||||
    strm.write("var extend = require('matrix-react-sdk/lib/extend');\n");
 | 
			
		||||
    strm.write("extend(module.exports, skin);\n");
 | 
			
		||||
} else {
 | 
			
		||||
    strm.write("module.exports = skin;");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
strm.end();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,46 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2015 OpenMarket Ltd
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var ComponentBroker = function() {
 | 
			
		||||
    this.components = {};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
ComponentBroker.prototype = {
 | 
			
		||||
    get: function(name) {
 | 
			
		||||
        if (this.components[name]) {
 | 
			
		||||
            return this.components[name];
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    set: function(name, module) {
 | 
			
		||||
        this.components[name] = module;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// We define one Component Broker globally, because the intention is
 | 
			
		||||
// very much that it is a singleton. Relying on there only being one
 | 
			
		||||
// copy of the module can be dicey and not work as browserify's
 | 
			
		||||
// behaviour with multiple copies of files etc. is erratic at best.
 | 
			
		||||
// XXX: We can still end up with the same file twice in the resulting
 | 
			
		||||
// JS bundle which is nonideal.
 | 
			
		||||
if (global.componentBroker === undefined) {
 | 
			
		||||
    global.componentBroker = new ComponentBroker();
 | 
			
		||||
}
 | 
			
		||||
module.exports = global.componentBroker;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2015 OpenMarket Ltd
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
function extractComponent(object, path) {
 | 
			
		||||
    var subObject = object[path[0]]
 | 
			
		||||
    if  (subObject === undefined) {
 | 
			
		||||
        return undefined;
 | 
			
		||||
    }
 | 
			
		||||
    if (path.length == 1) {
 | 
			
		||||
        return subObject;
 | 
			
		||||
    } else {
 | 
			
		||||
        return extractComponent(subObject, path.slice(1));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Skinner {
 | 
			
		||||
    constructor() {
 | 
			
		||||
        this.components = null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    getComponent(name) {
 | 
			
		||||
        if (this.components === null) {
 | 
			
		||||
            throw new Error(
 | 
			
		||||
                "Attempted to get a component before a skin has been loaded."+
 | 
			
		||||
                "This is probably because either:"+
 | 
			
		||||
                " a) Your app has not called sdk.loadSkin(), or"+
 | 
			
		||||
                " b) A component has called getComponent at the root level"
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        var comp = extractComponent(this.components, name.split('.'));
 | 
			
		||||
        if (comp) {
 | 
			
		||||
            return comp;
 | 
			
		||||
        }
 | 
			
		||||
        throw new Error("No such component: "+name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    load(skinObject) {
 | 
			
		||||
        if (this.components !== null) {
 | 
			
		||||
            throw new Error(
 | 
			
		||||
                "Attempted to load a skin while a skin is already loaded"+
 | 
			
		||||
                "If you want to change the active skin, call resetSkin first"
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        this.components = skinObject;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    reset() {
 | 
			
		||||
        this.components = null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// We define one Skinner globally, because the intention is
 | 
			
		||||
// very much that it is a singleton. Relying on there only being one
 | 
			
		||||
// copy of the module can be dicey and not work as browserify's
 | 
			
		||||
// behaviour with multiple copies of files etc. is erratic at best.
 | 
			
		||||
// XXX: We can still end up with the same file twice in the resulting
 | 
			
		||||
// JS bundle which is nonideal.
 | 
			
		||||
if (global.mxSkinner === undefined) {
 | 
			
		||||
    global.mxSkinner = new Skinner();
 | 
			
		||||
}
 | 
			
		||||
module.exports = global.mxSkinner;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -20,9 +20,7 @@ var React = require("react");
 | 
			
		|||
var MatrixClientPeg = require("../../MatrixClientPeg");
 | 
			
		||||
var RoomListSorter = require("../../RoomListSorter");
 | 
			
		||||
 | 
			
		||||
var ComponentBroker = require('../../ComponentBroker');
 | 
			
		||||
 | 
			
		||||
var RoomTile = ComponentBroker.get("molecules/RoomTile");
 | 
			
		||||
var sdk = require('../../index');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    componentWillMount: function() {
 | 
			
		||||
| 
						 | 
				
			
			@ -100,16 +98,17 @@ module.exports = {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    makeRoomTiles: function() {
 | 
			
		||||
        var that = this;
 | 
			
		||||
        var RoomTile = sdk.getComponent('molecules.RoomTile');
 | 
			
		||||
        var self = this;
 | 
			
		||||
        return this.state.roomList.map(function(room) {
 | 
			
		||||
            var selected = room.roomId == that.props.selectedRoom;
 | 
			
		||||
            var selected = room.roomId == self.props.selectedRoom;
 | 
			
		||||
            return (
 | 
			
		||||
                <RoomTile
 | 
			
		||||
                    room={room}
 | 
			
		||||
                    key={room.roomId}
 | 
			
		||||
                    selected={selected}
 | 
			
		||||
                    unread={that.state.activityMap[room.roomId] === 1}
 | 
			
		||||
                    highlight={that.state.activityMap[room.roomId] === 2}
 | 
			
		||||
                    unread={self.state.activityMap[room.roomId] === 1}
 | 
			
		||||
                    highlight={self.state.activityMap[room.roomId] === 2}
 | 
			
		||||
                />
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,12 +26,7 @@ var dis = require("../../dispatcher");
 | 
			
		|||
var PAGINATE_SIZE = 20;
 | 
			
		||||
var INITIAL_SIZE = 100;
 | 
			
		||||
 | 
			
		||||
var ComponentBroker = require('../../ComponentBroker');
 | 
			
		||||
 | 
			
		||||
var tileTypes = {
 | 
			
		||||
    'm.room.message': ComponentBroker.get('molecules/MessageTile'),
 | 
			
		||||
    'm.room.member': ComponentBroker.get('molecules/MRoomMemberTile')
 | 
			
		||||
};
 | 
			
		||||
var sdk = require('../../index');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    getInitialState: function() {
 | 
			
		||||
| 
						 | 
				
			
			@ -220,6 +215,11 @@ module.exports = {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    getEventTiles: function() {
 | 
			
		||||
        var tileTypes = {
 | 
			
		||||
            'm.room.message': sdk.getComponent('molecules.MessageTile'),
 | 
			
		||||
            'm.room.member': sdk.getComponent('molecules.MRoomMemberTile')
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        var ret = [];
 | 
			
		||||
        var count = 0;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,9 +21,7 @@ var RoomListSorter = require("../../RoomListSorter");
 | 
			
		|||
 | 
			
		||||
var dis = require("../../dispatcher");
 | 
			
		||||
 | 
			
		||||
var ComponentBroker = require('../../ComponentBroker');
 | 
			
		||||
 | 
			
		||||
var Notifier = ComponentBroker.get('organisms/Notifier');
 | 
			
		||||
var sdk = require('../../index');
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    getInitialState: function() {
 | 
			
		||||
| 
						 | 
				
			
			@ -62,6 +60,7 @@ module.exports = {
 | 
			
		|||
 | 
			
		||||
    onAction: function(payload) {
 | 
			
		||||
        var roomIndexDelta = 1;
 | 
			
		||||
        var Notifier = sdk.getComponent('organisms.Notifier');
 | 
			
		||||
 | 
			
		||||
        switch (payload.action) {
 | 
			
		||||
            case 'logout':
 | 
			
		||||
| 
						 | 
				
			
			@ -141,8 +140,10 @@ module.exports = {
 | 
			
		|||
    },
 | 
			
		||||
 | 
			
		||||
    startMatrixClient: function() {
 | 
			
		||||
        var Notifier = sdk.getComponent('organisms.Notifier');
 | 
			
		||||
 | 
			
		||||
        var cli = MatrixClientPeg.get();
 | 
			
		||||
        var that = this;
 | 
			
		||||
        var self = this;
 | 
			
		||||
        cli.on('syncComplete', function() {
 | 
			
		||||
            var firstRoom = null;
 | 
			
		||||
            if (cli.getRooms() && cli.getRooms().length) {
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +151,7 @@ module.exports = {
 | 
			
		|||
                    cli.getRooms()
 | 
			
		||||
                )[0].roomId;
 | 
			
		||||
            }
 | 
			
		||||
            that.setState({ready: true, currentRoom: firstRoom});
 | 
			
		||||
            self.setState({ready: true, currentRoom: firstRoom});
 | 
			
		||||
            dis.dispatch({action: 'focus_composer'});
 | 
			
		||||
        });
 | 
			
		||||
        Notifier.start();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,8 +22,6 @@ var MatrixClientPeg = require("../../MatrixClientPeg");
 | 
			
		|||
var Matrix = require("matrix-js-sdk");
 | 
			
		||||
var dis = require("../../dispatcher");
 | 
			
		||||
 | 
			
		||||
var ComponentBroker = require("../../ComponentBroker");
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    getInitialState: function() {
 | 
			
		||||
        return {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,8 +22,6 @@ var MatrixClientPeg = require("../../MatrixClientPeg");
 | 
			
		|||
var Matrix = require("matrix-js-sdk");
 | 
			
		||||
var dis = require("../../dispatcher");
 | 
			
		||||
 | 
			
		||||
var ComponentBroker = require("../../ComponentBroker");
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    FieldErrors: {
 | 
			
		||||
        PasswordMismatch: 'PasswordMismatch',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										19
									
								
								src/index.js
								
								
								
								
							
							
						
						
									
										19
									
								
								src/index.js
								
								
								
								
							| 
						 | 
				
			
			@ -14,10 +14,17 @@ See the License for the specific language governing permissions and
 | 
			
		|||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
'use strict';
 | 
			
		||||
var Skinner = require('./Skinner');
 | 
			
		||||
 | 
			
		||||
module.exports.loadSkin = function(skinObject) {
 | 
			
		||||
    Skinner.load(skinObject);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports.resetSkin = function() {
 | 
			
		||||
    Skinner.reset();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports.getComponent = function(componentName) {
 | 
			
		||||
    return Skinner.getComponent(componentName);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports.atoms = {};
 | 
			
		||||
module.exports.molecules = {};
 | 
			
		||||
module.exports.organisms = {};
 | 
			
		||||
module.exports.templates = {};
 | 
			
		||||
module.exports.pages = {};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue