| 
					
				 | 
			
			
				@@ -22,11 +22,12 @@ from PyQt5.QtWebKitWidgets import QWebPage, QWebView, QWebInspector 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import git 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from classes import server, compiler, design, content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from classes import server, sasscompiler, design, content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class Core(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    def __init__(self, parent=None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # restore previous preferences 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.appcwd = os.getcwd() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.restorePreferences() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self._mw = False 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -34,13 +35,15 @@ class Core(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # print(self.temp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.tempcwd = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      # if ther's not current project folder from restorepref 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      # initaite a new temp project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if(self.cwd == None or not os.path.isdir(self.cwd)): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          self.cwd = os.path.join(self.temp, 'cwd') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          self.tempcwd = True 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          self.initnewproject() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      self.server = server.Server(self.temp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      self.compiler = compiler.Compiler(self.temp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.server = server.Server(self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.sasscompiler = sasscompiler.Compiler(self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    def mainwindow(self): 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -61,6 +64,8 @@ class Core(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # print(settings.allKeys()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.cwd = settings.value('core/cwd', None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.dialog_path = settings.value('core/dialog_path', os.path.expanduser('~')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.mw_size = settings.value('mainwindow/size', QtCore.QSize(1024, 768)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.mw_pos = settings.value('mainwindow/pos', QtCore.QPoint(0, 0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.mw_curstack = int(settings.value('mainwindow/curstack', 0)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -74,6 +79,8 @@ class Core(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if not self.tempcwd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          settings.setValue('core/cwd', self.cwd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      settings.setValue('core/dialog_path', self.dialog_path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       settings.setValue('mainwindow/size', self._mw.size()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       settings.setValue('mainwindow/pos', self._mw.pos()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       settings.setValue('mainwindow/curstack', self._mw.mainstack.currentIndex()) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -82,7 +89,7 @@ class Core(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if cwd == None : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          cwd = self.cwd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       else : 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         self.cwd = cwd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self.changeCWD(cwd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       shutil.copytree('templates/newproject', cwd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.prefs = json.loads(open(os.path.join(cwd,'.config/prefs.json')).read()) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -94,11 +101,17 @@ class Core(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # TODO: embed project styles.scss to app scss frame work 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    def saveproject(self, cwd = None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if not cwd == None and self.tempcwd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if not cwd == None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          shutil.copytree(self.cwd, cwd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         self.cwd = cwd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          self.tempcwd = False 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         self._mw.setWindowTitle("Cascade – "+self.cwd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self.changeCWD(cwd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   def changeCWD(self, cwd): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.cwd = cwd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.server.reload() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.sasscompiler.reload() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      # if not self.tempcwd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self._mw.setWindowTitle("Cascade – "+self.cwd) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    def quit(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.savePreferences() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -113,7 +126,7 @@ class MainWindow(QMainWindow): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.core = core 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.setWindowTitle("Cascade") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      self.setWindowIcon(QIcon('assets/images/icon.png')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.setWindowIcon(QIcon(os.path.join(self.core.appcwd,'assets/images/icon.png'))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.resize(self.core.mw_size) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.move(self.core.mw_pos) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -140,8 +153,6 @@ class MainWindow(QMainWindow): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.save_action = QAction("&Save Project as",self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       self.save_action.setShortcut("Ctrl+Shift+s") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       file.addAction(self.save_action) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      # if not self.core.tempcwd: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      #    self.save_action.setEnabled(False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       quit = QAction("&Quit",self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       quit.setShortcut("Ctrl+q") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -151,12 +162,19 @@ class MainWindow(QMainWindow): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # edit menu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       edit = bar.addMenu("&Edit") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      edit.addAction("©") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      edit.addAction("&paste") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      # edit.addAction("©") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      # edit.addAction("&paste") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       edit.addAction("&build") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      edit.addAction("&reload") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.reload_action = QAction("&Reload",self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      self.reload_action.setShortcut("Ctrl+r") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      edit.addAction(self.reload_action) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       edit.addAction("&preferences") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      edit.triggered[QAction].connect(self.oneditmenutrigger) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # view menu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       view = bar.addMenu("&View") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -194,30 +212,49 @@ class MainWindow(QMainWindow): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       print("open") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    def newprojectdialogue(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      projectname = QFileDialog.getSaveFileName(self, 'New Project', '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dialog = QFileDialog() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dialog.setFileMode(QFileDialog.Directory) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dialog.setAcceptMode(QFileDialog.AcceptOpen) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      projectname = dialog.getSaveFileName( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         'New Project', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self.core.dialog_path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      )[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # TODO: no file type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         if not os.path.isdir(projectname[0]): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self.core.initnewproject(projectname[0]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         head, tail = os.path.split(projectname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self.core.dialog_path = head 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         if not os.path.isdir(projectname): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.core.initnewproject(projectname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             print("folder already exists") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # TODO: check if is cascade folder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       except Exception as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         print('Exception', e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    def saveprojectdialogue(self, quit=False): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      projectname = QFileDialog.getSaveFileName(self, 'Save Project', '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dialog = QFileDialog() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dialog.setFileMode(QFileDialog.Directory) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dialog.setAcceptMode(QFileDialog.AcceptOpen) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      projectname = dialog.getSaveFileName( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         'Save Project', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self.core.dialog_path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      )[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       # TODO: no file type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         if not os.path.isdir(projectname[0]): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self.core.saveproject(projectname[0]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            # self.save_action.setEnabled(False) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         head, tail = os.path.split(projectname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self.core.dialog_path = head 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         if not os.path.isdir(projectname): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.core.saveproject(projectname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if quit: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                self.quit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             print("folder already exists") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # TODO: check if is cascade folder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       except Exception as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         print('Exception', e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    def quit(self): 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -231,6 +268,13 @@ class MainWindow(QMainWindow): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          self.core.quit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   def oneditmenutrigger(self, q): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      print(q.text()+" is triggered") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if q.text() == "&Reload": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         self.designstack.webkitview.reload() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    def onviewmenutrigger(self, q): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       print(q.text()+" is triggered") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if q.text() == "&Design": 
			 |